@newtonedev/configurator 0.1.0 → 0.1.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/state/defaults.ts","../src/state/reducer.ts","../src/hue-conversion.ts","../src/bridge/toThemeConfig.ts","../src/hooks/useConfigurator.ts","../src/hooks/usePreviewColors.ts","../src/constants.ts","../src/panels/PalettePanel.tsx","../src/panels/GlobalPanel.tsx","../src/panels/PreviewPanel.tsx","../src/bridge/toCSS.ts","../src/bridge/toJSON.ts","../src/panels/ExportPanel.tsx","../src/Configurator.tsx"],"names":["srgbToOklch","useReducer","useMemo","useCallback","generatePreview","useTokens","React","Card","Text","srgbToHex","View","HueSlider","Slider","Select","Toggle","StyleSheet","STRENGTH_OPTIONS","styles","Button","TextInput","NewtoneProvider","computeTokens","useState","useNewtoneTheme","useRef","useEffect","Pressable"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ConfiguratorState } from '../types';\n\n/**\n * Default configurator state.\n * Traditional hues match the playground defaults.\n * These are HSL hues (0=red, 60=yellow, 120=green, etc.),\n * NOT OKLCH hues — the bridge converts them.\n */\nexport const DEFAULT_CONFIGURATOR_STATE: ConfiguratorState = {\n palettes: [\n {\n name: 'Neutral',\n hue: 220,\n saturation: 24,\n desaturationStrength: 'none',\n desaturationDirection: 'light',\n hueGradeStrength: 'none',\n hueGradeHue: 0,\n hueGradeDirection: 'light',\n },\n {\n name: 'Accent',\n hue: 24,\n saturation: 80,\n desaturationStrength: 'none',\n desaturationDirection: 'light',\n hueGradeStrength: 'none',\n hueGradeHue: 0,\n hueGradeDirection: 'light',\n },\n {\n name: 'Success',\n hue: 145,\n saturation: 64,\n desaturationStrength: 'none',\n desaturationDirection: 'light',\n hueGradeStrength: 'none',\n hueGradeHue: 0,\n hueGradeDirection: 'light',\n },\n {\n name: 'Warning',\n hue: 40,\n saturation: 80,\n desaturationStrength: 'none',\n desaturationDirection: 'light',\n hueGradeStrength: 'none',\n hueGradeHue: 0,\n hueGradeDirection: 'light',\n },\n {\n name: 'Error',\n hue: 0,\n saturation: 80,\n desaturationStrength: 'none',\n desaturationDirection: 'light',\n hueGradeStrength: 'none',\n hueGradeHue: 0,\n hueGradeDirection: 'light',\n },\n ],\n dynamicRange: {\n lightest: 1,\n darkest: 1,\n },\n globalHueGrading: {\n light: { strength: 'none', hue: 30 },\n dark: { strength: 'none', hue: 220 },\n },\n preview: {\n mode: 'light',\n theme: 'neutral',\n },\n};\n","import type { ConfiguratorState, PaletteState } from '../types';\nimport type { ConfiguratorAction } from './actions';\nimport { DEFAULT_CONFIGURATOR_STATE } from './defaults';\n\nfunction updatePalette(\n palettes: readonly PaletteState[],\n index: number,\n update: Partial<PaletteState>,\n): readonly PaletteState[] {\n if (index < 0 || index >= palettes.length) return palettes;\n return palettes.map((p, i) => (i === index ? { ...p, ...update } : p));\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction wrapHue(hue: number): number {\n return ((hue % 360) + 360) % 360;\n}\n\nexport function configuratorReducer(\n state: ConfiguratorState,\n action: ConfiguratorAction,\n): ConfiguratorState {\n switch (action.type) {\n // Palette actions\n case 'SET_PALETTE_HUE':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n hue: wrapHue(action.hue),\n }),\n };\n\n case 'SET_PALETTE_SATURATION':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n saturation: clamp(action.saturation, 0, 100),\n }),\n };\n\n case 'SET_PALETTE_DESAT_STRENGTH':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n desaturationStrength: action.strength,\n }),\n };\n\n case 'SET_PALETTE_DESAT_DIRECTION':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n desaturationDirection: action.direction,\n }),\n };\n\n case 'SET_PALETTE_HUE_GRADE_STRENGTH':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n hueGradeStrength: action.strength,\n }),\n };\n\n case 'SET_PALETTE_HUE_GRADE_HUE':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n hueGradeHue: wrapHue(action.hue),\n }),\n };\n\n case 'SET_PALETTE_HUE_GRADE_DIRECTION':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n hueGradeDirection: action.direction,\n }),\n };\n\n // Dynamic range actions\n case 'SET_LIGHTEST':\n return {\n ...state,\n dynamicRange: {\n ...state.dynamicRange,\n lightest: clamp(action.value, 0, 1),\n },\n };\n\n case 'SET_DARKEST':\n return {\n ...state,\n dynamicRange: {\n ...state.dynamicRange,\n darkest: clamp(action.value, 0, 1),\n },\n };\n\n // Global hue grading actions\n case 'SET_GLOBAL_GRADE_LIGHT_STRENGTH':\n return {\n ...state,\n globalHueGrading: {\n ...state.globalHueGrading,\n light: { ...state.globalHueGrading.light, strength: action.strength },\n },\n };\n\n case 'SET_GLOBAL_GRADE_LIGHT_HUE':\n return {\n ...state,\n globalHueGrading: {\n ...state.globalHueGrading,\n light: { ...state.globalHueGrading.light, hue: wrapHue(action.hue) },\n },\n };\n\n case 'SET_GLOBAL_GRADE_DARK_STRENGTH':\n return {\n ...state,\n globalHueGrading: {\n ...state.globalHueGrading,\n dark: { ...state.globalHueGrading.dark, strength: action.strength },\n },\n };\n\n case 'SET_GLOBAL_GRADE_DARK_HUE':\n return {\n ...state,\n globalHueGrading: {\n ...state.globalHueGrading,\n dark: { ...state.globalHueGrading.dark, hue: wrapHue(action.hue) },\n },\n };\n\n // Preview actions\n case 'SET_PREVIEW_MODE':\n return {\n ...state,\n preview: { ...state.preview, mode: action.mode },\n };\n\n case 'SET_PREVIEW_THEME':\n return {\n ...state,\n preview: { ...state.preview, theme: action.theme },\n };\n\n // Control actions\n case 'RESET':\n return DEFAULT_CONFIGURATOR_STATE;\n\n case 'LOAD_STATE':\n return action.state;\n\n default:\n return state;\n }\n}\n","import { srgbToOklch } from 'newtone';\nimport type { Srgb } from 'newtone';\n\n/**\n * Convert a traditional HSL color wheel hue (0-359) to its equivalent OKLCH hue.\n *\n * Uses the fully saturated HSL color (S=1, L=0.5) at the given hue,\n * converts to sRGB, then extracts the OKLCH hue component.\n *\n * Traditional hues: 0=red, 60=yellow, 120=green, 180=cyan, 240=blue, 300=magenta.\n */\nexport function traditionalHueToOklch(hue: number): number {\n const h = ((hue % 360) + 360) % 360;\n const x = 1 - Math.abs((h / 60) % 2 - 1);\n\n let r: number, g: number, b: number;\n if (h < 60) { r = 1; g = x; b = 0; }\n else if (h < 120) { r = x; g = 1; b = 0; }\n else if (h < 180) { r = 0; g = 1; b = x; }\n else if (h < 240) { r = 0; g = x; b = 1; }\n else if (h < 300) { r = x; g = 0; b = 1; }\n else { r = 1; g = 0; b = x; }\n\n return srgbToOklch({ r, g, b } as Srgb).h;\n}\n","import type { ConfiguratorState } from '../types';\nimport type { NewtoneThemeConfig } from '@newtonedev/components';\nimport type { PaletteConfig, DynamicRange, HueGrading, HueGradingEndpoint } from 'newtone';\nimport { traditionalHueToOklch } from '../hue-conversion';\n\n/**\n * Convert configurator state (traditional hues, human-readable controls)\n * to a NewtoneThemeConfig (OKLCH hues, engine-ready format).\n */\nexport function toThemeConfig(state: ConfiguratorState): NewtoneThemeConfig {\n const palettes: readonly PaletteConfig[] = state.palettes.map(p => {\n const oklchHue = traditionalHueToOklch(p.hue);\n\n const desaturation = p.desaturationStrength !== 'none'\n ? { direction: p.desaturationDirection, strength: p.desaturationStrength } as const\n : undefined;\n\n const paletteHueGrading = p.hueGradeStrength !== 'none'\n ? {\n hue: traditionalHueToOklch(p.hueGradeHue),\n strength: p.hueGradeStrength,\n direction: p.hueGradeDirection,\n } as const\n : undefined;\n\n return { hue: oklchHue, saturation: p.saturation, desaturation, paletteHueGrading };\n });\n\n // Build global hue grading\n const light: HueGradingEndpoint | undefined = state.globalHueGrading.light.strength !== 'none'\n ? { hue: traditionalHueToOklch(state.globalHueGrading.light.hue), strength: state.globalHueGrading.light.strength }\n : undefined;\n\n const dark: HueGradingEndpoint | undefined = state.globalHueGrading.dark.strength !== 'none'\n ? { hue: traditionalHueToOklch(state.globalHueGrading.dark.hue), strength: state.globalHueGrading.dark.strength }\n : undefined;\n\n const hueGrading: HueGrading | undefined = (light || dark) ? { light, dark } : undefined;\n\n const dynamicRange: DynamicRange = {\n lightest: state.dynamicRange.lightest,\n darkest: state.dynamicRange.darkest,\n ...(hueGrading ? { hueGrading } : {}),\n };\n\n return {\n colorSystem: { dynamicRange, palettes },\n themes: {\n neutral: { paletteIndex: 0, lightModeNv: 0.95, darkModeNv: 0.1 },\n primary: { paletteIndex: 1, lightModeNv: 0.95, darkModeNv: 0.1 },\n secondary: { paletteIndex: 1, lightModeNv: 0.85, darkModeNv: 0.15 },\n strong: { paletteIndex: 0, lightModeNv: 0.1, darkModeNv: 0.95 },\n },\n elevation: {\n offsets: [-0.02, 0, 0.04] as const,\n },\n };\n}\n","import { useReducer, useCallback, useMemo } from 'react';\nimport type { ConfiguratorState } from '../types';\nimport type { ConfiguratorAction } from '../state/actions';\nimport type { NewtoneThemeConfig } from '@newtonedev/components';\nimport { configuratorReducer } from '../state/reducer';\nimport { DEFAULT_CONFIGURATOR_STATE } from '../state/defaults';\nimport { toThemeConfig } from '../bridge/toThemeConfig';\n\nexport interface UseConfiguratorResult {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n readonly themeConfig: NewtoneThemeConfig;\n readonly reset: () => void;\n}\n\nexport function useConfigurator(\n initialState?: Partial<ConfiguratorState>,\n): UseConfiguratorResult {\n const mergedInitial: ConfiguratorState = initialState\n ? { ...DEFAULT_CONFIGURATOR_STATE, ...initialState }\n : DEFAULT_CONFIGURATOR_STATE;\n\n const [state, dispatch] = useReducer(configuratorReducer, mergedInitial);\n\n const themeConfig = useMemo(() => toThemeConfig(state), [state]);\n\n const reset = useCallback(() => dispatch({ type: 'RESET' }), []);\n\n return { state, dispatch, themeConfig, reset };\n}\n","import { useMemo } from 'react';\nimport { generatePreview } from 'newtone';\nimport type { ColorResult, DynamicRange } from 'newtone';\nimport type { ConfiguratorState } from '../types';\nimport { traditionalHueToOklch } from '../hue-conversion';\n\nconst PREVIEW_STEPS = 26;\n\n/**\n * Compute preview swatches for all palettes.\n * Returns an array of arrays: one preview row per palette.\n */\nexport function usePreviewColors(state: ConfiguratorState): readonly (readonly ColorResult[])[] {\n return useMemo(() => {\n const light = state.globalHueGrading.light.strength !== 'none'\n ? { hue: traditionalHueToOklch(state.globalHueGrading.light.hue), strength: state.globalHueGrading.light.strength }\n : undefined;\n const dark = state.globalHueGrading.dark.strength !== 'none'\n ? { hue: traditionalHueToOklch(state.globalHueGrading.dark.hue), strength: state.globalHueGrading.dark.strength }\n : undefined;\n const hueGrading = (light || dark) ? { light, dark } : undefined;\n\n const dynamicRange: DynamicRange = {\n lightest: state.dynamicRange.lightest,\n darkest: state.dynamicRange.darkest,\n ...(hueGrading ? { hueGrading } : {}),\n };\n\n return state.palettes.map(p => {\n const oklchHue = traditionalHueToOklch(p.hue);\n const desat = p.desaturationStrength !== 'none'\n ? { direction: p.desaturationDirection, strength: p.desaturationStrength } as const\n : undefined;\n const phg = p.hueGradeStrength !== 'none'\n ? { hue: traditionalHueToOklch(p.hueGradeHue), strength: p.hueGradeStrength, direction: p.hueGradeDirection } as const\n : undefined;\n return generatePreview(oklchHue, p.saturation, dynamicRange, PREVIEW_STEPS, desat, phg);\n });\n }, [state]);\n}\n","/**\n * Hue ranges for semantic palettes (traditional HSL hues).\n * Indices 0 (Neutral) and 1 (Accent) are unconstrained.\n *\n * For wrapping ranges (e.g. Error crosses 0°), max exceeds 359.\n * The HueSlider component normalizes values to [0, 359] via % 360.\n *\n * Gaps between ranges prevent adjacent semantics from overlapping:\n * - 15–25: gap between Error (reds) and Warning (yellows)\n * - 55–80: gap between Warning and Success (greens)\n */\nexport const SEMANTIC_HUE_RANGES: Readonly<Record<number, { readonly min: number; readonly max: number }>> = {\n 2: { min: 80, max: 160 }, // Success (greens)\n 3: { min: 25, max: 55 }, // Warning (yellow/orange)\n 4: { min: 345, max: 375 }, // Error (reds, wraps 0°)\n};\n","import React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\nimport { Card, HueSlider, Slider, Select, Toggle, useTokens } from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport type { ColorResult } from 'newtone';\nimport type { PaletteState } from '../types';\nimport type { ConfiguratorAction } from '../state/actions';\nimport type { DesaturationStrength, HueGradingStrength } from 'newtone';\nimport { SEMANTIC_HUE_RANGES } from '../constants';\n\nconst STRENGTH_OPTIONS = [\n { label: 'None', value: 'none' },\n { label: 'Low', value: 'low' },\n { label: 'Medium', value: 'medium' },\n { label: 'Hard', value: 'hard' },\n];\n\ninterface PalettePanelProps {\n readonly palette: PaletteState;\n readonly index: number;\n readonly dispatch: (action: ConfiguratorAction) => void;\n readonly previewColors?: readonly ColorResult[];\n}\n\nexport function PalettePanel({ palette, index, dispatch, previewColors }: PalettePanelProps) {\n const tokens = useTokens(1);\n const hueRange = SEMANTIC_HUE_RANGES[index];\n\n return (\n <Card elevation={1} style={styles.container}>\n <Text style={[styles.title, { color: srgbToHex(tokens.textPrimary.srgb) }]}>\n {palette.name}\n </Text>\n\n {previewColors && (\n <View style={styles.inlineSwatches}>\n {previewColors.map((color, i) => (\n <View\n key={i}\n style={[styles.inlineSwatch, { backgroundColor: srgbToHex(color.srgb) }]}\n />\n ))}\n </View>\n )}\n\n <HueSlider\n value={palette.hue}\n onValueChange={(hue) => dispatch({ type: 'SET_PALETTE_HUE', index, hue })}\n label=\"Hue\"\n showValue\n {...(hueRange ? { min: hueRange.min, max: hueRange.max } : {})}\n />\n\n <Slider\n value={palette.saturation}\n onValueChange={(saturation) => dispatch({ type: 'SET_PALETTE_SATURATION', index, saturation })}\n min={0}\n max={100}\n label=\"Saturation\"\n showValue\n />\n\n <View style={styles.row}>\n <View style={styles.flex}>\n <Select\n options={STRENGTH_OPTIONS}\n value={palette.desaturationStrength}\n onValueChange={(strength) => dispatch({ type: 'SET_PALETTE_DESAT_STRENGTH', index, strength: strength as DesaturationStrength })}\n label=\"Desaturation\"\n />\n </View>\n {palette.desaturationStrength !== 'none' && (\n <View style={styles.toggleContainer}>\n <Toggle\n value={palette.desaturationDirection === 'dark'}\n onValueChange={(v) => dispatch({ type: 'SET_PALETTE_DESAT_DIRECTION', index, direction: v ? 'dark' : 'light' })}\n label=\"Invert\"\n />\n </View>\n )}\n </View>\n\n <View style={styles.row}>\n <View style={styles.flex}>\n <Select\n options={STRENGTH_OPTIONS}\n value={palette.hueGradeStrength}\n onValueChange={(strength) => dispatch({ type: 'SET_PALETTE_HUE_GRADE_STRENGTH', index, strength: strength as HueGradingStrength })}\n label=\"Hue Grading\"\n />\n </View>\n {palette.hueGradeStrength !== 'none' && (\n <View style={styles.toggleContainer}>\n <Toggle\n value={palette.hueGradeDirection === 'dark'}\n onValueChange={(v) => dispatch({ type: 'SET_PALETTE_HUE_GRADE_DIRECTION', index, direction: v ? 'dark' : 'light' })}\n label=\"Invert\"\n />\n </View>\n )}\n </View>\n\n {palette.hueGradeStrength !== 'none' && (\n <HueSlider\n value={palette.hueGradeHue}\n onValueChange={(hue) => dispatch({ type: 'SET_PALETTE_HUE_GRADE_HUE', index, hue })}\n label=\"Grade Target\"\n showValue\n />\n )}\n </Card>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n gap: 12,\n marginBottom: 12,\n },\n title: {\n fontSize: 16,\n fontWeight: '700',\n },\n inlineSwatches: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 1,\n },\n inlineSwatch: {\n width: 20,\n height: 16,\n borderRadius: 2,\n },\n row: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n gap: 12,\n },\n flex: {\n flex: 1,\n },\n toggleContainer: {\n paddingBottom: 2,\n },\n});\n","import React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\nimport { Card, Slider, Select, HueSlider, useTokens } from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport type { ConfiguratorState } from '../types';\nimport type { ConfiguratorAction } from '../state/actions';\nimport type { HueGradingStrength } from 'newtone';\n\nconst STRENGTH_OPTIONS = [\n { label: 'None', value: 'none' },\n { label: 'Low', value: 'low' },\n { label: 'Medium', value: 'medium' },\n { label: 'Hard', value: 'hard' },\n];\n\ninterface GlobalPanelProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n}\n\nexport function GlobalPanel({ state, dispatch }: GlobalPanelProps) {\n const tokens = useTokens(1);\n\n return (\n <Card elevation={1} style={styles.container}>\n <Text style={[styles.title, { color: srgbToHex(tokens.textPrimary.srgb) }]}>\n Dynamic Range\n </Text>\n\n <View style={styles.row}>\n <View style={styles.flex}>\n <Slider\n value={Math.round(state.dynamicRange.lightest * 100)}\n onValueChange={(v) => dispatch({ type: 'SET_LIGHTEST', value: v / 100 })}\n min={0}\n max={100}\n label=\"Lightest\"\n showValue\n />\n </View>\n <View style={styles.flex}>\n <Slider\n value={Math.round(state.dynamicRange.darkest * 100)}\n onValueChange={(v) => dispatch({ type: 'SET_DARKEST', value: v / 100 })}\n min={0}\n max={100}\n label=\"Darkest\"\n showValue\n />\n </View>\n </View>\n\n <Text style={[styles.subtitle, { color: srgbToHex(tokens.textSecondary.srgb) }]}>\n Global Hue Grading — Light End\n </Text>\n\n <View style={styles.row}>\n <View style={styles.flex}>\n <Select\n options={STRENGTH_OPTIONS}\n value={state.globalHueGrading.light.strength}\n onValueChange={(s) => dispatch({ type: 'SET_GLOBAL_GRADE_LIGHT_STRENGTH', strength: s as HueGradingStrength })}\n label=\"Strength\"\n />\n </View>\n {state.globalHueGrading.light.strength !== 'none' && (\n <View style={styles.flex}>\n <HueSlider\n value={state.globalHueGrading.light.hue}\n onValueChange={(hue) => dispatch({ type: 'SET_GLOBAL_GRADE_LIGHT_HUE', hue })}\n label=\"Target Hue\"\n showValue\n />\n </View>\n )}\n </View>\n\n <Text style={[styles.subtitle, { color: srgbToHex(tokens.textSecondary.srgb) }]}>\n Global Hue Grading — Dark End\n </Text>\n\n <View style={styles.row}>\n <View style={styles.flex}>\n <Select\n options={STRENGTH_OPTIONS}\n value={state.globalHueGrading.dark.strength}\n onValueChange={(s) => dispatch({ type: 'SET_GLOBAL_GRADE_DARK_STRENGTH', strength: s as HueGradingStrength })}\n label=\"Strength\"\n />\n </View>\n {state.globalHueGrading.dark.strength !== 'none' && (\n <View style={styles.flex}>\n <HueSlider\n value={state.globalHueGrading.dark.hue}\n onValueChange={(hue) => dispatch({ type: 'SET_GLOBAL_GRADE_DARK_HUE', hue })}\n label=\"Target Hue\"\n showValue\n />\n </View>\n )}\n </View>\n </Card>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n gap: 12,\n },\n title: {\n fontSize: 16,\n fontWeight: '700',\n },\n subtitle: {\n fontSize: 13,\n fontWeight: '600',\n marginTop: 4,\n },\n row: {\n flexDirection: 'row',\n gap: 12,\n },\n flex: {\n flex: 1,\n },\n});\n","import React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\nimport {\n Card,\n Button,\n TextInput,\n Select,\n NewtoneProvider,\n useTokens,\n} from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport type { ConfiguratorState } from '../types';\nimport type { ConfiguratorAction } from '../state/actions';\nimport type { ThemeName, NewtoneThemeConfig } from '@newtonedev/components';\n\nconst THEME_OPTIONS = [\n { label: 'Neutral', value: 'neutral' },\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Strong', value: 'strong' },\n];\n\ninterface PreviewPanelProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n readonly themeConfig: NewtoneThemeConfig;\n}\n\n/** Inner card that reads tokens from the nested provider, so its background reflects the selected theme. */\nfunction PreviewCard({\n state,\n dispatch,\n}: {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n}) {\n const tokens = useTokens(1);\n\n return (\n <Card elevation={1} style={styles.container}>\n <Text style={[styles.title, { color: srgbToHex(tokens.textPrimary.srgb) }]}>\n Component Preview\n </Text>\n\n <View style={styles.controls}>\n <Select\n options={THEME_OPTIONS}\n value={state.preview.theme}\n onValueChange={(t) => dispatch({ type: 'SET_PREVIEW_THEME', theme: t as ThemeName })}\n label=\"Theme\"\n />\n </View>\n\n <View style={previewStyles.wrapper}>\n <View style={previewStyles.row}>\n <Button variant=\"primary\" size=\"sm\">Primary</Button>\n <Button variant=\"secondary\" size=\"sm\">Secondary</Button>\n <Button variant=\"ghost\" size=\"sm\">Ghost</Button>\n <Button variant=\"outline\" size=\"sm\">Outline</Button>\n </View>\n\n <TextInput label=\"Sample Input\" value=\"Hello, Newtone\" onChangeText={() => {}} />\n\n <View style={previewStyles.row}>\n <View style={[previewStyles.statusDot, { backgroundColor: srgbToHex(tokens.success.srgb) }]} />\n <Text style={[previewStyles.statusText, { color: srgbToHex(tokens.textPrimary.srgb) }]}>Success</Text>\n <View style={[previewStyles.statusDot, { backgroundColor: srgbToHex(tokens.warning.srgb) }]} />\n <Text style={[previewStyles.statusText, { color: srgbToHex(tokens.textPrimary.srgb) }]}>Warning</Text>\n <View style={[previewStyles.statusDot, { backgroundColor: srgbToHex(tokens.error.srgb) }]} />\n <Text style={[previewStyles.statusText, { color: srgbToHex(tokens.textPrimary.srgb) }]}>Error</Text>\n </View>\n </View>\n </Card>\n );\n}\n\nexport function PreviewPanel({ state, dispatch, themeConfig }: PreviewPanelProps) {\n return (\n <NewtoneProvider\n key={`${state.preview.mode}-${state.preview.theme}`}\n config={themeConfig}\n initialMode={state.preview.mode}\n initialTheme={state.preview.theme}\n >\n <PreviewCard state={state} dispatch={dispatch} />\n </NewtoneProvider>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n gap: 12,\n },\n title: {\n fontSize: 16,\n fontWeight: '700',\n },\n controls: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n gap: 16,\n },\n});\n\nconst previewStyles = StyleSheet.create({\n wrapper: {\n gap: 12,\n },\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n flexWrap: 'wrap',\n },\n statusDot: {\n width: 12,\n height: 12,\n borderRadius: 6,\n },\n statusText: {\n fontSize: 13,\n marginRight: 8,\n },\n});\n","import type { ConfiguratorState } from '../types';\nimport type { ColorMode } from '@newtonedev/components';\nimport { computeTokens } from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport { toThemeConfig } from './toThemeConfig';\n\n/**\n * Generate CSS custom properties for both light and dark modes.\n * Computes all 12 design tokens for the neutral theme at default elevation.\n */\nexport function toCSS(state: ConfiguratorState): string {\n const config = toThemeConfig(state);\n const modes: readonly ColorMode[] = ['light', 'dark'];\n\n let css = '';\n for (const mode of modes) {\n const tokens = computeTokens(\n config.colorSystem,\n mode,\n config.themes.neutral,\n 1,\n config.elevation.offsets,\n );\n\n const selector = mode === 'light' ? ':root' : '[data-theme=\"dark\"]';\n css += `${selector} {\\n`;\n css += ` --newtone-background: ${srgbToHex(tokens.background.srgb)};\\n`;\n css += ` --newtone-background-elevated: ${srgbToHex(tokens.backgroundElevated.srgb)};\\n`;\n css += ` --newtone-background-sunken: ${srgbToHex(tokens.backgroundSunken.srgb)};\\n`;\n css += ` --newtone-text-primary: ${srgbToHex(tokens.textPrimary.srgb)};\\n`;\n css += ` --newtone-text-secondary: ${srgbToHex(tokens.textSecondary.srgb)};\\n`;\n css += ` --newtone-interactive: ${srgbToHex(tokens.interactive.srgb)};\\n`;\n css += ` --newtone-interactive-hover: ${srgbToHex(tokens.interactiveHover.srgb)};\\n`;\n css += ` --newtone-interactive-active: ${srgbToHex(tokens.interactiveActive.srgb)};\\n`;\n css += ` --newtone-border: ${srgbToHex(tokens.border.srgb)};\\n`;\n css += ` --newtone-success: ${srgbToHex(tokens.success.srgb)};\\n`;\n css += ` --newtone-warning: ${srgbToHex(tokens.warning.srgb)};\\n`;\n css += ` --newtone-error: ${srgbToHex(tokens.error.srgb)};\\n`;\n css += `}\\n\\n`;\n }\n\n return css;\n}\n","import type { ConfiguratorState } from '../types';\nimport type { NewtoneThemeConfig } from '@newtonedev/components';\nimport { toThemeConfig } from './toThemeConfig';\n\n/** Serializable configurator export format */\nexport interface ConfiguratorExport {\n readonly version: '1.0';\n readonly configuratorState: ConfiguratorState;\n readonly themeConfig: NewtoneThemeConfig;\n}\n\n/**\n * Export the configurator state as a JSON string.\n * Includes both the human-readable state (for round-tripping)\n * and the engine-ready theme config.\n */\nexport function toJSON(state: ConfiguratorState): string {\n const output: ConfiguratorExport = {\n version: '1.0',\n configuratorState: state,\n themeConfig: toThemeConfig(state),\n };\n return JSON.stringify(output, null, 2);\n}\n","import React, { useMemo, useState, useCallback } from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\nimport { Card, Button, useTokens } from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport type { ConfiguratorState } from '../types';\nimport { toCSS } from '../bridge/toCSS';\nimport { toJSON } from '../bridge/toJSON';\n\ninterface ExportPanelProps {\n readonly state: ConfiguratorState;\n}\n\ntype ExportFormat = 'css' | 'json';\n\nexport function ExportPanel({ state }: ExportPanelProps) {\n const tokens = useTokens(1);\n const [format, setFormat] = useState<ExportFormat>('css');\n const [copied, setCopied] = useState(false);\n\n const output = useMemo(() => {\n return format === 'css' ? toCSS(state) : toJSON(state);\n }, [state, format]);\n\n const handleCopy = useCallback(() => {\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n navigator.clipboard.writeText(output).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }\n }, [output]);\n\n return (\n <Card elevation={1} style={styles.container}>\n <Text style={[styles.title, { color: srgbToHex(tokens.textPrimary.srgb) }]}>\n Export\n </Text>\n\n <View style={styles.tabs}>\n <Button\n variant={format === 'css' ? 'primary' : 'ghost'}\n size=\"sm\"\n onPress={() => setFormat('css')}\n >\n CSS Variables\n </Button>\n <Button\n variant={format === 'json' ? 'primary' : 'ghost'}\n size=\"sm\"\n onPress={() => setFormat('json')}\n >\n JSON\n </Button>\n <Button variant=\"outline\" size=\"sm\" onPress={handleCopy}>\n {copied ? 'Copied!' : 'Copy'}\n </Button>\n </View>\n\n <View style={[styles.codeBlock, { backgroundColor: srgbToHex(tokens.backgroundSunken.srgb) }]}>\n <Text\n style={[styles.code, { color: srgbToHex(tokens.textPrimary.srgb) }]}\n selectable\n >\n {output}\n </Text>\n </View>\n </Card>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n gap: 12,\n marginBottom: 12,\n },\n title: {\n fontSize: 16,\n fontWeight: '700',\n },\n tabs: {\n flexDirection: 'row',\n gap: 8,\n },\n codeBlock: {\n borderRadius: 6,\n padding: 12,\n maxHeight: 300,\n overflow: 'scroll' as unknown as 'visible',\n },\n code: {\n fontSize: 11,\n fontFamily: 'monospace',\n lineHeight: 16,\n },\n});\n","import React, { useEffect, useRef, useState } from 'react';\nimport { View, Text, Pressable, StyleSheet } from 'react-native';\nimport { Toggle, useTokens, useNewtoneTheme } from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport type { ConfiguratorProps } from './Configurator.types';\nimport { useConfigurator } from './hooks/useConfigurator';\nimport { usePreviewColors } from './hooks/usePreviewColors';\nimport { PalettePanel } from './panels/PalettePanel';\nimport { GlobalPanel } from './panels/GlobalPanel';\nimport { PreviewPanel } from './panels/PreviewPanel';\nimport { ExportPanel } from './panels/ExportPanel';\n\n/**\n * Newtone Configurator — embeddable palette builder widget.\n *\n * Must be rendered inside a NewtoneProvider owned by the consuming app.\n * The configurator reads tokens via useTokens() for self-affecting styling.\n *\n * The consuming app should update its NewtoneProvider config prop\n * based on the onChange callback, creating the self-affecting loop.\n */\nexport function Configurator({\n initialState,\n onChange,\n showExport = true,\n showPreview = true,\n}: ConfiguratorProps) {\n const { state, dispatch, themeConfig, reset } = useConfigurator(initialState);\n const tokens = useTokens(1);\n const { setMode } = useNewtoneTheme();\n const isInitialRender = useRef(true);\n const [activePaletteIndex, setActivePaletteIndex] = useState(0);\n const previews = usePreviewColors(state);\n\n // Sync mode to parent provider on mount\n useEffect(() => {\n setMode(state.preview.mode);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Fire onChange whenever state changes (skip initial render)\n useEffect(() => {\n if (isInitialRender.current) {\n isInitialRender.current = false;\n return;\n }\n onChange?.(state, themeConfig);\n }, [state, themeConfig, onChange]);\n\n return (\n <View style={[styles.container, { backgroundColor: srgbToHex(tokens.backgroundSunken.srgb) }]}>\n {/* Mode toggle at top */}\n <View style={styles.topBar}>\n <Toggle\n value={state.preview.mode === 'dark'}\n onValueChange={(isDark) => {\n const mode = isDark ? 'dark' : 'light';\n dispatch({ type: 'SET_PREVIEW_MODE', mode });\n setMode(mode);\n }}\n label=\"Dark Mode\"\n />\n </View>\n\n {/* Dynamic Range + Component Preview side by side */}\n <View style={styles.topRow}>\n <View style={styles.topRowPanel}>\n <GlobalPanel state={state} dispatch={dispatch} />\n </View>\n {showPreview && (\n <View style={styles.topRowPanel}>\n <PreviewPanel state={state} dispatch={dispatch} themeConfig={themeConfig} />\n </View>\n )}\n </View>\n\n {/* Palette tab bar */}\n <View style={styles.tabBar}>\n {state.palettes.map((palette, index) => (\n <Pressable\n key={index}\n onPress={() => setActivePaletteIndex(index)}\n style={[\n styles.tab,\n {\n backgroundColor: index === activePaletteIndex\n ? srgbToHex(tokens.background.srgb)\n : 'transparent',\n borderColor: index === activePaletteIndex\n ? srgbToHex(tokens.border.srgb)\n : 'transparent',\n },\n ]}\n >\n <Text style={[\n styles.tabText,\n {\n color: srgbToHex(\n index === activePaletteIndex\n ? tokens.textPrimary.srgb\n : tokens.textSecondary.srgb\n ),\n fontWeight: index === activePaletteIndex ? '700' : '500',\n },\n ]}>\n {palette.name}\n </Text>\n </Pressable>\n ))}\n </View>\n\n {/* Active palette panel with inline preview */}\n <PalettePanel\n palette={state.palettes[activePaletteIndex]}\n index={activePaletteIndex}\n dispatch={dispatch}\n previewColors={previews[activePaletteIndex]}\n />\n\n {showExport && <ExportPanel state={state} />}\n\n {/* Safety: hardcoded styling so this button is always readable */}\n <button\n onClick={() => reset()}\n style={{\n marginTop: 16,\n padding: '8px 16px',\n backgroundColor: '#ffffff',\n color: '#000000',\n border: '2px solid #000000',\n borderRadius: 4,\n fontWeight: 700,\n fontSize: 14,\n cursor: 'pointer',\n }}\n >\n Reset to Defaults\n </button>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 8,\n padding: 16,\n gap: 4,\n },\n topBar: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'center',\n marginBottom: 8,\n },\n topRow: {\n flexDirection: 'row',\n gap: 8,\n marginBottom: 4,\n },\n topRowPanel: {\n flex: 1,\n },\n tabBar: {\n flexDirection: 'row',\n gap: 4,\n marginBottom: 4,\n },\n tab: {\n paddingVertical: 8,\n paddingHorizontal: 12,\n borderRadius: 6,\n borderWidth: 1,\n },\n tabText: {\n fontSize: 13,\n },\n});\n"]}
1
+ {"version":3,"sources":["../src/state/defaults.ts","../src/state/reducer.ts","../src/hue-conversion.ts","../src/bridge/toThemeConfig.ts","../src/hooks/useConfigurator.ts","../src/hooks/usePreviewColors.ts","../src/constants.ts","../src/hooks/useWcagValidation.ts","../src/hex-conversion.ts","../src/panels/PalettePanel.tsx","../src/panels/GlobalPanel.tsx","../src/panels/PreviewPanel.tsx","../src/bridge/toCSS.ts","../src/bridge/toJSON.ts","../src/panels/ExportPanel.tsx","../src/panels/DesignPanel.tsx","../src/Configurator.tsx"],"names":["srgbToOklch","useReducer","useMemo","useCallback","generatePreview","getColor","getColorByContrast","lightnessToNormalizedValue","getWcagContrastRatio","hexToSrgb","findMaxChromaInGamut","srgbToHex","useTokens","React","Card","Text","ColorScaleSlider","View","TextInput","Pressable","HueSlider","Slider","Select","Toggle","StyleSheet","STRENGTH_OPTIONS","styles","Button","NewtoneProvider","computeTokens","useState","useNewtoneTheme","useRef","useEffect"],"mappings":";;;;;;;;;;;;;;AAQO,IAAM,0BAAA,GAAgD;AAAA,EAC3D,QAAA,EAAU;AAAA,IACR;AAAA,MACE,IAAA,EAAM,SAAA;AAAA,MACN,GAAA,EAAK,GAAA;AAAA,MACL,UAAA,EAAY,EAAA;AAAA,MACZ,oBAAA,EAAsB,MAAA;AAAA,MACtB,qBAAA,EAAuB,OAAA;AAAA,MACvB,gBAAA,EAAkB,MAAA;AAAA,MAClB,WAAA,EAAa,CAAA;AAAA,MACb,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,QAAA;AAAA,MACN,GAAA,EAAK,EAAA;AAAA,MACL,UAAA,EAAY,EAAA;AAAA,MACZ,oBAAA,EAAsB,MAAA;AAAA,MACtB,qBAAA,EAAuB,OAAA;AAAA,MACvB,gBAAA,EAAkB,MAAA;AAAA,MAClB,WAAA,EAAa,CAAA;AAAA,MACb,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,SAAA;AAAA,MACN,GAAA,EAAK,GAAA;AAAA,MACL,UAAA,EAAY,EAAA;AAAA,MACZ,oBAAA,EAAsB,MAAA;AAAA,MACtB,qBAAA,EAAuB,OAAA;AAAA,MACvB,gBAAA,EAAkB,MAAA;AAAA,MAClB,WAAA,EAAa,CAAA;AAAA,MACb,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,SAAA;AAAA,MACN,GAAA,EAAK,EAAA;AAAA,MACL,UAAA,EAAY,EAAA;AAAA,MACZ,oBAAA,EAAsB,MAAA;AAAA,MACtB,qBAAA,EAAuB,OAAA;AAAA,MACvB,gBAAA,EAAkB,MAAA;AAAA,MAClB,WAAA,EAAa,CAAA;AAAA,MACb,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA;AAAA,MACE,IAAA,EAAM,OAAA;AAAA,MACN,GAAA,EAAK,CAAA;AAAA,MACL,UAAA,EAAY,EAAA;AAAA,MACZ,oBAAA,EAAsB,MAAA;AAAA,MACtB,qBAAA,EAAuB,OAAA;AAAA,MACvB,gBAAA,EAAkB,MAAA;AAAA,MAClB,WAAA,EAAa,CAAA;AAAA,MACb,iBAAA,EAAmB;AAAA;AACrB,GACF;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAK,EAAA,EAAG;AAAA,IACnC,IAAA,EAAM,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAK,GAAA;AAAI,GACrC;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS;AAAA;AAAA,GACX;AAAA,EACA,SAAA,EAAW;AAAA,IACT,SAAA,EAAW;AAAA;AAAA,GACb;AAAA,EACA,UAAA,EAAY;AAAA,IACV,KAAA,EAAO;AAAA,MACL,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,cAAA;AAAA,QACR,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,WAAA;AAAA,QACR,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,WAAA;AAAA,QACR,QAAA,EAAU;AAAA;AACZ,KACF;AAAA,IACA,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,OAAO,IAAA;AAAK,GACrC;AAAA,EACA,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,SAAA;AAAA;AAAA,IACT,MAAA,EAAQ,GAAA;AAAA;AAAA,IACR,SAAA,EAAW;AAAA;AAAA;AAEf;;;ACpGA,SAAS,aAAA,CACP,QAAA,EACA,KAAA,EACA,MAAA,EACyB;AACzB,EAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,IAAS,QAAA,CAAS,QAAQ,OAAO,QAAA;AAClD,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAO,CAAA,KAAM,KAAA,GAAQ,EAAE,GAAG,CAAA,EAAG,GAAG,MAAA,KAAW,CAAE,CAAA;AACvE;AAEA,SAAS,KAAA,CAAM,KAAA,EAAe,GAAA,EAAa,GAAA,EAAqB;AAC9D,EAAA,OAAO,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA;AAC3C;AAEA,SAAS,QAAQ,GAAA,EAAqB;AACpC,EAAA,OAAA,CAAS,GAAA,GAAM,MAAO,GAAA,IAAO,GAAA;AAC/B;AAEO,SAAS,mBAAA,CACd,OACA,MAAA,EACmB;AACnB,EAAA,QAAQ,OAAO,IAAA;AAAM;AAAA,IAEnB,KAAK,iBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,GAAA,EAAK,OAAA,CAAQ,MAAA,CAAO,GAAG;AAAA,SACxB;AAAA,OACH;AAAA,IAEF,KAAK,wBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,UAAA,EAAY,KAAA,CAAM,MAAA,CAAO,UAAA,EAAY,GAAG,GAAG;AAAA,SAC5C;AAAA,OACH;AAAA,IAEF,KAAK,4BAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,sBAAsB,MAAA,CAAO;AAAA,SAC9B;AAAA,OACH;AAAA,IAEF,KAAK,6BAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,uBAAuB,MAAA,CAAO;AAAA,SAC/B;AAAA,OACH;AAAA,IAEF,KAAK,gCAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,kBAAkB,MAAA,CAAO;AAAA,SAC1B;AAAA,OACH;AAAA,IAEF,KAAK,2BAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,WAAA,EAAa,OAAA,CAAQ,MAAA,CAAO,GAAG;AAAA,SAChC;AAAA,OACH;AAAA,IAEF,KAAK,iCAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,mBAAmB,MAAA,CAAO;AAAA,SAC3B;AAAA,OACH;AAAA,IAEF,KAAK,uBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,eAAA,EAAiB,GAAG,CAAC;AAAA,SAC7C;AAAA,OACH;AAAA,IAEF,KAAK,yBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,QAAA,EAAU;AAAA,SACX;AAAA,OACH;AAAA,IAEF,KAAK,sBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,GAAA,EAAK,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA;AAAA,UACvB,UAAA,EAAY,KAAA,CAAM,MAAA,CAAO,UAAA,EAAY,GAAG,GAAG,CAAA;AAAA,UAC3C,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,QAAA,EAAU,GAAG,CAAC;AAAA,SACtC;AAAA,OACH;AAAA,IAEF,KAAK,4BAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,eAAA,EAAiB,GAAG,CAAC;AAAA,SACjD;AAAA,OACH;AAAA,IAEF,KAAK,8BAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,YAAA,EAAc;AAAA,SACf;AAAA,OACH;AAAA,IAEF,KAAK,2BAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,QAAA,EAAU,aAAA,CAAc,KAAA,CAAM,QAAA,EAAU,OAAO,KAAA,EAAO;AAAA,UACpD,GAAA,EAAK,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA;AAAA,UACvB,UAAA,EAAY,KAAA,CAAM,MAAA,CAAO,UAAA,EAAY,GAAG,GAAG,CAAA;AAAA,UAC3C,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,QAAA,EAAU,GAAG,CAAC;AAAA,SAC1C;AAAA,OACH;AAAA;AAAA,IAGF,KAAK,cAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,YAAA,EAAc;AAAA,UACZ,GAAG,KAAA,CAAM,YAAA;AAAA,UACT,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,GAAG,CAAC;AAAA;AACpC,OACF;AAAA,IAEF,KAAK,aAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,YAAA,EAAc;AAAA,UACZ,GAAG,KAAA,CAAM,YAAA;AAAA,UACT,OAAA,EAAS,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,GAAG,CAAC;AAAA;AACnC,OACF;AAAA;AAAA,IAGF,KAAK,iCAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,gBAAA,EAAkB;AAAA,UAChB,GAAG,KAAA,CAAM,gBAAA;AAAA,UACT,KAAA,EAAO,EAAE,GAAG,KAAA,CAAM,iBAAiB,KAAA,EAAO,QAAA,EAAU,OAAO,QAAA;AAAS;AACtE,OACF;AAAA,IAEF,KAAK,4BAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,gBAAA,EAAkB;AAAA,UAChB,GAAG,KAAA,CAAM,gBAAA;AAAA,UACT,KAAA,EAAO,EAAE,GAAG,KAAA,CAAM,gBAAA,CAAiB,OAAO,GAAA,EAAK,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA;AAAE;AACrE,OACF;AAAA,IAEF,KAAK,gCAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,gBAAA,EAAkB;AAAA,UAChB,GAAG,KAAA,CAAM,gBAAA;AAAA,UACT,IAAA,EAAM,EAAE,GAAG,KAAA,CAAM,iBAAiB,IAAA,EAAM,QAAA,EAAU,OAAO,QAAA;AAAS;AACpE,OACF;AAAA,IAEF,KAAK,2BAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,gBAAA,EAAkB;AAAA,UAChB,GAAG,KAAA,CAAM,gBAAA;AAAA,UACT,IAAA,EAAM,EAAE,GAAG,KAAA,CAAM,gBAAA,CAAiB,MAAM,GAAA,EAAK,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA;AAAE;AACnE,OACF;AAAA;AAAA,IAGF,KAAK,qBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,OAAA,EAAS;AAAA,UACP,OAAA,EAAS,KAAA,CAAM,MAAA,CAAO,OAAA,EAAS,GAAG,CAAC;AAAA;AACrC,OACF;AAAA;AAAA,IAGF,KAAK,yBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,SAAA,EAAW;AAAA,UACT,SAAA,EAAW,KAAA,CAAM,MAAA,CAAO,SAAA,EAAW,GAAG,CAAC;AAAA;AACzC,OACF;AAAA;AAAA,IAGF,KAAK,0BAAA,EAA4B;AAC/B,MAAA,MAAM,oBAAoB,0BAAA,CAA2B,UAAA;AACrD,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,KAAA,CAAM,UAAA,EAAY,KAAA,IAAS,iBAAA,CAAkB,KAAA;AAAA,UACpD,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,QAAA,EAAU,IAAI,EAAE,CAAA;AAAA,YACvC,OAAO,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,KAAA,IAAS,kBAAkB,KAAA,CAAM;AAAA;AAClE;AACF,OACF;AAAA,IACF;AAAA,IAEA,KAAK,sBAAA,EAAwB;AAC3B,MAAA,MAAM,oBAAoB,0BAAA,CAA2B,UAAA;AACrD,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,KAAA,CAAM,UAAA,EAAY,KAAA,IAAS,iBAAA,CAAkB,KAAA;AAAA,UACpD,KAAA,EAAO;AAAA,YACL,UAAU,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,QAAA,IAAY,kBAAkB,KAAA,CAAM,QAAA;AAAA,YACtE,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,KAAK,GAAG;AAAA;AACrC;AACF,OACF;AAAA,IACF;AAAA,IAEA,KAAK,eAAA,EAAiB;AACpB,MAAA,MAAM,oBAAoB,0BAAA,CAA2B,UAAA;AACrD,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,UAAA,EAAY;AAAA,UACV,KAAA,EAAO;AAAA,YACL,MAAM,MAAA,CAAO,IAAA;AAAA,YACb,SAAS,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,OAAA,IAAW,kBAAkB,KAAA,CAAM,OAAA;AAAA,YACpE,SAAS,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,OAAA,IAAW,kBAAkB,KAAA,CAAM;AAAA,WACtE;AAAA,UACA,KAAA,EAAO,KAAA,CAAM,UAAA,EAAY,KAAA,IAAS,iBAAA,CAAkB;AAAA;AACtD,OACF;AAAA,IACF;AAAA,IAEA,KAAK,kBAAA,EAAoB;AACvB,MAAA,MAAM,oBAAoB,0BAAA,CAA2B,UAAA;AACrD,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,UAAA,EAAY;AAAA,UACV,KAAA,EAAO;AAAA,YACL,MAAM,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,IAAA,IAAQ,kBAAkB,KAAA,CAAM,IAAA;AAAA,YAC9D,SAAS,MAAA,CAAO,IAAA;AAAA,YAChB,SAAS,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,OAAA,IAAW,kBAAkB,KAAA,CAAM;AAAA,WACtE;AAAA,UACA,KAAA,EAAO,KAAA,CAAM,UAAA,EAAY,KAAA,IAAS,iBAAA,CAAkB;AAAA;AACtD,OACF;AAAA,IACF;AAAA,IAEA,KAAK,kBAAA,EAAoB;AACvB,MAAA,MAAM,oBAAoB,0BAAA,CAA2B,UAAA;AACrD,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,UAAA,EAAY;AAAA,UACV,KAAA,EAAO;AAAA,YACL,MAAM,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,IAAA,IAAQ,kBAAkB,KAAA,CAAM,IAAA;AAAA,YAC9D,SAAS,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,OAAA,IAAW,kBAAkB,KAAA,CAAM,OAAA;AAAA,YACpE,SAAS,MAAA,CAAO;AAAA,WAClB;AAAA,UACA,KAAA,EAAO,KAAA,CAAM,UAAA,EAAY,KAAA,IAAS,iBAAA,CAAkB;AAAA;AACtD,OACF;AAAA,IACF;AAAA;AAAA,IAGA,KAAK,kBAAA,EAAoB;AACvB,MAAA,MAAM,eAAe,0BAAA,CAA2B,KAAA;AAChD,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,KAAA,EAAO;AAAA,UACL,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,MAAA,EAAQ,KAAA,CAAM,KAAA,EAAO,MAAA,IAAU,YAAA,CAAa,MAAA;AAAA,UAC5C,SAAA,EAAW,KAAA,CAAM,KAAA,EAAO,SAAA,IAAa,YAAA,CAAa;AAAA;AACpD,OACF;AAAA,IACF;AAAA,IAEA,KAAK,iBAAA,EAAmB;AACtB,MAAA,MAAM,eAAe,0BAAA,CAA2B,KAAA;AAChD,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,KAAA,CAAM,KAAA,EAAO,OAAA,IAAW,YAAA,CAAa,OAAA;AAAA,UAC9C,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,SAAA,EAAW,KAAA,CAAM,KAAA,EAAO,SAAA,IAAa,YAAA,CAAa;AAAA;AACpD,OACF;AAAA,IACF;AAAA,IAEA,KAAK,qBAAA,EAAuB;AAC1B,MAAA,MAAM,eAAe,0BAAA,CAA2B,KAAA;AAChD,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,KAAA,CAAM,KAAA,EAAO,OAAA,IAAW,YAAA,CAAa,OAAA;AAAA,UAC9C,MAAA,EAAQ,KAAA,CAAM,KAAA,EAAO,MAAA,IAAU,YAAA,CAAa,MAAA;AAAA,UAC5C,WAAW,MAAA,CAAO;AAAA;AACpB,OACF;AAAA,IACF;AAAA;AAAA,IAGA,KAAK,kBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,SAAS,EAAE,GAAG,MAAM,OAAA,EAAS,IAAA,EAAM,OAAO,IAAA;AAAK,OACjD;AAAA,IAEF,KAAK,mBAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,SAAS,EAAE,GAAG,MAAM,OAAA,EAAS,KAAA,EAAO,OAAO,KAAA;AAAM,OACnD;AAAA;AAAA,IAGF,KAAK,OAAA;AACH,MAAA,OAAO,0BAAA;AAAA,IAET,KAAK,YAAA;AACH,MAAA,OAAO,MAAA,CAAO,KAAA;AAAA,IAEhB;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AC5UO,SAAS,sBAAsB,GAAA,EAAqB;AACzD,EAAA,MAAM,CAAA,GAAA,CAAM,GAAA,GAAM,GAAA,GAAO,GAAA,IAAO,GAAA;AAChC,EAAA,MAAM,IAAI,CAAA,GAAI,IAAA,CAAK,IAAK,CAAA,GAAI,EAAA,GAAM,IAAI,CAAC,CAAA;AAEvC,EAAA,IAAI,GAAW,CAAA,EAAW,CAAA;AAC1B,EAAA,IAAI,IAAI,EAAA,EAAU;AAAE,IAAA,CAAA,GAAI,CAAA;AAAG,IAAA,CAAA,GAAI,CAAA;AAAG,IAAA,CAAA,GAAI,CAAA;AAAA,EAAG,CAAA,MAAA,IAChC,IAAI,GAAA,EAAK;AAAE,IAAA,CAAA,GAAI,CAAA;AAAG,IAAA,CAAA,GAAI,CAAA;AAAG,IAAA,CAAA,GAAI,CAAA;AAAA,EAAG,CAAA,MAAA,IAChC,IAAI,GAAA,EAAK;AAAE,IAAA,CAAA,GAAI,CAAA;AAAG,IAAA,CAAA,GAAI,CAAA;AAAG,IAAA,CAAA,GAAI,CAAA;AAAA,EAAG,CAAA,MAAA,IAChC,IAAI,GAAA,EAAK;AAAE,IAAA,CAAA,GAAI,CAAA;AAAG,IAAA,CAAA,GAAI,CAAA;AAAG,IAAA,CAAA,GAAI,CAAA;AAAA,EAAG,CAAA,MAAA,IAChC,IAAI,GAAA,EAAK;AAAE,IAAA,CAAA,GAAI,CAAA;AAAG,IAAA,CAAA,GAAI,CAAA;AAAG,IAAA,CAAA,GAAI,CAAA;AAAA,EAAG,CAAA,MACvB;AAAE,IAAA,CAAA,GAAI,CAAA;AAAG,IAAA,CAAA,GAAI,CAAA;AAAG,IAAA,CAAA,GAAI,CAAA;AAAA,EAAG;AAEzC,EAAA,OAAOA,oBAAY,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAW,CAAA,CAAE,CAAA;AAC1C;;;AChBA,SAAS,oBAAoB,OAAA,EAAyB;AACpD,EAAA,OAAO,MAAO,OAAA,GAAU,GAAA;AAC1B;AAKA,SAAS,sBAAsB,SAAA,EAA2B;AACxD,EAAA,OAAO,SAAA,GAAY,CAAA;AACrB;AAMA,SAAS,sBAAA,CAAuB,UAAkB,KAAA,EAAe;AAC/D,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,QAAA,GAAY,SAAS,CAAE,CAAA;AAAA,IACtC,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,KAAK,CAAA;AAAA,IAC/B,IAAA,EAAM,QAAA;AAAA,IACN,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,QAAA,GAAW,KAAK,CAAA;AAAA,IAC/B,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,QAAA,GAAY,SAAS,CAAE,CAAA;AAAA,IACtC,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,QAAA,GAAY,SAAS,CAAE,CAAA;AAAA,IACtC,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,QAAA,GAAY,SAAS,CAAE;AAAA,GACzC;AACF;AAKA,IAAM,aAAA,GAA2G;AAAA,EAC/G,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,WAAA;AAAA,IACR,QAAA,EAAU;AAAA;AAEd,CAAA;AAKA,IAAM,aAAA,GAAgB;AAAA,EACpB,OAAA,EAAS,SAAA;AAAA;AAAA,EACT,MAAA,EAAQ,GAAA;AAAA;AAAA,EACR,SAAA,EAAW;AAAA;AACb,CAAA;AAMO,SAAS,cAAc,KAAA,EAA8C;AAC1E,EAAA,MAAM,QAAA,GAAqC,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK;AACjE,IAAA,MAAM,QAAA,GAAW,qBAAA,CAAsB,CAAA,CAAE,GAAG,CAAA;AAE5C,IAAA,MAAM,YAAA,GAAe,CAAA,CAAE,oBAAA,KAAyB,MAAA,GAC5C,EAAE,SAAA,EAAW,CAAA,CAAE,qBAAA,EAAuB,QAAA,EAAU,CAAA,CAAE,oBAAA,EAAqB,GACvE,MAAA;AAEJ,IAAA,MAAM,iBAAA,GAAoB,CAAA,CAAE,gBAAA,KAAqB,MAAA,GAC7C;AAAA,MACE,GAAA,EAAK,qBAAA,CAAsB,CAAA,CAAE,WAAW,CAAA;AAAA,MACxC,UAAU,CAAA,CAAE,gBAAA;AAAA,MACZ,WAAW,CAAA,CAAE;AAAA,KACf,GACA,MAAA;AAEJ,IAAA,OAAO;AAAA,MACL,GAAA,EAAK,QAAA;AAAA,MACL,YAAY,CAAA,CAAE,UAAA;AAAA,MACd,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,GAAI,EAAE,QAAA,KAAa,MAAA,GAAY,EAAE,kBAAA,EAAoB,CAAA,CAAE,QAAA,EAAS,GAAI,EAAC;AAAA,MACrE,GAAI,EAAE,YAAA,KAAiB,MAAA,GAAY,EAAE,sBAAA,EAAwB,CAAA,CAAE,YAAA,EAAa,GAAI;AAAC,KACnF;AAAA,EACF,CAAC,CAAA;AAGD,EAAA,MAAM,QAAwC,KAAA,CAAM,gBAAA,CAAiB,MAAM,QAAA,KAAa,MAAA,GACpF,EAAE,GAAA,EAAK,qBAAA,CAAsB,MAAM,gBAAA,CAAiB,KAAA,CAAM,GAAG,CAAA,EAAG,QAAA,EAAU,MAAM,gBAAA,CAAiB,KAAA,CAAM,UAAS,GAChH,MAAA;AAEJ,EAAA,MAAM,OAAuC,KAAA,CAAM,gBAAA,CAAiB,KAAK,QAAA,KAAa,MAAA,GAClF,EAAE,GAAA,EAAK,qBAAA,CAAsB,MAAM,gBAAA,CAAiB,IAAA,CAAK,GAAG,CAAA,EAAG,QAAA,EAAU,MAAM,gBAAA,CAAiB,IAAA,CAAK,UAAS,GAC9G,MAAA;AAEJ,EAAA,MAAM,aAAsC,KAAA,IAAS,IAAA,GAAQ,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAE/E,EAAA,MAAM,YAAA,GAA6B;AAAA,IACjC,QAAA,EAAU,MAAM,YAAA,CAAa,QAAA;AAAA,IAC7B,OAAA,EAAS,MAAM,YAAA,CAAa,OAAA;AAAA,IAC5B,GAAI,UAAA,GAAa,EAAE,UAAA,KAAe;AAAC,GACrC;AAGA,EAAA,MAAM,iBAAA,GAAoB,mBAAA,CAAoB,KAAA,CAAM,OAAA,EAAS,WAAW,GAAG,CAAA;AAG3E,EAAA,MAAM,gBAAA,GAAmB,qBAAA,CAAsB,KAAA,CAAM,SAAA,EAAW,aAAa,GAAG,CAAA;AAEhF,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,EAAE,YAAA,EAAc,QAAA,EAAS;AAAA,IACtC,MAAA,EAAQ;AAAA,MACN,SAAW,EAAE,YAAA,EAAc,GAAG,WAAA,EAAa,IAAA,EAAM,YAAY,GAAA,EAAI;AAAA,MACjE,SAAW,EAAE,YAAA,EAAc,GAAG,WAAA,EAAa,IAAA,EAAM,YAAY,GAAA,EAAI;AAAA,MACjE,WAAW,EAAE,YAAA,EAAc,GAAG,WAAA,EAAa,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,MAClE,QAAW,EAAE,YAAA,EAAc,GAAG,WAAA,EAAa,GAAA,EAAK,YAAY,IAAA;AAAK,KACnE;AAAA,IACA,SAAA,EAAW;AAAA,MACT,OAAA,EAAS,CAAC,KAAA,EAAO,CAAA,EAAG,IAAI;AAAA,KAC1B;AAAA,IACA,OAAA,EAAS;AAAA,MACP,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,iBAAiB,CAAA;AAAA,MACpC,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,iBAAiB,CAAA;AAAA,MACpC,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,iBAAiB,CAAA;AAAA,MACrC,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,iBAAiB,CAAA;AAAA,MACrC,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,iBAAiB,CAAA;AAAA,MACrC,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,iBAAiB;AAAA,KACxC;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,gBAAgB,CAAA;AAAA,MACnC,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,gBAAgB,CAAA;AAAA,MACnC,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,gBAAgB,CAAA;AAAA,MACnC,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,gBAAgB,CAAA;AAAA,MACpC,IAAA,EAAM;AAAA,KACR;AAAA,IACA,UAAA,EAAY;AAAA,MACV,KAAA,EAAO,KAAA,CAAM,UAAA,EAAY,KAAA,IAAS,aAAA;AAAA,MAClC,KAAA,EAAO,sBAAA;AAAA,QACL,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,QAAA,IAAY,EAAA;AAAA,QACpC,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,KAAA,IAAS;AAAA,OACnC;AAAA,MACA,YAAY,EAAE,KAAA,EAAO,MAAM,MAAA,EAAQ,GAAA,EAAK,SAAS,IAAA,EAAK;AAAA,MACtD,UAAA,EAAY,EAAE,OAAA,EAAS,GAAA,EAAK,QAAQ,GAAA,EAAK,QAAA,EAAU,GAAA,EAAK,IAAA,EAAM,GAAA;AAAI,KACpE;AAAA,IACA,KAAA,EAAO,MAAM,KAAA,IAAS;AAAA,GACxB;AACF;;;AC7IO,SAAS,gBACd,YAAA,EACuB;AACvB,EAAA,MAAM,gBAAmC,YAAA,GACrC,EAAE,GAAG,0BAAA,EAA4B,GAAG,cAAa,GACjD,0BAAA;AAEJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,gBAAA,CAAW,qBAAqB,aAAa,CAAA;AAEvE,EAAA,MAAM,WAAA,GAAcC,cAAQ,MAAM,aAAA,CAAc,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAE/D,EAAA,MAAM,KAAA,GAAQC,iBAAA,CAAY,MAAM,QAAA,CAAS,EAAE,MAAM,OAAA,EAAS,CAAA,EAAG,EAAE,CAAA;AAE/D,EAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,WAAA,EAAa,KAAA,EAAM;AAC/C;ACvBA,IAAM,aAAA,GAAgB,EAAA;AAMf,SAAS,iBAAiB,KAAA,EAA+D;AAC9F,EAAA,OAAOD,cAAQ,MAAM;AACnB,IAAA,MAAM,QAAQ,KAAA,CAAM,gBAAA,CAAiB,MAAM,QAAA,KAAa,MAAA,GACpD,EAAE,GAAA,EAAK,qBAAA,CAAsB,MAAM,gBAAA,CAAiB,KAAA,CAAM,GAAG,CAAA,EAAG,QAAA,EAAU,MAAM,gBAAA,CAAiB,KAAA,CAAM,UAAS,GAChH,MAAA;AACJ,IAAA,MAAM,OAAO,KAAA,CAAM,gBAAA,CAAiB,KAAK,QAAA,KAAa,MAAA,GAClD,EAAE,GAAA,EAAK,qBAAA,CAAsB,MAAM,gBAAA,CAAiB,IAAA,CAAK,GAAG,CAAA,EAAG,QAAA,EAAU,MAAM,gBAAA,CAAiB,IAAA,CAAK,UAAS,GAC9G,MAAA;AACJ,IAAA,MAAM,aAAc,KAAA,IAAS,IAAA,GAAQ,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAEvD,IAAA,MAAM,YAAA,GAA6B;AAAA,MACjC,QAAA,EAAU,MAAM,YAAA,CAAa,QAAA;AAAA,MAC7B,OAAA,EAAS,MAAM,YAAA,CAAa,OAAA;AAAA,MAC5B,GAAI,UAAA,GAAa,EAAE,UAAA,KAAe;AAAC,KACrC;AAEA,IAAA,OAAO,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK;AAC7B,MAAA,MAAM,QAAA,GAAW,qBAAA,CAAsB,CAAA,CAAE,GAAG,CAAA;AAC5C,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,oBAAA,KAAyB,MAAA,GACrC,EAAE,SAAA,EAAW,CAAA,CAAE,qBAAA,EAAuB,QAAA,EAAU,CAAA,CAAE,oBAAA,EAAqB,GACvE,MAAA;AACJ,MAAA,MAAM,MAAM,CAAA,CAAE,gBAAA,KAAqB,MAAA,GAC/B,EAAE,KAAK,qBAAA,CAAsB,CAAA,CAAE,WAAW,CAAA,EAAG,UAAU,CAAA,CAAE,gBAAA,EAAkB,SAAA,EAAW,CAAA,CAAE,mBAAkB,GAC1G,MAAA;AACJ,MAAA,OAAOE,wBAAgB,QAAA,EAAU,CAAA,CAAE,YAAY,YAAA,EAAc,aAAA,EAAe,OAAO,GAAG,CAAA;AAAA,IACxF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACZ;;;AC5BO,IAAM,mBAAA,GAAgG;AAAA,EAC3G,CAAA,EAAG,EAAE,GAAA,EAAK,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA;AAAA,EACvB,CAAA,EAAG,EAAE,GAAA,EAAK,EAAA,EAAI,KAAK,EAAA,EAAG;AAAA;AAAA,EACtB,CAAA,EAAG,EAAE,GAAA,EAAK,GAAA,EAAK,KAAK,GAAA;AAAI;AAC1B;ACcO,SAAS,iBAAA,CACd,OACA,YAAA,EACgB;AAChB,EAAA,OAAOF,cAAQ,MAAM;AACnB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,QAAA,CAAS,YAAY,CAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA;AAChC,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS;AACxB,MAAA,OAAO,EAAE,kBAAkB,IAAA,EAAM,QAAA,EAAU,MAAM,iBAAA,EAAmB,IAAA,EAAM,qBAAqB,GAAA,EAAI;AAAA,IACrG;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,IAAA;AAG3B,IAAA,MAAM,QAAQ,KAAA,CAAM,gBAAA,CAAiB,MAAM,QAAA,KAAa,MAAA,GACpD,EAAE,GAAA,EAAK,qBAAA,CAAsB,MAAM,gBAAA,CAAiB,KAAA,CAAM,GAAG,CAAA,EAAG,QAAA,EAAU,MAAM,gBAAA,CAAiB,KAAA,CAAM,UAAS,GAChH,MAAA;AACJ,IAAA,MAAM,OAAO,KAAA,CAAM,gBAAA,CAAiB,KAAK,QAAA,KAAa,MAAA,GAClD,EAAE,GAAA,EAAK,qBAAA,CAAsB,MAAM,gBAAA,CAAiB,IAAA,CAAK,GAAG,CAAA,EAAG,QAAA,EAAU,MAAM,gBAAA,CAAiB,IAAA,CAAK,UAAS,GAC9G,MAAA;AACJ,IAAA,MAAM,aAAc,KAAA,IAAS,IAAA,GAAQ,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AAEvD,IAAA,MAAM,YAAA,GAA6B;AAAA,MACjC,QAAA,EAAU,MAAM,YAAA,CAAa,QAAA;AAAA,MAC7B,OAAA,EAAS,MAAM,YAAA,CAAa,OAAA;AAAA,MAC5B,GAAI,UAAA,GAAa,EAAE,UAAA,KAAe;AAAC,KACrC;AAGA,IAAA,MAAM,eAAA,GAAkB,qBAAA,CAAsB,OAAA,CAAQ,GAAG,CAAA;AACzD,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,oBAAA,KAAyB,MAAA,GAClD,EAAE,SAAA,EAAW,OAAA,CAAQ,qBAAA,EAAuB,QAAA,EAAU,OAAA,CAAQ,oBAAA,EAAqB,GACnF,MAAA;AACJ,IAAA,MAAM,aAAa,OAAA,CAAQ,gBAAA,KAAqB,MAAA,GAC5C,EAAE,KAAK,qBAAA,CAAsB,OAAA,CAAQ,WAAW,CAAA,EAAG,UAAU,OAAA,CAAQ,gBAAA,EAAkB,SAAA,EAAW,OAAA,CAAQ,mBAAkB,GAC5H,MAAA;AAEJ,IAAA,MAAM,YAAA,GAAe,IAAA,KAAS,OAAA,GAAU,IAAA,GAAO,GAAA;AAC/C,IAAA,MAAM,UAAA,GAAaG,iBAAS,eAAA,EAAiB,OAAA,CAAQ,YAAY,YAAA,EAAc,YAAA,EAAc,cAAc,UAAU,CAAA;AAGrH,IAAA,MAAM,eAAA,GAAkB,qBAAA,CAAsB,OAAA,CAAQ,GAAG,CAAA;AACzD,IAAA,MAAM,iBAAA,GAAoB,IAAA,KAAS,OAAA,GAAU,OAAA,GAAmB,MAAA;AAChE,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,oBAAA,KAAyB,MAAA,GAClD,EAAE,SAAA,EAAW,OAAA,CAAQ,qBAAA,EAAuB,QAAA,EAAU,OAAA,CAAQ,oBAAA,EAAqB,GACnF,MAAA;AACJ,IAAA,MAAM,aAAa,OAAA,CAAQ,gBAAA,KAAqB,MAAA,GAC5C,EAAE,KAAK,qBAAA,CAAsB,OAAA,CAAQ,WAAW,CAAA,EAAG,UAAU,OAAA,CAAQ,gBAAA,EAAkB,SAAA,EAAW,OAAA,CAAQ,mBAAkB,GAC5H,MAAA;AAGJ,IAAA,MAAM,SAAA,GAAYC,0BAAA;AAAA,MAChB,eAAA;AAAA,MAAiB,OAAA,CAAQ,UAAA;AAAA,MAAY,YAAA;AAAA,MACrC,GAAA;AAAA,MAAK,iBAAA;AAAA,MAAmB,YAAA;AAAA,MAAc,UAAA;AAAA,MAAY;AAAA,KACpD;AACA,IAAA,MAAM,mBAAA,GAAsBC,kCAAA,CAA2B,YAAA,EAAc,SAAA,CAAU,MAAM,CAAC,CAAA;AAGtF,IAAA,MAAM,iBAAA,GAAoB,IAAA,KAAS,MAAA,GAAS,OAAA,CAAQ,eAAe,OAAA,CAAQ,QAAA;AAG3E,IAAA,IAAI,sBAAsB,MAAA,EAAW;AACnC,MAAA,OAAO,EAAE,gBAAA,EAAkB,IAAA,EAAM,UAAU,IAAA,EAAM,iBAAA,EAAmB,MAAM,mBAAA,EAAoB;AAAA,IAChG;AAGA,IAAA,MAAM,QAAA,GAAWF,gBAAA;AAAA,MACf,eAAA;AAAA,MAAiB,OAAA,CAAQ,UAAA;AAAA,MAAY,YAAA;AAAA,MACrC,iBAAA;AAAA,MAAmB,YAAA;AAAA,MAAc;AAAA,KACnC;AAGA,IAAA,MAAM,QAAA,GAAWG,4BAAA,CAAqB,QAAA,CAAS,IAAA,EAAM,WAAW,IAAI,CAAA;AAEpE,IAAA,OAAO;AAAA,MACL,gBAAA,EAAkB,QAAA;AAAA,MAClB,UAAU,QAAA,IAAY,GAAA;AAAA,MACtB,mBAAmB,QAAA,IAAY,CAAA;AAAA,MAC/B;AAAA,KACF;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,YAAY,CAAC,CAAA;AAC1B;AC1FA,IAAM,oBAAA,GAAuB,IAAA;AAG7B,IAAI,iBAAA,GAA8C,IAAA;AAElD,SAAS,sBAAA,GAA4C;AACnD,EAAA,MAAM,GAAA,GAAgB,IAAI,KAAA,CAAM,GAAG,CAAA;AACnC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,qBAAA,CAAsB,CAAC,CAAA;AAAA,EAClC;AACA,EAAA,OAAO,GAAA;AACT;AAMO,SAAS,sBAAsB,QAAA,EAA0B;AAC9D,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,IAAA,iBAAA,GAAoB,sBAAA,EAAuB;AAAA,EAC7C;AAEA,EAAA,MAAM,MAAA,GAAA,CAAW,QAAA,GAAW,GAAA,GAAO,GAAA,IAAO,GAAA;AAC1C,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,IAAI,SAAA,GAAY,QAAA;AAEhB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAE5B,IAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,iBAAA,CAAkB,CAAC,IAAI,MAAM,CAAA;AAClD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,MAAM,GAAG,CAAA;AACrC,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,SAAA,GAAY,KAAA;AACZ,MAAA,OAAA,GAAU,CAAA;AAAA,IACZ;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAUO,SAAS,kBAAA,CACd,KACA,YAAA,EACyB;AAEzB,EAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,GAAG,IAAI,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA;AACrD,EAAA,IAAI,CAAC,mBAAmB,IAAA,CAAK,OAAO,KAAK,CAAC,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA,EAAG;AAC1E,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAOC,kBAAU,GAAG,CAAA;AAC1B,EAAA,MAAM,KAAA,GAAQT,oBAAY,IAAI,CAAA;AAG9B,EAAA,MAAM,eAAA,GAAkBO,kCAAAA,CAA2B,YAAA,EAAc,KAAA,CAAM,CAAC,CAAA;AAGxE,EAAA,IAAI,KAAA,CAAM,IAAI,oBAAA,EAAsB;AAClC,IAAA,OAAO,EAAE,GAAA,EAAK,CAAA,EAAG,UAAA,EAAY,GAAG,eAAA,EAAgB;AAAA,EAClD;AAGA,EAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,KAAA,CAAM,CAAC,CAAA;AAGzC,EAAA,MAAM,SAAA,GAAYG,4BAAA,CAAqB,KAAA,CAAM,CAAA,EAAG,MAAM,CAAC,CAAA;AACvD,EAAA,MAAM,UAAA,GAAa,SAAA,GAAY,CAAA,GAC3B,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,CAAA,GAAI,SAAA,GAAY,GAAG,CAAC,CAAA,GACnD,CAAA;AAEJ,EAAA,OAAO,EAAE,GAAA,EAAK,UAAA,EAAY,eAAA,EAAgB;AAC5C;;;ACrFA,IAAM,gBAAA,GAAmB;AAAA,EACvB,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EACnC,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA;AAC1B,CAAA;AAWA,SAAS,UAAA,CAAW,eAAuC,EAAA,EAAoB;AAC7E,EAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAA,CAAO,IAAI,EAAA,KAAO,aAAA,CAAc,SAAS,CAAA,CAAE,CAAA;AAC5D,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG,GAAG,CAAC,CAAA;AACnE,EAAA,OAAOC,iBAAA,CAAU,aAAA,CAAc,OAAO,CAAA,CAAE,IAAI,CAAA;AAC9C;AAEO,SAAS,aAAa,EAAE,OAAA,EAAS,OAAO,QAAA,EAAU,aAAA,EAAe,OAAM,EAAsB;AAClG,EAAA,MAAM,MAAA,GAASC,qBAAU,CAAC,CAAA;AAC1B,EAAA,MAAM,QAAA,GAAW,oBAAoB,KAAK,CAAA;AAC1C,EAAA,MAAM,YAAY,KAAA,KAAU,CAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,IAAA;AAG3B,EAAA,MAAM,iBAAA,GAAoB,IAAA,KAAS,MAAA,GAAS,OAAA,CAAQ,eAAe,OAAA,CAAQ,QAAA;AAG3E,EAAA,MAAM,iBAAA,GAAoB,IAAA,KAAS,MAAA,GAAS,4BAAA,GAAwC,uBAAA;AACpF,EAAA,MAAM,mBAAA,GAAsB,IAAA,KAAS,MAAA,GAAS,8BAAA,GAA0C,yBAAA;AACxF,EAAA,MAAM,aAAA,GAAgB,IAAA,KAAS,MAAA,GAAS,2BAAA,GAAuC,sBAAA;AAG/E,EAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,KAAA,EAAO,KAAK,CAAA;AAG3C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,sBAAA,CAAM,SAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,sBAAA,CAAM,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,sBAAA,CAAM,SAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,sBAAA,CAAM,SAAS,KAAK,CAAA;AAG5D,EAAAA,sBAAA,CAAM,UAAU,MAAM;AACpB,IAAA,UAAA,CAAW,EAAE,CAAA;AACb,IAAA,WAAA,CAAY,EAAE,CAAA;AACd,IAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,IAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAGT,EAAA,MAAM,YAAA,GAAeA,sBAAA,CAAM,OAAA,CAAQ,MAAM;AACvC,IAAA,IAAI,CAAC,aAAA,IAAiB,aAAA,CAAc,MAAA,KAAW,GAAG,OAAO,EAAA;AACzD,IAAA,MAAM,EAAA,GAAK,qBAAqB,IAAA,CAAK,mBAAA;AACrC,IAAA,OAAO,UAAA,CAAW,eAAe,EAAE,CAAA;AAAA,EACrC,GAAG,CAAC,aAAA,EAAe,iBAAA,EAAmB,IAAA,CAAK,mBAAmB,CAAC,CAAA;AAG/D,EAAAA,sBAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,YAAA,EAAc;AAClC,MAAA,UAAA,CAAW,YAAY,CAAA;AAAA,IACzB;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,YAAA,EAAc,YAAY,CAAC,CAAA;AAG7C,EAAA,MAAM,YAAA,GAAeA,sBAAA,CAAM,OAAA,CAAQ,MAAoB;AACrD,IAAA,MAAM,QAAQ,KAAA,CAAM,gBAAA,CAAiB,MAAM,QAAA,KAAa,MAAA,GACpD,EAAE,GAAA,EAAK,qBAAA,CAAsB,MAAM,gBAAA,CAAiB,KAAA,CAAM,GAAG,CAAA,EAAG,QAAA,EAAU,MAAM,gBAAA,CAAiB,KAAA,CAAM,UAAS,GAChH,MAAA;AACJ,IAAA,MAAM,OAAO,KAAA,CAAM,gBAAA,CAAiB,KAAK,QAAA,KAAa,MAAA,GAClD,EAAE,GAAA,EAAK,qBAAA,CAAsB,MAAM,gBAAA,CAAiB,IAAA,CAAK,GAAG,CAAA,EAAG,QAAA,EAAU,MAAM,gBAAA,CAAiB,IAAA,CAAK,UAAS,GAC9G,MAAA;AACJ,IAAA,MAAM,aAAc,KAAA,IAAS,IAAA,GAAQ,EAAE,KAAA,EAAO,MAAK,GAAI,MAAA;AACvD,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,MAAM,YAAA,CAAa,QAAA;AAAA,MAC7B,OAAA,EAAS,MAAM,YAAA,CAAa,OAAA;AAAA,MAC5B,GAAI,UAAA,GAAa,EAAE,UAAA,KAAe;AAAC,KACrC;AAAA,EACF,GAAG,CAAC,KAAA,CAAM,YAAA,EAAc,KAAA,CAAM,gBAAgB,CAAC,CAAA;AAE/C,EAAA,MAAM,eAAA,GAAkBA,sBAAA,CAAM,WAAA,CAAY,MAAM;AAC9C,IAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,IAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,EAAK;AAC7B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,WAAA,CAAY,EAAE,CAAA;AACd,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAM,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA,CAAA;AAC3D,IAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,GAAA,EAAK,YAAY,CAAA;AAEnD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,WAAA,CAAY,mBAAmB,CAAA;AAC/B,MAAA;AAAA,IACF;AAEA,IAAA,WAAA,CAAY,EAAE,CAAA;AACd,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,QAAA,CAAS;AAAA,MACP,IAAA,EAAM,aAAA;AAAA,MACN,KAAA;AAAA,MACA,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,UAAU,MAAA,CAAO;AAAA,KAClB,CAAA;AAAA,EACH,GAAG,CAAC,OAAA,EAAS,cAAc,QAAA,EAAU,KAAA,EAAO,aAAa,CAAC,CAAA;AAE1D,EAAA,MAAM,mBAAA,GAAsBA,sBAAA,CAAM,WAAA,CAAY,MAAM;AAClD,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,mBAAA,EAAqB,KAAA,EAAO,CAAA;AAC7C,IAAA,WAAA,CAAY,EAAE,CAAA;AACd,IAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,EACvB,CAAA,EAAG,CAAC,QAAA,EAAU,KAAA,EAAO,mBAAmB,CAAC,CAAA;AAGzC,EAAA,MAAM,WAAA,GAAcA,sBAAA,CAAM,OAAA,CAAQ,MAAM;AACtC,IAAA,IAAI,iBAAA,KAAsB,MAAA,IAAa,IAAA,CAAK,gBAAA,KAAqB,MAAM,OAAO,MAAA;AAC9E,IAAA,IAAI,IAAA,CAAK,UAAU,OAAO,MAAA;AAC1B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,CAAC,CAAA;AAC7C,IAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,MAAA,OAAO,YAAY,KAAK,CAAA,uEAAA,CAAA;AAAA,IAC1B;AACA,IAAA,OAAO,YAAY,KAAK,CAAA,4EAAA,CAAA;AAAA,EAC1B,CAAA,EAAG,CAAC,iBAAA,EAAmB,IAAI,CAAC,CAAA;AAE5B,EAAA,uBACEA,sBAAA,CAAA,aAAA,CAACC,eAAA,EAAA,EAAK,SAAA,EAAW,CAAA,EAAG,KAAA,EAAO,MAAA,CAAO,SAAA,EAAA,kBAChCD,sBAAA,CAAA,aAAA,CAACE,gBAAA,EAAA,EAAK,KAAA,EAAO,CAAC,MAAA,CAAO,KAAA,EAAO,EAAE,KAAA,EAAOJ,iBAAA,CAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA,EAAG,CAAA,EAAA,EACtE,OAAA,CAAQ,IACX,CAAA,EAGC,CAAC,SAAA,IAAa,aAAA,oBACbE,sBAAA,CAAA,aAAA,CAAAA,sBAAA,CAAA,QAAA,EAAA,IAAA,kBACEA,sBAAA,CAAA,aAAA;AAAA,IAACG,2BAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,aAAA;AAAA,MACR,KAAA,EAAO,qBAAqB,IAAA,CAAK,mBAAA;AAAA,MACjC,aAAA,EAAe,CAAC,EAAA,KAAO;AAAE,QAAA,eAAA,CAAgB,KAAK,CAAA;AAAG,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,iBAAA,EAAmB,KAAA,EAAO,eAAA,EAAiB,IAAI,CAAA;AAAA,MAAG,CAAA;AAAA,MACpH,KAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,WAAA;AAAA,MACT,QAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAI,IAAA;AAAA,MACJ,YAAA,EAAY;AAAA;AAAA,GACd,kBACAH,sBAAA,CAAA,aAAA,CAACI,gBAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,0BAClBJ,sBAAA,CAAA,aAAA,CAACI,gBAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,iBAAA,EAAA,kBAClBJ,sBAAA,CAAA,aAAA;AAAA,IAACK,oBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,KAAA;AAAA,MACN,KAAA,EAAO,OAAA;AAAA,MACP,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,WAAA,CAAY,EAAE,CAAA;AAAA,MAChB,CAAA;AAAA,MACA,MAAA,EAAQ,eAAA;AAAA,MACR,eAAA,EAAiB,eAAA;AAAA,MACjB,WAAA,EAAY;AAAA;AAAA,GAEhB,CAAA,EACC,iBAAA,KAAsB,MAAA,oBACrBL,sBAAA,CAAA,aAAA,CAACM,qBAAA,EAAA,EAAU,OAAA,EAAS,mBAAA,EAAqB,KAAA,EAAO,MAAA,CAAO,UAAA,EAAA,kBACrDN,sBAAA,CAAA,aAAA,CAACE,gBAAA,EAAA,EAAK,KAAA,EAAO,CAAC,MAAA,CAAO,QAAA,EAAU,EAAE,KAAA,EAAOJ,iBAAA,CAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA,EAAG,CAAA,EAAA,EAAG,MAE/E,CACF,CAEJ,CAAA,EACC,QAAA,KAAa,EAAA,oBACZE,sBAAA,CAAA,aAAA,CAACE,gBAAA,EAAA,EAAK,KAAA,EAAO,CAAC,MAAA,CAAO,SAAA,EAAW,EAAE,KAAA,EAAOJ,iBAAA,CAAU,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,CAAA,EAAA,EACpE,QACH,CAEJ,CAAA,EAID,SAAA,IAAa,aAAA,oBACZE,sBAAA,CAAA,aAAA,CAACI,gBAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,cAAA,EAAA,EACjB,aAAA,CAAc,GAAA,CAAI,CAAC,OAAO,CAAA,qBACzBJ,sBAAA,CAAA,aAAA;AAAA,IAACI,gBAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,CAAA;AAAA,MACL,KAAA,EAAO,CAAC,MAAA,CAAO,YAAA,EAAc,EAAE,iBAAiBN,iBAAA,CAAU,KAAA,CAAM,IAAI,CAAA,EAAG;AAAA;AAAA,GAE1E,CACH,CAAA,kBAGFE,sBAAA,CAAA,aAAA;AAAA,IAACO,oBAAA;AAAA,IAAA;AAAA,MACC,OAAO,OAAA,CAAQ,GAAA;AAAA,MACf,aAAA,EAAe,CAAC,GAAA,KAAQ,QAAA,CAAS,EAAE,IAAA,EAAM,iBAAA,EAAmB,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,MACxE,KAAA,EAAM,KAAA;AAAA,MACN,SAAA,EAAS,IAAA;AAAA,MACR,GAAI,QAAA,GAAW,EAAE,GAAA,EAAK,QAAA,CAAS,KAAK,GAAA,EAAK,QAAA,CAAS,GAAA,EAAI,GAAI;AAAC;AAAA,GAC9D,kBAEAP,sBAAA,CAAA,aAAA;AAAA,IAACQ,iBAAA;AAAA,IAAA;AAAA,MACC,OAAO,OAAA,CAAQ,UAAA;AAAA,MACf,aAAA,EAAe,CAAC,UAAA,KAAe,QAAA,CAAS,EAAE,IAAA,EAAM,wBAAA,EAA0B,KAAA,EAAO,UAAA,EAAY,CAAA;AAAA,MAC7F,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,KAAA,EAAM,YAAA;AAAA,MACN,SAAA,EAAS;AAAA;AAAA,GACX,kBAEAR,sBAAA,CAAA,aAAA,CAACI,gBAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,uBAClBJ,sBAAA,CAAA,aAAA,CAACI,gBAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,EAAA,kBAClBJ,sBAAA,CAAA,aAAA;AAAA,IAACS,iBAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,gBAAA;AAAA,MACT,OAAO,OAAA,CAAQ,oBAAA;AAAA,MACf,aAAA,EAAe,CAAC,QAAA,KAAa,QAAA,CAAS,EAAE,IAAA,EAAM,4BAAA,EAA8B,KAAA,EAAO,QAAA,EAA4C,CAAA;AAAA,MAC/H,KAAA,EAAM;AAAA;AAAA,GAEV,GACC,OAAA,CAAQ,oBAAA,KAAyB,0BAChCT,sBAAA,CAAA,aAAA,CAACI,gBAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,eAAA,EAAA,kBAClBJ,sBAAA,CAAA,aAAA;AAAA,IAACU,iBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,QAAQ,qBAAA,KAA0B,MAAA;AAAA,MACzC,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,IAAA,EAAM,6BAAA,EAA+B,KAAA,EAAO,SAAA,EAAW,CAAA,GAAI,MAAA,GAAS,OAAA,EAAS,CAAA;AAAA,MAC9G,KAAA,EAAM;AAAA;AAAA,GAEV,CAEJ,CAAA,kBAEAV,sBAAA,CAAA,aAAA,CAACI,gBAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,GAAA,EAAA,kBAClBJ,sBAAA,CAAA,aAAA,CAACI,gBAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,EAAA,kBAClBJ,sBAAA,CAAA,aAAA;AAAA,IAACS,iBAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,gBAAA;AAAA,MACT,OAAO,OAAA,CAAQ,gBAAA;AAAA,MACf,aAAA,EAAe,CAAC,QAAA,KAAa,QAAA,CAAS,EAAE,IAAA,EAAM,gCAAA,EAAkC,KAAA,EAAO,QAAA,EAA0C,CAAA;AAAA,MACjI,KAAA,EAAM;AAAA;AAAA,GAEV,GACC,OAAA,CAAQ,gBAAA,KAAqB,0BAC5BT,sBAAA,CAAA,aAAA,CAACI,gBAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,eAAA,EAAA,kBAClBJ,sBAAA,CAAA,aAAA;AAAA,IAACU,iBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,QAAQ,iBAAA,KAAsB,MAAA;AAAA,MACrC,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,IAAA,EAAM,iCAAA,EAAmC,KAAA,EAAO,SAAA,EAAW,CAAA,GAAI,MAAA,GAAS,OAAA,EAAS,CAAA;AAAA,MAClH,KAAA,EAAM;AAAA;AAAA,GAEV,CAEJ,CAAA,EAEC,OAAA,CAAQ,qBAAqB,MAAA,oBAC5BV,sBAAA,CAAA,aAAA;AAAA,IAACO,oBAAA;AAAA,IAAA;AAAA,MACC,OAAO,OAAA,CAAQ,WAAA;AAAA,MACf,aAAA,EAAe,CAAC,GAAA,KAAQ,QAAA,CAAS,EAAE,IAAA,EAAM,2BAAA,EAA6B,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,MAClF,KAAA,EAAM,cAAA;AAAA,MACN,SAAA,EAAS;AAAA;AAAA,GAGf,CAAA;AAEJ;AAEA,IAAM,MAAA,GAASI,uBAAW,MAAA,CAAO;AAAA,EAC/B,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,EAAA;AAAA,IACL,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,aAAA,EAAe,KAAA;AAAA,IACf,QAAA,EAAU,MAAA;AAAA,IACV,GAAA,EAAK;AAAA,GACP;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ,EAAA;AAAA,IACR,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,GAAA,EAAK;AAAA,IACH,aAAA,EAAe,KAAA;AAAA,IACf,UAAA,EAAY,UAAA;AAAA,IACZ,GAAA,EAAK;AAAA,GACP;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA,GACR;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,aAAA,EAAe,KAAA;AAAA,IACf,UAAA,EAAY,UAAA;AAAA,IACZ,GAAA,EAAK;AAAA,GACP;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,IAAA,EAAM;AAAA,GACR;AAAA,EACA,UAAA,EAAY;AAAA,IACV,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,SAAA,EAAW;AAAA,IACT,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY;AAAA;AAEhB,CAAC,CAAA;ACxTD,IAAMC,iBAAAA,GAAmB;AAAA,EACvB,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EACnC,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA;AAC1B,CAAA;AAOO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,QAAA,EAAS,EAAqB;AACjE,EAAA,MAAM,MAAA,GAASb,qBAAU,CAAC,CAAA;AAE1B,EAAA,uBACEC,uBAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,SAAA,EAAW,CAAA,EAAG,OAAOY,OAAAA,CAAO,SAAA,EAAA,kBAChCb,sBAAAA,CAAA,aAAA,CAACE,kBAAA,EAAK,KAAA,EAAO,CAACW,OAAAA,CAAO,KAAA,EAAO,EAAE,KAAA,EAAOf,iBAAAA,CAAU,MAAA,CAAO,YAAY,IAAI,CAAA,EAAG,CAAA,EAAA,EAAG,eAE5E,mBAEAE,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,KAAA,EAAOS,QAAO,GAAA,EAAA,kBAClBb,uBAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,KAAA,EAAOS,OAAAA,CAAO,IAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACQ,iBAAAA;AAAA,IAAA;AAAA,MACC,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,YAAA,CAAa,WAAW,GAAG,CAAA;AAAA,MACnD,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,MAAM,cAAA,EAAgB,KAAA,EAAO,CAAA,GAAI,GAAA,EAAK,CAAA;AAAA,MACvE,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,KAAA,EAAM,UAAA;AAAA,MACN,SAAA,EAAS;AAAA;AAAA,GAEb,CAAA,kBACAR,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,KAAA,EAAOS,OAAAA,CAAO,IAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACQ,iBAAAA;AAAA,IAAA;AAAA,MACC,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,YAAA,CAAa,UAAU,GAAG,CAAA;AAAA,MAClD,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,MAAM,aAAA,EAAe,KAAA,EAAO,CAAA,GAAI,GAAA,EAAK,CAAA;AAAA,MACtE,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,KAAA,EAAM,SAAA;AAAA,MACN,SAAA,EAAS;AAAA;AAAA,GAEb,CACF,CAAA,kBAEAR,sBAAAA,CAAA,aAAA,CAACE,kBAAA,EAAK,KAAA,EAAO,CAACW,OAAAA,CAAO,UAAU,EAAE,KAAA,EAAOf,kBAAU,MAAA,CAAO,aAAA,CAAc,IAAI,CAAA,EAAG,CAAA,EAAA,EAAG,qCAEjF,mBAEAE,sBAAAA,CAAA,cAACI,gBAAAA,EAAA,EAAK,OAAOS,OAAAA,CAAO,GAAA,EAAA,kBAClBb,sBAAAA,CAAA,cAACI,gBAAAA,EAAA,EAAK,OAAOS,OAAAA,CAAO,IAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACS,iBAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAASG,iBAAAA;AAAA,MACT,KAAA,EAAO,KAAA,CAAM,gBAAA,CAAiB,KAAA,CAAM,QAAA;AAAA,MACpC,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,IAAA,EAAM,iCAAA,EAAmC,QAAA,EAAU,CAAA,EAAyB,CAAA;AAAA,MAC7G,KAAA,EAAM;AAAA;AAAA,GAEV,CAAA,EACC,KAAA,CAAM,gBAAA,CAAiB,KAAA,CAAM,aAAa,MAAA,oBACzCZ,sBAAAA,CAAA,aAAA,CAACI,kBAAA,EAAK,KAAA,EAAOS,OAAAA,CAAO,IAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACO,oBAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,KAAA,CAAM,gBAAA,CAAiB,KAAA,CAAM,GAAA;AAAA,MACpC,aAAA,EAAe,CAAC,GAAA,KAAQ,QAAA,CAAS,EAAE,IAAA,EAAM,4BAAA,EAA8B,KAAK,CAAA;AAAA,MAC5E,KAAA,EAAM,YAAA;AAAA,MACN,SAAA,EAAS;AAAA;AAAA,GAEb,CAEJ,CAAA,kBAEAP,sBAAAA,CAAA,aAAA,CAACE,kBAAA,EAAK,KAAA,EAAO,CAACW,OAAAA,CAAO,UAAU,EAAE,KAAA,EAAOf,kBAAU,MAAA,CAAO,aAAA,CAAc,IAAI,CAAA,EAAG,CAAA,EAAA,EAAG,oCAEjF,mBAEAE,sBAAAA,CAAA,cAACI,gBAAAA,EAAA,EAAK,OAAOS,OAAAA,CAAO,GAAA,EAAA,kBAClBb,sBAAAA,CAAA,cAACI,gBAAAA,EAAA,EAAK,OAAOS,OAAAA,CAAO,IAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACS,iBAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAASG,iBAAAA;AAAA,MACT,KAAA,EAAO,KAAA,CAAM,gBAAA,CAAiB,IAAA,CAAK,QAAA;AAAA,MACnC,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,IAAA,EAAM,gCAAA,EAAkC,QAAA,EAAU,CAAA,EAAyB,CAAA;AAAA,MAC5G,KAAA,EAAM;AAAA;AAAA,GAEV,CAAA,EACC,KAAA,CAAM,gBAAA,CAAiB,IAAA,CAAK,aAAa,MAAA,oBACxCZ,sBAAAA,CAAA,aAAA,CAACI,kBAAA,EAAK,KAAA,EAAOS,OAAAA,CAAO,IAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACO,oBAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,KAAA,CAAM,gBAAA,CAAiB,IAAA,CAAK,GAAA;AAAA,MACnC,aAAA,EAAe,CAAC,GAAA,KAAQ,QAAA,CAAS,EAAE,IAAA,EAAM,2BAAA,EAA6B,KAAK,CAAA;AAAA,MAC3E,KAAA,EAAM,YAAA;AAAA,MACN,SAAA,EAAS;AAAA;AAAA,GAEb,CAEJ,CACF,CAAA;AAEJ;AAEA,IAAMM,OAAAA,GAASF,uBAAW,MAAA,CAAO;AAAA,EAC/B,SAAA,EAAW;AAAA,IACT,GAAA,EAAK;AAAA,GACP;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,QAAA,EAAU;AAAA,IACR,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,SAAA,EAAW;AAAA,GACb;AAAA,EACA,GAAA,EAAK;AAAA,IACH,aAAA,EAAe,KAAA;AAAA,IACf,GAAA,EAAK;AAAA,GACP;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;AC9GD,IAAM,aAAA,GAAgB;AAAA,EACpB,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,EACrC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,EACrC,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,WAAA,EAAY;AAAA,EACzC,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA;AAC5B,CAAA;AASA,SAAS,WAAA,CAAY;AAAA,EACnB,KAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,MAAA,GAASZ,qBAAU,CAAC,CAAA;AAE1B,EAAA,uBACEC,sBAAAA,CAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,WAAW,CAAA,EAAG,KAAA,EAAOY,OAAAA,CAAO,SAAA,EAAA,kBAChCb,sBAAAA,CAAA,aAAA,CAACE,kBAAA,EAAK,KAAA,EAAO,CAACW,OAAAA,CAAO,KAAA,EAAO,EAAE,KAAA,EAAOf,kBAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA,EAAG,KAAG,mBAE5E,CAAA,kBAEAE,sBAAAA,CAAA,cAACI,gBAAAA,EAAA,EAAK,OAAOS,OAAAA,CAAO,QAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACS,iBAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,aAAA;AAAA,MACT,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAA;AAAA,MACrB,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,IAAA,EAAM,mBAAA,EAAqB,KAAA,EAAO,CAAA,EAAgB,CAAA;AAAA,MACnF,KAAA,EAAM;AAAA;AAAA,GAEV,CAAA,kBAEAT,sBAAAA,CAAA,cAACI,gBAAAA,EAAA,EAAK,KAAA,EAAO,aAAA,CAAc,OAAA,EAAA,kBACzBJ,sBAAAA,CAAA,aAAA,CAACI,kBAAA,EAAK,KAAA,EAAO,aAAA,CAAc,GAAA,EAAA,kBACzBJ,sBAAAA,CAAA,aAAA,CAACc,iBAAA,EAAA,EAAO,SAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAA,EAAK,SAAO,CAAA,kBAC3Cd,sBAAAA,CAAA,aAAA,CAACc,qBAAO,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,IAAA,EAAA,EAAK,WAAS,CAAA,kBAC/Cd,sBAAAA,CAAA,cAACc,iBAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAA,EAAK,OAAK,CAAA,kBACvCd,uBAAA,aAAA,CAACc,iBAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAA,EAAK,SAAO,CAC7C,mBAEAd,sBAAAA,CAAA,aAAA,CAACK,oBAAAA,EAAA,EAAU,KAAA,EAAM,cAAA,EAAe,KAAA,EAAM,gBAAA,EAAiB,cAAc,MAAM;AAAA,EAAC,CAAA,EAAG,CAAA,kBAE/EL,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,KAAA,EAAO,aAAA,CAAc,GAAA,EAAA,kBACzBJ,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,KAAA,EAAO,CAAC,aAAA,CAAc,SAAA,EAAW,EAAE,eAAA,EAAiBN,iBAAAA,CAAU,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG,CAAA,EAAG,mBAC7FE,sBAAAA,CAAA,aAAA,CAACE,gBAAAA,EAAA,EAAK,KAAA,EAAO,CAAC,aAAA,CAAc,UAAA,EAAY,EAAE,KAAA,EAAOJ,iBAAAA,CAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA,EAAG,CAAA,EAAA,EAAG,SAAO,CAAA,kBAC/FE,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,KAAA,EAAO,CAAC,aAAA,CAAc,SAAA,EAAW,EAAE,eAAA,EAAiBN,iBAAAA,CAAU,OAAO,OAAA,CAAQ,IAAI,CAAA,EAAG,CAAA,EAAG,CAAA,kBAC7FE,sBAAAA,CAAA,aAAA,CAACE,gBAAAA,EAAA,EAAK,KAAA,EAAO,CAAC,aAAA,CAAc,UAAA,EAAY,EAAE,KAAA,EAAOJ,iBAAAA,CAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA,EAAG,CAAA,EAAA,EAAG,SAAO,CAAA,kBAC/FE,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,KAAA,EAAO,CAAC,aAAA,CAAc,SAAA,EAAW,EAAE,eAAA,EAAiBN,iBAAAA,CAAU,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG,CAAA,EAAG,CAAA,kBAC3FE,sBAAAA,CAAA,aAAA,CAACE,gBAAAA,EAAA,EAAK,KAAA,EAAO,CAAC,aAAA,CAAc,UAAA,EAAY,EAAE,KAAA,EAAOJ,iBAAAA,CAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA,EAAG,CAAA,EAAA,EAAG,OAAK,CAC/F,CACF,CACF,CAAA;AAEJ;AAEO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,QAAA,EAAU,aAAY,EAAsB;AAChF,EAAA,uBACEE,sBAAAA,CAAA,aAAA;AAAA,IAACe,0BAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,GAAG,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,KAAA,CAAM,QAAQ,KAAK,CAAA,CAAA;AAAA,MACjD,MAAA,EAAQ,WAAA;AAAA,MACR,WAAA,EAAa,MAAM,OAAA,CAAQ,IAAA;AAAA,MAC3B,YAAA,EAAc,MAAM,OAAA,CAAQ;AAAA,KAAA;AAAA,oBAE5Bf,sBAAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,OAAc,QAAA,EAAoB;AAAA,GACjD;AAEJ;AAEA,IAAMa,OAAAA,GAASF,uBAAW,MAAA,CAAO;AAAA,EAC/B,SAAA,EAAW;AAAA,IACT,GAAA,EAAK;AAAA,GACP;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,QAAA,EAAU;AAAA,IACR,aAAA,EAAe,KAAA;AAAA,IACf,UAAA,EAAY,UAAA;AAAA,IACZ,GAAA,EAAK;AAAA;AAET,CAAC,CAAA;AAED,IAAM,aAAA,GAAgBA,uBAAW,MAAA,CAAO;AAAA,EACtC,OAAA,EAAS;AAAA,IACP,GAAA,EAAK;AAAA,GACP;AAAA,EACA,GAAA,EAAK;AAAA,IACH,aAAA,EAAe,KAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,CAAA;AAAA,IACL,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ,EAAA;AAAA,IACR,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,UAAA,EAAY;AAAA,IACV,QAAA,EAAU,EAAA;AAAA,IACV,WAAA,EAAa;AAAA;AAEjB,CAAC,CAAA;ACjHM,SAAS,MAAM,KAAA,EAAkC;AACtD,EAAA,MAAM,MAAA,GAAS,cAAc,KAAK,CAAA;AAClC,EAAA,MAAM,KAAA,GAA8B,CAAC,OAAA,EAAS,MAAM,CAAA;AAEpD,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,MAAA,GAASK,wBAAA;AAAA,MACb,MAAA,CAAO,WAAA;AAAA,MACP,IAAA;AAAA,MACA,OAAO,MAAA,CAAO,OAAA;AAAA,MACd,CAAA;AAAA,MACA,OAAO,SAAA,CAAU,OAAA;AAAA,MACjB,MAAA,CAAO,OAAA;AAAA,MACP,MAAA,CAAO,MAAA;AAAA,MACP,MAAA,CAAO,UAAA;AAAA,MACP,MAAA,CAAO;AAAA,KACT;AAEA,IAAA,MAAM,QAAA,GAAW,IAAA,KAAS,OAAA,GAAU,OAAA,GAAU,qBAAA;AAC9C,IAAA,GAAA,IAAO,GAAG,QAAQ,CAAA;AAAA,CAAA;AAClB,IAAA,GAAA,IAAO,CAAA,wBAAA,EAA2BlB,iBAAAA,CAAU,MAAA,CAAO,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,CAAA;AACnE,IAAA,GAAA,IAAO,CAAA,iCAAA,EAAoCA,iBAAAA,CAAU,MAAA,CAAO,kBAAA,CAAmB,IAAI,CAAC,CAAA;AAAA,CAAA;AACpF,IAAA,GAAA,IAAO,CAAA,+BAAA,EAAkCA,iBAAAA,CAAU,MAAA,CAAO,gBAAA,CAAiB,IAAI,CAAC,CAAA;AAAA,CAAA;AAChF,IAAA,GAAA,IAAO,CAAA,0BAAA,EAA6BA,iBAAAA,CAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,CAAA;AACtE,IAAA,GAAA,IAAO,CAAA,4BAAA,EAA+BA,iBAAAA,CAAU,MAAA,CAAO,aAAA,CAAc,IAAI,CAAC,CAAA;AAAA,CAAA;AAC1E,IAAA,GAAA,IAAO,CAAA,yBAAA,EAA4BA,iBAAAA,CAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,CAAA;AACrE,IAAA,GAAA,IAAO,CAAA,+BAAA,EAAkCA,iBAAAA,CAAU,MAAA,CAAO,gBAAA,CAAiB,IAAI,CAAC,CAAA;AAAA,CAAA;AAChF,IAAA,GAAA,IAAO,CAAA,gCAAA,EAAmCA,iBAAAA,CAAU,MAAA,CAAO,iBAAA,CAAkB,IAAI,CAAC,CAAA;AAAA,CAAA;AAClF,IAAA,GAAA,IAAO,CAAA,oBAAA,EAAuBA,iBAAAA,CAAU,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,CAAA;AAC3D,IAAA,GAAA,IAAO,CAAA,qBAAA,EAAwBA,iBAAAA,CAAU,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,CAAA;AAC7D,IAAA,GAAA,IAAO,CAAA,qBAAA,EAAwBA,iBAAAA,CAAU,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,CAAA;AAC7D,IAAA,GAAA,IAAO,CAAA,mBAAA,EAAsBA,iBAAAA,CAAU,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,CAAA;AACzD,IAAA,GAAA,IAAO,CAAA;;AAAA,CAAA;AAAA,EACT;AAEA,EAAA,OAAO,GAAA;AACT;;;AC9BO,SAAS,OAAO,KAAA,EAAkC;AACvD,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,OAAA,EAAS,KAAA;AAAA,IACT,iBAAA,EAAmB,KAAA;AAAA,IACnB,WAAA,EAAa,cAAc,KAAK;AAAA,GAClC;AACA,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AACvC;;;ACTO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAM,EAAqB;AACvD,EAAA,MAAM,MAAA,GAASC,qBAAU,CAAC,CAAA;AAC1B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIkB,eAAuB,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,MAAA,GAAS5B,cAAQ,MAAM;AAC3B,IAAA,OAAO,WAAW,KAAA,GAAQ,KAAA,CAAM,KAAK,CAAA,GAAI,OAAO,KAAK,CAAA;AAAA,EACvD,CAAA,EAAG,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;AAElB,EAAA,MAAM,UAAA,GAAaC,kBAAY,MAAM;AACnC,IAAA,IAAI,OAAO,SAAA,KAAc,WAAA,IAAe,SAAA,CAAU,SAAA,EAAW;AAC3D,MAAA,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,MAAM,CAAA,CAAE,KAAK,MAAM;AAC/C,QAAA,SAAA,CAAU,IAAI,CAAA;AACd,QAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,GAAI,CAAA;AAAA,MACzC,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACEU,sBAAAA,CAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,WAAW,CAAA,EAAG,KAAA,EAAOY,OAAAA,CAAO,SAAA,EAAA,kBAChCb,sBAAAA,CAAA,aAAA,CAACE,kBAAA,EAAK,KAAA,EAAO,CAACW,OAAAA,CAAO,KAAA,EAAO,EAAE,KAAA,EAAOf,kBAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA,EAAG,KAAG,QAE5E,CAAA,kBAEAE,sBAAAA,CAAA,cAACI,gBAAAA,EAAA,EAAK,OAAOS,OAAAA,CAAO,IAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACc,iBAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,MAAA,KAAW,KAAA,GAAQ,SAAA,GAAY,OAAA;AAAA,MACxC,IAAA,EAAK,IAAA;AAAA,MACL,OAAA,EAAS,MAAM,SAAA,CAAU,KAAK;AAAA,KAAA;AAAA,IAC/B;AAAA,GAED,kBACAd,sBAAAA,CAAA,aAAA;AAAA,IAACc,iBAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,MAAA,KAAW,MAAA,GAAS,SAAA,GAAY,OAAA;AAAA,MACzC,IAAA,EAAK,IAAA;AAAA,MACL,OAAA,EAAS,MAAM,SAAA,CAAU,MAAM;AAAA,KAAA;AAAA,IAChC;AAAA,qBAGDd,sBAAAA,CAAA,aAAA,CAACc,iBAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,SAAS,UAAA,EAAA,EAC1C,MAAA,GAAS,SAAA,GAAY,MACxB,CACF,CAAA,kBAEAd,sBAAAA,CAAA,aAAA,CAACI,kBAAA,EAAK,KAAA,EAAO,CAACS,OAAAA,CAAO,WAAW,EAAE,eAAA,EAAiBf,iBAAAA,CAAU,MAAA,CAAO,iBAAiB,IAAI,CAAA,EAAG,CAAA,EAAA,kBAC1FE,sBAAAA,CAAA,aAAA;AAAA,IAACE,gBAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAACW,OAAAA,CAAO,IAAA,EAAM,EAAE,KAAA,EAAOf,iBAAAA,CAAU,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA,EAAG,CAAA;AAAA,MAClE,UAAA,EAAU;AAAA,KAAA;AAAA,IAET;AAAA,GAEL,CACF,CAAA;AAEJ;AAEA,IAAMe,OAAAA,GAASF,uBAAW,MAAA,CAAO;AAAA,EAC/B,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,EAAA;AAAA,IACL,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,aAAA,EAAe,KAAA;AAAA,IACf,GAAA,EAAK;AAAA,GACP;AAAA,EACA,SAAA,EAAW;AAAA,IACT,YAAA,EAAc,CAAA;AAAA,IACd,OAAA,EAAS,EAAA;AAAA,IACT,SAAA,EAAW,GAAA;AAAA,IACX,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,WAAA;AAAA,IACZ,UAAA,EAAY;AAAA;AAEhB,CAAC,CAAA;ACvFD,IAAM,oBAAA,GAAuB;AAAA,EAC3B,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA,EAAW;AAAA,EACvC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,EACrC,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA;AAC3B,CAAA;AAEA,IAAM,mBAAA,GAAsB;AAAA,EAC1B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC7B,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA;AACzB,CAAA;AAOO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,QAAA,EAAS,EAAqB;AACjE,EAAA,MAAM,MAAA,GAASZ,qBAAU,CAAC,CAAA;AAE1B,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,EAAS,OAAA,IAAW,GAAA;AAC1C,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,SAAA,EAAW,SAAA,IAAa,GAAA;AAChD,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,QAAA,IAAY,EAAA;AACrD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,KAAA,IAAS,IAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,EAAO,OAAA,IAAW,SAAA;AACxC,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,EAAO,MAAA,IAAU,GAAA;AACtC,EAAA,uBACEC,uBAAA,aAAA,CAACC,eAAAA,EAAA,EAAK,SAAA,EAAW,CAAA,EAAG,KAAA,EAAOY,OAAAA,CAAO,SAAA,EAAA,kBAChCb,uBAAA,aAAA,CAACE,gBAAAA,EAAA,EAAK,KAAA,EAAO,CAACW,OAAAA,CAAO,OAAO,EAAE,KAAA,EAAOf,iBAAAA,CAAU,MAAA,CAAO,WAAA,CAAY,IAAI,GAAG,CAAA,EAAA,EAAG,eAE5E,CAAA,kBAGAE,sBAAAA,CAAA,cAACE,gBAAAA,EAAA,EAAK,KAAA,EAAO,CAACW,OAAAA,CAAO,QAAA,EAAU,EAAE,KAAA,EAAOf,iBAAAA,CAAU,MAAA,CAAO,aAAA,CAAc,IAAI,CAAA,EAAG,CAAA,EAAA,EAAG,SAEjF,CAAA,kBACAE,sBAAAA,CAAA,aAAA;AAAA,IAACQ,iBAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,GAAG,CAAA;AAAA,MAC/B,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,MAAM,qBAAA,EAAuB,OAAA,EAAS,CAAA,GAAI,GAAA,EAAK,CAAA;AAAA,MAChF,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,KAAA,EAAM,SAAA;AAAA,MACN,SAAA,EAAS;AAAA;AAAA,GACX,kBAGAR,sBAAAA,CAAA,aAAA,CAACE,kBAAA,EAAK,KAAA,EAAO,CAACW,OAAAA,CAAO,QAAA,EAAU,EAAE,OAAOf,iBAAAA,CAAU,MAAA,CAAO,cAAc,IAAI,CAAA,EAAG,CAAA,EAAA,EAAG,WAEjF,CAAA,kBACAE,sBAAAA,CAAA,aAAA;AAAA,IAACQ,iBAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,GAAG,CAAA;AAAA,MACjC,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,MAAM,yBAAA,EAA2B,SAAA,EAAW,CAAA,GAAI,GAAA,EAAK,CAAA;AAAA,MACtF,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,KAAA,EAAM,WAAA;AAAA,MACN,SAAA,EAAS;AAAA;AAAA,qBAIXR,sBAAAA,CAAA,aAAA,CAACE,gBAAAA,EAAA,EAAK,KAAA,EAAO,CAACW,OAAAA,CAAO,QAAA,EAAU,EAAE,KAAA,EAAOf,iBAAAA,CAAU,OAAO,aAAA,CAAc,IAAI,GAAG,CAAA,EAAA,EAAG,YAEjF,CAAA,kBACAE,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,OAAOS,OAAAA,CAAO,GAAA,EAAA,kBAClBb,sBAAAA,CAAA,cAACI,gBAAAA,EAAA,EAAK,OAAOS,OAAAA,CAAO,IAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACQ,iBAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,QAAA;AAAA,MACP,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,IAAA,EAAM,0BAAA,EAA4B,QAAA,EAAU,CAAA,EAAG,CAAA;AAAA,MAChF,GAAA,EAAK,EAAA;AAAA,MACL,GAAA,EAAK,EAAA;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAM,WAAA;AAAA,MACN,SAAA,EAAS;AAAA;AAAA,GAEb,CAAA,kBACAR,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,KAAA,EAAOS,OAAAA,CAAO,IAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACQ,iBAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,GAAG,CAAA;AAAA,MAC7B,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,MAAM,sBAAA,EAAwB,KAAA,EAAO,CAAA,GAAI,GAAA,EAAK,CAAA;AAAA,MAC/E,GAAA,EAAK,GAAA;AAAA,MACL,GAAA,EAAK,GAAA;AAAA,MACL,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAM,aAAA;AAAA,MACN,SAAA,EAAS;AAAA;AAAA,GAEb,CACF,CAAA,kBAGAR,sBAAAA,CAAA,aAAA,CAACE,kBAAA,EAAK,KAAA,EAAO,CAACW,OAAAA,CAAO,UAAU,EAAE,KAAA,EAAOf,kBAAU,MAAA,CAAO,aAAA,CAAc,IAAI,CAAA,EAAG,CAAA,EAAA,EAAG,OAEjF,mBACAE,sBAAAA,CAAA,cAACI,gBAAAA,EAAA,EAAK,OAAOS,OAAAA,CAAO,GAAA,EAAA,kBAClBb,sBAAAA,CAAA,cAACI,gBAAAA,EAAA,EAAK,OAAOS,OAAAA,CAAO,IAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACS,iBAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,oBAAA;AAAA,MACT,KAAA,EAAO,OAAA;AAAA,MACP,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,IAAA,EAAM,kBAAA,EAAoB,OAAA,EAAS,CAAA,EAAuC,CAAA;AAAA,MAC3G,KAAA,EAAM;AAAA;AAAA,GAEV,CAAA,kBACAT,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,KAAA,EAAOS,OAAAA,CAAO,IAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACS,iBAAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,mBAAA;AAAA,MACT,KAAA,EAAO,OAAO,QAAA,EAAS;AAAA,MACvB,aAAA,EAAe,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,QAAA,CAAS,CAAC,CAAA,EAA8C,CAAA;AAAA,MAC1H,KAAA,EAAM;AAAA;AAAA,GAEV,CACF,CACF,CAAA;AAEJ;AAEA,IAAMI,OAAAA,GAASF,uBAAW,MAAA,CAAO;AAAA,EAC/B,SAAA,EAAW;AAAA,IACT,GAAA,EAAK;AAAA,GACP;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,QAAA,EAAU;AAAA,IACR,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,SAAA,EAAW;AAAA,GACb;AAAA,EACA,GAAA,EAAK;AAAA,IACH,aAAA,EAAe,KAAA;AAAA,IACf,GAAA,EAAK;AAAA,GACP;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;;;AC1HM,SAAS,YAAA,CAAa;AAAA,EAC3B,YAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAa,IAAA;AAAA,EACb,WAAA,GAAc;AAChB,CAAA,EAAsB;AACpB,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,aAAa,KAAA,EAAM,GAAI,gBAAgB,YAAY,CAAA;AAC5E,EAAA,MAAM,MAAA,GAASZ,qBAAU,CAAC,CAAA;AAC1B,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAImB,0BAAA,EAAgB;AACpC,EAAA,MAAM,eAAA,GAAkBC,aAAO,IAAI,CAAA;AACnC,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIF,eAAS,CAAC,CAAA;AAC9D,EAAA,MAAM,QAAA,GAAW,iBAAiB,KAAK,CAAA;AAGvC,EAAAG,eAAA,CAAU,MAAM;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,QAAQ,IAAI,CAAA;AAAA,EAE5B,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,MAAA,eAAA,CAAgB,OAAA,GAAU,KAAA;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,QAAA,GAAW,OAAO,WAAW,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,KAAA,EAAO,WAAA,EAAa,QAAQ,CAAC,CAAA;AAEjC,EAAA,uBACEpB,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,KAAA,EAAO,CAACS,OAAAA,CAAO,SAAA,EAAW,EAAE,eAAA,EAAiBf,iBAAAA,CAAU,MAAA,CAAO,gBAAA,CAAiB,IAAI,CAAA,EAAG,CAAA,EAAA,kBAE1FE,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,KAAA,EAAOS,OAAAA,CAAO,MAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA;AAAA,IAACU,iBAAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,MAAA;AAAA,MAC9B,aAAA,EAAe,CAAC,MAAA,KAAW;AACzB,QAAA,MAAM,IAAA,GAAO,SAAS,MAAA,GAAS,OAAA;AAC/B,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,CAAA;AAC3C,QAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,MACd,CAAA;AAAA,MACA,KAAA,EAAM;AAAA;AAAA,GAEV,CAAA,kBAGAV,sBAAAA,CAAA,aAAA,CAACI,kBAAA,EAAK,KAAA,EAAOS,OAAAA,CAAO,MAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,OAAOS,OAAAA,CAAO,WAAA,EAAA,kBAClBb,sBAAAA,CAAA,cAAC,WAAA,EAAA,EAAY,KAAA,EAAc,QAAA,EAAoB,CACjD,GACC,WAAA,oBACCA,sBAAAA,CAAA,aAAA,CAACI,kBAAA,EAAK,KAAA,EAAOS,OAAAA,CAAO,WAAA,EAAA,kBAClBb,sBAAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAc,UAAoB,WAAA,EAA0B,CAC5E,CAEJ,CAAA,kBAGAA,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,OAAOS,OAAAA,CAAO,SAAA,EAAA,kBAClBb,sBAAAA,CAAA,cAAC,WAAA,EAAA,EAAY,KAAA,EAAc,QAAA,EAAoB,CACjD,mBAGAA,sBAAAA,CAAA,aAAA,CAACI,gBAAAA,EAAA,EAAK,KAAA,EAAOS,OAAAA,CAAO,MAAA,EAAA,EACjB,KAAA,CAAM,SAAS,GAAA,CAAI,CAAC,OAAA,EAAS,KAAA,qBAC5Bb,sBAAAA,CAAA,aAAA;AAAA,IAACM,qBAAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,KAAA;AAAA,MACL,OAAA,EAAS,MAAM,qBAAA,CAAsB,KAAK,CAAA;AAAA,MAC1C,KAAA,EAAO;AAAA,QACLO,OAAAA,CAAO,GAAA;AAAA,QACP;AAAA,UACE,iBAAiB,KAAA,KAAU,kBAAA,GACvBf,kBAAU,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA,GAChC,aAAA;AAAA,UACJ,aAAa,KAAA,KAAU,kBAAA,GACnBA,kBAAU,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,GAC5B;AAAA;AACN;AACF,KAAA;AAAA,oBAEAE,sBAAAA,CAAA,aAAA,CAACE,gBAAAA,EAAA,EAAK,KAAA,EAAO;AAAA,MACXW,OAAAA,CAAO,OAAA;AAAA,MACP;AAAA,QACE,KAAA,EAAOf,iBAAAA;AAAA,UACL,UAAU,kBAAA,GACN,MAAA,CAAO,WAAA,CAAY,IAAA,GACnB,OAAO,aAAA,CAAc;AAAA,SAC3B;AAAA,QACA,UAAA,EAAY,KAAA,KAAU,kBAAA,GAAqB,KAAA,GAAQ;AAAA;AACrD,KACF,EAAA,EACG,QAAQ,IACX;AAAA,GAEH,CACH,CAAA,kBAGAE,sBAAAA,CAAA,aAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,KAAA,CAAM,QAAA,CAAS,kBAAkB,CAAA;AAAA,MAC1C,KAAA,EAAO,kBAAA;AAAA,MACP,QAAA;AAAA,MACA,aAAA,EAAe,SAAS,kBAAkB,CAAA;AAAA,MAC1C;AAAA;AAAA,GACF,EAEC,8BAAcA,sBAAAA,CAAA,cAAC,WAAA,EAAA,EAAY,KAAA,EAAc,CAAA,kBAG1CA,sBAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,MAAM,KAAA,EAAM;AAAA,MACrB,KAAA,EAAO;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,QACX,OAAA,EAAS,UAAA;AAAA,QACT,eAAA,EAAiB,SAAA;AAAA,QACjB,KAAA,EAAO,SAAA;AAAA,QACP,MAAA,EAAQ,mBAAA;AAAA,QACR,YAAA,EAAc,CAAA;AAAA,QACd,UAAA,EAAY,GAAA;AAAA,QACZ,QAAA,EAAU,EAAA;AAAA,QACV,MAAA,EAAQ;AAAA;AACV,KAAA;AAAA,IACD;AAAA,GAGH,CAAA;AAEJ;AAEA,IAAMa,OAAAA,GAASF,uBAAW,MAAA,CAAO;AAAA,EAC/B,SAAA,EAAW;AAAA,IACT,YAAA,EAAc,CAAA;AAAA,IACd,OAAA,EAAS,EAAA;AAAA,IACT,GAAA,EAAK;AAAA,GACP;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,aAAA,EAAe,KAAA;AAAA,IACf,cAAA,EAAgB,UAAA;AAAA,IAChB,UAAA,EAAY,QAAA;AAAA,IACZ,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,aAAA,EAAe,KAAA;AAAA,IACf,GAAA,EAAK,CAAA;AAAA,IACL,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM;AAAA,GACR;AAAA,EACA,SAAA,EAAW;AAAA,IACT,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,aAAA,EAAe,KAAA;AAAA,IACf,GAAA,EAAK,CAAA;AAAA,IACL,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,GAAA,EAAK;AAAA,IACH,eAAA,EAAiB,CAAA;AAAA,IACjB,iBAAA,EAAmB,EAAA;AAAA,IACnB,YAAA,EAAc,CAAA;AAAA,IACd,WAAA,EAAa;AAAA,GACf;AAAA,EACA,OAAA,EAAS;AAAA,IACP,QAAA,EAAU;AAAA;AAEd,CAAC,CAAA","file":"index.cjs","sourcesContent":["import type { ConfiguratorState } from '../types';\n\n/**\n * Default configurator state.\n * Traditional hues match the playground defaults.\n * These are HSL hues (0=red, 60=yellow, 120=green, etc.),\n * NOT OKLCH hues — the bridge converts them.\n */\nexport const DEFAULT_CONFIGURATOR_STATE: ConfiguratorState = {\n palettes: [\n {\n name: 'Neutral',\n hue: 220,\n saturation: 24,\n desaturationStrength: 'none',\n desaturationDirection: 'light',\n hueGradeStrength: 'none',\n hueGradeHue: 0,\n hueGradeDirection: 'light',\n },\n {\n name: 'Accent',\n hue: 24,\n saturation: 80,\n desaturationStrength: 'none',\n desaturationDirection: 'light',\n hueGradeStrength: 'none',\n hueGradeHue: 0,\n hueGradeDirection: 'light',\n },\n {\n name: 'Success',\n hue: 145,\n saturation: 64,\n desaturationStrength: 'none',\n desaturationDirection: 'light',\n hueGradeStrength: 'none',\n hueGradeHue: 0,\n hueGradeDirection: 'light',\n },\n {\n name: 'Warning',\n hue: 40,\n saturation: 80,\n desaturationStrength: 'none',\n desaturationDirection: 'light',\n hueGradeStrength: 'none',\n hueGradeHue: 0,\n hueGradeDirection: 'light',\n },\n {\n name: 'Error',\n hue: 0,\n saturation: 80,\n desaturationStrength: 'none',\n desaturationDirection: 'light',\n hueGradeStrength: 'none',\n hueGradeHue: 0,\n hueGradeDirection: 'light',\n },\n ],\n dynamicRange: {\n lightest: 1,\n darkest: 1,\n },\n globalHueGrading: {\n light: { strength: 'none', hue: 30 },\n dark: { strength: 'none', hue: 220 },\n },\n preview: {\n mode: 'light',\n theme: 'neutral',\n },\n spacing: {\n density: 0.5, // 1.0x multiplier = preserves current hardcoded values\n },\n roundness: {\n intensity: 0.5, // 1.0x multiplier = preserves current hardcoded values\n },\n typography: {\n fonts: {\n mono: {\n type: 'system',\n family: 'ui-monospace',\n fallback: 'SFMono-Regular, Menlo, Monaco, Consolas, monospace',\n },\n display: {\n type: 'system',\n family: 'system-ui',\n fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n default: {\n type: 'system',\n family: 'system-ui',\n fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n },\n scale: { baseSize: 16, ratio: 1.25 },\n },\n icons: {\n variant: 'rounded', // Material Design 3 aesthetic\n weight: 400, // Normal weight\n autoGrade: true, // Enable mode-aware grade\n },\n};\n","import type { ConfiguratorState, PaletteState } from '../types';\nimport type { ConfiguratorAction } from './actions';\nimport { DEFAULT_CONFIGURATOR_STATE } from './defaults';\n\nfunction updatePalette(\n palettes: readonly PaletteState[],\n index: number,\n update: Partial<PaletteState>,\n): readonly PaletteState[] {\n if (index < 0 || index >= palettes.length) return palettes;\n return palettes.map((p, i) => (i === index ? { ...p, ...update } : p));\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction wrapHue(hue: number): number {\n return ((hue % 360) + 360) % 360;\n}\n\nexport function configuratorReducer(\n state: ConfiguratorState,\n action: ConfiguratorAction,\n): ConfiguratorState {\n switch (action.type) {\n // Palette actions\n case 'SET_PALETTE_HUE':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n hue: wrapHue(action.hue),\n }),\n };\n\n case 'SET_PALETTE_SATURATION':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n saturation: clamp(action.saturation, 0, 100),\n }),\n };\n\n case 'SET_PALETTE_DESAT_STRENGTH':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n desaturationStrength: action.strength,\n }),\n };\n\n case 'SET_PALETTE_DESAT_DIRECTION':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n desaturationDirection: action.direction,\n }),\n };\n\n case 'SET_PALETTE_HUE_GRADE_STRENGTH':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n hueGradeStrength: action.strength,\n }),\n };\n\n case 'SET_PALETTE_HUE_GRADE_HUE':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n hueGradeHue: wrapHue(action.hue),\n }),\n };\n\n case 'SET_PALETTE_HUE_GRADE_DIRECTION':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n hueGradeDirection: action.direction,\n }),\n };\n\n case 'SET_PALETTE_KEY_COLOR':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n keyColor: clamp(action.normalizedValue, 0, 1),\n }),\n };\n\n case 'CLEAR_PALETTE_KEY_COLOR':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n keyColor: undefined,\n }),\n };\n\n case 'SET_PALETTE_FROM_HEX':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n hue: wrapHue(action.hue),\n saturation: clamp(action.saturation, 0, 100),\n keyColor: clamp(action.keyColor, 0, 1),\n }),\n };\n\n case 'SET_PALETTE_KEY_COLOR_DARK':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n keyColorDark: clamp(action.normalizedValue, 0, 1),\n }),\n };\n\n case 'CLEAR_PALETTE_KEY_COLOR_DARK':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n keyColorDark: undefined,\n }),\n };\n\n case 'SET_PALETTE_FROM_HEX_DARK':\n return {\n ...state,\n palettes: updatePalette(state.palettes, action.index, {\n hue: wrapHue(action.hue),\n saturation: clamp(action.saturation, 0, 100),\n keyColorDark: clamp(action.keyColor, 0, 1),\n }),\n };\n\n // Dynamic range actions\n case 'SET_LIGHTEST':\n return {\n ...state,\n dynamicRange: {\n ...state.dynamicRange,\n lightest: clamp(action.value, 0, 1),\n },\n };\n\n case 'SET_DARKEST':\n return {\n ...state,\n dynamicRange: {\n ...state.dynamicRange,\n darkest: clamp(action.value, 0, 1),\n },\n };\n\n // Global hue grading actions\n case 'SET_GLOBAL_GRADE_LIGHT_STRENGTH':\n return {\n ...state,\n globalHueGrading: {\n ...state.globalHueGrading,\n light: { ...state.globalHueGrading.light, strength: action.strength },\n },\n };\n\n case 'SET_GLOBAL_GRADE_LIGHT_HUE':\n return {\n ...state,\n globalHueGrading: {\n ...state.globalHueGrading,\n light: { ...state.globalHueGrading.light, hue: wrapHue(action.hue) },\n },\n };\n\n case 'SET_GLOBAL_GRADE_DARK_STRENGTH':\n return {\n ...state,\n globalHueGrading: {\n ...state.globalHueGrading,\n dark: { ...state.globalHueGrading.dark, strength: action.strength },\n },\n };\n\n case 'SET_GLOBAL_GRADE_DARK_HUE':\n return {\n ...state,\n globalHueGrading: {\n ...state.globalHueGrading,\n dark: { ...state.globalHueGrading.dark, hue: wrapHue(action.hue) },\n },\n };\n\n // Spacing actions\n case 'SET_SPACING_DENSITY':\n return {\n ...state,\n spacing: {\n density: clamp(action.density, 0, 1),\n },\n };\n\n // Roundness actions\n case 'SET_ROUNDNESS_INTENSITY':\n return {\n ...state,\n roundness: {\n intensity: clamp(action.intensity, 0, 1),\n },\n };\n\n // Typography actions\n case 'SET_TYPOGRAPHY_BASE_SIZE': {\n const defaultTypography = DEFAULT_CONFIGURATOR_STATE.typography!;\n return {\n ...state,\n typography: {\n fonts: state.typography?.fonts ?? defaultTypography.fonts,\n scale: {\n baseSize: clamp(action.baseSize, 12, 24),\n ratio: state.typography?.scale.ratio ?? defaultTypography.scale.ratio,\n },\n },\n };\n }\n\n case 'SET_TYPOGRAPHY_RATIO': {\n const defaultTypography = DEFAULT_CONFIGURATOR_STATE.typography!;\n return {\n ...state,\n typography: {\n fonts: state.typography?.fonts ?? defaultTypography.fonts,\n scale: {\n baseSize: state.typography?.scale.baseSize ?? defaultTypography.scale.baseSize,\n ratio: clamp(action.ratio, 1.1, 1.5),\n },\n },\n };\n }\n\n case 'SET_FONT_MONO': {\n const defaultTypography = DEFAULT_CONFIGURATOR_STATE.typography!;\n return {\n ...state,\n typography: {\n fonts: {\n mono: action.font,\n display: state.typography?.fonts.display ?? defaultTypography.fonts.display,\n default: state.typography?.fonts.default ?? defaultTypography.fonts.default,\n },\n scale: state.typography?.scale ?? defaultTypography.scale,\n },\n };\n }\n\n case 'SET_FONT_DISPLAY': {\n const defaultTypography = DEFAULT_CONFIGURATOR_STATE.typography!;\n return {\n ...state,\n typography: {\n fonts: {\n mono: state.typography?.fonts.mono ?? defaultTypography.fonts.mono,\n display: action.font,\n default: state.typography?.fonts.default ?? defaultTypography.fonts.default,\n },\n scale: state.typography?.scale ?? defaultTypography.scale,\n },\n };\n }\n\n case 'SET_FONT_DEFAULT': {\n const defaultTypography = DEFAULT_CONFIGURATOR_STATE.typography!;\n return {\n ...state,\n typography: {\n fonts: {\n mono: state.typography?.fonts.mono ?? defaultTypography.fonts.mono,\n display: state.typography?.fonts.display ?? defaultTypography.fonts.display,\n default: action.font,\n },\n scale: state.typography?.scale ?? defaultTypography.scale,\n },\n };\n }\n\n // Icons actions\n case 'SET_ICON_VARIANT': {\n const defaultIcons = DEFAULT_CONFIGURATOR_STATE.icons!;\n return {\n ...state,\n icons: {\n variant: action.variant,\n weight: state.icons?.weight ?? defaultIcons.weight,\n autoGrade: state.icons?.autoGrade ?? defaultIcons.autoGrade,\n },\n };\n }\n\n case 'SET_ICON_WEIGHT': {\n const defaultIcons = DEFAULT_CONFIGURATOR_STATE.icons!;\n return {\n ...state,\n icons: {\n variant: state.icons?.variant ?? defaultIcons.variant,\n weight: action.weight,\n autoGrade: state.icons?.autoGrade ?? defaultIcons.autoGrade,\n },\n };\n }\n\n case 'SET_ICON_AUTO_GRADE': {\n const defaultIcons = DEFAULT_CONFIGURATOR_STATE.icons!;\n return {\n ...state,\n icons: {\n variant: state.icons?.variant ?? defaultIcons.variant,\n weight: state.icons?.weight ?? defaultIcons.weight,\n autoGrade: action.autoGrade,\n },\n };\n }\n\n // Preview actions\n case 'SET_PREVIEW_MODE':\n return {\n ...state,\n preview: { ...state.preview, mode: action.mode },\n };\n\n case 'SET_PREVIEW_THEME':\n return {\n ...state,\n preview: { ...state.preview, theme: action.theme },\n };\n\n // Control actions\n case 'RESET':\n return DEFAULT_CONFIGURATOR_STATE;\n\n case 'LOAD_STATE':\n return action.state;\n\n default:\n return state;\n }\n}\n","import { srgbToOklch } from 'newtone';\nimport type { Srgb } from 'newtone';\n\n/**\n * Convert a traditional HSL color wheel hue (0-359) to its equivalent OKLCH hue.\n *\n * Uses the fully saturated HSL color (S=1, L=0.5) at the given hue,\n * converts to sRGB, then extracts the OKLCH hue component.\n *\n * Traditional hues: 0=red, 60=yellow, 120=green, 180=cyan, 240=blue, 300=magenta.\n */\nexport function traditionalHueToOklch(hue: number): number {\n const h = ((hue % 360) + 360) % 360;\n const x = 1 - Math.abs((h / 60) % 2 - 1);\n\n let r: number, g: number, b: number;\n if (h < 60) { r = 1; g = x; b = 0; }\n else if (h < 120) { r = x; g = 1; b = 0; }\n else if (h < 180) { r = 0; g = 1; b = x; }\n else if (h < 240) { r = 0; g = x; b = 1; }\n else if (h < 300) { r = x; g = 0; b = 1; }\n else { r = 1; g = 0; b = x; }\n\n return srgbToOklch({ r, g, b } as Srgb).h;\n}\n","import type { ConfiguratorState } from '../types';\nimport type { NewtoneThemeConfig, FontConfig } from '@newtonedev/components';\nimport type { PaletteConfig, DynamicRange, HueGrading, HueGradingEndpoint } from 'newtone';\nimport { traditionalHueToOklch } from '../hue-conversion';\n\n/**\n * Convert density slider [0, 1] to spacing multiplier [0.5, 2.0]\n */\nfunction densityToMultiplier(density: number): number {\n return 0.5 + (density * 1.5); // lerp(0.5, 2.0, density)\n}\n\n/**\n * Convert roundness intensity [0, 1] to radius multiplier [0, 2.0]\n */\nfunction roundnessToMultiplier(intensity: number): number {\n return intensity * 2.0; // lerp(0, 2.0, intensity)\n}\n\n/**\n * Compute typography scale from base size and ratio.\n * Uses modular scale: baseSize * ratio^n\n */\nfunction computeTypographyScale(baseSize: number, ratio: number) {\n return {\n xs: Math.round(baseSize / (ratio ** 2)),\n sm: Math.round(baseSize / ratio),\n base: baseSize,\n md: Math.round(baseSize * ratio),\n lg: Math.round(baseSize * (ratio ** 2)),\n xl: Math.round(baseSize * (ratio ** 3)),\n xxl: Math.round(baseSize * (ratio ** 4)),\n };\n}\n\n/**\n * Default font configurations using system fonts\n */\nconst DEFAULT_FONTS: { readonly mono: FontConfig; readonly display: FontConfig; readonly default: FontConfig } = {\n mono: {\n type: 'system',\n family: 'ui-monospace',\n fallback: 'SFMono-Regular, Menlo, Monaco, Consolas, monospace',\n },\n display: {\n type: 'system',\n family: 'system-ui',\n fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n default: {\n type: 'system',\n family: 'system-ui',\n fallback: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n },\n};\n\n/**\n * Default icon configuration using Material Symbols Rounded\n */\nconst DEFAULT_ICONS = {\n variant: 'rounded' as const, // Material Design 3 aesthetic\n weight: 400 as const, // Normal weight\n autoGrade: true, // Enable mode-aware grade\n};\n\n/**\n * Convert configurator state (traditional hues, human-readable controls)\n * to a NewtoneThemeConfig (OKLCH hues, engine-ready format).\n */\nexport function toThemeConfig(state: ConfiguratorState): NewtoneThemeConfig {\n const palettes: readonly PaletteConfig[] = state.palettes.map(p => {\n const oklchHue = traditionalHueToOklch(p.hue);\n\n const desaturation = p.desaturationStrength !== 'none'\n ? { direction: p.desaturationDirection, strength: p.desaturationStrength } as const\n : undefined;\n\n const paletteHueGrading = p.hueGradeStrength !== 'none'\n ? {\n hue: traditionalHueToOklch(p.hueGradeHue),\n strength: p.hueGradeStrength,\n direction: p.hueGradeDirection,\n } as const\n : undefined;\n\n return {\n hue: oklchHue,\n saturation: p.saturation,\n desaturation,\n paletteHueGrading,\n ...(p.keyColor !== undefined ? { keyNormalizedValue: p.keyColor } : {}),\n ...(p.keyColorDark !== undefined ? { keyNormalizedValueDark: p.keyColorDark } : {}),\n };\n });\n\n // Build global hue grading\n const light: HueGradingEndpoint | undefined = state.globalHueGrading.light.strength !== 'none'\n ? { hue: traditionalHueToOklch(state.globalHueGrading.light.hue), strength: state.globalHueGrading.light.strength }\n : undefined;\n\n const dark: HueGradingEndpoint | undefined = state.globalHueGrading.dark.strength !== 'none'\n ? { hue: traditionalHueToOklch(state.globalHueGrading.dark.hue), strength: state.globalHueGrading.dark.strength }\n : undefined;\n\n const hueGrading: HueGrading | undefined = (light || dark) ? { light, dark } : undefined;\n\n const dynamicRange: DynamicRange = {\n lightest: state.dynamicRange.lightest,\n darkest: state.dynamicRange.darkest,\n ...(hueGrading ? { hueGrading } : {}),\n };\n\n // Compute spacing multiplier from density slider (default 0.5 = 1.0x multiplier)\n const spacingMultiplier = densityToMultiplier(state.spacing?.density ?? 0.5);\n\n // Compute radius multiplier from roundness intensity slider (default 0.5 = 1.0x multiplier)\n const radiusMultiplier = roundnessToMultiplier(state.roundness?.intensity ?? 0.5);\n\n return {\n colorSystem: { dynamicRange, palettes },\n themes: {\n neutral: { paletteIndex: 0, lightModeNv: 0.95, darkModeNv: 0.1 },\n primary: { paletteIndex: 1, lightModeNv: 0.95, darkModeNv: 0.1 },\n secondary: { paletteIndex: 1, lightModeNv: 0.85, darkModeNv: 0.15 },\n strong: { paletteIndex: 0, lightModeNv: 0.1, darkModeNv: 0.95 },\n },\n elevation: {\n offsets: [-0.02, 0, 0.04] as const,\n },\n spacing: {\n xs: Math.round(4 * spacingMultiplier),\n sm: Math.round(8 * spacingMultiplier),\n md: Math.round(12 * spacingMultiplier),\n lg: Math.round(16 * spacingMultiplier),\n xl: Math.round(24 * spacingMultiplier),\n xxl: Math.round(32 * spacingMultiplier),\n },\n radius: {\n none: 0,\n sm: Math.round(4 * radiusMultiplier),\n md: Math.round(6 * radiusMultiplier),\n lg: Math.round(8 * radiusMultiplier),\n xl: Math.round(12 * radiusMultiplier),\n pill: 999,\n },\n typography: {\n fonts: state.typography?.fonts ?? DEFAULT_FONTS,\n scale: computeTypographyScale(\n state.typography?.scale.baseSize ?? 16,\n state.typography?.scale.ratio ?? 1.25\n ),\n lineHeight: { tight: 1.25, normal: 1.5, relaxed: 1.75 },\n fontWeight: { regular: 400, medium: 500, semibold: 600, bold: 700 },\n },\n icons: state.icons ?? DEFAULT_ICONS,\n };\n}\n","import { useReducer, useCallback, useMemo } from 'react';\nimport type { ConfiguratorState } from '../types';\nimport type { ConfiguratorAction } from '../state/actions';\nimport type { NewtoneThemeConfig } from '@newtonedev/components';\nimport { configuratorReducer } from '../state/reducer';\nimport { DEFAULT_CONFIGURATOR_STATE } from '../state/defaults';\nimport { toThemeConfig } from '../bridge/toThemeConfig';\n\nexport interface UseConfiguratorResult {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n readonly themeConfig: NewtoneThemeConfig;\n readonly reset: () => void;\n}\n\nexport function useConfigurator(\n initialState?: Partial<ConfiguratorState>,\n): UseConfiguratorResult {\n const mergedInitial: ConfiguratorState = initialState\n ? { ...DEFAULT_CONFIGURATOR_STATE, ...initialState }\n : DEFAULT_CONFIGURATOR_STATE;\n\n const [state, dispatch] = useReducer(configuratorReducer, mergedInitial);\n\n const themeConfig = useMemo(() => toThemeConfig(state), [state]);\n\n const reset = useCallback(() => dispatch({ type: 'RESET' }), []);\n\n return { state, dispatch, themeConfig, reset };\n}\n","import { useMemo } from 'react';\nimport { generatePreview } from 'newtone';\nimport type { ColorResult, DynamicRange } from 'newtone';\nimport type { ConfiguratorState } from '../types';\nimport { traditionalHueToOklch } from '../hue-conversion';\n\nconst PREVIEW_STEPS = 26;\n\n/**\n * Compute preview swatches for all palettes.\n * Returns an array of arrays: one preview row per palette.\n */\nexport function usePreviewColors(state: ConfiguratorState): readonly (readonly ColorResult[])[] {\n return useMemo(() => {\n const light = state.globalHueGrading.light.strength !== 'none'\n ? { hue: traditionalHueToOklch(state.globalHueGrading.light.hue), strength: state.globalHueGrading.light.strength }\n : undefined;\n const dark = state.globalHueGrading.dark.strength !== 'none'\n ? { hue: traditionalHueToOklch(state.globalHueGrading.dark.hue), strength: state.globalHueGrading.dark.strength }\n : undefined;\n const hueGrading = (light || dark) ? { light, dark } : undefined;\n\n const dynamicRange: DynamicRange = {\n lightest: state.dynamicRange.lightest,\n darkest: state.dynamicRange.darkest,\n ...(hueGrading ? { hueGrading } : {}),\n };\n\n return state.palettes.map(p => {\n const oklchHue = traditionalHueToOklch(p.hue);\n const desat = p.desaturationStrength !== 'none'\n ? { direction: p.desaturationDirection, strength: p.desaturationStrength } as const\n : undefined;\n const phg = p.hueGradeStrength !== 'none'\n ? { hue: traditionalHueToOklch(p.hueGradeHue), strength: p.hueGradeStrength, direction: p.hueGradeDirection } as const\n : undefined;\n return generatePreview(oklchHue, p.saturation, dynamicRange, PREVIEW_STEPS, desat, phg);\n });\n }, [state]);\n}\n","/**\n * Hue ranges for semantic palettes (traditional HSL hues).\n * Indices 0 (Neutral) and 1 (Accent) are unconstrained.\n *\n * For wrapping ranges (e.g. Error crosses 0°), max exceeds 359.\n * The HueSlider component normalizes values to [0, 359] via % 360.\n *\n * Gaps between ranges prevent adjacent semantics from overlapping:\n * - 15–25: gap between Error (reds) and Warning (yellows)\n * - 55–80: gap between Warning and Success (greens)\n */\nexport const SEMANTIC_HUE_RANGES: Readonly<Record<number, { readonly min: number; readonly max: number }>> = {\n 2: { min: 80, max: 160 }, // Success (greens)\n 3: { min: 25, max: 55 }, // Warning (yellow/orange)\n 4: { min: 345, max: 375 }, // Error (reds, wraps 0°)\n};\n","import { useMemo } from 'react';\nimport {\n getColor,\n getColorByContrast,\n getWcagContrastRatio,\n lightnessToNormalizedValue,\n} from 'newtone';\nimport type { DynamicRange } from 'newtone';\nimport type { ConfiguratorState } from '../types';\nimport { traditionalHueToOklch } from '../hue-conversion';\n\nexport interface WcagValidation {\n /** WCAG contrast ratio at the key color position (null if no keyColor set) */\n readonly keyColorContrast: number | null;\n /** Whether the key color passes WCAG AA for normal text (>= 4.5:1) */\n readonly passesAA: boolean;\n /** Whether the key color passes WCAG AA for large text (>= 3:1) */\n readonly passesAALargeText: boolean;\n /** The normalizedValue where auto contrast search would place the key color */\n readonly autoNormalizedValue: number;\n}\n\n/**\n * Compute WCAG validation info for a non-neutral palette's key color.\n *\n * Validates the palette's key color against the neutral background\n * in the current preview mode. Also computes where the auto contrast\n * search would place the key color (for showing the default position).\n */\nexport function useWcagValidation(\n state: ConfiguratorState,\n paletteIndex: number,\n): WcagValidation {\n return useMemo(() => {\n const palette = state.palettes[paletteIndex];\n const neutral = state.palettes[0];\n if (!palette || !neutral) {\n return { keyColorContrast: null, passesAA: true, passesAALargeText: true, autoNormalizedValue: 0.5 };\n }\n\n const mode = state.preview.mode;\n\n // Build dynamic range with global hue grading\n const light = state.globalHueGrading.light.strength !== 'none'\n ? { hue: traditionalHueToOklch(state.globalHueGrading.light.hue), strength: state.globalHueGrading.light.strength }\n : undefined;\n const dark = state.globalHueGrading.dark.strength !== 'none'\n ? { hue: traditionalHueToOklch(state.globalHueGrading.dark.hue), strength: state.globalHueGrading.dark.strength }\n : undefined;\n const hueGrading = (light || dark) ? { light, dark } : undefined;\n\n const dynamicRange: DynamicRange = {\n lightest: state.dynamicRange.lightest,\n darkest: state.dynamicRange.darkest,\n ...(hueGrading ? { hueGrading } : {}),\n };\n\n // Compute neutral background for the current preview mode\n const neutralOklchHue = traditionalHueToOklch(neutral.hue);\n const neutralDesat = neutral.desaturationStrength !== 'none'\n ? { direction: neutral.desaturationDirection, strength: neutral.desaturationStrength } as const\n : undefined;\n const neutralPhg = neutral.hueGradeStrength !== 'none'\n ? { hue: traditionalHueToOklch(neutral.hueGradeHue), strength: neutral.hueGradeStrength, direction: neutral.hueGradeDirection } as const\n : undefined;\n\n const backgroundNv = mode === 'light' ? 0.95 : 0.1;\n const background = getColor(neutralOklchHue, neutral.saturation, dynamicRange, backgroundNv, neutralDesat, neutralPhg);\n\n // Build palette engine params\n const paletteOklchHue = traditionalHueToOklch(palette.hue);\n const effectiveTextMode = mode === 'light' ? 'light' as const : 'dark' as const;\n const paletteDesat = palette.desaturationStrength !== 'none'\n ? { direction: palette.desaturationDirection, strength: palette.desaturationStrength } as const\n : undefined;\n const palettePhg = palette.hueGradeStrength !== 'none'\n ? { hue: traditionalHueToOklch(palette.hueGradeHue), strength: palette.hueGradeStrength, direction: palette.hueGradeDirection } as const\n : undefined;\n\n // Compute auto position: where contrast search would place the key color\n const autoColor = getColorByContrast(\n paletteOklchHue, palette.saturation, dynamicRange,\n 4.5, effectiveTextMode, paletteDesat, palettePhg, background,\n );\n const autoNormalizedValue = lightnessToNormalizedValue(dynamicRange, autoColor.oklch.L);\n\n // Resolve per-mode key color: light mode uses keyColor, dark uses keyColorDark\n const effectiveKeyColor = mode === 'dark' ? palette.keyColorDark : palette.keyColor;\n\n // If no key color set for this mode, everything passes (auto is always WCAG-compliant)\n if (effectiveKeyColor === undefined) {\n return { keyColorContrast: null, passesAA: true, passesAALargeText: true, autoNormalizedValue };\n }\n\n // Compute the actual color at the user-chosen key position for this mode\n const keyColor = getColor(\n paletteOklchHue, palette.saturation, dynamicRange,\n effectiveKeyColor, paletteDesat, palettePhg,\n );\n\n // Compute WCAG contrast against the neutral background\n const contrast = getWcagContrastRatio(keyColor.srgb, background.srgb);\n\n return {\n keyColorContrast: contrast,\n passesAA: contrast >= 4.5,\n passesAALargeText: contrast >= 3.0,\n autoNormalizedValue,\n };\n }, [state, paletteIndex]);\n}\n","import {\n hexToSrgb,\n srgbToOklch,\n findMaxChromaInGamut,\n lightnessToNormalizedValue,\n} from 'newtone';\nimport type { DynamicRange } from 'newtone';\nimport { traditionalHueToOklch } from './hue-conversion';\n\n/** Result of decomposing a hex color into palette parameters */\nexport interface HexPaletteParams {\n /** Traditional HSL hue [0, 359] */\n readonly hue: number;\n /** Saturation as % of max in-gamut chroma [0, 100] */\n readonly saturation: number;\n /** Position on the luminosity scale [0, 1] */\n readonly normalizedValue: number;\n}\n\n// Achromatic threshold — below this chroma, the color has no meaningful hue\nconst ACHROMATIC_THRESHOLD = 0.005;\n\n// Lookup table for OKLCH hue → traditional hue (built once, lazily)\nlet traditionalHueLut: readonly number[] | null = null;\n\nfunction buildTraditionalHueLut(): readonly number[] {\n const lut: number[] = new Array(360);\n for (let h = 0; h < 360; h++) {\n lut[h] = traditionalHueToOklch(h);\n }\n return lut;\n}\n\n/**\n * Convert an OKLCH hue back to the nearest traditional HSL hue.\n * Uses a precomputed lookup table with 1° resolution.\n */\nexport function oklchHueToTraditional(oklchHue: number): number {\n if (!traditionalHueLut) {\n traditionalHueLut = buildTraditionalHueLut();\n }\n\n const target = ((oklchHue % 360) + 360) % 360;\n let bestHue = 0;\n let bestDelta = Infinity;\n\n for (let h = 0; h < 360; h++) {\n // Shortest angular distance\n const raw = Math.abs(traditionalHueLut[h] - target);\n const delta = Math.min(raw, 360 - raw);\n if (delta < bestDelta) {\n bestDelta = delta;\n bestHue = h;\n }\n }\n\n return bestHue;\n}\n\n/**\n * Decompose a hex color string into palette parameters (hue, saturation, luminosity).\n *\n * Returns null if the hex string is invalid.\n *\n * @param hex - Hex color string (e.g., \"#FF0000\", \"#f00\", \"FF0000\")\n * @param dynamicRange - Current dynamic range for normalizedValue mapping\n */\nexport function hexToPaletteParams(\n hex: string,\n dynamicRange: DynamicRange,\n): HexPaletteParams | null {\n // Validate hex format\n const cleaned = hex.startsWith('#') ? hex.slice(1) : hex;\n if (!/^[0-9a-fA-F]{3}$/.test(cleaned) && !/^[0-9a-fA-F]{6}$/.test(cleaned)) {\n return null;\n }\n\n const srgb = hexToSrgb(hex);\n const oklch = srgbToOklch(srgb);\n\n // Map OKLCH lightness to normalizedValue within the dynamic range\n const normalizedValue = lightnessToNormalizedValue(dynamicRange, oklch.L);\n\n // Achromatic case: no meaningful hue\n if (oklch.C < ACHROMATIC_THRESHOLD) {\n return { hue: 0, saturation: 0, normalizedValue };\n }\n\n // Reverse-map OKLCH hue to traditional hue\n const hue = oklchHueToTraditional(oklch.h);\n\n // Compute saturation as percentage of max available chroma at this L and h\n const maxChroma = findMaxChromaInGamut(oklch.L, oklch.h);\n const saturation = maxChroma > 0\n ? Math.min(100, Math.round(oklch.C / maxChroma * 100))\n : 0;\n\n return { hue, saturation, normalizedValue };\n}\n","import React from 'react';\nimport { View, Text, Pressable, StyleSheet } from 'react-native';\nimport { Card, HueSlider, Slider, Select, Toggle, ColorScaleSlider, TextInput, useTokens } from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport type { ColorResult, DynamicRange } from 'newtone';\nimport type { ConfiguratorState, PaletteState } from '../types';\nimport type { ConfiguratorAction } from '../state/actions';\nimport type { DesaturationStrength, HueGradingStrength } from 'newtone';\nimport { SEMANTIC_HUE_RANGES } from '../constants';\nimport { useWcagValidation } from '../hooks/useWcagValidation';\nimport { hexToPaletteParams } from '../hex-conversion';\nimport { traditionalHueToOklch } from '../hue-conversion';\n\nconst STRENGTH_OPTIONS = [\n { label: 'None', value: 'none' },\n { label: 'Low', value: 'low' },\n { label: 'Medium', value: 'medium' },\n { label: 'Hard', value: 'hard' },\n];\n\ninterface PalettePanelProps {\n readonly palette: PaletteState;\n readonly index: number;\n readonly dispatch: (action: ConfiguratorAction) => void;\n readonly previewColors?: readonly ColorResult[];\n readonly state: ConfiguratorState;\n}\n\n/** Get the hex color at a normalizedValue from the preview colors array */\nfunction getHexAtNv(previewColors: readonly ColorResult[], nv: number): string {\n const idx = Math.round((1 - nv) * (previewColors.length - 1));\n const clamped = Math.max(0, Math.min(previewColors.length - 1, idx));\n return srgbToHex(previewColors[clamped].srgb);\n}\n\nexport function PalettePanel({ palette, index, dispatch, previewColors, state }: PalettePanelProps) {\n const tokens = useTokens(1);\n const hueRange = SEMANTIC_HUE_RANGES[index];\n const isNeutral = index === 0;\n const mode = state.preview.mode;\n\n // Resolve per-mode key color\n const effectiveKeyColor = mode === 'dark' ? palette.keyColorDark : palette.keyColor;\n\n // Mode-aware action types\n const setKeyColorAction = mode === 'dark' ? 'SET_PALETTE_KEY_COLOR_DARK' as const : 'SET_PALETTE_KEY_COLOR' as const;\n const clearKeyColorAction = mode === 'dark' ? 'CLEAR_PALETTE_KEY_COLOR_DARK' as const : 'CLEAR_PALETTE_KEY_COLOR' as const;\n const hexActionType = mode === 'dark' ? 'SET_PALETTE_FROM_HEX_DARK' as const : 'SET_PALETTE_FROM_HEX' as const;\n\n // WCAG validation for non-neutral palettes (already mode-aware)\n const wcag = useWcagValidation(state, index);\n\n // Hex input state\n const [hexText, setHexText] = React.useState('');\n const [hexError, setHexError] = React.useState('');\n const [isEditingHex, setIsEditingHex] = React.useState(false);\n const [isHexUserSet, setIsHexUserSet] = React.useState(false);\n\n // Reset hex input state when mode changes\n React.useEffect(() => {\n setHexText('');\n setHexError('');\n setIsEditingHex(false);\n setIsHexUserSet(false);\n }, [mode]);\n\n // Compute displayed hex from current key color position\n const displayedHex = React.useMemo(() => {\n if (!previewColors || previewColors.length === 0) return '';\n const nv = effectiveKeyColor ?? wcag.autoNormalizedValue;\n return getHexAtNv(previewColors, nv);\n }, [previewColors, effectiveKeyColor, wcag.autoNormalizedValue]);\n\n // Sync hex text when not actively editing and not user-submitted\n React.useEffect(() => {\n if (!isEditingHex && !isHexUserSet) {\n setHexText(displayedHex);\n }\n }, [displayedHex, isEditingHex, isHexUserSet]);\n\n // Build dynamic range for hex conversion\n const dynamicRange = React.useMemo((): DynamicRange => {\n const light = state.globalHueGrading.light.strength !== 'none'\n ? { hue: traditionalHueToOklch(state.globalHueGrading.light.hue), strength: state.globalHueGrading.light.strength }\n : undefined;\n const dark = state.globalHueGrading.dark.strength !== 'none'\n ? { hue: traditionalHueToOklch(state.globalHueGrading.dark.hue), strength: state.globalHueGrading.dark.strength }\n : undefined;\n const hueGrading = (light || dark) ? { light, dark } : undefined;\n return {\n lightest: state.dynamicRange.lightest,\n darkest: state.dynamicRange.darkest,\n ...(hueGrading ? { hueGrading } : {}),\n };\n }, [state.dynamicRange, state.globalHueGrading]);\n\n const handleHexSubmit = React.useCallback(() => {\n setIsEditingHex(false);\n const trimmed = hexText.trim();\n if (!trimmed) {\n setHexError('');\n return;\n }\n\n const hex = trimmed.startsWith('#') ? trimmed : `#${trimmed}`;\n const params = hexToPaletteParams(hex, dynamicRange);\n\n if (!params) {\n setHexError('Invalid hex color');\n return;\n }\n\n setHexError('');\n setIsHexUserSet(true);\n dispatch({\n type: hexActionType,\n index,\n hue: params.hue,\n saturation: params.saturation,\n keyColor: params.normalizedValue,\n });\n }, [hexText, dynamicRange, dispatch, index, hexActionType]);\n\n const handleClearKeyColor = React.useCallback(() => {\n dispatch({ type: clearKeyColorAction, index });\n setHexError('');\n setIsHexUserSet(false);\n }, [dispatch, index, clearKeyColorAction]);\n\n // Build WCAG warning message\n const wcagWarning = React.useMemo(() => {\n if (effectiveKeyColor === undefined || wcag.keyColorContrast === null) return undefined;\n if (wcag.passesAA) return undefined;\n const ratio = wcag.keyColorContrast.toFixed(1);\n if (wcag.passesAALargeText) {\n return `Contrast ${ratio}:1 — passes large text (AA) but fails normal text (requires 4.5:1)`;\n }\n return `Contrast ${ratio}:1 — fails WCAG AA (requires 4.5:1 for normal text, 3:1 for large text)`;\n }, [effectiveKeyColor, wcag]);\n\n return (\n <Card elevation={1} style={styles.container}>\n <Text style={[styles.title, { color: srgbToHex(tokens.textPrimary.srgb) }]}>\n {palette.name}\n </Text>\n\n {/* Non-neutral: interactive luminosity slider + hex input */}\n {!isNeutral && previewColors && (\n <>\n <ColorScaleSlider\n colors={previewColors}\n value={effectiveKeyColor ?? wcag.autoNormalizedValue}\n onValueChange={(nv) => { setIsHexUserSet(false); dispatch({ type: setKeyColorAction, index, normalizedValue: nv }); }}\n label=\"Key Color\"\n warning={wcagWarning}\n trimEnds\n snap\n animateValue\n />\n <View style={styles.hexRow}>\n <View style={styles.hexInputContainer}>\n <TextInput\n label=\"Hex\"\n value={hexText}\n onChangeText={(text) => {\n setIsEditingHex(true);\n setHexText(text);\n setHexError('');\n }}\n onBlur={handleHexSubmit}\n onSubmitEditing={handleHexSubmit}\n placeholder=\"#000000\"\n />\n </View>\n {effectiveKeyColor !== undefined && (\n <Pressable onPress={handleClearKeyColor} style={styles.autoButton}>\n <Text style={[styles.autoText, { color: srgbToHex(tokens.interactive.srgb) }]}>\n Auto\n </Text>\n </Pressable>\n )}\n </View>\n {hexError !== '' && (\n <Text style={[styles.errorText, { color: srgbToHex(tokens.error.srgb) }]}>\n {hexError}\n </Text>\n )}\n </>\n )}\n\n {/* Neutral: static swatches (unchanged) */}\n {isNeutral && previewColors && (\n <View style={styles.inlineSwatches}>\n {previewColors.map((color, i) => (\n <View\n key={i}\n style={[styles.inlineSwatch, { backgroundColor: srgbToHex(color.srgb) }]}\n />\n ))}\n </View>\n )}\n\n <HueSlider\n value={palette.hue}\n onValueChange={(hue) => dispatch({ type: 'SET_PALETTE_HUE', index, hue })}\n label=\"Hue\"\n showValue\n {...(hueRange ? { min: hueRange.min, max: hueRange.max } : {})}\n />\n\n <Slider\n value={palette.saturation}\n onValueChange={(saturation) => dispatch({ type: 'SET_PALETTE_SATURATION', index, saturation })}\n min={0}\n max={100}\n label=\"Saturation\"\n showValue\n />\n\n <View style={styles.row}>\n <View style={styles.flex}>\n <Select\n options={STRENGTH_OPTIONS}\n value={palette.desaturationStrength}\n onValueChange={(strength) => dispatch({ type: 'SET_PALETTE_DESAT_STRENGTH', index, strength: strength as DesaturationStrength })}\n label=\"Desaturation\"\n />\n </View>\n {palette.desaturationStrength !== 'none' && (\n <View style={styles.toggleContainer}>\n <Toggle\n value={palette.desaturationDirection === 'dark'}\n onValueChange={(v) => dispatch({ type: 'SET_PALETTE_DESAT_DIRECTION', index, direction: v ? 'dark' : 'light' })}\n label=\"Invert\"\n />\n </View>\n )}\n </View>\n\n <View style={styles.row}>\n <View style={styles.flex}>\n <Select\n options={STRENGTH_OPTIONS}\n value={palette.hueGradeStrength}\n onValueChange={(strength) => dispatch({ type: 'SET_PALETTE_HUE_GRADE_STRENGTH', index, strength: strength as HueGradingStrength })}\n label=\"Hue Grading\"\n />\n </View>\n {palette.hueGradeStrength !== 'none' && (\n <View style={styles.toggleContainer}>\n <Toggle\n value={palette.hueGradeDirection === 'dark'}\n onValueChange={(v) => dispatch({ type: 'SET_PALETTE_HUE_GRADE_DIRECTION', index, direction: v ? 'dark' : 'light' })}\n label=\"Invert\"\n />\n </View>\n )}\n </View>\n\n {palette.hueGradeStrength !== 'none' && (\n <HueSlider\n value={palette.hueGradeHue}\n onValueChange={(hue) => dispatch({ type: 'SET_PALETTE_HUE_GRADE_HUE', index, hue })}\n label=\"Grade Target\"\n showValue\n />\n )}\n </Card>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n gap: 12,\n marginBottom: 12,\n },\n title: {\n fontSize: 16,\n fontWeight: '700',\n },\n inlineSwatches: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 1,\n },\n inlineSwatch: {\n width: 20,\n height: 16,\n borderRadius: 2,\n },\n row: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n gap: 12,\n },\n flex: {\n flex: 1,\n },\n toggleContainer: {\n paddingBottom: 2,\n },\n hexRow: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n gap: 8,\n },\n hexInputContainer: {\n flex: 1,\n },\n autoButton: {\n paddingBottom: 6,\n },\n autoText: {\n fontSize: 13,\n fontWeight: '600',\n },\n errorText: {\n fontSize: 12,\n fontWeight: '500',\n },\n});\n","import React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\nimport { Card, Slider, Select, HueSlider, useTokens } from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport type { ConfiguratorState } from '../types';\nimport type { ConfiguratorAction } from '../state/actions';\nimport type { HueGradingStrength } from 'newtone';\n\nconst STRENGTH_OPTIONS = [\n { label: 'None', value: 'none' },\n { label: 'Low', value: 'low' },\n { label: 'Medium', value: 'medium' },\n { label: 'Hard', value: 'hard' },\n];\n\ninterface GlobalPanelProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n}\n\nexport function GlobalPanel({ state, dispatch }: GlobalPanelProps) {\n const tokens = useTokens(1);\n\n return (\n <Card elevation={1} style={styles.container}>\n <Text style={[styles.title, { color: srgbToHex(tokens.textPrimary.srgb) }]}>\n Dynamic Range\n </Text>\n\n <View style={styles.row}>\n <View style={styles.flex}>\n <Slider\n value={Math.round(state.dynamicRange.lightest * 100)}\n onValueChange={(v) => dispatch({ type: 'SET_LIGHTEST', value: v / 100 })}\n min={0}\n max={100}\n label=\"Lightest\"\n showValue\n />\n </View>\n <View style={styles.flex}>\n <Slider\n value={Math.round(state.dynamicRange.darkest * 100)}\n onValueChange={(v) => dispatch({ type: 'SET_DARKEST', value: v / 100 })}\n min={0}\n max={100}\n label=\"Darkest\"\n showValue\n />\n </View>\n </View>\n\n <Text style={[styles.subtitle, { color: srgbToHex(tokens.textSecondary.srgb) }]}>\n Global Hue Grading — Light End\n </Text>\n\n <View style={styles.row}>\n <View style={styles.flex}>\n <Select\n options={STRENGTH_OPTIONS}\n value={state.globalHueGrading.light.strength}\n onValueChange={(s) => dispatch({ type: 'SET_GLOBAL_GRADE_LIGHT_STRENGTH', strength: s as HueGradingStrength })}\n label=\"Strength\"\n />\n </View>\n {state.globalHueGrading.light.strength !== 'none' && (\n <View style={styles.flex}>\n <HueSlider\n value={state.globalHueGrading.light.hue}\n onValueChange={(hue) => dispatch({ type: 'SET_GLOBAL_GRADE_LIGHT_HUE', hue })}\n label=\"Target Hue\"\n showValue\n />\n </View>\n )}\n </View>\n\n <Text style={[styles.subtitle, { color: srgbToHex(tokens.textSecondary.srgb) }]}>\n Global Hue Grading — Dark End\n </Text>\n\n <View style={styles.row}>\n <View style={styles.flex}>\n <Select\n options={STRENGTH_OPTIONS}\n value={state.globalHueGrading.dark.strength}\n onValueChange={(s) => dispatch({ type: 'SET_GLOBAL_GRADE_DARK_STRENGTH', strength: s as HueGradingStrength })}\n label=\"Strength\"\n />\n </View>\n {state.globalHueGrading.dark.strength !== 'none' && (\n <View style={styles.flex}>\n <HueSlider\n value={state.globalHueGrading.dark.hue}\n onValueChange={(hue) => dispatch({ type: 'SET_GLOBAL_GRADE_DARK_HUE', hue })}\n label=\"Target Hue\"\n showValue\n />\n </View>\n )}\n </View>\n </Card>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n gap: 12,\n },\n title: {\n fontSize: 16,\n fontWeight: '700',\n },\n subtitle: {\n fontSize: 13,\n fontWeight: '600',\n marginTop: 4,\n },\n row: {\n flexDirection: 'row',\n gap: 12,\n },\n flex: {\n flex: 1,\n },\n});\n","import React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\nimport {\n Card,\n Button,\n TextInput,\n Select,\n NewtoneProvider,\n useTokens,\n} from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport type { ConfiguratorState } from '../types';\nimport type { ConfiguratorAction } from '../state/actions';\nimport type { ThemeName, NewtoneThemeConfig } from '@newtonedev/components';\n\nconst THEME_OPTIONS = [\n { label: 'Neutral', value: 'neutral' },\n { label: 'Primary', value: 'primary' },\n { label: 'Secondary', value: 'secondary' },\n { label: 'Strong', value: 'strong' },\n];\n\ninterface PreviewPanelProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n readonly themeConfig: NewtoneThemeConfig;\n}\n\n/** Inner card that reads tokens from the nested provider, so its background reflects the selected theme. */\nfunction PreviewCard({\n state,\n dispatch,\n}: {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n}) {\n const tokens = useTokens(1);\n\n return (\n <Card elevation={1} style={styles.container}>\n <Text style={[styles.title, { color: srgbToHex(tokens.textPrimary.srgb) }]}>\n Component Preview\n </Text>\n\n <View style={styles.controls}>\n <Select\n options={THEME_OPTIONS}\n value={state.preview.theme}\n onValueChange={(t) => dispatch({ type: 'SET_PREVIEW_THEME', theme: t as ThemeName })}\n label=\"Theme\"\n />\n </View>\n\n <View style={previewStyles.wrapper}>\n <View style={previewStyles.row}>\n <Button variant=\"primary\" size=\"sm\">Primary</Button>\n <Button variant=\"secondary\" size=\"sm\">Secondary</Button>\n <Button variant=\"ghost\" size=\"sm\">Ghost</Button>\n <Button variant=\"outline\" size=\"sm\">Outline</Button>\n </View>\n\n <TextInput label=\"Sample Input\" value=\"Hello, Newtone\" onChangeText={() => {}} />\n\n <View style={previewStyles.row}>\n <View style={[previewStyles.statusDot, { backgroundColor: srgbToHex(tokens.success.srgb) }]} />\n <Text style={[previewStyles.statusText, { color: srgbToHex(tokens.textPrimary.srgb) }]}>Success</Text>\n <View style={[previewStyles.statusDot, { backgroundColor: srgbToHex(tokens.warning.srgb) }]} />\n <Text style={[previewStyles.statusText, { color: srgbToHex(tokens.textPrimary.srgb) }]}>Warning</Text>\n <View style={[previewStyles.statusDot, { backgroundColor: srgbToHex(tokens.error.srgb) }]} />\n <Text style={[previewStyles.statusText, { color: srgbToHex(tokens.textPrimary.srgb) }]}>Error</Text>\n </View>\n </View>\n </Card>\n );\n}\n\nexport function PreviewPanel({ state, dispatch, themeConfig }: PreviewPanelProps) {\n return (\n <NewtoneProvider\n key={`${state.preview.mode}-${state.preview.theme}`}\n config={themeConfig}\n initialMode={state.preview.mode}\n initialTheme={state.preview.theme}\n >\n <PreviewCard state={state} dispatch={dispatch} />\n </NewtoneProvider>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n gap: 12,\n },\n title: {\n fontSize: 16,\n fontWeight: '700',\n },\n controls: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n gap: 16,\n },\n});\n\nconst previewStyles = StyleSheet.create({\n wrapper: {\n gap: 12,\n },\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n flexWrap: 'wrap',\n },\n statusDot: {\n width: 12,\n height: 12,\n borderRadius: 6,\n },\n statusText: {\n fontSize: 13,\n marginRight: 8,\n },\n});\n","import type { ConfiguratorState } from '../types';\nimport type { ColorMode } from '@newtonedev/components';\nimport { computeTokens } from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport { toThemeConfig } from './toThemeConfig';\n\n/**\n * Generate CSS custom properties for both light and dark modes.\n * Computes all 12 design tokens for the neutral theme at default elevation.\n */\nexport function toCSS(state: ConfiguratorState): string {\n const config = toThemeConfig(state);\n const modes: readonly ColorMode[] = ['light', 'dark'];\n\n let css = '';\n for (const mode of modes) {\n const tokens = computeTokens(\n config.colorSystem,\n mode,\n config.themes.neutral,\n 1,\n config.elevation.offsets,\n config.spacing,\n config.radius,\n config.typography,\n config.icons\n );\n\n const selector = mode === 'light' ? ':root' : '[data-theme=\"dark\"]';\n css += `${selector} {\\n`;\n css += ` --newtone-background: ${srgbToHex(tokens.background.srgb)};\\n`;\n css += ` --newtone-background-elevated: ${srgbToHex(tokens.backgroundElevated.srgb)};\\n`;\n css += ` --newtone-background-sunken: ${srgbToHex(tokens.backgroundSunken.srgb)};\\n`;\n css += ` --newtone-text-primary: ${srgbToHex(tokens.textPrimary.srgb)};\\n`;\n css += ` --newtone-text-secondary: ${srgbToHex(tokens.textSecondary.srgb)};\\n`;\n css += ` --newtone-interactive: ${srgbToHex(tokens.interactive.srgb)};\\n`;\n css += ` --newtone-interactive-hover: ${srgbToHex(tokens.interactiveHover.srgb)};\\n`;\n css += ` --newtone-interactive-active: ${srgbToHex(tokens.interactiveActive.srgb)};\\n`;\n css += ` --newtone-border: ${srgbToHex(tokens.border.srgb)};\\n`;\n css += ` --newtone-success: ${srgbToHex(tokens.success.srgb)};\\n`;\n css += ` --newtone-warning: ${srgbToHex(tokens.warning.srgb)};\\n`;\n css += ` --newtone-error: ${srgbToHex(tokens.error.srgb)};\\n`;\n css += `}\\n\\n`;\n }\n\n return css;\n}\n","import type { ConfiguratorState } from '../types';\nimport type { NewtoneThemeConfig } from '@newtonedev/components';\nimport { toThemeConfig } from './toThemeConfig';\n\n/** Serializable configurator export format */\nexport interface ConfiguratorExport {\n readonly version: '1.0';\n readonly configuratorState: ConfiguratorState;\n readonly themeConfig: NewtoneThemeConfig;\n}\n\n/**\n * Export the configurator state as a JSON string.\n * Includes both the human-readable state (for round-tripping)\n * and the engine-ready theme config.\n */\nexport function toJSON(state: ConfiguratorState): string {\n const output: ConfiguratorExport = {\n version: '1.0',\n configuratorState: state,\n themeConfig: toThemeConfig(state),\n };\n return JSON.stringify(output, null, 2);\n}\n","import React, { useMemo, useState, useCallback } from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\nimport { Card, Button, useTokens } from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport type { ConfiguratorState } from '../types';\nimport { toCSS } from '../bridge/toCSS';\nimport { toJSON } from '../bridge/toJSON';\n\ninterface ExportPanelProps {\n readonly state: ConfiguratorState;\n}\n\ntype ExportFormat = 'css' | 'json';\n\nexport function ExportPanel({ state }: ExportPanelProps) {\n const tokens = useTokens(1);\n const [format, setFormat] = useState<ExportFormat>('css');\n const [copied, setCopied] = useState(false);\n\n const output = useMemo(() => {\n return format === 'css' ? toCSS(state) : toJSON(state);\n }, [state, format]);\n\n const handleCopy = useCallback(() => {\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n navigator.clipboard.writeText(output).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }\n }, [output]);\n\n return (\n <Card elevation={1} style={styles.container}>\n <Text style={[styles.title, { color: srgbToHex(tokens.textPrimary.srgb) }]}>\n Export\n </Text>\n\n <View style={styles.tabs}>\n <Button\n variant={format === 'css' ? 'primary' : 'ghost'}\n size=\"sm\"\n onPress={() => setFormat('css')}\n >\n CSS Variables\n </Button>\n <Button\n variant={format === 'json' ? 'primary' : 'ghost'}\n size=\"sm\"\n onPress={() => setFormat('json')}\n >\n JSON\n </Button>\n <Button variant=\"outline\" size=\"sm\" onPress={handleCopy}>\n {copied ? 'Copied!' : 'Copy'}\n </Button>\n </View>\n\n <View style={[styles.codeBlock, { backgroundColor: srgbToHex(tokens.backgroundSunken.srgb) }]}>\n <Text\n style={[styles.code, { color: srgbToHex(tokens.textPrimary.srgb) }]}\n selectable\n >\n {output}\n </Text>\n </View>\n </Card>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n gap: 12,\n marginBottom: 12,\n },\n title: {\n fontSize: 16,\n fontWeight: '700',\n },\n tabs: {\n flexDirection: 'row',\n gap: 8,\n },\n codeBlock: {\n borderRadius: 6,\n padding: 12,\n maxHeight: 300,\n overflow: 'scroll' as unknown as 'visible',\n },\n code: {\n fontSize: 11,\n fontFamily: 'monospace',\n lineHeight: 16,\n },\n});\n","import React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\nimport { Card, Slider, Select, useTokens } from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport type { ConfiguratorState } from '../types';\nimport type { ConfiguratorAction } from '../state/actions';\n\nconst ICON_VARIANT_OPTIONS = [\n { label: 'Outlined', value: 'outlined' },\n { label: 'Rounded', value: 'rounded' },\n { label: 'Sharp', value: 'sharp' },\n];\n\nconst ICON_WEIGHT_OPTIONS = [\n { label: '100', value: '100' },\n { label: '200', value: '200' },\n { label: '300', value: '300' },\n { label: '400', value: '400' },\n { label: '500', value: '500' },\n { label: '600', value: '600' },\n { label: '700', value: '700' },\n];\n\ninterface DesignPanelProps {\n readonly state: ConfiguratorState;\n readonly dispatch: (action: ConfiguratorAction) => void;\n}\n\nexport function DesignPanel({ state, dispatch }: DesignPanelProps) {\n const tokens = useTokens(1);\n\n const density = state.spacing?.density ?? 0.5;\n const intensity = state.roundness?.intensity ?? 0.5;\n const baseSize = state.typography?.scale.baseSize ?? 16;\n const ratio = state.typography?.scale.ratio ?? 1.25;\n const variant = state.icons?.variant ?? 'rounded';\n const weight = state.icons?.weight ?? 400;\n return (\n <Card elevation={1} style={styles.container}>\n <Text style={[styles.title, { color: srgbToHex(tokens.textPrimary.srgb) }]}>\n Design System\n </Text>\n\n {/* Spacing Section */}\n <Text style={[styles.subtitle, { color: srgbToHex(tokens.textSecondary.srgb) }]}>\n Spacing\n </Text>\n <Slider\n value={Math.round(density * 100)}\n onValueChange={(v) => dispatch({ type: 'SET_SPACING_DENSITY', density: v / 100 })}\n min={0}\n max={100}\n label=\"Density\"\n showValue\n />\n\n {/* Roundness Section */}\n <Text style={[styles.subtitle, { color: srgbToHex(tokens.textSecondary.srgb) }]}>\n Roundness\n </Text>\n <Slider\n value={Math.round(intensity * 100)}\n onValueChange={(v) => dispatch({ type: 'SET_ROUNDNESS_INTENSITY', intensity: v / 100 })}\n min={0}\n max={100}\n label=\"Intensity\"\n showValue\n />\n\n {/* Typography Section */}\n <Text style={[styles.subtitle, { color: srgbToHex(tokens.textSecondary.srgb) }]}>\n Typography\n </Text>\n <View style={styles.row}>\n <View style={styles.flex}>\n <Slider\n value={baseSize}\n onValueChange={(v) => dispatch({ type: 'SET_TYPOGRAPHY_BASE_SIZE', baseSize: v })}\n min={12}\n max={24}\n step={1}\n label=\"Base Size\"\n showValue\n />\n </View>\n <View style={styles.flex}>\n <Slider\n value={Math.round(ratio * 100)}\n onValueChange={(v) => dispatch({ type: 'SET_TYPOGRAPHY_RATIO', ratio: v / 100 })}\n min={110}\n max={150}\n step={5}\n label=\"Scale Ratio\"\n showValue\n />\n </View>\n </View>\n\n {/* Icons Section */}\n <Text style={[styles.subtitle, { color: srgbToHex(tokens.textSecondary.srgb) }]}>\n Icons\n </Text>\n <View style={styles.row}>\n <View style={styles.flex}>\n <Select\n options={ICON_VARIANT_OPTIONS}\n value={variant}\n onValueChange={(v) => dispatch({ type: 'SET_ICON_VARIANT', variant: v as 'outlined' | 'rounded' | 'sharp' })}\n label=\"Variant\"\n />\n </View>\n <View style={styles.flex}>\n <Select\n options={ICON_WEIGHT_OPTIONS}\n value={weight.toString()}\n onValueChange={(v) => dispatch({ type: 'SET_ICON_WEIGHT', weight: parseInt(v) as 100 | 200 | 300 | 400 | 500 | 600 | 700 })}\n label=\"Weight\"\n />\n </View>\n </View>\n </Card>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n gap: 12,\n },\n title: {\n fontSize: 16,\n fontWeight: '700',\n },\n subtitle: {\n fontSize: 13,\n fontWeight: '600',\n marginTop: 4,\n },\n row: {\n flexDirection: 'row',\n gap: 12,\n },\n flex: {\n flex: 1,\n },\n});\n","import React, { useEffect, useRef, useState } from 'react';\nimport { View, Text, Pressable, StyleSheet } from 'react-native';\nimport { Toggle, useTokens, useNewtoneTheme } from '@newtonedev/components';\nimport { srgbToHex } from 'newtone';\nimport type { ConfiguratorProps } from './Configurator.types';\nimport { useConfigurator } from './hooks/useConfigurator';\nimport { usePreviewColors } from './hooks/usePreviewColors';\nimport { PalettePanel } from './panels/PalettePanel';\nimport { GlobalPanel } from './panels/GlobalPanel';\nimport { PreviewPanel } from './panels/PreviewPanel';\nimport { ExportPanel } from './panels/ExportPanel';\nimport { DesignPanel } from './panels/DesignPanel';\n\n/**\n * Newtone Configurator — embeddable palette builder widget.\n *\n * Must be rendered inside a NewtoneProvider owned by the consuming app.\n * The configurator reads tokens via useTokens() for self-affecting styling.\n *\n * The consuming app should update its NewtoneProvider config prop\n * based on the onChange callback, creating the self-affecting loop.\n */\nexport function Configurator({\n initialState,\n onChange,\n showExport = true,\n showPreview = true,\n}: ConfiguratorProps) {\n const { state, dispatch, themeConfig, reset } = useConfigurator(initialState);\n const tokens = useTokens(1);\n const { setMode } = useNewtoneTheme();\n const isInitialRender = useRef(true);\n const [activePaletteIndex, setActivePaletteIndex] = useState(0);\n const previews = usePreviewColors(state);\n\n // Sync mode to parent provider on mount\n useEffect(() => {\n setMode(state.preview.mode);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Fire onChange whenever state changes (skip initial render)\n useEffect(() => {\n if (isInitialRender.current) {\n isInitialRender.current = false;\n return;\n }\n onChange?.(state, themeConfig);\n }, [state, themeConfig, onChange]);\n\n return (\n <View style={[styles.container, { backgroundColor: srgbToHex(tokens.backgroundSunken.srgb) }]}>\n {/* Mode toggle at top */}\n <View style={styles.topBar}>\n <Toggle\n value={state.preview.mode === 'dark'}\n onValueChange={(isDark) => {\n const mode = isDark ? 'dark' : 'light';\n dispatch({ type: 'SET_PREVIEW_MODE', mode });\n setMode(mode);\n }}\n label=\"Dark Mode\"\n />\n </View>\n\n {/* Dynamic Range + Component Preview side by side */}\n <View style={styles.topRow}>\n <View style={styles.topRowPanel}>\n <GlobalPanel state={state} dispatch={dispatch} />\n </View>\n {showPreview && (\n <View style={styles.topRowPanel}>\n <PreviewPanel state={state} dispatch={dispatch} themeConfig={themeConfig} />\n </View>\n )}\n </View>\n\n {/* Design System controls */}\n <View style={styles.designRow}>\n <DesignPanel state={state} dispatch={dispatch} />\n </View>\n\n {/* Palette tab bar */}\n <View style={styles.tabBar}>\n {state.palettes.map((palette, index) => (\n <Pressable\n key={index}\n onPress={() => setActivePaletteIndex(index)}\n style={[\n styles.tab,\n {\n backgroundColor: index === activePaletteIndex\n ? srgbToHex(tokens.background.srgb)\n : 'transparent',\n borderColor: index === activePaletteIndex\n ? srgbToHex(tokens.border.srgb)\n : 'transparent',\n },\n ]}\n >\n <Text style={[\n styles.tabText,\n {\n color: srgbToHex(\n index === activePaletteIndex\n ? tokens.textPrimary.srgb\n : tokens.textSecondary.srgb\n ),\n fontWeight: index === activePaletteIndex ? '700' : '500',\n },\n ]}>\n {palette.name}\n </Text>\n </Pressable>\n ))}\n </View>\n\n {/* Active palette panel with inline preview */}\n <PalettePanel\n palette={state.palettes[activePaletteIndex]}\n index={activePaletteIndex}\n dispatch={dispatch}\n previewColors={previews[activePaletteIndex]}\n state={state}\n />\n\n {showExport && <ExportPanel state={state} />}\n\n {/* Safety: hardcoded styling so this button is always readable */}\n <button\n onClick={() => reset()}\n style={{\n marginTop: 16,\n padding: '8px 16px',\n backgroundColor: '#ffffff',\n color: '#000000',\n border: '2px solid #000000',\n borderRadius: 4,\n fontWeight: 700,\n fontSize: 14,\n cursor: 'pointer',\n }}\n >\n Reset to Defaults\n </button>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 8,\n padding: 16,\n gap: 4,\n },\n topBar: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'center',\n marginBottom: 8,\n },\n topRow: {\n flexDirection: 'row',\n gap: 8,\n marginBottom: 4,\n },\n topRowPanel: {\n flex: 1,\n },\n designRow: {\n marginBottom: 4,\n },\n tabBar: {\n flexDirection: 'row',\n gap: 4,\n marginBottom: 4,\n },\n tab: {\n paddingVertical: 8,\n paddingHorizontal: 12,\n borderRadius: 6,\n borderWidth: 1,\n },\n tabText: {\n fontSize: 13,\n },\n});\n"]}
package/dist/index.d.ts CHANGED
@@ -7,8 +7,13 @@ export { toCSS } from './bridge/toCSS';
7
7
  export { toJSON } from './bridge/toJSON';
8
8
  export type { ConfiguratorExport } from './bridge/toJSON';
9
9
  export { traditionalHueToOklch } from './hue-conversion';
10
+ export { oklchHueToTraditional, hexToPaletteParams } from './hex-conversion';
11
+ export type { HexPaletteParams } from './hex-conversion';
10
12
  export { DEFAULT_CONFIGURATOR_STATE } from './state/defaults';
13
+ export { SEMANTIC_HUE_RANGES } from './constants';
11
14
  export { useConfigurator } from './hooks/useConfigurator';
12
15
  export type { UseConfiguratorResult } from './hooks/useConfigurator';
13
16
  export { usePreviewColors } from './hooks/usePreviewColors';
17
+ export { useWcagValidation } from './hooks/useWcagValidation';
18
+ export type { WcagValidation } from './hooks/useWcagValidation';
14
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACxF,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACxF,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAG9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC"}