dialkit 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +433 -3
  2. package/dist/icons.d.ts +4 -1
  3. package/dist/icons.js +13 -0
  4. package/dist/icons.js.map +1 -1
  5. package/dist/index.cjs +3118 -480
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.cts +274 -6
  8. package/dist/index.d.ts +274 -6
  9. package/dist/index.js +3050 -417
  10. package/dist/index.js.map +1 -1
  11. package/dist/solid/index.d.ts +225 -3
  12. package/dist/solid/index.js +5697 -2508
  13. package/dist/solid/index.js.map +1 -1
  14. package/dist/store/index.cjs +57 -16
  15. package/dist/store/index.cjs.map +1 -1
  16. package/dist/store/index.d.cts +14 -2
  17. package/dist/store/index.d.ts +14 -2
  18. package/dist/store/index.js +52 -16
  19. package/dist/store/index.js.map +1 -1
  20. package/dist/styles.css +704 -0
  21. package/dist/svelte/components/ControlRenderer.svelte +5 -2
  22. package/dist/svelte/components/ControlRenderer.svelte.d.ts +2 -0
  23. package/dist/svelte/components/ControlRenderer.svelte.d.ts.map +1 -1
  24. package/dist/svelte/components/DialRoot.svelte +43 -6
  25. package/dist/svelte/components/DialRoot.svelte.d.ts.map +1 -1
  26. package/dist/svelte/components/Panel.svelte +7 -1
  27. package/dist/svelte/components/Panel.svelte.d.ts +2 -0
  28. package/dist/svelte/components/Panel.svelte.d.ts.map +1 -1
  29. package/dist/svelte/components/Timeline/ClipPopover.svelte +206 -0
  30. package/dist/svelte/components/Timeline/ClipPopover.svelte.d.ts +26 -0
  31. package/dist/svelte/components/Timeline/ClipPopover.svelte.d.ts.map +1 -0
  32. package/dist/svelte/components/Timeline/DialTimeline.svelte +76 -0
  33. package/dist/svelte/components/Timeline/DialTimeline.svelte.d.ts +13 -0
  34. package/dist/svelte/components/Timeline/DialTimeline.svelte.d.ts.map +1 -0
  35. package/dist/svelte/components/Timeline/TimelineClip.svelte +233 -0
  36. package/dist/svelte/components/Timeline/TimelineClip.svelte.d.ts +24 -0
  37. package/dist/svelte/components/Timeline/TimelineClip.svelte.d.ts.map +1 -0
  38. package/dist/svelte/components/Timeline/TimelineSection.svelte +756 -0
  39. package/dist/svelte/components/Timeline/TimelineSection.svelte.d.ts +12 -0
  40. package/dist/svelte/components/Timeline/TimelineSection.svelte.d.ts.map +1 -0
  41. package/dist/svelte/components/Timeline/TimelineToggleButton.svelte +25 -0
  42. package/dist/svelte/components/Timeline/TimelineToggleButton.svelte.d.ts +4 -0
  43. package/dist/svelte/components/Timeline/TimelineToggleButton.svelte.d.ts.map +1 -0
  44. package/dist/svelte/components/TransitionControl.svelte +26 -11
  45. package/dist/svelte/components/TransitionControl.svelte.d.ts +9 -0
  46. package/dist/svelte/components/TransitionControl.svelte.d.ts.map +1 -1
  47. package/dist/svelte/createDialTimeline.svelte.d.ts +4 -0
  48. package/dist/svelte/createDialTimeline.svelte.d.ts.map +1 -0
  49. package/dist/svelte/createDialTimeline.svelte.js +73 -0
  50. package/dist/svelte/index.d.ts +4 -0
  51. package/dist/svelte/index.d.ts.map +1 -1
  52. package/dist/svelte/index.js +3 -0
  53. package/dist/svelte/theme-css.d.ts +1 -1
  54. package/dist/svelte/theme-css.d.ts.map +1 -1
  55. package/dist/svelte/theme-css.js +704 -0
  56. package/dist/timeline/index.cjs +1288 -0
  57. package/dist/timeline/index.cjs.map +1 -0
  58. package/dist/timeline/index.d.cts +443 -0
  59. package/dist/timeline/index.d.ts +443 -0
  60. package/dist/timeline/index.js +1233 -0
  61. package/dist/timeline/index.js.map +1 -0
  62. package/dist/vue/index.d.ts +273 -7
  63. package/dist/vue/index.js +2867 -361
  64. package/dist/vue/index.js.map +1 -1
  65. package/package.json +23 -13
  66. package/dist/solid/index.cjs +0 -3536
  67. package/dist/solid/index.cjs.map +0 -1
  68. package/dist/solid/index.d.cts +0 -295
  69. package/dist/vue/index.cjs +0 -3497
  70. package/dist/vue/index.cjs.map +0 -1
  71. package/dist/vue/index.d.cts +0 -722
