@shiftbloom-studio/circadian-ui 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +97 -37
- package/dist/index.cjs +86 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -2
- package/dist/index.d.ts +7 -2
- package/dist/index.js +84 -40
- package/dist/index.js.map +1 -1
- package/dist/server.cjs +15 -8
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +2 -1
- package/dist/server.d.ts +2 -1
- package/dist/server.js +15 -8
- package/dist/server.js.map +1 -1
- package/package.json +14 -14
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/schedule.ts","../src/core/sun.ts","../src/core/tokens.ts","../src/core/contrast.ts","../src/core/storage.ts","../src/core/systemPrefs.ts","../src/core/resolve.ts","../src/core/script.ts","../src/react/CircadianProvider.tsx","../src/react/hooks.ts","../src/react/CircadianScript.tsx","../src/tailwind/preset.ts","../src/tailwind/plugin.ts"],"names":["window","minutesInDay","createContext","useState","useRef","useMemo","useCallback","useEffect","useContext","jsx"],"mappings":"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","file":"index.cjs","sourcesContent":["import { CircadianSchedule, Phase } from \"./types\";\n\nexport const defaultSchedule: CircadianSchedule = {\n dawn: { start: \"05:30\", end: \"08:30\" },\n day: { start: \"08:30\", end: \"17:30\" },\n dusk: { start: \"17:30\", end: \"21:30\" },\n night: { start: \"21:30\", end: \"05:30\" }\n};\n\nexport interface PhaseWindowMinutes {\n start: number;\n end: number;\n}\n\nexport type CircadianScheduleMinutes = Record<Phase, PhaseWindowMinutes>;\n\nconst minutesInDay = 24 * 60;\n\nexport const parseTimeToMinutes = (value: string): number => {\n const [hours, minutes] = value.split(\":\").map(Number);\n if (Number.isNaN(hours) || Number.isNaN(minutes)) {\n throw new Error(`Invalid time format: ${value}`);\n }\n return ((hours % 24) * 60 + minutes) % minutesInDay;\n};\n\nexport const normalizeSchedule = (\n schedule?: Partial<CircadianSchedule>\n): CircadianScheduleMinutes => {\n const merged: CircadianSchedule = {\n ...defaultSchedule,\n ...schedule,\n dawn: { ...defaultSchedule.dawn, ...schedule?.dawn },\n day: { ...defaultSchedule.day, ...schedule?.day },\n dusk: { ...defaultSchedule.dusk, ...schedule?.dusk },\n night: { ...defaultSchedule.night, ...schedule?.night }\n };\n\n return {\n dawn: {\n start: parseTimeToMinutes(merged.dawn.start),\n end: parseTimeToMinutes(merged.dawn.end)\n },\n day: {\n start: parseTimeToMinutes(merged.day.start),\n end: parseTimeToMinutes(merged.day.end)\n },\n dusk: {\n start: parseTimeToMinutes(merged.dusk.start),\n end: parseTimeToMinutes(merged.dusk.end)\n },\n night: {\n start: parseTimeToMinutes(merged.night.start),\n end: parseTimeToMinutes(merged.night.end)\n }\n };\n};\n\nexport const getMinutesFromDate = (date: Date): number => date.getHours() * 60 + date.getMinutes();\n\nconst isWithinRange = (minutes: number, start: number, end: number): boolean => {\n if (start === end) {\n return true;\n }\n if (start < end) {\n return minutes >= start && minutes < end;\n }\n return minutes >= start || minutes < end;\n};\n\nexport const getPhaseFromTime = (date: Date, schedule?: Partial<CircadianSchedule>): Phase => {\n const minutes = getMinutesFromDate(date);\n const normalized = normalizeSchedule(schedule);\n const phases: Phase[] = [\"dawn\", \"day\", \"dusk\", \"night\"];\n for (const phase of phases) {\n const window = normalized[phase];\n if (isWithinRange(minutes, window.start, window.end)) {\n return phase;\n }\n }\n return \"night\";\n};\n\nexport const computeNextTransition = (date: Date, schedule?: Partial<CircadianSchedule>): Date => {\n const normalized = normalizeSchedule(schedule);\n const currentPhase = getPhaseFromTime(date, schedule);\n const minutes = getMinutesFromDate(date);\n const endMinutes = normalized[currentPhase].end;\n let delta = endMinutes - minutes;\n if (delta <= 0) {\n delta += minutesInDay;\n }\n return new Date(date.getTime() + delta * 60 * 1000);\n};\n","import { CircadianSchedule } from \"./types\";\nimport { CircadianScheduleMinutes, getMinutesFromDate } from \"./schedule\";\nimport { Phase, SunScheduleOptions, SunTimes, SunTimesProvider } from \"./types\";\n\nconst minutesInDay = 24 * 60;\n\nexport const defaultSunSchedule: SunScheduleOptions = {\n dawnOffsetMinutesBefore: 45,\n dawnOffsetMinutesAfter: 45,\n duskOffsetMinutesBefore: 45,\n duskOffsetMinutesAfter: 45\n};\n\nconst normalizeMinutes = (value: number): number =>\n ((value % minutesInDay) + minutesInDay) % minutesInDay;\n\nexport const deriveSunSchedule = (\n date: Date,\n sunTimes: SunTimes,\n options?: Partial<SunScheduleOptions>\n): CircadianScheduleMinutes => {\n const config = { ...defaultSunSchedule, ...options };\n const sunriseMinutes = getMinutesFromDate(sunTimes.sunrise);\n const sunsetMinutes = getMinutesFromDate(sunTimes.sunset);\n\n const dawnStart = normalizeMinutes(sunriseMinutes - config.dawnOffsetMinutesBefore);\n const dawnEnd = normalizeMinutes(sunriseMinutes + config.dawnOffsetMinutesAfter);\n const duskStart = normalizeMinutes(sunsetMinutes - config.duskOffsetMinutesBefore);\n const duskEnd = normalizeMinutes(sunsetMinutes + config.duskOffsetMinutesAfter);\n\n return {\n dawn: { start: dawnStart, end: dawnEnd },\n day: { start: dawnEnd, end: duskStart },\n dusk: { start: duskStart, end: duskEnd },\n night: { start: duskEnd, end: dawnStart }\n };\n};\n\nexport const getPhaseFromSunTimes = (\n date: Date,\n sunTimes: SunTimes,\n options?: Partial<SunScheduleOptions>\n): Phase => {\n const schedule = deriveSunSchedule(date, sunTimes, options);\n const minutes = getMinutesFromDate(date);\n const phases: Phase[] = [\"dawn\", \"day\", \"dusk\", \"night\"];\n for (const phase of phases) {\n const window = schedule[phase];\n const start = window.start;\n const end = window.end;\n if (start === end) {\n return phase;\n }\n if (start < end && minutes >= start && minutes < end) {\n return phase;\n }\n if (start > end && (minutes >= start || minutes < end)) {\n return phase;\n }\n }\n return \"night\";\n};\n\nexport const getScheduleFromProvider = (\n date: Date,\n provider?: SunTimesProvider,\n options?: Partial<SunScheduleOptions>\n): CircadianSchedule | null => {\n if (!provider) {\n return null;\n }\n const sunTimes = provider(date);\n if (!sunTimes) {\n return null;\n }\n const schedule = deriveSunSchedule(date, sunTimes, options);\n const toTimeString = (minutes: number): string => {\n const normalized = normalizeMinutes(minutes);\n const hours = Math.floor(normalized / 60)\n .toString()\n .padStart(2, \"0\");\n const mins = (normalized % 60).toString().padStart(2, \"0\");\n return `${hours}:${mins}`;\n };\n return {\n dawn: {\n start: toTimeString(schedule.dawn.start),\n end: toTimeString(schedule.dawn.end)\n },\n day: {\n start: toTimeString(schedule.day.start),\n end: toTimeString(schedule.day.end)\n },\n dusk: {\n start: toTimeString(schedule.dusk.start),\n end: toTimeString(schedule.dusk.end)\n },\n night: {\n start: toTimeString(schedule.night.start),\n end: toTimeString(schedule.night.end)\n }\n };\n};\n","import { CircadianTokens, ColorSchemeBias, Phase } from \"./types\";\n\nexport const defaultTokens: Record<Phase, CircadianTokens> = {\n dawn: {\n bg: \"27 60% 96%\",\n fg: \"24 18% 18%\",\n muted: \"27 40% 90%\",\n mutedFg: \"24 14% 35%\",\n card: \"0 0% 100%\",\n cardFg: \"24 18% 18%\",\n border: \"24 22% 84%\",\n ring: \"20 65% 45%\",\n accent: \"20 80% 92%\",\n accentFg: \"20 40% 30%\",\n destructive: \"0 74% 55%\",\n destructiveFg: \"0 0% 100%\"\n },\n day: {\n bg: \"0 0% 100%\",\n fg: \"222 28% 14%\",\n muted: \"210 20% 96%\",\n mutedFg: \"215 16% 35%\",\n card: \"0 0% 100%\",\n cardFg: \"222 28% 14%\",\n border: \"214 20% 90%\",\n ring: \"220 65% 45%\",\n accent: \"220 90% 95%\",\n accentFg: \"220 45% 30%\",\n destructive: \"0 72% 55%\",\n destructiveFg: \"0 0% 100%\"\n },\n dusk: {\n bg: \"240 24% 14%\",\n fg: \"30 40% 95%\",\n muted: \"245 20% 22%\",\n mutedFg: \"30 20% 80%\",\n card: \"240 22% 16%\",\n cardFg: \"30 40% 95%\",\n border: \"245 16% 30%\",\n ring: \"32 70% 60%\",\n accent: \"32 55% 25%\",\n accentFg: \"32 70% 85%\",\n destructive: \"0 70% 55%\",\n destructiveFg: \"0 0% 100%\"\n },\n night: {\n bg: \"230 22% 10%\",\n fg: \"210 40% 96%\",\n muted: \"230 18% 16%\",\n mutedFg: \"210 20% 80%\",\n card: \"230 20% 12%\",\n cardFg: \"210 40% 96%\",\n border: \"230 16% 24%\",\n ring: \"210 80% 60%\",\n accent: \"210 35% 20%\",\n accentFg: \"210 50% 90%\",\n destructive: \"0 65% 55%\",\n destructiveFg: \"0 0% 100%\"\n }\n};\n\nexport const cssVarMap: Record<keyof CircadianTokens, string> = {\n bg: \"--cui-bg\",\n fg: \"--cui-fg\",\n muted: \"--cui-muted\",\n mutedFg: \"--cui-muted-fg\",\n card: \"--cui-card\",\n cardFg: \"--cui-card-fg\",\n border: \"--cui-border\",\n ring: \"--cui-ring\",\n accent: \"--cui-accent\",\n accentFg: \"--cui-accent-fg\",\n destructive: \"--cui-destructive\",\n destructiveFg: \"--cui-destructive-fg\"\n};\n\nexport const resolveTokens = (\n phase: Phase,\n overrides?: Partial<Record<Phase, Partial<CircadianTokens>>>\n): CircadianTokens => {\n return {\n ...defaultTokens[phase],\n ...overrides?.[phase]\n };\n};\n\nexport const tokensToCssVars = (tokens: CircadianTokens): Record<string, string> => {\n const vars: Record<string, string> = {};\n for (const [key, value] of Object.entries(tokens)) {\n const cssVar = cssVarMap[key as keyof CircadianTokens];\n vars[cssVar] = value;\n }\n return vars;\n};\n\nexport const applyTokensToElement = (element: HTMLElement, tokens: CircadianTokens) => {\n const vars = tokensToCssVars(tokens);\n for (const [key, value] of Object.entries(vars)) {\n element.style.setProperty(key, value);\n }\n};\n\nexport const applyColorSchemeBias = (\n tokens: CircadianTokens,\n prefers: \"dark\" | \"light\" | \"no-preference\",\n bias: ColorSchemeBias\n): CircadianTokens => {\n if (prefers === \"no-preference\") {\n return tokens;\n }\n const delta = prefers === \"dark\" ? bias.dark : bias.light;\n const adjust = (value: string): string => {\n const [h, s, l] = value.split(\" \");\n const lightness = Math.max(0, Math.min(100, Number(l.replace(\"%\", \"\")) + delta));\n return `${h} ${s} ${lightness}%`;\n };\n\n return {\n ...tokens,\n bg: adjust(tokens.bg),\n fg: adjust(tokens.fg),\n muted: adjust(tokens.muted),\n mutedFg: adjust(tokens.mutedFg),\n card: adjust(tokens.card),\n cardFg: adjust(tokens.cardFg),\n border: adjust(tokens.border),\n ring: adjust(tokens.ring),\n accent: adjust(tokens.accent),\n accentFg: adjust(tokens.accentFg),\n destructive: adjust(tokens.destructive),\n destructiveFg: adjust(tokens.destructiveFg)\n };\n};\n","import { CircadianTokens } from \"./types\";\n\nexport interface ContrastOptions {\n minimumRatio: number;\n preferPreserveHue: boolean;\n maxIterations: number;\n}\n\nconst clamp = (value: number, min = 0, max = 100) => Math.min(max, Math.max(min, value));\n\nconst parseHsl = (value: string): [number, number, number] => {\n const [h, s, l] = value.split(\" \");\n return [Number(h), Number(s.replace(\"%\", \"\")) / 100, Number(l.replace(\"%\", \"\")) / 100];\n};\n\nconst hslToRgb = (h: number, s: number, l: number): [number, number, number] => {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (h >= 0 && h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n\n return [r + m, g + m, b + m];\n};\n\nconst relativeLuminance = (hsl: string): number => {\n const [h, s, l] = parseHsl(hsl);\n const [r, g, b] = hslToRgb(h, s, l).map((channel) => {\n const linear = channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n return linear;\n });\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n};\n\nexport const contrastRatio = (foreground: string, background: string): number => {\n const lum1 = relativeLuminance(foreground);\n const lum2 = relativeLuminance(background);\n const lighter = Math.max(lum1, lum2);\n const darker = Math.min(lum1, lum2);\n return (lighter + 0.05) / (darker + 0.05);\n};\n\nconst adjustLightness = (value: string, delta: number): string => {\n const [h, s, l] = value.split(\" \");\n const lightness = clamp(Number(l.replace(\"%\", \"\")) + delta);\n return `${h} ${s} ${lightness}%`;\n};\n\nconst ensurePairContrast = (\n background: string,\n foreground: string,\n options: ContrastOptions\n): string => {\n let current = foreground;\n if (contrastRatio(current, background) >= options.minimumRatio) {\n return current;\n }\n\n const foregroundLum = relativeLuminance(foreground);\n const backgroundLum = relativeLuminance(background);\n const moveDarker = foregroundLum < backgroundLum;\n const step = moveDarker ? -2 : 2;\n\n for (let i = 0; i < options.maxIterations; i += 1) {\n current = adjustLightness(current, step);\n if (contrastRatio(current, background) >= options.minimumRatio) {\n return current;\n }\n }\n\n return current;\n};\n\nexport const ensureContrast = (\n tokens: CircadianTokens,\n options: ContrastOptions\n): CircadianTokens => {\n return {\n ...tokens,\n fg: ensurePairContrast(tokens.bg, tokens.fg, options),\n mutedFg: ensurePairContrast(tokens.muted, tokens.mutedFg, options),\n cardFg: ensurePairContrast(tokens.card, tokens.cardFg, options),\n accentFg: ensurePairContrast(tokens.accent, tokens.accentFg, options),\n destructiveFg: ensurePairContrast(tokens.destructive, tokens.destructiveFg, options)\n };\n};\n","import { PersistedState } from \"./types\";\n\nexport const defaultStorageKey = \"cui:preferences\";\n\nconst hasStorage = (): boolean =>\n typeof window !== \"undefined\" && typeof window.localStorage !== \"undefined\";\n\nexport const loadPersistedState = (key: string = defaultStorageKey): PersistedState | null => {\n if (!hasStorage()) {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) {\n return null;\n }\n return JSON.parse(raw) as PersistedState;\n } catch {\n return null;\n }\n};\n\nexport const persistState = (state: PersistedState, key: string = defaultStorageKey): void => {\n if (!hasStorage()) {\n return;\n }\n try {\n window.localStorage.setItem(key, JSON.stringify(state));\n } catch {\n // Ignore write errors\n }\n};\n\nexport const clearPersistedState = (key: string = defaultStorageKey): void => {\n if (!hasStorage()) {\n return;\n }\n try {\n window.localStorage.removeItem(key);\n } catch {\n // Ignore cleanup errors\n }\n};\n","import { SystemPreferences } from \"./types\";\n\nconst getPreference = (query: string): MediaQueryList | null => {\n if (typeof window === \"undefined\" || !window.matchMedia) {\n return null;\n }\n return window.matchMedia(query);\n};\n\nexport const getSystemPreferences = (): SystemPreferences => {\n const colorScheme = getPreference(\"(prefers-color-scheme: dark)\");\n const lightScheme = getPreference(\"(prefers-color-scheme: light)\");\n const contrastMore = getPreference(\"(prefers-contrast: more)\");\n const contrastLess = getPreference(\"(prefers-contrast: less)\");\n const reduceMotion = getPreference(\"(prefers-reduced-motion: reduce)\");\n\n return {\n prefersColorScheme: colorScheme?.matches\n ? \"dark\"\n : lightScheme?.matches\n ? \"light\"\n : \"no-preference\",\n prefersContrast: contrastMore?.matches\n ? \"more\"\n : contrastLess?.matches\n ? \"less\"\n : \"no-preference\",\n reducedMotion: Boolean(reduceMotion?.matches)\n };\n};\n\nexport const subscribeSystemPreferences = (\n handler: (prefs: SystemPreferences) => void\n): (() => void) => {\n if (typeof window === \"undefined\" || !window.matchMedia) {\n return () => undefined;\n }\n\n const notify = () => handler(getSystemPreferences());\n const mediaQueries = [\n \"(prefers-color-scheme: dark)\",\n \"(prefers-color-scheme: light)\",\n \"(prefers-contrast: more)\",\n \"(prefers-contrast: less)\",\n \"(prefers-reduced-motion: reduce)\"\n ];\n\n const listeners = mediaQueries.map((query) => {\n const list = window.matchMedia(query);\n const listener = () => notify();\n if (list.addEventListener) {\n list.addEventListener(\"change\", listener);\n } else {\n list.addListener(listener);\n }\n return { list, listener };\n });\n\n return () => {\n for (const { list, listener } of listeners) {\n if (list.removeEventListener) {\n list.removeEventListener(\"change\", listener);\n } else {\n list.removeListener(listener);\n }\n }\n };\n};\n","import { AccessibilityOptions, CircadianConfig, ScheduleMode, SystemPreferences } from \"./types\";\n\nexport const defaultAccessibility: AccessibilityOptions = {\n enforceContrast: true,\n minimumRatio: 4.5,\n largeTextRatio: 3,\n preferPreserveHue: true,\n maxIterations: 24\n};\n\nexport const defaultSystemOptions = {\n respectColorScheme: true,\n respectContrastPreference: true,\n respectReducedMotion: true\n};\n\nexport const defaultColorSchemeBias = {\n dark: -8,\n light: 8\n};\n\nexport const defaultTransition = {\n enabled: false,\n durationMs: 200\n};\n\nexport const resolveMode = (\n userMode: ScheduleMode | undefined,\n system: SystemPreferences,\n config?: CircadianConfig\n): ScheduleMode => {\n return userMode ?? config?.mode ?? \"time\";\n};\n\nexport const resolveAccessibility = (\n system: SystemPreferences,\n config?: CircadianConfig\n): AccessibilityOptions => {\n const base = { ...defaultAccessibility, ...config?.accessibility };\n if (config?.system?.respectContrastPreference !== false) {\n if (system.prefersContrast === \"more\") {\n base.minimumRatio = Math.max(base.minimumRatio, 7);\n }\n if (system.prefersContrast === \"less\") {\n base.minimumRatio = Math.min(base.minimumRatio, 3);\n }\n }\n return base;\n};\n","import { CircadianConfig, CircadianSchedule, Phase, ScheduleMode } from \"./types\";\nimport { defaultSchedule } from \"./schedule\";\nimport { defaultStorageKey } from \"./storage\";\nimport { defaultTokens, tokensToCssVars } from \"./tokens\";\n\nconst serialize = (value: unknown): string => JSON.stringify(value);\n\nconst getMergedSchedule = (schedule?: Partial<CircadianSchedule>): CircadianSchedule => ({\n ...defaultSchedule,\n ...schedule,\n dawn: { ...defaultSchedule.dawn, ...schedule?.dawn },\n day: { ...defaultSchedule.day, ...schedule?.day },\n dusk: { ...defaultSchedule.dusk, ...schedule?.dusk },\n night: { ...defaultSchedule.night, ...schedule?.night }\n});\n\nconst getMode = (mode?: ScheduleMode): ScheduleMode => mode ?? \"time\";\n\nexport const createInlineScript = (config?: CircadianConfig): string => {\n const schedule = getMergedSchedule(config?.schedule);\n const storageKey = config?.storageKey ?? defaultStorageKey;\n const persist = config?.persist !== false;\n const tokens = {\n dawn: tokensToCssVars({\n ...defaultTokens.dawn,\n ...config?.tokens?.dawn\n }),\n day: tokensToCssVars({\n ...defaultTokens.day,\n ...config?.tokens?.day\n }),\n dusk: tokensToCssVars({\n ...defaultTokens.dusk,\n ...config?.tokens?.dusk\n }),\n night: tokensToCssVars({\n ...defaultTokens.night,\n ...config?.tokens?.night\n })\n };\n\n return `(() => {\n try {\n const schedule = ${serialize(schedule)};\n const tokens = ${serialize(tokens)};\n const storageKey = ${serialize(storageKey)};\n const persist = ${serialize(persist)};\n const fallbackMode = ${serialize(getMode(config?.mode))};\n const now = new Date();\n const minutes = now.getHours() * 60 + now.getMinutes();\n\n const isWithin = (value, start, end) => {\n if (start === end) return true;\n if (start < end) return value >= start && value < end;\n return value >= start || value < end;\n };\n\n const parse = (time) => {\n const [h, m] = time.split(\":\").map(Number);\n return ((h % 24) * 60 + m) % 1440;\n };\n\n const normalized = {\n dawn: { start: parse(schedule.dawn.start), end: parse(schedule.dawn.end) },\n day: { start: parse(schedule.day.start), end: parse(schedule.day.end) },\n dusk: { start: parse(schedule.dusk.start), end: parse(schedule.dusk.end) },\n night: { start: parse(schedule.night.start), end: parse(schedule.night.end) }\n };\n\n const order = [\"dawn\", \"day\", \"dusk\", \"night\"];\n let phase = \"night\";\n for (const key of order) {\n const window = normalized[key];\n if (isWithin(minutes, window.start, window.end)) {\n phase = key;\n break;\n }\n }\n\n let mode = fallbackMode;\n const persisted = persist && window.localStorage ? window.localStorage.getItem(storageKey) : null;\n if (persisted) {\n try {\n const parsed = JSON.parse(persisted);\n if (parsed.mode) mode = parsed.mode;\n if (parsed.phase) phase = parsed.phase;\n } catch {\n // ignore\n }\n }\n\n const root = document.documentElement;\n root.setAttribute(\"data-cui-phase\", phase);\n const vars = tokens[phase] || tokens.night;\n for (const key in vars) {\n root.style.setProperty(key, vars[key]);\n }\n } catch {\n // ignore\n }\n})();`;\n};\n\nexport const resolveInitialPhase = (date: Date, schedule?: Partial<CircadianSchedule>): Phase => {\n const merged = getMergedSchedule(schedule);\n const minutes = date.getHours() * 60 + date.getMinutes();\n const isWithin = (value: number, start: number, end: number) => {\n if (start === end) return true;\n if (start < end) return value >= start && value < end;\n return value >= start || value < end;\n };\n const parse = (time: string) => {\n const [h, m] = time.split(\":\").map(Number);\n return ((h % 24) * 60 + m) % 1440;\n };\n const order: Phase[] = [\"dawn\", \"day\", \"dusk\", \"night\"];\n for (const phase of order) {\n const window = merged[phase];\n if (isWithin(minutes, parse(window.start), parse(window.end))) {\n return phase;\n }\n }\n return \"night\";\n};\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode\n} from \"react\";\nimport {\n CircadianConfig,\n CircadianState,\n Phase,\n ScheduleMode,\n SystemPreferences\n} from \"../core/types\";\nimport { getPhaseFromTime, computeNextTransition } from \"../core/schedule\";\nimport { getPhaseFromSunTimes, getScheduleFromProvider } from \"../core/sun\";\nimport { applyColorSchemeBias, applyTokensToElement, resolveTokens } from \"../core/tokens\";\nimport { ensureContrast } from \"../core/contrast\";\nimport { loadPersistedState, persistState } from \"../core/storage\";\nimport { getSystemPreferences, subscribeSystemPreferences } from \"../core/systemPrefs\";\nimport {\n defaultColorSchemeBias,\n defaultSystemOptions,\n defaultTransition,\n resolveAccessibility,\n resolveMode\n} from \"../core/resolve\";\n\nexport interface CircadianContextValue extends CircadianState {\n setMode: (mode: ScheduleMode) => void;\n setPhaseOverride: (phase: Phase) => void;\n clearOverride: () => void;\n isAuto: boolean;\n}\n\nconst CircadianContext = createContext<CircadianContextValue | null>(null);\n\nconst getRootElement = (target: CircadianConfig[\"setAttributeOn\"]): HTMLElement => {\n if (typeof document === \"undefined\") {\n return {} as HTMLElement;\n }\n return target === \"body\" ? document.body : document.documentElement;\n};\n\nconst getInitialSystemPreferences = (): SystemPreferences => {\n if (typeof window === \"undefined\") {\n return {\n prefersColorScheme: \"no-preference\",\n prefersContrast: \"no-preference\",\n reducedMotion: false\n };\n }\n return getSystemPreferences();\n};\n\nconst computePhase = (\n date: Date,\n mode: ScheduleMode,\n config: CircadianConfig,\n phaseOverride: Phase | null\n): Phase => {\n if (mode === \"manual\" && phaseOverride) {\n return phaseOverride;\n }\n if (mode === \"sun\") {\n const sunTimes = config.sunTimesProvider?.(date);\n if (sunTimes) {\n return getPhaseFromSunTimes(date, sunTimes, config.sunSchedule);\n }\n }\n return getPhaseFromTime(date, config.schedule);\n};\n\nconst computeNextChange = (\n date: Date,\n mode: ScheduleMode,\n config: CircadianConfig\n): Date | null => {\n if (mode === \"manual\") {\n return null;\n }\n if (mode === \"sun\") {\n const schedule = getScheduleFromProvider(date, config.sunTimesProvider, config.sunSchedule);\n if (schedule) {\n return computeNextTransition(date, schedule);\n }\n }\n return computeNextTransition(date, config.schedule);\n};\n\nexport interface CircadianProviderProps {\n config?: CircadianConfig;\n children: ReactNode;\n}\n\nexport const CircadianProvider = ({ config = {}, children }: CircadianProviderProps) => {\n const storageKey = config.storageKey;\n const shouldPersist = config.persist !== false;\n const [systemPrefs, setSystemPrefs] = useState<SystemPreferences>(getInitialSystemPreferences);\n\n const initialPersisted =\n typeof window !== \"undefined\" && shouldPersist ? loadPersistedState(storageKey) : null;\n\n const [mode, setModeState] = useState<ScheduleMode>(\n initialPersisted?.mode ?? config.mode ?? \"time\"\n );\n const [phaseOverride, setPhaseOverrideState] = useState<Phase | null>(\n initialPersisted?.phase ?? null\n );\n\n const [phase, setPhase] = useState<Phase>(() =>\n computePhase(new Date(), mode, config, phaseOverride)\n );\n\n const [nextChangeAt, setNextChangeAt] = useState<Date | null>(() =>\n computeNextChange(new Date(), mode, config)\n );\n\n const timerRef = useRef<number | null>(null);\n\n const accessibility = useMemo(\n () => resolveAccessibility(systemPrefs, config),\n [systemPrefs, config]\n );\n\n const transition = { ...defaultTransition, ...config.transition };\n const systemOptions = { ...defaultSystemOptions, ...config.system };\n const colorBias = { ...defaultColorSchemeBias, ...config.colorSchemeBias };\n\n const tokens = useMemo(() => {\n let resolved = resolveTokens(phase, config.tokens);\n if (systemOptions.respectColorScheme) {\n resolved = applyColorSchemeBias(resolved, systemPrefs.prefersColorScheme, colorBias);\n }\n if (accessibility.enforceContrast) {\n resolved = ensureContrast(resolved, accessibility);\n }\n return resolved;\n }, [\n phase,\n config.tokens,\n systemPrefs.prefersColorScheme,\n accessibility,\n systemOptions.respectColorScheme,\n colorBias\n ]);\n\n const updatePhase = useCallback(() => {\n const now = new Date();\n const resolvedMode = resolveMode(mode, systemPrefs, config);\n const nextPhase = computePhase(now, resolvedMode, config, phaseOverride);\n setPhase(nextPhase);\n setNextChangeAt(computeNextChange(now, resolvedMode, config));\n }, [mode, systemPrefs, config, phaseOverride]);\n\n useEffect(() => {\n updatePhase();\n }, [updatePhase]);\n\n useEffect(() => {\n if (mode === \"manual\") {\n return;\n }\n if (timerRef.current) {\n window.clearTimeout(timerRef.current);\n }\n if (!nextChangeAt) {\n return;\n }\n const delay = Math.max(0, nextChangeAt.getTime() - Date.now() + 500);\n timerRef.current = window.setTimeout(() => {\n updatePhase();\n }, delay);\n return () => {\n if (timerRef.current) {\n window.clearTimeout(timerRef.current);\n }\n };\n }, [mode, nextChangeAt, updatePhase]);\n\n useEffect(() => {\n const root = getRootElement(config.setAttributeOn);\n if (!root || !root.style) {\n return;\n }\n root.setAttribute(\"data-cui-phase\", phase);\n const allowMotion = !systemPrefs.reducedMotion || !systemOptions.respectReducedMotion;\n if (transition.enabled && allowMotion) {\n root.style.transition = `background-color ${transition.durationMs}ms ease, color ${transition.durationMs}ms ease`;\n } else {\n root.style.transition = \"\";\n }\n applyTokensToElement(root, tokens);\n }, [\n phase,\n tokens,\n transition,\n systemPrefs.reducedMotion,\n systemOptions.respectReducedMotion,\n config.setAttributeOn\n ]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n return subscribeSystemPreferences(setSystemPrefs);\n }, []);\n\n useEffect(() => {\n if (!shouldPersist) {\n return;\n }\n persistState(\n {\n mode,\n phase: phaseOverride\n },\n storageKey\n );\n }, [mode, phaseOverride, shouldPersist, storageKey]);\n\n const setMode = useCallback(\n (nextMode: ScheduleMode) => {\n setModeState(nextMode);\n if (nextMode === \"manual\" && !phaseOverride) {\n setPhaseOverrideState(phase);\n }\n },\n [phase, phaseOverride]\n );\n\n const setPhaseOverride = useCallback((nextPhase: Phase) => {\n setPhaseOverrideState(nextPhase);\n setModeState(\"manual\");\n }, []);\n\n const clearOverride = useCallback(() => {\n setPhaseOverrideState(null);\n setModeState(\"time\");\n }, []);\n\n const contextValue = useMemo<CircadianContextValue>(\n () => ({\n phase,\n mode,\n tokens,\n nextChangeAt,\n setMode,\n setPhaseOverride,\n clearOverride,\n isAuto: mode !== \"manual\"\n }),\n [phase, mode, tokens, nextChangeAt, setMode, setPhaseOverride, clearOverride]\n );\n\n return <CircadianContext.Provider value={contextValue}>{children}</CircadianContext.Provider>;\n};\n\nexport const useCircadianContext = () => {\n const context = useContext(CircadianContext);\n if (!context) {\n throw new Error(\"useCircadian must be used within a CircadianProvider\");\n }\n return context;\n};\n","import { useMemo } from \"react\";\nimport { useCircadianContext } from \"./CircadianProvider\";\nimport { tokensToCssVars } from \"../core/tokens\";\n\nexport const useCircadian = () => useCircadianContext();\n\nexport const useCircadianTokens = () => {\n const { tokens } = useCircadianContext();\n const cssVars = useMemo(() => tokensToCssVars(tokens), [tokens]);\n const applyToStyle = useMemo(\n () => ({\n style: Object.fromEntries(Object.entries(cssVars).map(([key, value]) => [key, value]))\n }),\n [cssVars]\n );\n\n return { tokens, cssVars, applyToStyle };\n};\n","import { useMemo } from \"react\";\nimport { CircadianConfig } from \"../core/types\";\nimport { createInlineScript } from \"../core/script\";\n\nexport interface CircadianScriptProps {\n config?: CircadianConfig;\n nonce?: string;\n}\n\nexport const CircadianScript = ({ config, nonce }: CircadianScriptProps) => {\n const script = useMemo(() => createInlineScript(config), [config]);\n return <script nonce={nonce} dangerouslySetInnerHTML={{ __html: script }} />;\n};\n","import { cssVarMap } from \"../core/tokens\";\n\nconst toColor = (cssVar: string) => `hsl(var(${cssVar}) / <alpha-value>)`;\n\nexport const circadianTailwindPreset = () => {\n return {\n theme: {\n extend: {\n colors: {\n background: toColor(cssVarMap.bg),\n foreground: toColor(cssVarMap.fg),\n muted: toColor(cssVarMap.muted),\n \"muted-foreground\": toColor(cssVarMap.mutedFg),\n card: toColor(cssVarMap.card),\n \"card-foreground\": toColor(cssVarMap.cardFg),\n border: toColor(cssVarMap.border),\n ring: toColor(cssVarMap.ring),\n accent: toColor(cssVarMap.accent),\n \"accent-foreground\": toColor(cssVarMap.accentFg),\n destructive: toColor(cssVarMap.destructive),\n \"destructive-foreground\": toColor(cssVarMap.destructiveFg)\n }\n }\n }\n };\n};\n","import { defaultTokens, tokensToCssVars } from \"../core/tokens\";\n\ninterface TailwindPluginApi {\n addBase: (styles: Record<string, Record<string, string>>) => void;\n}\n\nexport const circadianPlugin = () => {\n return ({ addBase }: TailwindPluginApi) => {\n addBase({\n \":root\": tokensToCssVars(defaultTokens.day),\n \"[data-cui-phase='dawn']\": tokensToCssVars(defaultTokens.dawn),\n \"[data-cui-phase='day']\": tokensToCssVars(defaultTokens.day),\n \"[data-cui-phase='dusk']\": tokensToCssVars(defaultTokens.dusk),\n \"[data-cui-phase='night']\": tokensToCssVars(defaultTokens.night)\n });\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/schedule.ts","../src/core/sun.ts","../src/core/tokens.ts","../src/core/contrast.ts","../src/core/storage.ts","../src/core/systemPrefs.ts","../src/core/resolve.ts","../src/core/script.ts","../src/react/CircadianProvider.tsx","../src/react/hooks.ts","../src/react/CircadianScript.tsx","../src/tailwind/preset.ts","../src/tailwind/plugin.ts"],"names":["window","minutesInDay","createContext","useState","useRef","useMemo","useCallback","resolvedMode","useEffect","useContext","jsx"],"mappings":"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","file":"index.cjs","sourcesContent":["import { CircadianSchedule, Phase } from \"./types\";\n\nexport const defaultSchedule: CircadianSchedule = {\n dawn: { start: \"05:30\", end: \"08:30\" },\n day: { start: \"08:30\", end: \"17:30\" },\n dusk: { start: \"17:30\", end: \"21:30\" },\n night: { start: \"21:30\", end: \"05:30\" }\n};\n\nexport interface PhaseWindowMinutes {\n start: number;\n end: number;\n}\n\nexport type CircadianScheduleMinutes = Record<Phase, PhaseWindowMinutes>;\n\nconst minutesInDay = 24 * 60;\n\nexport const parseTimeToMinutes = (value: string): number => {\n const [hours, minutes] = value.split(\":\").map(Number);\n if (Number.isNaN(hours) || Number.isNaN(minutes)) {\n throw new Error(`Invalid time format: ${value}`);\n }\n return ((hours % 24) * 60 + minutes) % minutesInDay;\n};\n\nexport const normalizeSchedule = (\n schedule?: Partial<CircadianSchedule>\n): CircadianScheduleMinutes => {\n const merged: CircadianSchedule = {\n ...defaultSchedule,\n ...schedule,\n dawn: { ...defaultSchedule.dawn, ...schedule?.dawn },\n day: { ...defaultSchedule.day, ...schedule?.day },\n dusk: { ...defaultSchedule.dusk, ...schedule?.dusk },\n night: { ...defaultSchedule.night, ...schedule?.night }\n };\n\n return {\n dawn: {\n start: parseTimeToMinutes(merged.dawn.start),\n end: parseTimeToMinutes(merged.dawn.end)\n },\n day: {\n start: parseTimeToMinutes(merged.day.start),\n end: parseTimeToMinutes(merged.day.end)\n },\n dusk: {\n start: parseTimeToMinutes(merged.dusk.start),\n end: parseTimeToMinutes(merged.dusk.end)\n },\n night: {\n start: parseTimeToMinutes(merged.night.start),\n end: parseTimeToMinutes(merged.night.end)\n }\n };\n};\n\nexport const getMinutesFromDate = (date: Date): number => date.getHours() * 60 + date.getMinutes();\n\nconst isWithinRange = (minutes: number, start: number, end: number): boolean => {\n if (start === end) {\n return true;\n }\n if (start < end) {\n return minutes >= start && minutes < end;\n }\n return minutes >= start || minutes < end;\n};\n\nexport const getPhaseFromMinutes = (\n minutes: number,\n schedule: CircadianScheduleMinutes\n): Phase => {\n const phases: Phase[] = [\"dawn\", \"day\", \"dusk\", \"night\"];\n for (const phase of phases) {\n const window = schedule[phase];\n if (isWithinRange(minutes, window.start, window.end)) {\n return phase;\n }\n }\n return \"night\";\n};\n\nexport const getPhaseFromTime = (date: Date, schedule?: Partial<CircadianSchedule>): Phase => {\n const minutes = getMinutesFromDate(date);\n const normalized = normalizeSchedule(schedule);\n return getPhaseFromMinutes(minutes, normalized);\n};\n\nexport const computeNextTransition = (date: Date, schedule?: Partial<CircadianSchedule>): Date => {\n const normalized = normalizeSchedule(schedule);\n const currentPhase = getPhaseFromMinutes(getMinutesFromDate(date), normalized);\n const minutes = getMinutesFromDate(date);\n const endMinutes = normalized[currentPhase].end;\n let delta = endMinutes - minutes;\n if (delta <= 0) {\n delta += minutesInDay;\n }\n return new Date(date.getTime() + delta * 60 * 1000);\n};\n\nexport const computeNextTransitionFromMinutes = (\n date: Date,\n schedule: CircadianScheduleMinutes\n): Date => {\n const currentPhase = getPhaseFromMinutes(getMinutesFromDate(date), schedule);\n const minutes = getMinutesFromDate(date);\n const endMinutes = schedule[currentPhase].end;\n let delta = endMinutes - minutes;\n if (delta <= 0) {\n delta += minutesInDay;\n }\n return new Date(date.getTime() + delta * 60 * 1000);\n};\n","import { CircadianSchedule } from \"./types\";\nimport {\n CircadianScheduleMinutes,\n computeNextTransitionFromMinutes,\n getMinutesFromDate\n} from \"./schedule\";\nimport { Phase, SunScheduleOptions, SunTimes, SunTimesProvider } from \"./types\";\n\nconst minutesInDay = 24 * 60;\n\nexport const defaultSunSchedule: SunScheduleOptions = {\n dawnOffsetMinutesBefore: 45,\n dawnOffsetMinutesAfter: 45,\n duskOffsetMinutesBefore: 45,\n duskOffsetMinutesAfter: 45\n};\n\nconst normalizeMinutes = (value: number): number =>\n ((value % minutesInDay) + minutesInDay) % minutesInDay;\n\nexport const deriveSunSchedule = (\n date: Date,\n sunTimes: SunTimes,\n options?: Partial<SunScheduleOptions>\n): CircadianScheduleMinutes => {\n const config = { ...defaultSunSchedule, ...options };\n const sunriseMinutes = getMinutesFromDate(sunTimes.sunrise);\n const sunsetMinutes = getMinutesFromDate(sunTimes.sunset);\n\n const dawnStart = normalizeMinutes(sunriseMinutes - config.dawnOffsetMinutesBefore);\n const dawnEnd = normalizeMinutes(sunriseMinutes + config.dawnOffsetMinutesAfter);\n const duskStart = normalizeMinutes(sunsetMinutes - config.duskOffsetMinutesBefore);\n const duskEnd = normalizeMinutes(sunsetMinutes + config.duskOffsetMinutesAfter);\n\n return {\n dawn: { start: dawnStart, end: dawnEnd },\n day: { start: dawnEnd, end: duskStart },\n dusk: { start: duskStart, end: duskEnd },\n night: { start: duskEnd, end: dawnStart }\n };\n};\n\nexport const getPhaseFromSunTimes = (\n date: Date,\n sunTimes: SunTimes,\n options?: Partial<SunScheduleOptions>\n): Phase => {\n const schedule = deriveSunSchedule(date, sunTimes, options);\n const minutes = getMinutesFromDate(date);\n const phases: Phase[] = [\"dawn\", \"day\", \"dusk\", \"night\"];\n for (const phase of phases) {\n const window = schedule[phase];\n const start = window.start;\n const end = window.end;\n if (start === end) {\n return phase;\n }\n if (start < end && minutes >= start && minutes < end) {\n return phase;\n }\n if (start > end && (minutes >= start || minutes < end)) {\n return phase;\n }\n }\n return \"night\";\n};\n\nexport const computeNextSunTransition = (\n date: Date,\n sunTimes: SunTimes,\n options?: Partial<SunScheduleOptions>\n): Date => {\n const schedule = deriveSunSchedule(date, sunTimes, options);\n return computeNextTransitionFromMinutes(date, schedule);\n};\n\nexport const getScheduleFromProvider = (\n date: Date,\n provider?: SunTimesProvider,\n options?: Partial<SunScheduleOptions>\n): CircadianSchedule | null => {\n if (!provider) {\n return null;\n }\n const sunTimes = provider(date);\n if (!sunTimes) {\n return null;\n }\n const schedule = deriveSunSchedule(date, sunTimes, options);\n const toTimeString = (minutes: number): string => {\n const normalized = normalizeMinutes(minutes);\n const hours = Math.floor(normalized / 60)\n .toString()\n .padStart(2, \"0\");\n const mins = (normalized % 60).toString().padStart(2, \"0\");\n return `${hours}:${mins}`;\n };\n return {\n dawn: {\n start: toTimeString(schedule.dawn.start),\n end: toTimeString(schedule.dawn.end)\n },\n day: {\n start: toTimeString(schedule.day.start),\n end: toTimeString(schedule.day.end)\n },\n dusk: {\n start: toTimeString(schedule.dusk.start),\n end: toTimeString(schedule.dusk.end)\n },\n night: {\n start: toTimeString(schedule.night.start),\n end: toTimeString(schedule.night.end)\n }\n };\n};\n","import { CircadianTokens, ColorSchemeBias, Phase } from \"./types\";\n\nexport const defaultTokens: Record<Phase, CircadianTokens> = {\n dawn: {\n bg: \"27 60% 96%\",\n fg: \"24 18% 18%\",\n muted: \"27 40% 90%\",\n mutedFg: \"24 14% 35%\",\n card: \"0 0% 100%\",\n cardFg: \"24 18% 18%\",\n border: \"24 22% 84%\",\n ring: \"20 65% 45%\",\n accent: \"20 80% 92%\",\n accentFg: \"20 40% 30%\",\n destructive: \"0 74% 55%\",\n destructiveFg: \"0 0% 100%\"\n },\n day: {\n bg: \"0 0% 100%\",\n fg: \"222 28% 14%\",\n muted: \"210 20% 96%\",\n mutedFg: \"215 16% 35%\",\n card: \"0 0% 100%\",\n cardFg: \"222 28% 14%\",\n border: \"214 20% 90%\",\n ring: \"220 65% 45%\",\n accent: \"220 90% 95%\",\n accentFg: \"220 45% 30%\",\n destructive: \"0 72% 55%\",\n destructiveFg: \"0 0% 100%\"\n },\n dusk: {\n bg: \"240 24% 14%\",\n fg: \"30 40% 95%\",\n muted: \"245 20% 22%\",\n mutedFg: \"30 20% 80%\",\n card: \"240 22% 16%\",\n cardFg: \"30 40% 95%\",\n border: \"245 16% 30%\",\n ring: \"32 70% 60%\",\n accent: \"32 55% 25%\",\n accentFg: \"32 70% 85%\",\n destructive: \"0 70% 55%\",\n destructiveFg: \"0 0% 100%\"\n },\n night: {\n bg: \"230 22% 10%\",\n fg: \"210 40% 96%\",\n muted: \"230 18% 16%\",\n mutedFg: \"210 20% 80%\",\n card: \"230 20% 12%\",\n cardFg: \"210 40% 96%\",\n border: \"230 16% 24%\",\n ring: \"210 80% 60%\",\n accent: \"210 35% 20%\",\n accentFg: \"210 50% 90%\",\n destructive: \"0 65% 55%\",\n destructiveFg: \"0 0% 100%\"\n }\n};\n\nexport const cssVarMap: Record<keyof CircadianTokens, string> = {\n bg: \"--cui-bg\",\n fg: \"--cui-fg\",\n muted: \"--cui-muted\",\n mutedFg: \"--cui-muted-fg\",\n card: \"--cui-card\",\n cardFg: \"--cui-card-fg\",\n border: \"--cui-border\",\n ring: \"--cui-ring\",\n accent: \"--cui-accent\",\n accentFg: \"--cui-accent-fg\",\n destructive: \"--cui-destructive\",\n destructiveFg: \"--cui-destructive-fg\"\n};\n\nexport const resolveTokens = (\n phase: Phase,\n overrides?: Partial<Record<Phase, Partial<CircadianTokens>>>\n): CircadianTokens => {\n return {\n ...defaultTokens[phase],\n ...overrides?.[phase]\n };\n};\n\nexport const tokensToCssVars = (tokens: CircadianTokens): Record<string, string> => {\n const vars: Record<string, string> = {};\n for (const [key, value] of Object.entries(tokens)) {\n const cssVar = cssVarMap[key as keyof CircadianTokens];\n vars[cssVar] = value;\n }\n return vars;\n};\n\nexport const applyTokensToElement = (element: HTMLElement, tokens: CircadianTokens) => {\n const vars = tokensToCssVars(tokens);\n for (const [key, value] of Object.entries(vars)) {\n element.style.setProperty(key, value);\n }\n};\n\nexport const applyColorSchemeBias = (\n tokens: CircadianTokens,\n prefers: \"dark\" | \"light\" | \"no-preference\",\n bias: ColorSchemeBias\n): CircadianTokens => {\n if (prefers === \"no-preference\") {\n return tokens;\n }\n const delta = prefers === \"dark\" ? bias.dark : bias.light;\n const adjust = (value: string): string => {\n const [h, s, l] = value.split(\" \");\n const lightness = Math.max(0, Math.min(100, Number(l.replace(\"%\", \"\")) + delta));\n return `${h} ${s} ${lightness}%`;\n };\n\n return {\n ...tokens,\n bg: adjust(tokens.bg),\n fg: adjust(tokens.fg),\n muted: adjust(tokens.muted),\n mutedFg: adjust(tokens.mutedFg),\n card: adjust(tokens.card),\n cardFg: adjust(tokens.cardFg),\n border: adjust(tokens.border),\n ring: adjust(tokens.ring),\n accent: adjust(tokens.accent),\n accentFg: adjust(tokens.accentFg),\n destructive: adjust(tokens.destructive),\n destructiveFg: adjust(tokens.destructiveFg)\n };\n};\n","import { CircadianTokens } from \"./types\";\n\nexport interface ContrastOptions {\n minimumRatio: number;\n preferPreserveHue: boolean;\n maxIterations: number;\n}\n\nconst clamp = (value: number, min = 0, max = 100) => Math.min(max, Math.max(min, value));\n\nconst parseHsl = (value: string): [number, number, number] => {\n const [h, s, l] = value.split(\" \");\n return [Number(h), Number(s.replace(\"%\", \"\")) / 100, Number(l.replace(\"%\", \"\")) / 100];\n};\n\nconst hslToRgb = (h: number, s: number, l: number): [number, number, number] => {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (h >= 0 && h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n\n return [r + m, g + m, b + m];\n};\n\nconst relativeLuminance = (hsl: string): number => {\n const [h, s, l] = parseHsl(hsl);\n const [r, g, b] = hslToRgb(h, s, l).map((channel) => {\n const linear = channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n return linear;\n });\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n};\n\nexport const contrastRatio = (foreground: string, background: string): number => {\n const lum1 = relativeLuminance(foreground);\n const lum2 = relativeLuminance(background);\n const lighter = Math.max(lum1, lum2);\n const darker = Math.min(lum1, lum2);\n return (lighter + 0.05) / (darker + 0.05);\n};\n\nconst adjustLightness = (value: string, delta: number): string => {\n const [h, s, l] = value.split(\" \");\n const lightness = clamp(Number(l.replace(\"%\", \"\")) + delta);\n return `${h} ${s} ${lightness}%`;\n};\n\nconst ensurePairContrast = (\n background: string,\n foreground: string,\n options: ContrastOptions\n): string => {\n let current = foreground;\n if (contrastRatio(current, background) >= options.minimumRatio) {\n return current;\n }\n\n const foregroundLum = relativeLuminance(foreground);\n const backgroundLum = relativeLuminance(background);\n const moveDarker = foregroundLum < backgroundLum;\n const step = moveDarker ? -2 : 2;\n\n for (let i = 0; i < options.maxIterations; i += 1) {\n current = adjustLightness(current, step);\n if (contrastRatio(current, background) >= options.minimumRatio) {\n return current;\n }\n }\n\n return current;\n};\n\nexport const ensureContrast = (\n tokens: CircadianTokens,\n options: ContrastOptions\n): CircadianTokens => {\n return {\n ...tokens,\n fg: ensurePairContrast(tokens.bg, tokens.fg, options),\n mutedFg: ensurePairContrast(tokens.muted, tokens.mutedFg, options),\n cardFg: ensurePairContrast(tokens.card, tokens.cardFg, options),\n accentFg: ensurePairContrast(tokens.accent, tokens.accentFg, options),\n destructiveFg: ensurePairContrast(tokens.destructive, tokens.destructiveFg, options)\n };\n};\n","import { PersistedState } from \"./types\";\n\nexport const defaultStorageKey = \"cui:preferences\";\n\nconst hasStorage = (): boolean =>\n typeof window !== \"undefined\" && typeof window.localStorage !== \"undefined\";\n\nexport const loadPersistedState = (key: string = defaultStorageKey): PersistedState | null => {\n if (!hasStorage()) {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) {\n return null;\n }\n return JSON.parse(raw) as PersistedState;\n } catch {\n return null;\n }\n};\n\nexport const persistState = (state: PersistedState, key: string = defaultStorageKey): void => {\n if (!hasStorage()) {\n return;\n }\n try {\n window.localStorage.setItem(key, JSON.stringify(state));\n } catch {\n // Ignore write errors\n }\n};\n\nexport const clearPersistedState = (key: string = defaultStorageKey): void => {\n if (!hasStorage()) {\n return;\n }\n try {\n window.localStorage.removeItem(key);\n } catch {\n // Ignore cleanup errors\n }\n};\n","import { SystemPreferences } from \"./types\";\n\nconst getPreference = (query: string): MediaQueryList | null => {\n if (typeof window === \"undefined\" || !window.matchMedia) {\n return null;\n }\n return window.matchMedia(query);\n};\n\nexport const getSystemPreferences = (): SystemPreferences => {\n const colorScheme = getPreference(\"(prefers-color-scheme: dark)\");\n const lightScheme = getPreference(\"(prefers-color-scheme: light)\");\n const contrastMore = getPreference(\"(prefers-contrast: more)\");\n const contrastLess = getPreference(\"(prefers-contrast: less)\");\n const reduceMotion = getPreference(\"(prefers-reduced-motion: reduce)\");\n\n return {\n prefersColorScheme: colorScheme?.matches\n ? \"dark\"\n : lightScheme?.matches\n ? \"light\"\n : \"no-preference\",\n prefersContrast: contrastMore?.matches\n ? \"more\"\n : contrastLess?.matches\n ? \"less\"\n : \"no-preference\",\n reducedMotion: Boolean(reduceMotion?.matches)\n };\n};\n\nexport const subscribeSystemPreferences = (\n handler: (prefs: SystemPreferences) => void\n): (() => void) => {\n if (typeof window === \"undefined\" || !window.matchMedia) {\n return () => undefined;\n }\n\n const notify = () => handler(getSystemPreferences());\n const mediaQueries = [\n \"(prefers-color-scheme: dark)\",\n \"(prefers-color-scheme: light)\",\n \"(prefers-contrast: more)\",\n \"(prefers-contrast: less)\",\n \"(prefers-reduced-motion: reduce)\"\n ];\n\n const listeners = mediaQueries.map((query) => {\n const list = window.matchMedia(query);\n const listener = () => notify();\n if (list.addEventListener) {\n list.addEventListener(\"change\", listener);\n } else {\n list.addListener(listener);\n }\n return { list, listener };\n });\n\n return () => {\n for (const { list, listener } of listeners) {\n if (list.removeEventListener) {\n list.removeEventListener(\"change\", listener);\n } else {\n list.removeListener(listener);\n }\n }\n };\n};\n","import { AccessibilityOptions, CircadianConfig, ScheduleMode, SystemPreferences } from \"./types\";\n\nexport const defaultAccessibility: AccessibilityOptions = {\n enforceContrast: true,\n minimumRatio: 4.5,\n largeTextRatio: 3,\n preferPreserveHue: true,\n maxIterations: 24\n};\n\nexport const defaultSystemOptions = {\n respectColorScheme: true,\n respectContrastPreference: true,\n respectReducedMotion: true\n};\n\nexport const defaultColorSchemeBias = {\n dark: -8,\n light: 8\n};\n\nexport const defaultTransition = {\n enabled: false,\n durationMs: 200\n};\n\nexport const resolveMode = (\n userMode: ScheduleMode | undefined,\n system: SystemPreferences,\n config?: CircadianConfig\n): ScheduleMode => {\n return userMode ?? config?.mode ?? \"auto\";\n};\n\nexport const resolveAccessibility = (\n system: SystemPreferences,\n config?: CircadianConfig\n): AccessibilityOptions => {\n const base = { ...defaultAccessibility, ...config?.accessibility };\n if (config?.system?.respectContrastPreference !== false) {\n if (system.prefersContrast === \"more\") {\n base.minimumRatio = Math.max(base.minimumRatio, 7);\n }\n if (system.prefersContrast === \"less\") {\n base.minimumRatio = Math.min(base.minimumRatio, 3);\n }\n }\n return base;\n};\n","import { CircadianConfig, CircadianSchedule, Phase, ScheduleMode } from \"./types\";\nimport { defaultSchedule } from \"./schedule\";\nimport { defaultStorageKey } from \"./storage\";\nimport { defaultTokens, tokensToCssVars } from \"./tokens\";\n\nconst serialize = (value: unknown): string => JSON.stringify(value);\n\nconst getMergedSchedule = (schedule?: Partial<CircadianSchedule>): CircadianSchedule => ({\n ...defaultSchedule,\n ...schedule,\n dawn: { ...defaultSchedule.dawn, ...schedule?.dawn },\n day: { ...defaultSchedule.day, ...schedule?.day },\n dusk: { ...defaultSchedule.dusk, ...schedule?.dusk },\n night: { ...defaultSchedule.night, ...schedule?.night }\n});\n\nconst getMode = (mode?: ScheduleMode): ScheduleMode => mode ?? \"auto\";\n\nexport const createInlineScript = (config?: CircadianConfig): string => {\n const schedule = getMergedSchedule(config?.schedule);\n const storageKey = config?.storageKey ?? defaultStorageKey;\n const persist = config?.persist !== false;\n const initialPhase = config?.initialPhase ?? null;\n const setAttributeOn = config?.setAttributeOn ?? \"html\";\n const tokens = {\n dawn: tokensToCssVars({\n ...defaultTokens.dawn,\n ...config?.tokens?.dawn\n }),\n day: tokensToCssVars({\n ...defaultTokens.day,\n ...config?.tokens?.day\n }),\n dusk: tokensToCssVars({\n ...defaultTokens.dusk,\n ...config?.tokens?.dusk\n }),\n night: tokensToCssVars({\n ...defaultTokens.night,\n ...config?.tokens?.night\n })\n };\n\n return `(() => {\n try {\n const schedule = ${serialize(schedule)};\n const tokens = ${serialize(tokens)};\n const storageKey = ${serialize(storageKey)};\n const persist = ${serialize(persist)};\n const fallbackMode = ${serialize(getMode(config?.mode))};\n const initialPhase = ${serialize(initialPhase)};\n const setAttributeOn = ${serialize(setAttributeOn)};\n const now = new Date();\n const minutes = now.getHours() * 60 + now.getMinutes();\n\n const isWithin = (value, start, end) => {\n if (start === end) return true;\n if (start < end) return value >= start && value < end;\n return value >= start || value < end;\n };\n\n const parse = (time) => {\n const [h, m] = time.split(\":\").map(Number);\n return ((h % 24) * 60 + m) % 1440;\n };\n\n const normalized = {\n dawn: { start: parse(schedule.dawn.start), end: parse(schedule.dawn.end) },\n day: { start: parse(schedule.day.start), end: parse(schedule.day.end) },\n dusk: { start: parse(schedule.dusk.start), end: parse(schedule.dusk.end) },\n night: { start: parse(schedule.night.start), end: parse(schedule.night.end) }\n };\n\n const order = [\"dawn\", \"day\", \"dusk\", \"night\"];\n let phase = initialPhase || \"night\";\n if (!initialPhase) {\n for (const key of order) {\n const window = normalized[key];\n if (isWithin(minutes, window.start, window.end)) {\n phase = key;\n break;\n }\n }\n }\n\n let mode = fallbackMode;\n const persisted = persist && window.localStorage ? window.localStorage.getItem(storageKey) : null;\n if (persisted) {\n try {\n const parsed = JSON.parse(persisted);\n if (parsed.mode) mode = parsed.mode;\n if (parsed.phase) phase = parsed.phase;\n } catch {\n // ignore\n }\n }\n\n const root =\n setAttributeOn === \"body\" && document.body ? document.body : document.documentElement;\n root.setAttribute(\"data-cui-phase\", phase);\n const vars = tokens[phase] || tokens.night;\n for (const key in vars) {\n root.style.setProperty(key, vars[key]);\n }\n } catch {\n // ignore\n }\n})();`;\n};\n\nexport const resolveInitialPhase = (date: Date, schedule?: Partial<CircadianSchedule>): Phase => {\n const merged = getMergedSchedule(schedule);\n const minutes = date.getHours() * 60 + date.getMinutes();\n const isWithin = (value: number, start: number, end: number) => {\n if (start === end) return true;\n if (start < end) return value >= start && value < end;\n return value >= start || value < end;\n };\n const parse = (time: string) => {\n const [h, m] = time.split(\":\").map(Number);\n return ((h % 24) * 60 + m) % 1440;\n };\n const order: Phase[] = [\"dawn\", \"day\", \"dusk\", \"night\"];\n for (const phase of order) {\n const window = merged[phase];\n if (isWithin(minutes, parse(window.start), parse(window.end))) {\n return phase;\n }\n }\n return \"night\";\n};\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode\n} from \"react\";\nimport {\n CircadianConfig,\n CircadianState,\n Phase,\n ScheduleMode,\n SunTimes,\n SystemPreferences\n} from \"../core/types\";\nimport { computeNextTransition, getPhaseFromTime } from \"../core/schedule\";\nimport { computeNextSunTransition, getPhaseFromSunTimes } from \"../core/sun\";\nimport { applyColorSchemeBias, applyTokensToElement, resolveTokens } from \"../core/tokens\";\nimport { ensureContrast } from \"../core/contrast\";\nimport { loadPersistedState, persistState } from \"../core/storage\";\nimport { getSystemPreferences, subscribeSystemPreferences } from \"../core/systemPrefs\";\nimport {\n defaultColorSchemeBias,\n defaultSystemOptions,\n defaultTransition,\n resolveAccessibility,\n resolveMode\n} from \"../core/resolve\";\n\nexport interface CircadianContextValue extends CircadianState {\n setMode: (mode: ScheduleMode) => void;\n setPhaseOverride: (phase: Phase) => void;\n clearOverride: () => void;\n isAuto: boolean;\n resolvedMode: ScheduleMode;\n}\n\nconst CircadianContext = createContext<CircadianContextValue | null>(null);\n\nconst getRootElement = (target: CircadianConfig[\"setAttributeOn\"]): HTMLElement => {\n if (typeof document === \"undefined\") {\n return {} as HTMLElement;\n }\n return target === \"body\" ? document.body : document.documentElement;\n};\n\nconst getInitialSystemPreferences = (): SystemPreferences => {\n if (typeof window === \"undefined\") {\n return {\n prefersColorScheme: \"no-preference\",\n prefersContrast: \"no-preference\",\n reducedMotion: false\n };\n }\n return getSystemPreferences();\n};\n\nconst computePhase = (\n date: Date,\n mode: ScheduleMode,\n config: CircadianConfig,\n phaseOverride: Phase | null,\n sunTimes: SunTimes | null\n): Phase => {\n if (mode === \"manual\" && phaseOverride) {\n return phaseOverride;\n }\n if (mode === \"sun\" && sunTimes) {\n return getPhaseFromSunTimes(date, sunTimes, config.sunSchedule);\n }\n return getPhaseFromTime(date, config.schedule);\n};\n\nconst computeNextChange = (\n date: Date,\n mode: ScheduleMode,\n config: CircadianConfig,\n sunTimes: SunTimes | null\n): Date | null => {\n if (mode === \"manual\") {\n return null;\n }\n if (mode === \"sun\" && sunTimes) {\n return computeNextSunTransition(date, sunTimes, config.sunSchedule);\n }\n return computeNextTransition(date, config.schedule);\n};\n\nexport interface CircadianProviderProps {\n config?: CircadianConfig;\n children: ReactNode;\n}\n\nexport const CircadianProvider = ({ config = {}, children }: CircadianProviderProps) => {\n const storageKey = config.storageKey;\n const shouldPersist = config.persist !== false;\n const [systemPrefs, setSystemPrefs] = useState<SystemPreferences>(getInitialSystemPreferences);\n\n const initialPersisted =\n typeof window !== \"undefined\" && shouldPersist ? loadPersistedState(storageKey) : null;\n\n const [mode, setModeState] = useState<ScheduleMode>(\n initialPersisted?.mode ?? config.mode ?? \"auto\"\n );\n const [phaseOverride, setPhaseOverrideState] = useState<Phase | null>(\n initialPersisted?.phase ?? null\n );\n\n const [phase, setPhase] = useState<Phase>(() =>\n config.initialPhase ?? computePhase(new Date(), mode, config, phaseOverride, null)\n );\n\n const [nextChangeAt, setNextChangeAt] = useState<Date | null>(() =>\n computeNextChange(new Date(), mode, config, null)\n );\n const [resolvedMode, setResolvedMode] = useState<ScheduleMode>(mode);\n\n const timerRef = useRef<number | null>(null);\n\n const accessibility = useMemo(\n () => resolveAccessibility(systemPrefs, config),\n [systemPrefs, config]\n );\n\n const transition = { ...defaultTransition, ...config.transition };\n const systemOptions = { ...defaultSystemOptions, ...config.system };\n const colorBias = { ...defaultColorSchemeBias, ...config.colorSchemeBias };\n\n const tokens = useMemo(() => {\n let resolved = resolveTokens(phase, config.tokens);\n if (systemOptions.respectColorScheme) {\n resolved = applyColorSchemeBias(resolved, systemPrefs.prefersColorScheme, colorBias);\n }\n if (accessibility.enforceContrast) {\n resolved = ensureContrast(resolved, accessibility);\n }\n return resolved;\n }, [\n phase,\n config.tokens,\n systemPrefs.prefersColorScheme,\n accessibility,\n systemOptions.respectColorScheme,\n colorBias\n ]);\n\n const resolveModeWithSun = useCallback(\n (date: Date): { resolvedMode: ScheduleMode; sunTimes: SunTimes | null } => {\n const desiredMode = resolveMode(mode, systemPrefs, config);\n if (desiredMode === \"auto\") {\n if (config.sunTimesProvider) {\n const sunTimes = config.sunTimesProvider(date);\n if (sunTimes) {\n return { resolvedMode: \"sun\", sunTimes };\n }\n }\n return { resolvedMode: \"time\", sunTimes: null };\n }\n if (desiredMode === \"sun\") {\n const sunTimes = config.sunTimesProvider?.(date) ?? null;\n if (!sunTimes) {\n return { resolvedMode: \"time\", sunTimes: null };\n }\n return { resolvedMode: \"sun\", sunTimes };\n }\n return { resolvedMode: desiredMode, sunTimes: null };\n },\n [mode, systemPrefs, config]\n );\n\n const updatePhase = useCallback(() => {\n const now = new Date();\n const { resolvedMode, sunTimes } = resolveModeWithSun(now);\n const nextPhase = computePhase(now, resolvedMode, config, phaseOverride, sunTimes);\n setResolvedMode(resolvedMode);\n setPhase(nextPhase);\n setNextChangeAt(computeNextChange(now, resolvedMode, config, sunTimes));\n }, [config, phaseOverride, resolveModeWithSun]);\n\n useEffect(() => {\n updatePhase();\n }, [updatePhase]);\n\n useEffect(() => {\n if (resolvedMode === \"manual\") {\n return;\n }\n if (timerRef.current) {\n window.clearTimeout(timerRef.current);\n }\n if (!nextChangeAt) {\n return;\n }\n const delay = Math.max(0, nextChangeAt.getTime() - Date.now() + 500);\n timerRef.current = window.setTimeout(() => {\n updatePhase();\n }, delay);\n return () => {\n if (timerRef.current) {\n window.clearTimeout(timerRef.current);\n }\n };\n }, [resolvedMode, nextChangeAt, updatePhase]);\n\n useEffect(() => {\n const root = getRootElement(config.setAttributeOn);\n if (!root || !root.style) {\n return;\n }\n root.setAttribute(\"data-cui-phase\", phase);\n const allowMotion = !systemPrefs.reducedMotion || !systemOptions.respectReducedMotion;\n if (transition.enabled && allowMotion) {\n root.style.transition = `background-color ${transition.durationMs}ms ease, color ${transition.durationMs}ms ease`;\n } else {\n root.style.transition = \"\";\n }\n applyTokensToElement(root, tokens);\n }, [\n phase,\n tokens,\n transition,\n systemPrefs.reducedMotion,\n systemOptions.respectReducedMotion,\n config.setAttributeOn\n ]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n return subscribeSystemPreferences(setSystemPrefs);\n }, []);\n\n useEffect(() => {\n if (!shouldPersist) {\n return;\n }\n persistState(\n {\n mode,\n phase: phaseOverride\n },\n storageKey\n );\n }, [mode, phaseOverride, shouldPersist, storageKey]);\n\n const setMode = useCallback(\n (nextMode: ScheduleMode) => {\n setModeState(nextMode);\n if (nextMode === \"manual\" && !phaseOverride) {\n setPhaseOverrideState(phase);\n }\n },\n [phase, phaseOverride]\n );\n\n const setPhaseOverride = useCallback((nextPhase: Phase) => {\n setPhaseOverrideState(nextPhase);\n setModeState(\"manual\");\n }, []);\n\n const clearOverride = useCallback(() => {\n setPhaseOverrideState(null);\n setModeState(config.mode ?? \"auto\");\n }, [config.mode]);\n\n const contextValue = useMemo<CircadianContextValue>(\n () => ({\n phase,\n mode,\n tokens,\n nextChangeAt,\n setMode,\n setPhaseOverride,\n clearOverride,\n isAuto: mode !== \"manual\",\n resolvedMode\n }),\n [phase, mode, tokens, nextChangeAt, setMode, setPhaseOverride, clearOverride, resolvedMode]\n );\n\n return <CircadianContext.Provider value={contextValue}>{children}</CircadianContext.Provider>;\n};\n\nexport const useCircadianContext = () => {\n const context = useContext(CircadianContext);\n if (!context) {\n throw new Error(\"useCircadian must be used within a CircadianProvider\");\n }\n return context;\n};\n","import { useMemo } from \"react\";\nimport { useCircadianContext } from \"./CircadianProvider\";\nimport { tokensToCssVars } from \"../core/tokens\";\n\nexport const useCircadian = () => useCircadianContext();\n\nexport const useCircadianTokens = () => {\n const { tokens } = useCircadianContext();\n const cssVars = useMemo(() => tokensToCssVars(tokens), [tokens]);\n const applyToStyle = useMemo(\n () => ({\n style: Object.fromEntries(Object.entries(cssVars).map(([key, value]) => [key, value]))\n }),\n [cssVars]\n );\n\n return { tokens, cssVars, applyToStyle };\n};\n","import { useMemo } from \"react\";\nimport { CircadianConfig } from \"../core/types\";\nimport { createInlineScript } from \"../core/script\";\n\nexport interface CircadianScriptProps {\n config?: CircadianConfig;\n nonce?: string;\n}\n\nexport const CircadianScript = ({ config, nonce }: CircadianScriptProps) => {\n const script = useMemo(() => createInlineScript(config), [config]);\n return <script nonce={nonce} dangerouslySetInnerHTML={{ __html: script }} />;\n};\n","import { cssVarMap } from \"../core/tokens\";\n\nconst toColor = (cssVar: string) => `hsl(var(${cssVar}) / <alpha-value>)`;\n\nexport const circadianTailwindPreset = () => {\n return {\n theme: {\n extend: {\n colors: {\n background: toColor(cssVarMap.bg),\n foreground: toColor(cssVarMap.fg),\n muted: toColor(cssVarMap.muted),\n \"muted-foreground\": toColor(cssVarMap.mutedFg),\n card: toColor(cssVarMap.card),\n \"card-foreground\": toColor(cssVarMap.cardFg),\n border: toColor(cssVarMap.border),\n ring: toColor(cssVarMap.ring),\n accent: toColor(cssVarMap.accent),\n \"accent-foreground\": toColor(cssVarMap.accentFg),\n destructive: toColor(cssVarMap.destructive),\n \"destructive-foreground\": toColor(cssVarMap.destructiveFg)\n }\n }\n }\n };\n};\n","import { defaultTokens, tokensToCssVars } from \"../core/tokens\";\n\ninterface TailwindPluginApi {\n addBase: (styles: Record<string, Record<string, string>>) => void;\n}\n\nexport const circadianPlugin = () => {\n return ({ addBase }: TailwindPluginApi) => {\n addBase({\n \":root\": tokensToCssVars(defaultTokens.day),\n \"[data-cui-phase='dawn']\": tokensToCssVars(defaultTokens.dawn),\n \"[data-cui-phase='day']\": tokensToCssVars(defaultTokens.day),\n \"[data-cui-phase='dusk']\": tokensToCssVars(defaultTokens.dusk),\n \"[data-cui-phase='night']\": tokensToCssVars(defaultTokens.night)\n });\n };\n};\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
|
|
3
3
|
type Phase = "dawn" | "day" | "dusk" | "night";
|
|
4
|
-
type ScheduleMode = "time" | "sun" | "manual";
|
|
4
|
+
type ScheduleMode = "time" | "sun" | "manual" | "auto";
|
|
5
5
|
interface PhaseWindow {
|
|
6
6
|
start: string;
|
|
7
7
|
end: string;
|
|
@@ -58,6 +58,7 @@ interface CircadianConfig {
|
|
|
58
58
|
mode?: ScheduleMode;
|
|
59
59
|
sunTimesProvider?: SunTimesProvider;
|
|
60
60
|
sunSchedule?: Partial<SunScheduleOptions>;
|
|
61
|
+
initialPhase?: Phase;
|
|
61
62
|
persist?: boolean;
|
|
62
63
|
storageKey?: string;
|
|
63
64
|
accessibility?: Partial<AccessibilityOptions>;
|
|
@@ -91,12 +92,15 @@ type CircadianScheduleMinutes = Record<Phase, PhaseWindowMinutes>;
|
|
|
91
92
|
declare const parseTimeToMinutes: (value: string) => number;
|
|
92
93
|
declare const normalizeSchedule: (schedule?: Partial<CircadianSchedule>) => CircadianScheduleMinutes;
|
|
93
94
|
declare const getMinutesFromDate: (date: Date) => number;
|
|
95
|
+
declare const getPhaseFromMinutes: (minutes: number, schedule: CircadianScheduleMinutes) => Phase;
|
|
94
96
|
declare const getPhaseFromTime: (date: Date, schedule?: Partial<CircadianSchedule>) => Phase;
|
|
95
97
|
declare const computeNextTransition: (date: Date, schedule?: Partial<CircadianSchedule>) => Date;
|
|
98
|
+
declare const computeNextTransitionFromMinutes: (date: Date, schedule: CircadianScheduleMinutes) => Date;
|
|
96
99
|
|
|
97
100
|
declare const defaultSunSchedule: SunScheduleOptions;
|
|
98
101
|
declare const deriveSunSchedule: (date: Date, sunTimes: SunTimes, options?: Partial<SunScheduleOptions>) => CircadianScheduleMinutes;
|
|
99
102
|
declare const getPhaseFromSunTimes: (date: Date, sunTimes: SunTimes, options?: Partial<SunScheduleOptions>) => Phase;
|
|
103
|
+
declare const computeNextSunTransition: (date: Date, sunTimes: SunTimes, options?: Partial<SunScheduleOptions>) => Date;
|
|
100
104
|
declare const getScheduleFromProvider: (date: Date, provider?: SunTimesProvider, options?: Partial<SunScheduleOptions>) => CircadianSchedule | null;
|
|
101
105
|
|
|
102
106
|
declare const defaultTokens: Record<Phase, CircadianTokens>;
|
|
@@ -147,6 +151,7 @@ interface CircadianContextValue extends CircadianState {
|
|
|
147
151
|
setPhaseOverride: (phase: Phase) => void;
|
|
148
152
|
clearOverride: () => void;
|
|
149
153
|
isAuto: boolean;
|
|
154
|
+
resolvedMode: ScheduleMode;
|
|
150
155
|
}
|
|
151
156
|
interface CircadianProviderProps {
|
|
152
157
|
config?: CircadianConfig;
|
|
@@ -198,4 +203,4 @@ interface TailwindPluginApi {
|
|
|
198
203
|
}
|
|
199
204
|
declare const circadianPlugin: () => ({ addBase }: TailwindPluginApi) => void;
|
|
200
205
|
|
|
201
|
-
export { type AccessibilityOptions, type CircadianConfig, type CircadianContextValue, CircadianProvider, type CircadianProviderProps, type CircadianSchedule, type CircadianScheduleMinutes, CircadianScript, type CircadianScriptProps, type CircadianState, type CircadianTokens, type ColorSchemeBias, type ContrastOptions, type PersistedState, type Phase, type PhaseWindow, type PhaseWindowMinutes, type ScheduleMode, type SunScheduleOptions, type SunTimes, type SunTimesProvider, type SystemPreferenceOptions, type SystemPreferences, type TransitionOptions, applyColorSchemeBias, applyTokensToElement, circadianPlugin, circadianTailwindPreset, clearPersistedState, computeNextTransition, contrastRatio, createInlineScript, cssVarMap, defaultAccessibility, defaultColorSchemeBias, defaultSchedule, defaultStorageKey, defaultSunSchedule, defaultSystemOptions, defaultTokens, defaultTransition, deriveSunSchedule, ensureContrast, getMinutesFromDate, getPhaseFromSunTimes, getPhaseFromTime, getScheduleFromProvider, getSystemPreferences, loadPersistedState, normalizeSchedule, parseTimeToMinutes, persistState, resolveAccessibility, resolveInitialPhase, resolveMode, resolveTokens, subscribeSystemPreferences, tokensToCssVars, useCircadian, useCircadianContext, useCircadianTokens };
|
|
206
|
+
export { type AccessibilityOptions, type CircadianConfig, type CircadianContextValue, CircadianProvider, type CircadianProviderProps, type CircadianSchedule, type CircadianScheduleMinutes, CircadianScript, type CircadianScriptProps, type CircadianState, type CircadianTokens, type ColorSchemeBias, type ContrastOptions, type PersistedState, type Phase, type PhaseWindow, type PhaseWindowMinutes, type ScheduleMode, type SunScheduleOptions, type SunTimes, type SunTimesProvider, type SystemPreferenceOptions, type SystemPreferences, type TransitionOptions, applyColorSchemeBias, applyTokensToElement, circadianPlugin, circadianTailwindPreset, clearPersistedState, computeNextSunTransition, computeNextTransition, computeNextTransitionFromMinutes, contrastRatio, createInlineScript, cssVarMap, defaultAccessibility, defaultColorSchemeBias, defaultSchedule, defaultStorageKey, defaultSunSchedule, defaultSystemOptions, defaultTokens, defaultTransition, deriveSunSchedule, ensureContrast, getMinutesFromDate, getPhaseFromMinutes, getPhaseFromSunTimes, getPhaseFromTime, getScheduleFromProvider, getSystemPreferences, loadPersistedState, normalizeSchedule, parseTimeToMinutes, persistState, resolveAccessibility, resolveInitialPhase, resolveMode, resolveTokens, subscribeSystemPreferences, tokensToCssVars, useCircadian, useCircadianContext, useCircadianTokens };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
|
|
3
3
|
type Phase = "dawn" | "day" | "dusk" | "night";
|
|
4
|
-
type ScheduleMode = "time" | "sun" | "manual";
|
|
4
|
+
type ScheduleMode = "time" | "sun" | "manual" | "auto";
|
|
5
5
|
interface PhaseWindow {
|
|
6
6
|
start: string;
|
|
7
7
|
end: string;
|
|
@@ -58,6 +58,7 @@ interface CircadianConfig {
|
|
|
58
58
|
mode?: ScheduleMode;
|
|
59
59
|
sunTimesProvider?: SunTimesProvider;
|
|
60
60
|
sunSchedule?: Partial<SunScheduleOptions>;
|
|
61
|
+
initialPhase?: Phase;
|
|
61
62
|
persist?: boolean;
|
|
62
63
|
storageKey?: string;
|
|
63
64
|
accessibility?: Partial<AccessibilityOptions>;
|
|
@@ -91,12 +92,15 @@ type CircadianScheduleMinutes = Record<Phase, PhaseWindowMinutes>;
|
|
|
91
92
|
declare const parseTimeToMinutes: (value: string) => number;
|
|
92
93
|
declare const normalizeSchedule: (schedule?: Partial<CircadianSchedule>) => CircadianScheduleMinutes;
|
|
93
94
|
declare const getMinutesFromDate: (date: Date) => number;
|
|
95
|
+
declare const getPhaseFromMinutes: (minutes: number, schedule: CircadianScheduleMinutes) => Phase;
|
|
94
96
|
declare const getPhaseFromTime: (date: Date, schedule?: Partial<CircadianSchedule>) => Phase;
|
|
95
97
|
declare const computeNextTransition: (date: Date, schedule?: Partial<CircadianSchedule>) => Date;
|
|
98
|
+
declare const computeNextTransitionFromMinutes: (date: Date, schedule: CircadianScheduleMinutes) => Date;
|
|
96
99
|
|
|
97
100
|
declare const defaultSunSchedule: SunScheduleOptions;
|
|
98
101
|
declare const deriveSunSchedule: (date: Date, sunTimes: SunTimes, options?: Partial<SunScheduleOptions>) => CircadianScheduleMinutes;
|
|
99
102
|
declare const getPhaseFromSunTimes: (date: Date, sunTimes: SunTimes, options?: Partial<SunScheduleOptions>) => Phase;
|
|
103
|
+
declare const computeNextSunTransition: (date: Date, sunTimes: SunTimes, options?: Partial<SunScheduleOptions>) => Date;
|
|
100
104
|
declare const getScheduleFromProvider: (date: Date, provider?: SunTimesProvider, options?: Partial<SunScheduleOptions>) => CircadianSchedule | null;
|
|
101
105
|
|
|
102
106
|
declare const defaultTokens: Record<Phase, CircadianTokens>;
|
|
@@ -147,6 +151,7 @@ interface CircadianContextValue extends CircadianState {
|
|
|
147
151
|
setPhaseOverride: (phase: Phase) => void;
|
|
148
152
|
clearOverride: () => void;
|
|
149
153
|
isAuto: boolean;
|
|
154
|
+
resolvedMode: ScheduleMode;
|
|
150
155
|
}
|
|
151
156
|
interface CircadianProviderProps {
|
|
152
157
|
config?: CircadianConfig;
|
|
@@ -198,4 +203,4 @@ interface TailwindPluginApi {
|
|
|
198
203
|
}
|
|
199
204
|
declare const circadianPlugin: () => ({ addBase }: TailwindPluginApi) => void;
|
|
200
205
|
|
|
201
|
-
export { type AccessibilityOptions, type CircadianConfig, type CircadianContextValue, CircadianProvider, type CircadianProviderProps, type CircadianSchedule, type CircadianScheduleMinutes, CircadianScript, type CircadianScriptProps, type CircadianState, type CircadianTokens, type ColorSchemeBias, type ContrastOptions, type PersistedState, type Phase, type PhaseWindow, type PhaseWindowMinutes, type ScheduleMode, type SunScheduleOptions, type SunTimes, type SunTimesProvider, type SystemPreferenceOptions, type SystemPreferences, type TransitionOptions, applyColorSchemeBias, applyTokensToElement, circadianPlugin, circadianTailwindPreset, clearPersistedState, computeNextTransition, contrastRatio, createInlineScript, cssVarMap, defaultAccessibility, defaultColorSchemeBias, defaultSchedule, defaultStorageKey, defaultSunSchedule, defaultSystemOptions, defaultTokens, defaultTransition, deriveSunSchedule, ensureContrast, getMinutesFromDate, getPhaseFromSunTimes, getPhaseFromTime, getScheduleFromProvider, getSystemPreferences, loadPersistedState, normalizeSchedule, parseTimeToMinutes, persistState, resolveAccessibility, resolveInitialPhase, resolveMode, resolveTokens, subscribeSystemPreferences, tokensToCssVars, useCircadian, useCircadianContext, useCircadianTokens };
|
|
206
|
+
export { type AccessibilityOptions, type CircadianConfig, type CircadianContextValue, CircadianProvider, type CircadianProviderProps, type CircadianSchedule, type CircadianScheduleMinutes, CircadianScript, type CircadianScriptProps, type CircadianState, type CircadianTokens, type ColorSchemeBias, type ContrastOptions, type PersistedState, type Phase, type PhaseWindow, type PhaseWindowMinutes, type ScheduleMode, type SunScheduleOptions, type SunTimes, type SunTimesProvider, type SystemPreferenceOptions, type SystemPreferences, type TransitionOptions, applyColorSchemeBias, applyTokensToElement, circadianPlugin, circadianTailwindPreset, clearPersistedState, computeNextSunTransition, computeNextTransition, computeNextTransitionFromMinutes, contrastRatio, createInlineScript, cssVarMap, defaultAccessibility, defaultColorSchemeBias, defaultSchedule, defaultStorageKey, defaultSunSchedule, defaultSystemOptions, defaultTokens, defaultTransition, deriveSunSchedule, ensureContrast, getMinutesFromDate, getPhaseFromMinutes, getPhaseFromSunTimes, getPhaseFromTime, getScheduleFromProvider, getSystemPreferences, loadPersistedState, normalizeSchedule, parseTimeToMinutes, persistState, resolveAccessibility, resolveInitialPhase, resolveMode, resolveTokens, subscribeSystemPreferences, tokensToCssVars, useCircadian, useCircadianContext, useCircadianTokens };
|