dialkit 1.0.0 → 1.1.0

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.
Files changed (85) hide show
  1. package/README.md +123 -2
  2. package/dist/index.cjs +42 -39
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +7 -5
  5. package/dist/index.d.ts +7 -5
  6. package/dist/index.js +42 -39
  7. package/dist/index.js.map +1 -1
  8. package/dist/solid/index.cjs +97 -54
  9. package/dist/solid/index.cjs.map +1 -1
  10. package/dist/solid/index.d.cts +4 -1
  11. package/dist/solid/index.d.ts +4 -1
  12. package/dist/solid/index.js +96 -53
  13. package/dist/solid/index.js.map +1 -1
  14. package/dist/store/index.cjs +450 -0
  15. package/dist/store/index.cjs.map +1 -0
  16. package/dist/store/index.d.cts +124 -0
  17. package/dist/store/index.d.ts +124 -0
  18. package/dist/store/index.js +425 -0
  19. package/dist/store/index.js.map +1 -0
  20. package/dist/styles.css +31 -0
  21. package/dist/svelte/Portal.svelte +30 -0
  22. package/dist/svelte/Portal.svelte.d.ts +9 -0
  23. package/dist/svelte/Portal.svelte.d.ts.map +1 -0
  24. package/dist/svelte/components/ButtonGroup.svelte +16 -0
  25. package/dist/svelte/components/ButtonGroup.svelte.d.ts +11 -0
  26. package/dist/svelte/components/ButtonGroup.svelte.d.ts.map +1 -0
  27. package/dist/svelte/components/ColorControl.svelte +81 -0
  28. package/dist/svelte/components/ColorControl.svelte.d.ts +9 -0
  29. package/dist/svelte/components/ColorControl.svelte.d.ts.map +1 -0
  30. package/dist/svelte/components/ControlRenderer.svelte +84 -0
  31. package/dist/svelte/components/ControlRenderer.svelte.d.ts +11 -0
  32. package/dist/svelte/components/ControlRenderer.svelte.d.ts.map +1 -0
  33. package/dist/svelte/components/DialRoot.svelte +65 -0
  34. package/dist/svelte/components/DialRoot.svelte.d.ts +11 -0
  35. package/dist/svelte/components/DialRoot.svelte.d.ts.map +1 -0
  36. package/dist/svelte/components/EasingVisualization.svelte +50 -0
  37. package/dist/svelte/components/EasingVisualization.svelte.d.ts +10 -0
  38. package/dist/svelte/components/EasingVisualization.svelte.d.ts.map +1 -0
  39. package/dist/svelte/components/Folder.svelte +204 -0
  40. package/dist/svelte/components/Folder.svelte.d.ts +14 -0
  41. package/dist/svelte/components/Folder.svelte.d.ts.map +1 -0
  42. package/dist/svelte/components/Panel.svelte +144 -0
  43. package/dist/svelte/components/Panel.svelte.d.ts +10 -0
  44. package/dist/svelte/components/Panel.svelte.d.ts.map +1 -0
  45. package/dist/svelte/components/PresetManager.svelte +156 -0
  46. package/dist/svelte/components/PresetManager.svelte.d.ts +10 -0
  47. package/dist/svelte/components/PresetManager.svelte.d.ts.map +1 -0
  48. package/dist/svelte/components/SegmentedControl.svelte +106 -0
  49. package/dist/svelte/components/SegmentedControl.svelte.d.ts +13 -0
  50. package/dist/svelte/components/SegmentedControl.svelte.d.ts.map +1 -0
  51. package/dist/svelte/components/SelectControl.svelte +151 -0
  52. package/dist/svelte/components/SelectControl.svelte.d.ts +14 -0
  53. package/dist/svelte/components/SelectControl.svelte.d.ts.map +1 -0
  54. package/dist/svelte/components/Slider.svelte +345 -0
  55. package/dist/svelte/components/Slider.svelte.d.ts +13 -0
  56. package/dist/svelte/components/Slider.svelte.d.ts.map +1 -0
  57. package/dist/svelte/components/SpringControl.svelte +124 -0
  58. package/dist/svelte/components/SpringControl.svelte.d.ts +12 -0
  59. package/dist/svelte/components/SpringControl.svelte.d.ts.map +1 -0
  60. package/dist/svelte/components/SpringVisualization.svelte +115 -0
  61. package/dist/svelte/components/SpringVisualization.svelte.d.ts +9 -0
  62. package/dist/svelte/components/SpringVisualization.svelte.d.ts.map +1 -0
  63. package/dist/svelte/components/TextControl.svelte +19 -0
  64. package/dist/svelte/components/TextControl.svelte.d.ts +10 -0
  65. package/dist/svelte/components/TextControl.svelte.d.ts.map +1 -0
  66. package/dist/svelte/components/Toggle.svelte +21 -0
  67. package/dist/svelte/components/Toggle.svelte.d.ts +9 -0
  68. package/dist/svelte/components/Toggle.svelte.d.ts.map +1 -0
  69. package/dist/svelte/components/TransitionControl.svelte +200 -0
  70. package/dist/svelte/components/TransitionControl.svelte.d.ts +12 -0
  71. package/dist/svelte/components/TransitionControl.svelte.d.ts.map +1 -0
  72. package/dist/svelte/components/transitions.d.ts +6 -0
  73. package/dist/svelte/components/transitions.d.ts.map +1 -0
  74. package/dist/svelte/components/transitions.js +14 -0
  75. package/dist/svelte/createDialKit.svelte.d.ts +7 -0
  76. package/dist/svelte/createDialKit.svelte.d.ts.map +1 -0
  77. package/dist/svelte/createDialKit.svelte.js +82 -0
  78. package/dist/svelte/index.d.ts +19 -0
  79. package/dist/svelte/index.d.ts.map +1 -0
  80. package/dist/svelte/index.js +19 -0
  81. package/dist/svelte/shims.d.ts +9 -0
  82. package/dist/svelte/theme-css.d.ts +2 -0
  83. package/dist/svelte/theme-css.d.ts.map +1 -0
  84. package/dist/svelte/theme-css.js +1097 -0
  85. package/package.json +29 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/solid/createDialKit.ts","../../src/store/DialStore.ts","../../src/solid/components/DialRoot.tsx","../../src/solid/components/Panel.tsx","../../src/solid/components/Folder.tsx","../../src/solid/components/Slider.tsx","../../src/solid/components/SegmentedControl.tsx","../../src/solid/components/Toggle.tsx","../../src/solid/components/SpringControl.tsx","../../src/solid/components/SpringVisualization.tsx","../../src/solid/components/TextControl.tsx","../../src/solid/components/SelectControl.tsx","../../src/solid/components/ColorControl.tsx","../../src/solid/components/PresetManager.tsx","../../src/solid/components/ButtonGroup.tsx"],"sourcesContent":["import { createSignal, createMemo, onMount, onCleanup, createUniqueId, type Accessor } from 'solid-js';\nimport { DialStore } from '../store/DialStore';\nimport type { DialConfig, ResolvedValues, DialValue, SpringConfig, SelectConfig, ColorConfig, TextConfig, ActionConfig } from '../store/DialStore';\n\nexport interface CreateDialOptions {\n onAction?: (action: string) => void;\n}\n\nexport function createDialKit<T extends DialConfig>(\n name: string,\n config: T,\n options?: CreateDialOptions\n): Accessor<ResolvedValues<T>> {\n const id = createUniqueId();\n const panelId = `${name}-${id}`;\n\n const [values, setValues] = createSignal<Record<string, DialValue>>(\n DialStore.getValues(panelId)\n );\n\n onMount(() => {\n DialStore.registerPanel(panelId, name, config);\n setValues(DialStore.getValues(panelId));\n\n const unsubValues = DialStore.subscribe(panelId, () => {\n setValues(DialStore.getValues(panelId));\n });\n\n const unsubActions = options?.onAction\n ? DialStore.subscribeActions(panelId, options.onAction)\n : undefined;\n\n onCleanup(() => {\n unsubValues();\n unsubActions?.();\n DialStore.unregisterPanel(panelId);\n });\n });\n\n return createMemo(() => buildResolvedValues(config, values(), '') as ResolvedValues<T>);\n}\n\nfunction buildResolvedValues(\n config: DialConfig,\n flatValues: Record<string, DialValue>,\n prefix: string\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, configValue] of Object.entries(config)) {\n if (key === '_collapsed') continue;\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (Array.isArray(configValue) && configValue.length <= 4 && typeof configValue[0] === 'number') {\n result[key] = flatValues[path] ?? configValue[0];\n } else if (typeof configValue === 'number' || typeof configValue === 'boolean' || typeof configValue === 'string') {\n result[key] = flatValues[path] ?? configValue;\n } else if (isSpringConfig(configValue)) {\n result[key] = flatValues[path] ?? configValue;\n } else if (isActionConfig(configValue)) {\n result[key] = flatValues[path] ?? configValue;\n } else if (isSelectConfig(configValue)) {\n const defaultValue = configValue.default ?? getFirstOptionValue(configValue.options);\n result[key] = flatValues[path] ?? defaultValue;\n } else if (isColorConfig(configValue)) {\n result[key] = flatValues[path] ?? configValue.default ?? '#000000';\n } else if (isTextConfig(configValue)) {\n result[key] = flatValues[path] ?? configValue.default ?? '';\n } else if (typeof configValue === 'object' && configValue !== null) {\n result[key] = buildResolvedValues(configValue as DialConfig, flatValues, path);\n }\n }\n\n return result;\n}\n\nfunction hasType(value: unknown, type: string): boolean {\n return typeof value === 'object' && value !== null && 'type' in value && (value as { type: string }).type === type;\n}\n\nfunction isSpringConfig(value: unknown): value is SpringConfig {\n return hasType(value, 'spring');\n}\n\nfunction isActionConfig(value: unknown): value is ActionConfig {\n return hasType(value, 'action');\n}\n\nfunction isSelectConfig(value: unknown): value is SelectConfig {\n return hasType(value, 'select') && 'options' in (value as object) && Array.isArray((value as SelectConfig).options);\n}\n\nfunction isColorConfig(value: unknown): value is ColorConfig {\n return hasType(value, 'color');\n}\n\nfunction isTextConfig(value: unknown): value is TextConfig {\n return hasType(value, 'text');\n}\n\nfunction getFirstOptionValue(options: (string | { value: string; label: string })[]): string {\n const first = options[0];\n return typeof first === 'string' ? first : first.value;\n}\n","// Lightweight state store with subscriptions for dialkit\n\nexport type SpringConfig = {\n type: 'spring';\n stiffness?: number;\n damping?: number;\n mass?: number;\n visualDuration?: number;\n bounce?: number;\n};\n\nexport type EasingConfig = {\n type: 'easing';\n duration: number;\n ease: [number, number, number, number];\n};\n\nexport type TransitionConfig = SpringConfig | EasingConfig;\n\nexport type ActionConfig = {\n type: 'action';\n label?: string;\n};\n\nexport type SelectConfig = {\n type: 'select';\n options: (string | { value: string; label: string })[];\n default?: string;\n};\n\nexport type ColorConfig = {\n type: 'color';\n default?: string;\n};\n\nexport type TextConfig = {\n type: 'text';\n default?: string;\n placeholder?: string;\n};\n\nexport type DialValue = number | boolean | string | SpringConfig | EasingConfig | ActionConfig | SelectConfig | ColorConfig | TextConfig;\n\nexport type DialConfig = {\n [key: string]: DialValue | [number, number, number, number?] | DialConfig;\n};\n\nexport type ResolvedValues<T extends DialConfig> = {\n [K in keyof T]: T[K] extends [number, number, number, number?]\n ? number\n : T[K] extends SpringConfig\n ? TransitionConfig\n : T[K] extends EasingConfig\n ? TransitionConfig\n : T[K] extends SelectConfig\n ? string\n : T[K] extends ColorConfig\n ? string\n : T[K] extends TextConfig\n ? string\n : T[K] extends DialConfig\n ? ResolvedValues<T[K]>\n : T[K];\n};\n\nexport type ControlMeta = {\n type: 'slider' | 'toggle' | 'spring' | 'transition' | 'folder' | 'action' | 'select' | 'color' | 'text';\n path: string;\n label: string;\n min?: number;\n max?: number;\n step?: number;\n children?: ControlMeta[];\n defaultOpen?: boolean;\n options?: (string | { value: string; label: string })[];\n placeholder?: string;\n};\n\nexport type PanelConfig = {\n id: string;\n name: string;\n controls: ControlMeta[];\n values: Record<string, DialValue>;\n};\n\ntype Listener = () => void;\ntype ActionListener = (action: string) => void;\n\nexport type Preset = {\n id: string;\n name: string;\n values: Record<string, DialValue>;\n};\n\n// Stable empty object for unregistered panels (React 19 useSyncExternalStore requirement)\nconst EMPTY_VALUES: Record<string, DialValue> = Object.freeze({});\n\nclass DialStoreClass {\n private panels: Map<string, PanelConfig> = new Map();\n private listeners: Map<string, Set<Listener>> = new Map();\n private globalListeners: Set<Listener> = new Set();\n private snapshots: Map<string, Record<string, DialValue>> = new Map();\n private actionListeners: Map<string, Set<ActionListener>> = new Map();\n private presets: Map<string, Preset[]> = new Map();\n private activePreset: Map<string, string | null> = new Map();\n private baseValues: Map<string, Record<string, DialValue>> = new Map();\n\n registerPanel(id: string, name: string, config: DialConfig): void {\n const controls = this.parseConfig(config, '');\n const values = this.flattenValues(config, '');\n\n // Set initial transition modes based on config types\n this.initTransitionModes(config, '', values);\n\n this.panels.set(id, { id, name, controls, values });\n this.snapshots.set(id, { ...values });\n this.baseValues.set(id, { ...values });\n this.notifyGlobal();\n }\n\n updatePanel(id: string, name: string, config: DialConfig): void {\n const existing = this.panels.get(id);\n if (!existing) {\n this.registerPanel(id, name, config);\n return;\n }\n\n const controls = this.parseConfig(config, '');\n const controlsByPath = this.mapControlsByPath(controls);\n const defaultValues = this.flattenValues(config, '');\n const nextValues: Record<string, DialValue> = {};\n\n for (const [path, defaultValue] of Object.entries(defaultValues)) {\n nextValues[path] = this.normalizePreservedValue(\n existing.values[path],\n defaultValue,\n controlsByPath.get(path)\n );\n }\n\n // Set mode defaults for new transition controls first.\n this.initTransitionModes(config, '', nextValues);\n\n for (const [path, mode] of Object.entries(existing.values)) {\n if (!path.endsWith('.__mode')) {\n continue;\n }\n\n const transitionPath = path.slice(0, -'__mode'.length - 1);\n const transitionControl = controlsByPath.get(transitionPath);\n if (transitionControl?.type === 'transition') {\n nextValues[path] = mode;\n }\n }\n\n const nextPanel: PanelConfig = { id, name, controls, values: nextValues };\n this.panels.set(id, nextPanel);\n this.snapshots.set(id, { ...nextValues });\n\n const previousBaseValues = this.baseValues.get(id) ?? {};\n const nextBaseValues: Record<string, DialValue> = {};\n for (const [path, defaultValue] of Object.entries(defaultValues)) {\n nextBaseValues[path] = this.normalizePreservedValue(\n previousBaseValues[path],\n defaultValue,\n controlsByPath.get(path)\n );\n }\n\n for (const [path, value] of Object.entries(nextValues)) {\n if (path.endsWith('.__mode')) {\n nextBaseValues[path] = value;\n }\n }\n\n this.baseValues.set(id, nextBaseValues);\n\n this.notify(id);\n this.notifyGlobal();\n }\n\n unregisterPanel(id: string): void {\n this.panels.delete(id);\n this.listeners.delete(id);\n this.snapshots.delete(id);\n this.actionListeners.delete(id);\n this.baseValues.delete(id);\n this.notifyGlobal();\n }\n\n updateValue(panelId: string, path: string, value: DialValue): void {\n const panel = this.panels.get(panelId);\n if (!panel) return;\n\n panel.values[path] = value;\n\n // Auto-save to active preset or base values\n const activeId = this.activePreset.get(panelId);\n if (activeId) {\n const presets = this.presets.get(panelId) ?? [];\n const preset = presets.find(p => p.id === activeId);\n if (preset) preset.values[path] = value;\n } else {\n const base = this.baseValues.get(panelId);\n if (base) base[path] = value;\n }\n\n // Create a new snapshot reference so useSyncExternalStore detects the change\n this.snapshots.set(panelId, { ...panel.values });\n this.notify(panelId);\n }\n\n updateSpringMode(panelId: string, path: string, mode: 'simple' | 'advanced'): void {\n this.updateTransitionMode(panelId, path, mode);\n }\n\n getSpringMode(panelId: string, path: string): 'simple' | 'advanced' {\n const mode = this.getTransitionMode(panelId, path);\n if (mode === 'easing') return 'simple';\n return mode;\n }\n\n updateTransitionMode(panelId: string, path: string, mode: 'easing' | 'simple' | 'advanced'): void {\n const panel = this.panels.get(panelId);\n if (!panel) return;\n\n panel.values[`${path}.__mode`] = mode;\n this.snapshots.set(panelId, { ...panel.values });\n this.notify(panelId);\n }\n\n getTransitionMode(panelId: string, path: string): 'easing' | 'simple' | 'advanced' {\n const panel = this.panels.get(panelId);\n if (!panel) return 'simple';\n return (panel.values[`${path}.__mode`] as 'easing' | 'simple' | 'advanced') || 'simple';\n }\n\n getValue(panelId: string, path: string): DialValue | undefined {\n const panel = this.panels.get(panelId);\n return panel?.values[path];\n }\n\n getValues(panelId: string): Record<string, DialValue> {\n // Return the snapshot for useSyncExternalStore compatibility\n // Use stable EMPTY_VALUES to avoid infinite loop in React 19\n return this.snapshots.get(panelId) ?? EMPTY_VALUES;\n }\n\n getPanels(): PanelConfig[] {\n return Array.from(this.panels.values());\n }\n\n getPanel(id: string): PanelConfig | undefined {\n return this.panels.get(id);\n }\n\n subscribe(panelId: string, listener: Listener): () => void {\n if (!this.listeners.has(panelId)) {\n this.listeners.set(panelId, new Set());\n }\n this.listeners.get(panelId)!.add(listener);\n\n return () => {\n this.listeners.get(panelId)?.delete(listener);\n };\n }\n\n subscribeGlobal(listener: Listener): () => void {\n this.globalListeners.add(listener);\n return () => this.globalListeners.delete(listener);\n }\n\n subscribeActions(panelId: string, listener: ActionListener): () => void {\n if (!this.actionListeners.has(panelId)) {\n this.actionListeners.set(panelId, new Set());\n }\n this.actionListeners.get(panelId)!.add(listener);\n\n return () => {\n this.actionListeners.get(panelId)?.delete(listener);\n };\n }\n\n triggerAction(panelId: string, path: string): void {\n this.actionListeners.get(panelId)?.forEach(fn => fn(path));\n }\n\n savePreset(panelId: string, name: string): string {\n const panel = this.panels.get(panelId);\n if (!panel) throw new Error(`Panel ${panelId} not found`);\n\n const id = `preset-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n const preset: Preset = {\n id,\n name,\n values: { ...panel.values },\n };\n\n const existing = this.presets.get(panelId) ?? [];\n this.presets.set(panelId, [...existing, preset]);\n this.activePreset.set(panelId, id);\n\n // Force re-render by creating new snapshot reference\n this.snapshots.set(panelId, { ...panel.values });\n this.notify(panelId);\n\n return id;\n }\n\n loadPreset(panelId: string, presetId: string): void {\n const panel = this.panels.get(panelId);\n if (!panel) return;\n\n const presets = this.presets.get(panelId) ?? [];\n const preset = presets.find(p => p.id === presetId);\n if (!preset) return;\n\n // Apply preset values\n panel.values = { ...preset.values };\n this.snapshots.set(panelId, { ...panel.values });\n this.activePreset.set(panelId, presetId);\n this.notify(panelId);\n }\n\n deletePreset(panelId: string, presetId: string): void {\n const presets = this.presets.get(panelId) ?? [];\n this.presets.set(panelId, presets.filter(p => p.id !== presetId));\n\n // Clear active if deleted\n if (this.activePreset.get(panelId) === presetId) {\n this.activePreset.set(panelId, null);\n }\n\n // Force re-render by creating new snapshot reference\n const panel = this.panels.get(panelId);\n if (panel) {\n this.snapshots.set(panelId, { ...panel.values });\n }\n this.notify(panelId);\n }\n\n getPresets(panelId: string): Preset[] {\n return this.presets.get(panelId) ?? [];\n }\n\n getActivePresetId(panelId: string): string | null {\n return this.activePreset.get(panelId) ?? null;\n }\n\n clearActivePreset(panelId: string): void {\n const panel = this.panels.get(panelId);\n const base = this.baseValues.get(panelId);\n if (panel && base) {\n panel.values = { ...base };\n this.snapshots.set(panelId, { ...panel.values });\n }\n this.activePreset.set(panelId, null);\n this.notify(panelId);\n }\n\n private notify(panelId: string): void {\n this.listeners.get(panelId)?.forEach(fn => fn());\n }\n\n private notifyGlobal(): void {\n this.globalListeners.forEach(fn => fn());\n }\n\n private initTransitionModes(config: DialConfig, prefix: string, values: Record<string, DialValue>): void {\n for (const [key, value] of Object.entries(config)) {\n if (key === '_collapsed') continue;\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (this.isEasingConfig(value)) {\n values[`${path}.__mode`] = 'easing';\n } else if (this.isSpringConfig(value)) {\n // Detect physics mode from config\n const hasPhysics = value.stiffness !== undefined || value.damping !== undefined || value.mass !== undefined;\n const hasTime = value.visualDuration !== undefined || value.bounce !== undefined;\n values[`${path}.__mode`] = hasPhysics && !hasTime ? 'advanced' : 'simple';\n } else if (typeof value === 'object' && value !== null && !Array.isArray(value) && !this.isActionConfig(value) && !this.isSelectConfig(value) && !this.isColorConfig(value) && !this.isTextConfig(value)) {\n this.initTransitionModes(value as DialConfig, path, values);\n }\n }\n }\n\n private parseConfig(config: DialConfig, prefix: string): ControlMeta[] {\n const controls: ControlMeta[] = [];\n\n for (const [key, value] of Object.entries(config)) {\n if (key === '_collapsed') continue;\n const path = prefix ? `${prefix}.${key}` : key;\n const label = this.formatLabel(key);\n\n if (Array.isArray(value) && value.length <= 4 && typeof value[0] === 'number') {\n // Range tuple: [default, min, max]\n controls.push({\n type: 'slider',\n path,\n label,\n min: value[1],\n max: value[2],\n step: value[3] ?? this.inferStep(value[1], value[2]),\n });\n } else if (typeof value === 'number') {\n // Single number - auto-infer range\n const { min, max, step } = this.inferRange(value);\n controls.push({ type: 'slider', path, label, min, max, step });\n } else if (typeof value === 'boolean') {\n controls.push({ type: 'toggle', path, label });\n } else if (this.isSpringConfig(value) || this.isEasingConfig(value)) {\n controls.push({ type: 'transition', path, label });\n } else if (this.isActionConfig(value)) {\n controls.push({ type: 'action', path, label: (value as ActionConfig).label || label });\n } else if (this.isSelectConfig(value)) {\n controls.push({ type: 'select', path, label, options: value.options });\n } else if (this.isColorConfig(value)) {\n controls.push({ type: 'color', path, label });\n } else if (this.isTextConfig(value)) {\n controls.push({ type: 'text', path, label, placeholder: value.placeholder });\n } else if (typeof value === 'string') {\n // Auto-detect: hex color vs text\n if (this.isHexColor(value)) {\n controls.push({ type: 'color', path, label });\n } else {\n controls.push({ type: 'text', path, label });\n }\n } else if (typeof value === 'object' && value !== null) {\n // Nested object becomes a folder\n const folderConfig = value as DialConfig;\n const defaultOpen = '_collapsed' in folderConfig ? !(folderConfig._collapsed as boolean) : true;\n controls.push({\n type: 'folder',\n path,\n label,\n defaultOpen,\n children: this.parseConfig(folderConfig, path),\n });\n }\n }\n\n return controls;\n }\n\n private flattenValues(config: DialConfig, prefix: string): Record<string, DialValue> {\n const values: Record<string, DialValue> = {};\n\n for (const [key, value] of Object.entries(config)) {\n if (key === '_collapsed') continue;\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (Array.isArray(value) && value.length <= 4 && typeof value[0] === 'number') {\n values[path] = value[0]; // Default value\n } else if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'string') {\n values[path] = value;\n } else if (this.isSpringConfig(value) || this.isEasingConfig(value)) {\n values[path] = value;\n } else if (this.isActionConfig(value)) {\n // Actions don't need stored values - they're just triggers\n values[path] = value;\n } else if (this.isSelectConfig(value)) {\n // Use default or first option's value\n const firstOption = value.options[0];\n const firstValue = typeof firstOption === 'string' ? firstOption : firstOption.value;\n values[path] = value.default ?? firstValue;\n } else if (this.isColorConfig(value)) {\n values[path] = value.default ?? '#000000';\n } else if (this.isTextConfig(value)) {\n values[path] = value.default ?? '';\n } else if (typeof value === 'object' && value !== null) {\n Object.assign(values, this.flattenValues(value as DialConfig, path));\n }\n }\n\n return values;\n }\n\n private isSpringConfig(value: unknown): value is SpringConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as SpringConfig).type === 'spring'\n );\n }\n\n private isEasingConfig(value: unknown): value is EasingConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as EasingConfig).type === 'easing'\n );\n }\n\n private isActionConfig(value: unknown): value is ActionConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as ActionConfig).type === 'action'\n );\n }\n\n private isSelectConfig(value: unknown): value is SelectConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as SelectConfig).type === 'select' &&\n 'options' in value &&\n Array.isArray((value as SelectConfig).options)\n );\n }\n\n private isColorConfig(value: unknown): value is ColorConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as ColorConfig).type === 'color'\n );\n }\n\n private isTextConfig(value: unknown): value is TextConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as TextConfig).type === 'text'\n );\n }\n\n private isHexColor(value: string): boolean {\n return /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(value);\n }\n\n private formatLabel(key: string): string {\n // Convert camelCase to Title Case\n return key\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, str => str.toUpperCase())\n .trim();\n }\n\n private inferRange(value: number): { min: number; max: number; step: number } {\n // Infer reasonable range based on value\n if (value >= 0 && value <= 1) {\n return { min: 0, max: 1, step: 0.01 };\n } else if (value >= 0 && value <= 10) {\n return { min: 0, max: value * 3 || 10, step: 0.1 };\n } else if (value >= 0 && value <= 100) {\n return { min: 0, max: value * 3 || 100, step: 1 };\n } else if (value >= 0) {\n return { min: 0, max: value * 3 || 1000, step: 10 };\n } else {\n return { min: value * 3, max: -value * 3, step: 1 };\n }\n }\n\n private inferStep(min: number, max: number): number {\n const range = max - min;\n if (range <= 1) return 0.01;\n if (range <= 10) return 0.1;\n if (range <= 100) return 1;\n return 10;\n }\n\n private normalizePreservedValue(\n existingValue: DialValue | undefined,\n defaultValue: DialValue,\n control: ControlMeta | undefined\n ): DialValue {\n if (existingValue === undefined || !control) {\n return defaultValue;\n }\n\n switch (control.type) {\n case 'slider': {\n if (typeof existingValue !== 'number' || typeof defaultValue !== 'number') {\n return defaultValue;\n }\n\n const min = control.min ?? Number.NEGATIVE_INFINITY;\n const max = control.max ?? Number.POSITIVE_INFINITY;\n const clamped = Math.min(max, Math.max(min, existingValue));\n\n if (typeof control.step !== 'number' || control.step <= 0) {\n return clamped;\n }\n\n return this.roundToStep(clamped, min, max, control.step);\n }\n case 'toggle':\n return typeof existingValue === 'boolean' ? existingValue : defaultValue;\n case 'select': {\n if (typeof existingValue !== 'string') {\n return defaultValue;\n }\n\n const options = control.options ?? [];\n const validValues = new Set(options.map((option) => (typeof option === 'string' ? option : option.value)));\n return validValues.has(existingValue) ? existingValue : defaultValue;\n }\n case 'color':\n case 'text':\n return typeof existingValue === 'string' ? existingValue : defaultValue;\n case 'transition':\n if (this.isSpringConfig(defaultValue)) {\n return this.isSpringConfig(existingValue) ? existingValue : defaultValue;\n }\n if (this.isEasingConfig(defaultValue)) {\n return this.isEasingConfig(existingValue) ? existingValue : defaultValue;\n }\n return defaultValue;\n case 'action':\n return defaultValue;\n default:\n return defaultValue;\n }\n }\n\n private roundToStep(value: number, min: number, max: number, step: number): number {\n const snapped = min + Math.round((value - min) / step) * step;\n const clamped = Math.min(max, Math.max(min, snapped));\n const precision = this.stepPrecision(step);\n return Number(clamped.toFixed(precision));\n }\n\n private stepPrecision(step: number): number {\n const text = String(step);\n const decimalIndex = text.indexOf('.');\n return decimalIndex === -1 ? 0 : text.length - decimalIndex - 1;\n }\n\n private mapControlsByPath(controls: ControlMeta[]): Map<string, ControlMeta> {\n const map = new Map<string, ControlMeta>();\n\n const visit = (nodes: ControlMeta[]) => {\n for (const node of nodes) {\n if (node.type === 'folder' && node.children) {\n visit(node.children);\n continue;\n }\n\n map.set(node.path, node);\n }\n };\n\n visit(controls);\n return map;\n }\n\n}\n\n// Singleton instance\nexport const DialStore = new DialStoreClass();\n","import { createSignal, onMount, onCleanup, Show, For } from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { DialStore } from '../../store/DialStore';\nimport type { PanelConfig } from '../../store/DialStore';\nimport { Panel } from './Panel';\n\nexport type DialPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\ninterface DialRootProps {\n position?: DialPosition;\n defaultOpen?: boolean;\n}\n\nexport function DialRoot(props: DialRootProps) {\n const [panels, setPanels] = createSignal<PanelConfig[]>([]);\n const [mounted, setMounted] = createSignal(false);\n\n onMount(() => {\n setMounted(true);\n setPanels(DialStore.getPanels());\n const unsub = DialStore.subscribeGlobal(() => {\n setPanels(DialStore.getPanels());\n });\n onCleanup(unsub);\n });\n\n return (\n <Show when={mounted() && typeof window !== 'undefined' && panels().length > 0}>\n <Portal mount={document.body}>\n <div class=\"dialkit-root\">\n <div class=\"dialkit-panel\" data-position={props.position ?? 'top-right'}>\n <For each={panels()}>\n {(panel) => <Panel panel={panel} defaultOpen={props.defaultOpen ?? true} />}\n </For>\n </div>\n </div>\n </Portal>\n </Show>\n );\n}\n","import { createSignal, createEffect, onMount, onCleanup, Show, For, JSX } from 'solid-js';\nimport { animate } from 'motion';\nimport { DialStore } from '../../store/DialStore';\nimport type { ControlMeta, PanelConfig, SpringConfig, DialValue } from '../../store/DialStore';\nimport { Folder } from './Folder';\nimport { Slider } from './Slider';\nimport { Toggle } from './Toggle';\nimport { SpringControl } from './SpringControl';\nimport { TextControl } from './TextControl';\nimport { SelectControl } from './SelectControl';\nimport { ColorControl } from './ColorControl';\nimport { PresetManager } from './PresetManager';\n\ninterface PanelProps {\n panel: PanelConfig;\n defaultOpen?: boolean;\n}\n\nexport function Panel(props: PanelProps) {\n const [copied, setCopied] = createSignal(false);\n const [isPanelOpen, setIsPanelOpen] = createSignal(props.defaultOpen ?? true);\n const [values, setValues] = createSignal<Record<string, DialValue>>(\n DialStore.getValues(props.panel.id)\n );\n const [presets, setPresets] = createSignal(DialStore.getPresets(props.panel.id));\n const [activePresetId, setActivePresetId] = createSignal(DialStore.getActivePresetId(props.panel.id));\n let addButtonRef!: HTMLButtonElement;\n let copyButtonRef!: HTMLButtonElement;\n let copyClipboardIconRef!: HTMLSpanElement;\n let copyCheckIconRef!: HTMLSpanElement;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let addTapAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let copyTapAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let copyClipboardAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let copyCheckAnim: any = null;\n let didInitCopyIcons = false;\n\n const tapTransition = { type: 'spring' as const, visualDuration: 0.15, bounce: 0.3 };\n\n onMount(() => {\n const unsub = DialStore.subscribe(props.panel.id, () => {\n setValues(DialStore.getValues(props.panel.id));\n setPresets(DialStore.getPresets(props.panel.id));\n setActivePresetId(DialStore.getActivePresetId(props.panel.id));\n });\n\n if (copyClipboardIconRef && copyCheckIconRef) {\n copyClipboardIconRef.style.transformOrigin = '50% 50%';\n copyClipboardIconRef.style.opacity = '1';\n copyClipboardIconRef.style.transform = 'scale(1)';\n copyClipboardIconRef.style.filter = 'blur(0px)';\n copyCheckIconRef.style.transformOrigin = '50% 50%';\n copyCheckIconRef.style.opacity = '0';\n copyCheckIconRef.style.transform = 'scale(0.5)';\n copyCheckIconRef.style.filter = 'blur(4px)';\n didInitCopyIcons = true;\n }\n\n onCleanup(unsub);\n });\n\n const handleAddPreset = () => {\n const nextNum = presets().length + 2;\n DialStore.savePreset(props.panel.id, `Version ${nextNum}`);\n };\n\n const handleCopy = () => {\n const jsonStr = JSON.stringify(values(), null, 2);\n const instruction = `Update the createDialKit configuration for \"${props.panel.name}\" with these values:\\n\\n\\`\\`\\`json\\n${jsonStr}\\n\\`\\`\\`\\n\\nApply these values as the new defaults in the createDialKit call.`;\n navigator.clipboard.writeText(instruction);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n };\n\n createEffect(() => {\n const isCopied = copied();\n if (!copyClipboardIconRef || !copyCheckIconRef) return;\n\n copyClipboardAnim?.stop();\n copyCheckAnim?.stop();\n\n if (!didInitCopyIcons) return;\n\n const transition = { type: 'spring' as const, visualDuration: 0.3, bounce: 0.2 };\n copyClipboardAnim = animate(copyClipboardIconRef, {\n opacity: isCopied ? 0 : 1,\n scale: isCopied ? 0.5 : 1,\n filter: isCopied ? 'blur(4px)' : 'blur(0px)',\n }, transition);\n copyCheckAnim = animate(copyCheckIconRef, {\n opacity: isCopied ? 1 : 0,\n scale: isCopied ? 1 : 0.5,\n filter: isCopied ? 'blur(0px)' : 'blur(4px)',\n }, transition);\n });\n\n onCleanup(() => {\n addTapAnim?.stop();\n copyTapAnim?.stop();\n copyClipboardAnim?.stop();\n copyCheckAnim?.stop();\n });\n\n const handleAddTapStart = () => {\n if (!addButtonRef) return;\n addTapAnim?.stop();\n addTapAnim = animate(addButtonRef, { scale: 0.9 }, tapTransition);\n };\n\n const handleAddTapEnd = () => {\n if (!addButtonRef) return;\n addTapAnim?.stop();\n addTapAnim = animate(addButtonRef, { scale: 1 }, tapTransition);\n };\n\n const handleCopyTapStart = () => {\n if (!copyButtonRef) return;\n copyTapAnim?.stop();\n copyTapAnim = animate(copyButtonRef, { scale: 0.95 }, tapTransition);\n };\n\n const handleCopyTapEnd = () => {\n if (!copyButtonRef) return;\n copyTapAnim?.stop();\n copyTapAnim = animate(copyButtonRef, { scale: 1 }, tapTransition);\n };\n\n const renderControl = (control: ControlMeta) => {\n const value = () => values()[control.path];\n\n switch (control.type) {\n case 'slider':\n return (\n <Slider\n label={control.label}\n value={value() as number}\n onChange={(v) => DialStore.updateValue(props.panel.id, control.path, v)}\n min={control.min}\n max={control.max}\n step={control.step}\n />\n );\n\n case 'toggle':\n return (\n <Toggle\n label={control.label}\n checked={value() as boolean}\n onChange={(v) => DialStore.updateValue(props.panel.id, control.path, v)}\n />\n );\n\n case 'spring':\n return (\n <SpringControl\n panelId={props.panel.id}\n path={control.path}\n label={control.label}\n spring={value() as SpringConfig}\n onChange={(v) => DialStore.updateValue(props.panel.id, control.path, v)}\n />\n );\n\n case 'folder':\n return (\n <Folder title={control.label} defaultOpen={control.defaultOpen ?? true}>\n <For each={control.children ?? []}>\n {(child) => <>{renderControl(child)}</>}\n </For>\n </Folder>\n );\n\n case 'text':\n return (\n <TextControl\n label={control.label}\n value={value() as string}\n onChange={(v) => DialStore.updateValue(props.panel.id, control.path, v)}\n placeholder={control.placeholder}\n />\n );\n\n case 'select':\n return (\n <SelectControl\n label={control.label}\n value={value() as string}\n options={control.options ?? []}\n onChange={(v) => DialStore.updateValue(props.panel.id, control.path, v)}\n />\n );\n\n case 'color':\n return (\n <ColorControl\n label={control.label}\n value={value() as string}\n onChange={(v) => DialStore.updateValue(props.panel.id, control.path, v)}\n />\n );\n\n default:\n return null;\n }\n };\n\n const renderControls = () => {\n return (\n <For each={props.panel.controls}>\n {(control) => (\n <>\n {control.type === 'action' ? (\n <button\n class=\"dialkit-button\"\n onClick={() => DialStore.triggerAction(props.panel.id, control.path)}\n >\n {control.label}\n </button>\n ) : (\n renderControl(control)\n )}\n </>\n )}\n </For>\n );\n };\n\n const toolbar = (\n <>\n <button\n ref={addButtonRef}\n class=\"dialkit-toolbar-add\"\n onClick={handleAddPreset}\n onPointerDown={handleAddTapStart}\n onPointerUp={handleAddTapEnd}\n onPointerCancel={handleAddTapEnd}\n onPointerLeave={handleAddTapEnd}\n title=\"Add preset\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M4 6H20\" />\n <path d=\"M4 12H10\" />\n <path d=\"M15 15L21 15\" />\n <path d=\"M18 12V18\" />\n <path d=\"M4 18H10\" />\n </svg>\n </button>\n\n <PresetManager\n panelId={props.panel.id}\n presets={presets()}\n activePresetId={activePresetId()}\n onAdd={handleAddPreset}\n />\n\n <button\n ref={copyButtonRef}\n class=\"dialkit-toolbar-copy\"\n onClick={handleCopy}\n onPointerDown={handleCopyTapStart}\n onPointerUp={handleCopyTapEnd}\n onPointerCancel={handleCopyTapEnd}\n onPointerLeave={handleCopyTapEnd}\n title=\"Copy parameters\"\n >\n <span class=\"dialkit-toolbar-copy-icon-wrap\">\n <span\n ref={copyClipboardIconRef}\n class=\"dialkit-toolbar-copy-icon\"\n style={{ opacity: 1, transform: 'scale(1)', filter: 'blur(0px)' }}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"16\" height=\"16\">\n <path d=\"M8 6C8 4.34315 9.34315 3 11 3H13C14.6569 3 16 4.34315 16 6V7H8V6Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\" />\n <path d=\"M19.2405 16.1852L18.5436 14.3733C18.4571 14.1484 18.241 14 18 14C17.759 14 17.5429 14.1484 17.4564 14.3733L16.7595 16.1852C16.658 16.4493 16.4493 16.658 16.1852 16.7595L14.3733 17.4564C14.1484 17.5429 14 17.759 14 18C14 18.241 14.1484 18.4571 14.3733 18.5436L16.1852 19.2405C16.4493 19.342 16.658 19.5507 16.7595 19.8148L17.4564 21.6267C17.5429 21.8516 17.759 22 18 22C18.241 22 18.4571 21.8516 18.5436 21.6267L19.2405 19.8148C19.342 19.5507 19.5507 19.342 19.8148 19.2405L21.6267 18.5436C21.8516 18.4571 22 18.241 22 18C22 17.759 21.8516 17.5429 21.6267 17.4564L19.8148 16.7595C19.5507 16.658 19.342 16.4493 19.2405 16.1852Z\" fill=\"currentColor\" />\n <path d=\"M16 5H17C18.6569 5 20 6.34315 20 8V11M8 5H7C5.34315 5 4 6.34315 4 8V18C4 19.6569 5.34315 21 7 21H12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span\n ref={copyCheckIconRef}\n class=\"dialkit-toolbar-copy-icon\"\n style={{ opacity: 0, transform: 'scale(0.5)', filter: 'blur(4px)' }}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"16\" height=\"16\">\n <path d=\"M5 12.75L10 19L19 5\" />\n </svg>\n </span>\n </span>\n Copy\n </button>\n </>\n );\n\n return (\n <div class=\"dialkit-panel-wrapper\">\n <Folder title={props.panel.name} defaultOpen={props.defaultOpen ?? true} isRoot={true} onOpenChange={setIsPanelOpen} toolbar={toolbar}>\n {renderControls()}\n </Folder>\n </div>\n );\n}\n","import { createSignal, createEffect, onCleanup, Show, JSX } from 'solid-js';\nimport { animate } from 'motion';\n\ninterface FolderProps {\n title: string;\n children: JSX.Element;\n defaultOpen?: boolean;\n isRoot?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n toolbar?: JSX.Element;\n}\n\nexport function Folder(props: FolderProps) {\n const [isOpen, setIsOpen] = createSignal(props.defaultOpen ?? true);\n const [isCollapsed, setIsCollapsed] = createSignal(!(props.defaultOpen ?? true));\n const [contentHeight, setContentHeight] = createSignal<number | undefined>(undefined);\n\n // Section content animation state\n const [contentMounted, setContentMounted] = createSignal(props.defaultOpen ?? true);\n let skipFirstAnim = props.defaultOpen ?? true;\n let sectionContentRef: HTMLDivElement | undefined;\n let sectionAnim: any = null;\n let folderChevronRef: SVGSVGElement | undefined;\n let chevronAnim: any = null;\n let chevronInitialized = false;\n let panelTapAnim: any = null;\n\n let contentRef: HTMLDivElement | undefined;\n\n // Track content height for root panel sizing\n createEffect(() => {\n if (!props.isRoot || !isOpen()) return;\n const el = contentRef;\n if (!el) return;\n const ro = new ResizeObserver(() => {\n const h = el.offsetHeight;\n setContentHeight(prev => prev === h ? prev : h);\n });\n ro.observe(el);\n onCleanup(() => ro.disconnect());\n });\n\n createEffect(() => {\n if (props.isRoot || !folderChevronRef) return;\n const open = isOpen();\n chevronAnim?.stop();\n\n if (!chevronInitialized) {\n folderChevronRef.style.transform = `rotate(${open ? 0 : 180}deg)`;\n chevronInitialized = true;\n return;\n }\n\n chevronAnim = animate(\n folderChevronRef,\n { rotate: open ? 0 : 180 },\n { type: 'spring', visualDuration: 0.35, bounce: 0.15 }\n );\n\n onCleanup(() => chevronAnim?.stop());\n });\n\n const handleToggle = () => {\n const next = !isOpen();\n setIsOpen(next);\n if (next) {\n setIsCollapsed(false);\n if (!props.isRoot) {\n sectionAnim?.stop();\n sectionAnim = null;\n if (sectionContentRef) {\n // If close was interrupted, animate section back open.\n sectionAnim = animate(\n sectionContentRef,\n { height: 'auto', opacity: 1 },\n {\n type: 'spring',\n visualDuration: 0.35,\n bounce: 0.1,\n onComplete: () => {\n sectionAnim = null;\n },\n }\n );\n } else {\n // If fully unmounted, mount and let the ref callback run enter animation.\n setContentMounted(true);\n }\n }\n } else {\n setIsCollapsed(true);\n if (!props.isRoot) {\n if (sectionContentRef) {\n const currentHeight = sectionContentRef.getBoundingClientRect().height;\n sectionContentRef.style.height = `${currentHeight}px`;\n sectionAnim?.stop();\n sectionAnim = animate(\n sectionContentRef,\n { height: 0, opacity: 0 },\n {\n type: 'spring', visualDuration: 0.35, bounce: 0.1,\n onComplete: () => {\n setContentMounted(false);\n sectionAnim = null;\n sectionContentRef = undefined;\n },\n }\n );\n } else {\n setContentMounted(false);\n }\n }\n }\n props.onOpenChange?.(next);\n };\n\n const folderContent = () => (\n <div\n ref={(el) => { if (props.isRoot) contentRef = el; }}\n class={`dialkit-folder ${props.isRoot ? 'dialkit-folder-root' : ''}`}\n >\n <div\n class={`dialkit-folder-header ${props.isRoot ? 'dialkit-panel-header' : ''}`}\n onClick={handleToggle}\n >\n <div class=\"dialkit-folder-header-top\">\n {props.isRoot ? (\n <Show when={isOpen()}>\n <div class=\"dialkit-folder-title-row\">\n <span class=\"dialkit-folder-title dialkit-folder-title-root\">\n {props.title}\n </span>\n </div>\n </Show>\n ) : (\n <div class=\"dialkit-folder-title-row\">\n <span class=\"dialkit-folder-title\">{props.title}</span>\n </div>\n )}\n\n {props.isRoot ? (\n <svg class=\"dialkit-panel-icon\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n opacity=\"0.5\"\n d=\"M6.84766 11.75C6.78583 11.9899 6.75 12.2408 6.75 12.5C6.75 12.7592 6.78583 13.0101 6.84766 13.25H2C1.58579 13.25 1.25 12.9142 1.25 12.5C1.25 12.0858 1.58579 11.75 2 11.75H6.84766ZM14 11.75C14.4142 11.75 14.75 12.0858 14.75 12.5C14.75 12.9142 14.4142 13.25 14 13.25H12.6523C12.7142 13.0101 12.75 12.7592 12.75 12.5C12.75 12.2408 12.7142 11.9899 12.6523 11.75H14ZM3.09766 7.25C3.03583 7.48994 3 7.74075 3 8C3 8.25925 3.03583 8.51006 3.09766 8.75H2C1.58579 8.75 1.25 8.41421 1.25 8C1.25 7.58579 1.58579 7.25 2 7.25H3.09766ZM14 7.25C14.4142 7.25 14.75 7.58579 14.75 8C14.75 8.41421 14.4142 8.75 14 8.75H8.90234C8.96417 8.51006 9 8.25925 9 8C9 7.74075 8.96417 7.48994 8.90234 7.25H14ZM7.59766 2.75C7.53583 2.98994 7.5 3.24075 7.5 3.5C7.5 3.75925 7.53583 4.01006 7.59766 4.25H2C1.58579 4.25 1.25 3.91421 1.25 3.5C1.25 3.08579 1.58579 2.75 2 2.75H7.59766ZM14 2.75C14.4142 2.75 14.75 3.08579 14.75 3.5C14.75 3.91421 14.4142 4.25 14 4.25H13.4023C13.4642 4.01006 13.5 3.75925 13.5 3.5C13.5 3.24075 13.4642 2.98994 13.4023 2.75H14Z\"\n fill=\"currentColor\"\n />\n <circle cx=\"6\" cy=\"8\" r=\"0.998596\" fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"1.25\" />\n <circle cx=\"10.4999\" cy=\"3.5\" r=\"0.998657\" fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"1.25\" />\n <circle cx=\"9.75015\" cy=\"12.5\" r=\"0.997986\" fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"1.25\" />\n </svg>\n ) : (\n <svg\n ref={folderChevronRef}\n class=\"dialkit-folder-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M6 9.5L12 15.5L18 9.5\" />\n </svg>\n )}\n </div>\n\n <Show when={props.isRoot && props.toolbar && isOpen()}>\n <div class=\"dialkit-panel-toolbar\" onClick={(e) => e.stopPropagation()}>\n {props.toolbar}\n </div>\n </Show>\n </div>\n\n <Show when={props.isRoot ? isOpen() : contentMounted()}>\n <div\n ref={(el) => {\n if (props.isRoot) return;\n sectionContentRef = el;\n if (skipFirstAnim) { skipFirstAnim = false; return; }\n\n sectionAnim?.stop();\n el.style.height = '0px';\n el.style.opacity = '0';\n sectionAnim = animate(\n el,\n { height: 'auto', opacity: 1 },\n {\n type: 'spring',\n visualDuration: 0.35,\n bounce: 0.1,\n onComplete: () => {\n sectionAnim = null;\n },\n }\n );\n }}\n class=\"dialkit-folder-content\"\n style={!props.isRoot ? { 'clip-path': 'inset(0 -20px)' } : undefined}\n >\n <div class=\"dialkit-folder-inner\">{props.children}</div>\n </div>\n </Show>\n </div>\n );\n\n // Root folders render inside the panel container.\n if (props.isRoot) {\n let panelRef!: HTMLDivElement;\n let rootPanelAnim: any = null;\n let rootPanelInitialized = false;\n let lastRootOpen = isOpen();\n\n createEffect(() => {\n if (!panelRef || isOpen()) return;\n const handler = (e: Event) => {\n e.stopPropagation();\n handleToggle();\n };\n panelRef.addEventListener('click', handler);\n onCleanup(() => panelRef.removeEventListener('click', handler));\n });\n\n createEffect(() => {\n if (!panelRef) return;\n\n const open = isOpen();\n const measuredOpenHeight = contentHeight() !== undefined\n ? contentHeight()! + 24\n : panelRef.getBoundingClientRect().height;\n\n const target = {\n width: open ? 280 : 42,\n height: open ? measuredOpenHeight : 42,\n borderRadius: open ? 14 : 21,\n boxShadow: open\n ? '0 8px 32px rgba(0, 0, 0, 0.5)'\n : '0 4px 16px rgba(0, 0, 0, 0.25)',\n };\n\n panelRef.style.cursor = open ? '' : 'pointer';\n panelRef.style.overflow = open ? '' : 'hidden';\n\n if (!rootPanelInitialized) {\n rootPanelInitialized = true;\n panelRef.style.width = `${target.width}px`;\n panelRef.style.height = `${target.height}px`;\n panelRef.style.borderRadius = `${target.borderRadius}px`;\n panelRef.style.boxShadow = target.boxShadow;\n lastRootOpen = open;\n return;\n }\n\n if (open !== lastRootOpen) {\n rootPanelAnim?.stop();\n rootPanelAnim = animate(panelRef, target, {\n type: 'spring',\n visualDuration: 0.15,\n bounce: 0.3,\n onComplete: () => {\n rootPanelAnim = null;\n },\n });\n lastRootOpen = open;\n return;\n }\n\n if (open) {\n panelRef.style.height = `${target.height}px`;\n }\n });\n\n onCleanup(() => {\n rootPanelAnim?.stop();\n panelTapAnim?.stop();\n });\n\n return (\n <div\n ref={panelRef}\n class=\"dialkit-panel-inner\"\n data-collapsed={String(isCollapsed())}\n onPointerDown={() => {\n if (isOpen()) return;\n (document.activeElement as HTMLElement)?.blur?.();\n panelTapAnim?.stop();\n panelTapAnim = animate(panelRef, { scale: 0.9 }, { type: 'spring', visualDuration: 0.15, bounce: 0.3 });\n }}\n onPointerUp={() => {\n if (isOpen()) return;\n panelTapAnim?.stop();\n panelTapAnim = animate(panelRef, { scale: 1 }, { type: 'spring', visualDuration: 0.15, bounce: 0.3 });\n }}\n onPointerCancel={() => {\n if (isOpen()) return;\n panelTapAnim?.stop();\n panelTapAnim = animate(panelRef, { scale: 1 }, { type: 'spring', visualDuration: 0.15, bounce: 0.3 });\n }}\n onPointerLeave={() => {\n if (isOpen()) return;\n panelTapAnim?.stop();\n panelTapAnim = animate(panelRef, { scale: 1 }, { type: 'spring', visualDuration: 0.15, bounce: 0.3 });\n }}\n >\n {folderContent()}\n </div>\n );\n }\n\n return folderContent();\n}\n","import { createSignal, createEffect, onMount, onCleanup } from 'solid-js';\nimport { animate, motionValue } from 'motion';\n\ninterface SliderProps {\n label: string;\n value: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n unit?: string;\n}\n\nconst CLICK_THRESHOLD = 3;\nconst DEAD_ZONE = 32;\nconst MAX_CURSOR_RANGE = 200;\nconst MAX_STRETCH = 8;\n\nfunction decimalsForStep(step: number): number {\n const s = step.toString();\n const dot = s.indexOf('.');\n return dot === -1 ? 0 : s.length - dot - 1;\n}\n\nfunction roundValue(val: number, step: number): number {\n const raw = Math.round(val / step) * step;\n return parseFloat(raw.toFixed(decimalsForStep(step)));\n}\n\nfunction snapToDecile(rawValue: number, min: number, max: number): number {\n const normalized = (rawValue - min) / (max - min);\n const nearest = Math.round(normalized * 10) / 10;\n if (Math.abs(normalized - nearest) <= 0.03125) {\n return min + nearest * (max - min);\n }\n return rawValue;\n}\n\nexport function Slider(props: SliderProps) {\n const min = () => props.min ?? 0;\n const max = () => props.max ?? 1;\n const step = () => props.step ?? 0.01;\n\n let wrapperRef!: HTMLDivElement;\n let trackRef!: HTMLDivElement;\n let fillRef!: HTMLDivElement;\n let handleRef!: HTMLDivElement;\n let labelRef!: HTMLSpanElement;\n let valueSpanRef!: HTMLSpanElement;\n let inputRef!: HTMLInputElement;\n\n const [isInteracting, setIsInteracting] = createSignal(false);\n const [isDragging, setIsDragging] = createSignal(false);\n const [isHovered, setIsHovered] = createSignal(false);\n const [isValueHovered, setIsValueHovered] = createSignal(false);\n const [isValueEditable, setIsValueEditable] = createSignal(false);\n const [showInput, setShowInput] = createSignal(false);\n const [inputValue, setInputValue] = createSignal('');\n\n const fillPercent = motionValue(((props.value - min()) / (max() - min())) * 100);\n const rubberStretchPx = motionValue(0);\n const handleOpacityMv = motionValue(0);\n const handleScaleXMv = motionValue(0.25);\n const handleScaleYMv = motionValue(1);\n\n const applyFillStyles = (pct: number) => {\n if (fillRef) fillRef.style.width = `${pct}%`;\n if (handleRef) handleRef.style.left = `max(5px, calc(${pct}% - 9px))`;\n };\n\n const applyRubberStyles = (stretch: number) => {\n if (!trackRef) return;\n trackRef.style.width = `calc(100% + ${Math.abs(stretch)}px)`;\n trackRef.style.transform = `translateX(${stretch < 0 ? stretch : 0}px)`;\n };\n\n const applyHandleVisualStyles = () => {\n if (!handleRef) return;\n handleRef.style.opacity = String(handleOpacityMv.get());\n handleRef.style.transform = `translateY(-50%) scaleX(${handleScaleXMv.get()}) scaleY(${handleScaleYMv.get()})`;\n };\n\n // Sync fill from props when not interacting\n createEffect(() => {\n if (!isInteracting() && !snapAnim) {\n fillPercent.jump(((props.value - min()) / (max() - min())) * 100);\n }\n });\n\n const percentage = () => ((props.value - min()) / (max() - min())) * 100;\n const isActive = () => isInteracting() || isHovered();\n\n let pointerDownPos: { x: number; y: number } | null = null;\n let isClickFlag = true;\n let wrapperRect: DOMRect | null = null;\n let scaleVal = 1;\n let hoverTimeout: ReturnType<typeof setTimeout> | null = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let snapAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let rubberAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let handleOpacityAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let handleScaleXAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let handleScaleYAnim: any = null;\n\n const positionToValue = (clientX: number) => {\n if (!wrapperRect) return props.value;\n const screenX = clientX - wrapperRect.left;\n const sceneX = screenX / scaleVal;\n const nativeWidth = wrapperRef ? wrapperRef.offsetWidth : wrapperRect.width;\n const percent = Math.max(0, Math.min(1, sceneX / nativeWidth));\n const rawValue = min() + percent * (max() - min());\n return Math.max(min(), Math.min(max(), rawValue));\n };\n\n const percentFromValue = (v: number) => ((v - min()) / (max() - min())) * 100;\n\n const computeRubberStretch = (clientX: number, sign: number) => {\n if (!wrapperRect) return 0;\n const distancePast = sign < 0 ? wrapperRect.left - clientX : clientX - wrapperRect.right;\n const overflow = Math.max(0, distancePast - DEAD_ZONE);\n return sign * MAX_STRETCH * Math.sqrt(Math.min(overflow / MAX_CURSOR_RANGE, 1.0));\n };\n\n const cancelInteraction = () => {\n if (!isInteracting()) return;\n setIsInteracting(false);\n setIsDragging(false);\n rubberStretchPx.jump(0);\n pointerDownPos = null;\n };\n\n const handlePointerDown = (e: PointerEvent) => {\n if (showInput()) return;\n e.preventDefault();\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n pointerDownPos = { x: e.clientX, y: e.clientY };\n isClickFlag = true;\n setIsInteracting(true);\n\n if (wrapperRef) {\n wrapperRect = wrapperRef.getBoundingClientRect();\n scaleVal = wrapperRect.width / wrapperRef.offsetWidth;\n }\n };\n\n const handlePointerMove = (e: PointerEvent) => {\n if (!isInteracting() || !pointerDownPos) return;\n\n const dx = e.clientX - pointerDownPos.x;\n const dy = e.clientY - pointerDownPos.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (isClickFlag && distance > CLICK_THRESHOLD) {\n isClickFlag = false;\n setIsDragging(true);\n }\n\n if (!isClickFlag) {\n if (wrapperRect) {\n if (e.clientX < wrapperRect.left) {\n rubberStretchPx.jump(computeRubberStretch(e.clientX, -1));\n } else if (e.clientX > wrapperRect.right) {\n rubberStretchPx.jump(computeRubberStretch(e.clientX, 1));\n } else {\n rubberStretchPx.jump(0);\n }\n }\n\n const newValue = positionToValue(e.clientX);\n const newPct = percentFromValue(newValue);\n if (snapAnim) { snapAnim.stop(); snapAnim = null; }\n fillPercent.jump(newPct);\n props.onChange(roundValue(newValue, step()));\n }\n };\n\n const handlePointerUp = (e: PointerEvent) => {\n if (!isInteracting()) return;\n\n if (isClickFlag) {\n const rawValue = positionToValue(e.clientX);\n const discreteSteps = (max() - min()) / step();\n const snappedValue = discreteSteps <= 10\n ? Math.max(min(), Math.min(max(), min() + Math.round((rawValue - min()) / step()) * step()))\n : snapToDecile(rawValue, min(), max());\n\n const newPct = percentFromValue(snappedValue);\n\n if (snapAnim) snapAnim.stop();\n snapAnim = animate(fillPercent, newPct, {\n type: 'spring',\n stiffness: 300,\n damping: 25,\n mass: 0.8,\n onComplete: () => {\n snapAnim = null;\n },\n });\n\n props.onChange(roundValue(snappedValue, step()));\n }\n\n if (rubberStretchPx.get() !== 0) {\n if (rubberAnim) rubberAnim.stop();\n rubberAnim = animate(rubberStretchPx, 0, {\n type: 'spring',\n visualDuration: 0.35,\n bounce: 0.15,\n });\n }\n\n setIsInteracting(false);\n setIsDragging(false);\n pointerDownPos = null;\n };\n\n const handlePointerCancel = () => {\n cancelInteraction();\n };\n\n // Handle value hover delay — clear pending timer on each re-run\n createEffect(() => {\n const hovered = isValueHovered();\n const editing = showInput();\n const editable = isValueEditable();\n\n onCleanup(() => {\n if (hoverTimeout) { clearTimeout(hoverTimeout); hoverTimeout = null; }\n });\n\n if (hovered && !editing && !editable) {\n hoverTimeout = setTimeout(() => setIsValueEditable(true), 800);\n } else if (!hovered && !editing) {\n setIsValueEditable(false);\n }\n });\n\n onCleanup(() => {\n if (hoverTimeout) clearTimeout(hoverTimeout);\n snapAnim?.stop();\n rubberAnim?.stop();\n handleOpacityAnim?.stop();\n handleScaleXAnim?.stop();\n handleScaleYAnim?.stop();\n });\n\n onMount(() => {\n const unsubFill = fillPercent.on('change', applyFillStyles);\n const unsubRubber = rubberStretchPx.on('change', applyRubberStyles);\n const unsubHandleOpacity = handleOpacityMv.on('change', applyHandleVisualStyles);\n const unsubHandleScaleX = handleScaleXMv.on('change', applyHandleVisualStyles);\n const unsubHandleScaleY = handleScaleYMv.on('change', applyHandleVisualStyles);\n applyFillStyles(fillPercent.get());\n applyRubberStyles(rubberStretchPx.get());\n applyHandleVisualStyles();\n\n onCleanup(() => {\n unsubFill();\n unsubRubber();\n unsubHandleOpacity();\n unsubHandleScaleX();\n unsubHandleScaleY();\n });\n });\n\n // Focus input when it appears\n createEffect(() => {\n if (showInput() && inputRef) {\n inputRef.focus();\n inputRef.select();\n }\n });\n\n const handleInputSubmit = () => {\n const parsed = parseFloat(inputValue());\n if (!isNaN(parsed)) {\n const clamped = Math.max(min(), Math.min(max(), parsed));\n props.onChange(roundValue(clamped, step()));\n }\n setShowInput(false);\n setIsValueHovered(false);\n setIsValueEditable(false);\n };\n\n const handleValueClick = (e: MouseEvent) => {\n if (isValueEditable()) {\n e.stopPropagation();\n e.preventDefault();\n setShowInput(true);\n setInputValue(props.value.toFixed(decimalsForStep(step())));\n }\n };\n\n const handleInputKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') handleInputSubmit();\n else if (e.key === 'Escape') {\n setShowInput(false);\n setIsValueHovered(false);\n }\n };\n\n const displayValue = () => props.value.toFixed(decimalsForStep(step()));\n\n // Value dodge: fade handle when it overlaps label or value text\n const HANDLE_BUFFER = 8;\n const LABEL_CSS_LEFT = 10;\n const VALUE_CSS_RIGHT = 10;\n\n const leftThreshold = () => {\n const trackWidth = wrapperRef?.offsetWidth;\n if (trackWidth && labelRef) {\n return ((LABEL_CSS_LEFT + labelRef.offsetWidth + HANDLE_BUFFER) / trackWidth) * 100;\n }\n return 30;\n };\n\n const rightThreshold = () => {\n const trackWidth = wrapperRef?.offsetWidth;\n if (trackWidth && valueSpanRef) {\n return ((trackWidth - VALUE_CSS_RIGHT - valueSpanRef.offsetWidth - HANDLE_BUFFER) / trackWidth) * 100;\n }\n return 78;\n };\n\n const valueDodge = () => percentage() < leftThreshold() || percentage() > rightThreshold();\n\n const handleOpacity = () => {\n if (!isActive()) return 0;\n if (valueDodge()) return 0.1;\n if (isDragging()) return 0.9;\n return 0.5;\n };\n\n createEffect(() => {\n const targetOpacity = handleOpacity();\n const targetScaleX = isActive() ? 1 : 0.25;\n const targetScaleY = isActive() && valueDodge() ? 0.75 : 1;\n\n handleOpacityAnim?.stop();\n handleScaleXAnim?.stop();\n handleScaleYAnim?.stop();\n\n handleOpacityAnim = animate(handleOpacityMv, targetOpacity, { duration: 0.15 });\n handleScaleXAnim = animate(handleScaleXMv, targetScaleX, {\n type: 'spring',\n visualDuration: 0.25,\n bounce: 0.15,\n });\n handleScaleYAnim = animate(handleScaleYMv, targetScaleY, {\n type: 'spring',\n visualDuration: 0.2,\n bounce: 0.1,\n });\n });\n\n const fillBackground = () =>\n isActive() ? 'rgba(255, 255, 255, 0.15)' : 'rgba(255, 255, 255, 0.11)';\n\n const discreteSteps = () => (max() - min()) / step();\n\n const hashMarks = () => {\n const ds = discreteSteps();\n if (ds <= 10) {\n return Array.from({ length: ds - 1 }, (_, i) => {\n const pct = ((i + 1) * step()) / (max() - min()) * 100;\n return <div class=\"dialkit-slider-hashmark\" style={{ left: `${pct}%` }} />;\n });\n }\n return Array.from({ length: 9 }, (_, i) => {\n const pct = (i + 1) * 10;\n return <div class=\"dialkit-slider-hashmark\" style={{ left: `${pct}%` }} />;\n });\n };\n\n return (\n <div ref={wrapperRef} class=\"dialkit-slider-wrapper\">\n <div\n ref={trackRef}\n class={`dialkit-slider ${isActive() ? 'dialkit-slider-active' : ''}`}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerCancel}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <div class=\"dialkit-slider-hashmarks\">{hashMarks()}</div>\n\n <div\n ref={fillRef}\n class=\"dialkit-slider-fill\"\n style={{\n background: fillBackground(),\n width: `${fillPercent.get()}%`,\n transition: 'background 0.15s',\n }}\n />\n\n <div\n ref={handleRef}\n class=\"dialkit-slider-handle\"\n style={{\n left: `max(5px, calc(${fillPercent.get()}% - 9px))`,\n transform: 'translateY(-50%) scaleX(0.25) scaleY(1)',\n opacity: 0,\n background: 'rgba(255, 255, 255, 0.9)',\n }}\n />\n\n <span ref={labelRef} class=\"dialkit-slider-label\">{props.label}</span>\n\n {showInput() ? (\n <input\n ref={inputRef}\n type=\"text\"\n class=\"dialkit-slider-input\"\n value={inputValue()}\n onInput={(e) => setInputValue(e.currentTarget.value)}\n onKeyDown={handleInputKeyDown}\n onBlur={handleInputSubmit}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n />\n ) : (\n <span\n ref={valueSpanRef}\n class={`dialkit-slider-value ${isValueEditable() ? 'dialkit-slider-value-editable' : ''}`}\n onMouseEnter={() => setIsValueHovered(true)}\n onMouseLeave={() => setIsValueHovered(false)}\n onClick={handleValueClick}\n onMouseDown={(e) => isValueEditable() && e.stopPropagation()}\n style={{ cursor: isValueEditable() ? 'text' : 'default' }}\n >\n {displayValue()}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import { createSignal, createRenderEffect, onMount, onCleanup, For } from 'solid-js';\nimport { animate } from 'motion';\n\ninterface SegmentedControlOption<T extends string> {\n value: T;\n label: string;\n}\n\ninterface SegmentedControlProps<T extends string> {\n options: [SegmentedControlOption<T>, SegmentedControlOption<T>];\n value: T;\n onChange: (value: T) => void;\n}\n\nexport function SegmentedControl<T extends string>(props: SegmentedControlProps<T>) {\n let containerRef!: HTMLDivElement;\n let pillRef!: HTMLDivElement;\n const buttonRefs = new Map<T, HTMLButtonElement>();\n const [pillReady, setPillReady] = createSignal(false);\n\n let hasAnimated = false;\n let pillAnim: any = null;\n\n const measurePill = () => {\n const button = buttonRefs.get(props.value);\n if (!button || !containerRef) return null;\n const containerRect = containerRef.getBoundingClientRect();\n const buttonRect = button.getBoundingClientRect();\n return {\n left: buttonRect.left - containerRect.left,\n width: buttonRect.width,\n };\n };\n\n const setPillImmediate = (left: number, width: number) => {\n if (!pillRef) return;\n pillRef.style.left = `${left}px`;\n pillRef.style.width = `${width}px`;\n };\n\n const updatePill = (shouldAnimate: boolean) => {\n const next = measurePill();\n if (!next) return;\n\n if (!pillReady()) {\n setPillImmediate(next.left, next.width);\n setPillReady(true);\n return;\n }\n\n if (!shouldAnimate || !hasAnimated) {\n pillAnim?.stop();\n pillAnim = null;\n setPillImmediate(next.left, next.width);\n return;\n }\n\n pillAnim?.stop();\n pillAnim = animate(pillRef, {\n left: next.left,\n width: next.width,\n }, {\n type: 'spring',\n visualDuration: 0.2,\n bounce: 0.15,\n onComplete: () => {\n pillAnim = null;\n },\n });\n };\n\n createRenderEffect(() => {\n const _ = props.value;\n if (!pillReady()) return;\n updatePill(true);\n });\n\n onMount(() => {\n requestAnimationFrame(() => {\n updatePill(false);\n hasAnimated = true;\n });\n\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(() => updatePill(false));\n ro.observe(containerRef);\n\n onCleanup(() => {\n pillAnim?.stop();\n ro.disconnect();\n });\n });\n\n return (\n <div ref={containerRef} class=\"dialkit-segmented\">\n <div\n ref={pillRef}\n class=\"dialkit-segmented-pill\"\n style={{ left: '0px', width: '0px', visibility: pillReady() ? 'visible' : 'hidden' }}\n />\n <For each={props.options}>\n {(option) => (\n <button\n ref={(el) => {\n if (!el) return;\n buttonRefs.set(option.value, el);\n }}\n onClick={() => props.onChange(option.value)}\n class=\"dialkit-segmented-button\"\n data-active={String(props.value === option.value)}\n >\n {option.label}\n </button>\n )}\n </For>\n </div>\n );\n}\n","import { SegmentedControl } from './SegmentedControl';\n\ninterface ToggleProps {\n label: string;\n checked: boolean;\n onChange: (checked: boolean) => void;\n}\n\nexport function Toggle(props: ToggleProps) {\n return (\n <div class=\"dialkit-labeled-control\">\n <span class=\"dialkit-labeled-control-label\">{props.label}</span>\n <SegmentedControl\n options={[\n { value: 'off' as const, label: 'Off' },\n { value: 'on' as const, label: 'On' },\n ]}\n value={props.checked ? 'on' : 'off'}\n onChange={(val) => props.onChange(val === 'on')}\n />\n </div>\n );\n}\n","import { createSignal, onMount, onCleanup } from 'solid-js';\nimport { DialStore } from '../../store/DialStore';\nimport type { SpringConfig } from '../../store/DialStore';\nimport { Folder } from './Folder';\nimport { Slider } from './Slider';\nimport { SegmentedControl } from './SegmentedControl';\nimport { SpringVisualization } from './SpringVisualization';\n\ninterface SpringControlProps {\n panelId: string;\n path: string;\n label: string;\n spring: SpringConfig;\n onChange: (spring: SpringConfig) => void;\n}\n\nexport function SpringControl(props: SpringControlProps) {\n const [mode, setMode] = createSignal<'simple' | 'advanced'>(\n DialStore.getSpringMode(props.panelId, props.path)\n );\n\n // Subscribe to store changes for mode\n onMount(() => {\n const unsub = DialStore.subscribe(props.panelId, () => {\n setMode(DialStore.getSpringMode(props.panelId, props.path));\n });\n onCleanup(unsub);\n });\n\n const isSimpleMode = () => mode() === 'simple';\n\n const handleModeChange = (newMode: 'simple' | 'advanced') => {\n DialStore.updateSpringMode(props.panelId, props.path, newMode);\n\n if (newMode === 'simple') {\n const { stiffness, damping, mass, ...rest } = props.spring;\n props.onChange({\n ...rest,\n type: 'spring',\n visualDuration: props.spring.visualDuration ?? 0.3,\n bounce: props.spring.bounce ?? 0.2,\n });\n } else {\n const { visualDuration, bounce, ...rest } = props.spring;\n props.onChange({\n ...rest,\n type: 'spring',\n stiffness: props.spring.stiffness ?? 200,\n damping: props.spring.damping ?? 25,\n mass: props.spring.mass ?? 1,\n });\n }\n };\n\n const handleUpdate = (key: keyof SpringConfig, value: number) => {\n if (isSimpleMode()) {\n const { stiffness, damping, mass, ...rest } = props.spring;\n props.onChange({ ...rest, [key]: value });\n } else {\n const { visualDuration, bounce, ...rest } = props.spring;\n props.onChange({ ...rest, [key]: value });\n }\n };\n\n return (\n <Folder title={props.label} defaultOpen={true}>\n <div style={{ display: 'flex', 'flex-direction': 'column', gap: '6px' }}>\n <SpringVisualization spring={props.spring} isSimpleMode={isSimpleMode()} />\n\n <div class=\"dialkit-labeled-control\">\n <span class=\"dialkit-labeled-control-label\">Type</span>\n <SegmentedControl\n options={[\n { value: 'simple' as const, label: 'Time' },\n { value: 'advanced' as const, label: 'Physics' },\n ]}\n value={mode()}\n onChange={handleModeChange}\n />\n </div>\n\n {isSimpleMode() ? (\n <>\n <Slider\n label=\"Duration\"\n value={props.spring.visualDuration ?? 0.3}\n onChange={(v) => handleUpdate('visualDuration', v)}\n min={0.1}\n max={1}\n step={0.05}\n unit=\"s\"\n />\n <Slider\n label=\"Bounce\"\n value={props.spring.bounce ?? 0.2}\n onChange={(v) => handleUpdate('bounce', v)}\n min={0}\n max={1}\n step={0.05}\n />\n </>\n ) : (\n <>\n <Slider\n label=\"Stiffness\"\n value={props.spring.stiffness ?? 400}\n onChange={(v) => handleUpdate('stiffness', v)}\n min={1}\n max={1000}\n step={10}\n />\n <Slider\n label=\"Damping\"\n value={props.spring.damping ?? 17}\n onChange={(v) => handleUpdate('damping', v)}\n min={1}\n max={100}\n step={1}\n />\n <Slider\n label=\"Mass\"\n value={props.spring.mass ?? 1}\n onChange={(v) => handleUpdate('mass', v)}\n min={0.1}\n max={10}\n step={0.1}\n />\n </>\n )}\n </div>\n </Folder>\n );\n}\n","import type { SpringConfig } from '../../store/DialStore';\n\ninterface SpringVisualizationProps {\n spring: SpringConfig;\n isSimpleMode: boolean;\n}\n\nfunction generateSpringCurve(\n stiffness: number,\n damping: number,\n mass: number,\n duration: number\n): [number, number][] {\n const points: [number, number][] = [];\n const steps = 100;\n const dt = duration / steps;\n\n let position = 0;\n let velocity = 0;\n const target = 1;\n\n for (let i = 0; i <= steps; i++) {\n const time = i * dt;\n points.push([time, position]);\n\n const springForce = -stiffness * (position - target);\n const dampingForce = -damping * velocity;\n const acceleration = (springForce + dampingForce) / mass;\n\n velocity += acceleration * dt;\n position += velocity * dt;\n }\n\n return points;\n}\n\nexport function SpringVisualization(props: SpringVisualizationProps) {\n const width = 256;\n const height = 140;\n\n const params = () => {\n let stiffness: number;\n let damping: number;\n let mass: number;\n\n if (props.isSimpleMode) {\n const visualDuration = props.spring.visualDuration ?? 0.3;\n const bounce = props.spring.bounce ?? 0.2;\n mass = 1;\n stiffness = Math.pow((2 * Math.PI) / visualDuration, 2);\n const dampingRatio = 1 - bounce;\n damping = 2 * dampingRatio * Math.sqrt(stiffness * mass);\n } else {\n stiffness = props.spring.stiffness ?? 400;\n damping = props.spring.damping ?? 17;\n mass = props.spring.mass ?? 1;\n }\n\n const duration = 2;\n const points = generateSpringCurve(stiffness, damping, mass, duration);\n const values = points.map(([, value]) => value);\n const minValue = Math.min(...values);\n const maxValue = Math.max(...values);\n const valueRange = maxValue - minValue;\n\n const pathData = points\n .map(([time, value], i) => {\n const x = (time / duration) * width;\n const normalizedValue = (value - minValue) / (valueRange || 1);\n const y = height - (normalizedValue * height * 0.6 + height * 0.2);\n return `${i === 0 ? 'M' : 'L'} ${x} ${y}`;\n })\n .join(' ');\n\n return pathData;\n };\n\n const gridLines = () => {\n const lines = [];\n for (let i = 1; i < 4; i++) {\n const x = (width / 4) * i;\n const y = (height / 4) * i;\n lines.push(\n <line x1={x} y1={0} x2={x} y2={height} stroke=\"rgba(255, 255, 255, 0.08)\" stroke-width=\"1\" />,\n <line x1={0} y1={y} x2={width} y2={y} stroke=\"rgba(255, 255, 255, 0.08)\" stroke-width=\"1\" />\n );\n }\n return lines;\n };\n\n return (\n <svg viewBox={`0 0 ${width} ${height}`} class=\"dialkit-spring-viz\">\n {gridLines()}\n <line\n x1={0}\n y1={height / 2}\n x2={width}\n y2={height / 2}\n stroke=\"rgba(255, 255, 255, 0.15)\"\n stroke-width=\"1\"\n stroke-dasharray=\"4,4\"\n />\n <path\n d={params()}\n fill=\"none\"\n stroke=\"rgba(255, 255, 255, 0.6)\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n );\n}\n","import { createUniqueId } from 'solid-js';\n\ninterface TextControlProps {\n label: string;\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n}\n\nexport function TextControl(props: TextControlProps) {\n const inputId = createUniqueId();\n\n return (\n <div class=\"dialkit-text-control\">\n <label class=\"dialkit-text-label\" for={inputId}>{props.label}</label>\n <input\n id={inputId}\n type=\"text\"\n class=\"dialkit-text-input\"\n value={props.value}\n onInput={(e) => props.onChange(e.currentTarget.value)}\n placeholder={props.placeholder}\n />\n </div>\n );\n}\n","import { createSignal, createEffect, onMount, onCleanup, Show, For } from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { animate } from 'motion';\n\ntype SelectOption = string | { value: string; label: string };\n\ninterface SelectControlProps {\n label: string;\n value: string;\n options: SelectOption[];\n onChange: (value: string) => void;\n}\n\nfunction toTitleCase(s: string): string {\n return s.replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\nfunction normalizeOptions(options: SelectOption[]): { value: string; label: string }[] {\n return options.map((opt) =>\n typeof opt === 'string' ? { value: opt, label: toTitleCase(opt) } : opt\n );\n}\n\nexport function SelectControl(props: SelectControlProps) {\n const [isOpen, setIsOpen] = createSignal(false);\n const [mounted, setMounted] = createSignal(false);\n const [pos, setPos] = createSignal<{ top: number; left: number; width: number; above: boolean } | null>(null);\n const [portalTarget, setPortalTarget] = createSignal<HTMLElement | null>(null);\n let triggerRef!: HTMLButtonElement;\n let dropdownRef: HTMLDivElement | undefined;\n let chevronRef!: SVGSVGElement;\n let closeAnim: any = null;\n let chevronAnim: any = null;\n\n const normalized = () => normalizeOptions(props.options);\n const selectedOption = () => normalized().find((o) => o.value === props.value);\n\n onMount(() => {\n const root = triggerRef?.closest('.dialkit-root') as HTMLElement | null;\n setPortalTarget(root ?? document.body);\n\n if (chevronRef) {\n chevronRef.style.transform = `rotate(${isOpen() ? 180 : 0}deg)`;\n }\n\n onCleanup(() => {\n closeAnim?.stop();\n chevronAnim?.stop();\n });\n });\n\n createEffect(() => {\n if (!chevronRef) return;\n const open = isOpen();\n chevronAnim?.stop();\n chevronAnim = animate(\n chevronRef,\n { rotate: open ? 180 : 0 },\n { type: 'spring', visualDuration: 0.2, bounce: 0.15 }\n );\n });\n\n const updatePos = () => {\n if (!triggerRef) return;\n const rect = triggerRef.getBoundingClientRect();\n const dropdownHeight = 8 + normalized().length * 36;\n const spaceBelow = window.innerHeight - rect.bottom - 4;\n const above = spaceBelow < dropdownHeight && rect.top > spaceBelow;\n setPos({\n top: above ? rect.top - 4 : rect.bottom + 4,\n left: rect.left,\n width: rect.width,\n above,\n });\n };\n\n const openDropdown = () => {\n closeAnim?.stop();\n closeAnim = null;\n updatePos();\n setMounted(true);\n setIsOpen(true);\n };\n\n const closeDropdown = () => {\n setIsOpen(false);\n if (!dropdownRef) { setMounted(false); return; }\n const above = pos()?.above ?? false;\n closeAnim?.stop();\n closeAnim = animate(\n dropdownRef,\n { opacity: 0, y: above ? 8 : -8, scale: 0.95 },\n { type: 'spring', visualDuration: 0.15, bounce: 0, onComplete: () => { setMounted(false); closeAnim = null; } }\n );\n };\n\n // Close on click outside\n createEffect(() => {\n if (!isOpen()) return;\n const handleViewportChange = () => updatePos();\n\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n triggerRef && !triggerRef.contains(target) &&\n dropdownRef && !dropdownRef.contains(target)\n ) {\n closeDropdown();\n }\n };\n\n updatePos();\n document.addEventListener('mousedown', handleClick);\n window.addEventListener('resize', handleViewportChange);\n window.addEventListener('scroll', handleViewportChange, true);\n onCleanup(() => {\n document.removeEventListener('mousedown', handleClick);\n window.removeEventListener('resize', handleViewportChange);\n window.removeEventListener('scroll', handleViewportChange, true);\n });\n });\n\n const dropdownStyle = () => {\n const p = pos();\n if (!p) return {};\n return {\n position: 'fixed' as const,\n left: `${p.left}px`,\n width: `${p.width}px`,\n ...(p.above\n ? { bottom: `${window.innerHeight - p.top}px`, 'transform-origin': 'bottom' }\n : { top: `${p.top}px`, 'transform-origin': 'top' }),\n };\n };\n\n return (\n <div class=\"dialkit-select-row\">\n <button\n ref={triggerRef}\n class=\"dialkit-select-trigger\"\n onClick={() => isOpen() ? closeDropdown() : openDropdown()}\n data-open={String(isOpen())}\n >\n <span class=\"dialkit-select-label\">{props.label}</span>\n <div class=\"dialkit-select-right\">\n <span class=\"dialkit-select-value\">{selectedOption()?.label ?? props.value}</span>\n <svg\n ref={chevronRef}\n class=\"dialkit-select-chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M6 9.5L12 15.5L18 9.5\" />\n </svg>\n </div>\n </button>\n\n <Show when={!!portalTarget()}>\n <Portal mount={portalTarget()!}>\n <Show when={mounted() && pos()}>\n <div\n ref={(el) => {\n dropdownRef = el;\n const above = pos()?.above ?? false;\n animate(\n el,\n { opacity: [0, 1], y: [above ? 8 : -8, 0], scale: [0.95, 1] },\n { type: 'spring', visualDuration: 0.15, bounce: 0 }\n );\n }}\n class=\"dialkit-select-dropdown\"\n style={dropdownStyle()}\n >\n <For each={normalized()}>\n {(option) => (\n <button\n class=\"dialkit-select-option\"\n data-selected={String(option.value === props.value)}\n onClick={() => {\n props.onChange(option.value);\n closeDropdown();\n }}\n >\n {option.label}\n </button>\n )}\n </For>\n </div>\n </Show>\n </Portal>\n </Show>\n </div>\n );\n}\n","import { createSignal, createEffect, createUniqueId, Show } from 'solid-js';\n\ninterface ColorControlProps {\n label: string;\n value: string;\n onChange: (value: string) => void;\n}\n\nconst HEX_COLOR_REGEX = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/;\n\nfunction expandShorthandHex(hex: string): string {\n if (hex.length !== 4) return hex;\n return `#${hex[1]}${hex[1]}${hex[2]}${hex[2]}${hex[3]}${hex[3]}`;\n}\n\nexport function ColorControl(props: ColorControlProps) {\n const [isEditing, setIsEditing] = createSignal(false);\n const [editValue, setEditValue] = createSignal(props.value);\n const textInputId = createUniqueId();\n let colorInputRef!: HTMLInputElement;\n\n // Sync editValue when value changes externally\n createEffect(() => {\n if (!isEditing()) {\n setEditValue(props.value);\n }\n });\n\n const handleTextSubmit = () => {\n setIsEditing(false);\n if (HEX_COLOR_REGEX.test(editValue())) {\n props.onChange(editValue());\n } else {\n setEditValue(props.value);\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') handleTextSubmit();\n else if (e.key === 'Escape') {\n setIsEditing(false);\n setEditValue(props.value);\n }\n };\n\n return (\n <div class=\"dialkit-color-control\">\n <label class=\"dialkit-color-label\" for={textInputId}>{props.label}</label>\n <div class=\"dialkit-color-inputs\">\n <Show\n when={isEditing()}\n fallback={\n <span class=\"dialkit-color-hex\" onClick={() => setIsEditing(true)}>\n {(props.value ?? '').toUpperCase()}\n </span>\n }\n >\n <input\n id={textInputId}\n type=\"text\"\n class=\"dialkit-color-hex-input\"\n value={editValue()}\n onInput={(e) => setEditValue(e.currentTarget.value)}\n onBlur={handleTextSubmit}\n onKeyDown={handleKeyDown}\n autofocus\n />\n </Show>\n <button\n class=\"dialkit-color-swatch\"\n style={{ 'background-color': props.value }}\n onClick={() => colorInputRef?.click()}\n title=\"Pick color\"\n aria-label={`Pick color for ${props.label}`}\n />\n <input\n ref={colorInputRef}\n type=\"color\"\n class=\"dialkit-color-picker-native\"\n aria-label={`${props.label} color picker`}\n value={props.value.length === 4 ? expandShorthandHex(props.value) : props.value.slice(0, 7)}\n onInput={(e) => props.onChange(e.currentTarget.value)}\n />\n </div>\n </div>\n );\n}\n","import { createSignal, createEffect, onMount, onCleanup, Show, For } from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { animate } from 'motion';\nimport { DialStore } from '../../store/DialStore';\nimport type { Preset } from '../../store/DialStore';\n\ninterface PresetManagerProps {\n panelId: string;\n presets: Preset[];\n activePresetId: string | null;\n onAdd: () => void;\n}\n\nexport function PresetManager(props: PresetManagerProps) {\n const [isOpen, setIsOpen] = createSignal(false);\n const [mounted, setMounted] = createSignal(false);\n const [pos, setPos] = createSignal({ top: 0, left: 0, width: 0 });\n const [portalTarget, setPortalTarget] = createSignal<HTMLElement | null>(null);\n let triggerRef!: HTMLButtonElement;\n let dropdownRef: HTMLDivElement | undefined;\n let chevronRef!: SVGSVGElement;\n let closeAnim: any = null;\n let chevronAnim: any = null;\n\n const hasPresets = () => props.presets.length > 0;\n const activePreset = () => props.presets.find((p) => p.id === props.activePresetId);\n\n onMount(() => {\n const root = triggerRef?.closest('.dialkit-root') as HTMLElement | null;\n setPortalTarget(root ?? document.body);\n\n if (chevronRef) {\n chevronRef.style.transform = `rotate(${isOpen() ? 180 : 0}deg)`;\n chevronRef.style.opacity = String(hasPresets() ? 0.6 : 0.25);\n }\n\n onCleanup(() => {\n closeAnim?.stop();\n chevronAnim?.stop();\n });\n });\n\n createEffect(() => {\n if (!chevronRef) return;\n const open = isOpen();\n const has = hasPresets();\n chevronAnim?.stop();\n chevronAnim = animate(\n chevronRef,\n { rotate: open ? 180 : 0, opacity: has ? 0.6 : 0.25 },\n { type: 'spring', visualDuration: 0.2, bounce: 0.15 }\n );\n });\n\n const updatePos = () => {\n const rect = triggerRef?.getBoundingClientRect();\n if (!rect) return;\n setPos({ top: rect.bottom + 4, left: rect.left, width: rect.width });\n };\n\n const openDropdown = () => {\n if (!hasPresets()) return;\n updatePos();\n closeAnim?.stop();\n closeAnim = null;\n setMounted(true);\n setIsOpen(true);\n };\n\n const closeDropdown = () => {\n setIsOpen(false);\n if (!dropdownRef) { setMounted(false); return; }\n closeAnim?.stop();\n closeAnim = animate(\n dropdownRef,\n { opacity: 0, y: 4, scale: 0.97 },\n { type: 'spring', visualDuration: 0.15, bounce: 0, onComplete: () => { setMounted(false); closeAnim = null; } }\n );\n };\n\n const toggle = () => { if (isOpen()) closeDropdown(); else openDropdown(); };\n\n // Close on click outside\n createEffect(() => {\n if (!isOpen()) return;\n const handleViewportChange = () => updatePos();\n const handler = (e: MouseEvent) => {\n const target = e.target as Node;\n if (triggerRef?.contains(target) || dropdownRef?.contains(target)) return;\n closeDropdown();\n };\n updatePos();\n document.addEventListener('mousedown', handler);\n window.addEventListener('resize', handleViewportChange);\n window.addEventListener('scroll', handleViewportChange, true);\n onCleanup(() => {\n document.removeEventListener('mousedown', handler);\n window.removeEventListener('resize', handleViewportChange);\n window.removeEventListener('scroll', handleViewportChange, true);\n });\n });\n\n const handleSelect = (presetId: string | null) => {\n if (presetId) DialStore.loadPreset(props.panelId, presetId);\n else DialStore.clearActivePreset(props.panelId);\n closeDropdown();\n };\n\n const handleDelete = (e: MouseEvent, presetId: string) => {\n e.stopPropagation();\n DialStore.deletePreset(props.panelId, presetId);\n };\n\n return (\n <div class=\"dialkit-preset-manager\">\n <button\n ref={triggerRef}\n class=\"dialkit-preset-trigger\"\n onClick={toggle}\n data-open={String(isOpen())}\n data-has-preset={String(!!activePreset())}\n data-disabled={String(!hasPresets())}\n >\n <span class=\"dialkit-preset-label\">\n {activePreset() ? activePreset()!.name : 'Version 1'}\n </span>\n <svg\n ref={chevronRef}\n class=\"dialkit-select-chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M6 9.5L12 15.5L18 9.5\" />\n </svg>\n </button>\n\n <Show when={!!portalTarget()}>\n <Portal mount={portalTarget()!}>\n <Show when={mounted()}>\n <div\n ref={(el) => {\n dropdownRef = el;\n animate(\n el,\n { opacity: [0, 1], y: [4, 0], scale: [0.97, 1] },\n { type: 'spring', visualDuration: 0.15, bounce: 0 }\n );\n }}\n class=\"dialkit-root dialkit-preset-dropdown\"\n style={{\n position: 'fixed',\n top: `${pos().top}px`,\n left: `${pos().left}px`,\n 'min-width': `${pos().width}px`,\n }}\n >\n <div\n class=\"dialkit-preset-item\"\n data-active={String(!props.activePresetId)}\n onClick={() => handleSelect(null)}\n >\n <span class=\"dialkit-preset-name\">Version 1</span>\n </div>\n\n <For each={props.presets}>\n {(preset) => (\n <div\n class=\"dialkit-preset-item\"\n data-active={String(preset.id === props.activePresetId)}\n onClick={() => handleSelect(preset.id)}\n >\n <span class=\"dialkit-preset-name\">{preset.name}</span>\n <button\n class=\"dialkit-preset-delete\"\n onClick={(e) => handleDelete(e, preset.id)}\n title=\"Delete preset\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M5 6.5L5.80734 18.2064C5.91582 19.7794 7.22348 21 8.80023 21H15.1998C16.7765 21 18.0842 19.7794 18.1927 18.2064L19 6.5\" />\n <path d=\"M10 11V16\" />\n <path d=\"M14 11V16\" />\n <path d=\"M3.5 6H20.5\" />\n <path d=\"M8.07092 5.74621C8.42348 3.89745 10.0485 2.5 12 2.5C13.9515 2.5 15.5765 3.89745 15.9291 5.74621\" />\n </svg>\n </button>\n </div>\n )}\n </For>\n </div>\n </Show>\n </Portal>\n </Show>\n </div>\n );\n}\n","import { For } from 'solid-js';\n\ninterface ButtonGroupProps {\n buttons: Array<{\n label: string;\n onClick: () => void;\n }>;\n}\n\nexport function ButtonGroup(props: ButtonGroupProps) {\n return (\n <div class=\"dialkit-button-group\">\n <For each={props.buttons}>\n {(button) => (\n <button class=\"dialkit-button\" onClick={button.onClick}>\n {button.label}\n </button>\n )}\n </For>\n </div>\n );\n}\n"],"mappings":"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","names":["createSignal","onMount","onCleanup","Show","For","Portal","createSignal","createEffect","onMount","onCleanup","For","animate","createSignal","createEffect","onCleanup","Show","animate","Folder","props","isOpen","setIsOpen","defaultOpen","isCollapsed","setIsCollapsed","contentHeight","setContentHeight","undefined","contentMounted","setContentMounted","skipFirstAnim","sectionContentRef","sectionAnim","folderChevronRef","chevronAnim","chevronInitialized","panelTapAnim","contentRef","isRoot","el","ro","ResizeObserver","h","offsetHeight","prev","observe","disconnect","open","stop","style","transform","rotate","type","visualDuration","bounce","handleToggle","next","height","opacity","onComplete","currentHeight","getBoundingClientRect","onOpenChange","folderContent","_el$","_tmpl$3","_el$2","firstChild","_el$3","_$use","$$click","_$insert","_c$","_$memo","_$createComponent","when","children","_el$7","_tmpl$4","_el$8","title","_el$9","_tmpl$5","_el$0","_c$2","_tmpl$6","_el$10","_tmpl$7","_ref$","toolbar","_el$4","_tmpl$","e","stopPropagation","_el$5","_tmpl$2","_el$6","_$effect","_$p","_$style","_p$","_v$","_v$2","_$className","t","panelRef","rootPanelAnim","rootPanelInitialized","lastRootOpen","handler","addEventListener","removeEventListener","measuredOpenHeight","target","width","borderRadius","boxShadow","cursor","overflow","_el$11","_tmpl$8","scale","$$pointerup","$$pointerdown","document","activeElement","blur","_ref$2","_$setAttribute","String","_$delegateEvents","createSignal","createEffect","onMount","onCleanup","animate","motionValue","CLICK_THRESHOLD","DEAD_ZONE","MAX_CURSOR_RANGE","MAX_STRETCH","decimalsForStep","step","s","toString","dot","indexOf","length","roundValue","val","raw","Math","round","parseFloat","toFixed","snapToDecile","rawValue","min","max","normalized","nearest","abs","Slider","props","wrapperRef","trackRef","fillRef","handleRef","labelRef","valueSpanRef","inputRef","isInteracting","setIsInteracting","isDragging","setIsDragging","isHovered","setIsHovered","isValueHovered","setIsValueHovered","isValueEditable","setIsValueEditable","showInput","setShowInput","inputValue","setInputValue","fillPercent","value","rubberStretchPx","handleOpacityMv","handleScaleXMv","handleScaleYMv","applyFillStyles","pct","style","width","left","applyRubberStyles","stretch","transform","applyHandleVisualStyles","opacity","String","get","snapAnim","jump","percentage","isActive","pointerDownPos","isClickFlag","wrapperRect","scaleVal","hoverTimeout","rubberAnim","handleOpacityAnim","handleScaleXAnim","handleScaleYAnim","positionToValue","clientX","screenX","sceneX","nativeWidth","offsetWidth","percent","percentFromValue","v","computeRubberStretch","sign","distancePast","right","overflow","sqrt","cancelInteraction","handlePointerDown","e","preventDefault","currentTarget","setPointerCapture","pointerId","x","y","clientY","getBoundingClientRect","handlePointerMove","dx","dy","distance","newValue","newPct","stop","onChange","handlePointerUp","discreteSteps","snappedValue","type","stiffness","damping","mass","onComplete","visualDuration","bounce","handlePointerCancel","hovered","editing","editable","clearTimeout","setTimeout","unsubFill","on","unsubRubber","unsubHandleOpacity","unsubHandleScaleX","unsubHandleScaleY","focus","select","handleInputSubmit","parsed","isNaN","clamped","handleValueClick","stopPropagation","handleInputKeyDown","key","displayValue","HANDLE_BUFFER","LABEL_CSS_LEFT","VALUE_CSS_RIGHT","leftThreshold","trackWidth","rightThreshold","valueDodge","handleOpacity","targetOpacity","targetScaleX","targetScaleY","duration","fillBackground","hashMarks","ds","Array","from","_","i","_el$","_tmpl$","_$setStyleProperty","_el$2","_el$3","_tmpl$2","_el$4","firstChild","_el$5","_el$6","nextSibling","_el$7","_el$8","_ref$","_$use","addEventListener","$$pointerup","$$pointermove","$$pointerdown","_ref$2","_$insert","_ref$3","_ref$4","_ref$5","label","_c$","_$memo","_el$9","_tmpl$3","$$mousedown","$$click","$$keydown","$$input","_ref$6","_$effect","_el$0","_tmpl$4","_ref$7","_p$","_v$5","_v$6","_$className","t","undefined","_v$","_v$2","_v$3","_v$4","a","o","_$delegateEvents","createSignal","createRenderEffect","onMount","onCleanup","For","animate","SegmentedControl","props","containerRef","pillRef","buttonRefs","Map","pillReady","setPillReady","hasAnimated","pillAnim","measurePill","button","get","value","containerRect","getBoundingClientRect","buttonRect","left","width","setPillImmediate","style","updatePill","shouldAnimate","next","stop","type","visualDuration","bounce","onComplete","_","requestAnimationFrame","ResizeObserver","ro","observe","disconnect","_el$","_tmpl$","_el$2","firstChild","_ref$","_$use","_ref$2","_$insert","_$createComponent","each","options","children","option","_el$3","_tmpl$2","$$click","onChange","el","set","label","_$effect","_$setAttribute","String","_$p","_$setStyleProperty","_$delegateEvents","Toggle","props","_el$","_tmpl$","_el$2","firstChild","_$insert","label","_$createComponent","SegmentedControl","options","value","checked","onChange","val","createSignal","onMount","onCleanup","generateSpringCurve","stiffness","damping","mass","duration","points","steps","dt","position","velocity","target","i","time","push","springForce","dampingForce","acceleration","SpringVisualization","props","width","height","params","isSimpleMode","visualDuration","spring","bounce","Math","pow","PI","dampingRatio","sqrt","values","map","value","minValue","min","maxValue","max","valueRange","pathData","x","normalizedValue","y","join","gridLines","lines","_el$","_tmpl$","_$setAttribute","_el$2","_tmpl$2","_el$3","_tmpl$3","_el$4","firstChild","_el$5","nextSibling","_$insert","_$effect","SpringControl","props","mode","setMode","createSignal","DialStore","getSpringMode","panelId","path","onMount","unsub","subscribe","onCleanup","isSimpleMode","handleModeChange","newMode","updateSpringMode","stiffness","damping","mass","rest","spring","onChange","type","visualDuration","bounce","handleUpdate","key","value","_$createComponent","Folder","title","label","defaultOpen","children","_el$","_tmpl$","_el$2","firstChild","_el$3","_$insert","SpringVisualization","SegmentedControl","options","_c$","_$memo","Slider","v","min","max","step","unit","createUniqueId","TextControl","props","inputId","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_$setAttribute","_$insert","label","$$input","e","onChange","currentTarget","value","_$effect","placeholder","_$delegateEvents","createSignal","createEffect","onMount","onCleanup","Show","For","Portal","animate","toTitleCase","s","replace","c","toUpperCase","normalizeOptions","options","map","opt","value","label","SelectControl","props","isOpen","setIsOpen","mounted","setMounted","pos","setPos","portalTarget","setPortalTarget","triggerRef","dropdownRef","chevronRef","closeAnim","chevronAnim","normalized","selectedOption","find","o","root","closest","document","body","style","transform","stop","open","rotate","type","visualDuration","bounce","updatePos","rect","getBoundingClientRect","dropdownHeight","length","spaceBelow","window","innerHeight","bottom","above","top","left","width","openDropdown","closeDropdown","opacity","y","scale","onComplete","handleViewportChange","handleClick","e","target","contains","addEventListener","removeEventListener","dropdownStyle","p","position","_el$","_tmpl$2","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","$$click","_ref$","_$use","_$insert","_ref$2","_$createComponent","when","children","mount","_$memo","_el$7","_tmpl$","el","each","option","_el$8","_tmpl$3","onChange","_$effect","_$setAttribute","String","_$p","_$style","_$delegateEvents","createSignal","createEffect","createUniqueId","Show","HEX_COLOR_REGEX","expandShorthandHex","hex","length","ColorControl","props","isEditing","setIsEditing","editValue","setEditValue","value","textInputId","colorInputRef","handleTextSubmit","test","onChange","handleKeyDown","e","key","_el$","_tmpl$2","_el$2","firstChild","_el$3","nextSibling","_el$5","_el$6","_$setAttribute","_$insert","label","_$createComponent","when","fallback","_el$7","_tmpl$3","$$click","toUpperCase","children","_el$4","_tmpl$","$$keydown","addEventListener","$$input","currentTarget","_$effect","click","_ref$","_$use","_p$","_v$","_v$2","_v$3","_$setStyleProperty","t","a","undefined","slice","_$delegateEvents","createSignal","createEffect","onMount","onCleanup","Show","For","Portal","animate","PresetManager","props","isOpen","setIsOpen","createSignal","mounted","setMounted","pos","setPos","top","left","width","portalTarget","setPortalTarget","triggerRef","dropdownRef","chevronRef","closeAnim","chevronAnim","hasPresets","presets","length","activePreset","find","p","id","activePresetId","onMount","root","closest","document","body","style","transform","opacity","String","onCleanup","stop","createEffect","open","has","animate","rotate","type","visualDuration","bounce","updatePos","rect","getBoundingClientRect","bottom","openDropdown","closeDropdown","y","scale","onComplete","toggle","handleViewportChange","handler","e","target","contains","addEventListener","window","removeEventListener","handleSelect","presetId","DialStore","loadPreset","panelId","clearActivePreset","handleDelete","stopPropagation","deletePreset","_el$","_tmpl$2","_el$2","firstChild","_el$3","_el$4","nextSibling","$$click","_ref$","_$use","_$insert","_c$","_$memo","name","_ref$2","_$createComponent","Show","when","children","Portal","mount","_el$5","_tmpl$","_el$6","el","For","each","preset","_el$7","_tmpl$3","_el$8","_el$9","_$effect","_$setAttribute","_p$","_v$","_v$2","_v$3","_v$4","_$setStyleProperty","t","a","o","undefined","_v$5","_v$6","_v$7","_$delegateEvents","Panel","props","copied","setCopied","createSignal","isPanelOpen","setIsPanelOpen","defaultOpen","values","setValues","DialStore","getValues","panel","id","presets","setPresets","getPresets","activePresetId","setActivePresetId","getActivePresetId","addButtonRef","copyButtonRef","copyClipboardIconRef","copyCheckIconRef","addTapAnim","copyTapAnim","copyClipboardAnim","copyCheckAnim","didInitCopyIcons","tapTransition","type","visualDuration","bounce","onMount","unsub","subscribe","style","transformOrigin","opacity","transform","filter","onCleanup","handleAddPreset","nextNum","length","savePreset","handleCopy","jsonStr","JSON","stringify","instruction","name","navigator","clipboard","writeText","setTimeout","createEffect","isCopied","stop","transition","animate","scale","handleAddTapStart","handleAddTapEnd","handleCopyTapStart","handleCopyTapEnd","renderControl","control","value","path","_$createComponent","Slider","label","onChange","v","updateValue","min","max","step","Toggle","checked","SpringControl","panelId","spring","Folder","title","children","For","each","child","_$memo","TextControl","placeholder","SelectControl","options","ColorControl","renderControls","controls","_el$","_tmpl$","$$click","triggerAction","_$insert","toolbar","_el$2","_tmpl$2","addEventListener","$$pointerup","$$pointerdown","_ref$","_$use","PresetManager","onAdd","_el$3","_tmpl$3","_el$4","firstChild","_el$5","_el$6","nextSibling","_ref$2","_ref$3","_ref$4","_el$7","_tmpl$4","isRoot","onOpenChange","_$delegateEvents","DialRoot","props","panels","setPanels","createSignal","mounted","setMounted","onMount","DialStore","getPanels","unsub","subscribeGlobal","onCleanup","_$createComponent","Show","when","_$memo","window","length","children","Portal","mount","document","body","_el$","_tmpl$","_el$2","firstChild","_$insert","For","each","panel","Panel","defaultOpen","_$effect","_$setAttribute","position","For","ButtonGroup","props","_el$","_tmpl$","_$insert","_$createComponent","each","buttons","children","button","_el$2","_tmpl$2","_$addEventListener","onClick","label","_$delegateEvents"]}
1
+ {"version":3,"sources":["../../src/solid/createDialKit.ts","../../src/store/DialStore.ts","../../src/solid/components/DialRoot.tsx","../../src/solid/components/Panel.tsx","../../src/solid/components/Folder.tsx","../../src/solid/components/Slider.tsx","../../src/solid/components/SegmentedControl.tsx","../../src/solid/components/Toggle.tsx","../../src/solid/components/SpringControl.tsx","../../src/solid/components/SpringVisualization.tsx","../../src/solid/components/TextControl.tsx","../../src/solid/components/SelectControl.tsx","../../src/solid/components/ColorControl.tsx","../../src/solid/components/PresetManager.tsx","../../src/solid/components/ButtonGroup.tsx"],"sourcesContent":["import { createSignal, createMemo, onMount, onCleanup, createUniqueId, type Accessor } from 'solid-js';\nimport { DialStore } from '../store/DialStore';\nimport type { DialConfig, ResolvedValues, DialValue, SpringConfig, SelectConfig, ColorConfig, TextConfig, ActionConfig } from '../store/DialStore';\n\nexport interface CreateDialOptions {\n onAction?: (action: string) => void;\n}\n\nexport function createDialKit<T extends DialConfig>(\n name: string,\n config: T,\n options?: CreateDialOptions\n): Accessor<ResolvedValues<T>> {\n const id = createUniqueId();\n const panelId = `${name}-${id}`;\n\n const [values, setValues] = createSignal<Record<string, DialValue>>(\n DialStore.getValues(panelId)\n );\n\n onMount(() => {\n DialStore.registerPanel(panelId, name, config);\n setValues(DialStore.getValues(panelId));\n\n const unsubValues = DialStore.subscribe(panelId, () => {\n setValues(DialStore.getValues(panelId));\n });\n\n const unsubActions = options?.onAction\n ? DialStore.subscribeActions(panelId, options.onAction)\n : undefined;\n\n onCleanup(() => {\n unsubValues();\n unsubActions?.();\n DialStore.unregisterPanel(panelId);\n });\n });\n\n return createMemo(() => buildResolvedValues(config, values(), '') as ResolvedValues<T>);\n}\n\nfunction buildResolvedValues(\n config: DialConfig,\n flatValues: Record<string, DialValue>,\n prefix: string\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, configValue] of Object.entries(config)) {\n if (key === '_collapsed') continue;\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (Array.isArray(configValue) && configValue.length <= 4 && typeof configValue[0] === 'number') {\n result[key] = flatValues[path] ?? configValue[0];\n } else if (typeof configValue === 'number' || typeof configValue === 'boolean' || typeof configValue === 'string') {\n result[key] = flatValues[path] ?? configValue;\n } else if (isSpringConfig(configValue)) {\n result[key] = flatValues[path] ?? configValue;\n } else if (isActionConfig(configValue)) {\n result[key] = flatValues[path] ?? configValue;\n } else if (isSelectConfig(configValue)) {\n const defaultValue = configValue.default ?? getFirstOptionValue(configValue.options);\n result[key] = flatValues[path] ?? defaultValue;\n } else if (isColorConfig(configValue)) {\n result[key] = flatValues[path] ?? configValue.default ?? '#000000';\n } else if (isTextConfig(configValue)) {\n result[key] = flatValues[path] ?? configValue.default ?? '';\n } else if (typeof configValue === 'object' && configValue !== null) {\n result[key] = buildResolvedValues(configValue as DialConfig, flatValues, path);\n }\n }\n\n return result;\n}\n\nfunction hasType(value: unknown, type: string): boolean {\n return typeof value === 'object' && value !== null && 'type' in value && (value as { type: string }).type === type;\n}\n\nfunction isSpringConfig(value: unknown): value is SpringConfig {\n return hasType(value, 'spring');\n}\n\nfunction isActionConfig(value: unknown): value is ActionConfig {\n return hasType(value, 'action');\n}\n\nfunction isSelectConfig(value: unknown): value is SelectConfig {\n return hasType(value, 'select') && 'options' in (value as object) && Array.isArray((value as SelectConfig).options);\n}\n\nfunction isColorConfig(value: unknown): value is ColorConfig {\n return hasType(value, 'color');\n}\n\nfunction isTextConfig(value: unknown): value is TextConfig {\n return hasType(value, 'text');\n}\n\nfunction getFirstOptionValue(options: (string | { value: string; label: string })[]): string {\n const first = options[0];\n return typeof first === 'string' ? first : first.value;\n}\n","// Lightweight state store with subscriptions for dialkit\n\nexport type SpringConfig = {\n type: 'spring';\n stiffness?: number;\n damping?: number;\n mass?: number;\n visualDuration?: number;\n bounce?: number;\n};\n\nexport type EasingConfig = {\n type: 'easing';\n duration: number;\n ease: [number, number, number, number];\n};\n\nexport type TransitionConfig = SpringConfig | EasingConfig;\n\nexport type ActionConfig = {\n type: 'action';\n label?: string;\n};\n\nexport type SelectConfig = {\n type: 'select';\n options: (string | { value: string; label: string })[];\n default?: string;\n};\n\nexport type ColorConfig = {\n type: 'color';\n default?: string;\n};\n\nexport type TextConfig = {\n type: 'text';\n default?: string;\n placeholder?: string;\n};\n\nexport type DialValue = number | boolean | string | SpringConfig | EasingConfig | ActionConfig | SelectConfig | ColorConfig | TextConfig;\n\nexport type DialConfig = {\n [key: string]: DialValue | [number, number, number, number?] | DialConfig;\n};\n\nexport type ResolvedValues<T extends DialConfig> = {\n [K in keyof T]: T[K] extends [number, number, number, number?]\n ? number\n : T[K] extends SpringConfig\n ? TransitionConfig\n : T[K] extends EasingConfig\n ? TransitionConfig\n : T[K] extends SelectConfig\n ? string\n : T[K] extends ColorConfig\n ? string\n : T[K] extends TextConfig\n ? string\n : T[K] extends DialConfig\n ? ResolvedValues<T[K]>\n : T[K];\n};\n\nexport type ControlMeta = {\n type: 'slider' | 'toggle' | 'spring' | 'transition' | 'folder' | 'action' | 'select' | 'color' | 'text';\n path: string;\n label: string;\n min?: number;\n max?: number;\n step?: number;\n children?: ControlMeta[];\n defaultOpen?: boolean;\n options?: (string | { value: string; label: string })[];\n placeholder?: string;\n};\n\nexport type PanelConfig = {\n id: string;\n name: string;\n controls: ControlMeta[];\n values: Record<string, DialValue>;\n};\n\ntype Listener = () => void;\ntype ActionListener = (action: string) => void;\n\nexport type Preset = {\n id: string;\n name: string;\n values: Record<string, DialValue>;\n};\n\n// Stable empty object for unregistered panels (React 19 useSyncExternalStore requirement)\nconst EMPTY_VALUES: Record<string, DialValue> = Object.freeze({});\n\nclass DialStoreClass {\n private panels: Map<string, PanelConfig> = new Map();\n private listeners: Map<string, Set<Listener>> = new Map();\n private globalListeners: Set<Listener> = new Set();\n private snapshots: Map<string, Record<string, DialValue>> = new Map();\n private actionListeners: Map<string, Set<ActionListener>> = new Map();\n private presets: Map<string, Preset[]> = new Map();\n private activePreset: Map<string, string | null> = new Map();\n private baseValues: Map<string, Record<string, DialValue>> = new Map();\n\n registerPanel(id: string, name: string, config: DialConfig): void {\n const controls = this.parseConfig(config, '');\n const values = this.flattenValues(config, '');\n\n // Set initial transition modes based on config types\n this.initTransitionModes(config, '', values);\n\n this.panels.set(id, { id, name, controls, values });\n this.snapshots.set(id, { ...values });\n this.baseValues.set(id, { ...values });\n this.notifyGlobal();\n }\n\n updatePanel(id: string, name: string, config: DialConfig): void {\n const existing = this.panels.get(id);\n if (!existing) {\n this.registerPanel(id, name, config);\n return;\n }\n\n const controls = this.parseConfig(config, '');\n const controlsByPath = this.mapControlsByPath(controls);\n const defaultValues = this.flattenValues(config, '');\n const nextValues: Record<string, DialValue> = {};\n\n for (const [path, defaultValue] of Object.entries(defaultValues)) {\n nextValues[path] = this.normalizePreservedValue(\n existing.values[path],\n defaultValue,\n controlsByPath.get(path)\n );\n }\n\n // Set mode defaults for new transition controls first.\n this.initTransitionModes(config, '', nextValues);\n\n for (const [path, mode] of Object.entries(existing.values)) {\n if (!path.endsWith('.__mode')) {\n continue;\n }\n\n const transitionPath = path.slice(0, -'__mode'.length - 1);\n const transitionControl = controlsByPath.get(transitionPath);\n if (transitionControl?.type === 'transition') {\n nextValues[path] = mode;\n }\n }\n\n const nextPanel: PanelConfig = { id, name, controls, values: nextValues };\n this.panels.set(id, nextPanel);\n this.snapshots.set(id, { ...nextValues });\n\n const previousBaseValues = this.baseValues.get(id) ?? {};\n const nextBaseValues: Record<string, DialValue> = {};\n for (const [path, defaultValue] of Object.entries(defaultValues)) {\n nextBaseValues[path] = this.normalizePreservedValue(\n previousBaseValues[path],\n defaultValue,\n controlsByPath.get(path)\n );\n }\n\n for (const [path, value] of Object.entries(nextValues)) {\n if (path.endsWith('.__mode')) {\n nextBaseValues[path] = value;\n }\n }\n\n this.baseValues.set(id, nextBaseValues);\n\n this.notify(id);\n this.notifyGlobal();\n }\n\n unregisterPanel(id: string): void {\n this.panels.delete(id);\n this.listeners.delete(id);\n this.snapshots.delete(id);\n this.actionListeners.delete(id);\n this.baseValues.delete(id);\n this.notifyGlobal();\n }\n\n updateValue(panelId: string, path: string, value: DialValue): void {\n const panel = this.panels.get(panelId);\n if (!panel) return;\n\n panel.values[path] = value;\n\n // Auto-save to active preset or base values\n const activeId = this.activePreset.get(panelId);\n if (activeId) {\n const presets = this.presets.get(panelId) ?? [];\n const preset = presets.find(p => p.id === activeId);\n if (preset) preset.values[path] = value;\n } else {\n const base = this.baseValues.get(panelId);\n if (base) base[path] = value;\n }\n\n // Create a new snapshot reference so useSyncExternalStore detects the change\n this.snapshots.set(panelId, { ...panel.values });\n this.notify(panelId);\n }\n\n updateSpringMode(panelId: string, path: string, mode: 'simple' | 'advanced'): void {\n this.updateTransitionMode(panelId, path, mode);\n }\n\n getSpringMode(panelId: string, path: string): 'simple' | 'advanced' {\n const mode = this.getTransitionMode(panelId, path);\n if (mode === 'easing') return 'simple';\n return mode;\n }\n\n updateTransitionMode(panelId: string, path: string, mode: 'easing' | 'simple' | 'advanced'): void {\n const panel = this.panels.get(panelId);\n if (!panel) return;\n\n panel.values[`${path}.__mode`] = mode;\n this.snapshots.set(panelId, { ...panel.values });\n this.notify(panelId);\n }\n\n getTransitionMode(panelId: string, path: string): 'easing' | 'simple' | 'advanced' {\n const panel = this.panels.get(panelId);\n if (!panel) return 'simple';\n return (panel.values[`${path}.__mode`] as 'easing' | 'simple' | 'advanced') || 'simple';\n }\n\n getValue(panelId: string, path: string): DialValue | undefined {\n const panel = this.panels.get(panelId);\n return panel?.values[path];\n }\n\n getValues(panelId: string): Record<string, DialValue> {\n // Return the snapshot for useSyncExternalStore compatibility\n // Use stable EMPTY_VALUES to avoid infinite loop in React 19\n return this.snapshots.get(panelId) ?? EMPTY_VALUES;\n }\n\n getPanels(): PanelConfig[] {\n return Array.from(this.panels.values());\n }\n\n getPanel(id: string): PanelConfig | undefined {\n return this.panels.get(id);\n }\n\n subscribe(panelId: string, listener: Listener): () => void {\n if (!this.listeners.has(panelId)) {\n this.listeners.set(panelId, new Set());\n }\n this.listeners.get(panelId)!.add(listener);\n\n return () => {\n this.listeners.get(panelId)?.delete(listener);\n };\n }\n\n subscribeGlobal(listener: Listener): () => void {\n this.globalListeners.add(listener);\n return () => this.globalListeners.delete(listener);\n }\n\n subscribeActions(panelId: string, listener: ActionListener): () => void {\n if (!this.actionListeners.has(panelId)) {\n this.actionListeners.set(panelId, new Set());\n }\n this.actionListeners.get(panelId)!.add(listener);\n\n return () => {\n this.actionListeners.get(panelId)?.delete(listener);\n };\n }\n\n triggerAction(panelId: string, path: string): void {\n this.actionListeners.get(panelId)?.forEach(fn => fn(path));\n }\n\n savePreset(panelId: string, name: string): string {\n const panel = this.panels.get(panelId);\n if (!panel) throw new Error(`Panel ${panelId} not found`);\n\n const id = `preset-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n const preset: Preset = {\n id,\n name,\n values: { ...panel.values },\n };\n\n const existing = this.presets.get(panelId) ?? [];\n this.presets.set(panelId, [...existing, preset]);\n this.activePreset.set(panelId, id);\n\n // Force re-render by creating new snapshot reference\n this.snapshots.set(panelId, { ...panel.values });\n this.notify(panelId);\n\n return id;\n }\n\n loadPreset(panelId: string, presetId: string): void {\n const panel = this.panels.get(panelId);\n if (!panel) return;\n\n const presets = this.presets.get(panelId) ?? [];\n const preset = presets.find(p => p.id === presetId);\n if (!preset) return;\n\n // Apply preset values\n panel.values = { ...preset.values };\n this.snapshots.set(panelId, { ...panel.values });\n this.activePreset.set(panelId, presetId);\n this.notify(panelId);\n }\n\n deletePreset(panelId: string, presetId: string): void {\n const presets = this.presets.get(panelId) ?? [];\n this.presets.set(panelId, presets.filter(p => p.id !== presetId));\n\n // Clear active if deleted\n if (this.activePreset.get(panelId) === presetId) {\n this.activePreset.set(panelId, null);\n }\n\n // Force re-render by creating new snapshot reference\n const panel = this.panels.get(panelId);\n if (panel) {\n this.snapshots.set(panelId, { ...panel.values });\n }\n this.notify(panelId);\n }\n\n getPresets(panelId: string): Preset[] {\n return this.presets.get(panelId) ?? [];\n }\n\n getActivePresetId(panelId: string): string | null {\n return this.activePreset.get(panelId) ?? null;\n }\n\n clearActivePreset(panelId: string): void {\n const panel = this.panels.get(panelId);\n const base = this.baseValues.get(panelId);\n if (panel && base) {\n panel.values = { ...base };\n this.snapshots.set(panelId, { ...panel.values });\n }\n this.activePreset.set(panelId, null);\n this.notify(panelId);\n }\n\n private notify(panelId: string): void {\n this.listeners.get(panelId)?.forEach(fn => fn());\n }\n\n private notifyGlobal(): void {\n this.globalListeners.forEach(fn => fn());\n }\n\n private initTransitionModes(config: DialConfig, prefix: string, values: Record<string, DialValue>): void {\n for (const [key, value] of Object.entries(config)) {\n if (key === '_collapsed') continue;\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (this.isEasingConfig(value)) {\n values[`${path}.__mode`] = 'easing';\n } else if (this.isSpringConfig(value)) {\n // Detect physics mode from config\n const hasPhysics = value.stiffness !== undefined || value.damping !== undefined || value.mass !== undefined;\n const hasTime = value.visualDuration !== undefined || value.bounce !== undefined;\n values[`${path}.__mode`] = hasPhysics && !hasTime ? 'advanced' : 'simple';\n } else if (typeof value === 'object' && value !== null && !Array.isArray(value) && !this.isActionConfig(value) && !this.isSelectConfig(value) && !this.isColorConfig(value) && !this.isTextConfig(value)) {\n this.initTransitionModes(value as DialConfig, path, values);\n }\n }\n }\n\n private parseConfig(config: DialConfig, prefix: string): ControlMeta[] {\n const controls: ControlMeta[] = [];\n\n for (const [key, value] of Object.entries(config)) {\n if (key === '_collapsed') continue;\n const path = prefix ? `${prefix}.${key}` : key;\n const label = this.formatLabel(key);\n\n if (Array.isArray(value) && value.length <= 4 && typeof value[0] === 'number') {\n // Range tuple: [default, min, max]\n controls.push({\n type: 'slider',\n path,\n label,\n min: value[1],\n max: value[2],\n step: value[3] ?? this.inferStep(value[1], value[2]),\n });\n } else if (typeof value === 'number') {\n // Single number - auto-infer range\n const { min, max, step } = this.inferRange(value);\n controls.push({ type: 'slider', path, label, min, max, step });\n } else if (typeof value === 'boolean') {\n controls.push({ type: 'toggle', path, label });\n } else if (this.isSpringConfig(value) || this.isEasingConfig(value)) {\n controls.push({ type: 'transition', path, label });\n } else if (this.isActionConfig(value)) {\n controls.push({ type: 'action', path, label: (value as ActionConfig).label || label });\n } else if (this.isSelectConfig(value)) {\n controls.push({ type: 'select', path, label, options: value.options });\n } else if (this.isColorConfig(value)) {\n controls.push({ type: 'color', path, label });\n } else if (this.isTextConfig(value)) {\n controls.push({ type: 'text', path, label, placeholder: value.placeholder });\n } else if (typeof value === 'string') {\n // Auto-detect: hex color vs text\n if (this.isHexColor(value)) {\n controls.push({ type: 'color', path, label });\n } else {\n controls.push({ type: 'text', path, label });\n }\n } else if (typeof value === 'object' && value !== null) {\n // Nested object becomes a folder\n const folderConfig = value as DialConfig;\n const defaultOpen = '_collapsed' in folderConfig ? !(folderConfig._collapsed as boolean) : true;\n controls.push({\n type: 'folder',\n path,\n label,\n defaultOpen,\n children: this.parseConfig(folderConfig, path),\n });\n }\n }\n\n return controls;\n }\n\n private flattenValues(config: DialConfig, prefix: string): Record<string, DialValue> {\n const values: Record<string, DialValue> = {};\n\n for (const [key, value] of Object.entries(config)) {\n if (key === '_collapsed') continue;\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (Array.isArray(value) && value.length <= 4 && typeof value[0] === 'number') {\n values[path] = value[0]; // Default value\n } else if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'string') {\n values[path] = value;\n } else if (this.isSpringConfig(value) || this.isEasingConfig(value)) {\n values[path] = value;\n } else if (this.isActionConfig(value)) {\n // Actions don't need stored values - they're just triggers\n values[path] = value;\n } else if (this.isSelectConfig(value)) {\n // Use default or first option's value\n const firstOption = value.options[0];\n const firstValue = typeof firstOption === 'string' ? firstOption : firstOption.value;\n values[path] = value.default ?? firstValue;\n } else if (this.isColorConfig(value)) {\n values[path] = value.default ?? '#000000';\n } else if (this.isTextConfig(value)) {\n values[path] = value.default ?? '';\n } else if (typeof value === 'object' && value !== null) {\n Object.assign(values, this.flattenValues(value as DialConfig, path));\n }\n }\n\n return values;\n }\n\n private isSpringConfig(value: unknown): value is SpringConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as SpringConfig).type === 'spring'\n );\n }\n\n private isEasingConfig(value: unknown): value is EasingConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as EasingConfig).type === 'easing'\n );\n }\n\n private isActionConfig(value: unknown): value is ActionConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as ActionConfig).type === 'action'\n );\n }\n\n private isSelectConfig(value: unknown): value is SelectConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as SelectConfig).type === 'select' &&\n 'options' in value &&\n Array.isArray((value as SelectConfig).options)\n );\n }\n\n private isColorConfig(value: unknown): value is ColorConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as ColorConfig).type === 'color'\n );\n }\n\n private isTextConfig(value: unknown): value is TextConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as TextConfig).type === 'text'\n );\n }\n\n private isHexColor(value: string): boolean {\n return /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(value);\n }\n\n private formatLabel(key: string): string {\n // Convert camelCase to Title Case\n return key\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, str => str.toUpperCase())\n .trim();\n }\n\n private inferRange(value: number): { min: number; max: number; step: number } {\n // Infer reasonable range based on value\n if (value >= 0 && value <= 1) {\n return { min: 0, max: 1, step: 0.01 };\n } else if (value >= 0 && value <= 10) {\n return { min: 0, max: value * 3 || 10, step: 0.1 };\n } else if (value >= 0 && value <= 100) {\n return { min: 0, max: value * 3 || 100, step: 1 };\n } else if (value >= 0) {\n return { min: 0, max: value * 3 || 1000, step: 10 };\n } else {\n return { min: value * 3, max: -value * 3, step: 1 };\n }\n }\n\n private inferStep(min: number, max: number): number {\n const range = max - min;\n if (range <= 1) return 0.01;\n if (range <= 10) return 0.1;\n if (range <= 100) return 1;\n return 10;\n }\n\n private normalizePreservedValue(\n existingValue: DialValue | undefined,\n defaultValue: DialValue,\n control: ControlMeta | undefined\n ): DialValue {\n if (existingValue === undefined || !control) {\n return defaultValue;\n }\n\n switch (control.type) {\n case 'slider': {\n if (typeof existingValue !== 'number' || typeof defaultValue !== 'number') {\n return defaultValue;\n }\n\n const min = control.min ?? Number.NEGATIVE_INFINITY;\n const max = control.max ?? Number.POSITIVE_INFINITY;\n const clamped = Math.min(max, Math.max(min, existingValue));\n\n if (typeof control.step !== 'number' || control.step <= 0) {\n return clamped;\n }\n\n return this.roundToStep(clamped, min, max, control.step);\n }\n case 'toggle':\n return typeof existingValue === 'boolean' ? existingValue : defaultValue;\n case 'select': {\n if (typeof existingValue !== 'string') {\n return defaultValue;\n }\n\n const options = control.options ?? [];\n const validValues = new Set(options.map((option) => (typeof option === 'string' ? option : option.value)));\n return validValues.has(existingValue) ? existingValue : defaultValue;\n }\n case 'color':\n case 'text':\n return typeof existingValue === 'string' ? existingValue : defaultValue;\n case 'transition':\n if (this.isSpringConfig(defaultValue)) {\n return this.isSpringConfig(existingValue) ? existingValue : defaultValue;\n }\n if (this.isEasingConfig(defaultValue)) {\n return this.isEasingConfig(existingValue) ? existingValue : defaultValue;\n }\n return defaultValue;\n case 'action':\n return defaultValue;\n default:\n return defaultValue;\n }\n }\n\n private roundToStep(value: number, min: number, max: number, step: number): number {\n const snapped = min + Math.round((value - min) / step) * step;\n const clamped = Math.min(max, Math.max(min, snapped));\n const precision = this.stepPrecision(step);\n return Number(clamped.toFixed(precision));\n }\n\n private stepPrecision(step: number): number {\n const text = String(step);\n const decimalIndex = text.indexOf('.');\n return decimalIndex === -1 ? 0 : text.length - decimalIndex - 1;\n }\n\n private mapControlsByPath(controls: ControlMeta[]): Map<string, ControlMeta> {\n const map = new Map<string, ControlMeta>();\n\n const visit = (nodes: ControlMeta[]) => {\n for (const node of nodes) {\n if (node.type === 'folder' && node.children) {\n visit(node.children);\n continue;\n }\n\n map.set(node.path, node);\n }\n };\n\n visit(controls);\n return map;\n }\n\n}\n\n// Singleton instance\nexport const DialStore = new DialStoreClass();\n","import { createSignal, onMount, onCleanup, Show, For } from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { DialStore } from '../../store/DialStore';\nimport type { PanelConfig } from '../../store/DialStore';\nimport { Panel } from './Panel';\n\nexport type DialPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\nexport type DialMode = 'popover' | 'inline';\n\ninterface DialRootProps {\n position?: DialPosition;\n defaultOpen?: boolean;\n mode?: DialMode;\n}\n\nexport function DialRoot(props: DialRootProps) {\n const [panels, setPanels] = createSignal<PanelConfig[]>([]);\n const [mounted, setMounted] = createSignal(false);\n const inline = () => (props.mode ?? 'popover') === 'inline';\n\n onMount(() => {\n setMounted(true);\n setPanels(DialStore.getPanels());\n const unsub = DialStore.subscribeGlobal(() => {\n setPanels(DialStore.getPanels());\n });\n onCleanup(unsub);\n });\n\n const content = () => (\n <div class=\"dialkit-root\" data-mode={props.mode ?? 'popover'}>\n <div class=\"dialkit-panel\" data-position={inline() ? undefined : (props.position ?? 'top-right')} data-mode={props.mode ?? 'popover'}>\n <For each={panels()}>\n {(panel) => <Panel panel={panel} defaultOpen={inline() || (props.defaultOpen ?? true)} inline={inline()} />}\n </For>\n </div>\n </div>\n );\n\n return (\n <Show when={mounted() && typeof window !== 'undefined' && panels().length > 0}>\n <Show when={!inline()} fallback={content()}>\n <Portal mount={document.body}>\n {content()}\n </Portal>\n </Show>\n </Show>\n );\n}\n","import { createSignal, createEffect, onMount, onCleanup, Show, For, JSX } from 'solid-js';\nimport { animate } from 'motion';\nimport { DialStore } from '../../store/DialStore';\nimport type { ControlMeta, PanelConfig, SpringConfig, DialValue } from '../../store/DialStore';\nimport { Folder } from './Folder';\nimport { Slider } from './Slider';\nimport { Toggle } from './Toggle';\nimport { SpringControl } from './SpringControl';\nimport { TextControl } from './TextControl';\nimport { SelectControl } from './SelectControl';\nimport { ColorControl } from './ColorControl';\nimport { PresetManager } from './PresetManager';\n\ninterface PanelProps {\n panel: PanelConfig;\n defaultOpen?: boolean;\n inline?: boolean;\n}\n\nexport function Panel(props: PanelProps) {\n const [copied, setCopied] = createSignal(false);\n const [isPanelOpen, setIsPanelOpen] = createSignal(props.defaultOpen ?? true);\n const [values, setValues] = createSignal<Record<string, DialValue>>(\n DialStore.getValues(props.panel.id)\n );\n const [presets, setPresets] = createSignal(DialStore.getPresets(props.panel.id));\n const [activePresetId, setActivePresetId] = createSignal(DialStore.getActivePresetId(props.panel.id));\n let addButtonRef!: HTMLButtonElement;\n let copyButtonRef!: HTMLButtonElement;\n let copyClipboardIconRef!: HTMLSpanElement;\n let copyCheckIconRef!: HTMLSpanElement;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let addTapAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let copyTapAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let copyClipboardAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let copyCheckAnim: any = null;\n let didInitCopyIcons = false;\n\n const tapTransition = { type: 'spring' as const, visualDuration: 0.15, bounce: 0.3 };\n\n onMount(() => {\n const unsub = DialStore.subscribe(props.panel.id, () => {\n setValues(DialStore.getValues(props.panel.id));\n setPresets(DialStore.getPresets(props.panel.id));\n setActivePresetId(DialStore.getActivePresetId(props.panel.id));\n });\n\n if (copyClipboardIconRef && copyCheckIconRef) {\n copyClipboardIconRef.style.transformOrigin = '50% 50%';\n copyClipboardIconRef.style.opacity = '1';\n copyClipboardIconRef.style.transform = 'scale(1)';\n copyClipboardIconRef.style.filter = 'blur(0px)';\n copyCheckIconRef.style.transformOrigin = '50% 50%';\n copyCheckIconRef.style.opacity = '0';\n copyCheckIconRef.style.transform = 'scale(0.5)';\n copyCheckIconRef.style.filter = 'blur(4px)';\n didInitCopyIcons = true;\n }\n\n onCleanup(unsub);\n });\n\n const handleAddPreset = () => {\n const nextNum = presets().length + 2;\n DialStore.savePreset(props.panel.id, `Version ${nextNum}`);\n };\n\n const handleCopy = () => {\n const jsonStr = JSON.stringify(values(), null, 2);\n const instruction = `Update the createDialKit configuration for \"${props.panel.name}\" with these values:\\n\\n\\`\\`\\`json\\n${jsonStr}\\n\\`\\`\\`\\n\\nApply these values as the new defaults in the createDialKit call.`;\n navigator.clipboard.writeText(instruction);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n };\n\n createEffect(() => {\n const isCopied = copied();\n if (!copyClipboardIconRef || !copyCheckIconRef) return;\n\n copyClipboardAnim?.stop();\n copyCheckAnim?.stop();\n\n if (!didInitCopyIcons) return;\n\n const transition = { type: 'spring' as const, visualDuration: 0.3, bounce: 0.2 };\n copyClipboardAnim = animate(copyClipboardIconRef, {\n opacity: isCopied ? 0 : 1,\n scale: isCopied ? 0.5 : 1,\n filter: isCopied ? 'blur(4px)' : 'blur(0px)',\n }, transition);\n copyCheckAnim = animate(copyCheckIconRef, {\n opacity: isCopied ? 1 : 0,\n scale: isCopied ? 1 : 0.5,\n filter: isCopied ? 'blur(0px)' : 'blur(4px)',\n }, transition);\n });\n\n onCleanup(() => {\n addTapAnim?.stop();\n copyTapAnim?.stop();\n copyClipboardAnim?.stop();\n copyCheckAnim?.stop();\n });\n\n const handleAddTapStart = () => {\n if (!addButtonRef) return;\n addTapAnim?.stop();\n addTapAnim = animate(addButtonRef, { scale: 0.9 }, tapTransition);\n };\n\n const handleAddTapEnd = () => {\n if (!addButtonRef) return;\n addTapAnim?.stop();\n addTapAnim = animate(addButtonRef, { scale: 1 }, tapTransition);\n };\n\n const handleCopyTapStart = () => {\n if (!copyButtonRef) return;\n copyTapAnim?.stop();\n copyTapAnim = animate(copyButtonRef, { scale: 0.95 }, tapTransition);\n };\n\n const handleCopyTapEnd = () => {\n if (!copyButtonRef) return;\n copyTapAnim?.stop();\n copyTapAnim = animate(copyButtonRef, { scale: 1 }, tapTransition);\n };\n\n const renderControl = (control: ControlMeta) => {\n const value = () => values()[control.path];\n\n switch (control.type) {\n case 'slider':\n return (\n <Slider\n label={control.label}\n value={value() as number}\n onChange={(v) => DialStore.updateValue(props.panel.id, control.path, v)}\n min={control.min}\n max={control.max}\n step={control.step}\n />\n );\n\n case 'toggle':\n return (\n <Toggle\n label={control.label}\n checked={value() as boolean}\n onChange={(v) => DialStore.updateValue(props.panel.id, control.path, v)}\n />\n );\n\n case 'spring':\n return (\n <SpringControl\n panelId={props.panel.id}\n path={control.path}\n label={control.label}\n spring={value() as SpringConfig}\n onChange={(v) => DialStore.updateValue(props.panel.id, control.path, v)}\n />\n );\n\n case 'folder':\n return (\n <Folder title={control.label} defaultOpen={control.defaultOpen ?? true}>\n <For each={control.children ?? []}>\n {(child) => <>{renderControl(child)}</>}\n </For>\n </Folder>\n );\n\n case 'text':\n return (\n <TextControl\n label={control.label}\n value={value() as string}\n onChange={(v) => DialStore.updateValue(props.panel.id, control.path, v)}\n placeholder={control.placeholder}\n />\n );\n\n case 'select':\n return (\n <SelectControl\n label={control.label}\n value={value() as string}\n options={control.options ?? []}\n onChange={(v) => DialStore.updateValue(props.panel.id, control.path, v)}\n />\n );\n\n case 'color':\n return (\n <ColorControl\n label={control.label}\n value={value() as string}\n onChange={(v) => DialStore.updateValue(props.panel.id, control.path, v)}\n />\n );\n\n default:\n return null;\n }\n };\n\n const renderControls = () => {\n return (\n <For each={props.panel.controls}>\n {(control) => (\n <>\n {control.type === 'action' ? (\n <button\n class=\"dialkit-button\"\n onClick={() => DialStore.triggerAction(props.panel.id, control.path)}\n >\n {control.label}\n </button>\n ) : (\n renderControl(control)\n )}\n </>\n )}\n </For>\n );\n };\n\n const toolbar = (\n <>\n <button\n ref={addButtonRef}\n class=\"dialkit-toolbar-add\"\n onClick={handleAddPreset}\n onPointerDown={handleAddTapStart}\n onPointerUp={handleAddTapEnd}\n onPointerCancel={handleAddTapEnd}\n onPointerLeave={handleAddTapEnd}\n title=\"Add preset\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M4 6H20\" />\n <path d=\"M4 12H10\" />\n <path d=\"M15 15L21 15\" />\n <path d=\"M18 12V18\" />\n <path d=\"M4 18H10\" />\n </svg>\n </button>\n\n <PresetManager\n panelId={props.panel.id}\n presets={presets()}\n activePresetId={activePresetId()}\n onAdd={handleAddPreset}\n />\n\n <button\n ref={copyButtonRef}\n class=\"dialkit-toolbar-copy\"\n onClick={handleCopy}\n onPointerDown={handleCopyTapStart}\n onPointerUp={handleCopyTapEnd}\n onPointerCancel={handleCopyTapEnd}\n onPointerLeave={handleCopyTapEnd}\n title=\"Copy parameters\"\n >\n <span class=\"dialkit-toolbar-copy-icon-wrap\">\n <span\n ref={copyClipboardIconRef}\n class=\"dialkit-toolbar-copy-icon\"\n style={{ opacity: 1, transform: 'scale(1)', filter: 'blur(0px)' }}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"16\" height=\"16\">\n <path d=\"M8 6C8 4.34315 9.34315 3 11 3H13C14.6569 3 16 4.34315 16 6V7H8V6Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\" />\n <path d=\"M19.2405 16.1852L18.5436 14.3733C18.4571 14.1484 18.241 14 18 14C17.759 14 17.5429 14.1484 17.4564 14.3733L16.7595 16.1852C16.658 16.4493 16.4493 16.658 16.1852 16.7595L14.3733 17.4564C14.1484 17.5429 14 17.759 14 18C14 18.241 14.1484 18.4571 14.3733 18.5436L16.1852 19.2405C16.4493 19.342 16.658 19.5507 16.7595 19.8148L17.4564 21.6267C17.5429 21.8516 17.759 22 18 22C18.241 22 18.4571 21.8516 18.5436 21.6267L19.2405 19.8148C19.342 19.5507 19.5507 19.342 19.8148 19.2405L21.6267 18.5436C21.8516 18.4571 22 18.241 22 18C22 17.759 21.8516 17.5429 21.6267 17.4564L19.8148 16.7595C19.5507 16.658 19.342 16.4493 19.2405 16.1852Z\" fill=\"currentColor\" />\n <path d=\"M16 5H17C18.6569 5 20 6.34315 20 8V11M8 5H7C5.34315 5 4 6.34315 4 8V18C4 19.6569 5.34315 21 7 21H12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span\n ref={copyCheckIconRef}\n class=\"dialkit-toolbar-copy-icon\"\n style={{ opacity: 0, transform: 'scale(0.5)', filter: 'blur(4px)' }}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"16\" height=\"16\">\n <path d=\"M5 12.75L10 19L19 5\" />\n </svg>\n </span>\n </span>\n Copy\n </button>\n </>\n );\n\n return (\n <div class=\"dialkit-panel-wrapper\">\n <Folder title={props.panel.name} defaultOpen={props.defaultOpen ?? true} isRoot={true} inline={props.inline ?? false} onOpenChange={setIsPanelOpen} toolbar={toolbar}>\n {renderControls()}\n </Folder>\n </div>\n );\n}\n","import { createSignal, createEffect, onCleanup, Show, JSX } from 'solid-js';\nimport { animate } from 'motion';\n\ninterface FolderProps {\n title: string;\n children: JSX.Element;\n defaultOpen?: boolean;\n isRoot?: boolean;\n inline?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n toolbar?: JSX.Element;\n}\n\nexport function Folder(props: FolderProps) {\n const [isOpen, setIsOpen] = createSignal(props.defaultOpen ?? true);\n const [isCollapsed, setIsCollapsed] = createSignal(!(props.defaultOpen ?? true));\n const [contentHeight, setContentHeight] = createSignal<number | undefined>(undefined);\n\n // Section content animation state\n const [contentMounted, setContentMounted] = createSignal(props.defaultOpen ?? true);\n let skipFirstAnim = props.defaultOpen ?? true;\n let sectionContentRef: HTMLDivElement | undefined;\n let sectionAnim: any = null;\n let folderChevronRef: SVGSVGElement | undefined;\n let chevronAnim: any = null;\n let chevronInitialized = false;\n let panelTapAnim: any = null;\n\n let contentRef: HTMLDivElement | undefined;\n\n // Track content height for root panel sizing\n createEffect(() => {\n if (!props.isRoot || !isOpen()) return;\n const el = contentRef;\n if (!el) return;\n const ro = new ResizeObserver(() => {\n const h = el.offsetHeight;\n setContentHeight(prev => prev === h ? prev : h);\n });\n ro.observe(el);\n onCleanup(() => ro.disconnect());\n });\n\n createEffect(() => {\n if (props.isRoot || !folderChevronRef) return;\n const open = isOpen();\n chevronAnim?.stop();\n\n if (!chevronInitialized) {\n folderChevronRef.style.transform = `rotate(${open ? 0 : 180}deg)`;\n chevronInitialized = true;\n return;\n }\n\n chevronAnim = animate(\n folderChevronRef,\n { rotate: open ? 0 : 180 },\n { type: 'spring', visualDuration: 0.35, bounce: 0.15 }\n );\n\n onCleanup(() => chevronAnim?.stop());\n });\n\n const handleToggle = () => {\n if (props.inline && props.isRoot) return;\n const next = !isOpen();\n setIsOpen(next);\n if (next) {\n setIsCollapsed(false);\n if (!props.isRoot) {\n sectionAnim?.stop();\n sectionAnim = null;\n if (sectionContentRef) {\n // If close was interrupted, animate section back open.\n sectionAnim = animate(\n sectionContentRef,\n { height: 'auto', opacity: 1 },\n {\n type: 'spring',\n visualDuration: 0.35,\n bounce: 0.1,\n onComplete: () => {\n sectionAnim = null;\n },\n }\n );\n } else {\n // If fully unmounted, mount and let the ref callback run enter animation.\n setContentMounted(true);\n }\n }\n } else {\n setIsCollapsed(true);\n if (!props.isRoot) {\n if (sectionContentRef) {\n const currentHeight = sectionContentRef.getBoundingClientRect().height;\n sectionContentRef.style.height = `${currentHeight}px`;\n sectionAnim?.stop();\n sectionAnim = animate(\n sectionContentRef,\n { height: 0, opacity: 0 },\n {\n type: 'spring', visualDuration: 0.35, bounce: 0.1,\n onComplete: () => {\n setContentMounted(false);\n sectionAnim = null;\n sectionContentRef = undefined;\n },\n }\n );\n } else {\n setContentMounted(false);\n }\n }\n }\n props.onOpenChange?.(next);\n };\n\n const folderContent = () => (\n <div\n ref={(el) => { if (props.isRoot) contentRef = el; }}\n class={`dialkit-folder ${props.isRoot ? 'dialkit-folder-root' : ''}`}\n >\n <div\n class={`dialkit-folder-header ${props.isRoot ? 'dialkit-panel-header' : ''}`}\n onClick={handleToggle}\n >\n <div class=\"dialkit-folder-header-top\">\n {props.isRoot ? (\n <Show when={isOpen()}>\n <div class=\"dialkit-folder-title-row\">\n <span class=\"dialkit-folder-title dialkit-folder-title-root\">\n {props.title}\n </span>\n </div>\n </Show>\n ) : (\n <div class=\"dialkit-folder-title-row\">\n <span class=\"dialkit-folder-title\">{props.title}</span>\n </div>\n )}\n\n {props.isRoot && !props.inline && (\n <svg class=\"dialkit-panel-icon\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n opacity=\"0.5\"\n d=\"M6.84766 11.75C6.78583 11.9899 6.75 12.2408 6.75 12.5C6.75 12.7592 6.78583 13.0101 6.84766 13.25H2C1.58579 13.25 1.25 12.9142 1.25 12.5C1.25 12.0858 1.58579 11.75 2 11.75H6.84766ZM14 11.75C14.4142 11.75 14.75 12.0858 14.75 12.5C14.75 12.9142 14.4142 13.25 14 13.25H12.6523C12.7142 13.0101 12.75 12.7592 12.75 12.5C12.75 12.2408 12.7142 11.9899 12.6523 11.75H14ZM3.09766 7.25C3.03583 7.48994 3 7.74075 3 8C3 8.25925 3.03583 8.51006 3.09766 8.75H2C1.58579 8.75 1.25 8.41421 1.25 8C1.25 7.58579 1.58579 7.25 2 7.25H3.09766ZM14 7.25C14.4142 7.25 14.75 7.58579 14.75 8C14.75 8.41421 14.4142 8.75 14 8.75H8.90234C8.96417 8.51006 9 8.25925 9 8C9 7.74075 8.96417 7.48994 8.90234 7.25H14ZM7.59766 2.75C7.53583 2.98994 7.5 3.24075 7.5 3.5C7.5 3.75925 7.53583 4.01006 7.59766 4.25H2C1.58579 4.25 1.25 3.91421 1.25 3.5C1.25 3.08579 1.58579 2.75 2 2.75H7.59766ZM14 2.75C14.4142 2.75 14.75 3.08579 14.75 3.5C14.75 3.91421 14.4142 4.25 14 4.25H13.4023C13.4642 4.01006 13.5 3.75925 13.5 3.5C13.5 3.24075 13.4642 2.98994 13.4023 2.75H14Z\"\n fill=\"currentColor\"\n />\n <circle cx=\"6\" cy=\"8\" r=\"0.998596\" fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"1.25\" />\n <circle cx=\"10.4999\" cy=\"3.5\" r=\"0.998657\" fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"1.25\" />\n <circle cx=\"9.75015\" cy=\"12.5\" r=\"0.997986\" fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"1.25\" />\n </svg>\n )}\n {!props.isRoot && (\n <svg\n ref={folderChevronRef}\n class=\"dialkit-folder-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M6 9.5L12 15.5L18 9.5\" />\n </svg>\n )}\n </div>\n\n <Show when={props.isRoot && props.toolbar && isOpen()}>\n <div class=\"dialkit-panel-toolbar\" onClick={(e) => e.stopPropagation()}>\n {props.toolbar}\n </div>\n </Show>\n </div>\n\n <Show when={props.isRoot ? isOpen() : contentMounted()}>\n <div\n ref={(el) => {\n if (props.isRoot) return;\n sectionContentRef = el;\n if (skipFirstAnim) { skipFirstAnim = false; return; }\n\n sectionAnim?.stop();\n el.style.height = '0px';\n el.style.opacity = '0';\n sectionAnim = animate(\n el,\n { height: 'auto', opacity: 1 },\n {\n type: 'spring',\n visualDuration: 0.35,\n bounce: 0.1,\n onComplete: () => {\n sectionAnim = null;\n },\n }\n );\n }}\n class=\"dialkit-folder-content\"\n style={!props.isRoot ? { 'clip-path': 'inset(0 -20px)' } : undefined}\n >\n <div class=\"dialkit-folder-inner\">{props.children}</div>\n </div>\n </Show>\n </div>\n );\n\n if (props.isRoot) {\n if (props.inline) {\n return (\n <div class=\"dialkit-panel-inner dialkit-panel-inline\">\n {folderContent()}\n </div>\n );\n }\n let panelRef!: HTMLDivElement;\n let rootPanelAnim: any = null;\n let rootPanelInitialized = false;\n let lastRootOpen = isOpen();\n\n createEffect(() => {\n if (!panelRef || isOpen()) return;\n const handler = (e: Event) => {\n e.stopPropagation();\n handleToggle();\n };\n panelRef.addEventListener('click', handler);\n onCleanup(() => panelRef.removeEventListener('click', handler));\n });\n\n createEffect(() => {\n if (!panelRef) return;\n\n const open = isOpen();\n const measuredOpenHeight = contentHeight() !== undefined\n ? contentHeight()! + 24\n : panelRef.getBoundingClientRect().height;\n\n const target = {\n width: open ? 280 : 42,\n height: open ? measuredOpenHeight : 42,\n borderRadius: open ? 14 : 21,\n boxShadow: open\n ? '0 8px 32px rgba(0, 0, 0, 0.5)'\n : '0 4px 16px rgba(0, 0, 0, 0.25)',\n };\n\n panelRef.style.cursor = open ? '' : 'pointer';\n panelRef.style.overflow = open ? '' : 'hidden';\n\n if (!rootPanelInitialized) {\n rootPanelInitialized = true;\n panelRef.style.width = `${target.width}px`;\n panelRef.style.height = `${target.height}px`;\n panelRef.style.borderRadius = `${target.borderRadius}px`;\n panelRef.style.boxShadow = target.boxShadow;\n lastRootOpen = open;\n return;\n }\n\n if (open !== lastRootOpen) {\n rootPanelAnim?.stop();\n rootPanelAnim = animate(panelRef, target, {\n type: 'spring',\n visualDuration: 0.15,\n bounce: 0.3,\n onComplete: () => {\n rootPanelAnim = null;\n },\n });\n lastRootOpen = open;\n return;\n }\n\n if (open) {\n panelRef.style.height = `${target.height}px`;\n }\n });\n\n onCleanup(() => {\n rootPanelAnim?.stop();\n panelTapAnim?.stop();\n });\n\n return (\n <div\n ref={panelRef}\n class=\"dialkit-panel-inner\"\n data-collapsed={String(isCollapsed())}\n onPointerDown={() => {\n if (isOpen()) return;\n (document.activeElement as HTMLElement)?.blur?.();\n panelTapAnim?.stop();\n panelTapAnim = animate(panelRef, { scale: 0.9 }, { type: 'spring', visualDuration: 0.15, bounce: 0.3 });\n }}\n onPointerUp={() => {\n if (isOpen()) return;\n panelTapAnim?.stop();\n panelTapAnim = animate(panelRef, { scale: 1 }, { type: 'spring', visualDuration: 0.15, bounce: 0.3 });\n }}\n onPointerCancel={() => {\n if (isOpen()) return;\n panelTapAnim?.stop();\n panelTapAnim = animate(panelRef, { scale: 1 }, { type: 'spring', visualDuration: 0.15, bounce: 0.3 });\n }}\n onPointerLeave={() => {\n if (isOpen()) return;\n panelTapAnim?.stop();\n panelTapAnim = animate(panelRef, { scale: 1 }, { type: 'spring', visualDuration: 0.15, bounce: 0.3 });\n }}\n >\n {folderContent()}\n </div>\n );\n }\n\n return folderContent();\n}\n","import { createSignal, createEffect, onMount, onCleanup } from 'solid-js';\nimport { animate, motionValue } from 'motion';\n\ninterface SliderProps {\n label: string;\n value: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n unit?: string;\n}\n\nconst CLICK_THRESHOLD = 3;\nconst DEAD_ZONE = 32;\nconst MAX_CURSOR_RANGE = 200;\nconst MAX_STRETCH = 8;\n\nfunction decimalsForStep(step: number): number {\n const s = step.toString();\n const dot = s.indexOf('.');\n return dot === -1 ? 0 : s.length - dot - 1;\n}\n\nfunction roundValue(val: number, step: number): number {\n const raw = Math.round(val / step) * step;\n return parseFloat(raw.toFixed(decimalsForStep(step)));\n}\n\nfunction snapToDecile(rawValue: number, min: number, max: number): number {\n const normalized = (rawValue - min) / (max - min);\n const nearest = Math.round(normalized * 10) / 10;\n if (Math.abs(normalized - nearest) <= 0.03125) {\n return min + nearest * (max - min);\n }\n return rawValue;\n}\n\nexport function Slider(props: SliderProps) {\n const min = () => props.min ?? 0;\n const max = () => props.max ?? 1;\n const step = () => props.step ?? 0.01;\n\n let wrapperRef!: HTMLDivElement;\n let trackRef!: HTMLDivElement;\n let fillRef!: HTMLDivElement;\n let handleRef!: HTMLDivElement;\n let labelRef!: HTMLSpanElement;\n let valueSpanRef!: HTMLSpanElement;\n let inputRef!: HTMLInputElement;\n\n const [isInteracting, setIsInteracting] = createSignal(false);\n const [isDragging, setIsDragging] = createSignal(false);\n const [isHovered, setIsHovered] = createSignal(false);\n const [isValueHovered, setIsValueHovered] = createSignal(false);\n const [isValueEditable, setIsValueEditable] = createSignal(false);\n const [showInput, setShowInput] = createSignal(false);\n const [inputValue, setInputValue] = createSignal('');\n\n const fillPercent = motionValue(((props.value - min()) / (max() - min())) * 100);\n const rubberStretchPx = motionValue(0);\n const handleOpacityMv = motionValue(0);\n const handleScaleXMv = motionValue(0.25);\n const handleScaleYMv = motionValue(1);\n\n const applyFillStyles = (pct: number) => {\n if (fillRef) fillRef.style.width = `${pct}%`;\n if (handleRef) handleRef.style.left = `max(5px, calc(${pct}% - 9px))`;\n };\n\n const applyRubberStyles = (stretch: number) => {\n if (!trackRef) return;\n trackRef.style.width = `calc(100% + ${Math.abs(stretch)}px)`;\n trackRef.style.transform = `translateX(${stretch < 0 ? stretch : 0}px)`;\n };\n\n const applyHandleVisualStyles = () => {\n if (!handleRef) return;\n handleRef.style.opacity = String(handleOpacityMv.get());\n handleRef.style.transform = `translateY(-50%) scaleX(${handleScaleXMv.get()}) scaleY(${handleScaleYMv.get()})`;\n };\n\n // Sync fill from props when not interacting\n createEffect(() => {\n if (!isInteracting() && !snapAnim) {\n fillPercent.jump(((props.value - min()) / (max() - min())) * 100);\n }\n });\n\n const percentage = () => ((props.value - min()) / (max() - min())) * 100;\n const isActive = () => isInteracting() || isHovered();\n\n let pointerDownPos: { x: number; y: number } | null = null;\n let isClickFlag = true;\n let wrapperRect: DOMRect | null = null;\n let scaleVal = 1;\n let hoverTimeout: ReturnType<typeof setTimeout> | null = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let snapAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let rubberAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let handleOpacityAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let handleScaleXAnim: any = null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let handleScaleYAnim: any = null;\n\n const positionToValue = (clientX: number) => {\n if (!wrapperRect) return props.value;\n const screenX = clientX - wrapperRect.left;\n const sceneX = screenX / scaleVal;\n const nativeWidth = wrapperRef ? wrapperRef.offsetWidth : wrapperRect.width;\n const percent = Math.max(0, Math.min(1, sceneX / nativeWidth));\n const rawValue = min() + percent * (max() - min());\n return Math.max(min(), Math.min(max(), rawValue));\n };\n\n const percentFromValue = (v: number) => ((v - min()) / (max() - min())) * 100;\n\n const computeRubberStretch = (clientX: number, sign: number) => {\n if (!wrapperRect) return 0;\n const distancePast = sign < 0 ? wrapperRect.left - clientX : clientX - wrapperRect.right;\n const overflow = Math.max(0, distancePast - DEAD_ZONE);\n return sign * MAX_STRETCH * Math.sqrt(Math.min(overflow / MAX_CURSOR_RANGE, 1.0));\n };\n\n const cancelInteraction = () => {\n if (!isInteracting()) return;\n setIsInteracting(false);\n setIsDragging(false);\n rubberStretchPx.jump(0);\n pointerDownPos = null;\n };\n\n const handlePointerDown = (e: PointerEvent) => {\n if (showInput()) return;\n e.preventDefault();\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n pointerDownPos = { x: e.clientX, y: e.clientY };\n isClickFlag = true;\n setIsInteracting(true);\n\n if (wrapperRef) {\n wrapperRect = wrapperRef.getBoundingClientRect();\n scaleVal = wrapperRect.width / wrapperRef.offsetWidth;\n }\n };\n\n const handlePointerMove = (e: PointerEvent) => {\n if (!isInteracting() || !pointerDownPos) return;\n\n const dx = e.clientX - pointerDownPos.x;\n const dy = e.clientY - pointerDownPos.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (isClickFlag && distance > CLICK_THRESHOLD) {\n isClickFlag = false;\n setIsDragging(true);\n }\n\n if (!isClickFlag) {\n if (wrapperRect) {\n if (e.clientX < wrapperRect.left) {\n rubberStretchPx.jump(computeRubberStretch(e.clientX, -1));\n } else if (e.clientX > wrapperRect.right) {\n rubberStretchPx.jump(computeRubberStretch(e.clientX, 1));\n } else {\n rubberStretchPx.jump(0);\n }\n }\n\n const newValue = positionToValue(e.clientX);\n const newPct = percentFromValue(newValue);\n if (snapAnim) { snapAnim.stop(); snapAnim = null; }\n fillPercent.jump(newPct);\n props.onChange(roundValue(newValue, step()));\n }\n };\n\n const handlePointerUp = (e: PointerEvent) => {\n if (!isInteracting()) return;\n\n if (isClickFlag) {\n const rawValue = positionToValue(e.clientX);\n const discreteSteps = (max() - min()) / step();\n const snappedValue = discreteSteps <= 10\n ? Math.max(min(), Math.min(max(), min() + Math.round((rawValue - min()) / step()) * step()))\n : snapToDecile(rawValue, min(), max());\n\n const newPct = percentFromValue(snappedValue);\n\n if (snapAnim) snapAnim.stop();\n snapAnim = animate(fillPercent, newPct, {\n type: 'spring',\n stiffness: 300,\n damping: 25,\n mass: 0.8,\n onComplete: () => {\n snapAnim = null;\n },\n });\n\n props.onChange(roundValue(snappedValue, step()));\n }\n\n if (rubberStretchPx.get() !== 0) {\n if (rubberAnim) rubberAnim.stop();\n rubberAnim = animate(rubberStretchPx, 0, {\n type: 'spring',\n visualDuration: 0.35,\n bounce: 0.15,\n });\n }\n\n setIsInteracting(false);\n setIsDragging(false);\n pointerDownPos = null;\n };\n\n const handlePointerCancel = () => {\n cancelInteraction();\n };\n\n // Handle value hover delay — clear pending timer on each re-run\n createEffect(() => {\n const hovered = isValueHovered();\n const editing = showInput();\n const editable = isValueEditable();\n\n onCleanup(() => {\n if (hoverTimeout) { clearTimeout(hoverTimeout); hoverTimeout = null; }\n });\n\n if (hovered && !editing && !editable) {\n hoverTimeout = setTimeout(() => setIsValueEditable(true), 800);\n } else if (!hovered && !editing) {\n setIsValueEditable(false);\n }\n });\n\n onCleanup(() => {\n if (hoverTimeout) clearTimeout(hoverTimeout);\n snapAnim?.stop();\n rubberAnim?.stop();\n handleOpacityAnim?.stop();\n handleScaleXAnim?.stop();\n handleScaleYAnim?.stop();\n });\n\n onMount(() => {\n const unsubFill = fillPercent.on('change', applyFillStyles);\n const unsubRubber = rubberStretchPx.on('change', applyRubberStyles);\n const unsubHandleOpacity = handleOpacityMv.on('change', applyHandleVisualStyles);\n const unsubHandleScaleX = handleScaleXMv.on('change', applyHandleVisualStyles);\n const unsubHandleScaleY = handleScaleYMv.on('change', applyHandleVisualStyles);\n applyFillStyles(fillPercent.get());\n applyRubberStyles(rubberStretchPx.get());\n applyHandleVisualStyles();\n\n onCleanup(() => {\n unsubFill();\n unsubRubber();\n unsubHandleOpacity();\n unsubHandleScaleX();\n unsubHandleScaleY();\n });\n });\n\n // Focus input when it appears\n createEffect(() => {\n if (showInput() && inputRef) {\n inputRef.focus();\n inputRef.select();\n }\n });\n\n const handleInputSubmit = () => {\n const parsed = parseFloat(inputValue());\n if (!isNaN(parsed)) {\n const clamped = Math.max(min(), Math.min(max(), parsed));\n props.onChange(roundValue(clamped, step()));\n }\n setShowInput(false);\n setIsValueHovered(false);\n setIsValueEditable(false);\n };\n\n const handleValueClick = (e: MouseEvent) => {\n if (isValueEditable()) {\n e.stopPropagation();\n e.preventDefault();\n setShowInput(true);\n setInputValue(props.value.toFixed(decimalsForStep(step())));\n }\n };\n\n const handleInputKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') handleInputSubmit();\n else if (e.key === 'Escape') {\n setShowInput(false);\n setIsValueHovered(false);\n }\n };\n\n const displayValue = () => props.value.toFixed(decimalsForStep(step()));\n\n // Value dodge: fade handle when it overlaps label or value text\n const HANDLE_BUFFER = 8;\n const LABEL_CSS_LEFT = 10;\n const VALUE_CSS_RIGHT = 10;\n\n const leftThreshold = () => {\n const trackWidth = wrapperRef?.offsetWidth;\n if (trackWidth && labelRef) {\n return ((LABEL_CSS_LEFT + labelRef.offsetWidth + HANDLE_BUFFER) / trackWidth) * 100;\n }\n return 30;\n };\n\n const rightThreshold = () => {\n const trackWidth = wrapperRef?.offsetWidth;\n if (trackWidth && valueSpanRef) {\n return ((trackWidth - VALUE_CSS_RIGHT - valueSpanRef.offsetWidth - HANDLE_BUFFER) / trackWidth) * 100;\n }\n return 78;\n };\n\n const valueDodge = () => percentage() < leftThreshold() || percentage() > rightThreshold();\n\n const handleOpacity = () => {\n if (!isActive()) return 0;\n if (valueDodge()) return 0.1;\n if (isDragging()) return 0.9;\n return 0.5;\n };\n\n createEffect(() => {\n const targetOpacity = handleOpacity();\n const targetScaleX = isActive() ? 1 : 0.25;\n const targetScaleY = isActive() && valueDodge() ? 0.75 : 1;\n\n handleOpacityAnim?.stop();\n handleScaleXAnim?.stop();\n handleScaleYAnim?.stop();\n\n handleOpacityAnim = animate(handleOpacityMv, targetOpacity, { duration: 0.15 });\n handleScaleXAnim = animate(handleScaleXMv, targetScaleX, {\n type: 'spring',\n visualDuration: 0.25,\n bounce: 0.15,\n });\n handleScaleYAnim = animate(handleScaleYMv, targetScaleY, {\n type: 'spring',\n visualDuration: 0.2,\n bounce: 0.1,\n });\n });\n\n const fillBackground = () =>\n isActive() ? 'rgba(255, 255, 255, 0.15)' : 'rgba(255, 255, 255, 0.11)';\n\n const discreteSteps = () => (max() - min()) / step();\n\n const hashMarks = () => {\n const ds = discreteSteps();\n if (ds <= 10) {\n return Array.from({ length: ds - 1 }, (_, i) => {\n const pct = ((i + 1) * step()) / (max() - min()) * 100;\n return <div class=\"dialkit-slider-hashmark\" style={{ left: `${pct}%` }} />;\n });\n }\n return Array.from({ length: 9 }, (_, i) => {\n const pct = (i + 1) * 10;\n return <div class=\"dialkit-slider-hashmark\" style={{ left: `${pct}%` }} />;\n });\n };\n\n return (\n <div ref={wrapperRef} class=\"dialkit-slider-wrapper\">\n <div\n ref={trackRef}\n class={`dialkit-slider ${isActive() ? 'dialkit-slider-active' : ''}`}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerCancel}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <div class=\"dialkit-slider-hashmarks\">{hashMarks()}</div>\n\n <div\n ref={fillRef}\n class=\"dialkit-slider-fill\"\n style={{\n background: fillBackground(),\n width: `${fillPercent.get()}%`,\n transition: 'background 0.15s',\n }}\n />\n\n <div\n ref={handleRef}\n class=\"dialkit-slider-handle\"\n style={{\n left: `max(5px, calc(${fillPercent.get()}% - 9px))`,\n transform: 'translateY(-50%) scaleX(0.25) scaleY(1)',\n opacity: 0,\n background: 'rgba(255, 255, 255, 0.9)',\n }}\n />\n\n <span ref={labelRef} class=\"dialkit-slider-label\">{props.label}</span>\n\n {showInput() ? (\n <input\n ref={inputRef}\n type=\"text\"\n class=\"dialkit-slider-input\"\n value={inputValue()}\n onInput={(e) => setInputValue(e.currentTarget.value)}\n onKeyDown={handleInputKeyDown}\n onBlur={handleInputSubmit}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n />\n ) : (\n <span\n ref={valueSpanRef}\n class={`dialkit-slider-value ${isValueEditable() ? 'dialkit-slider-value-editable' : ''}`}\n onMouseEnter={() => setIsValueHovered(true)}\n onMouseLeave={() => setIsValueHovered(false)}\n onClick={handleValueClick}\n onMouseDown={(e) => isValueEditable() && e.stopPropagation()}\n style={{ cursor: isValueEditable() ? 'text' : 'default' }}\n >\n {displayValue()}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import { createSignal, createRenderEffect, onMount, onCleanup, For } from 'solid-js';\nimport { animate } from 'motion';\n\ninterface SegmentedControlOption<T extends string> {\n value: T;\n label: string;\n}\n\ninterface SegmentedControlProps<T extends string> {\n options: [SegmentedControlOption<T>, SegmentedControlOption<T>];\n value: T;\n onChange: (value: T) => void;\n}\n\nexport function SegmentedControl<T extends string>(props: SegmentedControlProps<T>) {\n let containerRef!: HTMLDivElement;\n let pillRef!: HTMLDivElement;\n const buttonRefs = new Map<T, HTMLButtonElement>();\n const [pillReady, setPillReady] = createSignal(false);\n\n let hasAnimated = false;\n let pillAnim: any = null;\n\n const measurePill = () => {\n const button = buttonRefs.get(props.value);\n if (!button || !containerRef) return null;\n const containerRect = containerRef.getBoundingClientRect();\n const buttonRect = button.getBoundingClientRect();\n return {\n left: buttonRect.left - containerRect.left,\n width: buttonRect.width,\n };\n };\n\n const setPillImmediate = (left: number, width: number) => {\n if (!pillRef) return;\n pillRef.style.left = `${left}px`;\n pillRef.style.width = `${width}px`;\n };\n\n const updatePill = (shouldAnimate: boolean) => {\n const next = measurePill();\n if (!next) return;\n\n if (!pillReady()) {\n setPillImmediate(next.left, next.width);\n setPillReady(true);\n return;\n }\n\n if (!shouldAnimate || !hasAnimated) {\n pillAnim?.stop();\n pillAnim = null;\n setPillImmediate(next.left, next.width);\n return;\n }\n\n pillAnim?.stop();\n pillAnim = animate(pillRef, {\n left: next.left,\n width: next.width,\n }, {\n type: 'spring',\n visualDuration: 0.2,\n bounce: 0.15,\n onComplete: () => {\n pillAnim = null;\n },\n });\n };\n\n createRenderEffect(() => {\n const _ = props.value;\n if (!pillReady()) return;\n updatePill(true);\n });\n\n onMount(() => {\n requestAnimationFrame(() => {\n updatePill(false);\n hasAnimated = true;\n });\n\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(() => updatePill(false));\n ro.observe(containerRef);\n\n onCleanup(() => {\n pillAnim?.stop();\n ro.disconnect();\n });\n });\n\n return (\n <div ref={containerRef} class=\"dialkit-segmented\">\n <div\n ref={pillRef}\n class=\"dialkit-segmented-pill\"\n style={{ left: '0px', width: '0px', visibility: pillReady() ? 'visible' : 'hidden' }}\n />\n <For each={props.options}>\n {(option) => (\n <button\n ref={(el) => {\n if (!el) return;\n buttonRefs.set(option.value, el);\n }}\n onClick={() => props.onChange(option.value)}\n class=\"dialkit-segmented-button\"\n data-active={String(props.value === option.value)}\n >\n {option.label}\n </button>\n )}\n </For>\n </div>\n );\n}\n","import { SegmentedControl } from './SegmentedControl';\n\ninterface ToggleProps {\n label: string;\n checked: boolean;\n onChange: (checked: boolean) => void;\n}\n\nexport function Toggle(props: ToggleProps) {\n return (\n <div class=\"dialkit-labeled-control\">\n <span class=\"dialkit-labeled-control-label\">{props.label}</span>\n <SegmentedControl\n options={[\n { value: 'off' as const, label: 'Off' },\n { value: 'on' as const, label: 'On' },\n ]}\n value={props.checked ? 'on' : 'off'}\n onChange={(val) => props.onChange(val === 'on')}\n />\n </div>\n );\n}\n","import { createSignal, onMount, onCleanup } from 'solid-js';\nimport { DialStore } from '../../store/DialStore';\nimport type { SpringConfig } from '../../store/DialStore';\nimport { Folder } from './Folder';\nimport { Slider } from './Slider';\nimport { SegmentedControl } from './SegmentedControl';\nimport { SpringVisualization } from './SpringVisualization';\n\ninterface SpringControlProps {\n panelId: string;\n path: string;\n label: string;\n spring: SpringConfig;\n onChange: (spring: SpringConfig) => void;\n}\n\nexport function SpringControl(props: SpringControlProps) {\n const [mode, setMode] = createSignal<'simple' | 'advanced'>(\n DialStore.getSpringMode(props.panelId, props.path)\n );\n\n // Subscribe to store changes for mode\n onMount(() => {\n const unsub = DialStore.subscribe(props.panelId, () => {\n setMode(DialStore.getSpringMode(props.panelId, props.path));\n });\n onCleanup(unsub);\n });\n\n const isSimpleMode = () => mode() === 'simple';\n\n const handleModeChange = (newMode: 'simple' | 'advanced') => {\n DialStore.updateSpringMode(props.panelId, props.path, newMode);\n\n if (newMode === 'simple') {\n const { stiffness, damping, mass, ...rest } = props.spring;\n props.onChange({\n ...rest,\n type: 'spring',\n visualDuration: props.spring.visualDuration ?? 0.3,\n bounce: props.spring.bounce ?? 0.2,\n });\n } else {\n const { visualDuration, bounce, ...rest } = props.spring;\n props.onChange({\n ...rest,\n type: 'spring',\n stiffness: props.spring.stiffness ?? 200,\n damping: props.spring.damping ?? 25,\n mass: props.spring.mass ?? 1,\n });\n }\n };\n\n const handleUpdate = (key: keyof SpringConfig, value: number) => {\n if (isSimpleMode()) {\n const { stiffness, damping, mass, ...rest } = props.spring;\n props.onChange({ ...rest, [key]: value });\n } else {\n const { visualDuration, bounce, ...rest } = props.spring;\n props.onChange({ ...rest, [key]: value });\n }\n };\n\n return (\n <Folder title={props.label} defaultOpen={true}>\n <div style={{ display: 'flex', 'flex-direction': 'column', gap: '6px' }}>\n <SpringVisualization spring={props.spring} isSimpleMode={isSimpleMode()} />\n\n <div class=\"dialkit-labeled-control\">\n <span class=\"dialkit-labeled-control-label\">Type</span>\n <SegmentedControl\n options={[\n { value: 'simple' as const, label: 'Time' },\n { value: 'advanced' as const, label: 'Physics' },\n ]}\n value={mode()}\n onChange={handleModeChange}\n />\n </div>\n\n {isSimpleMode() ? (\n <>\n <Slider\n label=\"Duration\"\n value={props.spring.visualDuration ?? 0.3}\n onChange={(v) => handleUpdate('visualDuration', v)}\n min={0.1}\n max={1}\n step={0.05}\n unit=\"s\"\n />\n <Slider\n label=\"Bounce\"\n value={props.spring.bounce ?? 0.2}\n onChange={(v) => handleUpdate('bounce', v)}\n min={0}\n max={1}\n step={0.05}\n />\n </>\n ) : (\n <>\n <Slider\n label=\"Stiffness\"\n value={props.spring.stiffness ?? 400}\n onChange={(v) => handleUpdate('stiffness', v)}\n min={1}\n max={1000}\n step={10}\n />\n <Slider\n label=\"Damping\"\n value={props.spring.damping ?? 17}\n onChange={(v) => handleUpdate('damping', v)}\n min={1}\n max={100}\n step={1}\n />\n <Slider\n label=\"Mass\"\n value={props.spring.mass ?? 1}\n onChange={(v) => handleUpdate('mass', v)}\n min={0.1}\n max={10}\n step={0.1}\n />\n </>\n )}\n </div>\n </Folder>\n );\n}\n","import type { SpringConfig } from '../../store/DialStore';\n\ninterface SpringVisualizationProps {\n spring: SpringConfig;\n isSimpleMode: boolean;\n}\n\nfunction generateSpringCurve(\n stiffness: number,\n damping: number,\n mass: number,\n duration: number\n): [number, number][] {\n const points: [number, number][] = [];\n const steps = 100;\n const dt = duration / steps;\n\n let position = 0;\n let velocity = 0;\n const target = 1;\n\n for (let i = 0; i <= steps; i++) {\n const time = i * dt;\n points.push([time, position]);\n\n const springForce = -stiffness * (position - target);\n const dampingForce = -damping * velocity;\n const acceleration = (springForce + dampingForce) / mass;\n\n velocity += acceleration * dt;\n position += velocity * dt;\n }\n\n return points;\n}\n\nexport function SpringVisualization(props: SpringVisualizationProps) {\n const width = 256;\n const height = 140;\n\n const params = () => {\n let stiffness: number;\n let damping: number;\n let mass: number;\n\n if (props.isSimpleMode) {\n const visualDuration = props.spring.visualDuration ?? 0.3;\n const bounce = props.spring.bounce ?? 0.2;\n mass = 1;\n stiffness = Math.pow((2 * Math.PI) / visualDuration, 2);\n const dampingRatio = 1 - bounce;\n damping = 2 * dampingRatio * Math.sqrt(stiffness * mass);\n } else {\n stiffness = props.spring.stiffness ?? 400;\n damping = props.spring.damping ?? 17;\n mass = props.spring.mass ?? 1;\n }\n\n const duration = 2;\n const points = generateSpringCurve(stiffness, damping, mass, duration);\n const values = points.map(([, value]) => value);\n const minValue = Math.min(...values);\n const maxValue = Math.max(...values);\n const valueRange = maxValue - minValue;\n\n const pathData = points\n .map(([time, value], i) => {\n const x = (time / duration) * width;\n const normalizedValue = (value - minValue) / (valueRange || 1);\n const y = height - (normalizedValue * height * 0.6 + height * 0.2);\n return `${i === 0 ? 'M' : 'L'} ${x} ${y}`;\n })\n .join(' ');\n\n return pathData;\n };\n\n const gridLines = () => {\n const lines = [];\n for (let i = 1; i < 4; i++) {\n const x = (width / 4) * i;\n const y = (height / 4) * i;\n lines.push(\n <line x1={x} y1={0} x2={x} y2={height} stroke=\"rgba(255, 255, 255, 0.08)\" stroke-width=\"1\" />,\n <line x1={0} y1={y} x2={width} y2={y} stroke=\"rgba(255, 255, 255, 0.08)\" stroke-width=\"1\" />\n );\n }\n return lines;\n };\n\n return (\n <svg viewBox={`0 0 ${width} ${height}`} class=\"dialkit-spring-viz\">\n {gridLines()}\n <line\n x1={0}\n y1={height / 2}\n x2={width}\n y2={height / 2}\n stroke=\"rgba(255, 255, 255, 0.15)\"\n stroke-width=\"1\"\n stroke-dasharray=\"4,4\"\n />\n <path\n d={params()}\n fill=\"none\"\n stroke=\"rgba(255, 255, 255, 0.6)\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n );\n}\n","import { createUniqueId } from 'solid-js';\n\ninterface TextControlProps {\n label: string;\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n}\n\nexport function TextControl(props: TextControlProps) {\n const inputId = createUniqueId();\n\n return (\n <div class=\"dialkit-text-control\">\n <label class=\"dialkit-text-label\" for={inputId}>{props.label}</label>\n <input\n id={inputId}\n type=\"text\"\n class=\"dialkit-text-input\"\n value={props.value}\n onInput={(e) => props.onChange(e.currentTarget.value)}\n placeholder={props.placeholder}\n />\n </div>\n );\n}\n","import { createSignal, createEffect, onMount, onCleanup, Show, For } from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { animate } from 'motion';\n\ntype SelectOption = string | { value: string; label: string };\n\ninterface SelectControlProps {\n label: string;\n value: string;\n options: SelectOption[];\n onChange: (value: string) => void;\n}\n\nfunction toTitleCase(s: string): string {\n return s.replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\nfunction normalizeOptions(options: SelectOption[]): { value: string; label: string }[] {\n return options.map((opt) =>\n typeof opt === 'string' ? { value: opt, label: toTitleCase(opt) } : opt\n );\n}\n\nexport function SelectControl(props: SelectControlProps) {\n const [isOpen, setIsOpen] = createSignal(false);\n const [mounted, setMounted] = createSignal(false);\n const [pos, setPos] = createSignal<{ top: number; left: number; width: number; above: boolean } | null>(null);\n const [portalTarget, setPortalTarget] = createSignal<HTMLElement | null>(null);\n let triggerRef!: HTMLButtonElement;\n let dropdownRef: HTMLDivElement | undefined;\n let chevronRef!: SVGSVGElement;\n let closeAnim: any = null;\n let chevronAnim: any = null;\n\n const normalized = () => normalizeOptions(props.options);\n const selectedOption = () => normalized().find((o) => o.value === props.value);\n\n onMount(() => {\n const root = triggerRef?.closest('.dialkit-root') as HTMLElement | null;\n setPortalTarget(root ?? document.body);\n\n if (chevronRef) {\n chevronRef.style.transform = `rotate(${isOpen() ? 180 : 0}deg)`;\n }\n\n onCleanup(() => {\n closeAnim?.stop();\n chevronAnim?.stop();\n });\n });\n\n createEffect(() => {\n if (!chevronRef) return;\n const open = isOpen();\n chevronAnim?.stop();\n chevronAnim = animate(\n chevronRef,\n { rotate: open ? 180 : 0 },\n { type: 'spring', visualDuration: 0.2, bounce: 0.15 }\n );\n });\n\n const updatePos = () => {\n if (!triggerRef) return;\n const rect = triggerRef.getBoundingClientRect();\n const dropdownHeight = 8 + normalized().length * 36;\n const spaceBelow = window.innerHeight - rect.bottom - 4;\n const above = spaceBelow < dropdownHeight && rect.top > spaceBelow;\n setPos({\n top: above ? rect.top - 4 : rect.bottom + 4,\n left: rect.left,\n width: rect.width,\n above,\n });\n };\n\n const openDropdown = () => {\n closeAnim?.stop();\n closeAnim = null;\n updatePos();\n setMounted(true);\n setIsOpen(true);\n };\n\n const closeDropdown = () => {\n setIsOpen(false);\n if (!dropdownRef) { setMounted(false); return; }\n const above = pos()?.above ?? false;\n closeAnim?.stop();\n closeAnim = animate(\n dropdownRef,\n { opacity: 0, y: above ? 8 : -8, scale: 0.95 },\n { type: 'spring', visualDuration: 0.15, bounce: 0, onComplete: () => { setMounted(false); closeAnim = null; } }\n );\n };\n\n // Close on click outside\n createEffect(() => {\n if (!isOpen()) return;\n const handleViewportChange = () => updatePos();\n\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n triggerRef && !triggerRef.contains(target) &&\n dropdownRef && !dropdownRef.contains(target)\n ) {\n closeDropdown();\n }\n };\n\n updatePos();\n document.addEventListener('mousedown', handleClick);\n window.addEventListener('resize', handleViewportChange);\n window.addEventListener('scroll', handleViewportChange, true);\n onCleanup(() => {\n document.removeEventListener('mousedown', handleClick);\n window.removeEventListener('resize', handleViewportChange);\n window.removeEventListener('scroll', handleViewportChange, true);\n });\n });\n\n const dropdownStyle = () => {\n const p = pos();\n if (!p) return {};\n return {\n position: 'fixed' as const,\n left: `${p.left}px`,\n width: `${p.width}px`,\n ...(p.above\n ? { bottom: `${window.innerHeight - p.top}px`, 'transform-origin': 'bottom' }\n : { top: `${p.top}px`, 'transform-origin': 'top' }),\n };\n };\n\n return (\n <div class=\"dialkit-select-row\">\n <button\n ref={triggerRef}\n class=\"dialkit-select-trigger\"\n onClick={() => isOpen() ? closeDropdown() : openDropdown()}\n data-open={String(isOpen())}\n >\n <span class=\"dialkit-select-label\">{props.label}</span>\n <div class=\"dialkit-select-right\">\n <span class=\"dialkit-select-value\">{selectedOption()?.label ?? props.value}</span>\n <svg\n ref={chevronRef}\n class=\"dialkit-select-chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M6 9.5L12 15.5L18 9.5\" />\n </svg>\n </div>\n </button>\n\n <Show when={!!portalTarget()}>\n <Portal mount={portalTarget()!}>\n <Show when={mounted() && pos()}>\n <div\n ref={(el) => {\n dropdownRef = el;\n const above = pos()?.above ?? false;\n animate(\n el,\n { opacity: [0, 1], y: [above ? 8 : -8, 0], scale: [0.95, 1] },\n { type: 'spring', visualDuration: 0.15, bounce: 0 }\n );\n }}\n class=\"dialkit-select-dropdown\"\n style={dropdownStyle()}\n >\n <For each={normalized()}>\n {(option) => (\n <button\n class=\"dialkit-select-option\"\n data-selected={String(option.value === props.value)}\n onClick={() => {\n props.onChange(option.value);\n closeDropdown();\n }}\n >\n {option.label}\n </button>\n )}\n </For>\n </div>\n </Show>\n </Portal>\n </Show>\n </div>\n );\n}\n","import { createSignal, createEffect, createUniqueId, Show } from 'solid-js';\n\ninterface ColorControlProps {\n label: string;\n value: string;\n onChange: (value: string) => void;\n}\n\nconst HEX_COLOR_REGEX = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/;\n\nfunction expandShorthandHex(hex: string): string {\n if (hex.length !== 4) return hex;\n return `#${hex[1]}${hex[1]}${hex[2]}${hex[2]}${hex[3]}${hex[3]}`;\n}\n\nexport function ColorControl(props: ColorControlProps) {\n const [isEditing, setIsEditing] = createSignal(false);\n const [editValue, setEditValue] = createSignal(props.value);\n const textInputId = createUniqueId();\n let colorInputRef!: HTMLInputElement;\n\n // Sync editValue when value changes externally\n createEffect(() => {\n if (!isEditing()) {\n setEditValue(props.value);\n }\n });\n\n const handleTextSubmit = () => {\n setIsEditing(false);\n if (HEX_COLOR_REGEX.test(editValue())) {\n props.onChange(editValue());\n } else {\n setEditValue(props.value);\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') handleTextSubmit();\n else if (e.key === 'Escape') {\n setIsEditing(false);\n setEditValue(props.value);\n }\n };\n\n return (\n <div class=\"dialkit-color-control\">\n <label class=\"dialkit-color-label\" for={textInputId}>{props.label}</label>\n <div class=\"dialkit-color-inputs\">\n <Show\n when={isEditing()}\n fallback={\n <span class=\"dialkit-color-hex\" onClick={() => setIsEditing(true)}>\n {(props.value ?? '').toUpperCase()}\n </span>\n }\n >\n <input\n id={textInputId}\n type=\"text\"\n class=\"dialkit-color-hex-input\"\n value={editValue()}\n onInput={(e) => setEditValue(e.currentTarget.value)}\n onBlur={handleTextSubmit}\n onKeyDown={handleKeyDown}\n autofocus\n />\n </Show>\n <button\n class=\"dialkit-color-swatch\"\n style={{ 'background-color': props.value }}\n onClick={() => colorInputRef?.click()}\n title=\"Pick color\"\n aria-label={`Pick color for ${props.label}`}\n />\n <input\n ref={colorInputRef}\n type=\"color\"\n class=\"dialkit-color-picker-native\"\n aria-label={`${props.label} color picker`}\n value={props.value.length === 4 ? expandShorthandHex(props.value) : props.value.slice(0, 7)}\n onInput={(e) => props.onChange(e.currentTarget.value)}\n />\n </div>\n </div>\n );\n}\n","import { createSignal, createEffect, onMount, onCleanup, Show, For } from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { animate } from 'motion';\nimport { DialStore } from '../../store/DialStore';\nimport type { Preset } from '../../store/DialStore';\n\ninterface PresetManagerProps {\n panelId: string;\n presets: Preset[];\n activePresetId: string | null;\n onAdd: () => void;\n}\n\nexport function PresetManager(props: PresetManagerProps) {\n const [isOpen, setIsOpen] = createSignal(false);\n const [mounted, setMounted] = createSignal(false);\n const [pos, setPos] = createSignal({ top: 0, left: 0, width: 0 });\n const [portalTarget, setPortalTarget] = createSignal<HTMLElement | null>(null);\n let triggerRef!: HTMLButtonElement;\n let dropdownRef: HTMLDivElement | undefined;\n let chevronRef!: SVGSVGElement;\n let closeAnim: any = null;\n let chevronAnim: any = null;\n\n const hasPresets = () => props.presets.length > 0;\n const activePreset = () => props.presets.find((p) => p.id === props.activePresetId);\n\n onMount(() => {\n const root = triggerRef?.closest('.dialkit-root') as HTMLElement | null;\n setPortalTarget(root ?? document.body);\n\n if (chevronRef) {\n chevronRef.style.transform = `rotate(${isOpen() ? 180 : 0}deg)`;\n chevronRef.style.opacity = String(hasPresets() ? 0.6 : 0.25);\n }\n\n onCleanup(() => {\n closeAnim?.stop();\n chevronAnim?.stop();\n });\n });\n\n createEffect(() => {\n if (!chevronRef) return;\n const open = isOpen();\n const has = hasPresets();\n chevronAnim?.stop();\n chevronAnim = animate(\n chevronRef,\n { rotate: open ? 180 : 0, opacity: has ? 0.6 : 0.25 },\n { type: 'spring', visualDuration: 0.2, bounce: 0.15 }\n );\n });\n\n const updatePos = () => {\n const rect = triggerRef?.getBoundingClientRect();\n if (!rect) return;\n setPos({ top: rect.bottom + 4, left: rect.left, width: rect.width });\n };\n\n const openDropdown = () => {\n if (!hasPresets()) return;\n updatePos();\n closeAnim?.stop();\n closeAnim = null;\n setMounted(true);\n setIsOpen(true);\n };\n\n const closeDropdown = () => {\n setIsOpen(false);\n if (!dropdownRef) { setMounted(false); return; }\n closeAnim?.stop();\n closeAnim = animate(\n dropdownRef,\n { opacity: 0, y: 4, scale: 0.97 },\n { type: 'spring', visualDuration: 0.15, bounce: 0, onComplete: () => { setMounted(false); closeAnim = null; } }\n );\n };\n\n const toggle = () => { if (isOpen()) closeDropdown(); else openDropdown(); };\n\n // Close on click outside\n createEffect(() => {\n if (!isOpen()) return;\n const handleViewportChange = () => updatePos();\n const handler = (e: MouseEvent) => {\n const target = e.target as Node;\n if (triggerRef?.contains(target) || dropdownRef?.contains(target)) return;\n closeDropdown();\n };\n updatePos();\n document.addEventListener('mousedown', handler);\n window.addEventListener('resize', handleViewportChange);\n window.addEventListener('scroll', handleViewportChange, true);\n onCleanup(() => {\n document.removeEventListener('mousedown', handler);\n window.removeEventListener('resize', handleViewportChange);\n window.removeEventListener('scroll', handleViewportChange, true);\n });\n });\n\n const handleSelect = (presetId: string | null) => {\n if (presetId) DialStore.loadPreset(props.panelId, presetId);\n else DialStore.clearActivePreset(props.panelId);\n closeDropdown();\n };\n\n const handleDelete = (e: MouseEvent, presetId: string) => {\n e.stopPropagation();\n DialStore.deletePreset(props.panelId, presetId);\n };\n\n return (\n <div class=\"dialkit-preset-manager\">\n <button\n ref={triggerRef}\n class=\"dialkit-preset-trigger\"\n onClick={toggle}\n data-open={String(isOpen())}\n data-has-preset={String(!!activePreset())}\n data-disabled={String(!hasPresets())}\n >\n <span class=\"dialkit-preset-label\">\n {activePreset() ? activePreset()!.name : 'Version 1'}\n </span>\n <svg\n ref={chevronRef}\n class=\"dialkit-select-chevron\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M6 9.5L12 15.5L18 9.5\" />\n </svg>\n </button>\n\n <Show when={!!portalTarget()}>\n <Portal mount={portalTarget()!}>\n <Show when={mounted()}>\n <div\n ref={(el) => {\n dropdownRef = el;\n animate(\n el,\n { opacity: [0, 1], y: [4, 0], scale: [0.97, 1] },\n { type: 'spring', visualDuration: 0.15, bounce: 0 }\n );\n }}\n class=\"dialkit-root dialkit-preset-dropdown\"\n style={{\n position: 'fixed',\n top: `${pos().top}px`,\n left: `${pos().left}px`,\n 'min-width': `${pos().width}px`,\n }}\n >\n <div\n class=\"dialkit-preset-item\"\n data-active={String(!props.activePresetId)}\n onClick={() => handleSelect(null)}\n >\n <span class=\"dialkit-preset-name\">Version 1</span>\n </div>\n\n <For each={props.presets}>\n {(preset) => (\n <div\n class=\"dialkit-preset-item\"\n data-active={String(preset.id === props.activePresetId)}\n onClick={() => handleSelect(preset.id)}\n >\n <span class=\"dialkit-preset-name\">{preset.name}</span>\n <button\n class=\"dialkit-preset-delete\"\n onClick={(e) => handleDelete(e, preset.id)}\n title=\"Delete preset\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M5 6.5L5.80734 18.2064C5.91582 19.7794 7.22348 21 8.80023 21H15.1998C16.7765 21 18.0842 19.7794 18.1927 18.2064L19 6.5\" />\n <path d=\"M10 11V16\" />\n <path d=\"M14 11V16\" />\n <path d=\"M3.5 6H20.5\" />\n <path d=\"M8.07092 5.74621C8.42348 3.89745 10.0485 2.5 12 2.5C13.9515 2.5 15.5765 3.89745 15.9291 5.74621\" />\n </svg>\n </button>\n </div>\n )}\n </For>\n </div>\n </Show>\n </Portal>\n </Show>\n </div>\n );\n}\n","import { For } from 'solid-js';\n\ninterface ButtonGroupProps {\n buttons: Array<{\n label: string;\n onClick: () => void;\n }>;\n}\n\nexport function ButtonGroup(props: ButtonGroupProps) {\n return (\n <div class=\"dialkit-button-group\">\n <For each={props.buttons}>\n {(button) => (\n <button class=\"dialkit-button\" onClick={button.onClick}>\n {button.label}\n </button>\n )}\n </For>\n </div>\n );\n}\n"],"mappings":";AAAA,SAAS,cAAc,YAAY,SAAS,WAAW,sBAAqC;;;AC+F5F,IAAM,eAA0C,OAAO,OAAO,CAAC,CAAC;AAEhE,IAAM,iBAAN,MAAqB;AAAA,EAArB;AACE,SAAQ,SAAmC,oBAAI,IAAI;AACnD,SAAQ,YAAwC,oBAAI,IAAI;AACxD,SAAQ,kBAAiC,oBAAI,IAAI;AACjD,SAAQ,YAAoD,oBAAI,IAAI;AACpE,SAAQ,kBAAoD,oBAAI,IAAI;AACpE,SAAQ,UAAiC,oBAAI,IAAI;AACjD,SAAQ,eAA2C,oBAAI,IAAI;AAC3D,SAAQ,aAAqD,oBAAI,IAAI;AAAA;AAAA,EAErE,cAAc,IAAY,MAAc,QAA0B;AAChE,UAAM,WAAW,KAAK,YAAY,QAAQ,EAAE;AAC5C,UAAM,SAAS,KAAK,cAAc,QAAQ,EAAE;AAG5C,SAAK,oBAAoB,QAAQ,IAAI,MAAM;AAE3C,SAAK,OAAO,IAAI,IAAI,EAAE,IAAI,MAAM,UAAU,OAAO,CAAC;AAClD,SAAK,UAAU,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC;AACpC,SAAK,WAAW,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC;AACrC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,YAAY,IAAY,MAAc,QAA0B;AAC9D,UAAM,WAAW,KAAK,OAAO,IAAI,EAAE;AACnC,QAAI,CAAC,UAAU;AACb,WAAK,cAAc,IAAI,MAAM,MAAM;AACnC;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,YAAY,QAAQ,EAAE;AAC5C,UAAM,iBAAiB,KAAK,kBAAkB,QAAQ;AACtD,UAAM,gBAAgB,KAAK,cAAc,QAAQ,EAAE;AACnD,UAAM,aAAwC,CAAC;AAE/C,eAAW,CAAC,MAAM,YAAY,KAAK,OAAO,QAAQ,aAAa,GAAG;AAChE,iBAAW,IAAI,IAAI,KAAK;AAAA,QACtB,SAAS,OAAO,IAAI;AAAA,QACpB;AAAA,QACA,eAAe,IAAI,IAAI;AAAA,MACzB;AAAA,IACF;AAGA,SAAK,oBAAoB,QAAQ,IAAI,UAAU;AAE/C,eAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,SAAS,MAAM,GAAG;AAC1D,UAAI,CAAC,KAAK,SAAS,SAAS,GAAG;AAC7B;AAAA,MACF;AAEA,YAAM,iBAAiB,KAAK,MAAM,GAAG,CAAC,SAAS,SAAS,CAAC;AACzD,YAAM,oBAAoB,eAAe,IAAI,cAAc;AAC3D,UAAI,mBAAmB,SAAS,cAAc;AAC5C,mBAAW,IAAI,IAAI;AAAA,MACrB;AAAA,IACF;AAEA,UAAM,YAAyB,EAAE,IAAI,MAAM,UAAU,QAAQ,WAAW;AACxE,SAAK,OAAO,IAAI,IAAI,SAAS;AAC7B,SAAK,UAAU,IAAI,IAAI,EAAE,GAAG,WAAW,CAAC;AAExC,UAAM,qBAAqB,KAAK,WAAW,IAAI,EAAE,KAAK,CAAC;AACvD,UAAM,iBAA4C,CAAC;AACnD,eAAW,CAAC,MAAM,YAAY,KAAK,OAAO,QAAQ,aAAa,GAAG;AAChE,qBAAe,IAAI,IAAI,KAAK;AAAA,QAC1B,mBAAmB,IAAI;AAAA,QACvB;AAAA,QACA,eAAe,IAAI,IAAI;AAAA,MACzB;AAAA,IACF;AAEA,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACtD,UAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,uBAAe,IAAI,IAAI;AAAA,MACzB;AAAA,IACF;AAEA,SAAK,WAAW,IAAI,IAAI,cAAc;AAEtC,SAAK,OAAO,EAAE;AACd,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,gBAAgB,IAAkB;AAChC,SAAK,OAAO,OAAO,EAAE;AACrB,SAAK,UAAU,OAAO,EAAE;AACxB,SAAK,UAAU,OAAO,EAAE;AACxB,SAAK,gBAAgB,OAAO,EAAE;AAC9B,SAAK,WAAW,OAAO,EAAE;AACzB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,YAAY,SAAiB,MAAc,OAAwB;AACjE,UAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,QAAI,CAAC,MAAO;AAEZ,UAAM,OAAO,IAAI,IAAI;AAGrB,UAAM,WAAW,KAAK,aAAa,IAAI,OAAO;AAC9C,QAAI,UAAU;AACZ,YAAM,UAAU,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC;AAC9C,YAAM,SAAS,QAAQ,KAAK,OAAK,EAAE,OAAO,QAAQ;AAClD,UAAI,OAAQ,QAAO,OAAO,IAAI,IAAI;AAAA,IACpC,OAAO;AACL,YAAM,OAAO,KAAK,WAAW,IAAI,OAAO;AACxC,UAAI,KAAM,MAAK,IAAI,IAAI;AAAA,IACzB;AAGA,SAAK,UAAU,IAAI,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC;AAC/C,SAAK,OAAO,OAAO;AAAA,EACrB;AAAA,EAEA,iBAAiB,SAAiB,MAAc,MAAmC;AACjF,SAAK,qBAAqB,SAAS,MAAM,IAAI;AAAA,EAC/C;AAAA,EAEA,cAAc,SAAiB,MAAqC;AAClE,UAAM,OAAO,KAAK,kBAAkB,SAAS,IAAI;AACjD,QAAI,SAAS,SAAU,QAAO;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,qBAAqB,SAAiB,MAAc,MAA8C;AAChG,UAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,QAAI,CAAC,MAAO;AAEZ,UAAM,OAAO,GAAG,IAAI,SAAS,IAAI;AACjC,SAAK,UAAU,IAAI,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC;AAC/C,SAAK,OAAO,OAAO;AAAA,EACrB;AAAA,EAEA,kBAAkB,SAAiB,MAAgD;AACjF,UAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,QAAI,CAAC,MAAO,QAAO;AACnB,WAAQ,MAAM,OAAO,GAAG,IAAI,SAAS,KAA0C;AAAA,EACjF;AAAA,EAEA,SAAS,SAAiB,MAAqC;AAC7D,UAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,WAAO,OAAO,OAAO,IAAI;AAAA,EAC3B;AAAA,EAEA,UAAU,SAA4C;AAGpD,WAAO,KAAK,UAAU,IAAI,OAAO,KAAK;AAAA,EACxC;AAAA,EAEA,YAA2B;AACzB,WAAO,MAAM,KAAK,KAAK,OAAO,OAAO,CAAC;AAAA,EACxC;AAAA,EAEA,SAAS,IAAqC;AAC5C,WAAO,KAAK,OAAO,IAAI,EAAE;AAAA,EAC3B;AAAA,EAEA,UAAU,SAAiB,UAAgC;AACzD,QAAI,CAAC,KAAK,UAAU,IAAI,OAAO,GAAG;AAChC,WAAK,UAAU,IAAI,SAAS,oBAAI,IAAI,CAAC;AAAA,IACvC;AACA,SAAK,UAAU,IAAI,OAAO,EAAG,IAAI,QAAQ;AAEzC,WAAO,MAAM;AACX,WAAK,UAAU,IAAI,OAAO,GAAG,OAAO,QAAQ;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,gBAAgB,UAAgC;AAC9C,SAAK,gBAAgB,IAAI,QAAQ;AACjC,WAAO,MAAM,KAAK,gBAAgB,OAAO,QAAQ;AAAA,EACnD;AAAA,EAEA,iBAAiB,SAAiB,UAAsC;AACtE,QAAI,CAAC,KAAK,gBAAgB,IAAI,OAAO,GAAG;AACtC,WAAK,gBAAgB,IAAI,SAAS,oBAAI,IAAI,CAAC;AAAA,IAC7C;AACA,SAAK,gBAAgB,IAAI,OAAO,EAAG,IAAI,QAAQ;AAE/C,WAAO,MAAM;AACX,WAAK,gBAAgB,IAAI,OAAO,GAAG,OAAO,QAAQ;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,cAAc,SAAiB,MAAoB;AACjD,SAAK,gBAAgB,IAAI,OAAO,GAAG,QAAQ,QAAM,GAAG,IAAI,CAAC;AAAA,EAC3D;AAAA,EAEA,WAAW,SAAiB,MAAsB;AAChD,UAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,SAAS,OAAO,YAAY;AAExD,UAAM,KAAK,UAAU,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AACzE,UAAM,SAAiB;AAAA,MACrB;AAAA,MACA;AAAA,MACA,QAAQ,EAAE,GAAG,MAAM,OAAO;AAAA,IAC5B;AAEA,UAAM,WAAW,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC;AAC/C,SAAK,QAAQ,IAAI,SAAS,CAAC,GAAG,UAAU,MAAM,CAAC;AAC/C,SAAK,aAAa,IAAI,SAAS,EAAE;AAGjC,SAAK,UAAU,IAAI,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC;AAC/C,SAAK,OAAO,OAAO;AAEnB,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,SAAiB,UAAwB;AAClD,UAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,QAAI,CAAC,MAAO;AAEZ,UAAM,UAAU,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC;AAC9C,UAAM,SAAS,QAAQ,KAAK,OAAK,EAAE,OAAO,QAAQ;AAClD,QAAI,CAAC,OAAQ;AAGb,UAAM,SAAS,EAAE,GAAG,OAAO,OAAO;AAClC,SAAK,UAAU,IAAI,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC;AAC/C,SAAK,aAAa,IAAI,SAAS,QAAQ;AACvC,SAAK,OAAO,OAAO;AAAA,EACrB;AAAA,EAEA,aAAa,SAAiB,UAAwB;AACpD,UAAM,UAAU,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC;AAC9C,SAAK,QAAQ,IAAI,SAAS,QAAQ,OAAO,OAAK,EAAE,OAAO,QAAQ,CAAC;AAGhE,QAAI,KAAK,aAAa,IAAI,OAAO,MAAM,UAAU;AAC/C,WAAK,aAAa,IAAI,SAAS,IAAI;AAAA,IACrC;AAGA,UAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,QAAI,OAAO;AACT,WAAK,UAAU,IAAI,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC;AAAA,IACjD;AACA,SAAK,OAAO,OAAO;AAAA,EACrB;AAAA,EAEA,WAAW,SAA2B;AACpC,WAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC;AAAA,EACvC;AAAA,EAEA,kBAAkB,SAAgC;AAChD,WAAO,KAAK,aAAa,IAAI,OAAO,KAAK;AAAA,EAC3C;AAAA,EAEA,kBAAkB,SAAuB;AACvC,UAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,UAAM,OAAO,KAAK,WAAW,IAAI,OAAO;AACxC,QAAI,SAAS,MAAM;AACjB,YAAM,SAAS,EAAE,GAAG,KAAK;AACzB,WAAK,UAAU,IAAI,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC;AAAA,IACjD;AACA,SAAK,aAAa,IAAI,SAAS,IAAI;AACnC,SAAK,OAAO,OAAO;AAAA,EACrB;AAAA,EAEQ,OAAO,SAAuB;AACpC,SAAK,UAAU,IAAI,OAAO,GAAG,QAAQ,QAAM,GAAG,CAAC;AAAA,EACjD;AAAA,EAEQ,eAAqB;AAC3B,SAAK,gBAAgB,QAAQ,QAAM,GAAG,CAAC;AAAA,EACzC;AAAA,EAEQ,oBAAoB,QAAoB,QAAgB,QAAyC;AACvG,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,UAAI,QAAQ,aAAc;AAC1B,YAAM,OAAO,SAAS,GAAG,MAAM,IAAI,GAAG,KAAK;AAE3C,UAAI,KAAK,eAAe,KAAK,GAAG;AAC9B,eAAO,GAAG,IAAI,SAAS,IAAI;AAAA,MAC7B,WAAW,KAAK,eAAe,KAAK,GAAG;AAErC,cAAM,aAAa,MAAM,cAAc,UAAa,MAAM,YAAY,UAAa,MAAM,SAAS;AAClG,cAAM,UAAU,MAAM,mBAAmB,UAAa,MAAM,WAAW;AACvE,eAAO,GAAG,IAAI,SAAS,IAAI,cAAc,CAAC,UAAU,aAAa;AAAA,MACnE,WAAW,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,KAAK,CAAC,KAAK,eAAe,KAAK,KAAK,CAAC,KAAK,eAAe,KAAK,KAAK,CAAC,KAAK,cAAc,KAAK,KAAK,CAAC,KAAK,aAAa,KAAK,GAAG;AACxM,aAAK,oBAAoB,OAAqB,MAAM,MAAM;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,YAAY,QAAoB,QAA+B;AACrE,UAAM,WAA0B,CAAC;AAEjC,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,UAAI,QAAQ,aAAc;AAC1B,YAAM,OAAO,SAAS,GAAG,MAAM,IAAI,GAAG,KAAK;AAC3C,YAAM,QAAQ,KAAK,YAAY,GAAG;AAElC,UAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,UAAU,KAAK,OAAO,MAAM,CAAC,MAAM,UAAU;AAE7E,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,KAAK,MAAM,CAAC;AAAA,UACZ,KAAK,MAAM,CAAC;AAAA,UACZ,MAAM,MAAM,CAAC,KAAK,KAAK,UAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,QACrD,CAAC;AAAA,MACH,WAAW,OAAO,UAAU,UAAU;AAEpC,cAAM,EAAE,KAAK,KAAK,KAAK,IAAI,KAAK,WAAW,KAAK;AAChD,iBAAS,KAAK,EAAE,MAAM,UAAU,MAAM,OAAO,KAAK,KAAK,KAAK,CAAC;AAAA,MAC/D,WAAW,OAAO,UAAU,WAAW;AACrC,iBAAS,KAAK,EAAE,MAAM,UAAU,MAAM,MAAM,CAAC;AAAA,MAC/C,WAAW,KAAK,eAAe,KAAK,KAAK,KAAK,eAAe,KAAK,GAAG;AACnE,iBAAS,KAAK,EAAE,MAAM,cAAc,MAAM,MAAM,CAAC;AAAA,MACnD,WAAW,KAAK,eAAe,KAAK,GAAG;AACrC,iBAAS,KAAK,EAAE,MAAM,UAAU,MAAM,OAAQ,MAAuB,SAAS,MAAM,CAAC;AAAA,MACvF,WAAW,KAAK,eAAe,KAAK,GAAG;AACrC,iBAAS,KAAK,EAAE,MAAM,UAAU,MAAM,OAAO,SAAS,MAAM,QAAQ,CAAC;AAAA,MACvE,WAAW,KAAK,cAAc,KAAK,GAAG;AACpC,iBAAS,KAAK,EAAE,MAAM,SAAS,MAAM,MAAM,CAAC;AAAA,MAC9C,WAAW,KAAK,aAAa,KAAK,GAAG;AACnC,iBAAS,KAAK,EAAE,MAAM,QAAQ,MAAM,OAAO,aAAa,MAAM,YAAY,CAAC;AAAA,MAC7E,WAAW,OAAO,UAAU,UAAU;AAEpC,YAAI,KAAK,WAAW,KAAK,GAAG;AAC1B,mBAAS,KAAK,EAAE,MAAM,SAAS,MAAM,MAAM,CAAC;AAAA,QAC9C,OAAO;AACL,mBAAS,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC;AAAA,QAC7C;AAAA,MACF,WAAW,OAAO,UAAU,YAAY,UAAU,MAAM;AAEtD,cAAM,eAAe;AACrB,cAAM,cAAc,gBAAgB,eAAe,CAAE,aAAa,aAAyB;AAC3F,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU,KAAK,YAAY,cAAc,IAAI;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,cAAc,QAAoB,QAA2C;AACnF,UAAM,SAAoC,CAAC;AAE3C,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,UAAI,QAAQ,aAAc;AAC1B,YAAM,OAAO,SAAS,GAAG,MAAM,IAAI,GAAG,KAAK;AAE3C,UAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,UAAU,KAAK,OAAO,MAAM,CAAC,MAAM,UAAU;AAC7E,eAAO,IAAI,IAAI,MAAM,CAAC;AAAA,MACxB,WAAW,OAAO,UAAU,YAAY,OAAO,UAAU,aAAa,OAAO,UAAU,UAAU;AAC/F,eAAO,IAAI,IAAI;AAAA,MACjB,WAAW,KAAK,eAAe,KAAK,KAAK,KAAK,eAAe,KAAK,GAAG;AACnE,eAAO,IAAI,IAAI;AAAA,MACjB,WAAW,KAAK,eAAe,KAAK,GAAG;AAErC,eAAO,IAAI,IAAI;AAAA,MACjB,WAAW,KAAK,eAAe,KAAK,GAAG;AAErC,cAAM,cAAc,MAAM,QAAQ,CAAC;AACnC,cAAM,aAAa,OAAO,gBAAgB,WAAW,cAAc,YAAY;AAC/E,eAAO,IAAI,IAAI,MAAM,WAAW;AAAA,MAClC,WAAW,KAAK,cAAc,KAAK,GAAG;AACpC,eAAO,IAAI,IAAI,MAAM,WAAW;AAAA,MAClC,WAAW,KAAK,aAAa,KAAK,GAAG;AACnC,eAAO,IAAI,IAAI,MAAM,WAAW;AAAA,MAClC,WAAW,OAAO,UAAU,YAAY,UAAU,MAAM;AACtD,eAAO,OAAO,QAAQ,KAAK,cAAc,OAAqB,IAAI,CAAC;AAAA,MACrE;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,eAAe,OAAuC;AAC5D,WACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAAuB,SAAS;AAAA,EAErC;AAAA,EAEQ,eAAe,OAAuC;AAC5D,WACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAAuB,SAAS;AAAA,EAErC;AAAA,EAEQ,eAAe,OAAuC;AAC5D,WACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAAuB,SAAS;AAAA,EAErC;AAAA,EAEQ,eAAe,OAAuC;AAC5D,WACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAAuB,SAAS,YACjC,aAAa,SACb,MAAM,QAAS,MAAuB,OAAO;AAAA,EAEjD;AAAA,EAEQ,cAAc,OAAsC;AAC1D,WACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAAsB,SAAS;AAAA,EAEpC;AAAA,EAEQ,aAAa,OAAqC;AACxD,WACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAAqB,SAAS;AAAA,EAEnC;AAAA,EAEQ,WAAW,OAAwB;AACzC,WAAO,oDAAoD,KAAK,KAAK;AAAA,EACvE;AAAA,EAEQ,YAAY,KAAqB;AAEvC,WAAO,IACJ,QAAQ,YAAY,KAAK,EACzB,QAAQ,MAAM,SAAO,IAAI,YAAY,CAAC,EACtC,KAAK;AAAA,EACV;AAAA,EAEQ,WAAW,OAA2D;AAE5E,QAAI,SAAS,KAAK,SAAS,GAAG;AAC5B,aAAO,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,KAAK;AAAA,IACtC,WAAW,SAAS,KAAK,SAAS,IAAI;AACpC,aAAO,EAAE,KAAK,GAAG,KAAK,QAAQ,KAAK,IAAI,MAAM,IAAI;AAAA,IACnD,WAAW,SAAS,KAAK,SAAS,KAAK;AACrC,aAAO,EAAE,KAAK,GAAG,KAAK,QAAQ,KAAK,KAAK,MAAM,EAAE;AAAA,IAClD,WAAW,SAAS,GAAG;AACrB,aAAO,EAAE,KAAK,GAAG,KAAK,QAAQ,KAAK,KAAM,MAAM,GAAG;AAAA,IACpD,OAAO;AACL,aAAO,EAAE,KAAK,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,MAAM,EAAE;AAAA,IACpD;AAAA,EACF;AAAA,EAEQ,UAAU,KAAa,KAAqB;AAClD,UAAM,QAAQ,MAAM;AACpB,QAAI,SAAS,EAAG,QAAO;AACvB,QAAI,SAAS,GAAI,QAAO;AACxB,QAAI,SAAS,IAAK,QAAO;AACzB,WAAO;AAAA,EACT;AAAA,EAEQ,wBACN,eACA,cACA,SACW;AACX,QAAI,kBAAkB,UAAa,CAAC,SAAS;AAC3C,aAAO;AAAA,IACT;AAEA,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK,UAAU;AACb,YAAI,OAAO,kBAAkB,YAAY,OAAO,iBAAiB,UAAU;AACzE,iBAAO;AAAA,QACT;AAEA,cAAM,MAAM,QAAQ,OAAO,OAAO;AAClC,cAAM,MAAM,QAAQ,OAAO,OAAO;AAClC,cAAM,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,aAAa,CAAC;AAE1D,YAAI,OAAO,QAAQ,SAAS,YAAY,QAAQ,QAAQ,GAAG;AACzD,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,YAAY,SAAS,KAAK,KAAK,QAAQ,IAAI;AAAA,MACzD;AAAA,MACA,KAAK;AACH,eAAO,OAAO,kBAAkB,YAAY,gBAAgB;AAAA,MAC9D,KAAK,UAAU;AACb,YAAI,OAAO,kBAAkB,UAAU;AACrC,iBAAO;AAAA,QACT;AAEA,cAAM,UAAU,QAAQ,WAAW,CAAC;AACpC,cAAM,cAAc,IAAI,IAAI,QAAQ,IAAI,CAAC,WAAY,OAAO,WAAW,WAAW,SAAS,OAAO,KAAM,CAAC;AACzG,eAAO,YAAY,IAAI,aAAa,IAAI,gBAAgB;AAAA,MAC1D;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AACH,eAAO,OAAO,kBAAkB,WAAW,gBAAgB;AAAA,MAC7D,KAAK;AACH,YAAI,KAAK,eAAe,YAAY,GAAG;AACrC,iBAAO,KAAK,eAAe,aAAa,IAAI,gBAAgB;AAAA,QAC9D;AACA,YAAI,KAAK,eAAe,YAAY,GAAG;AACrC,iBAAO,KAAK,eAAe,aAAa,IAAI,gBAAgB;AAAA,QAC9D;AACA,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEQ,YAAY,OAAe,KAAa,KAAa,MAAsB;AACjF,UAAM,UAAU,MAAM,KAAK,OAAO,QAAQ,OAAO,IAAI,IAAI;AACzD,UAAM,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,OAAO,CAAC;AACpD,UAAM,YAAY,KAAK,cAAc,IAAI;AACzC,WAAO,OAAO,QAAQ,QAAQ,SAAS,CAAC;AAAA,EAC1C;AAAA,EAEQ,cAAc,MAAsB;AAC1C,UAAM,OAAO,OAAO,IAAI;AACxB,UAAM,eAAe,KAAK,QAAQ,GAAG;AACrC,WAAO,iBAAiB,KAAK,IAAI,KAAK,SAAS,eAAe;AAAA,EAChE;AAAA,EAEQ,kBAAkB,UAAmD;AAC3E,UAAM,MAAM,oBAAI,IAAyB;AAEzC,UAAM,QAAQ,CAAC,UAAyB;AACtC,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,SAAS,YAAY,KAAK,UAAU;AAC3C,gBAAM,KAAK,QAAQ;AACnB;AAAA,QACF;AAEA,YAAI,IAAI,KAAK,MAAM,IAAI;AAAA,MACzB;AAAA,IACF;AAEA,UAAM,QAAQ;AACd,WAAO;AAAA,EACT;AAEF;AAGO,IAAM,YAAY,IAAI,eAAe;;;ADxoBrC,SAAS,cACd,MACA,QACA,SAC6B;AAC7B,QAAM,KAAK,eAAe;AAC1B,QAAM,UAAU,GAAG,IAAI,IAAI,EAAE;AAE7B,QAAM,CAAC,QAAQ,SAAS,IAAI;AAAA,IAC1B,UAAU,UAAU,OAAO;AAAA,EAC7B;AAEA,UAAQ,MAAM;AACZ,cAAU,cAAc,SAAS,MAAM,MAAM;AAC7C,cAAU,UAAU,UAAU,OAAO,CAAC;AAEtC,UAAM,cAAc,UAAU,UAAU,SAAS,MAAM;AACrD,gBAAU,UAAU,UAAU,OAAO,CAAC;AAAA,IACxC,CAAC;AAED,UAAM,eAAe,SAAS,WAC1B,UAAU,iBAAiB,SAAS,QAAQ,QAAQ,IACpD;AAEJ,cAAU,MAAM;AACd,kBAAY;AACZ,qBAAe;AACf,gBAAU,gBAAgB,OAAO;AAAA,IACnC,CAAC;AAAA,EACH,CAAC;AAED,SAAO,WAAW,MAAM,oBAAoB,QAAQ,OAAO,GAAG,EAAE,CAAsB;AACxF;AAEA,SAAS,oBACP,QACA,YACA,QACyB;AACzB,QAAM,SAAkC,CAAC;AAEzC,aAAW,CAAC,KAAK,WAAW,KAAK,OAAO,QAAQ,MAAM,GAAG;AACvD,QAAI,QAAQ,aAAc;AAC1B,UAAM,OAAO,SAAS,GAAG,MAAM,IAAI,GAAG,KAAK;AAE3C,QAAI,MAAM,QAAQ,WAAW,KAAK,YAAY,UAAU,KAAK,OAAO,YAAY,CAAC,MAAM,UAAU;AAC/F,aAAO,GAAG,IAAI,WAAW,IAAI,KAAK,YAAY,CAAC;AAAA,IACjD,WAAW,OAAO,gBAAgB,YAAY,OAAO,gBAAgB,aAAa,OAAO,gBAAgB,UAAU;AACjH,aAAO,GAAG,IAAI,WAAW,IAAI,KAAK;AAAA,IACpC,WAAW,eAAe,WAAW,GAAG;AACtC,aAAO,GAAG,IAAI,WAAW,IAAI,KAAK;AAAA,IACpC,WAAW,eAAe,WAAW,GAAG;AACtC,aAAO,GAAG,IAAI,WAAW,IAAI,KAAK;AAAA,IACpC,WAAW,eAAe,WAAW,GAAG;AACtC,YAAM,eAAe,YAAY,WAAW,oBAAoB,YAAY,OAAO;AACnF,aAAO,GAAG,IAAI,WAAW,IAAI,KAAK;AAAA,IACpC,WAAW,cAAc,WAAW,GAAG;AACrC,aAAO,GAAG,IAAI,WAAW,IAAI,KAAK,YAAY,WAAW;AAAA,IAC3D,WAAW,aAAa,WAAW,GAAG;AACpC,aAAO,GAAG,IAAI,WAAW,IAAI,KAAK,YAAY,WAAW;AAAA,IAC3D,WAAW,OAAO,gBAAgB,YAAY,gBAAgB,MAAM;AAClE,aAAO,GAAG,IAAI,oBAAoB,aAA2B,YAAY,IAAI;AAAA,IAC/E;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,QAAQ,OAAgB,MAAuB;AACtD,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,SAAU,MAA2B,SAAS;AAChH;AAEA,SAAS,eAAe,OAAuC;AAC7D,SAAO,QAAQ,OAAO,QAAQ;AAChC;AAEA,SAAS,eAAe,OAAuC;AAC7D,SAAO,QAAQ,OAAO,QAAQ;AAChC;AAEA,SAAS,eAAe,OAAuC;AAC7D,SAAO,QAAQ,OAAO,QAAQ,KAAK,aAAc,SAAoB,MAAM,QAAS,MAAuB,OAAO;AACpH;AAEA,SAAS,cAAc,OAAsC;AAC3D,SAAO,QAAQ,OAAO,OAAO;AAC/B;AAEA,SAAS,aAAa,OAAqC;AACzD,SAAO,QAAQ,OAAO,MAAM;AAC9B;AAEA,SAAS,oBAAoB,SAAgE;AAC3F,QAAM,QAAQ,QAAQ,CAAC;AACvB,SAAO,OAAO,UAAU,WAAW,QAAQ,MAAM;AACnD;;;;;;;;;AEvGA,SAASA,gBAAAA,gBAAcC,WAAAA,UAASC,aAAAA,YAAWC,QAAAA,OAAMC,OAAAA,YAAW;AAC5D,SAASC,UAAAA,eAAc;;;;;;;;;ACDvB,SAASC,gBAAAA,eAAcC,gBAAAA,eAAcC,WAAAA,UAASC,aAAAA,YAAiBC,OAAAA,YAAgB;AAC/E,SAASC,WAAAA,gBAAe;;;;;;;;;;;;;ACDxB,SAASC,gBAAAA,eAAcC,cAAcC,aAAAA,YAAWC,YAAiB;AACjE,SAASC,eAAe;;;;;;;;;;AAYjB,SAASC,OAAOC,OAAoB;AACzC,QAAM,CAACC,QAAQC,SAAS,IAAIR,cAAaM,MAAMG,eAAe,IAAI;AAClE,QAAM,CAACC,aAAaC,cAAc,IAAIX,cAAa,EAAEM,MAAMG,eAAe,KAAK;AAC/E,QAAM,CAACG,eAAeC,gBAAgB,IAAIb,cAAiCc,MAAS;AAGpF,QAAM,CAACC,gBAAgBC,iBAAiB,IAAIhB,cAAaM,MAAMG,eAAe,IAAI;AAClF,MAAIQ,gBAAgBX,MAAMG,eAAe;AACzC,MAAIS;AACJ,MAAIC,cAAmB;AACvB,MAAIC;AACJ,MAAIC,cAAmB;AACvB,MAAIC,qBAAqB;AACzB,MAAIC,eAAoB;AAExB,MAAIC;AAGJvB,eAAa,MAAM;AACjB,QAAI,CAACK,MAAMmB,UAAU,CAAClB,OAAO,EAAG;AAChC,UAAMmB,KAAKF;AACX,QAAI,CAACE,GAAI;AACT,UAAMC,KAAK,IAAIC,eAAe,MAAM;AAClC,YAAMC,IAAIH,GAAGI;AACbjB,uBAAiBkB,UAAQA,SAASF,IAAIE,OAAOF,CAAC;IAChD,CAAC;AACDF,OAAGK,QAAQN,EAAE;AACbxB,IAAAA,WAAU,MAAMyB,GAAGM,WAAW,CAAC;EACjC,CAAC;AAEDhC,eAAa,MAAM;AACjB,QAAIK,MAAMmB,UAAU,CAACL,iBAAkB;AACvC,UAAMc,OAAO3B,OAAO;AACpBc,iBAAac,KAAK;AAElB,QAAI,CAACb,oBAAoB;AACvBF,uBAAiBgB,MAAMC,YAAY,UAAUH,OAAO,IAAI,GAAG;AAC3DZ,2BAAqB;AACrB;IACF;AAEAD,kBAAcjB,QACZgB,kBACA;MAAEkB,QAAQJ,OAAO,IAAI;IAAI,GACzB;MAAEK,MAAM;MAAUC,gBAAgB;MAAMC,QAAQ;IAAK,CACvD;AAEAvC,IAAAA,WAAU,MAAMmB,aAAac,KAAK,CAAC;EACrC,CAAC;AAED,QAAMO,eAAeA,MAAM;AACzB,QAAIpC,MAAMqC,UAAUrC,MAAMmB,OAAQ;AAClC,UAAMmB,OAAO,CAACrC,OAAO;AACrBC,cAAUoC,IAAI;AACd,QAAIA,MAAM;AACRjC,qBAAe,KAAK;AACpB,UAAI,CAACL,MAAMmB,QAAQ;AACjBN,qBAAagB,KAAK;AAClBhB,sBAAc;AACd,YAAID,mBAAmB;AAErBC,wBAAcf,QACZc,mBACA;YAAE2B,QAAQ;YAAQC,SAAS;UAAE,GAC7B;YACEP,MAAM;YACNC,gBAAgB;YAChBC,QAAQ;YACRM,YAAYA,MAAM;AAChB5B,4BAAc;YAChB;UACF,CACF;QACF,OAAO;AAELH,4BAAkB,IAAI;QACxB;MACF;IACF,OAAO;AACLL,qBAAe,IAAI;AACnB,UAAI,CAACL,MAAMmB,QAAQ;AACjB,YAAIP,mBAAmB;AACrB,gBAAM8B,gBAAgB9B,kBAAkB+B,sBAAsB,EAAEJ;AAChE3B,4BAAkBkB,MAAMS,SAAS,GAAGG,aAAa;AACjD7B,uBAAagB,KAAK;AAClBhB,wBAAcf,QACZc,mBACA;YAAE2B,QAAQ;YAAGC,SAAS;UAAE,GACxB;YACEP,MAAM;YAAUC,gBAAgB;YAAMC,QAAQ;YAC9CM,YAAYA,MAAM;AAChB/B,gCAAkB,KAAK;AACvBG,4BAAc;AACdD,kCAAoBJ;YACtB;UACF,CACF;QACF,OAAO;AACLE,4BAAkB,KAAK;QACzB;MACF;IACF;AACAV,UAAM4C,eAAeN,IAAI;EAC3B;AAEA,QAAMO,gBAAgBA,OAAA,MAAA;AAAA,QAAAC,OAAAC,QAAA,GAAAC,QAAAF,KAAAG,YAAAC,QAAAF,MAAAC;AAAAE,UAEZ/B,QAAO;AAAE,UAAIpB,MAAMmB,OAAQD,cAAaE;IAAI,GAAC0B,IAAA;AAAAE,UAAAI,UAKxChB;AAAYiB,aAAAH,QAAA,MAAA;AAAA,UAAAI,MAAAC,OAAA,MAAA,CAAA,CAGlBvD,MAAMmB,MAAM;AAAA,aAAA,MAAZmC,IAAA,IAAAE,kBACE3D,MAAI;QAAA,IAAC4D,OAAI;AAAA,iBAAExD,OAAO;QAAC;QAAA,IAAAyD,WAAA;AAAA,cAAAC,QAAAC,QAAA,GAAAC,QAAAF,MAAAV;AAAAI,mBAAAQ,OAAA,MAGb7D,MAAM8D,KAAK;AAAA,iBAAAH;QAAA;MAAA,CAAA,KAAA,MAAA;AAAA,YAAAI,QAAAC,QAAA,GAAAC,QAAAF,MAAAd;AAAAI,iBAAAY,OAAA,MAMoBjE,MAAM8D,KAAK;AAAA,eAAAC;MAAA,GAAA;IAElD,GAAA,GAAA,IAAA;AAAAV,aAAAH,QAAA,MAAA;AAAA,UAAAgB,OAAAX,OAAA,MAAA,CAAA,EAEAvD,MAAMmB,UAAU,CAACnB,MAAMqC,OAAM;AAAA,aAAA,MAA7B6B,KAAA,KAAAC,QAAA;IAWA,GAAA,GAAA,IAAA;AAAAd,aAAAH,QAAA,MAAA;AAAA,UAAAkB,OAAAb,OAAA,MAAA,CAAA,CACA,CAACvD,MAAMmB,MAAM;AAAA,aAAA,MAAbiD,KAAA,MAAA,MAAA;AAAA,YAAAC,SAAAC,QAAA;AAAA,YAAAC,QAEQzD;AAAgB,eAAAyD,UAAA,aAAApB,MAAAoB,OAAAF,MAAA,IAAhBvD,mBAAgBuD;AAAA,eAAAA;MAAA,GAAA;IAWxB,GAAA,GAAA,IAAA;AAAAhB,aAAAL,OAAAQ,kBAGF3D,MAAI;MAAA,IAAC4D,OAAI;AAAA,eAAEF,OAAA,MAAA,CAAA,EAAAvD,MAAMmB,UAAUnB,MAAMwE,QAAO,EAAA,KAAIvE,OAAO;MAAC;MAAA,IAAAyD,WAAA;AAAA,YAAAe,QAAAC,OAAA;AAAAD,cAAArB,UACNuB,OAAMA,EAAEC,gBAAgB;AAACvB,iBAAAoB,OAAA,MACnEzE,MAAMwE,OAAO;AAAA,eAAAC;MAAA;IAAA,CAAA,GAAA,IAAA;AAAApB,aAAAP,MAAAU,kBAKnB3D,MAAI;MAAA,IAAC4D,OAAI;AAAA,eAAEF,OAAA,MAAA,CAAA,CAAAvD,MAAMmB,MAAM,EAAA,IAAGlB,OAAO,IAAIQ,eAAe;MAAC;MAAA,IAAAiD,WAAA;AAAA,YAAAmB,QAAAC,QAAA,GAAAC,QAAAF,MAAA5B;AAAAE,cAE5C/B,QAAO;AACX,cAAIpB,MAAMmB,OAAQ;AAClBP,8BAAoBQ;AACpB,cAAIT,eAAe;AAAEA,4BAAgB;AAAO;UAAQ;AAEpDE,uBAAagB,KAAK;AAClBT,aAAGU,MAAMS,SAAS;AAClBnB,aAAGU,MAAMU,UAAU;AACnB3B,wBAAcf,QACZsB,IACA;YAAEmB,QAAQ;YAAQC,SAAS;UAAE,GAC7B;YACEP,MAAM;YACNC,gBAAgB;YAChBC,QAAQ;YACRM,YAAYA,MAAM;AAChB5B,4BAAc;YAChB;UACF,CACF;QACF,GAACgE,KAAA;AAAAxB,iBAAA0B,OAAA,MAIkC/E,MAAM0D,QAAQ;AAAAsB,iBAAAC,SAAAC,QAAAL,OAF1C,CAAC7E,MAAMmB,SAAS;UAAE,aAAa;QAAiB,IAAIX,QAASyE,GAAA,CAAA;AAAA,eAAAJ;MAAA;IAAA,CAAA,GAAA,IAAA;AAAAG,aAAAG,SAAA;AAAA,UAAAC,MAhFjE,kBAAkBpF,MAAMmB,SAAS,wBAAwB,EAAE,IAAEkE,OAG3D,yBAAyBrF,MAAMmB,SAAS,yBAAyB,EAAE;AAAEiE,cAAAD,IAAAR,KAAAW,YAAAxC,MAAAqC,IAAAR,IAAAS,GAAA;AAAAC,eAAAF,IAAAI,KAAAD,YAAAtC,OAAAmC,IAAAI,IAAAF,IAAA;AAAA,aAAAF;IAAA,GAAA;MAAAR,GAAAnE;MAAA+E,GAAA/E;IAAA,CAAA;AAAA,WAAAsC;EAAA,GAAA;AAqFlF,MAAI9C,MAAMmB,QAAQ;AAChB,QAAInB,MAAMqC,QAAQ;AAChB,cAAA,MAAA;AAAA,YAAAmD,SAAAC,QAAA;AAAApC,iBAAAmC,QAEK3C,aAAa;AAAA,eAAA2C;MAAA,GAAA;IAGpB;AACA,QAAIE;AACJ,QAAIC,gBAAqB;AACzB,QAAIC,uBAAuB;AAC3B,QAAIC,eAAe5F,OAAO;AAE1BN,iBAAa,MAAM;AACjB,UAAI,CAAC+F,YAAYzF,OAAO,EAAG;AAC3B,YAAM6F,UAAWnB,OAAa;AAC5BA,UAAEC,gBAAgB;AAClBxC,qBAAa;MACf;AACAsD,eAASK,iBAAiB,SAASD,OAAO;AAC1ClG,MAAAA,WAAU,MAAM8F,SAASM,oBAAoB,SAASF,OAAO,CAAC;IAChE,CAAC;AAEDnG,iBAAa,MAAM;AACjB,UAAI,CAAC+F,SAAU;AAEf,YAAM9D,OAAO3B,OAAO;AACpB,YAAMgG,qBAAqB3F,cAAc,MAAME,SAC3CF,cAAc,IAAK,KACnBoF,SAAS/C,sBAAsB,EAAEJ;AAErC,YAAM2D,SAAS;QACbC,OAAOvE,OAAO,MAAM;QACpBW,QAAQX,OAAOqE,qBAAqB;QACpCG,cAAcxE,OAAO,KAAK;QAC1ByE,WAAWzE,OACP,kCACA;MACN;AAEA8D,eAAS5D,MAAMwE,SAAS1E,OAAO,KAAK;AACpC8D,eAAS5D,MAAMyE,WAAW3E,OAAO,KAAK;AAEtC,UAAI,CAACgE,sBAAsB;AACzBA,+BAAuB;AACvBF,iBAAS5D,MAAMqE,QAAQ,GAAGD,OAAOC,KAAK;AACtCT,iBAAS5D,MAAMS,SAAS,GAAG2D,OAAO3D,MAAM;AACxCmD,iBAAS5D,MAAMsE,eAAe,GAAGF,OAAOE,YAAY;AACpDV,iBAAS5D,MAAMuE,YAAYH,OAAOG;AAClCR,uBAAejE;AACf;MACF;AAEA,UAAIA,SAASiE,cAAc;AACzBF,uBAAe9D,KAAK;AACpB8D,wBAAgB7F,QAAQ4F,UAAUQ,QAAQ;UACxCjE,MAAM;UACNC,gBAAgB;UAChBC,QAAQ;UACRM,YAAYA,MAAM;AAChBkD,4BAAgB;UAClB;QACF,CAAC;AACDE,uBAAejE;AACf;MACF;AAEA,UAAIA,MAAM;AACR8D,iBAAS5D,MAAMS,SAAS,GAAG2D,OAAO3D,MAAM;MAC1C;IACF,CAAC;AAED3C,IAAAA,WAAU,MAAM;AACd+F,qBAAe9D,KAAK;AACpBZ,oBAAcY,KAAK;IACrB,CAAC;AAED,YAAA,MAAA;AAAA,UAAA2E,SAAAC,QAAA;AAAAD,aAAAT,iBAAA,gBAqBoB,MAAM;AACpB,YAAI9F,OAAO,EAAG;AACdgB,sBAAcY,KAAK;AACnBZ,uBAAenB,QAAQ4F,UAAU;UAAEgB,OAAO;QAAE,GAAG;UAAEzE,MAAM;UAAUC,gBAAgB;UAAMC,QAAQ;QAAI,CAAC;MACtG,CAAC;AAAAqE,aAAAT,iBAAA,iBATgB,MAAM;AACrB,YAAI9F,OAAO,EAAG;AACdgB,sBAAcY,KAAK;AACnBZ,uBAAenB,QAAQ4F,UAAU;UAAEgB,OAAO;QAAE,GAAG;UAAEzE,MAAM;UAAUC,gBAAgB;UAAMC,QAAQ;QAAI,CAAC;MACtG,CAAC;AAAAqE,aAAAG,cATY,MAAM;AACjB,YAAI1G,OAAO,EAAG;AACdgB,sBAAcY,KAAK;AACnBZ,uBAAenB,QAAQ4F,UAAU;UAAEgB,OAAO;QAAE,GAAG;UAAEzE,MAAM;UAAUC,gBAAgB;UAAMC,QAAQ;QAAI,CAAC;MACtG;AAACqE,aAAAI,gBAVc,MAAM;AACnB,YAAI3G,OAAO,EAAG;AACb4G,iBAASC,eAA+BC,OAAO;AAChD9F,sBAAcY,KAAK;AACnBZ,uBAAenB,QAAQ4F,UAAU;UAAEgB,OAAO;QAAI,GAAG;UAAEzE,MAAM;UAAUC,gBAAgB;UAAMC,QAAQ;QAAI,CAAC;MACxG;AAAC,UAAA6E,SARItB;AAAQ,aAAAsB,WAAA,aAAA7D,MAAA6D,QAAAR,MAAA,IAARd,WAAQc;AAAAnD,eAAAmD,QAyBZ3D,aAAa;AAAAmC,eAAA,MAAAiC,eAAAT,QAAA,kBAvBEU,OAAO9G,YAAY,CAAC,CAAC,CAAA;AAAA,aAAAoG;IAAA,GAAA;EA0B3C;AAEA,SAAO3D,cAAc;AACvB;AAACsE,iBAAA,CAAA,SAAA,eAAA,WAAA,CAAA;;;;;;;;;;;AC/TD,SAASC,gBAAAA,eAAcC,gBAAAA,eAAcC,WAAAA,UAASC,aAAAA,kBAAiB;AAC/D,SAASC,WAAAA,UAASC,mBAAmB;;;;;AAYrC,IAAMC,kBAAkB;AACxB,IAAMC,YAAY;AAClB,IAAMC,mBAAmB;AACzB,IAAMC,cAAc;AAEpB,SAASC,gBAAgBC,MAAsB;AAC7C,QAAMC,IAAID,KAAKE,SAAS;AACxB,QAAMC,MAAMF,EAAEG,QAAQ,GAAG;AACzB,SAAOD,QAAQ,KAAK,IAAIF,EAAEI,SAASF,MAAM;AAC3C;AAEA,SAASG,WAAWC,KAAaP,MAAsB;AACrD,QAAMQ,MAAMC,KAAKC,MAAMH,MAAMP,IAAI,IAAIA;AACrC,SAAOW,WAAWH,IAAII,QAAQb,gBAAgBC,IAAI,CAAC,CAAC;AACtD;AAEA,SAASa,aAAaC,UAAkBC,KAAaC,KAAqB;AACxE,QAAMC,cAAcH,WAAWC,QAAQC,MAAMD;AAC7C,QAAMG,UAAUT,KAAKC,MAAMO,aAAa,EAAE,IAAI;AAC9C,MAAIR,KAAKU,IAAIF,aAAaC,OAAO,KAAK,SAAS;AAC7C,WAAOH,MAAMG,WAAWF,MAAMD;EAChC;AACA,SAAOD;AACT;AAEO,SAASM,OAAOC,OAAoB;AACzC,QAAMN,MAAMA,MAAMM,MAAMN,OAAO;AAC/B,QAAMC,MAAMA,MAAMK,MAAML,OAAO;AAC/B,QAAMhB,OAAOA,MAAMqB,MAAMrB,QAAQ;AAEjC,MAAIsB;AACJ,MAAIC;AACJ,MAAIC;AACJ,MAAIC;AACJ,MAAIC;AACJ,MAAIC;AACJ,MAAIC;AAEJ,QAAM,CAACC,eAAeC,gBAAgB,IAAIzC,cAAa,KAAK;AAC5D,QAAM,CAAC0C,YAAYC,aAAa,IAAI3C,cAAa,KAAK;AACtD,QAAM,CAAC4C,WAAWC,YAAY,IAAI7C,cAAa,KAAK;AACpD,QAAM,CAAC8C,gBAAgBC,iBAAiB,IAAI/C,cAAa,KAAK;AAC9D,QAAM,CAACgD,iBAAiBC,kBAAkB,IAAIjD,cAAa,KAAK;AAChE,QAAM,CAACkD,WAAWC,YAAY,IAAInD,cAAa,KAAK;AACpD,QAAM,CAACoD,YAAYC,aAAa,IAAIrD,cAAa,EAAE;AAEnD,QAAMsD,cAAcjD,aAAc2B,MAAMuB,QAAQ7B,IAAI,MAAMC,IAAI,IAAID,IAAI,KAAM,GAAG;AAC/E,QAAM8B,kBAAkBnD,YAAY,CAAC;AACrC,QAAMoD,kBAAkBpD,YAAY,CAAC;AACrC,QAAMqD,iBAAiBrD,YAAY,IAAI;AACvC,QAAMsD,iBAAiBtD,YAAY,CAAC;AAEpC,QAAMuD,kBAAmBC,SAAgB;AACvC,QAAI1B,QAASA,SAAQ2B,MAAMC,QAAQ,GAAGF,GAAG;AACzC,QAAIzB,UAAWA,WAAU0B,MAAME,OAAO,iBAAiBH,GAAG;EAC5D;AAEA,QAAMI,oBAAqBC,aAAoB;AAC7C,QAAI,CAAChC,SAAU;AACfA,aAAS4B,MAAMC,QAAQ,eAAe3C,KAAKU,IAAIoC,OAAO,CAAC;AACvDhC,aAAS4B,MAAMK,YAAY,cAAcD,UAAU,IAAIA,UAAU,CAAC;EACpE;AAEA,QAAME,0BAA0BA,MAAM;AACpC,QAAI,CAAChC,UAAW;AAChBA,cAAU0B,MAAMO,UAAUC,OAAOb,gBAAgBc,IAAI,CAAC;AACtDnC,cAAU0B,MAAMK,YAAY,2BAA2BT,eAAea,IAAI,CAAC,YAAYZ,eAAeY,IAAI,CAAC;EAC7G;AAGAtE,EAAAA,cAAa,MAAM;AACjB,QAAI,CAACuC,cAAc,KAAK,CAACgC,UAAU;AACjClB,kBAAYmB,MAAOzC,MAAMuB,QAAQ7B,IAAI,MAAMC,IAAI,IAAID,IAAI,KAAM,GAAG;IAClE;EACF,CAAC;AAED,QAAMgD,aAAaA,OAAQ1C,MAAMuB,QAAQ7B,IAAI,MAAMC,IAAI,IAAID,IAAI,KAAM;AACrE,QAAMiD,WAAWA,MAAMnC,cAAc,KAAKI,UAAU;AAEpD,MAAIgC,iBAAkD;AACtD,MAAIC,cAAc;AAClB,MAAIC,cAA8B;AAClC,MAAIC,WAAW;AACf,MAAIC,eAAqD;AAEzD,MAAIR,WAAgB;AAEpB,MAAIS,aAAkB;AAEtB,MAAIC,oBAAyB;AAE7B,MAAIC,mBAAwB;AAE5B,MAAIC,mBAAwB;AAE5B,QAAMC,kBAAmBC,aAAoB;AAC3C,QAAI,CAACR,YAAa,QAAO9C,MAAMuB;AAC/B,UAAMgC,UAAUD,UAAUR,YAAYd;AACtC,UAAMwB,SAASD,UAAUR;AACzB,UAAMU,cAAcxD,aAAaA,WAAWyD,cAAcZ,YAAYf;AACtE,UAAM4B,UAAUvE,KAAKO,IAAI,GAAGP,KAAKM,IAAI,GAAG8D,SAASC,WAAW,CAAC;AAC7D,UAAMhE,WAAWC,IAAI,IAAIiE,WAAWhE,IAAI,IAAID,IAAI;AAChD,WAAON,KAAKO,IAAID,IAAI,GAAGN,KAAKM,IAAIC,IAAI,GAAGF,QAAQ,CAAC;EAClD;AAEA,QAAMmE,mBAAoBC,QAAgBA,IAAInE,IAAI,MAAMC,IAAI,IAAID,IAAI,KAAM;AAE1E,QAAMoE,uBAAuBA,CAACR,SAAiBS,SAAiB;AAC9D,QAAI,CAACjB,YAAa,QAAO;AACzB,UAAMkB,eAAeD,OAAO,IAAIjB,YAAYd,OAAOsB,UAAUA,UAAUR,YAAYmB;AACnF,UAAMC,WAAW9E,KAAKO,IAAI,GAAGqE,eAAezF,SAAS;AACrD,WAAOwF,OAAOtF,cAAcW,KAAK+E,KAAK/E,KAAKM,IAAIwE,WAAW1F,kBAAkB,CAAG,CAAC;EAClF;AAEA,QAAM4F,oBAAoBA,MAAM;AAC9B,QAAI,CAAC5D,cAAc,EAAG;AACtBC,qBAAiB,KAAK;AACtBE,kBAAc,KAAK;AACnBa,oBAAgBiB,KAAK,CAAC;AACtBG,qBAAiB;EACnB;AAEA,QAAMyB,oBAAqBC,OAAoB;AAC7C,QAAIpD,UAAU,EAAG;AACjBoD,MAAEC,eAAe;AAChBD,MAAEE,cAA8BC,kBAAkBH,EAAEI,SAAS;AAC9D9B,qBAAiB;MAAE+B,GAAGL,EAAEhB;MAASsB,GAAGN,EAAEO;IAAQ;AAC9ChC,kBAAc;AACdpC,qBAAiB,IAAI;AAErB,QAAIR,YAAY;AACd6C,oBAAc7C,WAAW6E,sBAAsB;AAC/C/B,iBAAWD,YAAYf,QAAQ9B,WAAWyD;IAC5C;EACF;AAEA,QAAMqB,oBAAqBT,OAAoB;AAC7C,QAAI,CAAC9D,cAAc,KAAK,CAACoC,eAAgB;AAEzC,UAAMoC,KAAKV,EAAEhB,UAAUV,eAAe+B;AACtC,UAAMM,KAAKX,EAAEO,UAAUjC,eAAegC;AACtC,UAAMM,WAAW9F,KAAK+E,KAAKa,KAAKA,KAAKC,KAAKA,EAAE;AAE5C,QAAIpC,eAAeqC,WAAW5G,iBAAiB;AAC7CuE,oBAAc;AACdlC,oBAAc,IAAI;IACpB;AAEA,QAAI,CAACkC,aAAa;AAChB,UAAIC,aAAa;AACf,YAAIwB,EAAEhB,UAAUR,YAAYd,MAAM;AAChCR,0BAAgBiB,KAAKqB,qBAAqBQ,EAAEhB,SAAS,EAAE,CAAC;QAC1D,WAAWgB,EAAEhB,UAAUR,YAAYmB,OAAO;AACxCzC,0BAAgBiB,KAAKqB,qBAAqBQ,EAAEhB,SAAS,CAAC,CAAC;QACzD,OAAO;AACL9B,0BAAgBiB,KAAK,CAAC;QACxB;MACF;AAEA,YAAM0C,WAAW9B,gBAAgBiB,EAAEhB,OAAO;AAC1C,YAAM8B,SAASxB,iBAAiBuB,QAAQ;AACxC,UAAI3C,UAAU;AAAEA,iBAAS6C,KAAK;AAAG7C,mBAAW;MAAM;AAClDlB,kBAAYmB,KAAK2C,MAAM;AACvBpF,YAAMsF,SAASrG,WAAWkG,UAAUxG,KAAK,CAAC,CAAC;IAC7C;EACF;AAEA,QAAM4G,kBAAmBjB,OAAoB;AAC3C,QAAI,CAAC9D,cAAc,EAAG;AAEtB,QAAIqC,aAAa;AACf,YAAMpD,WAAW4D,gBAAgBiB,EAAEhB,OAAO;AAC1C,YAAMkC,kBAAiB7F,IAAI,IAAID,IAAI,KAAKf,KAAK;AAC7C,YAAM8G,eAAeD,kBAAiB,KAClCpG,KAAKO,IAAID,IAAI,GAAGN,KAAKM,IAAIC,IAAI,GAAGD,IAAI,IAAIN,KAAKC,OAAOI,WAAWC,IAAI,KAAKf,KAAK,CAAC,IAAIA,KAAK,CAAC,CAAC,IACzFa,aAAaC,UAAUC,IAAI,GAAGC,IAAI,CAAC;AAEvC,YAAMyF,SAASxB,iBAAiB6B,YAAY;AAE5C,UAAIjD,SAAUA,UAAS6C,KAAK;AAC5B7C,iBAAWpE,SAAQkD,aAAa8D,QAAQ;QACtCM,MAAM;QACNC,WAAW;QACXC,SAAS;QACTC,MAAM;QACNC,YAAYA,MAAM;AAChBtD,qBAAW;QACb;MACF,CAAC;AAEDxC,YAAMsF,SAASrG,WAAWwG,cAAc9G,KAAK,CAAC,CAAC;IACjD;AAEA,QAAI6C,gBAAgBe,IAAI,MAAM,GAAG;AAC/B,UAAIU,WAAYA,YAAWoC,KAAK;AAChCpC,mBAAa7E,SAAQoD,iBAAiB,GAAG;QACvCkE,MAAM;QACNK,gBAAgB;QAChBC,QAAQ;MACV,CAAC;IACH;AAEAvF,qBAAiB,KAAK;AACtBE,kBAAc,KAAK;AACnBiC,qBAAiB;EACnB;AAEA,QAAMqD,sBAAsBA,MAAM;AAChC7B,sBAAkB;EACpB;AAGAnG,EAAAA,cAAa,MAAM;AACjB,UAAMiI,UAAUpF,eAAe;AAC/B,UAAMqF,UAAUjF,UAAU;AAC1B,UAAMkF,WAAWpF,gBAAgB;AAEjC7C,IAAAA,WAAU,MAAM;AACd,UAAI6E,cAAc;AAAEqD,qBAAarD,YAAY;AAAGA,uBAAe;MAAM;IACvE,CAAC;AAED,QAAIkD,WAAW,CAACC,WAAW,CAACC,UAAU;AACpCpD,qBAAesD,WAAW,MAAMrF,mBAAmB,IAAI,GAAG,GAAG;IAC/D,WAAW,CAACiF,WAAW,CAACC,SAAS;AAC/BlF,yBAAmB,KAAK;IAC1B;EACF,CAAC;AAED9C,EAAAA,WAAU,MAAM;AACd,QAAI6E,aAAcqD,cAAarD,YAAY;AAC3CR,cAAU6C,KAAK;AACfpC,gBAAYoC,KAAK;AACjBnC,uBAAmBmC,KAAK;AACxBlC,sBAAkBkC,KAAK;AACvBjC,sBAAkBiC,KAAK;EACzB,CAAC;AAEDnH,EAAAA,SAAQ,MAAM;AACZ,UAAMqI,YAAYjF,YAAYkF,GAAG,UAAU5E,eAAe;AAC1D,UAAM6E,cAAcjF,gBAAgBgF,GAAG,UAAUvE,iBAAiB;AAClE,UAAMyE,qBAAqBjF,gBAAgB+E,GAAG,UAAUpE,uBAAuB;AAC/E,UAAMuE,oBAAoBjF,eAAe8E,GAAG,UAAUpE,uBAAuB;AAC7E,UAAMwE,oBAAoBjF,eAAe6E,GAAG,UAAUpE,uBAAuB;AAC7ER,oBAAgBN,YAAYiB,IAAI,CAAC;AACjCN,sBAAkBT,gBAAgBe,IAAI,CAAC;AACvCH,4BAAwB;AAExBjE,IAAAA,WAAU,MAAM;AACdoI,gBAAU;AACVE,kBAAY;AACZC,yBAAmB;AACnBC,wBAAkB;AAClBC,wBAAkB;IACpB,CAAC;EACH,CAAC;AAGD3I,EAAAA,cAAa,MAAM;AACjB,QAAIiD,UAAU,KAAKX,UAAU;AAC3BA,eAASsG,MAAM;AACftG,eAASuG,OAAO;IAClB;EACF,CAAC;AAED,QAAMC,oBAAoBA,MAAM;AAC9B,UAAMC,SAAS1H,WAAW8B,WAAW,CAAC;AACtC,QAAI,CAAC6F,MAAMD,MAAM,GAAG;AAClB,YAAME,UAAU9H,KAAKO,IAAID,IAAI,GAAGN,KAAKM,IAAIC,IAAI,GAAGqH,MAAM,CAAC;AACvDhH,YAAMsF,SAASrG,WAAWiI,SAASvI,KAAK,CAAC,CAAC;IAC5C;AACAwC,iBAAa,KAAK;AAClBJ,sBAAkB,KAAK;AACvBE,uBAAmB,KAAK;EAC1B;AAEA,QAAMkG,mBAAoB7C,OAAkB;AAC1C,QAAItD,gBAAgB,GAAG;AACrBsD,QAAE8C,gBAAgB;AAClB9C,QAAEC,eAAe;AACjBpD,mBAAa,IAAI;AACjBE,oBAAcrB,MAAMuB,MAAMhC,QAAQb,gBAAgBC,KAAK,CAAC,CAAC,CAAC;IAC5D;EACF;AAEA,QAAM0I,qBAAsB/C,OAAqB;AAC/C,QAAIA,EAAEgD,QAAQ,QAASP,mBAAkB;aAChCzC,EAAEgD,QAAQ,UAAU;AAC3BnG,mBAAa,KAAK;AAClBJ,wBAAkB,KAAK;IACzB;EACF;AAEA,QAAMwG,eAAeA,MAAMvH,MAAMuB,MAAMhC,QAAQb,gBAAgBC,KAAK,CAAC,CAAC;AAGtE,QAAM6I,gBAAgB;AACtB,QAAMC,iBAAiB;AACvB,QAAMC,kBAAkB;AAExB,QAAMC,gBAAgBA,MAAM;AAC1B,UAAMC,aAAa3H,YAAYyD;AAC/B,QAAIkE,cAAcvH,UAAU;AAC1B,cAASoH,iBAAiBpH,SAASqD,cAAc8D,iBAAiBI,aAAc;IAClF;AACA,WAAO;EACT;AAEA,QAAMC,iBAAiBA,MAAM;AAC3B,UAAMD,aAAa3H,YAAYyD;AAC/B,QAAIkE,cAActH,cAAc;AAC9B,cAASsH,aAAaF,kBAAkBpH,aAAaoD,cAAc8D,iBAAiBI,aAAc;IACpG;AACA,WAAO;EACT;AAEA,QAAME,aAAaA,MAAMpF,WAAW,IAAIiF,cAAc,KAAKjF,WAAW,IAAImF,eAAe;AAEzF,QAAME,gBAAgBA,MAAM;AAC1B,QAAI,CAACpF,SAAS,EAAG,QAAO;AACxB,QAAImF,WAAW,EAAG,QAAO;AACzB,QAAIpH,WAAW,EAAG,QAAO;AACzB,WAAO;EACT;AAEAzC,EAAAA,cAAa,MAAM;AACjB,UAAM+J,gBAAgBD,cAAc;AACpC,UAAME,eAAetF,SAAS,IAAI,IAAI;AACtC,UAAMuF,eAAevF,SAAS,KAAKmF,WAAW,IAAI,OAAO;AAEzD5E,uBAAmBmC,KAAK;AACxBlC,sBAAkBkC,KAAK;AACvBjC,sBAAkBiC,KAAK;AAEvBnC,wBAAoB9E,SAAQqD,iBAAiBuG,eAAe;MAAEG,UAAU;IAAK,CAAC;AAC9EhF,uBAAmB/E,SAAQsD,gBAAgBuG,cAAc;MACvDvC,MAAM;MACNK,gBAAgB;MAChBC,QAAQ;IACV,CAAC;AACD5C,uBAAmBhF,SAAQuD,gBAAgBuG,cAAc;MACvDxC,MAAM;MACNK,gBAAgB;MAChBC,QAAQ;IACV,CAAC;EACH,CAAC;AAED,QAAMoC,iBAAiBA,MACrBzF,SAAS,IAAI,8BAA8B;AAE7C,QAAM6C,gBAAgBA,OAAO7F,IAAI,IAAID,IAAI,KAAKf,KAAK;AAEnD,QAAM0J,YAAYA,MAAM;AACtB,UAAMC,KAAK9C,cAAc;AACzB,QAAI8C,MAAM,IAAI;AACZ,aAAOC,MAAMC,KAAK;QAAExJ,QAAQsJ,KAAK;MAAE,GAAG,CAACG,GAAGC,MAAM;AAC9C,cAAM7G,OAAQ6G,IAAI,KAAK/J,KAAK,KAAMgB,IAAI,IAAID,IAAI,KAAK;AACnD,gBAAA,MAAA;AAAA,cAAAiJ,OAAAC,SAAA;AAAAC,6BAAAF,MAAA,QAA2D,GAAG9G,GAAG,GAAG;AAAA,iBAAA8G;QAAA,GAAA;MACtE,CAAC;IACH;AACA,WAAOJ,MAAMC,KAAK;MAAExJ,QAAQ;IAAE,GAAG,CAACyJ,GAAGC,MAAM;AACzC,YAAM7G,OAAO6G,IAAI,KAAK;AACtB,cAAA,MAAA;AAAA,YAAAI,QAAAF,SAAA;AAAAC,2BAAAC,OAAA,QAA2D,GAAGjH,GAAG,GAAG;AAAA,eAAAiH;MAAA,GAAA;IACtE,CAAC;EACH;AAEA,UAAA,MAAA;AAAA,QAAAC,QAAAC,SAAA,GAAAC,QAAAF,MAAAG,YAAAC,QAAAF,MAAAC,YAAAE,QAAAD,MAAAE,aAAAC,QAAAF,MAAAC,aAAAE,QAAAD,MAAAD;AAAA,QAAAG,QACYvJ;AAAU,WAAAuJ,UAAA,aAAAC,OAAAD,OAAAT,KAAA,IAAV9I,aAAU8I;AAAAE,UAAAS,iBAAA,cASF,MAAM7I,aAAa,KAAK,CAAC;AAAAoI,UAAAS,iBAAA,cADzB,MAAM7I,aAAa,IAAI,CAAC;AAAAoI,UAAAS,iBAAA,iBADrBzD,mBAAmB;AAAAgD,UAAAU,cADvBpE;AAAe0D,UAAAW,gBADb7E;AAAiBkE,UAAAY,gBADjBxF;AAAiB,QAAAyF,SAF3B5J;AAAQ,WAAA4J,WAAA,aAAAL,OAAAK,QAAAb,KAAA,IAAR/I,WAAQ+I;AAAAc,IAAAA,UAAAZ,OAS0Bd,SAAS;AAAA,QAAA2B,SAGzC7J;AAAO,WAAA6J,WAAA,aAAAP,OAAAO,QAAAZ,KAAA,IAAPjJ,UAAOiJ;AAAA,QAAAa,SAUP7J;AAAS,WAAA6J,WAAA,aAAAR,OAAAQ,QAAAX,KAAA,IAATlJ,YAASkJ;AAAA,QAAAY,SAUL7J;AAAQ,WAAA6J,WAAA,aAAAT,OAAAS,QAAAX,KAAA,IAARlJ,WAAQkJ;AAAAQ,IAAAA,UAAAR,OAAA,MAAgCvJ,MAAMmK,KAAK;AAAAJ,IAAAA,UAAAd,QAAA,MAAA;AAAA,UAAAmB,MAAAC,QAAA,MAAA,CAAA,CAE7DnJ,UAAU,CAAC;AAAA,aAAA,MAAXkJ,IAAA,KAAA,MAAA;AAAA,YAAAE,QAAAC,SAAA;AAAAD,cAAAE,cAUiBlG,OAAMA,EAAE8C,gBAAgB;AAACkD,cAAAG,UAD7BnG,OAAMA,EAAE8C,gBAAgB;AAACkD,cAAAZ,iBAAA,QAD3B3C,iBAAiB;AAAAuD,cAAAI,YADdrD;AAAkBiD,cAAAK,UADnBrG,OAAMjD,cAAciD,EAAEE,cAAcjD,KAAK;AAAC,YAAAqJ,SAJ/CrK;AAAQ,eAAAqK,WAAA,aAAAnB,OAAAmB,QAAAN,KAAA,IAAR/J,WAAQ+J;AAAAO,QAAAA,UAAA,MAAAP,MAAA/I,QAGNH,WAAW,CAAC;AAAA,eAAAkJ;MAAA,GAAA,KAAA,MAAA;AAAA,YAAAQ,QAAAC,SAAA;AAAAD,cAAAN,cAcLlG,OAAMtD,gBAAgB,KAAKsD,EAAE8C,gBAAgB;AAAC0D,cAAAL,UADnDtD;AAAgB2D,cAAApB,iBAAA,cADX,MAAM3I,kBAAkB,KAAK,CAAC;AAAA+J,cAAApB,iBAAA,cAD9B,MAAM3I,kBAAkB,IAAI,CAAC;AAAA,YAAAiK,SAFtC1K;AAAY,eAAA0K,WAAA,aAAAvB,OAAAuB,QAAAF,KAAA,IAAZxK,eAAYwK;AAAAf,QAAAA,UAAAe,OAQhBvD,YAAY;AAAAsD,QAAAA,UAAAI,SAAA;AAAA,cAAAC,OAPN,wBAAwBlK,gBAAgB,IAAI,kCAAkC,EAAE,IAAEmK,OAKxEnK,gBAAgB,IAAI,SAAS;AAASkK,mBAAAD,IAAA3G,KAAA8G,aAAAN,OAAAG,IAAA3G,IAAA4G,IAAA;AAAAC,mBAAAF,IAAAI,KAAAxC,mBAAAiC,OAAA,UAAAG,IAAAI,IAAAF,IAAA;AAAA,iBAAAF;QAAA,GAAA;UAAA3G,GAAAgH;UAAAD,GAAAC;QAAA,CAAA;AAAA,eAAAR;MAAA,GAAA;IAI1D,GAAA,GAAA,IAAA;AAAAD,IAAAA,UAAAI,SAAA;AAAA,UAAAM,MAzDM,kBAAkB5I,SAAS,IAAI,0BAA0B,EAAE,IAAE6I,OAcpDpD,eAAe,GAACqD,OACrB,GAAGnK,YAAYiB,IAAI,CAAC,KAAGmJ,OASxB,iBAAiBpK,YAAYiB,IAAI,CAAC;AAAWgJ,cAAAN,IAAA3G,KAAA8G,aAAAnC,OAAAgC,IAAA3G,IAAAiH,GAAA;AAAAC,eAAAP,IAAAI,KAAAxC,mBAAAO,OAAA,cAAA6B,IAAAI,IAAAG,IAAA;AAAAC,eAAAR,IAAAU,KAAA9C,mBAAAO,OAAA,SAAA6B,IAAAU,IAAAF,IAAA;AAAAC,eAAAT,IAAAW,KAAA/C,mBAAAS,OAAA,QAAA2B,IAAAW,IAAAF,IAAA;AAAA,aAAAT;IAAA,GAAA;MAAA3G,GAAAgH;MAAAD,GAAAC;MAAAK,GAAAL;MAAAM,GAAAN;IAAA,CAAA;AAAA,WAAAvC;EAAA,GAAA;AAqC/D;AAAC8C,kBAAA,CAAA,eAAA,eAAA,aAAA,SAAA,WAAA,SAAA,WAAA,CAAA;A;;;;;;;;;;;;;;;;AC3bD,SAASC,gBAAAA,eAAcC,oBAAoBC,WAAAA,UAASC,aAAAA,YAAWC,WAAW;AAC1E,SAASC,WAAAA,gBAAe;;;AAajB,SAASC,iBAAmCC,OAAiC;AAClF,MAAIC;AACJ,MAAIC;AACJ,QAAMC,aAAa,oBAAIC,IAA0B;AACjD,QAAM,CAACC,WAAWC,YAAY,IAAIb,cAAa,KAAK;AAEpD,MAAIc,cAAc;AAClB,MAAIC,WAAgB;AAEpB,QAAMC,cAAcA,MAAM;AACxB,UAAMC,SAASP,WAAWQ,IAAIX,MAAMY,KAAK;AACzC,QAAI,CAACF,UAAU,CAACT,aAAc,QAAO;AACrC,UAAMY,gBAAgBZ,aAAaa,sBAAsB;AACzD,UAAMC,aAAaL,OAAOI,sBAAsB;AAChD,WAAO;MACLE,MAAMD,WAAWC,OAAOH,cAAcG;MACtCC,OAAOF,WAAWE;IACpB;EACF;AAEA,QAAMC,mBAAmBA,CAACF,MAAcC,UAAkB;AACxD,QAAI,CAACf,QAAS;AACdA,YAAQiB,MAAMH,OAAO,GAAGA,IAAI;AAC5Bd,YAAQiB,MAAMF,QAAQ,GAAGA,KAAK;EAChC;AAEA,QAAMG,aAAcC,mBAA2B;AAC7C,UAAMC,OAAOb,YAAY;AACzB,QAAI,CAACa,KAAM;AAEX,QAAI,CAACjB,UAAU,GAAG;AAChBa,uBAAiBI,KAAKN,MAAMM,KAAKL,KAAK;AACtCX,mBAAa,IAAI;AACjB;IACF;AAEA,QAAI,CAACe,iBAAiB,CAACd,aAAa;AAClCC,gBAAUe,KAAK;AACff,iBAAW;AACXU,uBAAiBI,KAAKN,MAAMM,KAAKL,KAAK;AACtC;IACF;AAEAT,cAAUe,KAAK;AACff,eAAWV,SAAQI,SAAS;MAC1Bc,MAAMM,KAAKN;MACXC,OAAOK,KAAKL;IACd,GAAG;MACDO,MAAM;MACNC,gBAAgB;MAChBC,QAAQ;MACRC,YAAYA,MAAM;AAChBnB,mBAAW;MACb;IACF,CAAC;EACH;AAEAd,qBAAmB,MAAM;AACvB,UAAMkC,IAAI5B,MAAMY;AAChB,QAAI,CAACP,UAAU,EAAG;AAClBe,eAAW,IAAI;EACjB,CAAC;AAEDzB,EAAAA,SAAQ,MAAM;AACZkC,0BAAsB,MAAM;AAC1BT,iBAAW,KAAK;AAChBb,oBAAc;IAChB,CAAC;AAED,QAAI,OAAOuB,mBAAmB,YAAa;AAC3C,UAAMC,KAAK,IAAID,eAAe,MAAMV,WAAW,KAAK,CAAC;AACrDW,OAAGC,QAAQ/B,YAAY;AAEvBL,IAAAA,WAAU,MAAM;AACdY,gBAAUe,KAAK;AACfQ,SAAGE,WAAW;IAChB,CAAC;EACH,CAAC;AAED,UAAA,MAAA;AAAA,QAAAC,OAAAC,SAAA,GAAAC,QAAAF,KAAAG;AAAA,QAAAC,QACYrC;AAAY,WAAAqC,UAAA,aAAAC,OAAAD,OAAAJ,IAAA,IAAZjC,eAAYiC;AAAA,QAAAM,SAEbtC;AAAO,WAAAsC,WAAA,aAAAD,OAAAC,QAAAJ,KAAA,IAAPlC,UAAOkC;AAAAK,IAAAA,UAAAP,MAAAQ,mBAIb7C,KAAG;MAAA,IAAC8C,OAAI;AAAA,eAAE3C,MAAM4C;MAAO;MAAAC,UACpBC,aAAM,MAAA;AAAA,YAAAC,QAAAC,SAAA;AAAAD,cAAAE,UAMK,MAAMjD,MAAMkD,SAASJ,OAAOlC,KAAK;AAAC2B,QAAAA,OAJrCY,QAAO;AACX,cAAI,CAACA,GAAI;AACThD,qBAAWiD,IAAIN,OAAOlC,OAAOuC,EAAE;QACjC,GAACJ,KAAA;AAAAN,QAAAA,UAAAM,OAAA,MAKAD,OAAOO,KAAK;AAAAC,QAAAA,UAAA,MAAAC,gBAAAR,OAAA,eAFAS,OAAOxD,MAAMY,UAAUkC,OAAOlC,KAAK,CAAC,CAAA;AAAA,eAAAmC;MAAA,GAAA;IAIpD,CAAA,GAAA,IAAA;AAAAO,IAAAA,UAAAG,SAAAC,oBAAAtB,OAAA,cAf+C/B,UAAU,IAAI,YAAY,QAAQ,CAAA;AAAA,WAAA6B;EAAA,GAAA;AAmB1F;AAACyB,kBAAA,CAAA,OAAA,CAAA;;;;AC7GM,SAASC,OAAOC,OAAoB;AACzC,UAAA,MAAA;AAAA,QAAAC,OAAAC,SAAA,GAAAC,QAAAF,KAAAG;AAAAC,IAAAA,UAAAF,OAAA,MAEiDH,MAAMM,KAAK;AAAAD,IAAAA,UAAAJ,MAAAM,mBACvDC,kBAAgB;MACfC,SAAS,CACP;QAAEC,OAAO;QAAgBJ,OAAO;MAAM,GACtC;QAAEI,OAAO;QAAeJ,OAAO;MAAK,CAAC;MACtC,IACDI,QAAK;AAAA,eAAEV,MAAMW,UAAU,OAAO;MAAK;MACnCC,UAAWC,SAAQb,MAAMY,SAASC,QAAQ,IAAI;IAAC,CAAA,GAAA,IAAA;AAAA,WAAAZ;EAAA,GAAA;AAIvD;;;;;;;ACtBA,SAASa,gBAAAA,eAAcC,WAAAA,UAASC,aAAAA,kBAAiB;;;;;;;;;;ACOjD,SAASC,oBACPC,WACAC,SACAC,MACAC,UACoB;AACpB,QAAMC,SAA6B,CAAA;AACnC,QAAMC,QAAQ;AACd,QAAMC,KAAKH,WAAWE;AAEtB,MAAIE,WAAW;AACf,MAAIC,WAAW;AACf,QAAMC,SAAS;AAEf,WAASC,IAAI,GAAGA,KAAKL,OAAOK,KAAK;AAC/B,UAAMC,OAAOD,IAAIJ;AACjBF,WAAOQ,KAAK,CAACD,MAAMJ,QAAQ,CAAC;AAE5B,UAAMM,cAAc,CAACb,aAAaO,WAAWE;AAC7C,UAAMK,eAAe,CAACb,UAAUO;AAChC,UAAMO,gBAAgBF,cAAcC,gBAAgBZ;AAEpDM,gBAAYO,eAAeT;AAC3BC,gBAAYC,WAAWF;EACzB;AAEA,SAAOF;AACT;AAEO,SAASY,oBAAoBC,OAAiC;AACnE,QAAMC,QAAQ;AACd,QAAMC,SAAS;AAEf,QAAMC,SAASA,MAAM;AACnB,QAAIpB;AACJ,QAAIC;AACJ,QAAIC;AAEJ,QAAIe,MAAMI,cAAc;AACtB,YAAMC,iBAAiBL,MAAMM,OAAOD,kBAAkB;AACtD,YAAME,SAASP,MAAMM,OAAOC,UAAU;AACtCtB,aAAO;AACPF,kBAAYyB,KAAKC,IAAK,IAAID,KAAKE,KAAML,gBAAgB,CAAC;AACtD,YAAMM,eAAe,IAAIJ;AACzBvB,gBAAU,IAAI2B,eAAeH,KAAKI,KAAK7B,YAAYE,IAAI;IACzD,OAAO;AACLF,kBAAYiB,MAAMM,OAAOvB,aAAa;AACtCC,gBAAUgB,MAAMM,OAAOtB,WAAW;AAClCC,aAAOe,MAAMM,OAAOrB,QAAQ;IAC9B;AAEA,UAAMC,WAAW;AACjB,UAAMC,SAASL,oBAAoBC,WAAWC,SAASC,MAAMC,QAAQ;AACrE,UAAM2B,SAAS1B,OAAO2B,IAAI,CAAC,CAAA,EAAGC,KAAK,MAAMA,KAAK;AAC9C,UAAMC,WAAWR,KAAKS,IAAI,GAAGJ,MAAM;AACnC,UAAMK,WAAWV,KAAKW,IAAI,GAAGN,MAAM;AACnC,UAAMO,aAAaF,WAAWF;AAE9B,UAAMK,WAAWlC,OACd2B,IAAI,CAAC,CAACpB,MAAMqB,KAAK,GAAGtB,MAAM;AACzB,YAAM6B,IAAK5B,OAAOR,WAAYe;AAC9B,YAAMsB,mBAAmBR,QAAQC,aAAaI,cAAc;AAC5D,YAAMI,IAAItB,UAAUqB,kBAAkBrB,SAAS,MAAMA,SAAS;AAC9D,aAAO,GAAGT,MAAM,IAAI,MAAM,GAAG,IAAI6B,CAAC,IAAIE,CAAC;IACzC,CAAC,EACAC,KAAK,GAAG;AAEX,WAAOJ;EACT;AAEA,QAAMK,YAAYA,MAAM;AACtB,UAAMC,QAAQ,CAAA;AACd,aAASlC,IAAI,GAAGA,IAAI,GAAGA,KAAK;AAC1B,YAAM6B,IAAKrB,QAAQ,IAAKR;AACxB,YAAM+B,IAAKtB,SAAS,IAAKT;AACzBkC,YAAMhC,MAAI,MAAA;AAAA,YAAAiC,OAAAC,SAAA;AAAAC,QAAAA,gBAAAF,MAAA,MACEN,CAAC;AAAAQ,QAAAA,gBAAAF,MAAA,MAAaN,CAAC;AAAA,eAAAM;MAAA,GAAA,IAAA,MAAA;AAAA,YAAAG,QAAAC,SAAA;AAAAF,QAAAA,gBAAAC,OAAA,MACRP,CAAC;AAAAM,QAAAA,gBAAAC,OAAA,MAAiBP,CAAC;AAAA,eAAAO;MAAA,GAAA,CACtC;IACF;AACA,WAAOJ;EACT;AAEA,UAAA,MAAA;AAAA,QAAAM,QAAAC,SAAA,GAAAC,QAAAF,MAAAG,YAAAC,QAAAF,MAAAG;AAAAC,IAAAA,UAAAN,OAEKP,WAASS,KAAA;AAAAK,IAAAA,UAAA,MAAAV,gBAAAO,OAAA,KAWLlC,OAAO,CAAC,CAAA;AAAA,WAAA8B;EAAA,GAAA;AASnB;;;;ADhGO,SAASQ,cAAcC,OAA2B;AACvD,QAAM,CAACC,MAAMC,OAAO,IAAIC,cACtBC,UAAUC,cAAcL,MAAMM,SAASN,MAAMO,IAAI,CACnD;AAGAC,EAAAA,SAAQ,MAAM;AACZ,UAAMC,QAAQL,UAAUM,UAAUV,MAAMM,SAAS,MAAM;AACrDJ,cAAQE,UAAUC,cAAcL,MAAMM,SAASN,MAAMO,IAAI,CAAC;IAC5D,CAAC;AACDI,IAAAA,WAAUF,KAAK;EACjB,CAAC;AAED,QAAMG,eAAeA,MAAMX,KAAK,MAAM;AAEtC,QAAMY,mBAAoBC,aAAmC;AAC3DV,cAAUW,iBAAiBf,MAAMM,SAASN,MAAMO,MAAMO,OAAO;AAE7D,QAAIA,YAAY,UAAU;AACxB,YAAM;QAAEE;QAAWC;QAASC;QAAM,GAAGC;MAAK,IAAInB,MAAMoB;AACpDpB,YAAMqB,SAAS;QACb,GAAGF;QACHG,MAAM;QACNC,gBAAgBvB,MAAMoB,OAAOG,kBAAkB;QAC/CC,QAAQxB,MAAMoB,OAAOI,UAAU;MACjC,CAAC;IACH,OAAO;AACL,YAAM;QAAED;QAAgBC;QAAQ,GAAGL;MAAK,IAAInB,MAAMoB;AAClDpB,YAAMqB,SAAS;QACb,GAAGF;QACHG,MAAM;QACNN,WAAWhB,MAAMoB,OAAOJ,aAAa;QACrCC,SAASjB,MAAMoB,OAAOH,WAAW;QACjCC,MAAMlB,MAAMoB,OAAOF,QAAQ;MAC7B,CAAC;IACH;EACF;AAEA,QAAMO,eAAeA,CAACC,KAAyBC,UAAkB;AAC/D,QAAIf,aAAa,GAAG;AAClB,YAAM;QAAEI;QAAWC;QAASC;QAAM,GAAGC;MAAK,IAAInB,MAAMoB;AACpDpB,YAAMqB,SAAS;QAAE,GAAGF;QAAM,CAACO,GAAG,GAAGC;MAAM,CAAC;IAC1C,OAAO;AACL,YAAM;QAAEJ;QAAgBC;QAAQ,GAAGL;MAAK,IAAInB,MAAMoB;AAClDpB,YAAMqB,SAAS;QAAE,GAAGF;QAAM,CAACO,GAAG,GAAGC;MAAM,CAAC;IAC1C;EACF;AAEA,SAAAC,mBACGC,QAAM;IAAA,IAACC,QAAK;AAAA,aAAE9B,MAAM+B;IAAK;IAAEC,aAAa;IAAI,IAAAC,WAAA;AAAA,UAAAC,OAAAC,SAAA,GAAAC,QAAAF,KAAAG,YAAAC,QAAAF,MAAAC;AAAAE,MAAAA,UAAAL,MAAAN,mBAExCY,qBAAmB;QAAA,IAACpB,SAAM;AAAA,iBAAEpB,MAAMoB;QAAM;QAAA,IAAER,eAAY;AAAA,iBAAEA,aAAa;QAAC;MAAA,CAAA,GAAAwB,KAAA;AAAAG,MAAAA,UAAAH,OAAAR,mBAIpEa,kBAAgB;QACfC,SAAS,CACP;UAAEf,OAAO;UAAmBI,OAAO;QAAO,GAC1C;UAAEJ,OAAO;UAAqBI,OAAO;QAAU,CAAC;QACjD,IACDJ,QAAK;AAAA,iBAAE1B,KAAK;QAAC;QACboB,UAAUR;MAAgB,CAAA,GAAA,IAAA;AAAA0B,MAAAA,UAAAL,OAAA,MAAA;AAAA,YAAAS,MAAAC,QAAA,MAAA,CAAA,CAI7BhC,aAAa,CAAC;AAAA,eAAA,MAAd+B,IAAA,IAAA,CAAAf,mBAEIiB,QAAM;UACLd,OAAK;UAAA,IACLJ,QAAK;AAAA,mBAAE3B,MAAMoB,OAAOG,kBAAkB;UAAG;UACzCF,UAAWyB,OAAMrB,aAAa,kBAAkBqB,CAAC;UACjDC,KAAK;UACLC,KAAK;UACLC,MAAM;UACNC,MAAI;QAAA,CAAA,GAAAtB,mBAELiB,QAAM;UACLd,OAAK;UAAA,IACLJ,QAAK;AAAA,mBAAE3B,MAAMoB,OAAOI,UAAU;UAAG;UACjCH,UAAWyB,OAAMrB,aAAa,UAAUqB,CAAC;UACzCC,KAAK;UACLC,KAAK;UACLC,MAAM;QAAI,CAAA,CAAA,IAAA,CAAArB,mBAKXiB,QAAM;UACLd,OAAK;UAAA,IACLJ,QAAK;AAAA,mBAAE3B,MAAMoB,OAAOJ,aAAa;UAAG;UACpCK,UAAWyB,OAAMrB,aAAa,aAAaqB,CAAC;UAC5CC,KAAK;UACLC,KAAK;UACLC,MAAM;QAAE,CAAA,GAAArB,mBAETiB,QAAM;UACLd,OAAK;UAAA,IACLJ,QAAK;AAAA,mBAAE3B,MAAMoB,OAAOH,WAAW;UAAE;UACjCI,UAAWyB,OAAMrB,aAAa,WAAWqB,CAAC;UAC1CC,KAAK;UACLC,KAAK;UACLC,MAAM;QAAC,CAAA,GAAArB,mBAERiB,QAAM;UACLd,OAAK;UAAA,IACLJ,QAAK;AAAA,mBAAE3B,MAAMoB,OAAOF,QAAQ;UAAC;UAC7BG,UAAWyB,OAAMrB,aAAa,QAAQqB,CAAC;UACvCC,KAAK;UACLC,KAAK;UACLC,MAAM;QAAG,CAAA,CAAA;MAGd,GAAA,GAAA,IAAA;AAAA,aAAAf;IAAA;EAAA,CAAA;AAIT;;;;;;;;AEpIA,SAASiB,kBAAAA,uBAAsB;;AASxB,SAASC,YAAYC,OAAyB;AACnD,QAAMC,UAAUH,gBAAe;AAE/B,UAAA,MAAA;AAAA,QAAAI,OAAAC,SAAA,GAAAC,QAAAF,KAAAG,YAAAC,QAAAF,MAAAG;AAAAC,IAAAA,gBAAAJ,OAAA,OAE2CH,OAAO;AAAAQ,IAAAA,UAAAL,OAAA,MAAGJ,MAAMU,KAAK;AAAAJ,UAAAK,UAMhDC,OAAMZ,MAAMa,SAASD,EAAEE,cAAcC,KAAK;AAACP,IAAAA,gBAAAF,OAAA,MAJjDL,OAAO;AAAAe,IAAAA,UAAA,MAAAR,gBAAAF,OAAA,eAKEN,MAAMiB,WAAW,CAAA;AAAAD,IAAAA,UAAA,MAAAV,MAAAS,QAFvBf,MAAMe,KAAK;AAAA,WAAAb;EAAA,GAAA;AAM1B;AAACgB,kBAAA,CAAA,OAAA,CAAA;;;;;;;;;;;;ACzBD,SAASC,gBAAAA,eAAcC,gBAAAA,eAAcC,WAAAA,UAASC,aAAAA,YAAWC,QAAAA,OAAMC,OAAAA,YAAW;AAC1E,SAASC,cAAc;AACvB,SAASC,WAAAA,gBAAe;;;;AAWxB,SAASC,YAAYC,GAAmB;AACtC,SAAOA,EAAEC,QAAQ,SAAUC,OAAMA,EAAEC,YAAY,CAAC;AAClD;AAEA,SAASC,iBAAiBC,SAA6D;AACrF,SAAOA,QAAQC,IAAKC,SAClB,OAAOA,QAAQ,WAAW;IAAEC,OAAOD;IAAKE,OAAOV,YAAYQ,GAAG;EAAE,IAAIA,GACtE;AACF;AAEO,SAASG,cAAcC,OAA2B;AACvD,QAAM,CAACC,QAAQC,SAAS,IAAItB,cAAa,KAAK;AAC9C,QAAM,CAACuB,SAASC,UAAU,IAAIxB,cAAa,KAAK;AAChD,QAAM,CAACyB,KAAKC,MAAM,IAAI1B,cAAkF,IAAI;AAC5G,QAAM,CAAC2B,cAAcC,eAAe,IAAI5B,cAAiC,IAAI;AAC7E,MAAI6B;AACJ,MAAIC;AACJ,MAAIC;AACJ,MAAIC,YAAiB;AACrB,MAAIC,cAAmB;AAEvB,QAAMC,aAAaA,MAAMrB,iBAAiBO,MAAMN,OAAO;AACvD,QAAMqB,iBAAiBA,MAAMD,WAAW,EAAEE,KAAMC,OAAMA,EAAEpB,UAAUG,MAAMH,KAAK;AAE7Ef,EAAAA,SAAQ,MAAM;AACZ,UAAMoC,OAAOT,YAAYU,QAAQ,eAAe;AAChDX,oBAAgBU,QAAQE,SAASC,IAAI;AAErC,QAAIV,YAAY;AACdA,iBAAWW,MAAMC,YAAY,UAAUtB,OAAO,IAAI,MAAM,CAAC;IAC3D;AAEAlB,IAAAA,WAAU,MAAM;AACd6B,iBAAWY,KAAK;AAChBX,mBAAaW,KAAK;IACpB,CAAC;EACH,CAAC;AAED3C,EAAAA,cAAa,MAAM;AACjB,QAAI,CAAC8B,WAAY;AACjB,UAAMc,OAAOxB,OAAO;AACpBY,iBAAaW,KAAK;AAClBX,kBAAc1B,SACZwB,YACA;MAAEe,QAAQD,OAAO,MAAM;IAAE,GACzB;MAAEE,MAAM;MAAUC,gBAAgB;MAAKC,QAAQ;IAAK,CACtD;EACF,CAAC;AAED,QAAMC,YAAYA,MAAM;AACtB,QAAI,CAACrB,WAAY;AACjB,UAAMsB,OAAOtB,WAAWuB,sBAAsB;AAC9C,UAAMC,iBAAiB,IAAInB,WAAW,EAAEoB,SAAS;AACjD,UAAMC,aAAaC,OAAOC,cAAcN,KAAKO,SAAS;AACtD,UAAMC,QAAQJ,aAAaF,kBAAkBF,KAAKS,MAAML;AACxD7B,WAAO;MACLkC,KAAKD,QAAQR,KAAKS,MAAM,IAAIT,KAAKO,SAAS;MAC1CG,MAAMV,KAAKU;MACXC,OAAOX,KAAKW;MACZH;IACF,CAAC;EACH;AAEA,QAAMI,eAAeA,MAAM;AACzB/B,eAAWY,KAAK;AAChBZ,gBAAY;AACZkB,cAAU;AACV1B,eAAW,IAAI;AACfF,cAAU,IAAI;EAChB;AAEA,QAAM0C,gBAAgBA,MAAM;AAC1B1C,cAAU,KAAK;AACf,QAAI,CAACQ,aAAa;AAAEN,iBAAW,KAAK;AAAG;IAAQ;AAC/C,UAAMmC,QAAQlC,IAAI,GAAGkC,SAAS;AAC9B3B,eAAWY,KAAK;AAChBZ,gBAAYzB,SACVuB,aACA;MAAEmC,SAAS;MAAGC,GAAGP,QAAQ,IAAI;MAAIQ,OAAO;IAAK,GAC7C;MAAEpB,MAAM;MAAUC,gBAAgB;MAAMC,QAAQ;MAAGmB,YAAYA,MAAM;AAAE5C,mBAAW,KAAK;AAAGQ,oBAAY;MAAM;IAAE,CAChH;EACF;AAGA/B,EAAAA,cAAa,MAAM;AACjB,QAAI,CAACoB,OAAO,EAAG;AACf,UAAMgD,uBAAuBA,MAAMnB,UAAU;AAE7C,UAAMoB,cAAeC,OAAkB;AACrC,YAAMC,SAASD,EAAEC;AACjB,UACE3C,cAAc,CAACA,WAAW4C,SAASD,MAAM,KACzC1C,eAAe,CAACA,YAAY2C,SAASD,MAAM,GAC3C;AACAR,sBAAc;MAChB;IACF;AAEAd,cAAU;AACVV,aAASkC,iBAAiB,aAAaJ,WAAW;AAClDd,WAAOkB,iBAAiB,UAAUL,oBAAoB;AACtDb,WAAOkB,iBAAiB,UAAUL,sBAAsB,IAAI;AAC5DlE,IAAAA,WAAU,MAAM;AACdqC,eAASmC,oBAAoB,aAAaL,WAAW;AACrDd,aAAOmB,oBAAoB,UAAUN,oBAAoB;AACzDb,aAAOmB,oBAAoB,UAAUN,sBAAsB,IAAI;IACjE,CAAC;EACH,CAAC;AAED,QAAMO,gBAAgBA,MAAM;AAC1B,UAAMC,IAAIpD,IAAI;AACd,QAAI,CAACoD,EAAG,QAAO,CAAC;AAChB,WAAO;MACLC,UAAU;MACVjB,MAAM,GAAGgB,EAAEhB,IAAI;MACfC,OAAO,GAAGe,EAAEf,KAAK;MACjB,GAAIe,EAAElB,QACF;QAAED,QAAQ,GAAGF,OAAOC,cAAcoB,EAAEjB,GAAG;QAAM,oBAAoB;MAAS,IAC1E;QAAEA,KAAK,GAAGiB,EAAEjB,GAAG;QAAM,oBAAoB;MAAM;IACrD;EACF;AAEA,UAAA,MAAA;AAAA,QAAAmB,OAAAC,SAAA,GAAAC,QAAAF,KAAAG,YAAAC,QAAAF,MAAAC,YAAAE,QAAAD,MAAAE,aAAAC,QAAAF,MAAAF,YAAAK,QAAAD,MAAAD;AAAAJ,UAAAO,UAKe,MAAMnE,OAAO,IAAI2C,cAAc,IAAID,aAAa;AAAC,QAAA0B,QAFrD5D;AAAU,WAAA4D,UAAA,aAAAC,OAAAD,OAAAR,KAAA,IAAVpD,aAAUoD;AAAAU,IAAAA,UAAAR,OAAA,MAKqB/D,MAAMF,KAAK;AAAAyE,IAAAA,UAAAL,OAAA,MAETnD,eAAe,GAAGjB,SAASE,MAAMH,KAAK;AAAA,QAAA2E,SAEnE7D;AAAU,WAAA6D,WAAA,aAAAF,OAAAE,QAAAL,KAAA,IAAVxD,aAAUwD;AAAAI,IAAAA,UAAAZ,MAAAc,mBAcpBzF,OAAI;MAAA,IAAC0F,OAAI;AAAA,eAAE,CAAC,CAACnE,aAAa;MAAC;MAAA,IAAAoE,WAAA;AAAA,eAAAF,mBACzBvF,QAAM;UAAA,IAAC0F,QAAK;AAAA,mBAAErE,aAAa;UAAC;UAAA,IAAAoE,WAAA;AAAA,mBAAAF,mBAC1BzF,OAAI;cAAA,IAAC0F,OAAI;AAAA,uBAAEG,QAAA,MAAA,CAAA,CAAA1E,QAAQ,CAAC,EAAA,KAAIE,IAAI;cAAC;cAAA,IAAAsE,WAAA;AAAA,oBAAAG,QAAAC,SAAA;AAAAT,gBAAAA,OAEpBU,QAAO;AACXtE,gCAAcsE;AACd,wBAAMzC,QAAQlC,IAAI,GAAGkC,SAAS;AAC9BpD,kBAAAA,SACE6F,IACA;oBAAEnC,SAAS,CAAC,GAAG,CAAC;oBAAGC,GAAG,CAACP,QAAQ,IAAI,IAAI,CAAC;oBAAGQ,OAAO,CAAC,MAAM,CAAC;kBAAE,GAC5D;oBAAEpB,MAAM;oBAAUC,gBAAgB;oBAAMC,QAAQ;kBAAE,CACpD;gBACF,GAACiD,KAAA;AAAAP,gBAAAA,UAAAO,OAAAL,mBAIAxF,MAAG;kBAAA,IAACgG,OAAI;AAAA,2BAAEnE,WAAW;kBAAC;kBAAA6D,UACnBO,aAAM,MAAA;AAAA,wBAAAC,QAAAC,SAAA;AAAAD,0BAAAf,UAIK,MAAM;AACbpE,4BAAMqF,SAASH,OAAOrF,KAAK;AAC3B+C,oCAAc;oBAChB;AAAC2B,oBAAAA,UAAAY,OAAA,MAEAD,OAAOpF,KAAK;AAAAwF,oBAAAA,UAAA,MAAAC,gBAAAJ,OAAA,iBANEK,OAAON,OAAOrF,UAAUG,MAAMH,KAAK,CAAC,CAAA;AAAA,2BAAAsF;kBAAA,GAAA;gBAQtD,CAAA,CAAA;AAAAG,gBAAAA,UAAAG,SAAAC,SAAAZ,OAdItB,cAAc,GAACiC,GAAA,CAAA;AAAA,uBAAAX;cAAA;YAAA,CAAA;UAAA;QAAA,CAAA;MAAA;IAAA,CAAA,GAAA,IAAA;AAAAQ,IAAAA,UAAA,MAAAC,gBAAA1B,OAAA,aAlCjB2B,OAAOvF,OAAO,CAAC,CAAC,CAAA;AAAA,WAAA0D;EAAA,GAAA;AAwDnC;AAACgC,kBAAA,CAAA,OAAA,CAAA;;;;;;;;;;;ACrMD,SAASC,gBAAAA,eAAcC,gBAAAA,eAAcC,kBAAAA,iBAAgBC,QAAAA,aAAY;;;;AAQjE,IAAMC,kBAAkB;AAExB,SAASC,mBAAmBC,KAAqB;AAC/C,MAAIA,IAAIC,WAAW,EAAG,QAAOD;AAC7B,SAAO,IAAIA,IAAI,CAAC,CAAC,GAAGA,IAAI,CAAC,CAAC,GAAGA,IAAI,CAAC,CAAC,GAAGA,IAAI,CAAC,CAAC,GAAGA,IAAI,CAAC,CAAC,GAAGA,IAAI,CAAC,CAAC;AAChE;AAEO,SAASE,aAAaC,OAA0B;AACrD,QAAM,CAACC,WAAWC,YAAY,IAAIX,cAAa,KAAK;AACpD,QAAM,CAACY,WAAWC,YAAY,IAAIb,cAAaS,MAAMK,KAAK;AAC1D,QAAMC,cAAcb,gBAAe;AACnC,MAAIc;AAGJf,EAAAA,cAAa,MAAM;AACjB,QAAI,CAACS,UAAU,GAAG;AAChBG,mBAAaJ,MAAMK,KAAK;IAC1B;EACF,CAAC;AAED,QAAMG,mBAAmBA,MAAM;AAC7BN,iBAAa,KAAK;AAClB,QAAIP,gBAAgBc,KAAKN,UAAU,CAAC,GAAG;AACrCH,YAAMU,SAASP,UAAU,CAAC;IAC5B,OAAO;AACLC,mBAAaJ,MAAMK,KAAK;IAC1B;EACF;AAEA,QAAMM,gBAAiBC,OAAqB;AAC1C,QAAIA,EAAEC,QAAQ,QAASL,kBAAiB;aAC/BI,EAAEC,QAAQ,UAAU;AAC3BX,mBAAa,KAAK;AAClBE,mBAAaJ,MAAMK,KAAK;IAC1B;EACF;AAEA,UAAA,MAAA;AAAA,QAAAS,OAAAC,SAAA,GAAAC,QAAAF,KAAAG,YAAAC,QAAAF,MAAAG,aAAAC,QAAAF,MAAAD,YAAAI,QAAAD,MAAAD;AAAAG,IAAAA,gBAAAN,OAAA,OAE4CV,WAAW;AAAAiB,IAAAA,UAAAP,OAAA,MAAGhB,MAAMwB,KAAK;AAAAD,IAAAA,UAAAL,OAAAO,mBAE9D/B,OAAI;MAAA,IACHgC,OAAI;AAAA,eAAEzB,UAAU;MAAC;MAAA,IACjB0B,WAAQ;AAAA,gBAAA,MAAA;AAAA,cAAAC,QAAAC,SAAA;AAAAD,gBAAAE,UACmC,MAAM5B,aAAa,IAAI;AAACqB,UAAAA,UAAAK,OAAA,OAC7D5B,MAAMK,SAAS,IAAI0B,YAAY,CAAC;AAAA,iBAAAH;QAAA,GAAA;MAAA;MAAA,IAAAI,WAAA;AAAA,YAAAC,QAAAC,SAAA;AAAAD,cAAAE,YAWzBxB;AAAasB,cAAAG,iBAAA,QADhB5B,gBAAgB;AAAAyB,cAAAI,UADdzB,OAAMR,aAAaQ,EAAE0B,cAAcjC,KAAK;AAACiB,QAAAA,gBAAAW,OAAA,MAJ/C3B,WAAW;AAAAiC,QAAAA,UAAA,MAAAN,MAAA5B,QAGRF,UAAU,CAAC;AAAA,eAAA8B;MAAA;IAAA,CAAA,GAAAb,KAAA;AAAAA,UAAAU,UAUX,MAAMvB,eAAeiC,MAAM;AAACnB,UAAAgB,UAU3BzB,OAAMZ,MAAMU,SAASE,EAAE0B,cAAcjC,KAAK;AAAC,QAAAoC,QALhDlC;AAAa,WAAAkC,UAAA,aAAAC,OAAAD,OAAApB,KAAA,IAAbd,gBAAac;AAAAkB,IAAAA,UAAAI,SAAA;AAAA,UAAAC,MANW5C,MAAMK,OAAKwC,OAG5B,kBAAkB7C,MAAMwB,KAAK,IAAEsB,OAM/B,GAAG9C,MAAMwB,KAAK;AAAeoB,cAAAD,IAAA/B,KAAAmC,oBAAA3B,OAAA,oBAAAuB,IAAA/B,IAAAgC,GAAA;AAAAC,eAAAF,IAAAK,KAAA1B,gBAAAF,OAAA,cAAAuB,IAAAK,IAAAH,IAAA;AAAAC,eAAAH,IAAAM,KAAA3B,gBAAAD,OAAA,cAAAsB,IAAAM,IAAAH,IAAA;AAAA,aAAAH;IAAA,GAAA;MAAA/B,GAAAsC;MAAAF,GAAAE;MAAAD,GAAAC;IAAA,CAAA;AAAAX,IAAAA,UAAA,MAAAlB,MAAAhB,QAClCL,MAAMK,MAAMP,WAAW,IAAIF,mBAAmBI,MAAMK,KAAK,IAAIL,MAAMK,MAAM8C,MAAM,GAAG,CAAC,CAAC;AAAA,WAAArC;EAAA,GAAA;AAMrG;AAACsC,kBAAA,CAAA,SAAA,WAAA,OAAA,CAAA;;;;;;;;;;;;ACtFD,SAASC,gBAAAA,eAAcC,gBAAAA,eAAcC,WAAAA,UAASC,aAAAA,YAAWC,QAAAA,OAAMC,OAAAA,YAAW;AAC1E,SAASC,UAAAA,eAAc;AACvB,SAASC,WAAAA,gBAAe;;;;AAWjB,SAASC,cAAcC,OAA2B;AACvD,QAAM,CAACC,QAAQC,SAAS,IAAIC,cAAa,KAAK;AAC9C,QAAM,CAACC,SAASC,UAAU,IAAIF,cAAa,KAAK;AAChD,QAAM,CAACG,KAAKC,MAAM,IAAIJ,cAAa;IAAEK,KAAK;IAAGC,MAAM;IAAGC,OAAO;EAAE,CAAC;AAChE,QAAM,CAACC,cAAcC,eAAe,IAAIT,cAAiC,IAAI;AAC7E,MAAIU;AACJ,MAAIC;AACJ,MAAIC;AACJ,MAAIC,YAAiB;AACrB,MAAIC,cAAmB;AAEvB,QAAMC,aAAaA,MAAMlB,MAAMmB,QAAQC,SAAS;AAChD,QAAMC,eAAeA,MAAMrB,MAAMmB,QAAQG,KAAMC,OAAMA,EAAEC,OAAOxB,MAAMyB,cAAc;AAElFC,EAAAA,SAAQ,MAAM;AACZ,UAAMC,OAAOd,YAAYe,QAAQ,eAAe;AAChDhB,oBAAgBe,QAAQE,SAASC,IAAI;AAErC,QAAIf,YAAY;AACdA,iBAAWgB,MAAMC,YAAY,UAAU/B,OAAO,IAAI,MAAM,CAAC;AACzDc,iBAAWgB,MAAME,UAAUC,OAAOhB,WAAW,IAAI,MAAM,IAAI;IAC7D;AAEAiB,IAAAA,WAAU,MAAM;AACdnB,iBAAWoB,KAAK;AAChBnB,mBAAamB,KAAK;IACpB,CAAC;EACH,CAAC;AAEDC,EAAAA,cAAa,MAAM;AACjB,QAAI,CAACtB,WAAY;AACjB,UAAMuB,OAAOrC,OAAO;AACpB,UAAMsC,MAAMrB,WAAW;AACvBD,iBAAamB,KAAK;AAClBnB,kBAAcuB,SACZzB,YACA;MAAE0B,QAAQH,OAAO,MAAM;MAAGL,SAASM,MAAM,MAAM;IAAK,GACpD;MAAEG,MAAM;MAAUC,gBAAgB;MAAKC,QAAQ;IAAK,CACtD;EACF,CAAC;AAED,QAAMC,YAAYA,MAAM;AACtB,UAAMC,OAAOjC,YAAYkC,sBAAsB;AAC/C,QAAI,CAACD,KAAM;AACXvC,WAAO;MAAEC,KAAKsC,KAAKE,SAAS;MAAGvC,MAAMqC,KAAKrC;MAAMC,OAAOoC,KAAKpC;IAAM,CAAC;EACrE;AAEA,QAAMuC,eAAeA,MAAM;AACzB,QAAI,CAAC/B,WAAW,EAAG;AACnB2B,cAAU;AACV7B,eAAWoB,KAAK;AAChBpB,gBAAY;AACZX,eAAW,IAAI;AACfH,cAAU,IAAI;EAChB;AAEA,QAAMgD,gBAAgBA,MAAM;AAC1BhD,cAAU,KAAK;AACf,QAAI,CAACY,aAAa;AAAET,iBAAW,KAAK;AAAG;IAAQ;AAC/CW,eAAWoB,KAAK;AAChBpB,gBAAYwB,SACV1B,aACA;MAAEmB,SAAS;MAAGkB,GAAG;MAAGC,OAAO;IAAK,GAChC;MAAEV,MAAM;MAAUC,gBAAgB;MAAMC,QAAQ;MAAGS,YAAYA,MAAM;AAAEhD,mBAAW,KAAK;AAAGW,oBAAY;MAAM;IAAE,CAChH;EACF;AAEA,QAAMsC,SAASA,MAAM;AAAE,QAAIrD,OAAO,EAAGiD,eAAc;QAAQD,cAAa;EAAG;AAG3EZ,EAAAA,cAAa,MAAM;AACjB,QAAI,CAACpC,OAAO,EAAG;AACf,UAAMsD,uBAAuBA,MAAMV,UAAU;AAC7C,UAAMW,UAAWC,OAAkB;AACjC,YAAMC,SAASD,EAAEC;AACjB,UAAI7C,YAAY8C,SAASD,MAAM,KAAK5C,aAAa6C,SAASD,MAAM,EAAG;AACnER,oBAAc;IAChB;AACAL,cAAU;AACVhB,aAAS+B,iBAAiB,aAAaJ,OAAO;AAC9CK,WAAOD,iBAAiB,UAAUL,oBAAoB;AACtDM,WAAOD,iBAAiB,UAAUL,sBAAsB,IAAI;AAC5DpB,IAAAA,WAAU,MAAM;AACdN,eAASiC,oBAAoB,aAAaN,OAAO;AACjDK,aAAOC,oBAAoB,UAAUP,oBAAoB;AACzDM,aAAOC,oBAAoB,UAAUP,sBAAsB,IAAI;IACjE,CAAC;EACH,CAAC;AAED,QAAMQ,eAAgBC,cAA4B;AAChD,QAAIA,SAAUC,WAAUC,WAAWlE,MAAMmE,SAASH,QAAQ;QACrDC,WAAUG,kBAAkBpE,MAAMmE,OAAO;AAC9CjB,kBAAc;EAChB;AAEA,QAAMmB,eAAeA,CAACZ,GAAeO,aAAqB;AACxDP,MAAEa,gBAAgB;AAClBL,cAAUM,aAAavE,MAAMmE,SAASH,QAAQ;EAChD;AAEA,UAAA,MAAA;AAAA,QAAAQ,OAAAC,SAAA,GAAAC,QAAAF,KAAAG,YAAAC,QAAAF,MAAAC,YAAAE,QAAAD,MAAAE;AAAAJ,UAAAK,UAKezB;AAAM,QAAA0B,QAFVnE;AAAU,WAAAmE,UAAA,aAAAC,OAAAD,OAAAN,KAAA,IAAV7D,aAAU6D;AAAAQ,IAAAA,WAAAN,QAAA,MAAA;AAAA,UAAAO,MAAAC,QAAA,MAAA,CAAA,CAQZ/D,aAAa,CAAC;AAAA,aAAA,MAAd8D,IAAA,IAAiB9D,aAAa,EAAGgE,OAAO;IAAW,GAAA,CAAA;AAAA,QAAAC,SAG/CvE;AAAU,WAAAuE,WAAA,aAAAL,OAAAK,QAAAT,KAAA,IAAV9D,aAAU8D;AAAAK,IAAAA,WAAAV,MAAAe,mBAalBC,OAAI;MAAA,IAACC,OAAI;AAAA,eAAE,CAAC,CAAC9E,aAAa;MAAC;MAAA,IAAA+E,WAAA;AAAA,eAAAH,mBACzBI,SAAM;UAAA,IAACC,QAAK;AAAA,mBAAEjF,aAAa;UAAC;UAAA,IAAA+E,WAAA;AAAA,mBAAAH,mBAC1BC,OAAI;cAAA,IAACC,OAAI;AAAA,uBAAErF,QAAQ;cAAC;cAAA,IAAAsF,WAAA;AAAA,oBAAAG,QAAAC,SAAA,GAAAC,QAAAF,MAAAlB;AAAAM,gBAAAA,OAEXe,QAAO;AACXlF,gCAAckF;AACdxD,kBAAAA,SACEwD,IACA;oBAAE/D,SAAS,CAAC,GAAG,CAAC;oBAAGkB,GAAG,CAAC,GAAG,CAAC;oBAAGC,OAAO,CAAC,MAAM,CAAC;kBAAE,GAC/C;oBAAEV,MAAM;oBAAUC,gBAAgB;oBAAMC,QAAQ;kBAAE,CACpD;gBACF,GAACiD,KAAA;AAAAE,sBAAAhB,UAYU,MAAMhB,aAAa,IAAI;AAACmB,gBAAAA,WAAAW,OAAAN,mBAKlCU,MAAG;kBAAA,IAACC,OAAI;AAAA,2BAAElG,MAAMmB;kBAAO;kBAAAuE,UACpBS,aAAM,MAAA;AAAA,wBAAAC,QAAAC,SAAA,GAAAC,QAAAF,MAAAzB,YAAA4B,QAAAD,MAAAxB;AAAAsB,0BAAArB,UAIK,MAAMhB,aAAaoC,OAAO3E,EAAE;AAAC0D,oBAAAA,WAAAoB,OAAA,MAEHH,OAAOd,IAAI;AAAAkB,0BAAAxB,UAGlCtB,OAAMY,aAAaZ,GAAG0C,OAAO3E,EAAE;AAACgF,oBAAAA,UAAA,MAAAC,gBAAAL,OAAA,eAN/BlE,OAAOiE,OAAO3E,OAAOxB,MAAMyB,cAAc,CAAC,CAAA;AAAA,2BAAA2E;kBAAA,GAAA;gBAkB1D,CAAA,GAAA,IAAA;AAAAI,gBAAAA,UAAAE,SAAA;AAAA,sBAAAC,MAnCI,GAAGrG,IAAI,EAAEE,GAAG,MAAIoG,OACf,GAAGtG,IAAI,EAAEG,IAAI,MAAIoG,OACV,GAAGvG,IAAI,EAAEI,KAAK,MAAIoG,OAKlB5E,OAAO,CAAClC,MAAMyB,cAAc;AAACkF,0BAAAD,IAAAjD,KAAAsD,oBAAAlB,OAAA,OAAAa,IAAAjD,IAAAkD,GAAA;AAAAC,2BAAAF,IAAAM,KAAAD,oBAAAlB,OAAA,QAAAa,IAAAM,IAAAJ,IAAA;AAAAC,2BAAAH,IAAAO,KAAAF,oBAAAlB,OAAA,aAAAa,IAAAO,IAAAJ,IAAA;AAAAC,2BAAAJ,IAAAQ,KAAAT,gBAAAV,OAAA,eAAAW,IAAAQ,IAAAJ,IAAA;AAAA,yBAAAJ;gBAAA,GAAA;kBAAAjD,GAAA0D;kBAAAH,GAAAG;kBAAAF,GAAAE;kBAAAD,GAAAC;gBAAA,CAAA;AAAA,uBAAAtB;cAAA;YAAA,CAAA;UAAA;QAAA,CAAA;MAAA;IAAA,CAAA,GAAA,IAAA;AAAAW,IAAAA,UAAAE,SAAA;AAAA,UAAAU,OA3CvClF,OAAOjC,OAAO,CAAC,GAACoH,OACVnF,OAAO,CAAC,CAACb,aAAa,CAAC,GAACiG,OAC1BpF,OAAO,CAAChB,WAAW,CAAC;AAACkG,eAAAV,IAAAjD,KAAAgD,gBAAA/B,OAAA,aAAAgC,IAAAjD,IAAA2D,IAAA;AAAAC,eAAAX,IAAAM,KAAAP,gBAAA/B,OAAA,mBAAAgC,IAAAM,IAAAK,IAAA;AAAAC,eAAAZ,IAAAO,KAAAR,gBAAA/B,OAAA,iBAAAgC,IAAAO,IAAAK,IAAA;AAAA,aAAAZ;IAAA,GAAA;MAAAjD,GAAA0D;MAAAH,GAAAG;MAAAF,GAAAE;IAAA,CAAA;AAAA,WAAA3C;EAAA,GAAA;AA6E5C;AAAC+C,kBAAA,CAAA,OAAA,CAAA;;;;;;;AVnLM,SAASC,MAAMC,OAAmB;AACvC,QAAM,CAACC,QAAQC,SAAS,IAAIC,cAAa,KAAK;AAC9C,QAAM,CAACC,aAAaC,cAAc,IAAIF,cAAaH,MAAMM,eAAe,IAAI;AAC5E,QAAM,CAACC,QAAQC,SAAS,IAAIL,cAC1BM,UAAUC,UAAUV,MAAMW,MAAMC,EAAE,CACpC;AACA,QAAM,CAACC,SAASC,UAAU,IAAIX,cAAaM,UAAUM,WAAWf,MAAMW,MAAMC,EAAE,CAAC;AAC/E,QAAM,CAACI,gBAAgBC,iBAAiB,IAAId,cAAaM,UAAUS,kBAAkBlB,MAAMW,MAAMC,EAAE,CAAC;AACpG,MAAIO;AACJ,MAAIC;AACJ,MAAIC;AACJ,MAAIC;AAEJ,MAAIC,aAAkB;AAEtB,MAAIC,cAAmB;AAEvB,MAAIC,oBAAyB;AAE7B,MAAIC,gBAAqB;AACzB,MAAIC,mBAAmB;AAEvB,QAAMC,gBAAgB;IAAEC,MAAM;IAAmBC,gBAAgB;IAAMC,QAAQ;EAAI;AAEnFC,EAAAA,SAAQ,MAAM;AACZ,UAAMC,QAAQxB,UAAUyB,UAAUlC,MAAMW,MAAMC,IAAI,MAAM;AACtDJ,gBAAUC,UAAUC,UAAUV,MAAMW,MAAMC,EAAE,CAAC;AAC7CE,iBAAWL,UAAUM,WAAWf,MAAMW,MAAMC,EAAE,CAAC;AAC/CK,wBAAkBR,UAAUS,kBAAkBlB,MAAMW,MAAMC,EAAE,CAAC;IAC/D,CAAC;AAED,QAAIS,wBAAwBC,kBAAkB;AAC5CD,2BAAqBc,MAAMC,kBAAkB;AAC7Cf,2BAAqBc,MAAME,UAAU;AACrChB,2BAAqBc,MAAMG,YAAY;AACvCjB,2BAAqBc,MAAMI,SAAS;AACpCjB,uBAAiBa,MAAMC,kBAAkB;AACzCd,uBAAiBa,MAAME,UAAU;AACjCf,uBAAiBa,MAAMG,YAAY;AACnChB,uBAAiBa,MAAMI,SAAS;AAChCZ,yBAAmB;IACrB;AAEAa,IAAAA,WAAUP,KAAK;EACjB,CAAC;AAED,QAAMQ,kBAAkBA,MAAM;AAC5B,UAAMC,UAAU7B,QAAQ,EAAE8B,SAAS;AACnClC,cAAUmC,WAAW5C,MAAMW,MAAMC,IAAI,WAAW8B,OAAO,EAAE;EAC3D;AAEA,QAAMG,aAAaA,MAAM;AACvB,UAAMC,UAAUC,KAAKC,UAAUzC,OAAO,GAAG,MAAM,CAAC;AAChD,UAAM0C,cAAc,+CAA+CjD,MAAMW,MAAMuC,IAAI;;;EAAuCJ,OAAO;;;;AACjIK,cAAUC,UAAUC,UAAUJ,WAAW;AACzC/C,cAAU,IAAI;AACdoD,eAAW,MAAMpD,UAAU,KAAK,GAAG,IAAI;EACzC;AAEAqD,EAAAA,cAAa,MAAM;AACjB,UAAMC,WAAWvD,OAAO;AACxB,QAAI,CAACoB,wBAAwB,CAACC,iBAAkB;AAEhDG,uBAAmBgC,KAAK;AACxB/B,mBAAe+B,KAAK;AAEpB,QAAI,CAAC9B,iBAAkB;AAEvB,UAAM+B,aAAa;MAAE7B,MAAM;MAAmBC,gBAAgB;MAAKC,QAAQ;IAAI;AAC/EN,wBAAoBkC,SAAQtC,sBAAsB;MAChDgB,SAASmB,WAAW,IAAI;MACxBI,OAAOJ,WAAW,MAAM;MACxBjB,QAAQiB,WAAW,cAAc;IACnC,GAAGE,UAAU;AACbhC,oBAAgBiC,SAAQrC,kBAAkB;MACxCe,SAASmB,WAAW,IAAI;MACxBI,OAAOJ,WAAW,IAAI;MACtBjB,QAAQiB,WAAW,cAAc;IACnC,GAAGE,UAAU;EACf,CAAC;AAEDlB,EAAAA,WAAU,MAAM;AACdjB,gBAAYkC,KAAK;AACjBjC,iBAAaiC,KAAK;AAClBhC,uBAAmBgC,KAAK;AACxB/B,mBAAe+B,KAAK;EACtB,CAAC;AAED,QAAMI,oBAAoBA,MAAM;AAC9B,QAAI,CAAC1C,aAAc;AACnBI,gBAAYkC,KAAK;AACjBlC,iBAAaoC,SAAQxC,cAAc;MAAEyC,OAAO;IAAI,GAAGhC,aAAa;EAClE;AAEA,QAAMkC,kBAAkBA,MAAM;AAC5B,QAAI,CAAC3C,aAAc;AACnBI,gBAAYkC,KAAK;AACjBlC,iBAAaoC,SAAQxC,cAAc;MAAEyC,OAAO;IAAE,GAAGhC,aAAa;EAChE;AAEA,QAAMmC,qBAAqBA,MAAM;AAC/B,QAAI,CAAC3C,cAAe;AACpBI,iBAAaiC,KAAK;AAClBjC,kBAAcmC,SAAQvC,eAAe;MAAEwC,OAAO;IAAK,GAAGhC,aAAa;EACrE;AAEA,QAAMoC,mBAAmBA,MAAM;AAC7B,QAAI,CAAC5C,cAAe;AACpBI,iBAAaiC,KAAK;AAClBjC,kBAAcmC,SAAQvC,eAAe;MAAEwC,OAAO;IAAE,GAAGhC,aAAa;EAClE;AAEA,QAAMqC,gBAAiBC,aAAyB;AAC9C,UAAMC,QAAQA,MAAM5D,OAAO,EAAE2D,QAAQE,IAAI;AAEzC,YAAQF,QAAQrC,MAAI;MAClB,KAAK;AACH,eAAAwC,mBACGC,QAAM;UAAA,IACLC,QAAK;AAAA,mBAAEL,QAAQK;UAAK;UAAA,IACpBJ,QAAK;AAAA,mBAAEA,MAAM;UAAC;UACdK,UAAWC,OAAMhE,UAAUiE,YAAY1E,MAAMW,MAAMC,IAAIsD,QAAQE,MAAMK,CAAC;UAAC,IACvEE,MAAG;AAAA,mBAAET,QAAQS;UAAG;UAAA,IAChBC,MAAG;AAAA,mBAAEV,QAAQU;UAAG;UAAA,IAChBC,OAAI;AAAA,mBAAEX,QAAQW;UAAI;QAAA,CAAA;MAIxB,KAAK;AACH,eAAAR,mBACGS,QAAM;UAAA,IACLP,QAAK;AAAA,mBAAEL,QAAQK;UAAK;UAAA,IACpBQ,UAAO;AAAA,mBAAEZ,MAAM;UAAC;UAChBK,UAAWC,OAAMhE,UAAUiE,YAAY1E,MAAMW,MAAMC,IAAIsD,QAAQE,MAAMK,CAAC;QAAC,CAAA;MAI7E,KAAK;AACH,eAAAJ,mBACGW,eAAa;UAAA,IACZC,UAAO;AAAA,mBAAEjF,MAAMW,MAAMC;UAAE;UAAA,IACvBwD,OAAI;AAAA,mBAAEF,QAAQE;UAAI;UAAA,IAClBG,QAAK;AAAA,mBAAEL,QAAQK;UAAK;UAAA,IACpBW,SAAM;AAAA,mBAAEf,MAAM;UAAC;UACfK,UAAWC,OAAMhE,UAAUiE,YAAY1E,MAAMW,MAAMC,IAAIsD,QAAQE,MAAMK,CAAC;QAAC,CAAA;MAI7E,KAAK;AACH,eAAAJ,mBACGc,QAAM;UAAA,IAACC,QAAK;AAAA,mBAAElB,QAAQK;UAAK;UAAA,IAAEjE,cAAW;AAAA,mBAAE4D,QAAQ5D,eAAe;UAAI;UAAA,IAAA+E,WAAA;AAAA,mBAAAhB,mBACnEiB,MAAG;cAAA,IAACC,OAAI;AAAA,uBAAErB,QAAQmB,YAAY,CAAA;cAAE;cAAAA,UAC7BG,WAAKC,QAAA,MAAQxB,cAAcuB,KAAK,CAAC;YAAI,CAAA;UAAA;QAAA,CAAA;MAK/C,KAAK;AACH,eAAAnB,mBACGqB,aAAW;UAAA,IACVnB,QAAK;AAAA,mBAAEL,QAAQK;UAAK;UAAA,IACpBJ,QAAK;AAAA,mBAAEA,MAAM;UAAC;UACdK,UAAWC,OAAMhE,UAAUiE,YAAY1E,MAAMW,MAAMC,IAAIsD,QAAQE,MAAMK,CAAC;UAAC,IACvEkB,cAAW;AAAA,mBAAEzB,QAAQyB;UAAW;QAAA,CAAA;MAItC,KAAK;AACH,eAAAtB,mBACGuB,eAAa;UAAA,IACZrB,QAAK;AAAA,mBAAEL,QAAQK;UAAK;UAAA,IACpBJ,QAAK;AAAA,mBAAEA,MAAM;UAAC;UAAA,IACd0B,UAAO;AAAA,mBAAE3B,QAAQ2B,WAAW,CAAA;UAAE;UAC9BrB,UAAWC,OAAMhE,UAAUiE,YAAY1E,MAAMW,MAAMC,IAAIsD,QAAQE,MAAMK,CAAC;QAAC,CAAA;MAI7E,KAAK;AACH,eAAAJ,mBACGyB,cAAY;UAAA,IACXvB,QAAK;AAAA,mBAAEL,QAAQK;UAAK;UAAA,IACpBJ,QAAK;AAAA,mBAAEA,MAAM;UAAC;UACdK,UAAWC,OAAMhE,UAAUiE,YAAY1E,MAAMW,MAAMC,IAAIsD,QAAQE,MAAMK,CAAC;QAAC,CAAA;MAI7E;AACE,eAAO;IACX;EACF;AAEA,QAAMsB,iBAAiBA,MAAM;AAC3B,WAAA1B,mBACGiB,MAAG;MAAA,IAACC,OAAI;AAAA,eAAEvF,MAAMW,MAAMqF;MAAQ;MAAAX,UAC3BnB,aAAOuB,QAAA,MAEJA,QAAA,MAAAvB,QAAQrC,SAAS,QAAQ,EAAA,KAAA,MAAA;AAAA,YAAAoE,OAAAC,SAAA;AAAAD,aAAAE,UAGb,MAAM1F,UAAU2F,cAAcpG,MAAMW,MAAMC,IAAIsD,QAAQE,IAAI;AAACiC,QAAAA,WAAAJ,MAAA,MAEnE/B,QAAQK,KAAK;AAAA,eAAA0B;MAAA,GAAA,IAGhBhC,cAAcC,OAAO,CACtB;IAEJ,CAAA;EAGP;AAEA,QAAMoC,UAAO,EAAA,MAAA;AAAA,QAAAC,QAAAC,SAAA;AAAAD,UAAAE,iBAAA,gBASS3C,eAAe;AAAAyC,UAAAE,iBAAA,iBADd3C,eAAe;AAAAyC,UAAAG,cADnB5C;AAAeyC,UAAAI,gBADb9C;AAAiB0C,UAAAJ,UADvB1D;AAAe,QAAAmE,QAFnBzF;AAAY,WAAAyF,UAAA,aAAAC,OAAAD,OAAAL,KAAA,IAAZpF,eAAYoF;AAAA,WAAAA;EAAA,GAAA,GAAAlC,mBAkBlByC,eAAa;IAAA,IACZ7B,UAAO;AAAA,aAAEjF,MAAMW,MAAMC;IAAE;IAAA,IACvBC,UAAO;AAAA,aAAEA,QAAQ;IAAC;IAAA,IAClBG,iBAAc;AAAA,aAAEA,eAAe;IAAC;IAChC+F,OAAOtE;EAAe,CAAA,IAAA,MAAA;AAAA,QAAAuE,QAAAC,SAAA,GAAAC,QAAAF,MAAAG,YAAAC,QAAAF,MAAAC,YAAAE,QAAAD,MAAAE;AAAAN,UAAAP,iBAAA,gBAUNzC,gBAAgB;AAAAgD,UAAAP,iBAAA,iBADfzC,gBAAgB;AAAAgD,UAAAN,cADpB1C;AAAgBgD,UAAAL,gBADd5C;AAAkBiD,UAAAb,UADxBtD;AAAU,QAAA0E,SAFdnG;AAAa,WAAAmG,WAAA,aAAAV,OAAAU,QAAAP,KAAA,IAAb5F,gBAAa4F;AAAA,QAAAQ,SAWTnG;AAAoB,WAAAmG,WAAA,aAAAX,OAAAW,QAAAJ,KAAA,IAApB/F,uBAAoB+F;AAAA,QAAAK,SAWpBnG;AAAgB,WAAAmG,WAAA,aAAAZ,OAAAY,QAAAJ,KAAA,IAAhB/F,mBAAgB+F;AAAA,WAAAL;EAAA,GAAA,CAAA;AAc/B,UAAA,MAAA;AAAA,QAAAU,QAAAC,SAAA;AAAAtB,IAAAA,WAAAqB,OAAArD,mBAEKc,QAAM;MAAA,IAACC,QAAK;AAAA,eAAEpF,MAAMW,MAAMuC;MAAI;MAAA,IAAE5C,cAAW;AAAA,eAAEN,MAAMM,eAAe;MAAI;MAAEsH,QAAQ;MAAI,IAAEC,SAAM;AAAA,eAAE7H,MAAM6H,UAAU;MAAK;MAAEC,cAAczH;MAAgBiG;MAAgB,IAAAjB,WAAA;AAAA,eACjKU,eAAe;MAAC;IAAA,CAAA,CAAA;AAAA,WAAA2B;EAAA,GAAA;AAIzB;AAACK,kBAAA,CAAA,SAAA,eAAA,WAAA,CAAA;;;;ADhSM,SAASC,SAASC,OAAsB;AAC7C,QAAM,CAACC,QAAQC,SAAS,IAAIC,eAA4B,CAAA,CAAE;AAC1D,QAAM,CAACC,SAASC,UAAU,IAAIF,eAAa,KAAK;AAChD,QAAMG,SAASA,OAAON,MAAMO,QAAQ,eAAe;AAEnDC,EAAAA,SAAQ,MAAM;AACZH,eAAW,IAAI;AACfH,cAAUO,UAAUC,UAAU,CAAC;AAC/B,UAAMC,QAAQF,UAAUG,gBAAgB,MAAM;AAC5CV,gBAAUO,UAAUC,UAAU,CAAC;IACjC,CAAC;AACDG,IAAAA,WAAUF,KAAK;EACjB,CAAC;AAED,QAAMG,UAAUA,OAAA,MAAA;AAAA,QAAAC,OAAAC,SAAA,GAAAC,QAAAF,KAAAG;AAAAC,IAAAA,WAAAF,OAAAG,mBAGTC,MAAG;MAAA,IAACC,OAAI;AAAA,eAAErB,OAAO;MAAC;MAAAsB,UACfC,WAAKJ,mBAAMK,OAAK;QAACD;QAAY,IAAEE,cAAW;AAAA,iBAAEpB,OAAO,MAAMN,MAAM0B,eAAe;QAAK;QAAA,IAAEpB,SAAM;AAAA,iBAAEA,OAAO;QAAC;MAAA,CAAA;IAAI,CAAA,CAAA;AAAAqB,IAAAA,UAAAC,SAAA;AAAA,UAAAC,MAH5E7B,MAAMO,QAAQ,WAASuB,OAChBxB,OAAO,IAAIyB,SAAa/B,MAAMgC,YAAY,aAAYC,OAAajC,MAAMO,QAAQ;AAASsB,cAAAD,IAAAM,KAAAC,gBAAApB,MAAA,aAAAa,IAAAM,IAAAL,GAAA;AAAAC,eAAAF,IAAAQ,KAAAD,gBAAAlB,OAAA,iBAAAW,IAAAQ,IAAAN,IAAA;AAAAG,eAAAL,IAAAS,KAAAF,gBAAAlB,OAAA,aAAAW,IAAAS,IAAAJ,IAAA;AAAA,aAAAL;IAAA,GAAA;MAAAM,GAAAH;MAAAK,GAAAL;MAAAM,GAAAN;IAAA,CAAA;AAAA,WAAAhB;EAAA,GAAA;AAQxI,SAAAK,mBACGkB,OAAI;IAAA,IAACC,OAAI;AAAA,aAAEC,QAAA,MAAA,CAAA,EAAApC,QAAQ,KAAK,OAAOqC,WAAW,YAAW,EAAA,KAAIxC,OAAO,EAAEyC,SAAS;IAAC;IAAA,IAAAnB,WAAA;AAAA,aAAAH,mBAC1EkB,OAAI;QAAA,IAACC,OAAI;AAAA,iBAAE,CAACjC,OAAO;QAAC;QAAA,IAAEqC,WAAQ;AAAA,iBAAE7B,QAAQ;QAAC;QAAA,IAAAS,WAAA;AAAA,iBAAAH,mBACvCwB,SAAM;YAAA,IAACC,QAAK;AAAA,qBAAEC,SAASC;YAAI;YAAA,IAAAxB,WAAA;AAAA,qBACzBT,QAAQ;YAAC;UAAA,CAAA;QAAA;MAAA,CAAA;IAAA;EAAA,CAAA;AAKpB;;;;;;;;AYhDA,SAASkC,OAAAA,YAAW;;;AASb,SAASC,YAAYC,OAAyB;AACnD,UAAA,MAAA;AAAA,QAAAC,OAAAC,SAAA;AAAAC,IAAAA,WAAAF,MAAAG,oBAEKN,MAAG;MAAA,IAACO,OAAI;AAAA,eAAEL,MAAMM;MAAO;MAAAC,UACpBC,aAAM,MAAA;AAAA,YAAAC,QAAAC,SAAA;AAAAC,2BAAAF,OAAA,SACkCD,OAAOI,SAAO,IAAA;AAAAT,QAAAA,WAAAM,OAAA,MACnDD,OAAOK,KAAK;AAAA,eAAAJ;MAAA,GAAA;IAEhB,CAAA,CAAA;AAAA,WAAAR;EAAA,GAAA;AAIT;AAACa,kBAAA,CAAA,OAAA,CAAA;","names":["createSignal","onMount","onCleanup","Show","For","Portal","createSignal","createEffect","onMount","onCleanup","For","animate","createSignal","createEffect","onCleanup","Show","animate","Folder","props","isOpen","setIsOpen","defaultOpen","isCollapsed","setIsCollapsed","contentHeight","setContentHeight","undefined","contentMounted","setContentMounted","skipFirstAnim","sectionContentRef","sectionAnim","folderChevronRef","chevronAnim","chevronInitialized","panelTapAnim","contentRef","isRoot","el","ro","ResizeObserver","h","offsetHeight","prev","observe","disconnect","open","stop","style","transform","rotate","type","visualDuration","bounce","handleToggle","inline","next","height","opacity","onComplete","currentHeight","getBoundingClientRect","onOpenChange","folderContent","_el$","_tmpl$3","_el$2","firstChild","_el$3","_$use","$$click","_$insert","_c$","_$memo","_$createComponent","when","children","_el$7","_tmpl$4","_el$8","title","_el$9","_tmpl$5","_el$0","_c$2","_tmpl$6","_c$3","_el$10","_tmpl$7","_ref$","toolbar","_el$4","_tmpl$","e","stopPropagation","_el$5","_tmpl$2","_el$6","_$effect","_$p","_$style","_p$","_v$","_v$2","_$className","t","_el$11","_tmpl$8","panelRef","rootPanelAnim","rootPanelInitialized","lastRootOpen","handler","addEventListener","removeEventListener","measuredOpenHeight","target","width","borderRadius","boxShadow","cursor","overflow","_el$12","_tmpl$9","scale","$$pointerup","$$pointerdown","document","activeElement","blur","_ref$2","_$setAttribute","String","_$delegateEvents","createSignal","createEffect","onMount","onCleanup","animate","motionValue","CLICK_THRESHOLD","DEAD_ZONE","MAX_CURSOR_RANGE","MAX_STRETCH","decimalsForStep","step","s","toString","dot","indexOf","length","roundValue","val","raw","Math","round","parseFloat","toFixed","snapToDecile","rawValue","min","max","normalized","nearest","abs","Slider","props","wrapperRef","trackRef","fillRef","handleRef","labelRef","valueSpanRef","inputRef","isInteracting","setIsInteracting","isDragging","setIsDragging","isHovered","setIsHovered","isValueHovered","setIsValueHovered","isValueEditable","setIsValueEditable","showInput","setShowInput","inputValue","setInputValue","fillPercent","value","rubberStretchPx","handleOpacityMv","handleScaleXMv","handleScaleYMv","applyFillStyles","pct","style","width","left","applyRubberStyles","stretch","transform","applyHandleVisualStyles","opacity","String","get","snapAnim","jump","percentage","isActive","pointerDownPos","isClickFlag","wrapperRect","scaleVal","hoverTimeout","rubberAnim","handleOpacityAnim","handleScaleXAnim","handleScaleYAnim","positionToValue","clientX","screenX","sceneX","nativeWidth","offsetWidth","percent","percentFromValue","v","computeRubberStretch","sign","distancePast","right","overflow","sqrt","cancelInteraction","handlePointerDown","e","preventDefault","currentTarget","setPointerCapture","pointerId","x","y","clientY","getBoundingClientRect","handlePointerMove","dx","dy","distance","newValue","newPct","stop","onChange","handlePointerUp","discreteSteps","snappedValue","type","stiffness","damping","mass","onComplete","visualDuration","bounce","handlePointerCancel","hovered","editing","editable","clearTimeout","setTimeout","unsubFill","on","unsubRubber","unsubHandleOpacity","unsubHandleScaleX","unsubHandleScaleY","focus","select","handleInputSubmit","parsed","isNaN","clamped","handleValueClick","stopPropagation","handleInputKeyDown","key","displayValue","HANDLE_BUFFER","LABEL_CSS_LEFT","VALUE_CSS_RIGHT","leftThreshold","trackWidth","rightThreshold","valueDodge","handleOpacity","targetOpacity","targetScaleX","targetScaleY","duration","fillBackground","hashMarks","ds","Array","from","_","i","_el$","_tmpl$","_$setStyleProperty","_el$2","_el$3","_tmpl$2","_el$4","firstChild","_el$5","_el$6","nextSibling","_el$7","_el$8","_ref$","_$use","addEventListener","$$pointerup","$$pointermove","$$pointerdown","_ref$2","_$insert","_ref$3","_ref$4","_ref$5","label","_c$","_$memo","_el$9","_tmpl$3","$$mousedown","$$click","$$keydown","$$input","_ref$6","_$effect","_el$0","_tmpl$4","_ref$7","_p$","_v$5","_v$6","_$className","t","undefined","_v$","_v$2","_v$3","_v$4","a","o","_$delegateEvents","createSignal","createRenderEffect","onMount","onCleanup","For","animate","SegmentedControl","props","containerRef","pillRef","buttonRefs","Map","pillReady","setPillReady","hasAnimated","pillAnim","measurePill","button","get","value","containerRect","getBoundingClientRect","buttonRect","left","width","setPillImmediate","style","updatePill","shouldAnimate","next","stop","type","visualDuration","bounce","onComplete","_","requestAnimationFrame","ResizeObserver","ro","observe","disconnect","_el$","_tmpl$","_el$2","firstChild","_ref$","_$use","_ref$2","_$insert","_$createComponent","each","options","children","option","_el$3","_tmpl$2","$$click","onChange","el","set","label","_$effect","_$setAttribute","String","_$p","_$setStyleProperty","_$delegateEvents","Toggle","props","_el$","_tmpl$","_el$2","firstChild","_$insert","label","_$createComponent","SegmentedControl","options","value","checked","onChange","val","createSignal","onMount","onCleanup","generateSpringCurve","stiffness","damping","mass","duration","points","steps","dt","position","velocity","target","i","time","push","springForce","dampingForce","acceleration","SpringVisualization","props","width","height","params","isSimpleMode","visualDuration","spring","bounce","Math","pow","PI","dampingRatio","sqrt","values","map","value","minValue","min","maxValue","max","valueRange","pathData","x","normalizedValue","y","join","gridLines","lines","_el$","_tmpl$","_$setAttribute","_el$2","_tmpl$2","_el$3","_tmpl$3","_el$4","firstChild","_el$5","nextSibling","_$insert","_$effect","SpringControl","props","mode","setMode","createSignal","DialStore","getSpringMode","panelId","path","onMount","unsub","subscribe","onCleanup","isSimpleMode","handleModeChange","newMode","updateSpringMode","stiffness","damping","mass","rest","spring","onChange","type","visualDuration","bounce","handleUpdate","key","value","_$createComponent","Folder","title","label","defaultOpen","children","_el$","_tmpl$","_el$2","firstChild","_el$3","_$insert","SpringVisualization","SegmentedControl","options","_c$","_$memo","Slider","v","min","max","step","unit","createUniqueId","TextControl","props","inputId","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_$setAttribute","_$insert","label","$$input","e","onChange","currentTarget","value","_$effect","placeholder","_$delegateEvents","createSignal","createEffect","onMount","onCleanup","Show","For","Portal","animate","toTitleCase","s","replace","c","toUpperCase","normalizeOptions","options","map","opt","value","label","SelectControl","props","isOpen","setIsOpen","mounted","setMounted","pos","setPos","portalTarget","setPortalTarget","triggerRef","dropdownRef","chevronRef","closeAnim","chevronAnim","normalized","selectedOption","find","o","root","closest","document","body","style","transform","stop","open","rotate","type","visualDuration","bounce","updatePos","rect","getBoundingClientRect","dropdownHeight","length","spaceBelow","window","innerHeight","bottom","above","top","left","width","openDropdown","closeDropdown","opacity","y","scale","onComplete","handleViewportChange","handleClick","e","target","contains","addEventListener","removeEventListener","dropdownStyle","p","position","_el$","_tmpl$2","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_el$6","$$click","_ref$","_$use","_$insert","_ref$2","_$createComponent","when","children","mount","_$memo","_el$7","_tmpl$","el","each","option","_el$8","_tmpl$3","onChange","_$effect","_$setAttribute","String","_$p","_$style","_$delegateEvents","createSignal","createEffect","createUniqueId","Show","HEX_COLOR_REGEX","expandShorthandHex","hex","length","ColorControl","props","isEditing","setIsEditing","editValue","setEditValue","value","textInputId","colorInputRef","handleTextSubmit","test","onChange","handleKeyDown","e","key","_el$","_tmpl$2","_el$2","firstChild","_el$3","nextSibling","_el$5","_el$6","_$setAttribute","_$insert","label","_$createComponent","when","fallback","_el$7","_tmpl$3","$$click","toUpperCase","children","_el$4","_tmpl$","$$keydown","addEventListener","$$input","currentTarget","_$effect","click","_ref$","_$use","_p$","_v$","_v$2","_v$3","_$setStyleProperty","t","a","undefined","slice","_$delegateEvents","createSignal","createEffect","onMount","onCleanup","Show","For","Portal","animate","PresetManager","props","isOpen","setIsOpen","createSignal","mounted","setMounted","pos","setPos","top","left","width","portalTarget","setPortalTarget","triggerRef","dropdownRef","chevronRef","closeAnim","chevronAnim","hasPresets","presets","length","activePreset","find","p","id","activePresetId","onMount","root","closest","document","body","style","transform","opacity","String","onCleanup","stop","createEffect","open","has","animate","rotate","type","visualDuration","bounce","updatePos","rect","getBoundingClientRect","bottom","openDropdown","closeDropdown","y","scale","onComplete","toggle","handleViewportChange","handler","e","target","contains","addEventListener","window","removeEventListener","handleSelect","presetId","DialStore","loadPreset","panelId","clearActivePreset","handleDelete","stopPropagation","deletePreset","_el$","_tmpl$2","_el$2","firstChild","_el$3","_el$4","nextSibling","$$click","_ref$","_$use","_$insert","_c$","_$memo","name","_ref$2","_$createComponent","Show","when","children","Portal","mount","_el$5","_tmpl$","_el$6","el","For","each","preset","_el$7","_tmpl$3","_el$8","_el$9","_$effect","_$setAttribute","_p$","_v$","_v$2","_v$3","_v$4","_$setStyleProperty","t","a","o","undefined","_v$5","_v$6","_v$7","_$delegateEvents","Panel","props","copied","setCopied","createSignal","isPanelOpen","setIsPanelOpen","defaultOpen","values","setValues","DialStore","getValues","panel","id","presets","setPresets","getPresets","activePresetId","setActivePresetId","getActivePresetId","addButtonRef","copyButtonRef","copyClipboardIconRef","copyCheckIconRef","addTapAnim","copyTapAnim","copyClipboardAnim","copyCheckAnim","didInitCopyIcons","tapTransition","type","visualDuration","bounce","onMount","unsub","subscribe","style","transformOrigin","opacity","transform","filter","onCleanup","handleAddPreset","nextNum","length","savePreset","handleCopy","jsonStr","JSON","stringify","instruction","name","navigator","clipboard","writeText","setTimeout","createEffect","isCopied","stop","transition","animate","scale","handleAddTapStart","handleAddTapEnd","handleCopyTapStart","handleCopyTapEnd","renderControl","control","value","path","_$createComponent","Slider","label","onChange","v","updateValue","min","max","step","Toggle","checked","SpringControl","panelId","spring","Folder","title","children","For","each","child","_$memo","TextControl","placeholder","SelectControl","options","ColorControl","renderControls","controls","_el$","_tmpl$","$$click","triggerAction","_$insert","toolbar","_el$2","_tmpl$2","addEventListener","$$pointerup","$$pointerdown","_ref$","_$use","PresetManager","onAdd","_el$3","_tmpl$3","_el$4","firstChild","_el$5","_el$6","nextSibling","_ref$2","_ref$3","_ref$4","_el$7","_tmpl$4","isRoot","inline","onOpenChange","_$delegateEvents","DialRoot","props","panels","setPanels","createSignal","mounted","setMounted","inline","mode","onMount","DialStore","getPanels","unsub","subscribeGlobal","onCleanup","content","_el$","_tmpl$","_el$2","firstChild","_$insert","_$createComponent","For","each","children","panel","Panel","defaultOpen","_$effect","_p$","_v$","_v$2","undefined","position","_v$3","e","_$setAttribute","t","a","Show","when","_$memo","window","length","fallback","Portal","mount","document","body","For","ButtonGroup","props","_el$","_tmpl$","_$insert","_$createComponent","each","buttons","children","button","_el$2","_tmpl$2","_$addEventListener","onClick","label","_$delegateEvents"]}