@@ -1 +0,0 @@
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/Folder.tsx","../../src/icons.ts","../../src/solid/components/Panel.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/dropdown-position.ts","../../src/solid/components/ColorControl.tsx","../../src/solid/components/PresetManager.tsx","../../src/panel-drag.ts","../../src/solid/components/ButtonGroup.tsx"],"sourcesContent":["// Core API\nexport { createDialKit, createDialKitController } from './createDialKit';\nexport type { CreateDialOptions, DialKitController } 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 EasingConfig,\n TransitionConfig,\n ActionConfig,\n SelectConfig,\n ColorConfig,\n TextConfig,\n ShortcutConfig,\n Preset,\n DialValue,\n DialConfig,\n DialKitPersistOptions,\n DialKitValueUpdates,\n ResolvedValues,\n ControlMeta,\n PanelConfig,\n} from '../store/DialStore';\n","import { createSignal, createMemo, onMount, onCleanup, createUniqueId, type Accessor } from 'solid-js';\nimport { DialStore, flattenDialValueUpdates, resolveDialValues } from '../store/DialStore';\nimport type {\n DialConfig,\n DialKitPersistOptions,\n DialKitValueUpdates,\n DialValue,\n ResolvedValues,\n ShortcutConfig,\n} from '../store/DialStore';\n\nexport interface CreateDialOptions {\n id?: string;\n persist?: DialKitPersistOptions;\n onAction?: (action: string) => void;\n shortcuts?: Record<string, ShortcutConfig>;\n}\n\nexport interface DialKitController<T extends DialConfig> {\n values: Accessor<ResolvedValues<T>>;\n setValue: (path: string, value: DialValue) => void;\n setValues: (values: DialKitValueUpdates<T>) => void;\n resetValues: () => void;\n getValues: () => ResolvedValues<T>;\n}\n\nexport function createDialKit<T extends DialConfig>(\n name: string,\n config: T,\n options?: CreateDialOptions\n): Accessor<ResolvedValues<T>> {\n return createDialKitController(name, config, options).values;\n}\n\nexport function createDialKitController<T extends DialConfig>(\n name: string,\n config: T,\n options?: CreateDialOptions\n): DialKitController<T> {\n const id = createUniqueId();\n const hasStableId = options?.id !== undefined;\n const panelId = options?.id ?? `${name}-${id}`;\n\n const [flatValues, setFlatValues] = createSignal<Record<string, DialValue>>(\n DialStore.getValues(panelId)\n );\n\n onMount(() => {\n DialStore.registerPanel(panelId, name, config, options?.shortcuts, {\n retainOnUnmount: hasStableId,\n persist: options?.persist,\n });\n setFlatValues(DialStore.getValues(panelId));\n\n const unsubValues = DialStore.subscribe(panelId, () => {\n setFlatValues(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 const values = createMemo(() => resolveDialValues(config, flatValues()));\n\n return {\n values,\n setValue(path, value) {\n DialStore.updateValue(panelId, path, value);\n },\n setValues(nextValues) {\n DialStore.updateValues(panelId, flattenDialValueUpdates(config, nextValues));\n },\n resetValues() {\n DialStore.resetValues(panelId);\n },\n getValues() {\n return resolveDialValues(config, DialStore.getValues(panelId));\n },\n };\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 DialKitValueUpdates<T extends DialConfig> = {\n [K in keyof T as K extends '_collapsed' ? never : K]?: T[K] extends [number, number, number, number?]\n ? number\n : T[K] extends SpringConfig | EasingConfig\n ? TransitionConfig\n : T[K] extends ActionConfig\n ? never\n : T[K] extends SelectConfig | ColorConfig | TextConfig\n ? string\n : T[K] extends DialConfig\n ? DialKitValueUpdates<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\nexport type DialKitPersistOptions = boolean | {\n key?: string;\n storage?: 'localStorage' | 'sessionStorage';\n presets?: boolean;\n};\n\nexport type DialStorePanelOptions = {\n retainOnUnmount?: boolean;\n persist?: DialKitPersistOptions;\n};\n\ntype PersistConfig = {\n key: string;\n storage: 'localStorage' | 'sessionStorage';\n presets: boolean;\n};\n\ntype PersistedPanelState = {\n version: 1;\n values?: Record<string, DialValue>;\n baseValues?: Record<string, DialValue>;\n presets?: Preset[];\n activePresetId?: string | null;\n};\n\n// Stable empty object for unregistered panels (React 19 useSyncExternalStore requirement)\nconst EMPTY_VALUES: Record<string, DialValue> = Object.freeze({});\n\nexport function resolveDialValues<T extends DialConfig>(\n config: T,\n flatValues: Record<string, DialValue>\n): ResolvedValues<T> {\n return resolveConfigValues(config, flatValues, '') as ResolvedValues<T>;\n}\n\nexport function flattenDialValueUpdates<T extends DialConfig>(\n config: T,\n updates: DialKitValueUpdates<T>\n): Record<string, DialValue> {\n const values: Record<string, DialValue> = {};\n if (typeof updates === 'object' && updates !== null) {\n flattenConfigUpdates(config, updates as Record<string, unknown>, '', values);\n }\n return values;\n}\n\nfunction resolveConfigValues(\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 (isSpringConfigValue(configValue) || isEasingConfigValue(configValue)) {\n result[key] = flatValues[path] ?? configValue;\n } else if (isActionConfigValue(configValue)) {\n result[key] = flatValues[path] ?? configValue;\n } else if (isSelectConfigValue(configValue)) {\n const defaultValue = configValue.default ?? getFirstOptionValue(configValue.options);\n result[key] = flatValues[path] ?? defaultValue;\n } else if (isColorConfigValue(configValue)) {\n result[key] = flatValues[path] ?? configValue.default ?? '#000000';\n } else if (isTextConfigValue(configValue)) {\n result[key] = flatValues[path] ?? configValue.default ?? '';\n } else if (typeof configValue === 'object' && configValue !== null) {\n result[key] = resolveConfigValues(configValue as DialConfig, flatValues, path);\n }\n }\n\n return result;\n}\n\nfunction flattenConfigUpdates(\n config: DialConfig,\n updates: Record<string, unknown>,\n prefix: string,\n values: Record<string, DialValue>\n): void {\n for (const [key, configValue] of Object.entries(config)) {\n if (key === '_collapsed' || !(key in updates)) continue;\n\n const nextValue = updates[key];\n if (nextValue === undefined) continue;\n\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (isActionConfigValue(configValue)) {\n continue;\n }\n\n if (isLeafConfigValue(configValue)) {\n values[path] = nextValue as DialValue;\n continue;\n }\n\n if (\n typeof configValue === 'object' &&\n configValue !== null &&\n typeof nextValue === 'object' &&\n nextValue !== null &&\n !Array.isArray(nextValue)\n ) {\n flattenConfigUpdates(configValue as DialConfig, nextValue as Record<string, unknown>, path, values);\n }\n }\n}\n\nfunction isLeafConfigValue(value: unknown): boolean {\n return (\n (Array.isArray(value) && value.length <= 4 && typeof value[0] === 'number') ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'string' ||\n isSpringConfigValue(value) ||\n isEasingConfigValue(value) ||\n isActionConfigValue(value) ||\n isSelectConfigValue(value) ||\n isColorConfigValue(value) ||\n isTextConfigValue(value)\n );\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 isSpringConfigValue(value: unknown): value is SpringConfig {\n return hasType(value, 'spring');\n}\n\nfunction isEasingConfigValue(value: unknown): value is EasingConfig {\n return hasType(value, 'easing');\n}\n\nfunction isActionConfigValue(value: unknown): value is ActionConfig {\n return hasType(value, 'action');\n}\n\nfunction isSelectConfigValue(value: unknown): value is SelectConfig {\n return hasType(value, 'select') && 'options' in (value as object) && Array.isArray((value as SelectConfig).options);\n}\n\nfunction isColorConfigValue(value: unknown): value is ColorConfig {\n return hasType(value, 'color');\n}\n\nfunction isTextConfigValue(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 if (first === undefined) return '';\n return typeof first === 'string' ? first : first.value;\n}\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 private defaultValues: Map<string, Record<string, DialValue>> = new Map();\n private registrationCounts: Map<string, number> = new Map();\n private retainedPanels: Set<string> = new Set();\n private persistConfigs: Map<string, PersistConfig> = new Map();\n\n registerPanel(id: string, name: string, config: DialConfig, shortcuts?: Record<string, ShortcutConfig>, options: DialStorePanelOptions = {}): void {\n this.configurePanelRetention(id, options);\n this.registrationCounts.set(id, (this.registrationCounts.get(id) ?? 0) + 1);\n\n const controls = this.parseConfig(config, '', shortcuts);\n const controlsByPath = this.mapControlsByPath(controls);\n const defaultValues = this.flattenValues(config, '');\n\n // Set initial transition modes based on config types\n this.initTransitionModes(config, '', defaultValues);\n\n const persisted = this.loadPersistedPanel(id);\n const previousValues = this.panels.get(id)?.values ?? this.snapshots.get(id) ?? persisted?.values ?? {};\n const values = this.reconcileValues(defaultValues, previousValues, controlsByPath);\n\n const previousBaseValues = this.baseValues.get(id) ?? persisted?.baseValues ?? persisted?.values ?? {};\n const baseValues = this.reconcileValues(defaultValues, previousBaseValues, controlsByPath);\n\n this.panels.set(id, { id, name, controls, values, shortcuts: shortcuts ?? {} });\n this.snapshots.set(id, { ...values });\n this.baseValues.set(id, baseValues);\n this.defaultValues.set(id, { ...defaultValues });\n\n const existingPresets = this.presets.get(id) ?? persisted?.presets;\n if (existingPresets) {\n this.presets.set(id, this.reconcilePresets(existingPresets, defaultValues, controlsByPath));\n }\n if (!this.activePreset.has(id) && persisted?.activePresetId !== undefined) {\n this.activePreset.set(id, persisted.activePresetId);\n }\n\n this.persistPanel(id);\n this.notify(id);\n this.notifyGlobal();\n }\n\n updatePanel(id: string, name: string, config: DialConfig, shortcuts?: Record<string, ShortcutConfig>, options: DialStorePanelOptions = {}): void {\n this.configurePanelRetention(id, options);\n const existing = this.panels.get(id);\n if (!existing) {\n this.registerPanel(id, name, config, shortcuts, options);\n return;\n }\n\n const controls = this.parseConfig(config, '', shortcuts);\n const controlsByPath = this.mapControlsByPath(controls);\n const defaultValues = this.flattenValues(config, '');\n this.initTransitionModes(config, '', defaultValues);\n const nextValues = this.reconcileValues(defaultValues, existing.values, controlsByPath);\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 = this.reconcileValues(defaultValues, previousBaseValues, controlsByPath);\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 this.defaultValues.set(id, { ...defaultValues });\n this.presets.set(id, this.reconcilePresets(this.presets.get(id) ?? [], defaultValues, controlsByPath));\n\n this.persistPanel(id);\n this.notify(id);\n this.notifyGlobal();\n }\n\n unregisterPanel(id: string): void {\n const nextCount = (this.registrationCounts.get(id) ?? 1) - 1;\n if (nextCount > 0) {\n this.registrationCounts.set(id, nextCount);\n return;\n }\n\n this.registrationCounts.delete(id);\n this.panels.delete(id);\n this.listeners.delete(id);\n this.actionListeners.delete(id);\n\n if (!this.retainedPanels.has(id)) {\n this.snapshots.delete(id);\n this.baseValues.delete(id);\n this.defaultValues.delete(id);\n this.presets.delete(id);\n this.activePreset.delete(id);\n this.persistConfigs.delete(id);\n }\n\n this.notifyGlobal();\n }\n\n updateValue(panelId: string, path: string, value: DialValue): void {\n this.updateValues(panelId, { [path]: value });\n }\n\n updateValues(panelId: string, updates: Record<string, DialValue>): void {\n const panel = this.panels.get(panelId);\n if (!panel) return;\n\n const validUpdates: Record<string, DialValue> = {};\n\n for (const [path, value] of Object.entries(updates)) {\n if (!Object.prototype.hasOwnProperty.call(panel.values, path)) {\n continue;\n }\n\n const control = this.findControlByPath(panel.controls, path);\n if (control?.type === 'action') {\n continue;\n }\n\n panel.values[path] = value;\n validUpdates[path] = value;\n }\n\n if (Object.keys(validUpdates).length === 0) {\n return;\n }\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) {\n for (const [path, value] of Object.entries(validUpdates)) {\n preset.values[path] = value;\n }\n }\n } else {\n const base = this.baseValues.get(panelId);\n if (base) {\n for (const [path, value] of Object.entries(validUpdates)) {\n base[path] = value;\n }\n }\n }\n\n // Create a new snapshot reference so useSyncExternalStore detects the change\n this.snapshots.set(panelId, { ...panel.values });\n this.persistPanel(panelId);\n this.notify(panelId);\n }\n\n resetValues(panelId: string): void {\n const panel = this.panels.get(panelId);\n const defaults = this.defaultValues.get(panelId);\n if (!panel || !defaults) return;\n\n panel.values = { ...defaults };\n this.snapshots.set(panelId, { ...panel.values });\n this.baseValues.set(panelId, { ...defaults });\n this.activePreset.set(panelId, null);\n this.persistPanel(panelId);\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.persistPanel(panelId);\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.persistPanel(panelId);\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.persistPanel(panelId);\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.persistPanel(panelId);\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.persistPanel(panelId);\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 configurePanelRetention(id: string, options: DialStorePanelOptions): void {\n if (options.retainOnUnmount) {\n this.retainedPanels.add(id);\n }\n\n const persistConfig = this.normalizePersistConfig(id, options.persist);\n if (persistConfig) {\n this.persistConfigs.set(id, persistConfig);\n this.retainedPanels.add(id);\n }\n }\n\n private reconcileValues(\n defaultValues: Record<string, DialValue>,\n previousValues: Record<string, DialValue>,\n controlsByPath: Map<string, ControlMeta>\n ): Record<string, DialValue> {\n const nextValues: Record<string, DialValue> = {};\n\n for (const [path, defaultValue] of Object.entries(defaultValues)) {\n if (path.endsWith('.__mode')) {\n const transitionPath = path.slice(0, -'.__mode'.length);\n const transitionControl = controlsByPath.get(transitionPath);\n nextValues[path] = transitionControl?.type === 'transition' && previousValues[path] !== undefined\n ? previousValues[path]\n : defaultValue;\n continue;\n }\n\n nextValues[path] = this.normalizePreservedValue(\n previousValues[path],\n defaultValue,\n controlsByPath.get(path)\n );\n }\n\n return nextValues;\n }\n\n private reconcilePresets(\n presets: Preset[],\n defaultValues: Record<string, DialValue>,\n controlsByPath: Map<string, ControlMeta>\n ): Preset[] {\n return presets.map((preset) => ({\n ...preset,\n values: this.reconcileValues(defaultValues, preset.values, controlsByPath),\n }));\n }\n\n private normalizePersistConfig(id: string, persist: DialKitPersistOptions | undefined): PersistConfig | null {\n if (!persist) return null;\n const options = typeof persist === 'object' ? persist : {};\n return {\n key: options.key ?? `dialkit:${id}`,\n storage: options.storage ?? 'localStorage',\n presets: options.presets ?? true,\n };\n }\n\n private loadPersistedPanel(id: string): PersistedPanelState | null {\n const config = this.persistConfigs.get(id);\n if (!config) return null;\n\n const storage = this.getStorage(config.storage);\n if (!storage) return null;\n\n try {\n const raw = storage.getItem(config.key);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as PersistedPanelState;\n if (parsed?.version !== 1 || typeof parsed !== 'object') return null;\n return parsed;\n } catch {\n return null;\n }\n }\n\n private persistPanel(id: string): void {\n const config = this.persistConfigs.get(id);\n if (!config) return;\n\n const storage = this.getStorage(config.storage);\n if (!storage) return;\n\n const values = this.snapshots.get(id) ?? this.panels.get(id)?.values;\n if (!values) return;\n\n const state: PersistedPanelState = {\n version: 1,\n values,\n baseValues: this.baseValues.get(id) ?? values,\n activePresetId: this.activePreset.get(id) ?? null,\n };\n\n if (config.presets) {\n state.presets = this.presets.get(id) ?? [];\n }\n\n try {\n storage.setItem(config.key, JSON.stringify(state));\n } catch {\n // Ignore storage quota/security errors; DialKit should still work in-memory.\n }\n }\n\n private getStorage(kind: 'localStorage' | 'sessionStorage'): Storage | null {\n if (typeof globalThis === 'undefined' || !('window' in globalThis)) {\n return null;\n }\n\n try {\n return kind === 'sessionStorage'\n ? globalThis.window?.sessionStorage ?? null\n : globalThis.window?.localStorage ?? null;\n } catch {\n return null;\n }\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 { createEffect, createSignal, onCleanup, onMount, 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 { Folder } from './Folder';\nimport { Panel } from './Panel';\nimport {\n blockPanelDragClick,\n getPanelDragHandle,\n getPanelDragOffset,\n getPanelDragStart,\n getPanelOriginX,\n hasPanelDragMoved,\n type PanelDragOffset,\n type PanelDragStart,\n} from '../../panel-drag';\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 onOpenChange?: (open: boolean) => void;\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 [dragOffset, setDragOffset] = createSignal<PanelDragOffset | null>(null);\n const [activePosition, setActivePosition] = createSignal<DialPosition>(props.position ?? 'top-right');\n const inline = () => (props.mode ?? 'popover') === 'inline';\n let panelRef: HTMLDivElement | undefined;\n let lastDragOffset: PanelDragOffset | null = null;\n let dragging = false;\n let dragStart: PanelDragStart | null = null;\n let didDrag = false;\n let dragTarget: HTMLElement | null = null;\n let panelOpenStates = new Map<string, boolean>();\n let rootOpen: boolean | undefined;\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 createEffect(() => {\n const fallbackOpen = inline() || (props.defaultOpen ?? true);\n const nextStates = new Map<string, boolean>();\n for (const panel of panels()) {\n nextStates.set(panel.id, panelOpenStates.get(panel.id) ?? fallbackOpen);\n }\n panelOpenStates = nextStates;\n rootOpen = Array.from(nextStates.values()).some(Boolean);\n });\n\n createEffect(() => {\n if (!mounted() || inline() || !panelRef) return;\n\n const observer = new MutationObserver(() => {\n const inners = panelRef?.querySelectorAll('.dialkit-panel-inner');\n if (!inners || inners.length === 0) return;\n const collapsed = Array.from(inners).every((el) => el.getAttribute('data-collapsed') === 'true');\n const currentDragOffset = dragOffset();\n\n if (!collapsed) {\n if (currentDragOffset) {\n lastDragOffset = currentDragOffset;\n const bubbleCenterX = currentDragOffset.x + 21;\n setActivePosition(bubbleCenterX < window.innerWidth / 2 ? 'top-left' : 'top-right');\n } else {\n setActivePosition(props.position ?? 'top-right');\n }\n setDragOffset(null);\n } else if (currentDragOffset) {\n lastDragOffset = currentDragOffset;\n } else if (lastDragOffset) {\n setDragOffset(lastDragOffset);\n }\n });\n\n observer.observe(panelRef, { subtree: true, attributes: true, attributeFilter: ['data-collapsed'] });\n onCleanup(() => observer.disconnect());\n });\n\n const handlePointerDown = (event: PointerEvent) => {\n const panel = panelRef ?? null;\n const handle = getPanelDragHandle(event.target, panel);\n if (!panel || !handle) return;\n\n dragTarget = handle;\n dragStart = getPanelDragStart(event.clientX, event.clientY, panel);\n didDrag = false;\n dragging = true;\n handle.setPointerCapture(event.pointerId);\n };\n\n const handlePointerMove = (event: PointerEvent) => {\n if (!dragging || !dragStart) return;\n\n if (!didDrag && !hasPanelDragMoved(dragStart, event.clientX, event.clientY)) return;\n didDrag = true;\n\n setDragOffset(getPanelDragOffset(dragStart, event.clientX, event.clientY));\n };\n\n const handlePointerUp = (event: PointerEvent) => {\n if (!dragging) return;\n dragging = false;\n dragStart = null;\n const handle = dragTarget;\n\n if (handle?.hasPointerCapture(event.pointerId)) {\n handle.releasePointerCapture(event.pointerId);\n }\n\n if (didDrag) {\n event.stopPropagation();\n if (handle) {\n blockPanelDragClick(handle);\n }\n }\n\n dragTarget = null;\n };\n\n const handlePanelOpenChange = (panelId: string, open: boolean) => {\n panelOpenStates.set(panelId, open);\n const fallbackOpen = inline() || (props.defaultOpen ?? true);\n const nextRootOpen = panels().some((panel) => (\n panelOpenStates.get(panel.id) ?? fallbackOpen\n ));\n\n if (rootOpen === nextRootOpen) return;\n rootOpen = nextRootOpen;\n props.onOpenChange?.(nextRootOpen);\n };\n\n const handleRootOpenChange = (open: boolean) => {\n if (rootOpen === open) return;\n rootOpen = open;\n props.onOpenChange?.(open);\n };\n\n const dragStyle = () => {\n const offset = dragOffset();\n return offset\n ? {\n top: `${offset.y}px`,\n left: `${offset.x}px`,\n right: 'auto',\n bottom: 'auto',\n }\n : undefined;\n };\n\n const content = () => (\n <ShortcutListener>\n <div class=\"dialkit-root\" data-mode={props.mode ?? 'popover'} data-theme={props.theme ?? 'system'}>\n <div\n ref={panelRef}\n class=\"dialkit-panel\"\n data-position={inline() ? undefined : (dragOffset() ? undefined : activePosition())}\n data-origin-x={inline() ? undefined : getPanelOriginX(activePosition(), dragOffset())}\n data-mode={props.mode ?? 'popover'}\n data-multiple={panels().length > 1 ? 'true' : undefined}\n style={dragStyle()}\n onPointerDown={!inline() ? handlePointerDown : undefined}\n onPointerMove={!inline() ? handlePointerMove : undefined}\n onPointerUp={!inline() ? handlePointerUp : undefined}\n onPointerCancel={!inline() ? handlePointerUp : undefined}\n >\n <Show\n when={panels().length > 1}\n fallback={\n <For each={panels()}>\n {(panel) => (\n <Panel\n panel={panel}\n defaultOpen={inline() || (props.defaultOpen ?? true)}\n inline={inline()}\n onOpenChange={(open) => handlePanelOpenChange(panel.id, open)}\n />\n )}\n </For>\n }\n >\n <div class=\"dialkit-panel-wrapper\">\n <Folder\n title=\"DialKit\"\n defaultOpen={inline() || (props.defaultOpen ?? true)}\n isRoot={true}\n inline={inline()}\n onOpenChange={handleRootOpenChange}\n panelHeightOffset={2}\n >\n <For each={panels()}>\n {(panel) => (\n <Panel\n panel={panel}\n defaultOpen={true}\n variant=\"section\"\n />\n )}\n </For>\n </Folder>\n </div>\n </Show>\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, 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 panelHeightOffset?: number;\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 data-open={String(isOpen())}\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()! + (props.panelHeightOffset ?? 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","// 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, 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 onOpenChange?: (open: boolean) => void;\n variant?: 'root' | 'section';\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 handleOpenChange = (open: boolean) => {\n setIsPanelOpen(open);\n props.onOpenChange?.(open);\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 if (props.variant === 'section') {\n return (\n <Folder title={props.panel.name} defaultOpen={props.defaultOpen ?? true} onOpenChange={handleOpenChange}>\n <div class=\"dialkit-panel-section-toolbar\" onClick={(e) => e.stopPropagation()}>\n {toolbar}\n </div>\n {renderControls()}\n </Folder>\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={handleOpenChange} toolbar={toolbar}>\n {renderControls()}\n </Folder>\n </div>\n );\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 { getDialKitPortalRoot, getDropdownPosition } from '../../dropdown-position';\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 setPortalTarget(getDialKitPortalRoot(triggerRef) ?? 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 const root = portalTarget();\n if (!triggerRef || !root) return;\n const dropdownHeight = 8 + normalized().length * 36;\n setPos(getDropdownPosition(triggerRef, root, { dropdownHeight }));\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: 'absolute' as const,\n left: `${p.left}px`,\n top: `${p.top}px`,\n width: `${p.width}px`,\n 'transform-origin': p.above ? 'bottom' : '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","export type DropdownPosition = {\n top: number;\n left: number;\n width: number;\n above: boolean;\n};\n\nexport type DropdownPositionOptions = {\n dropdownHeight?: number;\n gap?: number;\n allowAbove?: boolean;\n};\n\nexport function getDropdownPosition(\n trigger: HTMLElement,\n portalRoot: HTMLElement,\n options: DropdownPositionOptions = {}\n): DropdownPosition {\n const { dropdownHeight = 0, gap = 4, allowAbove = true } = options;\n const triggerRect = trigger.getBoundingClientRect();\n const rootRect = portalRoot.getBoundingClientRect();\n const spaceBelow = window.innerHeight - triggerRect.bottom - gap;\n const above = allowAbove && spaceBelow < dropdownHeight && triggerRect.top > spaceBelow;\n\n return {\n top: above\n ? triggerRect.top - rootRect.top - dropdownHeight - gap\n : triggerRect.bottom - rootRect.top + gap,\n left: triggerRect.left - rootRect.left,\n width: triggerRect.width,\n above,\n };\n}\n\nexport function getDialKitPortalRoot(trigger: HTMLElement | null | undefined): HTMLElement | null {\n return (trigger?.closest('.dialkit-root') as HTMLElement | null) ?? null;\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 { getDialKitPortalRoot, getDropdownPosition } from '../../dropdown-position';\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 setPortalTarget(getDialKitPortalRoot(triggerRef) ?? 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 root = portalTarget();\n if (!triggerRef || !root) return;\n setPos(getDropdownPosition(triggerRef, root, { allowAbove: false }));\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: 'absolute',\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","export type PanelDragOffset = {\n x: number;\n y: number;\n};\n\nexport type PanelDragStart = {\n pointerX: number;\n pointerY: number;\n elX: number;\n elY: number;\n};\n\nexport type PanelDragOriginX = 'left' | 'right';\n\nconst PANEL_DRAG_THRESHOLD = 8;\nconst COLLAPSED_PANEL_SIZE = 42;\n\nconst DRAG_EXCLUSION_SELECTOR = [\n '.dialkit-panel-icon',\n '.dialkit-panel-toolbar',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'a',\n '[role=\"button\"]',\n '[contenteditable=\"true\"]',\n].join(',');\n\nexport function getPanelDragHandle(target: EventTarget | null, panel: HTMLElement | null): HTMLElement | null {\n if (!(target instanceof Element) || !panel) return null;\n\n const inner = target.closest<HTMLElement>('.dialkit-panel-inner');\n if (!inner || !panel.contains(inner)) return null;\n\n if (inner.getAttribute('data-collapsed') === 'true') {\n return inner;\n }\n\n const header = target.closest<HTMLElement>('.dialkit-panel-header');\n if (!header || !inner.contains(header)) return null;\n\n if (target.closest(DRAG_EXCLUSION_SELECTOR)) return null;\n\n return header;\n}\n\nexport function getPanelDragStart(pointerX: number, pointerY: number, panel: HTMLElement): PanelDragStart {\n const rect = panel.getBoundingClientRect();\n return {\n pointerX,\n pointerY,\n elX: rect.left,\n elY: rect.top,\n };\n}\n\nexport function getPanelDragOffset(start: PanelDragStart, pointerX: number, pointerY: number): PanelDragOffset {\n return {\n x: start.elX + pointerX - start.pointerX,\n y: start.elY + pointerY - start.pointerY,\n };\n}\n\nexport function hasPanelDragMoved(start: PanelDragStart, pointerX: number, pointerY: number): boolean {\n const dx = pointerX - start.pointerX;\n const dy = pointerY - start.pointerY;\n return Math.hypot(dx, dy) >= PANEL_DRAG_THRESHOLD;\n}\n\nexport function getPanelOriginX(\n position: string,\n offset: PanelDragOffset | null,\n viewportWidth = typeof window !== 'undefined' ? window.innerWidth : undefined\n): PanelDragOriginX {\n if (offset && viewportWidth) {\n return offset.x + COLLAPSED_PANEL_SIZE / 2 < viewportWidth / 2 ? 'left' : 'right';\n }\n\n return position.endsWith('left') ? 'left' : 'right';\n}\n\nexport function blockPanelDragClick(handle: HTMLElement) {\n const blocker = (event: Event) => {\n event.preventDefault();\n event.stopImmediatePropagation();\n event.stopPropagation();\n };\n\n handle.addEventListener('click', blocker, { capture: true, once: true });\n window.setTimeout(() => {\n handle.removeEventListener('click', blocker, true);\n }, 0);\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","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$4","ICON_PANEL","path","_v$5","circles","cx","_v$6","cy","_v$7","r","_v$8","_v$9","_v$0","_v$1","_v$10","_v$11","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","String","_v$3","_$className","_el$16","_tmpl$8","panelRef","rootPanelAnim","rootPanelInitialized","lastRootOpen","handler","measuredOpenHeight","Math","min","panelHeightOffset","target","width","borderRadius","boxShadow","cursor","overflow","_el$17","_tmpl$9","scale","$$pointerup","$$pointerdown","document","activeElement","blur","_ref$2","_$delegateEvents","import_solid_js","import_motion","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","getDialKitPortalRoot","document","body","style","transform","onCleanup","stop","createEffect","open","animate","rotate","type","visualDuration","bounce","updatePos","root","dropdownHeight","length","getDropdownPosition","openDropdown","closeDropdown","above","opacity","y","scale","onComplete","handleViewportChange","handleClick","e","target","contains","addEventListener","window","removeEventListener","dropdownStyle","p","position","left","top","width","_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","getDialKitPortalRoot","document","body","style","transform","opacity","String","onCleanup","stop","createEffect","open","has","animate","rotate","type","visualDuration","bounce","updatePos","root","getDropdownPosition","allowAbove","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","handleOpenChange","open","onOpenChange","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","variant","_el$17","_tmpl$4","stopPropagation","_el$18","_tmpl$5","isRoot","inline","_$delegateEvents","isDevDefault","process","env","NODE_ENV","import","MODE","DialRoot","props","productionEnabled","panels","setPanels","createSignal","mounted","setMounted","dragOffset","setDragOffset","activePosition","setActivePosition","position","inline","mode","panelRef","lastDragOffset","dragging","dragStart","didDrag","dragTarget","panelOpenStates","Map","rootOpen","onMount","DialStore","getPanels","unsub","subscribeGlobal","onCleanup","createEffect","fallbackOpen","defaultOpen","nextStates","panel","set","id","get","Array","from","values","some","Boolean","observer","MutationObserver","inners","querySelectorAll","length","collapsed","every","el","getAttribute","currentDragOffset","bubbleCenterX","x","window","innerWidth","observe","subtree","attributes","attributeFilter","disconnect","handlePointerDown","event","handle","getPanelDragHandle","target","getPanelDragStart","clientX","clientY","setPointerCapture","pointerId","handlePointerMove","hasPanelDragMoved","getPanelDragOffset","handlePointerUp","hasPointerCapture","releasePointerCapture","stopPropagation","blockPanelDragClick","handlePanelOpenChange","panelId","open","nextRootOpen","onOpenChange","handleRootOpenChange","dragStyle","offset","top","y","left","right","bottom","undefined","content","_$createComponent","ShortcutListener","children","_el$","_tmpl$2","_el$2","firstChild","_$addEventListener","_ref$","_$use","_$insert","Show","when","fallback","For","each","Panel","_el$3","_tmpl$","Folder","title","isRoot","panelHeightOffset","variant","_$effect","_p$","_v$","_v$2","theme","_v$3","_v$4","getPanelOriginX","_v$5","_v$6","_v$7","e","_$setAttribute","t","a","o","i","n","s","_$style","_$memo","Portal","mount","document","body","_$delegateEvents","import_solid_js","ButtonGroup","props","_el$","_tmpl$","_$insert","_$createComponent","For","each","buttons","children","button","_el$2","_tmpl$2","_$addEventListener","onClick","label","_$delegateEvents"]}