dialkit 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +171 -1
- package/dist/index.cjs +876 -337
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +41 -6
- package/dist/index.d.ts +41 -6
- package/dist/index.js +878 -341
- package/dist/index.js.map +1 -1
- package/dist/solid/index.cjs +1011 -544
- package/dist/solid/index.cjs.map +1 -1
- package/dist/solid/index.d.cts +33 -3
- package/dist/solid/index.d.ts +33 -3
- package/dist/solid/index.js +864 -398
- package/dist/solid/index.js.map +1 -1
- package/dist/store/index.cjs +52 -12
- package/dist/store/index.cjs.map +1 -1
- package/dist/store/index.d.cts +25 -3
- package/dist/store/index.d.ts +25 -3
- package/dist/store/index.js +52 -12
- package/dist/store/index.js.map +1 -1
- package/dist/styles.css +256 -25
- package/dist/svelte/components/ControlRenderer.svelte +12 -0
- package/dist/svelte/components/ControlRenderer.svelte.d.ts.map +1 -1
- package/dist/svelte/components/DialRoot.svelte +22 -8
- package/dist/svelte/components/DialRoot.svelte.d.ts +3 -0
- package/dist/svelte/components/DialRoot.svelte.d.ts.map +1 -1
- package/dist/svelte/components/Folder.svelte +17 -8
- package/dist/svelte/components/Folder.svelte.d.ts.map +1 -1
- package/dist/svelte/components/Panel.svelte +14 -9
- package/dist/svelte/components/Panel.svelte.d.ts.map +1 -1
- package/dist/svelte/components/PresetManager.svelte +7 -6
- package/dist/svelte/components/PresetManager.svelte.d.ts.map +1 -1
- package/dist/svelte/components/SegmentedControl.svelte +30 -74
- package/dist/svelte/components/SegmentedControl.svelte.d.ts.map +1 -1
- package/dist/svelte/components/SelectControl.svelte +2 -1
- package/dist/svelte/components/SelectControl.svelte.d.ts.map +1 -1
- package/dist/svelte/components/ShortcutListener.svelte +265 -0
- package/dist/svelte/components/ShortcutListener.svelte.d.ts +13 -0
- package/dist/svelte/components/ShortcutListener.svelte.d.ts.map +1 -0
- package/dist/svelte/components/ShortcutsMenu.svelte +128 -0
- package/dist/svelte/components/ShortcutsMenu.svelte.d.ts +7 -0
- package/dist/svelte/components/ShortcutsMenu.svelte.d.ts.map +1 -0
- package/dist/svelte/components/Slider.svelte +16 -29
- package/dist/svelte/components/Slider.svelte.d.ts +3 -0
- package/dist/svelte/components/Slider.svelte.d.ts.map +1 -1
- package/dist/svelte/components/SpringControl.svelte +17 -15
- package/dist/svelte/components/SpringControl.svelte.d.ts.map +1 -1
- package/dist/svelte/components/Toggle.svelte +13 -2
- package/dist/svelte/components/Toggle.svelte.d.ts +3 -0
- package/dist/svelte/components/Toggle.svelte.d.ts.map +1 -1
- package/dist/svelte/components/TransitionControl.svelte +28 -25
- package/dist/svelte/components/TransitionControl.svelte.d.ts.map +1 -1
- package/dist/svelte/createDialKit.svelte.d.ts +2 -1
- package/dist/svelte/createDialKit.svelte.d.ts.map +1 -1
- package/dist/svelte/createDialKit.svelte.js +1 -1
- package/dist/svelte/index.d.ts +6 -2
- package/dist/svelte/index.d.ts.map +1 -1
- package/dist/svelte/index.js +4 -0
- package/dist/svelte/theme-css.d.ts +1 -1
- package/dist/svelte/theme-css.d.ts.map +1 -1
- package/dist/svelte/theme-css.js +257 -26
- package/dist/vue/index.cjs +3056 -0
- package/dist/vue/index.cjs.map +1 -0
- package/dist/vue/index.d.cts +675 -0
- package/dist/vue/index.d.ts +675 -0
- package/dist/vue/index.js +3014 -0
- package/dist/vue/index.js.map +1 -0
- package/package.json +24 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/vue/index.ts","../../src/vue/useDialKit.ts","../../src/store/DialStore.ts","../../src/vue/directives/dialkit.ts","../../src/vue/components/DialRoot.ts","../../src/vue/components/Panel.ts","../../src/icons.ts","../../src/vue/components/Folder.ts","../../src/vue/components/Slider.ts","../../src/shortcut-utils.ts","../../src/vue/components/Toggle.ts","../../src/vue/components/SegmentedControl.ts","../../src/vue/components/SpringControl.ts","../../src/vue/components/SpringVisualization.ts","../../src/vue/components/TransitionControl.ts","../../src/vue/components/EasingVisualization.ts","../../src/vue/components/TextControl.ts","../../src/vue/components/SelectControl.ts","../../src/vue/components/ColorControl.ts","../../src/vue/components/PresetManager.ts","../../src/vue/components/ShortcutListener.ts","../../src/vue/components/ShortcutsMenu.ts","../../src/vue/components/ButtonGroup.ts"],"sourcesContent":["export { useDialKit } from './useDialKit';\nexport type { UseDialOptions } from './useDialKit';\nexport { vDialKit } from './directives/dialkit';\nexport type { DialKitDirectiveOptions, DialKitDirectiveValue } from './directives/dialkit';\n\nexport { DialRoot } from './components/DialRoot';\nexport type { DialPosition, DialMode, DialTheme } from './components/DialRoot';\n\nexport { ShortcutListener, useShortcutContext, ShortcutKey } from './components/ShortcutListener';\nexport type { ShortcutState } from './components/ShortcutListener';\nexport { ShortcutsMenu } from './components/ShortcutsMenu';\n\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 { TransitionControl } from './components/TransitionControl';\nexport { EasingVisualization } from './components/EasingVisualization';\nexport { TextControl } from './components/TextControl';\nexport { SelectControl } from './components/SelectControl';\nexport { ColorControl } from './components/ColorControl';\nexport { PresetManager } from './components/PresetManager';\n\nexport { DialStore } from '../store/DialStore';\nexport type {\n SpringConfig,\n EasingConfig,\n TransitionConfig,\n ActionConfig,\n SelectConfig,\n ColorConfig,\n TextConfig,\n Preset,\n DialValue,\n DialConfig,\n ResolvedValues,\n ControlMeta,\n PanelConfig,\n ShortcutConfig,\n} from '../store/DialStore';\n","import { computed, onMounted, onUnmounted, ref, shallowRef, watch, type ComputedRef } from 'vue';\nimport { DialStore } from '../store/DialStore';\nimport type {\n ActionConfig,\n ColorConfig,\n DialConfig,\n DialValue,\n EasingConfig,\n ResolvedValues,\n SelectConfig,\n ShortcutConfig,\n SpringConfig,\n TextConfig,\n} from '../store/DialStore';\n\nexport interface UseDialOptions {\n onAction?: (action: string) => void;\n shortcuts?: Record<string, ShortcutConfig>;\n}\n\nlet dialKitInstance = 0;\n\nexport function useDialKit<T extends DialConfig>(\n name: string,\n config: T,\n options?: UseDialOptions\n): ComputedRef<ResolvedValues<T>> {\n const panelId = `${name}-${++dialKitInstance}`;\n const configRef = shallowRef(config);\n const onActionRef = ref(options?.onAction);\n const shortcutsRef = shallowRef(options?.shortcuts);\n const values = ref<Record<string, DialValue>>(DialStore.getValues(panelId));\n const mounted = ref(false);\n const serializedConfig = computed(() => JSON.stringify(config));\n const serializedShortcuts = computed(() => JSON.stringify(options?.shortcuts));\n\n let unsubscribeValues: (() => void) | undefined;\n let unsubscribeActions: (() => void) | undefined;\n\n const register = () => {\n DialStore.registerPanel(panelId, name, configRef.value, shortcutsRef.value);\n values.value = DialStore.getValues(panelId);\n\n unsubscribeValues = DialStore.subscribe(panelId, () => {\n values.value = DialStore.getValues(panelId);\n });\n\n unsubscribeActions = DialStore.subscribeActions(panelId, (action) => {\n onActionRef.value?.(action);\n });\n };\n\n watch(() => options?.onAction, (next) => {\n onActionRef.value = next;\n });\n\n watch(() => options?.shortcuts, (next) => {\n shortcutsRef.value = next;\n });\n\n watch([serializedConfig, serializedShortcuts], () => {\n configRef.value = config;\n shortcutsRef.value = options?.shortcuts;\n if (mounted.value) {\n DialStore.updatePanel(panelId, name, configRef.value, shortcutsRef.value);\n values.value = DialStore.getValues(panelId);\n }\n });\n\n onMounted(register);\n onMounted(() => {\n mounted.value = true;\n });\n\n onUnmounted(() => {\n unsubscribeValues?.();\n unsubscribeActions?.();\n DialStore.unregisterPanel(panelId);\n });\n\n return computed(() => buildResolvedValues(configRef.value, values.value, '') as ResolvedValues<T>);\n}\n\nfunction buildResolvedValues(\n config: DialConfig,\n flatValues: Record<string, DialValue>,\n prefix: string\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, configValue] of Object.entries(config)) {\n if (key === '_collapsed') continue;\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (Array.isArray(configValue) && configValue.length <= 4 && typeof configValue[0] === 'number') {\n result[key] = flatValues[path] ?? configValue[0];\n } else if (typeof configValue === 'number' || typeof configValue === 'boolean' || typeof configValue === 'string') {\n result[key] = flatValues[path] ?? configValue;\n } else if (isSpringConfig(configValue) || isEasingConfig(configValue)) {\n result[key] = flatValues[path] ?? configValue;\n } else if (isActionConfig(configValue)) {\n result[key] = flatValues[path] ?? configValue;\n } else if (isSelectConfig(configValue)) {\n const defaultValue = configValue.default ?? getFirstOptionValue(configValue.options);\n result[key] = flatValues[path] ?? defaultValue;\n } else if (isColorConfig(configValue)) {\n result[key] = flatValues[path] ?? configValue.default ?? '#000000';\n } else if (isTextConfig(configValue)) {\n result[key] = flatValues[path] ?? configValue.default ?? '';\n } else if (typeof configValue === 'object' && configValue !== null) {\n result[key] = buildResolvedValues(configValue as DialConfig, flatValues, path);\n }\n }\n\n return result;\n}\n\nfunction hasType(value: unknown, type: string): boolean {\n return typeof value === 'object' && value !== null && 'type' in value && (value as { type: string }).type === type;\n}\n\nfunction isSpringConfig(value: unknown): value is SpringConfig {\n return hasType(value, 'spring');\n}\n\nfunction isEasingConfig(value: unknown): value is EasingConfig {\n return hasType(value, 'easing');\n}\n\nfunction isActionConfig(value: unknown): value is ActionConfig {\n return hasType(value, 'action');\n}\n\nfunction isSelectConfig(value: unknown): value is SelectConfig {\n return hasType(value, 'select') && 'options' in (value as object) && Array.isArray((value as SelectConfig).options);\n}\n\nfunction isColorConfig(value: unknown): value is ColorConfig {\n return hasType(value, 'color');\n}\n\nfunction isTextConfig(value: unknown): value is TextConfig {\n return hasType(value, 'text');\n}\n\nfunction getFirstOptionValue(options: (string | { value: string; label: string })[]): string {\n const first = options[0];\n return typeof first === 'string' ? first : first.value;\n}\n","// Lightweight state store with subscriptions for dialkit\n\nexport type SpringConfig = {\n type: 'spring';\n stiffness?: number;\n damping?: number;\n mass?: number;\n visualDuration?: number;\n bounce?: number;\n};\n\nexport type EasingConfig = {\n type: 'easing';\n duration: number;\n ease: [number, number, number, number];\n};\n\nexport type TransitionConfig = SpringConfig | EasingConfig;\n\nexport type ActionConfig = {\n type: 'action';\n label?: string;\n};\n\nexport type SelectConfig = {\n type: 'select';\n options: (string | { value: string; label: string })[];\n default?: string;\n};\n\nexport type ColorConfig = {\n type: 'color';\n default?: string;\n};\n\nexport type TextConfig = {\n type: 'text';\n default?: string;\n placeholder?: string;\n};\n\nexport type DialValue = number | boolean | string | SpringConfig | EasingConfig | ActionConfig | SelectConfig | ColorConfig | TextConfig;\n\nexport type DialConfig = {\n [key: string]: DialValue | [number, number, number, number?] | DialConfig;\n};\n\nexport type ResolvedValues<T extends DialConfig> = {\n [K in keyof T]: T[K] extends [number, number, number, number?]\n ? number\n : T[K] extends SpringConfig\n ? TransitionConfig\n : T[K] extends EasingConfig\n ? TransitionConfig\n : T[K] extends SelectConfig\n ? string\n : T[K] extends ColorConfig\n ? string\n : T[K] extends TextConfig\n ? string\n : T[K] extends DialConfig\n ? ResolvedValues<T[K]>\n : T[K];\n};\n\nexport type ShortcutMode = 'fine' | 'normal' | 'coarse';\nexport type ShortcutInteraction = 'scroll' | 'drag' | 'move' | 'scroll-only';\n\nexport type ShortcutConfig = {\n key?: string;\n modifier?: 'alt' | 'shift' | 'meta';\n mode?: ShortcutMode;\n interaction?: ShortcutInteraction;\n};\n\nexport type ControlMeta = {\n type: 'slider' | 'toggle' | 'spring' | 'transition' | 'folder' | 'action' | 'select' | 'color' | 'text';\n path: string;\n label: string;\n min?: number;\n max?: number;\n step?: number;\n children?: ControlMeta[];\n defaultOpen?: boolean;\n options?: (string | { value: string; label: string })[];\n placeholder?: string;\n shortcut?: ShortcutConfig;\n};\n\nexport type PanelConfig = {\n id: string;\n name: string;\n controls: ControlMeta[];\n values: Record<string, DialValue>;\n shortcuts: Record<string, ShortcutConfig>;\n};\n\ntype Listener = () => void;\ntype ActionListener = (action: string) => void;\n\nexport type Preset = {\n id: string;\n name: string;\n values: Record<string, DialValue>;\n};\n\n// Stable empty object for unregistered panels (React 19 useSyncExternalStore requirement)\nconst EMPTY_VALUES: Record<string, DialValue> = Object.freeze({});\n\nclass DialStoreClass {\n private panels: Map<string, PanelConfig> = new Map();\n private listeners: Map<string, Set<Listener>> = new Map();\n private globalListeners: Set<Listener> = new Set();\n private snapshots: Map<string, Record<string, DialValue>> = new Map();\n private actionListeners: Map<string, Set<ActionListener>> = new Map();\n private presets: Map<string, Preset[]> = new Map();\n private activePreset: Map<string, string | null> = new Map();\n private baseValues: Map<string, Record<string, DialValue>> = new Map();\n\n registerPanel(id: string, name: string, config: DialConfig, shortcuts?: Record<string, ShortcutConfig>): void {\n const controls = this.parseConfig(config, '', shortcuts);\n const values = this.flattenValues(config, '');\n\n // Set initial transition modes based on config types\n this.initTransitionModes(config, '', values);\n\n this.panels.set(id, { id, name, controls, values, shortcuts: shortcuts ?? {} });\n this.snapshots.set(id, { ...values });\n this.baseValues.set(id, { ...values });\n this.notifyGlobal();\n }\n\n updatePanel(id: string, name: string, config: DialConfig, shortcuts?: Record<string, ShortcutConfig>): void {\n const existing = this.panels.get(id);\n if (!existing) {\n this.registerPanel(id, name, config, shortcuts);\n return;\n }\n\n const controls = this.parseConfig(config, '', shortcuts);\n const controlsByPath = this.mapControlsByPath(controls);\n const defaultValues = this.flattenValues(config, '');\n const nextValues: Record<string, DialValue> = {};\n\n for (const [path, defaultValue] of Object.entries(defaultValues)) {\n nextValues[path] = this.normalizePreservedValue(\n existing.values[path],\n defaultValue,\n controlsByPath.get(path)\n );\n }\n\n // Set mode defaults for new transition controls first.\n this.initTransitionModes(config, '', nextValues);\n\n for (const [path, mode] of Object.entries(existing.values)) {\n if (!path.endsWith('.__mode')) {\n continue;\n }\n\n const transitionPath = path.slice(0, -'__mode'.length - 1);\n const transitionControl = controlsByPath.get(transitionPath);\n if (transitionControl?.type === 'transition') {\n nextValues[path] = mode;\n }\n }\n\n const nextPanel: PanelConfig = { id, name, controls, values: nextValues, shortcuts: shortcuts ?? existing.shortcuts };\n this.panels.set(id, nextPanel);\n this.snapshots.set(id, { ...nextValues });\n\n const previousBaseValues = this.baseValues.get(id) ?? {};\n const nextBaseValues: Record<string, DialValue> = {};\n for (const [path, defaultValue] of Object.entries(defaultValues)) {\n nextBaseValues[path] = this.normalizePreservedValue(\n previousBaseValues[path],\n defaultValue,\n controlsByPath.get(path)\n );\n }\n\n for (const [path, value] of Object.entries(nextValues)) {\n if (path.endsWith('.__mode')) {\n nextBaseValues[path] = value;\n }\n }\n\n this.baseValues.set(id, nextBaseValues);\n\n this.notify(id);\n this.notifyGlobal();\n }\n\n unregisterPanel(id: string): void {\n this.panels.delete(id);\n this.listeners.delete(id);\n this.snapshots.delete(id);\n this.actionListeners.delete(id);\n this.baseValues.delete(id);\n this.notifyGlobal();\n }\n\n updateValue(panelId: string, path: string, value: DialValue): void {\n const panel = this.panels.get(panelId);\n if (!panel) return;\n\n panel.values[path] = value;\n\n // Auto-save to active preset or base values\n const activeId = this.activePreset.get(panelId);\n if (activeId) {\n const presets = this.presets.get(panelId) ?? [];\n const preset = presets.find(p => p.id === activeId);\n if (preset) preset.values[path] = value;\n } else {\n const base = this.baseValues.get(panelId);\n if (base) base[path] = value;\n }\n\n // Create a new snapshot reference so useSyncExternalStore detects the change\n this.snapshots.set(panelId, { ...panel.values });\n this.notify(panelId);\n }\n\n updateSpringMode(panelId: string, path: string, mode: 'simple' | 'advanced'): void {\n this.updateTransitionMode(panelId, path, mode);\n }\n\n getSpringMode(panelId: string, path: string): 'simple' | 'advanced' {\n const mode = this.getTransitionMode(panelId, path);\n if (mode === 'easing') return 'simple';\n return mode;\n }\n\n updateTransitionMode(panelId: string, path: string, mode: 'easing' | 'simple' | 'advanced'): void {\n const panel = this.panels.get(panelId);\n if (!panel) return;\n\n panel.values[`${path}.__mode`] = mode;\n this.snapshots.set(panelId, { ...panel.values });\n this.notify(panelId);\n }\n\n getTransitionMode(panelId: string, path: string): 'easing' | 'simple' | 'advanced' {\n const panel = this.panels.get(panelId);\n if (!panel) return 'simple';\n return (panel.values[`${path}.__mode`] as 'easing' | 'simple' | 'advanced') || 'simple';\n }\n\n getValue(panelId: string, path: string): DialValue | undefined {\n const panel = this.panels.get(panelId);\n return panel?.values[path];\n }\n\n getValues(panelId: string): Record<string, DialValue> {\n // Return the snapshot for useSyncExternalStore compatibility\n // Use stable EMPTY_VALUES to avoid infinite loop in React 19\n return this.snapshots.get(panelId) ?? EMPTY_VALUES;\n }\n\n getPanels(): PanelConfig[] {\n return Array.from(this.panels.values());\n }\n\n getPanel(id: string): PanelConfig | undefined {\n return this.panels.get(id);\n }\n\n subscribe(panelId: string, listener: Listener): () => void {\n if (!this.listeners.has(panelId)) {\n this.listeners.set(panelId, new Set());\n }\n this.listeners.get(panelId)!.add(listener);\n\n return () => {\n this.listeners.get(panelId)?.delete(listener);\n };\n }\n\n subscribeGlobal(listener: Listener): () => void {\n this.globalListeners.add(listener);\n return () => this.globalListeners.delete(listener);\n }\n\n subscribeActions(panelId: string, listener: ActionListener): () => void {\n if (!this.actionListeners.has(panelId)) {\n this.actionListeners.set(panelId, new Set());\n }\n this.actionListeners.get(panelId)!.add(listener);\n\n return () => {\n this.actionListeners.get(panelId)?.delete(listener);\n };\n }\n\n triggerAction(panelId: string, path: string): void {\n this.actionListeners.get(panelId)?.forEach(fn => fn(path));\n }\n\n savePreset(panelId: string, name: string): string {\n const panel = this.panels.get(panelId);\n if (!panel) throw new Error(`Panel ${panelId} not found`);\n\n const id = `preset-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n const preset: Preset = {\n id,\n name,\n values: { ...panel.values },\n };\n\n const existing = this.presets.get(panelId) ?? [];\n this.presets.set(panelId, [...existing, preset]);\n this.activePreset.set(panelId, id);\n\n // Force re-render by creating new snapshot reference\n this.snapshots.set(panelId, { ...panel.values });\n this.notify(panelId);\n\n return id;\n }\n\n loadPreset(panelId: string, presetId: string): void {\n const panel = this.panels.get(panelId);\n if (!panel) return;\n\n const presets = this.presets.get(panelId) ?? [];\n const preset = presets.find(p => p.id === presetId);\n if (!preset) return;\n\n // Apply preset values\n panel.values = { ...preset.values };\n this.snapshots.set(panelId, { ...panel.values });\n this.activePreset.set(panelId, presetId);\n this.notify(panelId);\n }\n\n deletePreset(panelId: string, presetId: string): void {\n const presets = this.presets.get(panelId) ?? [];\n this.presets.set(panelId, presets.filter(p => p.id !== presetId));\n\n // Clear active if deleted\n if (this.activePreset.get(panelId) === presetId) {\n this.activePreset.set(panelId, null);\n }\n\n // Force re-render by creating new snapshot reference\n const panel = this.panels.get(panelId);\n if (panel) {\n this.snapshots.set(panelId, { ...panel.values });\n }\n this.notify(panelId);\n }\n\n getPresets(panelId: string): Preset[] {\n return this.presets.get(panelId) ?? [];\n }\n\n getActivePresetId(panelId: string): string | null {\n return this.activePreset.get(panelId) ?? null;\n }\n\n clearActivePreset(panelId: string): void {\n const panel = this.panels.get(panelId);\n const base = this.baseValues.get(panelId);\n if (panel && base) {\n panel.values = { ...base };\n this.snapshots.set(panelId, { ...panel.values });\n }\n this.activePreset.set(panelId, null);\n this.notify(panelId);\n }\n\n resolveShortcutTarget(key: string, modifier?: 'alt' | 'shift' | 'meta'): {\n panelId: string;\n path: string;\n control: ControlMeta;\n } | null {\n for (const panel of this.panels.values()) {\n for (const [path, shortcut] of Object.entries(panel.shortcuts)) {\n if (!shortcut.key) continue; // skip keyless shortcuts\n if (shortcut.key.toLowerCase() !== key.toLowerCase()) continue;\n const scMod = shortcut.modifier ?? undefined;\n if (scMod !== modifier) continue;\n\n const control = this.findControlByPath(panel.controls, path);\n if (control) {\n return { panelId: panel.id, path, control };\n }\n }\n }\n return null;\n }\n\n resolveScrollOnlyTargets(): Array<{\n panelId: string;\n path: string;\n control: ControlMeta;\n shortcut: ShortcutConfig;\n }> {\n const results: Array<{ panelId: string; path: string; control: ControlMeta; shortcut: ShortcutConfig }> = [];\n for (const panel of this.panels.values()) {\n for (const [path, shortcut] of Object.entries(panel.shortcuts)) {\n if ((shortcut.interaction ?? 'scroll') !== 'scroll-only') continue;\n const control = this.findControlByPath(panel.controls, path);\n if (control) {\n results.push({ panelId: panel.id, path, control, shortcut });\n }\n }\n }\n return results;\n }\n\n private findControlByPath(controls: ControlMeta[], path: string): ControlMeta | null {\n for (const control of controls) {\n if (control.path === path) return control;\n if (control.type === 'folder' && control.children) {\n const found = this.findControlByPath(control.children, path);\n if (found) return found;\n }\n }\n return null;\n }\n\n private notify(panelId: string): void {\n this.listeners.get(panelId)?.forEach(fn => fn());\n }\n\n private notifyGlobal(): void {\n this.globalListeners.forEach(fn => fn());\n }\n\n private initTransitionModes(config: DialConfig, prefix: string, values: Record<string, DialValue>): void {\n for (const [key, value] of Object.entries(config)) {\n if (key === '_collapsed') continue;\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (this.isEasingConfig(value)) {\n values[`${path}.__mode`] = 'easing';\n } else if (this.isSpringConfig(value)) {\n // Detect physics mode from config\n const hasPhysics = value.stiffness !== undefined || value.damping !== undefined || value.mass !== undefined;\n const hasTime = value.visualDuration !== undefined || value.bounce !== undefined;\n values[`${path}.__mode`] = hasPhysics && !hasTime ? 'advanced' : 'simple';\n } else if (typeof value === 'object' && value !== null && !Array.isArray(value) && !this.isActionConfig(value) && !this.isSelectConfig(value) && !this.isColorConfig(value) && !this.isTextConfig(value)) {\n this.initTransitionModes(value as DialConfig, path, values);\n }\n }\n }\n\n private parseConfig(config: DialConfig, prefix: string, shortcuts?: Record<string, ShortcutConfig>): ControlMeta[] {\n const controls: ControlMeta[] = [];\n\n for (const [key, value] of Object.entries(config)) {\n if (key === '_collapsed') continue;\n const path = prefix ? `${prefix}.${key}` : key;\n const label = this.formatLabel(key);\n const shortcut = shortcuts?.[path];\n\n if (Array.isArray(value) && value.length <= 4 && typeof value[0] === 'number') {\n // Range tuple: [default, min, max]\n controls.push({\n type: 'slider',\n path,\n label,\n min: value[1],\n max: value[2],\n step: value[3] ?? this.inferStep(value[1], value[2]),\n shortcut,\n });\n } else if (typeof value === 'number') {\n // Single number - auto-infer range\n const { min, max, step } = this.inferRange(value);\n controls.push({ type: 'slider', path, label, min, max, step, shortcut });\n } else if (typeof value === 'boolean') {\n controls.push({ type: 'toggle', path, label, shortcut });\n } else if (this.isSpringConfig(value) || this.isEasingConfig(value)) {\n controls.push({ type: 'transition', path, label });\n } else if (this.isActionConfig(value)) {\n controls.push({ type: 'action', path, label: (value as ActionConfig).label || label });\n } else if (this.isSelectConfig(value)) {\n controls.push({ type: 'select', path, label, options: value.options });\n } else if (this.isColorConfig(value)) {\n controls.push({ type: 'color', path, label });\n } else if (this.isTextConfig(value)) {\n controls.push({ type: 'text', path, label, placeholder: value.placeholder });\n } else if (typeof value === 'string') {\n // Auto-detect: hex color vs text\n if (this.isHexColor(value)) {\n controls.push({ type: 'color', path, label });\n } else {\n controls.push({ type: 'text', path, label });\n }\n } else if (typeof value === 'object' && value !== null) {\n // Nested object becomes a folder\n const folderConfig = value as DialConfig;\n const defaultOpen = '_collapsed' in folderConfig ? !(folderConfig._collapsed as boolean) : true;\n controls.push({\n type: 'folder',\n path,\n label,\n defaultOpen,\n children: this.parseConfig(folderConfig, path, shortcuts),\n });\n }\n }\n\n return controls;\n }\n\n private flattenValues(config: DialConfig, prefix: string): Record<string, DialValue> {\n const values: Record<string, DialValue> = {};\n\n for (const [key, value] of Object.entries(config)) {\n if (key === '_collapsed') continue;\n const path = prefix ? `${prefix}.${key}` : key;\n\n if (Array.isArray(value) && value.length <= 4 && typeof value[0] === 'number') {\n values[path] = value[0]; // Default value\n } else if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'string') {\n values[path] = value;\n } else if (this.isSpringConfig(value) || this.isEasingConfig(value)) {\n values[path] = value;\n } else if (this.isActionConfig(value)) {\n // Actions don't need stored values - they're just triggers\n values[path] = value;\n } else if (this.isSelectConfig(value)) {\n // Use default or first option's value\n const firstOption = value.options[0];\n const firstValue = typeof firstOption === 'string' ? firstOption : firstOption.value;\n values[path] = value.default ?? firstValue;\n } else if (this.isColorConfig(value)) {\n values[path] = value.default ?? '#000000';\n } else if (this.isTextConfig(value)) {\n values[path] = value.default ?? '';\n } else if (typeof value === 'object' && value !== null) {\n Object.assign(values, this.flattenValues(value as DialConfig, path));\n }\n }\n\n return values;\n }\n\n private isSpringConfig(value: unknown): value is SpringConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as SpringConfig).type === 'spring'\n );\n }\n\n private isEasingConfig(value: unknown): value is EasingConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as EasingConfig).type === 'easing'\n );\n }\n\n private isActionConfig(value: unknown): value is ActionConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as ActionConfig).type === 'action'\n );\n }\n\n private isSelectConfig(value: unknown): value is SelectConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as SelectConfig).type === 'select' &&\n 'options' in value &&\n Array.isArray((value as SelectConfig).options)\n );\n }\n\n private isColorConfig(value: unknown): value is ColorConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as ColorConfig).type === 'color'\n );\n }\n\n private isTextConfig(value: unknown): value is TextConfig {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n (value as TextConfig).type === 'text'\n );\n }\n\n private isHexColor(value: string): boolean {\n return /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(value);\n }\n\n private formatLabel(key: string): string {\n // Convert camelCase to Title Case\n return key\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, str => str.toUpperCase())\n .trim();\n }\n\n private inferRange(value: number): { min: number; max: number; step: number } {\n // Infer reasonable range based on value\n if (value >= 0 && value <= 1) {\n return { min: 0, max: 1, step: 0.01 };\n } else if (value >= 0 && value <= 10) {\n return { min: 0, max: value * 3 || 10, step: 0.1 };\n } else if (value >= 0 && value <= 100) {\n return { min: 0, max: value * 3 || 100, step: 1 };\n } else if (value >= 0) {\n return { min: 0, max: value * 3 || 1000, step: 10 };\n } else {\n return { min: value * 3, max: -value * 3, step: 1 };\n }\n }\n\n private inferStep(min: number, max: number): number {\n const range = max - min;\n if (range <= 1) return 0.01;\n if (range <= 10) return 0.1;\n if (range <= 100) return 1;\n return 10;\n }\n\n private normalizePreservedValue(\n existingValue: DialValue | undefined,\n defaultValue: DialValue,\n control: ControlMeta | undefined\n ): DialValue {\n if (existingValue === undefined || !control) {\n return defaultValue;\n }\n\n switch (control.type) {\n case 'slider': {\n if (typeof existingValue !== 'number' || typeof defaultValue !== 'number') {\n return defaultValue;\n }\n\n const min = control.min ?? Number.NEGATIVE_INFINITY;\n const max = control.max ?? Number.POSITIVE_INFINITY;\n const clamped = Math.min(max, Math.max(min, existingValue));\n\n if (typeof control.step !== 'number' || control.step <= 0) {\n return clamped;\n }\n\n return this.roundToStep(clamped, min, max, control.step);\n }\n case 'toggle':\n return typeof existingValue === 'boolean' ? existingValue : defaultValue;\n case 'select': {\n if (typeof existingValue !== 'string') {\n return defaultValue;\n }\n\n const options = control.options ?? [];\n const validValues = new Set(options.map((option) => (typeof option === 'string' ? option : option.value)));\n return validValues.has(existingValue) ? existingValue : defaultValue;\n }\n case 'color':\n case 'text':\n return typeof existingValue === 'string' ? existingValue : defaultValue;\n case 'transition':\n if (this.isSpringConfig(defaultValue)) {\n return this.isSpringConfig(existingValue) ? existingValue : defaultValue;\n }\n if (this.isEasingConfig(defaultValue)) {\n return this.isEasingConfig(existingValue) ? existingValue : defaultValue;\n }\n return defaultValue;\n case 'action':\n return defaultValue;\n default:\n return defaultValue;\n }\n }\n\n private roundToStep(value: number, min: number, max: number, step: number): number {\n const snapped = min + Math.round((value - min) / step) * step;\n const clamped = Math.min(max, Math.max(min, snapped));\n const precision = this.stepPrecision(step);\n return Number(clamped.toFixed(precision));\n }\n\n private stepPrecision(step: number): number {\n const text = String(step);\n const decimalIndex = text.indexOf('.');\n return decimalIndex === -1 ? 0 : text.length - decimalIndex - 1;\n }\n\n private mapControlsByPath(controls: ControlMeta[]): Map<string, ControlMeta> {\n const map = new Map<string, ControlMeta>();\n\n const visit = (nodes: ControlMeta[]) => {\n for (const node of nodes) {\n if (node.type === 'folder' && node.children) {\n visit(node.children);\n continue;\n }\n\n map.set(node.path, node);\n }\n };\n\n visit(controls);\n return map;\n }\n\n}\n\n// Singleton instance\nexport const DialStore = new DialStoreClass();\n","import {\n createApp,\n defineComponent,\n h,\n shallowRef,\n type App,\n type ObjectDirective,\n type ShallowRef,\n} from 'vue';\nimport { DialRoot, type DialMode, type DialPosition } from '../components/DialRoot';\n\nexport interface DialKitDirectiveOptions {\n position?: DialPosition;\n defaultOpen?: boolean;\n mode?: DialMode;\n}\n\nexport type DialKitDirectiveValue = DialMode | DialKitDirectiveOptions | undefined;\n\ntype DirectiveState = {\n app: App;\n host: HTMLDivElement;\n props: ShallowRef<DialKitDirectiveOptions>;\n};\n\nconst states = new WeakMap<HTMLElement, DirectiveState>();\n\nfunction normalizeDirectiveValue(value: DialKitDirectiveValue): DialKitDirectiveOptions {\n if (!value) return {};\n if (value === 'inline' || value === 'popover') {\n return { mode: value };\n }\n return value;\n}\n\nfunction mountDialRoot(el: HTMLElement, value: DialKitDirectiveValue) {\n if (typeof window === 'undefined') return;\n\n const host = document.createElement('div');\n el.appendChild(host);\n\n const props = shallowRef<DialKitDirectiveOptions>(normalizeDirectiveValue(value));\n const RootHost = defineComponent({\n name: 'DialKitDirectiveHost',\n setup() {\n return () => h(DialRoot, props.value);\n },\n });\n\n const app = createApp(RootHost);\n app.mount(host);\n\n states.set(el, { app, host, props });\n}\n\nfunction unmountDialRoot(el: HTMLElement) {\n const state = states.get(el);\n if (!state) return;\n\n state.app.unmount();\n state.host.remove();\n states.delete(el);\n}\n\nexport const vDialKit: ObjectDirective<HTMLElement, DialKitDirectiveValue> = {\n mounted(el, binding) {\n mountDialRoot(el, binding.value);\n },\n updated(el, binding) {\n const state = states.get(el);\n if (!state) {\n mountDialRoot(el, binding.value);\n return;\n }\n state.props.value = normalizeDirectiveValue(binding.value);\n },\n beforeUnmount(el) {\n unmountDialRoot(el);\n },\n};\n","import { defineComponent, h, onMounted, onUnmounted, ref, Teleport } from 'vue';\nimport { DialStore } from '../../store/DialStore';\nimport type { PanelConfig } from '../../store/DialStore';\nimport { Panel } from './Panel';\nimport { ShortcutListener } from './ShortcutListener';\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\nexport const DialRoot = defineComponent({\n name: 'DialKitDialRoot',\n props: {\n position: {\n type: String as () => DialPosition,\n default: 'top-right',\n },\n defaultOpen: {\n type: Boolean,\n default: true,\n },\n mode: {\n type: String as () => DialMode,\n default: 'popover',\n },\n theme: {\n type: String as () => DialTheme,\n default: 'system',\n },\n productionEnabled: {\n type: Boolean,\n default: isDevDefault,\n },\n },\n setup(props) {\n const panels = ref<PanelConfig[]>([]);\n const mounted = ref(false);\n let unsubscribe: (() => void) | undefined;\n\n onMounted(() => {\n mounted.value = true;\n panels.value = DialStore.getPanels();\n unsubscribe = DialStore.subscribeGlobal(() => {\n panels.value = DialStore.getPanels();\n });\n });\n\n onUnmounted(() => {\n unsubscribe?.();\n });\n\n const renderContent = () => h(ShortcutListener, null, {\n default: () => h('div', { class: 'dialkit-root', 'data-mode': props.mode, 'data-theme': props.theme }, [\n h('div', {\n class: 'dialkit-panel',\n 'data-position': props.mode === 'inline' ? undefined : props.position,\n 'data-mode': props.mode,\n }, panels.value.map((panel) => h(Panel, {\n key: panel.id,\n panel,\n defaultOpen: props.mode === 'inline' || props.defaultOpen,\n inline: props.mode === 'inline',\n }))),\n ]),\n });\n\n return () => {\n if (!props.productionEnabled || !mounted.value || typeof window === 'undefined' || panels.value.length === 0) {\n return null;\n }\n\n if (props.mode === 'inline') {\n return renderContent();\n }\n\n return h(Teleport, { to: 'body' }, renderContent());\n };\n },\n});\n","import { Fragment, defineComponent, h, onMounted, onUnmounted, ref, type PropType } from 'vue';\nimport { AnimatePresence, motion } from 'motion-v';\nimport { ICON_ADD_PRESET, ICON_CHECK, ICON_CLIPBOARD } from '../../icons';\nimport { DialStore } from '../../store/DialStore';\nimport type { ControlMeta, DialValue, PanelConfig, SpringConfig, TransitionConfig } from '../../store/DialStore';\nimport { Folder } from './Folder';\nimport { Slider } from './Slider';\nimport { Toggle } from './Toggle';\nimport { SpringControl } from './SpringControl';\nimport { TransitionControl } from './TransitionControl';\nimport { TextControl } from './TextControl';\nimport { SelectControl } from './SelectControl';\nimport { ColorControl } from './ColorControl';\nimport { PresetManager } from './PresetManager';\nimport { useShortcutContext } from './ShortcutListener';\nimport { ShortcutsMenu } from './ShortcutsMenu';\n\nexport const Panel = defineComponent({\n name: 'DialKitPanel',\n props: {\n panel: {\n type: Object as PropType<PanelConfig>,\n required: true,\n },\n defaultOpen: {\n type: Boolean,\n default: true,\n },\n inline: {\n type: Boolean,\n default: false,\n },\n },\n setup(props) {\n const shortcutCtx = useShortcutContext();\n const values = ref<Record<string, DialValue>>(DialStore.getValues(props.panel.id));\n const presets = ref(DialStore.getPresets(props.panel.id));\n const activePresetId = ref<string | null>(DialStore.getActivePresetId(props.panel.id));\n const copied = ref(false);\n const hasShortcuts = () => Object.keys(DialStore.getPanel(props.panel.id)?.shortcuts ?? {}).length > 0;\n\n let unsubscribe: (() => void) | undefined;\n let copiedTimeout: ReturnType<typeof window.setTimeout> | null = null;\n\n onMounted(() => {\n unsubscribe = DialStore.subscribe(props.panel.id, () => {\n values.value = DialStore.getValues(props.panel.id);\n presets.value = DialStore.getPresets(props.panel.id);\n activePresetId.value = DialStore.getActivePresetId(props.panel.id);\n });\n });\n\n onUnmounted(() => {\n unsubscribe?.();\n if (copiedTimeout) {\n window.clearTimeout(copiedTimeout);\n }\n });\n\n const handleAddPreset = () => {\n const nextNum = presets.value.length + 2;\n DialStore.savePreset(props.panel.id, `Version ${nextNum}`);\n };\n\n const handleCopy = () => {\n const json = JSON.stringify(values.value, null, 2);\n const instruction = `Update the useDialKit configuration for \"${props.panel.name}\" with these values:\\n\\n\\`\\`\\`json\\n${json}\\n\\`\\`\\`\\n\\nApply these values as the new defaults in the useDialKit call.`;\n\n try {\n if (navigator.clipboard?.writeText) {\n void navigator.clipboard.writeText(instruction).catch(() => undefined);\n }\n } catch {\n // Ignore clipboard errors; the UI confirmation should still run.\n }\n\n copied.value = true;\n if (copiedTimeout) {\n window.clearTimeout(copiedTimeout);\n }\n copiedTimeout = window.setTimeout(() => {\n copied.value = false;\n }, 1500);\n };\n\n const renderControl = (control: ControlMeta) => {\n const value = values.value[control.path];\n\n switch (control.type) {\n case 'slider':\n return h(Slider, {\n key: control.path,\n label: control.label,\n value: value as number,\n min: control.min,\n max: control.max,\n step: control.step,\n shortcut: control.shortcut,\n shortcutActive: shortcutCtx.activePanelId.value === props.panel.id && shortcutCtx.activePath.value === control.path,\n onChange: (next: number) => DialStore.updateValue(props.panel.id, control.path, next),\n });\n case 'toggle':\n return h(Toggle, {\n key: control.path,\n label: control.label,\n checked: value as boolean,\n shortcut: control.shortcut,\n shortcutActive: shortcutCtx.activePanelId.value === props.panel.id && shortcutCtx.activePath.value === control.path,\n onChange: (next: boolean) => DialStore.updateValue(props.panel.id, control.path, next),\n });\n case 'spring':\n return h(SpringControl, {\n key: control.path,\n panelId: props.panel.id,\n path: control.path,\n label: control.label,\n spring: value as SpringConfig,\n onChange: (next: SpringConfig) => DialStore.updateValue(props.panel.id, control.path, next),\n });\n case 'transition':\n return h(TransitionControl, {\n key: control.path,\n panelId: props.panel.id,\n path: control.path,\n label: control.label,\n value: value as TransitionConfig,\n onChange: (next: TransitionConfig) => DialStore.updateValue(props.panel.id, control.path, next),\n });\n case 'folder':\n return h(Folder, {\n key: control.path,\n title: control.label,\n defaultOpen: control.defaultOpen ?? true,\n }, {\n default: () => (control.children ?? []).map(renderControl),\n });\n case 'text':\n return h(TextControl, {\n key: control.path,\n label: control.label,\n value: value as string,\n placeholder: control.placeholder,\n onChange: (next: string) => DialStore.updateValue(props.panel.id, control.path, next),\n });\n case 'select':\n return h(SelectControl, {\n key: control.path,\n label: control.label,\n value: value as string,\n options: control.options ?? [],\n onChange: (next: string) => DialStore.updateValue(props.panel.id, control.path, next),\n });\n case 'color':\n return h(ColorControl, {\n key: control.path,\n label: control.label,\n value: value as string,\n onChange: (next: string) => DialStore.updateValue(props.panel.id, control.path, next),\n });\n case 'action':\n return h('button', {\n key: control.path,\n class: 'dialkit-button',\n onClick: () => DialStore.triggerAction(props.panel.id, control.path),\n }, control.label);\n default:\n return null;\n }\n };\n\n return () => {\n const toolbarNode = h(Fragment, null, [\n h(motion.button, {\n class: 'dialkit-toolbar-add',\n onClick: handleAddPreset,\n title: 'Add preset',\n whilePress: { scale: 0.9 },\n transition: { type: 'spring', visualDuration: 0.15, bounce: 0.3 },\n }, [\n h('svg', {\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 }, ICON_ADD_PRESET.map((d) => h('path', { d }))),\n ]),\n h(PresetManager, {\n panelId: props.panel.id,\n presets: presets.value,\n activePresetId: activePresetId.value,\n }),\n h(motion.button, {\n class: 'dialkit-toolbar-copy',\n onClick: handleCopy,\n title: 'Copy parameters',\n whilePress: { scale: 0.95 },\n transition: { type: 'spring', visualDuration: 0.15, bounce: 0.3 },\n }, [\n h('span', { class: 'dialkit-toolbar-copy-icon-wrap' }, [\n h('span', {\n class: 'dialkit-toolbar-copy-icon',\n style: { opacity: copied.value ? 0 : 1, transition: 'opacity 120ms ease' },\n }, [\n h('svg', {\n viewBox: '0 0 24 24',\n fill: 'none',\n width: 16,\n height: 16,\n }, [\n h('path', {\n d: ICON_CLIPBOARD.board,\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linejoin': 'round',\n }),\n h('path', {\n d: ICON_CLIPBOARD.sparkle,\n fill: 'currentColor',\n }),\n h('path', {\n d: ICON_CLIPBOARD.body,\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }),\n ]),\n ]),\n h(AnimatePresence, { initial: false, mode: 'popLayout' }, {\n default: () => copied.value\n ? [h(motion.span, {\n key: 'check',\n class: 'dialkit-toolbar-copy-icon',\n initial: { scale: 0.5, opacity: 0 },\n animate: { scale: 1, opacity: 1 },\n exit: { scale: 0.5, opacity: 0 },\n transition: { type: 'spring', visualDuration: 0.3, bounce: 0.2 },\n }, [\n h('svg', {\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n width: 16,\n height: 16,\n }, [h('path', { d: ICON_CHECK })]),\n ])]\n : [],\n }),\n ]),\n 'Copy',\n ]),\n ]);\n\n return h('div', { class: 'dialkit-panel-wrapper' }, [\n h(Folder, {\n title: props.panel.name,\n defaultOpen: props.defaultOpen,\n isRoot: true,\n inline: props.inline,\n toolbar: () => toolbarNode,\n }, {\n default: () => props.panel.controls.map(renderControl),\n }),\n ]);\n };\n },\n});\n","// Shared SVG icon geometry — single source of truth across all framework adapters.\n\nexport const ICON_CHEVRON = 'M6 9.5L12 15.5L18 9.5';\n\nexport const ICON_CHECK = 'M5 12.75L10 19L19 5';\n\nexport const ICON_CLIPBOARD = {\n board: 'M8 6C8 4.34315 9.34315 3 11 3H13C14.6569 3 16 4.34315 16 6V7H8V6Z',\n sparkle: 'M19.2405 16.1852L18.5436 14.3733C18.4571 14.1484 18.241 14 18 14C17.759 14 17.5429 14.1484 17.4564 14.3733L16.7595 16.1852C16.658 16.4493 16.4493 16.658 16.1852 16.7595L14.3733 17.4564C14.1484 17.5429 14 17.759 14 18C14 18.241 14.1484 18.4571 14.3733 18.5436L16.1852 19.2405C16.4493 19.342 16.658 19.5507 16.7595 19.8148L17.4564 21.6267C17.5429 21.8516 17.759 22 18 22C18.241 22 18.4571 21.8516 18.5436 21.6267L19.2405 19.8148C19.342 19.5507 19.5507 19.342 19.8148 19.2405L21.6267 18.5436C21.8516 18.4571 22 18.241 22 18C22 17.759 21.8516 17.5429 21.6267 17.4564L19.8148 16.7595C19.5507 16.658 19.342 16.4493 19.2405 16.1852Z',\n body: 'M16 5H17C18.6569 5 20 6.34315 20 8V11M8 5H7C5.34315 5 4 6.34315 4 8V18C4 19.6569 5.34315 21 7 21H12',\n};\n\nexport const ICON_ADD_PRESET = [\n 'M4 6H20',\n 'M4 12H10',\n 'M15 15L21 15',\n 'M18 12V18',\n 'M4 18H10',\n];\n\nexport const ICON_TRASH = [\n 'M5 6.5L5.80734 18.2064C5.91582 19.7794 7.22348 21 8.80023 21H15.1998C16.7765 21 18.0842 19.7794 18.1927 18.2064L19 6.5',\n 'M10 11V16',\n 'M14 11V16',\n 'M3.5 6H20.5',\n 'M8.07092 5.74621C8.42348 3.89745 10.0485 2.5 12 2.5C13.9515 2.5 15.5765 3.89745 15.9291 5.74621',\n];\n\nexport const ICON_PANEL = {\n path: 'M6.84766 11.75C6.78583 11.9899 6.75 12.2408 6.75 12.5C6.75 12.7592 6.78583 13.0101 6.84766 13.25H2C1.58579 13.25 1.25 12.9142 1.25 12.5C1.25 12.0858 1.58579 11.75 2 11.75H6.84766ZM14 11.75C14.4142 11.75 14.75 12.0858 14.75 12.5C14.75 12.9142 14.4142 13.25 14 13.25H12.6523C12.7142 13.0101 12.75 12.7592 12.75 12.5C12.75 12.2408 12.7142 11.9899 12.6523 11.75H14ZM3.09766 7.25C3.03583 7.48994 3 7.74075 3 8C3 8.25925 3.03583 8.51006 3.09766 8.75H2C1.58579 8.75 1.25 8.41421 1.25 8C1.25 7.58579 1.58579 7.25 2 7.25H3.09766ZM14 7.25C14.4142 7.25 14.75 7.58579 14.75 8C14.75 8.41421 14.4142 8.75 14 8.75H8.90234C8.96417 8.51006 9 8.25925 9 8C9 7.74075 8.96417 7.48994 8.90234 7.25H14ZM7.59766 2.75C7.53583 2.98994 7.5 3.24075 7.5 3.5C7.5 3.75925 7.53583 4.01006 7.59766 4.25H2C1.58579 4.25 1.25 3.91421 1.25 3.5C1.25 3.08579 1.58579 2.75 2 2.75H7.59766ZM14 2.75C14.4142 2.75 14.75 3.08579 14.75 3.5C14.75 3.91421 14.4142 4.25 14 4.25H13.4023C13.4642 4.01006 13.5 3.75925 13.5 3.5C13.5 3.24075 13.4642 2.98994 13.4023 2.75H14Z',\n circles: [\n { cx: '6', cy: '8', r: '0.998596' },\n { cx: '10.4999', cy: '3.5', r: '0.998657' },\n { cx: '9.75015', cy: '12.5', r: '0.997986' },\n ],\n};\n","import { defineComponent, h, onMounted, onUnmounted, ref, type PropType } from 'vue';\nimport { AnimatePresence, motion } from 'motion-v';\nimport { ICON_CHEVRON, ICON_PANEL } from '../../icons';\n\nexport const Folder = defineComponent({\n name: 'DialKitFolder',\n props: {\n title: { type: String, required: true },\n defaultOpen: { type: Boolean, default: true },\n isRoot: { type: Boolean, default: false },\n inline: { type: Boolean, default: false },\n toolbar: {\n type: null as unknown as PropType<(() => ReturnType<typeof h>) | null>,\n required: false,\n default: null,\n },\n },\n emits: ['openChange'],\n setup(props, { emit, slots }) {\n const isOpen = ref(props.defaultOpen);\n const isCollapsed = ref(!props.defaultOpen);\n const contentRef = ref<HTMLElement | null>(null);\n const contentHeight = ref<number | undefined>(undefined);\n const windowHeight = ref(typeof window !== 'undefined' ? window.innerHeight : 800);\n\n let resizeHandler: (() => void) | null = null;\n if (props.isRoot) {\n resizeHandler = () => { windowHeight.value = window.innerHeight; };\n window.addEventListener('resize', resizeHandler);\n }\n\n onUnmounted(() => {\n if (resizeHandler) window.removeEventListener('resize', resizeHandler);\n });\n\n const handleToggle = () => {\n if (props.inline && props.isRoot) return;\n const next = !isOpen.value;\n isOpen.value = next;\n isCollapsed.value = !next;\n emit('openChange', next);\n };\n\n let ro: ResizeObserver | null = null;\n\n onMounted(() => {\n if (!props.isRoot || typeof ResizeObserver === 'undefined') return;\n const el = contentRef.value;\n if (!el) return;\n\n ro = new ResizeObserver(() => {\n if (isOpen.value) {\n const next = el.offsetHeight;\n if (contentHeight.value !== next) {\n contentHeight.value = next;\n }\n }\n });\n\n ro.observe(el);\n\n if (isOpen.value) {\n contentHeight.value = el.offsetHeight;\n }\n });\n\n onUnmounted(() => {\n ro?.disconnect();\n });\n\n const renderHeader = () => h('div', {\n class: `dialkit-folder-header ${props.isRoot ? 'dialkit-panel-header' : ''}`,\n onClick: handleToggle,\n }, [\n h('div', { class: 'dialkit-folder-header-top' }, [\n props.isRoot\n ? (isOpen.value\n ? h('div', { class: 'dialkit-folder-title-row' }, [\n h('span', { class: 'dialkit-folder-title dialkit-folder-title-root' }, props.title),\n ])\n : null)\n : h('div', { class: 'dialkit-folder-title-row' }, [\n h('span', { class: 'dialkit-folder-title' }, props.title),\n ]),\n props.isRoot && !props.inline\n ? h('svg', { class: 'dialkit-panel-icon', viewBox: '0 0 16 16', fill: 'none' }, [\n h('path', {\n opacity: '0.5',\n d: ICON_PANEL.path,\n fill: 'currentColor',\n }),\n ...ICON_PANEL.circles.map((c) => h('circle', { cx: c.cx, cy: c.cy, r: c.r, fill: 'currentColor', stroke: 'currentColor', 'stroke-width': '1.25' })),\n ])\n : null,\n !props.isRoot\n ? h(motion.svg, {\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 initial: false,\n animate: { rotate: isOpen.value ? 0 : 180 },\n transition: { type: 'spring', visualDuration: 0.35, bounce: 0.15 },\n }, [h('path', { d: ICON_CHEVRON })])\n : null,\n ]),\n props.isRoot && props.toolbar && isOpen.value\n ? h('div', { class: 'dialkit-panel-toolbar', onClick: (event: Event) => event.stopPropagation() }, [props.toolbar()])\n : null,\n ]);\n\n const renderChildren = () => h('div', { class: 'dialkit-folder-inner' }, slots.default ? slots.default() : []);\n\n const renderContent = () => {\n if (props.isRoot) {\n return isOpen.value\n ? h('div', { class: 'dialkit-folder-content' }, [renderChildren()])\n : null;\n }\n\n return h(AnimatePresence, { initial: false }, {\n default: () => isOpen.value\n ? [h(motion.div, {\n key: 'dialkit-folder-content',\n class: 'dialkit-folder-content',\n initial: { height: 0, opacity: 0 },\n animate: { height: 'auto', opacity: 1 },\n exit: { height: 0, opacity: 0 },\n transition: { type: 'spring', visualDuration: 0.35, bounce: 0.1 },\n style: { clipPath: 'inset(0 -20px)' },\n }, [renderChildren()])]\n : [],\n });\n };\n\n const folderContent = () => h('div', {\n ref: props.isRoot ? contentRef : undefined,\n class: `dialkit-folder ${props.isRoot ? 'dialkit-folder-root' : ''}`,\n }, [\n renderHeader(),\n renderContent(),\n ]);\n\n return () => {\n if (props.isRoot) {\n if (props.inline) {\n return h('div', { class: 'dialkit-panel-inner dialkit-panel-inline' }, [folderContent()]);\n }\n\n const panelStyle = isOpen.value\n ? {\n width: 280,\n height: contentHeight.value !== undefined ? Math.min(contentHeight.value + 10, windowHeight.value - 32) : 'auto',\n borderRadius: 14,\n boxShadow: 'var(--dial-shadow)',\n cursor: undefined as string | undefined,\n overflowY: 'auto' as const,\n }\n : {\n width: 42,\n height: 42,\n borderRadius: 21,\n boxShadow: 'var(--dial-shadow-collapsed)',\n overflow: 'hidden',\n cursor: 'pointer',\n };\n\n return h(motion.div, {\n class: 'dialkit-panel-inner',\n style: panelStyle,\n onClick: !isOpen.value ? handleToggle : undefined,\n 'data-collapsed': String(isCollapsed.value),\n whilePress: !isOpen.value ? { scale: 0.9 } : undefined,\n transition: { type: 'spring', visualDuration: 0.15, bounce: 0.3 },\n }, [folderContent()]);\n }\n\n return folderContent();\n };\n },\n});\n","import { defineComponent, h, computed, nextTick, onMounted, onUnmounted, ref, watch, type PropType } from 'vue';\nimport { animate, motionValue } from 'motion-v';\nimport type { ShortcutConfig } from '../../store/DialStore';\nimport { decimalsForStep, roundValue, snapToDecile, formatSliderShortcut } from '../../shortcut-utils';\n\nconst CLICK_THRESHOLD = 3;\nconst DEAD_ZONE = 32;\nconst MAX_CURSOR_RANGE = 200;\nconst MAX_STRETCH = 8;\n\nexport const Slider = defineComponent({\n name: 'DialKitSlider',\n props: {\n label: { type: String, required: true },\n value: { type: Number, required: true },\n min: { type: Number, required: false },\n max: { type: Number, required: false },\n step: { type: Number, required: false },\n unit: { type: String, required: false },\n shortcut: { type: Object as PropType<ShortcutConfig>, default: undefined },\n shortcutActive: { type: Boolean, default: false },\n },\n emits: ['change'],\n setup(props, { emit }) {\n const min = computed(() => props.min ?? 0);\n const max = computed(() => props.max ?? 1);\n const step = computed(() => props.step ?? 0.01);\n\n const wrapperRef = ref<HTMLElement | null>(null);\n const trackRef = ref<HTMLElement | null>(null);\n const fillRef = ref<HTMLElement | null>(null);\n const handleRef = ref<HTMLElement | null>(null);\n const labelRef = ref<HTMLElement | null>(null);\n const valueSpanRef = ref<HTMLElement | null>(null);\n const inputRef = ref<HTMLInputElement | null>(null);\n\n const isInteracting = ref(false);\n const isDragging = ref(false);\n const isHovered = ref(false);\n const isValueHovered = ref(false);\n const isValueEditable = ref(false);\n const showInput = ref(false);\n const inputValue = ref('');\n\n const fillPercent = motionValue(((props.value - min.value) / (max.value - min.value)) * 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 percentage = computed(() => ((props.value - min.value) / (max.value - min.value)) * 100);\n const isActive = computed(() => isInteracting.value || isHovered.value);\n const displayValue = computed(() => props.value.toFixed(decimalsForStep(step.value)));\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\n let snapAnim: ReturnType<typeof animate> | null = null;\n let rubberAnim: ReturnType<typeof animate> | null = null;\n let handleOpacityAnim: ReturnType<typeof animate> | null = null;\n let handleScaleXAnim: ReturnType<typeof animate> | null = null;\n let handleScaleYAnim: ReturnType<typeof animate> | null = null;\n\n const applyFillStyles = (pct: number) => {\n if (fillRef.value) fillRef.value.style.width = `${pct}%`;\n if (handleRef.value) handleRef.value.style.left = `max(5px, calc(${pct}% - 9px))`;\n };\n\n const applyRubberStyles = (stretch: number) => {\n if (!trackRef.value) return;\n trackRef.value.style.width = `calc(100% + ${Math.abs(stretch)}px)`;\n trackRef.value.style.transform = `translateX(${stretch < 0 ? stretch : 0}px)`;\n };\n\n const applyHandleVisualStyles = () => {\n if (!handleRef.value) return;\n handleRef.value.style.opacity = String(handleOpacityMv.get());\n handleRef.value.style.transform = `translateY(-50%) scaleX(${handleScaleXMv.get()}) scaleY(${handleScaleYMv.get()})`;\n };\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.value ? wrapperRef.value.offsetWidth : wrapperRect.width;\n const pct = Math.max(0, Math.min(1, sceneX / nativeWidth));\n const rawValue = min.value + pct * (max.value - min.value);\n return Math.max(min.value, Math.min(max.value, rawValue));\n };\n\n const percentFromValue = (value: number) => ((value - min.value) / (max.value - min.value)) * 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));\n };\n\n const leftThreshold = () => {\n const HANDLE_BUFFER = 8;\n const LABEL_CSS_LEFT = 10;\n const trackWidth = wrapperRef.value?.offsetWidth;\n if (trackWidth && labelRef.value) {\n return ((LABEL_CSS_LEFT + labelRef.value.offsetWidth + HANDLE_BUFFER) / trackWidth) * 100;\n }\n return 30;\n };\n\n const rightThreshold = () => {\n const HANDLE_BUFFER = 8;\n const VALUE_CSS_RIGHT = 10;\n const trackWidth = wrapperRef.value?.offsetWidth;\n if (trackWidth && valueSpanRef.value) {\n return ((trackWidth - VALUE_CSS_RIGHT - valueSpanRef.value.offsetWidth - HANDLE_BUFFER) / trackWidth) * 100;\n }\n return 78;\n };\n\n const valueDodge = () => percentage.value < leftThreshold() || percentage.value > rightThreshold();\n\n const handleOpacity = () => {\n if (!isActive.value) return 0;\n if (valueDodge()) return 0.1;\n if (isDragging.value) return 0.9;\n return 0.5;\n };\n\n const animateHandleState = () => {\n const targetOpacity = handleOpacity();\n const targetScaleX = isActive.value ? 1 : 0.25;\n const targetScaleY = isActive.value && 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 handlePointerDown = (event: PointerEvent) => {\n if (showInput.value) return;\n event.preventDefault();\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\n pointerDownPos = { x: event.clientX, y: event.clientY };\n isClickFlag = true;\n isInteracting.value = true;\n\n if (wrapperRef.value) {\n wrapperRect = wrapperRef.value.getBoundingClientRect();\n scaleVal = wrapperRect.width / wrapperRef.value.offsetWidth;\n }\n };\n\n const handlePointerMove = (event: PointerEvent) => {\n if (!isInteracting.value || !pointerDownPos) return;\n\n const dx = event.clientX - pointerDownPos.x;\n const dy = event.clientY - pointerDownPos.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (isClickFlag && distance > CLICK_THRESHOLD) {\n isClickFlag = false;\n isDragging.value = true;\n }\n\n if (!isClickFlag) {\n if (wrapperRect) {\n if (event.clientX < wrapperRect.left) {\n rubberStretchPx.jump(computeRubberStretch(event.clientX, -1));\n } else if (event.clientX > wrapperRect.right) {\n rubberStretchPx.jump(computeRubberStretch(event.clientX, 1));\n } else {\n rubberStretchPx.jump(0);\n }\n }\n\n const nextValue = positionToValue(event.clientX);\n const nextPct = percentFromValue(nextValue);\n if (snapAnim) {\n snapAnim.stop();\n snapAnim = null;\n }\n fillPercent.jump(nextPct);\n emit('change', roundValue(nextValue, step.value));\n }\n };\n\n const handlePointerUp = (event: PointerEvent) => {\n if (!isInteracting.value) return;\n\n if (isClickFlag) {\n const rawValue = positionToValue(event.clientX);\n const discreteSteps = (max.value - min.value) / step.value;\n const snappedValue = discreteSteps <= 10\n ? Math.max(min.value, Math.min(max.value, min.value + Math.round((rawValue - min.value) / step.value) * step.value))\n : snapToDecile(rawValue, min.value, max.value);\n\n const nextPct = percentFromValue(snappedValue);\n\n snapAnim?.stop();\n snapAnim = animate(fillPercent, nextPct, {\n type: 'spring',\n stiffness: 300,\n damping: 25,\n mass: 0.8,\n onComplete: () => {\n snapAnim = null;\n },\n });\n\n emit('change', roundValue(snappedValue, step.value));\n }\n\n if (rubberStretchPx.get() !== 0) {\n rubberAnim?.stop();\n rubberAnim = animate(rubberStretchPx, 0, {\n type: 'spring',\n visualDuration: 0.35,\n bounce: 0.15,\n });\n }\n\n isInteracting.value = false;\n isDragging.value = false;\n pointerDownPos = null;\n };\n\n const handlePointerCancel = () => {\n if (!isInteracting.value) return;\n isInteracting.value = false;\n isDragging.value = false;\n rubberStretchPx.jump(0);\n pointerDownPos = null;\n };\n\n const handleInputSubmit = () => {\n const parsed = parseFloat(inputValue.value);\n if (!Number.isNaN(parsed)) {\n const clamped = Math.max(min.value, Math.min(max.value, parsed));\n emit('change', roundValue(clamped, step.value));\n }\n showInput.value = false;\n isValueHovered.value = false;\n isValueEditable.value = false;\n };\n\n const handleValueClick = (event: MouseEvent) => {\n if (!isValueEditable.value) return;\n event.stopPropagation();\n event.preventDefault();\n showInput.value = true;\n inputValue.value = props.value.toFixed(decimalsForStep(step.value));\n };\n\n const handleInputKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Enter') {\n handleInputSubmit();\n } else if (event.key === 'Escape') {\n showInput.value = false;\n isValueHovered.value = false;\n }\n };\n\n watch(() => props.value, () => {\n if (!isInteracting.value && !snapAnim) {\n fillPercent.jump(percentage.value);\n }\n });\n\n watch([isInteracting, isHovered, isDragging, () => props.value], () => {\n animateHandleState();\n });\n\n watch([isValueHovered, showInput, isValueEditable], () => {\n if (hoverTimeout) {\n clearTimeout(hoverTimeout);\n hoverTimeout = null;\n }\n\n if (isValueHovered.value && !showInput.value && !isValueEditable.value) {\n hoverTimeout = setTimeout(() => {\n isValueEditable.value = true;\n animateHandleState();\n }, 800);\n } else if (!isValueHovered.value && !showInput.value) {\n isValueEditable.value = false;\n }\n });\n\n watch(showInput, async (visible) => {\n if (!visible) return;\n await nextTick();\n inputRef.value?.focus();\n inputRef.value?.select();\n });\n\n const discreteSteps = computed(() => (max.value - min.value) / step.value);\n const hashMarks = computed(() => {\n const marks: ReturnType<typeof h>[] = [];\n if (discreteSteps.value <= 10) {\n const count = Math.max(0, Math.floor(discreteSteps.value) - 1);\n for (let i = 0; i < count; i += 1) {\n const pct = ((i + 1) * step.value) / (max.value - min.value) * 100;\n marks.push(h('div', { class: 'dialkit-slider-hashmark', style: { left: `${pct}%` } }));\n }\n return marks;\n }\n\n for (let i = 0; i < 9; i += 1) {\n const pct = (i + 1) * 10;\n marks.push(h('div', { class: 'dialkit-slider-hashmark', style: { left: `${pct}%` } }));\n }\n return marks;\n });\n\n let unsubFill: (() => void) | null = null;\n let unsubRubber: (() => void) | null = null;\n let unsubHandleOpacity: (() => void) | null = null;\n let unsubHandleScaleX: (() => void) | null = null;\n let unsubHandleScaleY: (() => void) | null = null;\n\n onMounted(() => {\n unsubFill = fillPercent.on('change', applyFillStyles);\n unsubRubber = rubberStretchPx.on('change', applyRubberStyles);\n unsubHandleOpacity = handleOpacityMv.on('change', applyHandleVisualStyles);\n unsubHandleScaleX = handleScaleXMv.on('change', applyHandleVisualStyles);\n unsubHandleScaleY = handleScaleYMv.on('change', applyHandleVisualStyles);\n\n applyFillStyles(fillPercent.get());\n applyRubberStyles(rubberStretchPx.get());\n applyHandleVisualStyles();\n animateHandleState();\n });\n\n onUnmounted(() => {\n if (hoverTimeout) clearTimeout(hoverTimeout);\n snapAnim?.stop();\n rubberAnim?.stop();\n handleOpacityAnim?.stop();\n handleScaleXAnim?.stop();\n handleScaleYAnim?.stop();\n\n unsubFill?.();\n unsubRubber?.();\n unsubHandleOpacity?.();\n unsubHandleScaleX?.();\n unsubHandleScaleY?.();\n });\n\n return () => h('div', { ref: wrapperRef, class: 'dialkit-slider-wrapper' }, [\n h('div', {\n ref: trackRef,\n class: `dialkit-slider ${isActive.value ? 'dialkit-slider-active' : ''}`,\n onPointerdown: handlePointerDown,\n onPointermove: handlePointerMove,\n onPointerup: handlePointerUp,\n onPointercancel: handlePointerCancel,\n onMouseenter: () => {\n isHovered.value = true;\n animateHandleState();\n },\n onMouseleave: () => {\n isHovered.value = false;\n animateHandleState();\n },\n }, [\n h('div', { class: 'dialkit-slider-hashmarks' }, hashMarks.value),\n h('div', {\n ref: fillRef,\n class: 'dialkit-slider-fill',\n style: {\n width: `${fillPercent.get()}%`,\n },\n }),\n h('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 h('span', { ref: labelRef, class: 'dialkit-slider-label' }, [\n props.label,\n props.shortcut\n ? h('span', {\n class: `dialkit-shortcut-pill${props.shortcutActive ? ' dialkit-shortcut-pill-active' : ''}`,\n }, formatSliderShortcut(props.shortcut))\n : null,\n ]),\n showInput.value\n ? h('input', {\n ref: inputRef,\n type: 'text',\n class: 'dialkit-slider-input',\n value: inputValue.value,\n onInput: (event: Event) => {\n inputValue.value = (event.target as HTMLInputElement).value;\n },\n onKeydown: handleInputKeydown,\n onBlur: handleInputSubmit,\n onClick: (event: MouseEvent) => event.stopPropagation(),\n onMousedown: (event: MouseEvent) => event.stopPropagation(),\n })\n : h('span', {\n ref: valueSpanRef,\n class: `dialkit-slider-value ${isValueEditable.value ? 'dialkit-slider-value-editable' : ''}`,\n onMouseenter: () => {\n isValueHovered.value = true;\n },\n onMouseleave: () => {\n isValueHovered.value = false;\n },\n onClick: handleValueClick,\n onMousedown: (event: MouseEvent) => {\n if (isValueEditable.value) event.stopPropagation();\n },\n style: { cursor: isValueEditable.value ? 'text' : 'default' },\n }, displayValue.value),\n ]),\n ]);\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 { defineComponent, h, type PropType } from 'vue';\nimport { SegmentedControl } from './SegmentedControl';\nimport type { ShortcutConfig } from '../../store/DialStore';\nimport { formatToggleShortcut } from '../../shortcut-utils';\n\nexport const Toggle = defineComponent({\n name: 'DialKitToggle',\n props: {\n label: { type: String, required: true },\n checked: { type: Boolean, required: true },\n shortcut: { type: Object as PropType<ShortcutConfig>, default: undefined },\n shortcutActive: { type: Boolean, default: false },\n },\n emits: ['change'],\n setup(props, { emit }) {\n return () => h('div', { class: 'dialkit-labeled-control' }, [\n h('span', { class: 'dialkit-labeled-control-label' }, [\n props.label,\n props.shortcut\n ? h('span', {\n class: `dialkit-shortcut-pill${props.shortcutActive ? ' dialkit-shortcut-pill-active' : ''}`,\n }, formatToggleShortcut(props.shortcut))\n : null,\n ]),\n h(SegmentedControl, {\n options: [\n { value: 'off', label: 'Off' },\n { value: 'on', label: 'On' },\n ],\n value: props.checked ? 'on' : 'off',\n onChange: (value: string) => emit('change', value === 'on'),\n }),\n ]);\n },\n});\n","import { defineComponent, h, nextTick, onMounted, onUnmounted, ref, watch, type PropType } from 'vue';\nimport { animate } from 'motion';\n\ntype SegmentedControlOption<T extends string> = {\n value: T;\n label: string;\n};\n\nexport const SegmentedControl = defineComponent({\n name: 'DialKitSegmentedControl',\n props: {\n options: {\n type: Array as PropType<SegmentedControlOption<string>[]>,\n required: true,\n },\n value: {\n type: String,\n required: true,\n },\n },\n emits: ['change'],\n setup(props, { emit }) {\n const containerRef = ref<HTMLElement | null>(null);\n const pillRef = ref<HTMLElement | null>(null);\n const buttonRefs = new Map<string, HTMLElement>();\n\n const pillReady = ref(false);\n let hasAnimated = false;\n let pillAnim: ReturnType<typeof animate> | null = null;\n\n const measurePill = () => {\n const button = buttonRefs.get(props.value);\n const container = containerRef.value;\n if (!button || !container) return null;\n\n const containerRect = container.getBoundingClientRect();\n const buttonRect = button.getBoundingClientRect();\n return {\n left: buttonRect.left - containerRect.left,\n width: buttonRect.width,\n };\n };\n\n const setPillImmediate = (left: number, width: number) => {\n if (!pillRef.value) return;\n pillRef.value.style.left = `${left}px`;\n pillRef.value.style.width = `${width}px`;\n pillRef.value.style.visibility = 'visible';\n };\n\n const updatePill = (shouldAnimate: boolean) => {\n const next = measurePill();\n if (!next) return;\n\n if (!pillReady.value) {\n setPillImmediate(next.left, next.width);\n pillReady.value = true;\n return;\n }\n\n if (!shouldAnimate || !hasAnimated || !pillRef.value) {\n pillAnim?.stop();\n pillAnim = null;\n setPillImmediate(next.left, next.width);\n return;\n }\n\n pillAnim?.stop();\n pillAnim = animate(\n pillRef.value,\n {\n left: next.left,\n width: next.width,\n },\n {\n type: 'spring',\n visualDuration: 0.2,\n bounce: 0.15,\n onComplete: () => {\n pillAnim = null;\n },\n }\n );\n };\n\n let ro: ResizeObserver | undefined;\n\n onMounted(() => {\n nextTick(() => {\n updatePill(false);\n hasAnimated = true;\n });\n\n if (typeof ResizeObserver !== 'undefined' && containerRef.value) {\n ro = new ResizeObserver(() => updatePill(false));\n ro.observe(containerRef.value);\n }\n });\n\n onUnmounted(() => {\n pillAnim?.stop();\n ro?.disconnect();\n });\n\n watch(\n () => props.value,\n () => {\n updatePill(true);\n },\n { flush: 'post' }\n );\n\n return () => h('div', { ref: containerRef, class: 'dialkit-segmented' }, [\n h('div', {\n ref: pillRef,\n class: 'dialkit-segmented-pill',\n style: {\n left: '0px',\n width: '0px',\n visibility: pillReady.value ? 'visible' : 'hidden',\n },\n }),\n ...props.options.map((option) => h('button', {\n ref: ((el: Element | null) => {\n if (el instanceof HTMLElement) {\n buttonRefs.set(option.value, el);\n return;\n }\n\n buttonRefs.delete(option.value);\n }) as any,\n class: 'dialkit-segmented-button',\n 'data-active': String(props.value === option.value),\n onClick: () => emit('change', option.value),\n }, option.label)),\n ]);\n },\n});\n","import { defineComponent, h, onMounted, onUnmounted, ref, type PropType } from 'vue';\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\nexport const SpringControl = defineComponent({\n name: 'DialKitSpringControl',\n props: {\n panelId: { type: String, required: true },\n path: { type: String, required: true },\n label: { type: String, required: true },\n spring: {\n type: Object as PropType<SpringConfig>,\n required: true,\n },\n },\n emits: ['change'],\n setup(props, { emit }) {\n const mode = ref<'simple' | 'advanced'>(DialStore.getSpringMode(props.panelId, props.path));\n let unsub: (() => void) | undefined;\n\n onMounted(() => {\n unsub = DialStore.subscribe(props.panelId, () => {\n mode.value = DialStore.getSpringMode(props.panelId, props.path);\n });\n });\n\n onUnmounted(() => {\n unsub?.();\n });\n\n const isSimpleMode = () => mode.value === 'simple';\n\n const cache = {\n simple: props.spring.visualDuration !== undefined ? { ...props.spring } : { type: 'spring' as const, visualDuration: 0.3, bounce: 0.2 },\n advanced: props.spring.stiffness !== undefined ? { ...props.spring } : { type: 'spring' as const, stiffness: 200, damping: 25, mass: 1 },\n };\n\n const handleModeChange = (nextMode: 'simple' | 'advanced') => {\n if (isSimpleMode()) {\n cache.simple = { ...props.spring };\n } else {\n cache.advanced = { ...props.spring };\n }\n\n DialStore.updateSpringMode(props.panelId, props.path, nextMode);\n\n if (nextMode === 'simple') {\n emit('change', cache.simple);\n } else {\n emit('change', 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 emit('change', { ...rest, [key]: value });\n } else {\n const { visualDuration, bounce, ...rest } = props.spring;\n emit('change', { ...rest, [key]: value });\n }\n };\n\n return () => h(Folder, { title: props.label, defaultOpen: true }, {\n default: () => [\n h('div', { style: { display: 'flex', flexDirection: 'column', gap: '6px' } }, [\n h(SpringVisualization, { spring: props.spring, isSimpleMode: isSimpleMode() }),\n h('div', { class: 'dialkit-labeled-control' }, [\n h('span', { class: 'dialkit-labeled-control-label' }, 'Type'),\n h(SegmentedControl, {\n options: [\n { value: 'simple', label: 'Time' },\n { value: 'advanced', label: 'Physics' },\n ],\n value: mode.value,\n onChange: handleModeChange,\n }),\n ]),\n ...(isSimpleMode()\n ? [\n h(Slider, {\n label: 'Duration',\n value: props.spring.visualDuration ?? 0.3,\n min: 0.1,\n max: 1,\n step: 0.05,\n unit: 's',\n onChange: (next: number) => handleUpdate('visualDuration', next),\n }),\n h(Slider, {\n label: 'Bounce',\n value: props.spring.bounce ?? 0.2,\n min: 0,\n max: 1,\n step: 0.05,\n onChange: (next: number) => handleUpdate('bounce', next),\n }),\n ]\n : [\n h(Slider, {\n label: 'Stiffness',\n value: props.spring.stiffness ?? 400,\n min: 1,\n max: 1000,\n step: 10,\n onChange: (next: number) => handleUpdate('stiffness', next),\n }),\n h(Slider, {\n label: 'Damping',\n value: props.spring.damping ?? 17,\n min: 1,\n max: 100,\n step: 1,\n onChange: (next: number) => handleUpdate('damping', next),\n }),\n h(Slider, {\n label: 'Mass',\n value: props.spring.mass ?? 1,\n min: 0.1,\n max: 10,\n step: 0.1,\n onChange: (next: number) => handleUpdate('mass', next),\n }),\n ]),\n ]),\n ],\n });\n },\n});\n","import { defineComponent, h, computed, type PropType } from 'vue';\nimport type { SpringConfig } from '../../store/DialStore';\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 += 1) {\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 const SpringVisualization = defineComponent({\n name: 'DialKitSpringVisualization',\n props: {\n spring: {\n type: Object as PropType<SpringConfig>,\n required: true,\n },\n isSimpleMode: {\n type: Boolean,\n required: true,\n },\n },\n setup(props) {\n const width = 256;\n const height = 140;\n\n const pathData = computed(() => {\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 = ((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 return points\n .map(([time, value], index) => {\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 `${index === 0 ? 'M' : 'L'} ${x} ${y}`;\n })\n .join(' ');\n });\n\n return () => h('svg', { viewBox: `0 0 ${width} ${height}`, class: 'dialkit-spring-viz' }, [\n ...Array.from({ length: 3 }).flatMap((_, index) => {\n const lineIndex = index + 1;\n const x = (width / 4) * lineIndex;\n const y = (height / 4) * lineIndex;\n return [\n h('line', { x1: x, y1: 0, x2: x, y2: height, stroke: 'rgba(255, 255, 255, 0.08)', 'stroke-width': 1 }),\n h('line', { x1: 0, y1: y, x2: width, y2: y, stroke: 'rgba(255, 255, 255, 0.08)', 'stroke-width': 1 }),\n ];\n }),\n h('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 h('path', {\n d: pathData.value,\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 ]);\n },\n});\n","import { defineComponent, h, onMounted, onUnmounted, ref, type PropType } from 'vue';\nimport { DialStore } from '../../store/DialStore';\nimport type { EasingConfig, SpringConfig, TransitionConfig } from '../../store/DialStore';\nimport { Folder } from './Folder';\nimport { Slider } from './Slider';\nimport { SegmentedControl } from './SegmentedControl';\nimport { SpringVisualization } from './SpringVisualization';\nimport { EasingVisualization } from './EasingVisualization';\n\ntype CurveMode = 'easing' | 'simple' | 'advanced';\n\nfunction formatEase(ease: [number, number, number, number]): string {\n return ease.map((value) => Number(value.toFixed(2))).join(', ');\n}\n\nfunction parseEase(value: string): [number, number, number, number] | null {\n const parts = value.split(',').map((part) => Number.parseFloat(part.trim()));\n if (parts.length === 4 && parts.every((part) => Number.isFinite(part))) {\n return parts as [number, number, number, number];\n }\n return null;\n}\n\nconst EaseTextInput = defineComponent({\n name: 'DialKitEaseTextInput',\n props: {\n ease: {\n type: Array as unknown as PropType<[number, number, number, number]>,\n required: true,\n },\n onChange: {\n type: Function as PropType<(ease: [number, number, number, number]) => void>,\n required: true,\n },\n },\n setup(props) {\n const editing = ref(false);\n const draft = ref('');\n\n const handleFocus = () => {\n draft.value = formatEase(props.ease);\n editing.value = true;\n };\n\n const handleBlur = () => {\n const parsed = parseEase(draft.value);\n if (parsed) props.onChange(parsed);\n editing.value = false;\n };\n\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Enter') {\n (event.target as HTMLInputElement).blur();\n }\n };\n\n return () => h('div', { class: 'dialkit-labeled-control' }, [\n h('span', { class: 'dialkit-labeled-control-label' }, 'Ease'),\n h('input', {\n type: 'text',\n class: 'dialkit-text-input',\n value: editing.value ? draft.value : formatEase(props.ease),\n spellcheck: false,\n onInput: (event: Event) => {\n draft.value = (event.target as HTMLInputElement).value;\n },\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeydown: handleKeydown,\n }),\n ]);\n },\n});\n\nexport const TransitionControl = defineComponent({\n name: 'DialKitTransitionControl',\n props: {\n panelId: { type: String, required: true },\n path: { type: String, required: true },\n label: { type: String, required: true },\n value: {\n type: Object as PropType<TransitionConfig>,\n required: true,\n },\n },\n emits: ['change'],\n setup(props, { emit }) {\n const mode = ref<CurveMode>(DialStore.getTransitionMode(props.panelId, props.path));\n let unsub: (() => void) | undefined;\n\n onMounted(() => {\n unsub = DialStore.subscribe(props.panelId, () => {\n mode.value = DialStore.getTransitionMode(props.panelId, props.path);\n });\n });\n\n onUnmounted(() => unsub?.());\n\n const cache = {\n easing: (props.value.type === 'easing' ? { ...props.value } : { type: 'easing' as const, duration: 0.3, ease: [1, -0.4, 0.5, 1] as [number, number, number, number] }) as EasingConfig,\n simple: (props.value.type === 'spring' && props.value.visualDuration !== undefined ? { ...props.value } : { type: 'spring' as const, visualDuration: 0.3, bounce: 0.2 }) as SpringConfig,\n advanced: (props.value.type === 'spring' && props.value.stiffness !== undefined ? { ...props.value } : { type: 'spring' as const, stiffness: 200, damping: 25, mass: 1 }) as SpringConfig,\n };\n\n const spring = (): SpringConfig => {\n if (props.value.type === 'spring') {\n // Keep cache updated\n if (mode.value === 'simple') cache.simple = props.value;\n else if (mode.value === 'advanced') cache.advanced = props.value;\n return props.value;\n }\n return cache.simple;\n };\n\n const easing = (): EasingConfig => {\n if (props.value.type === 'easing') {\n cache.easing = props.value;\n return props.value;\n }\n return cache.easing;\n };\n\n const handleModeChange = (nextMode: CurveMode) => {\n DialStore.updateTransitionMode(props.panelId, props.path, nextMode);\n\n if (nextMode === 'easing') {\n emit('change', cache.easing);\n } else if (nextMode === 'simple') {\n emit('change', cache.simple);\n } else {\n emit('change', cache.advanced);\n }\n };\n\n const updateEase = (index: number, value: number) => {\n const current = easing();\n const next = [...current.ease] as [number, number, number, number];\n next[index] = value;\n emit('change', { ...current, ease: next });\n };\n\n const handleSpringUpdate = (key: keyof SpringConfig, value: number) => {\n const current = spring();\n if (mode.value === 'simple') {\n const { stiffness, damping, mass, ...rest } = current;\n emit('change', { ...rest, [key]: value });\n } else {\n const { visualDuration, bounce, ...rest } = current;\n emit('change', { ...rest, [key]: value });\n }\n };\n\n return () => {\n const isEasing = mode.value === 'easing';\n const isSimpleSpring = mode.value === 'simple';\n const currentSpring = spring();\n const currentEasing = easing();\n\n return h(Folder, { title: props.label, defaultOpen: true }, {\n default: () => [\n h('div', { style: { display: 'flex', flexDirection: 'column', gap: '6px' } }, [\n isEasing\n ? h(EasingVisualization, { easing: currentEasing })\n : h(SpringVisualization, { spring: currentSpring, isSimpleMode: isSimpleSpring }),\n h('div', { class: 'dialkit-labeled-control' }, [\n h('span', { class: 'dialkit-labeled-control-label' }, 'Type'),\n h(SegmentedControl, {\n options: [\n { value: 'easing', label: 'Easing' },\n { value: 'simple', label: 'Time' },\n { value: 'advanced', label: 'Physics' },\n ],\n value: mode.value,\n onChange: handleModeChange,\n }),\n ]),\n ...(isEasing\n ? [\n h(Slider, { label: 'x1', value: currentEasing.ease[0], min: 0, max: 1, step: 0.01, onChange: (next: number) => updateEase(0, next) }),\n h(Slider, { label: 'y1', value: currentEasing.ease[1], min: -1, max: 2, step: 0.01, onChange: (next: number) => updateEase(1, next) }),\n h(Slider, { label: 'x2', value: currentEasing.ease[2], min: 0, max: 1, step: 0.01, onChange: (next: number) => updateEase(2, next) }),\n h(Slider, { label: 'y2', value: currentEasing.ease[3], min: -1, max: 2, step: 0.01, onChange: (next: number) => updateEase(3, next) }),\n h(Slider, {\n label: 'Duration',\n value: currentEasing.duration,\n min: 0.1,\n max: 2,\n step: 0.05,\n unit: 's',\n onChange: (next: number) => emit('change', { ...currentEasing, duration: next }),\n }),\n h(EaseTextInput, {\n ease: currentEasing.ease,\n onChange: (next: [number, number, number, number]) => emit('change', { ...currentEasing, ease: next }),\n }),\n ]\n : isSimpleSpring\n ? [\n h(Slider, {\n label: 'Duration',\n value: currentSpring.visualDuration ?? 0.3,\n min: 0.1,\n max: 1,\n step: 0.05,\n unit: 's',\n onChange: (next: number) => handleSpringUpdate('visualDuration', next),\n }),\n h(Slider, {\n label: 'Bounce',\n value: currentSpring.bounce ?? 0.2,\n min: 0,\n max: 1,\n step: 0.05,\n onChange: (next: number) => handleSpringUpdate('bounce', next),\n }),\n ]\n : [\n h(Slider, {\n label: 'Stiffness',\n value: currentSpring.stiffness ?? 400,\n min: 1,\n max: 1000,\n step: 10,\n onChange: (next: number) => handleSpringUpdate('stiffness', next),\n }),\n h(Slider, {\n label: 'Damping',\n value: currentSpring.damping ?? 17,\n min: 1,\n max: 100,\n step: 1,\n onChange: (next: number) => handleSpringUpdate('damping', next),\n }),\n h(Slider, {\n label: 'Mass',\n value: currentSpring.mass ?? 1,\n min: 0.1,\n max: 10,\n step: 0.1,\n onChange: (next: number) => handleSpringUpdate('mass', next),\n }),\n ]),\n ]),\n ],\n });\n };\n },\n});\n","import { defineComponent, h, computed, type PropType } from 'vue';\nimport type { EasingConfig } from '../../store/DialStore';\n\nexport const easingPresets: Record<string, [number, number, number, number]> = {\n linear: [0, 0, 1, 1],\n easeIn: [0.42, 0, 1, 1],\n easeOut: [0, 0, 0.58, 1],\n easeInOut: [0.42, 0, 0.58, 1],\n};\n\nexport const EasingVisualization = defineComponent({\n name: 'DialKitEasingVisualization',\n props: {\n easing: {\n type: Object as PropType<EasingConfig>,\n required: true,\n },\n },\n setup(props) {\n const size = 200;\n const pad = 10;\n const inner = size - pad * 2;\n const unit = inner / 2;\n\n const curve = computed(() => {\n const [x1, y1, x2, y2] = props.easing.ease;\n const toSvg = (nx: number, ny: number) => ({\n x: pad + (nx + 0.5) * unit,\n y: pad + (1.5 - ny) * unit,\n });\n const start = toSvg(0, 0);\n const end = toSvg(1, 1);\n const p1 = toSvg(x1, y1);\n const p2 = toSvg(x2, y2);\n return `M ${start.x} ${start.y} C ${p1.x} ${p1.y}, ${p2.x} ${p2.y}, ${end.x} ${end.y}`;\n });\n\n return () => h('svg', {\n viewBox: `0 0 ${size} ${size}`,\n preserveAspectRatio: 'xMidYMid slice',\n class: 'dialkit-spring-viz dialkit-easing-viz',\n }, [\n h('line', {\n x1: pad + (0 + 0.5) * unit,\n y1: pad + (1.5 - 0) * unit,\n x2: pad + (1 + 0.5) * unit,\n y2: pad + (1.5 - 1) * unit,\n stroke: 'rgba(255, 255, 255, 0.15)',\n 'stroke-width': 1,\n 'stroke-dasharray': '4,4',\n }),\n h('path', {\n d: curve.value,\n fill: 'none',\n stroke: 'rgba(255, 255, 255, 0.6)',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n }),\n ]);\n },\n});\n","import { defineComponent, h, ref } from 'vue';\n\nlet textControlInstance = 0;\n\nexport const TextControl = defineComponent({\n name: 'DialKitTextControl',\n props: {\n label: { type: String, required: true },\n value: { type: String, required: true },\n placeholder: { type: String, required: false },\n },\n emits: ['change'],\n setup(props, { emit }) {\n const inputId = ref(`dialkit-text-${++textControlInstance}`);\n\n return () => h('div', { class: 'dialkit-text-control' }, [\n h('label', { class: 'dialkit-text-label', for: inputId.value }, props.label),\n h('input', {\n id: inputId.value,\n type: 'text',\n class: 'dialkit-text-input',\n value: props.value,\n placeholder: props.placeholder,\n onInput: (event: Event) => emit('change', (event.target as HTMLInputElement).value),\n }),\n ]);\n },\n});\n","import { Teleport, defineComponent, h, onMounted, ref, watch, type PropType } from 'vue';\nimport { AnimatePresence, motion } from 'motion-v';\n\ntype SelectOption = string | { value: string; label: string };\n\nfunction toTitleCase(value: string): string {\n return value.replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nfunction normalizeOptions(options: SelectOption[]): { value: string; label: string }[] {\n return options.map((option) =>\n typeof option === 'string' ? { value: option, label: toTitleCase(option) } : option\n );\n}\n\nexport const SelectControl = defineComponent({\n name: 'DialKitSelectControl',\n props: {\n label: { type: String, required: true },\n value: { type: String, required: true },\n options: {\n type: Array as PropType<SelectOption[]>,\n required: true,\n },\n },\n emits: ['change'],\n setup(props, { emit }) {\n const isOpen = ref(false);\n const pos = ref<{ top: number; left: number; width: number; above: boolean } | null>(null);\n const portalTarget = ref<HTMLElement | null>(null);\n\n const triggerRef = ref<HTMLElement | null>(null);\n const dropdownRef = ref<HTMLElement | null>(null);\n\n const normalizedOptions = () => normalizeOptions(props.options);\n const selectedLabel = () => normalizedOptions().find((option) => option.value === props.value)?.label ?? props.value;\n\n const updatePos = () => {\n if (!triggerRef.value) return;\n const rect = triggerRef.value.getBoundingClientRect();\n const dropdownHeight = 8 + normalizedOptions().length * 36;\n const spaceBelow = window.innerHeight - rect.bottom - 4;\n const above = spaceBelow < dropdownHeight && rect.top > spaceBelow;\n pos.value = {\n top: above ? rect.top - 4 : rect.bottom + 4,\n left: rect.left,\n width: rect.width,\n above,\n };\n };\n\n const openDropdown = () => {\n updatePos();\n isOpen.value = true;\n };\n\n const closeDropdown = () => {\n isOpen.value = false;\n };\n\n const setDropdownRef = (node: unknown) => {\n if (node instanceof HTMLElement) {\n dropdownRef.value = node;\n return;\n }\n\n if (node && typeof node === 'object' && '$el' in node) {\n const el = (node as { $el?: unknown }).$el;\n dropdownRef.value = el instanceof HTMLElement ? el : null;\n return;\n }\n\n dropdownRef.value = null;\n };\n\n const toggleDropdown = () => {\n if (isOpen.value) closeDropdown();\n else openDropdown();\n };\n\n watch(isOpen, (open, _, onCleanup) => {\n if (!open) return;\n\n const handleViewportChange = () => updatePos();\n const handleDocumentClick = (event: MouseEvent) => {\n const target = event.target as Node;\n if (triggerRef.value?.contains(target) || dropdownRef.value?.contains(target)) return;\n closeDropdown();\n };\n\n updatePos();\n document.addEventListener('mousedown', handleDocumentClick);\n window.addEventListener('resize', handleViewportChange);\n window.addEventListener('scroll', handleViewportChange, true);\n\n onCleanup(() => {\n document.removeEventListener('mousedown', handleDocumentClick);\n window.removeEventListener('resize', handleViewportChange);\n window.removeEventListener('scroll', handleViewportChange, true);\n });\n });\n\n onMounted(() => {\n const root = triggerRef.value?.closest('.dialkit-root') as HTMLElement | null;\n portalTarget.value = root ?? document.body;\n });\n\n return () => h('div', { class: 'dialkit-select-row' }, [\n h('button', {\n ref: triggerRef,\n class: 'dialkit-select-trigger',\n 'data-open': String(isOpen.value),\n onClick: toggleDropdown,\n }, [\n h('span', { class: 'dialkit-select-label' }, props.label),\n h('div', { class: 'dialkit-select-right' }, [\n h('span', { class: 'dialkit-select-value' }, selectedLabel()),\n h(motion.svg, {\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 animate: { rotate: isOpen.value ? 180 : 0 },\n transition: { type: 'spring', visualDuration: 0.2, bounce: 0.15 },\n }, [h('path', { d: 'M6 9.5L12 15.5L18 9.5' })]),\n ]),\n ]),\n portalTarget.value\n ? h(Teleport, { to: portalTarget.value }, [\n h(AnimatePresence, null, {\n default: () => (isOpen.value && pos.value)\n ? [h(motion.div, {\n key: 'dialkit-select-dropdown',\n ref: setDropdownRef,\n class: 'dialkit-select-dropdown',\n initial: { opacity: 0, y: pos.value.above ? 8 : -8, scale: 0.95 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: pos.value.above ? 8 : -8, scale: 0.95 },\n transition: { type: 'spring', visualDuration: 0.15, bounce: 0 },\n style: {\n position: 'fixed',\n left: `${pos.value.left}px`,\n width: `${pos.value.width}px`,\n ...(pos.value.above\n ? {\n bottom: `${window.innerHeight - pos.value.top}px`,\n transformOrigin: 'bottom',\n }\n : {\n top: `${pos.value.top}px`,\n transformOrigin: 'top',\n }),\n },\n }, normalizedOptions().map((option) => h('button', {\n key: option.value,\n class: 'dialkit-select-option',\n 'data-selected': String(option.value === props.value),\n onClick: () => {\n emit('change', option.value);\n closeDropdown();\n },\n }, option.label)))]\n : [],\n }),\n ])\n : null,\n ]);\n },\n});\n","import { defineComponent, h, ref, watch } from 'vue';\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\nlet colorControlInstance = 0;\n\nexport const ColorControl = defineComponent({\n name: 'DialKitColorControl',\n props: {\n label: { type: String, required: true },\n value: { type: String, required: true },\n },\n emits: ['change'],\n setup(props, { emit }) {\n const textInputId = ref(`dialkit-color-${++colorControlInstance}`);\n const isEditing = ref(false);\n const editValue = ref(props.value);\n const colorInputRef = ref<HTMLInputElement | null>(null);\n\n watch(() => props.value, (value) => {\n if (!isEditing.value) editValue.value = value;\n });\n\n const submit = () => {\n isEditing.value = false;\n if (HEX_COLOR_REGEX.test(editValue.value)) {\n emit('change', editValue.value);\n } else {\n editValue.value = props.value;\n }\n };\n\n return () => h('div', { class: 'dialkit-color-control' }, [\n h('label', { class: 'dialkit-color-label', for: textInputId.value }, props.label),\n h('div', { class: 'dialkit-color-inputs' }, [\n isEditing.value\n ? h('input', {\n id: textInputId.value,\n type: 'text',\n class: 'dialkit-color-hex-input',\n value: editValue.value,\n autofocus: true,\n onInput: (event: Event) => {\n editValue.value = (event.target as HTMLInputElement).value;\n },\n onBlur: submit,\n onKeydown: (event: KeyboardEvent) => {\n if (event.key === 'Enter') submit();\n if (event.key === 'Escape') {\n isEditing.value = false;\n editValue.value = props.value;\n }\n },\n })\n : h('span', { class: 'dialkit-color-hex', onClick: () => { isEditing.value = true; } }, (props.value ?? '').toUpperCase()),\n h('button', {\n class: 'dialkit-color-swatch',\n style: { backgroundColor: props.value },\n title: 'Pick color',\n 'aria-label': `Pick color for ${props.label}`,\n onClick: () => colorInputRef.value?.click(),\n }),\n h('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: (event: Event) => emit('change', (event.target as HTMLInputElement).value),\n }),\n ]),\n ]);\n },\n});\n","import { Teleport, defineComponent, h, ref, watch, type PropType } from 'vue';\nimport { AnimatePresence, motion } from 'motion-v';\nimport { ICON_CHEVRON, ICON_TRASH } from '../../icons';\nimport { DialStore } from '../../store/DialStore';\nimport type { Preset } from '../../store/DialStore';\n\nexport const PresetManager = defineComponent({\n name: 'DialKitPresetManager',\n props: {\n panelId: { type: String, required: true },\n presets: {\n type: Array as PropType<Preset[]>,\n required: true,\n },\n activePresetId: {\n type: String as PropType<string | null>,\n required: false,\n default: null,\n },\n },\n setup(props) {\n const isOpen = ref(false);\n const pos = ref({ top: 0, left: 0, width: 0 });\n\n const triggerRef = ref<HTMLElement | null>(null);\n const dropdownRef = ref<HTMLElement | null>(null);\n\n const hasPresets = () => props.presets.length > 0;\n const activePreset = () => props.presets.find((preset) => preset.id === props.activePresetId);\n\n const open = () => {\n if (!hasPresets()) return;\n const rect = triggerRef.value?.getBoundingClientRect();\n if (rect) {\n pos.value = { top: rect.bottom + 4, left: rect.left, width: rect.width };\n }\n isOpen.value = true;\n };\n\n const close = () => {\n isOpen.value = false;\n };\n\n const setDropdownRef = (node: unknown) => {\n if (node instanceof HTMLElement) {\n dropdownRef.value = node;\n return;\n }\n\n if (node && typeof node === 'object' && '$el' in node) {\n const el = (node as { $el?: unknown }).$el;\n dropdownRef.value = el instanceof HTMLElement ? el : null;\n return;\n }\n\n dropdownRef.value = null;\n };\n\n const toggle = () => {\n if (isOpen.value) close();\n else open();\n };\n\n watch(isOpen, (open, _, onCleanup) => {\n if (!open) return;\n\n const handler = (event: MouseEvent) => {\n const target = event.target as Node;\n if (triggerRef.value?.contains(target) || dropdownRef.value?.contains(target)) return;\n close();\n };\n\n document.addEventListener('mousedown', handler);\n onCleanup(() => {\n document.removeEventListener('mousedown', handler);\n });\n });\n\n const handleSelect = (presetId: string | null) => {\n if (presetId) {\n DialStore.loadPreset(props.panelId, presetId);\n } else {\n DialStore.clearActivePreset(props.panelId);\n }\n close();\n };\n\n const handleDelete = (event: MouseEvent, presetId: string) => {\n event.stopPropagation();\n DialStore.deletePreset(props.panelId, presetId);\n };\n\n return () => h('div', { class: 'dialkit-preset-manager' }, [\n h('button', {\n ref: triggerRef,\n class: 'dialkit-preset-trigger',\n onClick: toggle,\n 'data-open': String(isOpen.value),\n 'data-has-preset': String(!!activePreset()),\n 'data-disabled': String(!hasPresets()),\n }, [\n h('span', { class: 'dialkit-preset-label' }, activePreset()?.name ?? 'Version 1'),\n h(motion.svg, {\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 animate: { rotate: isOpen.value ? 180 : 0, opacity: hasPresets() ? 0.6 : 0.25 },\n transition: { type: 'spring', visualDuration: 0.2, bounce: 0.15 },\n }, [h('path', { d: ICON_CHEVRON })]),\n ]),\n\n h(Teleport, { to: 'body' }, [\n h(AnimatePresence, null, {\n default: () => isOpen.value\n ? [h(motion.div, {\n key: 'dialkit-preset-dropdown',\n ref: setDropdownRef,\n class: 'dialkit-root dialkit-preset-dropdown',\n style: {\n position: 'fixed',\n top: `${pos.value.top}px`,\n left: `${pos.value.left}px`,\n minWidth: `${pos.value.width}px`,\n },\n initial: { opacity: 0, y: 4, scale: 0.97 },\n animate: { opacity: 1, y: 0, scale: 1 },\n exit: { opacity: 0, y: 4, scale: 0.97, pointerEvents: 'none' },\n transition: { type: 'spring', visualDuration: 0.15, bounce: 0 },\n }, [\n h('div', {\n class: 'dialkit-preset-item',\n 'data-active': String(!props.activePresetId),\n onClick: () => handleSelect(null),\n }, [h('span', { class: 'dialkit-preset-name' }, 'Version 1')]),\n\n ...props.presets.map((preset) => h('div', {\n key: preset.id,\n class: 'dialkit-preset-item',\n 'data-active': String(preset.id === props.activePresetId),\n onClick: () => handleSelect(preset.id),\n }, [\n h('span', { class: 'dialkit-preset-name' }, preset.name),\n h('button', {\n class: 'dialkit-preset-delete',\n onClick: (event: MouseEvent) => handleDelete(event, preset.id),\n title: 'Delete preset',\n }, [\n h('svg', {\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '2',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }, ICON_TRASH.map((d) => h('path', { d }))),\n ]),\n ])),\n ])]\n : [],\n }),\n ]),\n ]);\n },\n});\n","import { defineComponent, h, inject, onMounted, onUnmounted, provide, ref, type InjectionKey, type Ref } from 'vue';\nimport { DialStore, ControlMeta, ShortcutConfig } from '../../store/DialStore';\nimport { getEffectiveStep, applySliderDelta, findControl, isInputFocused, getActiveModifier, DRAG_SENSITIVITY } from '../../shortcut-utils';\n\nexport interface ShortcutState {\n activePanelId: Ref<string | null>;\n activePath: Ref<string | null>;\n}\n\nexport const ShortcutKey: InjectionKey<ShortcutState> = Symbol('DialKitShortcut');\n\nexport function useShortcutContext(): ShortcutState {\n return inject(ShortcutKey, {\n activePanelId: ref(null),\n activePath: ref(null),\n });\n}\n\nexport const ShortcutListener = defineComponent({\n name: 'DialKitShortcutListener',\n setup(_, { slots }) {\n const activePanelId = ref<string | null>(null);\n const activePath = ref<string | null>(null);\n\n const activeKeys = new Set<string>();\n let isDragging = false;\n let lastMouseX: number | null = null;\n let dragAccumulator = 0;\n\n provide(ShortcutKey, { activePanelId, activePath });\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 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 activePanelId.value = target.panelId;\n activePath.value = 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 activePanelId.value = null;\n activePath.value = 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 activePanelId.value = target.panelId;\n activePath.value = target.path;\n found = true;\n break;\n }\n }\n if (!found) {\n activePanelId.value = null;\n activePath.value = 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 activePanelId.value = null;\n activePath.value = null;\n };\n\n onMounted(() => {\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\n onUnmounted(() => {\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 return () => slots.default?.();\n },\n});\n","import { defineComponent, h, onMounted, onUnmounted, ref, Teleport, type PropType } from 'vue';\nimport { DialStore, ShortcutConfig } from '../../store/DialStore';\n\nfunction formatShortcutKey(sc: ShortcutConfig): string {\n if (!sc.key) return '\\u2014';\n const mod = sc.modifier === 'alt' ? '\\u2325'\n : sc.modifier === 'shift' ? '\\u21E7'\n : sc.modifier === 'meta' ? '\\u2318'\n : '';\n return `${mod}${sc.key.toUpperCase()}`;\n}\n\nfunction formatInteraction(sc: ShortcutConfig): string {\n const interaction = sc.interaction ?? 'scroll';\n switch (interaction) {\n case 'scroll': return sc.key ? 'key+scroll' : 'scroll';\n case 'drag': return 'key+drag';\n case 'move': return 'key+move';\n case 'scroll-only': return 'scroll';\n }\n}\n\nexport const ShortcutsMenu = defineComponent({\n name: 'DialKitShortcutsMenu',\n props: {\n panelId: {\n type: String as PropType<string>,\n required: true,\n },\n },\n setup(props) {\n const isOpen = ref(false);\n const triggerRef = ref<HTMLButtonElement | null>(null);\n const dropdownRef = ref<HTMLDivElement | null>(null);\n const pos = ref({ top: 0, right: 0 });\n\n const open = () => {\n const rect = triggerRef.value?.getBoundingClientRect();\n if (rect) {\n pos.value = { top: rect.bottom + 4, right: window.innerWidth - rect.right };\n }\n isOpen.value = true;\n };\n\n const close = () => {\n isOpen.value = false;\n };\n\n const toggle = () => {\n if (isOpen.value) close();\n else open();\n };\n\n let mousedownHandler: ((e: MouseEvent) => void) | null = null;\n\n const addOutsideClickListener = () => {\n mousedownHandler = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n triggerRef.value?.contains(target) ||\n dropdownRef.value?.contains(target)\n ) return;\n close();\n };\n document.addEventListener('mousedown', mousedownHandler);\n };\n\n const removeOutsideClickListener = () => {\n if (mousedownHandler) {\n document.removeEventListener('mousedown', mousedownHandler);\n mousedownHandler = null;\n }\n };\n\n onUnmounted(() => {\n removeOutsideClickListener();\n });\n\n return () => {\n const panel = DialStore.getPanel(props.panelId);\n if (!panel) return null;\n\n const shortcuts = Object.entries(panel.shortcuts);\n if (shortcuts.length === 0) return null;\n\n // Find control label\n const findLabel = (controls: typeof panel.controls, path: string): string => {\n for (const c of controls) {\n if (c.path === path) return c.label;\n if (c.type === 'folder' && c.children) {\n const found = findLabel(c.children, path);\n if (found) return found;\n }\n }\n return path;\n };\n\n const rows = shortcuts.map(([path, shortcut]) => ({\n path,\n shortcut,\n label: findLabel(panel.controls, path),\n }));\n\n // Manage outside click listener based on open state\n if (isOpen.value) {\n if (!mousedownHandler) addOutsideClickListener();\n } else {\n removeOutsideClickListener();\n }\n\n return [\n h('button', {\n ref: triggerRef,\n class: 'dialkit-shortcuts-trigger',\n onClick: toggle,\n title: 'Keyboard shortcuts',\n }, [\n h('svg', {\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': '2',\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }, [\n h('rect', { x: '2', y: '6', width: '20', height: '12', rx: '2' }),\n h('path', { d: 'M6 10H6.01' }),\n h('path', { d: 'M10 10H10.01' }),\n h('path', { d: 'M14 10H14.01' }),\n h('path', { d: 'M18 10H18.01' }),\n h('path', { d: 'M8 14H16' }),\n ]),\n ]),\n isOpen.value\n ? h(Teleport, { to: 'body' }, [\n h('div', {\n ref: dropdownRef,\n class: 'dialkit-root dialkit-shortcuts-dropdown',\n style: {\n position: 'fixed',\n top: `${pos.value.top}px`,\n right: `${pos.value.right}px`,\n },\n }, [\n h('div', { class: 'dialkit-shortcuts-title' }, 'Keyboard Shortcuts'),\n h('div', { class: 'dialkit-shortcuts-list' },\n rows.map((row) =>\n h('div', { key: row.path, class: 'dialkit-shortcuts-row' }, [\n h('span', { class: 'dialkit-shortcuts-row-key' }, formatShortcutKey(row.shortcut)),\n h('span', { class: 'dialkit-shortcuts-row-label' }, row.label),\n h('span', { class: 'dialkit-shortcuts-row-mode' }, formatInteraction(row.shortcut)),\n ])\n )\n ),\n h('div', { class: 'dialkit-shortcuts-hint' }, 'See pill badges on controls for keys'),\n ]),\n ])\n : null,\n ];\n };\n },\n});\n","import { defineComponent, h, type PropType } from 'vue';\n\nexport type ButtonGroupButton = {\n label: string;\n onClick: () => void;\n};\n\nexport const ButtonGroup = defineComponent({\n name: 'DialKitButtonGroup',\n props: {\n buttons: {\n type: Array as PropType<ButtonGroupButton[]>,\n required: true,\n },\n },\n setup(props) {\n return () => h(\n 'div',\n { class: 'dialkit-button-group' },\n props.buttons.map((button) =>\n h('button', { class: 'dialkit-button', onClick: button.onClick }, button.label)\n )\n );\n },\n});\n"],"mappings":"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","names":["import_vue","import_vue","import_vue","import_motion_v","import_vue","import_vue","import_motion_v","discreteSteps","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_motion_v","import_vue","import_vue","import_motion_v","open","import_vue","target","import_vue","import_vue"]}
|