dialkit 1.1.0 → 1.2.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.
- package/README.md +171 -1
- package/dist/index.cjs +876 -337
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +41 -6
- package/dist/index.d.ts +41 -6
- package/dist/index.js +878 -341
- package/dist/index.js.map +1 -1
- package/dist/solid/index.cjs +1011 -544
- package/dist/solid/index.cjs.map +1 -1
- package/dist/solid/index.d.cts +33 -3
- package/dist/solid/index.d.ts +33 -3
- package/dist/solid/index.js +864 -398
- package/dist/solid/index.js.map +1 -1
- package/dist/store/index.cjs +52 -12
- package/dist/store/index.cjs.map +1 -1
- package/dist/store/index.d.cts +25 -3
- package/dist/store/index.d.ts +25 -3
- package/dist/store/index.js +52 -12
- package/dist/store/index.js.map +1 -1
- package/dist/styles.css +256 -25
- package/dist/svelte/components/ControlRenderer.svelte +12 -0
- package/dist/svelte/components/ControlRenderer.svelte.d.ts.map +1 -1
- package/dist/svelte/components/DialRoot.svelte +22 -8
- package/dist/svelte/components/DialRoot.svelte.d.ts +3 -0
- package/dist/svelte/components/DialRoot.svelte.d.ts.map +1 -1
- package/dist/svelte/components/Folder.svelte +17 -8
- package/dist/svelte/components/Folder.svelte.d.ts.map +1 -1
- package/dist/svelte/components/Panel.svelte +14 -9
- package/dist/svelte/components/Panel.svelte.d.ts.map +1 -1
- package/dist/svelte/components/PresetManager.svelte +7 -6
- package/dist/svelte/components/PresetManager.svelte.d.ts.map +1 -1
- package/dist/svelte/components/SegmentedControl.svelte +30 -74
- package/dist/svelte/components/SegmentedControl.svelte.d.ts.map +1 -1
- package/dist/svelte/components/SelectControl.svelte +2 -1
- package/dist/svelte/components/SelectControl.svelte.d.ts.map +1 -1
- package/dist/svelte/components/ShortcutListener.svelte +265 -0
- package/dist/svelte/components/ShortcutListener.svelte.d.ts +13 -0
- package/dist/svelte/components/ShortcutListener.svelte.d.ts.map +1 -0
- package/dist/svelte/components/ShortcutsMenu.svelte +128 -0
- package/dist/svelte/components/ShortcutsMenu.svelte.d.ts +7 -0
- package/dist/svelte/components/ShortcutsMenu.svelte.d.ts.map +1 -0
- package/dist/svelte/components/Slider.svelte +16 -29
- package/dist/svelte/components/Slider.svelte.d.ts +3 -0
- package/dist/svelte/components/Slider.svelte.d.ts.map +1 -1
- package/dist/svelte/components/SpringControl.svelte +17 -15
- package/dist/svelte/components/SpringControl.svelte.d.ts.map +1 -1
- package/dist/svelte/components/Toggle.svelte +13 -2
- package/dist/svelte/components/Toggle.svelte.d.ts +3 -0
- package/dist/svelte/components/Toggle.svelte.d.ts.map +1 -1
- package/dist/svelte/components/TransitionControl.svelte +28 -25
- package/dist/svelte/components/TransitionControl.svelte.d.ts.map +1 -1
- package/dist/svelte/createDialKit.svelte.d.ts +2 -1
- package/dist/svelte/createDialKit.svelte.d.ts.map +1 -1
- package/dist/svelte/createDialKit.svelte.js +1 -1
- package/dist/svelte/index.d.ts +6 -2
- package/dist/svelte/index.d.ts.map +1 -1
- package/dist/svelte/index.js +4 -0
- package/dist/svelte/theme-css.d.ts +1 -1
- package/dist/svelte/theme-css.d.ts.map +1 -1
- package/dist/svelte/theme-css.js +257 -26
- package/dist/vue/index.cjs +3056 -0
- package/dist/vue/index.cjs.map +1 -0
- package/dist/vue/index.d.cts +675 -0
- package/dist/vue/index.d.ts +675 -0
- package/dist/vue/index.js +3014 -0
- package/dist/vue/index.js.map +1 -0
- package/package.json +24 -4
package/dist/solid/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/solid/index.ts","../../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":["// Core API\nexport { createDialKit } from './createDialKit';\nexport type { CreateDialOptions } from './createDialKit';\n\n// Root component\nexport { DialRoot } from './components/DialRoot';\nexport type { DialPosition, DialMode } from './components/DialRoot';\n\n// Component exports\nexport { Slider } from './components/Slider';\nexport { Toggle } from './components/Toggle';\nexport { Folder } from './components/Folder';\nexport { ButtonGroup } from './components/ButtonGroup';\nexport { SpringControl } from './components/SpringControl';\nexport { SpringVisualization } from './components/SpringVisualization';\nexport { TextControl } from './components/TextControl';\nexport { SelectControl } from './components/SelectControl';\nexport { ColorControl } from './components/ColorControl';\nexport { PresetManager } from './components/PresetManager';\n\n// Store exports\nexport { DialStore } from '../store/DialStore';\nexport type {\n SpringConfig,\n ActionConfig,\n SelectConfig,\n ColorConfig,\n TextConfig,\n Preset,\n DialValue,\n DialConfig,\n ResolvedValues,\n ControlMeta,\n PanelConfig,\n} from '../store/DialStore';\n","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":"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","names":["import_solid_js","import_web","import_solid_js","import_motion","import_solid_js","Folder","props","isOpen","setIsOpen","createSignal","defaultOpen","isCollapsed","setIsCollapsed","contentHeight","setContentHeight","undefined","contentMounted","setContentMounted","skipFirstAnim","sectionContentRef","sectionAnim","folderChevronRef","chevronAnim","chevronInitialized","panelTapAnim","contentRef","createEffect","isRoot","el","ro","ResizeObserver","h","offsetHeight","prev","observe","onCleanup","disconnect","open","stop","style","transform","animate","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","Show","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","import_solid_js","import_motion","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","createSignal","isDragging","setIsDragging","isHovered","setIsHovered","isValueHovered","setIsValueHovered","isValueEditable","setIsValueEditable","showInput","setShowInput","inputValue","setInputValue","fillPercent","motionValue","value","rubberStretchPx","handleOpacityMv","handleScaleXMv","handleScaleYMv","applyFillStyles","pct","style","width","left","applyRubberStyles","stretch","transform","applyHandleVisualStyles","opacity","String","get","createEffect","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","animate","type","stiffness","damping","mass","onComplete","visualDuration","bounce","handlePointerCancel","hovered","editing","editable","onCleanup","clearTimeout","setTimeout","onMount","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","import_solid_js","import_motion","SegmentedControl","props","containerRef","pillRef","buttonRefs","Map","pillReady","setPillReady","createSignal","hasAnimated","pillAnim","measurePill","button","get","value","containerRect","getBoundingClientRect","buttonRect","left","width","setPillImmediate","style","updatePill","shouldAnimate","next","stop","animate","type","visualDuration","bounce","onComplete","createRenderEffect","_","onMount","requestAnimationFrame","ResizeObserver","ro","observe","onCleanup","disconnect","_el$","_tmpl$","_el$2","firstChild","_ref$","_$use","_ref$2","_$insert","_$createComponent","For","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","import_solid_js","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","import_solid_js","TextControl","props","inputId","createUniqueId","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_$setAttribute","_$insert","label","$$input","e","onChange","currentTarget","value","_$effect","placeholder","_$delegateEvents","import_solid_js","import_web","import_motion","toTitleCase","s","replace","c","toUpperCase","normalizeOptions","options","map","opt","value","label","SelectControl","props","isOpen","setIsOpen","createSignal","mounted","setMounted","pos","setPos","portalTarget","setPortalTarget","triggerRef","dropdownRef","chevronRef","closeAnim","chevronAnim","normalized","selectedOption","find","o","onMount","root","closest","document","body","style","transform","onCleanup","stop","createEffect","open","animate","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","Show","when","children","Portal","mount","_$memo","_el$7","_tmpl$","el","For","each","option","_el$8","_tmpl$3","onChange","_$effect","_$setAttribute","String","_$p","_$style","_$delegateEvents","import_solid_js","HEX_COLOR_REGEX","expandShorthandHex","hex","length","ColorControl","props","isEditing","setIsEditing","createSignal","editValue","setEditValue","value","textInputId","createUniqueId","colorInputRef","createEffect","handleTextSubmit","test","onChange","handleKeyDown","e","key","_el$","_tmpl$2","_el$2","firstChild","_el$3","nextSibling","_el$5","_el$6","_$setAttribute","_$insert","label","_$createComponent","Show","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","import_solid_js","import_web","import_motion","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","import_solid_js","ButtonGroup","props","_el$","_tmpl$","_$insert","_$createComponent","For","each","buttons","children","button","_el$2","_tmpl$2","_$addEventListener","onClick","label","_$delegateEvents"]}
|
|
1
|
+
{"version":3,"sources":["../../src/solid/index.ts","../../src/solid/createDialKit.ts","../../src/store/DialStore.ts","../../src/solid/components/DialRoot.tsx","../../src/solid/components/ShortcutListener.tsx","../../src/shortcut-utils.ts","../../src/solid/components/Panel.tsx","../../src/icons.ts","../../src/solid/components/Folder.tsx","../../src/solid/components/Slider.tsx","../../src/solid/components/Toggle.tsx","../../src/solid/components/SegmentedControl.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":["// Core API\nexport { createDialKit } from './createDialKit';\nexport type { CreateDialOptions } from './createDialKit';\n\n// Root component\nexport { DialRoot } from './components/DialRoot';\nexport type { DialPosition, DialMode, DialTheme } from './components/DialRoot';\n\n// Component exports\nexport { Slider } from './components/Slider';\nexport { Toggle } from './components/Toggle';\nexport { Folder } from './components/Folder';\nexport { ButtonGroup } from './components/ButtonGroup';\nexport { SpringControl } from './components/SpringControl';\nexport { SpringVisualization } from './components/SpringVisualization';\nexport { TextControl } from './components/TextControl';\nexport { SelectControl } from './components/SelectControl';\nexport { ColorControl } from './components/ColorControl';\nexport { PresetManager } from './components/PresetManager';\n\n// Store exports\nexport { DialStore } from '../store/DialStore';\nexport type {\n SpringConfig,\n ActionConfig,\n SelectConfig,\n ColorConfig,\n TextConfig,\n ShortcutConfig,\n Preset,\n DialValue,\n DialConfig,\n ResolvedValues,\n ControlMeta,\n PanelConfig,\n} from '../store/DialStore';\n","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, ShortcutConfig } from '../store/DialStore';\n\nexport interface CreateDialOptions {\n onAction?: (action: string) => void;\n shortcuts?: Record<string, ShortcutConfig>;\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, options?.shortcuts);\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 ShortcutMode = 'fine' | 'normal' | 'coarse';\nexport type ShortcutInteraction = 'scroll' | 'drag' | 'move' | 'scroll-only';\n\nexport type ShortcutConfig = {\n key?: string;\n modifier?: 'alt' | 'shift' | 'meta';\n mode?: ShortcutMode;\n interaction?: ShortcutInteraction;\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 shortcut?: ShortcutConfig;\n};\n\nexport type PanelConfig = {\n id: string;\n name: string;\n controls: ControlMeta[];\n values: Record<string, DialValue>;\n shortcuts: Record<string, ShortcutConfig>;\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, shortcuts?: Record<string, ShortcutConfig>): void {\n const controls = this.parseConfig(config, '', shortcuts);\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, shortcuts: shortcuts ?? {} });\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, shortcuts?: Record<string, ShortcutConfig>): void {\n const existing = this.panels.get(id);\n if (!existing) {\n this.registerPanel(id, name, config, shortcuts);\n return;\n }\n\n const controls = this.parseConfig(config, '', shortcuts);\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, shortcuts: shortcuts ?? existing.shortcuts };\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 resolveShortcutTarget(key: string, modifier?: 'alt' | 'shift' | 'meta'): {\n panelId: string;\n path: string;\n control: ControlMeta;\n } | null {\n for (const panel of this.panels.values()) {\n for (const [path, shortcut] of Object.entries(panel.shortcuts)) {\n if (!shortcut.key) continue; // skip keyless shortcuts\n if (shortcut.key.toLowerCase() !== key.toLowerCase()) continue;\n const scMod = shortcut.modifier ?? undefined;\n if (scMod !== modifier) continue;\n\n const control = this.findControlByPath(panel.controls, path);\n if (control) {\n return { panelId: panel.id, path, control };\n }\n }\n }\n return null;\n }\n\n resolveScrollOnlyTargets(): Array<{\n panelId: string;\n path: string;\n control: ControlMeta;\n shortcut: ShortcutConfig;\n }> {\n const results: Array<{ panelId: string; path: string; control: ControlMeta; shortcut: ShortcutConfig }> = [];\n for (const panel of this.panels.values()) {\n for (const [path, shortcut] of Object.entries(panel.shortcuts)) {\n if ((shortcut.interaction ?? 'scroll') !== 'scroll-only') continue;\n const control = this.findControlByPath(panel.controls, path);\n if (control) {\n results.push({ panelId: panel.id, path, control, shortcut });\n }\n }\n }\n return results;\n }\n\n private findControlByPath(controls: ControlMeta[], path: string): ControlMeta | null {\n for (const control of controls) {\n if (control.path === path) return control;\n if (control.type === 'folder' && control.children) {\n const found = this.findControlByPath(control.children, path);\n if (found) return found;\n }\n }\n return null;\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, shortcuts?: Record<string, ShortcutConfig>): 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 const shortcut = shortcuts?.[path];\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 shortcut,\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, shortcut });\n } else if (typeof value === 'boolean') {\n controls.push({ type: 'toggle', path, label, shortcut });\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, shortcuts),\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 { ShortcutListener } from './ShortcutListener';\nimport { Panel } from './Panel';\n\nexport type DialPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\nexport type DialMode = 'popover' | 'inline';\nexport type DialTheme = 'light' | 'dark' | 'system';\n\ndeclare const process: { env?: { NODE_ENV?: string } } | undefined;\n\nconst isDevDefault = typeof process !== 'undefined' && process?.env?.NODE_ENV\n ? process.env.NODE_ENV !== 'production'\n : typeof import.meta !== 'undefined' && (import.meta as any).env?.MODE\n ? (import.meta as any).env.MODE !== 'production'\n : true;\n\ninterface DialRootProps {\n position?: DialPosition;\n defaultOpen?: boolean;\n mode?: DialMode;\n theme?: DialTheme;\n productionEnabled?: boolean;\n}\n\nexport function DialRoot(props: DialRootProps) {\n if ((props.productionEnabled ?? isDevDefault) === false) return null;\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 <ShortcutListener>\n <div class=\"dialkit-root\" data-mode={props.mode ?? 'popover'} data-theme={props.theme ?? 'system'}>\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 </ShortcutListener>\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 { createContext, useContext, createSignal, onMount, onCleanup, JSX } from 'solid-js';\nimport { DialStore } from '../../store/DialStore';\nimport {\n getEffectiveStep,\n applySliderDelta,\n DRAG_SENSITIVITY,\n findControl,\n isInputFocused,\n getActiveModifier,\n} from '../../shortcut-utils';\n\ntype ShortcutState = {\n activePanelId: string | null;\n activePath: string | null;\n};\n\nconst defaultState: ShortcutState = { activePanelId: null, activePath: null };\n\nconst ShortcutContext = createContext<() => ShortcutState>(() => defaultState);\n\nexport function useShortcutContext() {\n return useContext(ShortcutContext);\n}\n\nexport function ShortcutListener(props: { children: JSX.Element }) {\n const [activeShortcut, setActiveShortcut] = createSignal<ShortcutState>(defaultState);\n\n const activeKeys = new Set<string>();\n let isDragging = false;\n let lastMouseX: number | null = null;\n let dragAccumulator = 0;\n\n const resolveActiveTarget = (interaction: string) => {\n for (const key of activeKeys) {\n const panels = DialStore.getPanels();\n for (const panel of panels) {\n for (const [path, shortcut] of Object.entries(panel.shortcuts)) {\n if (!shortcut.key) continue;\n if (shortcut.key.toLowerCase() !== key) continue;\n if ((shortcut.interaction ?? 'scroll') !== interaction) continue;\n const control = DialStore.getPanel(panel.id)?.controls\n ? findControl(panel.controls, path)\n : null;\n if (control && control.type === 'slider') {\n return { panelId: panel.id, path, control, shortcut };\n }\n }\n }\n }\n return null;\n };\n\n onMount(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (isInputFocused()) return;\n\n const key = e.key.toLowerCase();\n\n // Arrow keys adjust the active shortcut's slider\n if (key === 'arrowleft' || key === 'arrowright' || key === 'arrowup' || key === 'arrowdown') {\n if (activeKeys.size > 0) {\n const target = resolveActiveTarget('scroll') || resolveActiveTarget('drag') || resolveActiveTarget('move');\n if (target && target.control.type === 'slider') {\n e.preventDefault();\n const direction = (key === 'arrowright' || key === 'arrowup') ? 1 : -1;\n const effectiveStep = getEffectiveStep(target.control, target.shortcut);\n applySliderDelta(target.panelId, target.path, target.control, effectiveStep, direction);\n return;\n }\n }\n }\n\n const wasAlreadyHeld = activeKeys.has(key);\n activeKeys.add(key);\n\n const modifier = getActiveModifier(e);\n const target = DialStore.resolveShortcutTarget(key, modifier);\n if (target) {\n setActiveShortcut({ activePanelId: target.panelId, activePath: target.path });\n\n // Toggle: flip on first keydown only (not on key repeat)\n if (!wasAlreadyHeld && target.control.type === 'toggle') {\n const currentValue = DialStore.getValue(target.panelId, target.path) as boolean;\n DialStore.updateValue(target.panelId, target.path, !currentValue);\n }\n }\n\n // Reset mouse tracking when a new key is pressed (for move/drag)\n if (!wasAlreadyHeld) {\n lastMouseX = null;\n dragAccumulator = 0;\n }\n };\n\n const handleKeyUp = (e: KeyboardEvent) => {\n const key = e.key.toLowerCase();\n activeKeys.delete(key);\n\n // Reset drag state when key is released\n isDragging = false;\n lastMouseX = null;\n dragAccumulator = 0;\n\n if (activeKeys.size === 0) {\n setActiveShortcut({ activePanelId: null, activePath: null });\n } else {\n let found = false;\n for (const remainingKey of activeKeys) {\n const modifier = getActiveModifier(e);\n const target = DialStore.resolveShortcutTarget(remainingKey, modifier);\n if (target) {\n setActiveShortcut({ activePanelId: target.panelId, activePath: target.path });\n found = true;\n break;\n }\n }\n if (!found) {\n setActiveShortcut({ activePanelId: null, activePath: null });\n }\n }\n };\n\n // Scroll: key+scroll and scroll-only\n const handleWheel = (e: WheelEvent) => {\n if (isInputFocused()) return;\n\n const modifier = getActiveModifier(e);\n\n // Key+scroll shortcuts\n if (activeKeys.size > 0) {\n for (const key of activeKeys) {\n const target = DialStore.resolveShortcutTarget(key, modifier);\n if (!target) continue;\n\n const { panelId, path, control } = target;\n const interaction = control.shortcut?.interaction ?? 'scroll';\n if (interaction !== 'scroll' || control.type !== 'slider') continue;\n\n e.preventDefault();\n const effectiveStep = getEffectiveStep(control, control.shortcut!);\n const direction = e.deltaY > 0 ? -1 : 1;\n applySliderDelta(panelId, path, control, effectiveStep, direction);\n return;\n }\n }\n\n // Scroll-only shortcuts (no key needed)\n const scrollOnlyTargets = DialStore.resolveScrollOnlyTargets();\n for (const { panelId, path, control, shortcut } of scrollOnlyTargets) {\n if (control.type !== 'slider') continue;\n\n e.preventDefault();\n const effectiveStep = getEffectiveStep(control, shortcut);\n const direction = e.deltaY > 0 ? -1 : 1;\n applySliderDelta(panelId, path, control, effectiveStep, direction);\n return;\n }\n };\n\n // Drag: key+mousedown starts, mousemove adjusts, mouseup stops\n const handleMouseDown = (e: MouseEvent) => {\n if (isInputFocused()) return;\n if (activeKeys.size === 0) return;\n\n const target = resolveActiveTarget('drag');\n if (target) {\n isDragging = true;\n lastMouseX = e.clientX;\n dragAccumulator = 0;\n e.preventDefault();\n }\n };\n\n const handleMouseUp = () => {\n isDragging = false;\n lastMouseX = null;\n dragAccumulator = 0;\n };\n\n // Move + Drag: mousemove handles both\n const handleMouseMove = (e: MouseEvent) => {\n if (isInputFocused()) return;\n if (activeKeys.size === 0) return;\n\n // Drag interaction (requires mousedown)\n if (isDragging) {\n const target = resolveActiveTarget('drag');\n if (target && lastMouseX !== null) {\n const deltaX = e.clientX - lastMouseX;\n lastMouseX = e.clientX;\n dragAccumulator += deltaX;\n\n const effectiveStep = getEffectiveStep(target.control, target.shortcut);\n const steps = Math.trunc(dragAccumulator / DRAG_SENSITIVITY);\n if (steps !== 0) {\n dragAccumulator -= steps * DRAG_SENSITIVITY;\n applySliderDelta(target.panelId, target.path, target.control, effectiveStep, steps);\n }\n }\n return;\n }\n\n // Move interaction (no click needed, just key held + mouse movement)\n const moveTarget = resolveActiveTarget('move');\n if (moveTarget) {\n if (lastMouseX === null) {\n lastMouseX = e.clientX;\n return;\n }\n\n const deltaX = e.clientX - lastMouseX;\n lastMouseX = e.clientX;\n dragAccumulator += deltaX;\n\n const effectiveStep = getEffectiveStep(moveTarget.control, moveTarget.shortcut);\n const steps = Math.trunc(dragAccumulator / DRAG_SENSITIVITY);\n if (steps !== 0) {\n dragAccumulator -= steps * DRAG_SENSITIVITY;\n applySliderDelta(moveTarget.panelId, moveTarget.path, moveTarget.control, effectiveStep, steps);\n }\n }\n };\n\n const handleWindowBlur = () => {\n activeKeys.clear();\n isDragging = false;\n lastMouseX = null;\n dragAccumulator = 0;\n setActiveShortcut({ activePanelId: null, activePath: null });\n };\n\n window.addEventListener('keydown', handleKeyDown);\n window.addEventListener('keyup', handleKeyUp);\n window.addEventListener('wheel', handleWheel, { passive: false });\n window.addEventListener('mousedown', handleMouseDown);\n window.addEventListener('mouseup', handleMouseUp);\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('blur', handleWindowBlur);\n\n onCleanup(() => {\n window.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('keyup', handleKeyUp);\n window.removeEventListener('wheel', handleWheel);\n window.removeEventListener('mousedown', handleMouseDown);\n window.removeEventListener('mouseup', handleMouseUp);\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('blur', handleWindowBlur);\n });\n });\n\n return (\n <ShortcutContext.Provider value={activeShortcut}>\n {props.children}\n </ShortcutContext.Provider>\n );\n}\n","// Shared shortcut utilities — single source of truth across all framework adapters.\n\nimport { DialStore } from './store/DialStore';\nimport type { ControlMeta, ShortcutConfig } from './store/DialStore';\n\n// ── Math helpers ──\n\nexport function 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\nexport function roundValue(val: number, step: number): number {\n const raw = Math.round(val / step) * step;\n return parseFloat(raw.toFixed(decimalsForStep(step)));\n}\n\nexport function getEffectiveStep(control: ControlMeta, shortcut: ShortcutConfig): number {\n const min = control.min ?? 0;\n const max = control.max ?? 1;\n const range = max - min;\n const mode = shortcut.mode ?? 'normal';\n return mode === 'fine' ? range * 0.01\n : mode === 'coarse' ? range * 0.1\n : control.step ?? 1;\n}\n\nexport function applySliderDelta(\n panelId: string,\n path: string,\n control: ControlMeta,\n effectiveStep: number,\n direction: number\n): void {\n const currentValue = DialStore.getValue(panelId, path) as number;\n const min = control.min ?? 0;\n const max = control.max ?? 1;\n const newValue = Math.max(min, Math.min(max, currentValue + direction * effectiveStep));\n DialStore.updateValue(panelId, path, roundValue(newValue, effectiveStep));\n}\n\nexport function 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\n// ── DOM helpers ──\n\nexport function isInputFocused(): boolean {\n const el = document.activeElement;\n if (!el) return false;\n const tag = el.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA') return true;\n if ((el as HTMLElement).contentEditable === 'true') return true;\n return false;\n}\n\nexport function getActiveModifier(e: KeyboardEvent | WheelEvent | MouseEvent): 'alt' | 'shift' | 'meta' | undefined {\n if (e.altKey) return 'alt';\n if (e.shiftKey) return 'shift';\n if (e.metaKey) return 'meta';\n return undefined;\n}\n\nexport function findControl(controls: ControlMeta[], path: string): ControlMeta | null {\n for (const control of controls) {\n if (control.path === path) return control;\n if (control.type === 'folder' && control.children) {\n const found = findControl(control.children, path);\n if (found) return found;\n }\n }\n return null;\n}\n\nexport const DRAG_SENSITIVITY = 4;\n\n// ── Formatting helpers ──\n\nexport function formatInteractionLabel(interaction: string): string {\n switch (interaction) {\n case 'drag': return 'Drag';\n case 'move': return 'Move';\n case 'scroll-only': return 'Scroll';\n default: return 'Scroll';\n }\n}\n\nexport function formatSliderShortcut(sc: ShortcutConfig): string {\n const interaction = sc.interaction ?? 'scroll';\n const actionLabel = formatInteractionLabel(interaction);\n if (!sc.key) return actionLabel;\n const mod = formatModifier(sc.modifier);\n return `${mod}${sc.key.toUpperCase()}+${actionLabel}`;\n}\n\nexport function formatToggleShortcut(sc: ShortcutConfig): string {\n if (!sc.key) return 'Press';\n const mod = formatModifier(sc.modifier);\n return `${mod}${sc.key.toUpperCase()}`;\n}\n\nfunction formatModifier(modifier?: string): string {\n return modifier === 'alt' ? '\\u2325'\n : modifier === 'shift' ? '\\u21E7'\n : modifier === 'meta' ? '\\u2318'\n : '';\n}\n","import { createSignal, createEffect, onMount, onCleanup, Show, For, JSX } from 'solid-js';\nimport { animate } from 'motion';\nimport { ICON_CLIPBOARD, ICON_CHECK, ICON_ADD_PRESET } from '../../icons';\nimport { DialStore } from '../../store/DialStore';\nimport type { ControlMeta, PanelConfig, SpringConfig, DialValue } from '../../store/DialStore';\nimport { useShortcutContext } from './ShortcutListener';\nimport { ShortcutsMenu } from './ShortcutsMenu';\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 shortcutCtx = useShortcutContext();\n const hasShortcuts = () => Object.keys(props.panel.shortcuts).length > 0;\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 shortcut={control.shortcut}\n shortcutActive={shortcutCtx().activePanelId === props.panel.id && shortcutCtx().activePath === control.path}\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 shortcut={control.shortcut}\n shortcutActive={shortcutCtx().activePanelId === props.panel.id && shortcutCtx().activePath === control.path}\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={ICON_ADD_PRESET[0]} />\n <path d={ICON_ADD_PRESET[1]} />\n <path d={ICON_ADD_PRESET[2]} />\n <path d={ICON_ADD_PRESET[3]} />\n <path d={ICON_ADD_PRESET[4]} />\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={ICON_CLIPBOARD.board} stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\" />\n <path d={ICON_CLIPBOARD.sparkle} fill=\"currentColor\" />\n <path d={ICON_CLIPBOARD.body} 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={ICON_CHECK} />\n </svg>\n </span>\n </span>\n Copy\n </button>\n\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","// Shared SVG icon geometry — single source of truth across all framework adapters.\n\nexport const ICON_CHEVRON = 'M6 9.5L12 15.5L18 9.5';\n\nexport const ICON_CHECK = 'M5 12.75L10 19L19 5';\n\nexport const ICON_CLIPBOARD = {\n board: 'M8 6C8 4.34315 9.34315 3 11 3H13C14.6569 3 16 4.34315 16 6V7H8V6Z',\n sparkle: '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',\n body: 'M16 5H17C18.6569 5 20 6.34315 20 8V11M8 5H7C5.34315 5 4 6.34315 4 8V18C4 19.6569 5.34315 21 7 21H12',\n};\n\nexport const ICON_ADD_PRESET = [\n 'M4 6H20',\n 'M4 12H10',\n 'M15 15L21 15',\n 'M18 12V18',\n 'M4 18H10',\n];\n\nexport const ICON_TRASH = [\n '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 'M10 11V16',\n 'M14 11V16',\n 'M3.5 6H20.5',\n '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];\n\nexport const ICON_PANEL = {\n path: '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 circles: [\n { cx: '6', cy: '8', r: '0.998596' },\n { cx: '10.4999', cy: '3.5', r: '0.998657' },\n { cx: '9.75015', cy: '12.5', r: '0.997986' },\n ],\n};\n","import { createSignal, createEffect, onCleanup, Show, JSX } from 'solid-js';\nimport { animate } from 'motion';\nimport { ICON_PANEL, ICON_CHEVRON } from '../../icons';\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 const [windowHeight, setWindowHeight] = createSignal(typeof window !== 'undefined' ? window.innerHeight : 800);\n\n if (props.isRoot) {\n const onResize = () => setWindowHeight(window.innerHeight);\n window.addEventListener('resize', onResize);\n onCleanup(() => window.removeEventListener('resize', onResize));\n }\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={ICON_PANEL.path}\n fill=\"currentColor\"\n />\n <circle cx={ICON_PANEL.circles[0].cx} cy={ICON_PANEL.circles[0].cy} r={ICON_PANEL.circles[0].r} fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"1.25\" />\n <circle cx={ICON_PANEL.circles[1].cx} cy={ICON_PANEL.circles[1].cy} r={ICON_PANEL.circles[1].r} fill=\"currentColor\" stroke=\"currentColor\" stroke-width=\"1.25\" />\n <circle cx={ICON_PANEL.circles[2].cx} cy={ICON_PANEL.circles[2].cy} r={ICON_PANEL.circles[2].r} 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={ICON_CHEVRON} />\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 ? Math.min(contentHeight()! + 10, windowHeight() - 32)\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 ? 'var(--dial-shadow)'\n : 'var(--dial-shadow-collapsed)',\n };\n\n panelRef.style.cursor = open ? '' : 'pointer';\n panelRef.style.overflow = open ? 'hidden auto' : '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, Show } from 'solid-js';\nimport { animate, motionValue } from 'motion';\nimport type { ShortcutConfig } from '../../store/DialStore';\nimport {\n decimalsForStep,\n roundValue,\n snapToDecile,\n formatSliderShortcut,\n} from '../../shortcut-utils';\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 shortcut?: ShortcutConfig;\n shortcutActive?: boolean;\n}\n\nconst CLICK_THRESHOLD = 3;\nconst DEAD_ZONE = 32;\nconst MAX_CURSOR_RANGE = 200;\nconst MAX_STRETCH = 8;\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 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 width: `${fillPercent.get()}%`,\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 }}\n />\n\n <span ref={labelRef} class=\"dialkit-slider-label\">\n {props.label}\n <Show when={props.shortcut}>\n <span class={`dialkit-shortcut-pill${props.shortcutActive ? ' dialkit-shortcut-pill-active' : ''}`}>\n {formatSliderShortcut(props.shortcut!)}\n </span>\n </Show>\n </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 { Show } from 'solid-js';\nimport { SegmentedControl } from './SegmentedControl';\nimport type { ShortcutConfig } from '../../store/DialStore';\nimport { formatToggleShortcut } from '../../shortcut-utils';\n\ninterface ToggleProps {\n label: string;\n checked: boolean;\n onChange: (checked: boolean) => void;\n shortcut?: ShortcutConfig;\n shortcutActive?: boolean;\n}\n\nexport function Toggle(props: ToggleProps) {\n return (\n <div class=\"dialkit-labeled-control\">\n <span class=\"dialkit-labeled-control-label\">\n {props.label}\n <Show when={props.shortcut}>\n <span class={`dialkit-shortcut-pill${props.shortcutActive ? ' dialkit-shortcut-pill-active' : ''}`}>\n {formatToggleShortcut(props.shortcut!)}\n </span>\n </Show>\n </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, createEffect, For, Show } from 'solid-js';\n\ninterface SegmentedControlOption<T extends string> {\n value: T;\n label: string;\n}\n\ninterface SegmentedControlProps<T extends string> {\n options: 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 | undefined;\n let hasAnimated = false;\n const [pillStyle, setPillStyle] = createSignal<{ left: number; width: number } | null>(null);\n\n const measure = () => {\n if (!containerRef) return;\n const activeButton = containerRef.querySelector('[data-active=\"true\"]') as HTMLElement | null;\n if (!activeButton) return;\n setPillStyle({\n left: activeButton.offsetLeft,\n width: activeButton.offsetWidth,\n });\n };\n\n createEffect(() => {\n void props.value;\n void props.options.length;\n measure();\n });\n\n const transition = (): string => {\n void props.value;\n if (!hasAnimated) {\n hasAnimated = true;\n return 'none';\n }\n return 'left 0.2s cubic-bezier(0.25, 1, 0.5, 1), width 0.2s cubic-bezier(0.25, 1, 0.5, 1)';\n };\n\n return (\n <div class=\"dialkit-segmented\" ref={containerRef}>\n <Show when={pillStyle()}>\n {(style) => (\n <div\n class=\"dialkit-segmented-pill\"\n style={{\n left: `${style().left}px`,\n width: `${style().width}px`,\n transition: transition(),\n }}\n />\n )}\n </Show>\n <For each={props.options}>\n {(option) => (\n <button\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 { 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 cache: {\n simple: SpringConfig;\n advanced: SpringConfig;\n } = {\n simple: props.spring.visualDuration !== undefined ? props.spring : { type: 'spring', visualDuration: 0.3, bounce: 0.2 },\n advanced: props.spring.stiffness !== undefined ? props.spring : { type: 'spring', stiffness: 200, damping: 25, mass: 1 },\n };\n\n const handleModeChange = (newMode: 'simple' | 'advanced') => {\n // Save current mode's values before switching\n if (isSimpleMode()) {\n cache.simple = props.spring;\n } else {\n cache.advanced = props.spring;\n }\n\n DialStore.updateSpringMode(props.panelId, props.path, newMode);\n\n if (newMode === 'simple') {\n props.onChange(cache.simple);\n } else {\n props.onChange(cache.advanced);\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';\nimport { ICON_CHEVRON } from '../../icons';\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={ICON_CHEVRON} />\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 { ICON_CHEVRON, ICON_TRASH } from '../../icons';\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={ICON_CHEVRON} />\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={ICON_TRASH[0]} />\n <path d={ICON_TRASH[1]} />\n <path d={ICON_TRASH[2]} />\n <path d={ICON_TRASH[3]} />\n <path d={ICON_TRASH[4]} />\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":["import_solid_js","import_web","import_solid_js","defaultState","activePanelId","activePath","ShortcutContext","createContext","useShortcutContext","useContext","ShortcutListener","props","activeShortcut","setActiveShortcut","createSignal","activeKeys","Set","isDragging","lastMouseX","dragAccumulator","resolveActiveTarget","interaction","key","panels","DialStore","getPanels","panel","path","shortcut","Object","entries","shortcuts","toLowerCase","control","getPanel","id","controls","findControl","type","panelId","onMount","handleKeyDown","e","isInputFocused","size","target","preventDefault","direction","effectiveStep","getEffectiveStep","applySliderDelta","wasAlreadyHeld","has","add","modifier","getActiveModifier","resolveShortcutTarget","currentValue","getValue","updateValue","handleKeyUp","delete","found","remainingKey","handleWheel","deltaY","scrollOnlyTargets","resolveScrollOnlyTargets","handleMouseDown","clientX","handleMouseUp","handleMouseMove","deltaX","steps","Math","trunc","DRAG_SENSITIVITY","moveTarget","handleWindowBlur","clear","window","addEventListener","passive","onCleanup","removeEventListener","_$createComponent","Provider","value","children","import_solid_js","import_motion","import_solid_js","Folder","props","isOpen","setIsOpen","createSignal","defaultOpen","isCollapsed","setIsCollapsed","contentHeight","setContentHeight","undefined","windowHeight","setWindowHeight","window","innerHeight","isRoot","onResize","addEventListener","onCleanup","removeEventListener","contentMounted","setContentMounted","skipFirstAnim","sectionContentRef","sectionAnim","folderChevronRef","chevronAnim","chevronInitialized","panelTapAnim","contentRef","createEffect","el","ro","ResizeObserver","h","offsetHeight","prev","observe","disconnect","open","stop","style","transform","animate","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","Show","when","children","_el$7","_tmpl$4","_el$8","title","_el$9","_tmpl$5","_el$0","_c$2","_el$1","_tmpl$6","_el$10","_el$11","nextSibling","_el$12","_el$13","_$effect","_p$","_v$3","ICON_PANEL","path","_v$4","circles","cx","_v$5","cy","_v$6","r","_v$7","_v$8","_v$9","_v$0","_v$1","_v$10","e","_$setAttribute","t","a","o","i","n","s","d","_c$3","_el$14","_tmpl$7","_el$15","_ref$","ICON_CHEVRON","toolbar","_el$4","_tmpl$","stopPropagation","_el$5","_tmpl$2","_el$6","_$p","_$style","_v$","_v$2","_$className","_el$16","_tmpl$8","panelRef","rootPanelAnim","rootPanelInitialized","lastRootOpen","handler","measuredOpenHeight","Math","min","target","width","borderRadius","boxShadow","cursor","overflow","_el$17","_tmpl$9","scale","$$pointerup","$$pointerdown","document","activeElement","blur","_ref$2","String","_$delegateEvents","import_solid_js","import_motion","CLICK_THRESHOLD","DEAD_ZONE","MAX_CURSOR_RANGE","MAX_STRETCH","Slider","props","min","max","step","wrapperRef","trackRef","fillRef","handleRef","labelRef","valueSpanRef","inputRef","isInteracting","setIsInteracting","createSignal","isDragging","setIsDragging","isHovered","setIsHovered","isValueHovered","setIsValueHovered","isValueEditable","setIsValueEditable","showInput","setShowInput","inputValue","setInputValue","fillPercent","motionValue","value","rubberStretchPx","handleOpacityMv","handleScaleXMv","handleScaleYMv","applyFillStyles","pct","style","width","left","applyRubberStyles","stretch","Math","abs","transform","applyHandleVisualStyles","opacity","String","get","createEffect","snapAnim","jump","percentage","isActive","pointerDownPos","isClickFlag","wrapperRect","scaleVal","hoverTimeout","rubberAnim","handleOpacityAnim","handleScaleXAnim","handleScaleYAnim","positionToValue","clientX","screenX","sceneX","nativeWidth","offsetWidth","percent","rawValue","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","roundValue","handlePointerUp","discreteSteps","snappedValue","round","snapToDecile","animate","type","stiffness","damping","mass","onComplete","visualDuration","bounce","handlePointerCancel","hovered","editing","editable","onCleanup","clearTimeout","setTimeout","onMount","unsubFill","on","unsubRubber","unsubHandleOpacity","unsubHandleScaleX","unsubHandleScaleY","focus","select","handleInputSubmit","parsed","parseFloat","isNaN","clamped","handleValueClick","stopPropagation","toFixed","decimalsForStep","handleInputKeyDown","key","displayValue","HANDLE_BUFFER","LABEL_CSS_LEFT","VALUE_CSS_RIGHT","leftThreshold","trackWidth","rightThreshold","valueDodge","handleOpacity","targetOpacity","targetScaleX","targetScaleY","duration","hashMarks","ds","Array","from","length","_","i","_el$","_tmpl$","_$setStyleProperty","_el$2","_el$3","_tmpl$3","_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","_$createComponent","Show","when","shortcut","children","_el$9","_tmpl$2","formatSliderShortcut","_$effect","_$className","shortcutActive","_c$","_$memo","_el$0","_tmpl$4","$$mousedown","$$click","$$keydown","$$input","_ref$6","_el$1","_ref$7","_p$","_v$4","_v$5","t","undefined","_v$","_v$2","_v$3","a","_$delegateEvents","import_solid_js","import_solid_js","SegmentedControl","props","containerRef","hasAnimated","pillStyle","setPillStyle","createSignal","measure","activeButton","querySelector","left","offsetLeft","width","offsetWidth","createEffect","value","options","length","transition","_el$","_tmpl$","_ref$","_$use","_$insert","_$createComponent","Show","when","children","style","_el$2","_tmpl$2","_$effect","_p$","_v$","_v$2","_v$3","e","_$setStyleProperty","t","a","undefined","For","each","option","_el$3","_tmpl$3","$$click","onChange","label","_$setAttribute","String","_$delegateEvents","Toggle","props","_el$","_tmpl$2","_el$2","firstChild","_$insert","label","_$createComponent","Show","when","shortcut","children","_el$3","_tmpl$","formatToggleShortcut","_$effect","_$className","shortcutActive","SegmentedControl","options","value","checked","onChange","val","import_solid_js","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","cache","simple","spring","visualDuration","undefined","type","bounce","advanced","stiffness","damping","mass","handleModeChange","newMode","updateSpringMode","onChange","handleUpdate","key","value","rest","_$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","import_solid_js","TextControl","props","inputId","createUniqueId","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_$setAttribute","_$insert","label","$$input","e","onChange","currentTarget","value","_$effect","placeholder","_$delegateEvents","import_solid_js","import_web","import_motion","toTitleCase","s","replace","c","toUpperCase","normalizeOptions","options","map","opt","value","label","SelectControl","props","isOpen","setIsOpen","createSignal","mounted","setMounted","pos","setPos","portalTarget","setPortalTarget","triggerRef","dropdownRef","chevronRef","closeAnim","chevronAnim","normalized","selectedOption","find","o","onMount","root","closest","document","body","style","transform","onCleanup","stop","createEffect","open","animate","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","_el$7","$$click","_ref$","_$use","_$insert","_ref$2","_$setAttribute","ICON_CHEVRON","_$createComponent","Show","when","children","Portal","mount","_$memo","_el$8","_tmpl$","el","For","each","option","_el$9","_tmpl$3","onChange","_$effect","String","_$p","_$style","_$delegateEvents","import_solid_js","HEX_COLOR_REGEX","expandShorthandHex","hex","length","ColorControl","props","isEditing","setIsEditing","createSignal","editValue","setEditValue","value","textInputId","createUniqueId","colorInputRef","createEffect","handleTextSubmit","test","onChange","handleKeyDown","e","key","_el$","_tmpl$2","_el$2","firstChild","_el$3","nextSibling","_el$5","_el$6","_$setAttribute","_$insert","label","_$createComponent","Show","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","import_solid_js","import_web","import_motion","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","_el$5","$$click","_ref$","_$use","_$insert","_c$","_$memo","name","_ref$2","_$setAttribute","ICON_CHEVRON","_$createComponent","Show","when","children","Portal","mount","_el$6","_tmpl$","_el$7","el","For","each","preset","_el$8","_tmpl$3","_el$9","_el$0","_el$1","_el$10","_el$11","_el$12","_el$13","_el$14","_$effect","_p$","_v$8","_v$9","ICON_TRASH","_v$0","_v$1","_v$10","_v$11","t","a","o","i","n","undefined","_v$","_v$2","_v$3","_v$4","_$setStyleProperty","_v$5","_v$6","_v$7","_$delegateEvents","Panel","props","copied","setCopied","createSignal","isPanelOpen","setIsPanelOpen","defaultOpen","shortcutCtx","useShortcutContext","hasShortcuts","Object","keys","panel","shortcuts","length","values","setValues","DialStore","getValues","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","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","shortcut","shortcutActive","_$memo","activePanelId","activePath","Toggle","checked","SpringControl","panelId","spring","Folder","title","children","For","each","child","TextControl","placeholder","SelectControl","options","ColorControl","renderControls","controls","_el$","_tmpl$","$$click","triggerAction","_$insert","toolbar","_el$2","_tmpl$2","_el$3","firstChild","_el$4","_el$5","nextSibling","_el$6","_el$7","_el$8","addEventListener","$$pointerup","$$pointerdown","_ref$","_$use","_$effect","_p$","_v$","ICON_ADD_PRESET","_v$2","_v$3","_v$4","_v$5","e","_$setAttribute","t","a","o","i","undefined","PresetManager","onAdd","_el$9","_tmpl$3","_el$0","_el$1","_el$10","_el$11","_el$12","_el$13","_el$14","_el$15","_el$16","_ref$2","_ref$3","_ref$4","ICON_CHECK","_v$6","ICON_CLIPBOARD","board","_v$7","sparkle","_v$8","body","_el$17","_tmpl$4","isRoot","inline","onOpenChange","_$delegateEvents","isDevDefault","process","env","NODE_ENV","import","MODE","DialRoot","props","productionEnabled","panels","setPanels","createSignal","mounted","setMounted","inline","mode","onMount","DialStore","getPanels","unsub","subscribeGlobal","onCleanup","content","_$createComponent","ShortcutListener","children","_el$","_tmpl$","_el$2","firstChild","_$insert","For","each","panel","Panel","defaultOpen","_$effect","_p$","_v$","_v$2","theme","_v$3","undefined","position","_v$4","e","_$setAttribute","t","a","o","Show","when","_$memo","window","length","fallback","Portal","mount","document","body","import_solid_js","ButtonGroup","props","_el$","_tmpl$","_$insert","_$createComponent","For","each","buttons","children","button","_el$2","_tmpl$2","_$addEventListener","onClick","label","_$delegateEvents"]}
|