From c11b0e8fdf74e82d277faf941009f18d6e18ac79 Mon Sep 17 00:00:00 2001 From: jellydeck <91427591+jellydeck@users.noreply.github.com> Date: Fri, 30 Jan 2026 16:17:07 +0530 Subject: [PATCH 1/2] accessible badges for light & dark theme --- app/assets/main.css | 23 ++++++++++++++++++++- app/components/VersionSelector.vue | 10 +++------- app/pages/docs/[...path].vue | 32 ++++++++++++++---------------- uno.config.ts | 19 ++++++++++++++++++ 4 files changed, 59 insertions(+), 25 deletions(-) diff --git a/app/assets/main.css b/app/assets/main.css index eaccb18ff3..7e3f141882 100644 --- a/app/assets/main.css +++ b/app/assets/main.css @@ -22,13 +22,25 @@ --border-subtle: oklch(0.239 0 0); --border-hover: oklch(0.371 0 0); + /* accent color, set by user from settings */ --accent: var(--accent-color, oklch(1 0 0)); --accent-muted: var(--accent-color, oklch(0.922 0 0)); + /* syntax highlighting colors */ --syntax-fn: oklch(0.727 0.137 299.149); --syntax-str: oklch(0.829 0.088 252.458); --syntax-kw: oklch(0.721 0.162 15.494); --syntax-comment: oklch(0.551 0.019 250.976); + + /* badge colors for background & text */ + --badge-orange: oklch(0.67 0.185 55); + --badge-yellow: oklch(0.588 0.183 91); + --badge-green: oklch(0.566 0.202 165); + --badge-cyan: oklch(0.571 0.181 210); + --badge-blue: oklch(0.579 0.191 252); + --badge-indigo: oklch(0.573 0.262 276.966); + --badge-purple: oklch(0.495 0.172 295); + --badge-pink: oklch(0.584 0.189 343); } :root[data-theme='light'] { @@ -49,9 +61,18 @@ --accent-muted: var(--accent-color, oklch(0.205 0 0)); --syntax-fn: oklch(0.502 0.188 294.988); - --syntax-str: oklch(0.54 0.191 257.481); + --syntax-str: oklch(0.425 0.152 252); --syntax-kw: oklch(0.588 0.193 20.469); --syntax-comment: oklch(0.551 0.019 250.976); + + --badge-blue: oklch(0.579 0.191 252); + --badge-yellow: oklch(0.588 0.183 91); + --badge-green: oklch(0.566 0.202 165); + --badge-indigo: oklch(0.457 0.24 277.023); + --badge-purple: oklch(0.495 0.172 295); + --badge-orange: oklch(0.67 0.185 55); + --badge-pink: oklch(0.584 0.189 343); + --badge-cyan: oklch(0.571 0.181 210); } html { diff --git a/app/components/VersionSelector.vue b/app/components/VersionSelector.vue index c704c2471b..010768d4c8 100644 --- a/app/components/VersionSelector.vue +++ b/app/components/VersionSelector.vue @@ -480,7 +480,7 @@ watch( {{ currentVersion }} latest @@ -567,12 +567,8 @@ watch( {{ tag }} diff --git a/app/pages/docs/[...path].vue b/app/pages/docs/[...path].vue index 92e75f8704..2401aabf1c 100644 --- a/app/pages/docs/[...path].vue +++ b/app/pages/docs/[...path].vue @@ -120,9 +120,7 @@ const showEmptyState = computed(() => docsData.value?.status !== 'ok')
- + API Docs
@@ -242,7 +240,7 @@ const showEmptyState = computed(() => docsData.value?.status !== 'ok') } .docs-content .docs-symbol:target .docs-symbol-header { - @apply bg-amber-500/10 -mx-3 px-3 py-1 rounded-md; + @apply bg-badge-yellow/10 -mx-3 px-3 py-1 rounded-md; } /* Symbol header (name + badges) */ @@ -264,28 +262,28 @@ const showEmptyState = computed(() => docsData.value?.status !== 'ok') } .docs-content .docs-badge--function { - @apply bg-blue-500/15 text-blue-400; + @apply badge-blue; } .docs-content .docs-badge--class { - @apply bg-amber-500/15 text-amber-400; + @apply badge-yellow; } .docs-content .docs-badge--interface { - @apply bg-emerald-500/15 text-emerald-400; + @apply badge-green; } .docs-content .docs-badge--typeAlias { - @apply bg-violet-500/15 text-violet-400; + @apply badge-indigo; } .docs-content .docs-badge--variable { - @apply bg-orange-500/15 text-orange-400; + @apply badge-orange; } .docs-content .docs-badge--enum { - @apply bg-pink-500/15 text-pink-400; + @apply badge-pink; } .docs-content .docs-badge--namespace { - @apply bg-cyan-500/15 text-cyan-400; + @apply badge-cyan; } .docs-content .docs-badge--async { - @apply bg-purple-500/15 text-purple-400; + @apply badge-purple; } /* Signature code block - now uses Shiki */ @@ -346,15 +344,15 @@ const showEmptyState = computed(() => docsData.value?.status !== 'ok') /* Deprecation warning */ .docs-content .docs-deprecated { - @apply bg-amber-500/10 border border-amber-500/20 rounded-lg p-4 mb-5; + @apply bg-badge-orange/20 border border-badge-orange rounded-lg p-4 mb-5; } .docs-content .docs-deprecated strong { - @apply text-amber-400 text-sm; + @apply text-badge-orange text-sm; } .docs-content .docs-deprecated p { - @apply text-amber-300/80 text-sm mt-2 mb-0; + @apply text-badge-orange text-sm mt-2 mb-0; } /* Parameters, Returns, Examples, See Also sections */ @@ -407,12 +405,12 @@ const showEmptyState = computed(() => docsData.value?.status !== 'ok') } .docs-content .docs-link { - @apply text-blue-400 hover:text-blue-300 underline underline-offset-2; + @apply text-badge-blue hover:text-badge-blue/80 underline underline-offset-2; } /* Symbol cross-reference links */ .docs-content .docs-symbol-link { - @apply text-emerald-400 hover:text-emerald-300 underline underline-offset-2; + @apply text-badge-green hover:text-badge-green/80 underline underline-offset-2; } /* Unknown symbol references shown as code */ diff --git a/uno.config.ts b/uno.config.ts index 6ccb010424..036dceb783 100644 --- a/uno.config.ts +++ b/uno.config.ts @@ -59,6 +59,16 @@ export default defineConfig({ kw: 'var(--syntax-kw)', comment: 'var(--syntax-comment)', }, + badge: { + orange: 'var(--badge-orange)', + yellow: 'var(--badge-yellow)', + green: 'var(--badge-green)', + cyan: 'var(--badge-cyan)', + blue: 'var(--badge-blue)', + indigo: 'var(--badge-indigo)', + purple: 'var(--badge-purple)', + pink: 'var(--badge-pink)', + }, // Playground provider brand colors provider: { stackblitz: '#1389FD', @@ -141,6 +151,15 @@ export default defineConfig({ 'tag', 'inline-flex items-center px-2 py-0.5 text-xs font-mono text-fg-muted bg-bg-muted border border-border rounded transition-colors duration-200 hover:(text-fg border-border-hover)', ], + ['badge-orange', 'bg-badge-orange/10 text-badge-orange'], + ['badge-yellow', 'bg-badge-yellow/10 text-badge-yellow'], + ['badge-green', 'bg-badge-green/10 text-badge-green'], + ['badge-cyan', 'bg-badge-cyan/10 text-badge-cyan'], + ['badge-blue', 'bg-badge-blue/10 text-badge-blue'], + ['badge-indigo', 'bg-badge-indigo/10 text-badge-indigo'], + ['badge-purple', 'bg-badge-purple/10 text-badge-purple'], + ['badge-pink', 'bg-badge-pink/10 text-badge-pink'], + ['badge-subtle', 'bg-bg-subtle text-fg-subtle'], // Code blocks [ From 1dcc5fc907a1ab2b4b81d36108dc407acf7b92e6 Mon Sep 17 00:00:00 2001 From: jellydeck <91427591+jellydeck@users.noreply.github.com> Date: Fri, 30 Jan 2026 16:31:17 +0530 Subject: [PATCH 2/2] update tests --- test/nuxt/components/VersionSelector.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/nuxt/components/VersionSelector.spec.ts b/test/nuxt/components/VersionSelector.spec.ts index 1736a078d4..034d450128 100644 --- a/test/nuxt/components/VersionSelector.spec.ts +++ b/test/nuxt/components/VersionSelector.spec.ts @@ -509,9 +509,9 @@ describe('VersionSelector', () => { // Find the latest tag span const latestTags = component.findAll('span').filter(s => s.text() === 'latest') expect(latestTags.length).toBeGreaterThan(0) - // Should have emerald styling - const hasEmeraldStyling = latestTags.some(t => t.classes().some(c => c.includes('emerald'))) - expect(hasEmeraldStyling).toBe(true) + // Should have green styling + const hasGreenStyling = latestTags.some(t => t.classes().some(c => c.includes('green'))) + expect(hasGreenStyling).toBe(true) }) })