feat: add theme palettes (#1326)
Add Neutral, Indigo, Forest, and Sand palettes independently of Light, Dark, and System. Persist and hydrate the selection, add the accessible settings picker, and include the validated review fixes for keyboard navigation and Swedish copy.
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import {
|
||||
DEFAULT_PALETTE,
|
||||
PALETTE_STORAGE_KEY,
|
||||
PALETTE_VALUES,
|
||||
isPalette,
|
||||
} from '@/lib/theme/palettes'
|
||||
|
||||
describe('palettes', () => {
|
||||
it('keeps neutral as the backward-compatible default', () => {
|
||||
expect(DEFAULT_PALETTE).toBe('neutral')
|
||||
expect(PALETTE_STORAGE_KEY).toBe('accounted-palette')
|
||||
})
|
||||
|
||||
it.each(PALETTE_VALUES)('accepts the %s palette', (palette) => {
|
||||
expect(isPalette(palette)).toBe(true)
|
||||
})
|
||||
|
||||
it.each([null, undefined, '', 'light', 'dark', 'sepia', 1])(
|
||||
'rejects unsupported palette value %s',
|
||||
(value) => {
|
||||
expect(isPalette(value)).toBe(false)
|
||||
},
|
||||
)
|
||||
})
|
||||
@@ -0,0 +1,10 @@
|
||||
export const PALETTE_VALUES = ['neutral', 'indigo', 'forest', 'sand'] as const
|
||||
|
||||
export type Palette = (typeof PALETTE_VALUES)[number]
|
||||
|
||||
export const DEFAULT_PALETTE: Palette = 'neutral'
|
||||
export const PALETTE_STORAGE_KEY = 'accounted-palette'
|
||||
|
||||
export function isPalette(value: unknown): value is Palette {
|
||||
return typeof value === 'string' && PALETTE_VALUES.includes(value as Palette)
|
||||
}
|
||||
Reference in New Issue
Block a user