dialkit 1.0.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.
Files changed (97) hide show
  1. package/README.md +293 -2
  2. package/dist/index.cjs +905 -363
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +46 -9
  5. package/dist/index.d.ts +46 -9
  6. package/dist/index.js +910 -370
  7. package/dist/index.js.map +1 -1
  8. package/dist/solid/index.cjs +1042 -532
  9. package/dist/solid/index.cjs.map +1 -1
  10. package/dist/solid/index.d.cts +36 -3
  11. package/dist/solid/index.d.ts +36 -3
  12. package/dist/solid/index.js +911 -402
  13. package/dist/solid/index.js.map +1 -1
  14. package/dist/store/index.cjs +490 -0
  15. package/dist/store/index.cjs.map +1 -0
  16. package/dist/store/index.d.cts +146 -0
  17. package/dist/store/index.d.ts +146 -0
  18. package/dist/store/index.js +465 -0
  19. package/dist/store/index.js.map +1 -0
  20. package/dist/styles.css +287 -25
  21. package/dist/svelte/Portal.svelte +30 -0
  22. package/dist/svelte/Portal.svelte.d.ts +9 -0
  23. package/dist/svelte/Portal.svelte.d.ts.map +1 -0
  24. package/dist/svelte/components/ButtonGroup.svelte +16 -0
  25. package/dist/svelte/components/ButtonGroup.svelte.d.ts +11 -0
  26. package/dist/svelte/components/ButtonGroup.svelte.d.ts.map +1 -0
  27. package/dist/svelte/components/ColorControl.svelte +81 -0
  28. package/dist/svelte/components/ColorControl.svelte.d.ts +9 -0
  29. package/dist/svelte/components/ColorControl.svelte.d.ts.map +1 -0
  30. package/dist/svelte/components/ControlRenderer.svelte +96 -0
  31. package/dist/svelte/components/ControlRenderer.svelte.d.ts +11 -0
  32. package/dist/svelte/components/ControlRenderer.svelte.d.ts.map +1 -0
  33. package/dist/svelte/components/DialRoot.svelte +79 -0
  34. package/dist/svelte/components/DialRoot.svelte.d.ts +14 -0
  35. package/dist/svelte/components/DialRoot.svelte.d.ts.map +1 -0
  36. package/dist/svelte/components/EasingVisualization.svelte +50 -0
  37. package/dist/svelte/components/EasingVisualization.svelte.d.ts +10 -0
  38. package/dist/svelte/components/EasingVisualization.svelte.d.ts.map +1 -0
  39. package/dist/svelte/components/Folder.svelte +213 -0
  40. package/dist/svelte/components/Folder.svelte.d.ts +14 -0
  41. package/dist/svelte/components/Folder.svelte.d.ts.map +1 -0
  42. package/dist/svelte/components/Panel.svelte +149 -0
  43. package/dist/svelte/components/Panel.svelte.d.ts +10 -0
  44. package/dist/svelte/components/Panel.svelte.d.ts.map +1 -0
  45. package/dist/svelte/components/PresetManager.svelte +157 -0
  46. package/dist/svelte/components/PresetManager.svelte.d.ts +10 -0
  47. package/dist/svelte/components/PresetManager.svelte.d.ts.map +1 -0
  48. package/dist/svelte/components/SegmentedControl.svelte +62 -0
  49. package/dist/svelte/components/SegmentedControl.svelte.d.ts +13 -0
  50. package/dist/svelte/components/SegmentedControl.svelte.d.ts.map +1 -0
  51. package/dist/svelte/components/SelectControl.svelte +152 -0
  52. package/dist/svelte/components/SelectControl.svelte.d.ts +14 -0
  53. package/dist/svelte/components/SelectControl.svelte.d.ts.map +1 -0
  54. package/dist/svelte/components/ShortcutListener.svelte +265 -0
  55. package/dist/svelte/components/ShortcutListener.svelte.d.ts +13 -0
  56. package/dist/svelte/components/ShortcutListener.svelte.d.ts.map +1 -0
  57. package/dist/svelte/components/ShortcutsMenu.svelte +128 -0
  58. package/dist/svelte/components/ShortcutsMenu.svelte.d.ts +7 -0
  59. package/dist/svelte/components/ShortcutsMenu.svelte.d.ts.map +1 -0
  60. package/dist/svelte/components/Slider.svelte +332 -0
  61. package/dist/svelte/components/Slider.svelte.d.ts +16 -0
  62. package/dist/svelte/components/Slider.svelte.d.ts.map +1 -0
  63. package/dist/svelte/components/SpringControl.svelte +126 -0
  64. package/dist/svelte/components/SpringControl.svelte.d.ts +12 -0
  65. package/dist/svelte/components/SpringControl.svelte.d.ts.map +1 -0
  66. package/dist/svelte/components/SpringVisualization.svelte +115 -0
  67. package/dist/svelte/components/SpringVisualization.svelte.d.ts +9 -0
  68. package/dist/svelte/components/SpringVisualization.svelte.d.ts.map +1 -0
  69. package/dist/svelte/components/TextControl.svelte +19 -0
  70. package/dist/svelte/components/TextControl.svelte.d.ts +10 -0
  71. package/dist/svelte/components/TextControl.svelte.d.ts.map +1 -0
  72. package/dist/svelte/components/Toggle.svelte +32 -0
  73. package/dist/svelte/components/Toggle.svelte.d.ts +12 -0
  74. package/dist/svelte/components/Toggle.svelte.d.ts.map +1 -0
  75. package/dist/svelte/components/TransitionControl.svelte +203 -0
  76. package/dist/svelte/components/TransitionControl.svelte.d.ts +12 -0
  77. package/dist/svelte/components/TransitionControl.svelte.d.ts.map +1 -0
  78. package/dist/svelte/components/transitions.d.ts +6 -0
  79. package/dist/svelte/components/transitions.d.ts.map +1 -0
  80. package/dist/svelte/components/transitions.js +14 -0
  81. package/dist/svelte/createDialKit.svelte.d.ts +8 -0
  82. package/dist/svelte/createDialKit.svelte.d.ts.map +1 -0
  83. package/dist/svelte/createDialKit.svelte.js +82 -0
  84. package/dist/svelte/index.d.ts +23 -0
  85. package/dist/svelte/index.d.ts.map +1 -0
  86. package/dist/svelte/index.js +23 -0
  87. package/dist/svelte/shims.d.ts +9 -0
  88. package/dist/svelte/theme-css.d.ts +2 -0
  89. package/dist/svelte/theme-css.d.ts.map +1 -0
  90. package/dist/svelte/theme-css.js +1328 -0
  91. package/dist/vue/index.cjs +3056 -0
  92. package/dist/vue/index.cjs.map +1 -0
  93. package/dist/vue/index.d.cts +675 -0
  94. package/dist/vue/index.d.ts +675 -0
  95. package/dist/vue/index.js +3014 -0
  96. package/dist/vue/index.js.map +1 -0
  97. package/package.json +50 -6
@@ -52,22 +52,22 @@ var DialStoreClass = class {
52
52
  this.activePreset = /* @__PURE__ */ new Map();
53
53
  this.baseValues = /* @__PURE__ */ new Map();
54
54
  }
55
- registerPanel(id, name, config) {
56
- const controls = this.parseConfig(config, "");
55
+ registerPanel(id, name, config, shortcuts) {
56
+ const controls = this.parseConfig(config, "", shortcuts);
57
57
  const values = this.flattenValues(config, "");
58
58
  this.initTransitionModes(config, "", values);
59
- this.panels.set(id, { id, name, controls, values });
59
+ this.panels.set(id, { id, name, controls, values, shortcuts: shortcuts ?? {} });
60
60
  this.snapshots.set(id, { ...values });
61
61
  this.baseValues.set(id, { ...values });
62
62
  this.notifyGlobal();
63
63
  }
64
- updatePanel(id, name, config) {
64
+ updatePanel(id, name, config, shortcuts) {
65
65
  const existing = this.panels.get(id);
66
66
  if (!existing) {
67
- this.registerPanel(id, name, config);
67
+ this.registerPanel(id, name, config, shortcuts);
68
68
  return;
69
69
  }
70
- const controls = this.parseConfig(config, "");
70
+ const controls = this.parseConfig(config, "", shortcuts);
71
71
  const controlsByPath = this.mapControlsByPath(controls);
72
72
  const defaultValues = this.flattenValues(config, "");
73
73
  const nextValues = {};
@@ -89,7 +89,7 @@ var DialStoreClass = class {
89
89
  nextValues[path] = mode;
90
90
  }
91
91
  }
92
- const nextPanel = { id, name, controls, values: nextValues };
92
+ const nextPanel = { id, name, controls, values: nextValues, shortcuts: shortcuts ?? existing.shortcuts };
93
93
  this.panels.set(id, nextPanel);
94
94
  this.snapshots.set(id, { ...nextValues });
95
95
  const previousBaseValues = this.baseValues.get(id) ?? {};
@@ -247,6 +247,44 @@ var DialStoreClass = class {
247
247
  this.activePreset.set(panelId, null);
248
248
  this.notify(panelId);
249
249
  }
250
+ resolveShortcutTarget(key, modifier) {
251
+ for (const panel of this.panels.values()) {
252
+ for (const [path, shortcut] of Object.entries(panel.shortcuts)) {
253
+ if (!shortcut.key) continue;
254
+ if (shortcut.key.toLowerCase() !== key.toLowerCase()) continue;
255
+ const scMod = shortcut.modifier ?? void 0;
256
+ if (scMod !== modifier) continue;
257
+ const control = this.findControlByPath(panel.controls, path);
258
+ if (control) {
259
+ return { panelId: panel.id, path, control };
260
+ }
261
+ }
262
+ }
263
+ return null;
264
+ }
265
+ resolveScrollOnlyTargets() {
266
+ const results = [];
267
+ for (const panel of this.panels.values()) {
268
+ for (const [path, shortcut] of Object.entries(panel.shortcuts)) {
269
+ if ((shortcut.interaction ?? "scroll") !== "scroll-only") continue;
270
+ const control = this.findControlByPath(panel.controls, path);
271
+ if (control) {
272
+ results.push({ panelId: panel.id, path, control, shortcut });
273
+ }
274
+ }
275
+ }
276
+ return results;
277
+ }
278
+ findControlByPath(controls, path) {
279
+ for (const control of controls) {
280
+ if (control.path === path) return control;
281
+ if (control.type === "folder" && control.children) {
282
+ const found = this.findControlByPath(control.children, path);
283
+ if (found) return found;
284
+ }
285
+ }
286
+ return null;
287
+ }
250
288
  notify(panelId) {
251
289
  this.listeners.get(panelId)?.forEach((fn) => fn());
252
290
  }
@@ -268,12 +306,13 @@ var DialStoreClass = class {
268
306
  }
269
307
  }
270
308
  }
271
- parseConfig(config, prefix) {
309
+ parseConfig(config, prefix, shortcuts) {
272
310
  const controls = [];
273
311
  for (const [key, value] of Object.entries(config)) {
274
312
  if (key === "_collapsed") continue;
275
313
  const path = prefix ? `${prefix}.${key}` : key;
276
314
  const label = this.formatLabel(key);
315
+ const shortcut = shortcuts?.[path];
277
316
  if (Array.isArray(value) && value.length <= 4 && typeof value[0] === "number") {
278
317
  controls.push({
279
318
  type: "slider",
@@ -281,13 +320,14 @@ var DialStoreClass = class {
281
320
  label,
282
321
  min: value[1],
283
322
  max: value[2],
284
- step: value[3] ?? this.inferStep(value[1], value[2])
323
+ step: value[3] ?? this.inferStep(value[1], value[2]),
324
+ shortcut
285
325
  });
286
326
  } else if (typeof value === "number") {
287
327
  const { min, max, step } = this.inferRange(value);
288
- controls.push({ type: "slider", path, label, min, max, step });
328
+ controls.push({ type: "slider", path, label, min, max, step, shortcut });
289
329
  } else if (typeof value === "boolean") {
290
- controls.push({ type: "toggle", path, label });
330
+ controls.push({ type: "toggle", path, label, shortcut });
291
331
  } else if (this.isSpringConfig(value) || this.isEasingConfig(value)) {
292
332
  controls.push({ type: "transition", path, label });
293
333
  } else if (this.isActionConfig(value)) {
@@ -312,7 +352,7 @@ var DialStoreClass = class {
312
352
  path,
313
353
  label,
314
354
  defaultOpen,
315
- children: this.parseConfig(folderConfig, path)
355
+ children: this.parseConfig(folderConfig, path, shortcuts)
316
356
  });
317
357
  }
318
358
  }
@@ -469,7 +509,7 @@ function createDialKit(name, config, options) {
469
509
  DialStore.getValues(panelId)
470
510
  );
471
511
  (0, import_solid_js.onMount)(() => {
472
- DialStore.registerPanel(panelId, name, config);
512
+ DialStore.registerPanel(panelId, name, config, options?.shortcuts);
473
513
  setValues(DialStore.getValues(panelId));
474
514
  const unsubValues = DialStore.subscribe(panelId, () => {
475
515
  setValues(DialStore.getValues(panelId));
@@ -533,27 +573,377 @@ function getFirstOptionValue(options) {
533
573
  }
534
574
 
535
575
  // src/solid/components/DialRoot.tsx
576
+ var import_web84 = require("solid-js/web");
577
+ var import_web85 = require("solid-js/web");
578
+ var import_web86 = require("solid-js/web");
579
+ var import_web87 = require("solid-js/web");
580
+ var import_web88 = require("solid-js/web");
581
+ var import_web89 = require("solid-js/web");
582
+ var import_solid_js13 = require("solid-js");
583
+ var import_web90 = require("solid-js/web");
584
+
585
+ // src/solid/components/ShortcutListener.tsx
586
+ var import_web = require("solid-js/web");
587
+ var import_solid_js2 = require("solid-js");
588
+
589
+ // src/shortcut-utils.ts
590
+ function decimalsForStep(step) {
591
+ const s = step.toString();
592
+ const dot = s.indexOf(".");
593
+ return dot === -1 ? 0 : s.length - dot - 1;
594
+ }
595
+ function roundValue(val, step) {
596
+ const raw = Math.round(val / step) * step;
597
+ return parseFloat(raw.toFixed(decimalsForStep(step)));
598
+ }
599
+ function getEffectiveStep(control, shortcut) {
600
+ const min = control.min ?? 0;
601
+ const max = control.max ?? 1;
602
+ const range = max - min;
603
+ const mode = shortcut.mode ?? "normal";
604
+ return mode === "fine" ? range * 0.01 : mode === "coarse" ? range * 0.1 : control.step ?? 1;
605
+ }
606
+ function applySliderDelta(panelId, path, control, effectiveStep, direction) {
607
+ const currentValue = DialStore.getValue(panelId, path);
608
+ const min = control.min ?? 0;
609
+ const max = control.max ?? 1;
610
+ const newValue = Math.max(min, Math.min(max, currentValue + direction * effectiveStep));
611
+ DialStore.updateValue(panelId, path, roundValue(newValue, effectiveStep));
612
+ }
613
+ function snapToDecile(rawValue, min, max) {
614
+ const normalized = (rawValue - min) / (max - min);
615
+ const nearest = Math.round(normalized * 10) / 10;
616
+ if (Math.abs(normalized - nearest) <= 0.03125) {
617
+ return min + nearest * (max - min);
618
+ }
619
+ return rawValue;
620
+ }
621
+ function isInputFocused() {
622
+ const el = document.activeElement;
623
+ if (!el) return false;
624
+ const tag = el.tagName;
625
+ if (tag === "INPUT" || tag === "TEXTAREA") return true;
626
+ if (el.contentEditable === "true") return true;
627
+ return false;
628
+ }
629
+ function getActiveModifier(e) {
630
+ if (e.altKey) return "alt";
631
+ if (e.shiftKey) return "shift";
632
+ if (e.metaKey) return "meta";
633
+ return void 0;
634
+ }
635
+ function findControl(controls, path) {
636
+ for (const control of controls) {
637
+ if (control.path === path) return control;
638
+ if (control.type === "folder" && control.children) {
639
+ const found = findControl(control.children, path);
640
+ if (found) return found;
641
+ }
642
+ }
643
+ return null;
644
+ }
645
+ var DRAG_SENSITIVITY = 4;
646
+ function formatInteractionLabel(interaction) {
647
+ switch (interaction) {
648
+ case "drag":
649
+ return "Drag";
650
+ case "move":
651
+ return "Move";
652
+ case "scroll-only":
653
+ return "Scroll";
654
+ default:
655
+ return "Scroll";
656
+ }
657
+ }
658
+ function formatSliderShortcut(sc) {
659
+ const interaction = sc.interaction ?? "scroll";
660
+ const actionLabel = formatInteractionLabel(interaction);
661
+ if (!sc.key) return actionLabel;
662
+ const mod = formatModifier(sc.modifier);
663
+ return `${mod}${sc.key.toUpperCase()}+${actionLabel}`;
664
+ }
665
+ function formatToggleShortcut(sc) {
666
+ if (!sc.key) return "Press";
667
+ const mod = formatModifier(sc.modifier);
668
+ return `${mod}${sc.key.toUpperCase()}`;
669
+ }
670
+ function formatModifier(modifier) {
671
+ return modifier === "alt" ? "\u2325" : modifier === "shift" ? "\u21E7" : modifier === "meta" ? "\u2318" : "";
672
+ }
673
+
674
+ // src/solid/components/ShortcutListener.tsx
675
+ var defaultState = {
676
+ activePanelId: null,
677
+ activePath: null
678
+ };
679
+ var ShortcutContext = (0, import_solid_js2.createContext)(() => defaultState);
680
+ function useShortcutContext() {
681
+ return (0, import_solid_js2.useContext)(ShortcutContext);
682
+ }
683
+ function ShortcutListener(props) {
684
+ const [activeShortcut, setActiveShortcut] = (0, import_solid_js2.createSignal)(defaultState);
685
+ const activeKeys = /* @__PURE__ */ new Set();
686
+ let isDragging = false;
687
+ let lastMouseX = null;
688
+ let dragAccumulator = 0;
689
+ const resolveActiveTarget = (interaction) => {
690
+ for (const key of activeKeys) {
691
+ const panels = DialStore.getPanels();
692
+ for (const panel of panels) {
693
+ for (const [path, shortcut] of Object.entries(panel.shortcuts)) {
694
+ if (!shortcut.key) continue;
695
+ if (shortcut.key.toLowerCase() !== key) continue;
696
+ if ((shortcut.interaction ?? "scroll") !== interaction) continue;
697
+ const control = DialStore.getPanel(panel.id)?.controls ? findControl(panel.controls, path) : null;
698
+ if (control && control.type === "slider") {
699
+ return {
700
+ panelId: panel.id,
701
+ path,
702
+ control,
703
+ shortcut
704
+ };
705
+ }
706
+ }
707
+ }
708
+ }
709
+ return null;
710
+ };
711
+ (0, import_solid_js2.onMount)(() => {
712
+ const handleKeyDown = (e) => {
713
+ if (isInputFocused()) return;
714
+ const key = e.key.toLowerCase();
715
+ if (key === "arrowleft" || key === "arrowright" || key === "arrowup" || key === "arrowdown") {
716
+ if (activeKeys.size > 0) {
717
+ const target2 = resolveActiveTarget("scroll") || resolveActiveTarget("drag") || resolveActiveTarget("move");
718
+ if (target2 && target2.control.type === "slider") {
719
+ e.preventDefault();
720
+ const direction = key === "arrowright" || key === "arrowup" ? 1 : -1;
721
+ const effectiveStep = getEffectiveStep(target2.control, target2.shortcut);
722
+ applySliderDelta(target2.panelId, target2.path, target2.control, effectiveStep, direction);
723
+ return;
724
+ }
725
+ }
726
+ }
727
+ const wasAlreadyHeld = activeKeys.has(key);
728
+ activeKeys.add(key);
729
+ const modifier = getActiveModifier(e);
730
+ const target = DialStore.resolveShortcutTarget(key, modifier);
731
+ if (target) {
732
+ setActiveShortcut({
733
+ activePanelId: target.panelId,
734
+ activePath: target.path
735
+ });
736
+ if (!wasAlreadyHeld && target.control.type === "toggle") {
737
+ const currentValue = DialStore.getValue(target.panelId, target.path);
738
+ DialStore.updateValue(target.panelId, target.path, !currentValue);
739
+ }
740
+ }
741
+ if (!wasAlreadyHeld) {
742
+ lastMouseX = null;
743
+ dragAccumulator = 0;
744
+ }
745
+ };
746
+ const handleKeyUp = (e) => {
747
+ const key = e.key.toLowerCase();
748
+ activeKeys.delete(key);
749
+ isDragging = false;
750
+ lastMouseX = null;
751
+ dragAccumulator = 0;
752
+ if (activeKeys.size === 0) {
753
+ setActiveShortcut({
754
+ activePanelId: null,
755
+ activePath: null
756
+ });
757
+ } else {
758
+ let found = false;
759
+ for (const remainingKey of activeKeys) {
760
+ const modifier = getActiveModifier(e);
761
+ const target = DialStore.resolveShortcutTarget(remainingKey, modifier);
762
+ if (target) {
763
+ setActiveShortcut({
764
+ activePanelId: target.panelId,
765
+ activePath: target.path
766
+ });
767
+ found = true;
768
+ break;
769
+ }
770
+ }
771
+ if (!found) {
772
+ setActiveShortcut({
773
+ activePanelId: null,
774
+ activePath: null
775
+ });
776
+ }
777
+ }
778
+ };
779
+ const handleWheel = (e) => {
780
+ if (isInputFocused()) return;
781
+ const modifier = getActiveModifier(e);
782
+ if (activeKeys.size > 0) {
783
+ for (const key of activeKeys) {
784
+ const target = DialStore.resolveShortcutTarget(key, modifier);
785
+ if (!target) continue;
786
+ const {
787
+ panelId,
788
+ path,
789
+ control
790
+ } = target;
791
+ const interaction = control.shortcut?.interaction ?? "scroll";
792
+ if (interaction !== "scroll" || control.type !== "slider") continue;
793
+ e.preventDefault();
794
+ const effectiveStep = getEffectiveStep(control, control.shortcut);
795
+ const direction = e.deltaY > 0 ? -1 : 1;
796
+ applySliderDelta(panelId, path, control, effectiveStep, direction);
797
+ return;
798
+ }
799
+ }
800
+ const scrollOnlyTargets = DialStore.resolveScrollOnlyTargets();
801
+ for (const {
802
+ panelId,
803
+ path,
804
+ control,
805
+ shortcut
806
+ } of scrollOnlyTargets) {
807
+ if (control.type !== "slider") continue;
808
+ e.preventDefault();
809
+ const effectiveStep = getEffectiveStep(control, shortcut);
810
+ const direction = e.deltaY > 0 ? -1 : 1;
811
+ applySliderDelta(panelId, path, control, effectiveStep, direction);
812
+ return;
813
+ }
814
+ };
815
+ const handleMouseDown = (e) => {
816
+ if (isInputFocused()) return;
817
+ if (activeKeys.size === 0) return;
818
+ const target = resolveActiveTarget("drag");
819
+ if (target) {
820
+ isDragging = true;
821
+ lastMouseX = e.clientX;
822
+ dragAccumulator = 0;
823
+ e.preventDefault();
824
+ }
825
+ };
826
+ const handleMouseUp = () => {
827
+ isDragging = false;
828
+ lastMouseX = null;
829
+ dragAccumulator = 0;
830
+ };
831
+ const handleMouseMove = (e) => {
832
+ if (isInputFocused()) return;
833
+ if (activeKeys.size === 0) return;
834
+ if (isDragging) {
835
+ const target = resolveActiveTarget("drag");
836
+ if (target && lastMouseX !== null) {
837
+ const deltaX = e.clientX - lastMouseX;
838
+ lastMouseX = e.clientX;
839
+ dragAccumulator += deltaX;
840
+ const effectiveStep = getEffectiveStep(target.control, target.shortcut);
841
+ const steps = Math.trunc(dragAccumulator / DRAG_SENSITIVITY);
842
+ if (steps !== 0) {
843
+ dragAccumulator -= steps * DRAG_SENSITIVITY;
844
+ applySliderDelta(target.panelId, target.path, target.control, effectiveStep, steps);
845
+ }
846
+ }
847
+ return;
848
+ }
849
+ const moveTarget = resolveActiveTarget("move");
850
+ if (moveTarget) {
851
+ if (lastMouseX === null) {
852
+ lastMouseX = e.clientX;
853
+ return;
854
+ }
855
+ const deltaX = e.clientX - lastMouseX;
856
+ lastMouseX = e.clientX;
857
+ dragAccumulator += deltaX;
858
+ const effectiveStep = getEffectiveStep(moveTarget.control, moveTarget.shortcut);
859
+ const steps = Math.trunc(dragAccumulator / DRAG_SENSITIVITY);
860
+ if (steps !== 0) {
861
+ dragAccumulator -= steps * DRAG_SENSITIVITY;
862
+ applySliderDelta(moveTarget.panelId, moveTarget.path, moveTarget.control, effectiveStep, steps);
863
+ }
864
+ }
865
+ };
866
+ const handleWindowBlur = () => {
867
+ activeKeys.clear();
868
+ isDragging = false;
869
+ lastMouseX = null;
870
+ dragAccumulator = 0;
871
+ setActiveShortcut({
872
+ activePanelId: null,
873
+ activePath: null
874
+ });
875
+ };
876
+ window.addEventListener("keydown", handleKeyDown);
877
+ window.addEventListener("keyup", handleKeyUp);
878
+ window.addEventListener("wheel", handleWheel, {
879
+ passive: false
880
+ });
881
+ window.addEventListener("mousedown", handleMouseDown);
882
+ window.addEventListener("mouseup", handleMouseUp);
883
+ window.addEventListener("mousemove", handleMouseMove);
884
+ window.addEventListener("blur", handleWindowBlur);
885
+ (0, import_solid_js2.onCleanup)(() => {
886
+ window.removeEventListener("keydown", handleKeyDown);
887
+ window.removeEventListener("keyup", handleKeyUp);
888
+ window.removeEventListener("wheel", handleWheel);
889
+ window.removeEventListener("mousedown", handleMouseDown);
890
+ window.removeEventListener("mouseup", handleMouseUp);
891
+ window.removeEventListener("mousemove", handleMouseMove);
892
+ window.removeEventListener("blur", handleWindowBlur);
893
+ });
894
+ });
895
+ return (0, import_web.createComponent)(ShortcutContext.Provider, {
896
+ value: activeShortcut,
897
+ get children() {
898
+ return props.children;
899
+ }
900
+ });
901
+ }
902
+
903
+ // src/solid/components/Panel.tsx
904
+ var import_web76 = require("solid-js/web");
905
+ var import_web77 = require("solid-js/web");
536
906
  var import_web78 = require("solid-js/web");
537
907
  var import_web79 = require("solid-js/web");
538
908
  var import_web80 = require("solid-js/web");
539
909
  var import_web81 = require("solid-js/web");
540
910
  var import_web82 = require("solid-js/web");
541
911
  var import_web83 = require("solid-js/web");
542
- var import_solid_js11 = require("solid-js");
543
- var import_web84 = require("solid-js/web");
912
+ var import_solid_js12 = require("solid-js");
913
+ var import_motion5 = require("motion");
544
914
 
545
- // src/solid/components/Panel.tsx
546
- var import_web72 = require("solid-js/web");
547
- var import_web73 = require("solid-js/web");
548
- var import_web74 = require("solid-js/web");
549
- var import_web75 = require("solid-js/web");
550
- var import_web76 = require("solid-js/web");
551
- var import_web77 = require("solid-js/web");
552
- var import_solid_js10 = require("solid-js");
553
- var import_motion6 = require("motion");
915
+ // src/icons.ts
916
+ var ICON_CHEVRON = "M6 9.5L12 15.5L18 9.5";
917
+ var ICON_CHECK = "M5 12.75L10 19L19 5";
918
+ var ICON_CLIPBOARD = {
919
+ board: "M8 6C8 4.34315 9.34315 3 11 3H13C14.6569 3 16 4.34315 16 6V7H8V6Z",
920
+ 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",
921
+ 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"
922
+ };
923
+ var ICON_ADD_PRESET = [
924
+ "M4 6H20",
925
+ "M4 12H10",
926
+ "M15 15L21 15",
927
+ "M18 12V18",
928
+ "M4 18H10"
929
+ ];
930
+ var ICON_TRASH = [
931
+ "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",
932
+ "M10 11V16",
933
+ "M14 11V16",
934
+ "M3.5 6H20.5",
935
+ "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"
936
+ ];
937
+ var ICON_PANEL = {
938
+ 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",
939
+ circles: [
940
+ { cx: "6", cy: "8", r: "0.998596" },
941
+ { cx: "10.4999", cy: "3.5", r: "0.998657" },
942
+ { cx: "9.75015", cy: "12.5", r: "0.997986" }
943
+ ]
944
+ };
554
945
 
555
946
  // src/solid/components/Folder.tsx
556
- var import_web = require("solid-js/web");
557
947
  var import_web2 = require("solid-js/web");
558
948
  var import_web3 = require("solid-js/web");
559
949
  var import_web4 = require("solid-js/web");
@@ -563,21 +953,29 @@ var import_web7 = require("solid-js/web");
563
953
  var import_web8 = require("solid-js/web");
564
954
  var import_web9 = require("solid-js/web");
565
955
  var import_web10 = require("solid-js/web");
566
- var import_solid_js2 = require("solid-js");
956
+ var import_web11 = require("solid-js/web");
957
+ var import_solid_js3 = require("solid-js");
567
958
  var import_motion = require("motion");
568
- var _tmpl$ = /* @__PURE__ */ (0, import_web.template)(`<div class=dialkit-panel-toolbar>`);
569
- var _tmpl$2 = /* @__PURE__ */ (0, import_web.template)(`<div class=dialkit-folder-content><div class=dialkit-folder-inner>`);
570
- var _tmpl$3 = /* @__PURE__ */ (0, import_web.template)(`<div><div><div class=dialkit-folder-header-top>`);
571
- var _tmpl$4 = /* @__PURE__ */ (0, import_web.template)(`<div class=dialkit-folder-title-row><span class="dialkit-folder-title dialkit-folder-title-root">`);
572
- var _tmpl$5 = /* @__PURE__ */ (0, import_web.template)(`<div class=dialkit-folder-title-row><span class=dialkit-folder-title>`);
573
- var _tmpl$6 = /* @__PURE__ */ (0, import_web.template)(`<svg class=dialkit-panel-icon viewBox="0 0 16 16"fill=none><path opacity=0.5 d="M6.84766 11.75C6.78583 11.9899 6.75 12.2408 6.75 12.5C6.75 12.7592 6.78583 13.0101 6.84766 13.25H2C1.58579 13.25 1.25 12.9142 1.25 12.5C1.25 12.0858 1.58579 11.75 2 11.75H6.84766ZM14 11.75C14.4142 11.75 14.75 12.0858 14.75 12.5C14.75 12.9142 14.4142 13.25 14 13.25H12.6523C12.7142 13.0101 12.75 12.7592 12.75 12.5C12.75 12.2408 12.7142 11.9899 12.6523 11.75H14ZM3.09766 7.25C3.03583 7.48994 3 7.74075 3 8C3 8.25925 3.03583 8.51006 3.09766 8.75H2C1.58579 8.75 1.25 8.41421 1.25 8C1.25 7.58579 1.58579 7.25 2 7.25H3.09766ZM14 7.25C14.4142 7.25 14.75 7.58579 14.75 8C14.75 8.41421 14.4142 8.75 14 8.75H8.90234C8.96417 8.51006 9 8.25925 9 8C9 7.74075 8.96417 7.48994 8.90234 7.25H14ZM7.59766 2.75C7.53583 2.98994 7.5 3.24075 7.5 3.5C7.5 3.75925 7.53583 4.01006 7.59766 4.25H2C1.58579 4.25 1.25 3.91421 1.25 3.5C1.25 3.08579 1.58579 2.75 2 2.75H7.59766ZM14 2.75C14.4142 2.75 14.75 3.08579 14.75 3.5C14.75 3.91421 14.4142 4.25 14 4.25H13.4023C13.4642 4.01006 13.5 3.75925 13.5 3.5C13.5 3.24075 13.4642 2.98994 13.4023 2.75H14Z"fill=currentColor></path><circle cx=6 cy=8 r=0.998596 fill=currentColor stroke=currentColor stroke-width=1.25></circle><circle cx=10.4999 cy=3.5 r=0.998657 fill=currentColor stroke=currentColor stroke-width=1.25></circle><circle cx=9.75015 cy=12.5 r=0.997986 fill=currentColor stroke=currentColor stroke-width=1.25>`);
574
- var _tmpl$7 = /* @__PURE__ */ (0, import_web.template)(`<svg class=dialkit-folder-icon viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2.5 stroke-linecap=round stroke-linejoin=round><path d="M6 9.5L12 15.5L18 9.5">`);
575
- var _tmpl$8 = /* @__PURE__ */ (0, import_web.template)(`<div class=dialkit-panel-inner>`);
959
+ var _tmpl$ = /* @__PURE__ */ (0, import_web2.template)(`<div class=dialkit-panel-toolbar>`);
960
+ var _tmpl$2 = /* @__PURE__ */ (0, import_web2.template)(`<div class=dialkit-folder-content><div class=dialkit-folder-inner>`);
961
+ var _tmpl$3 = /* @__PURE__ */ (0, import_web2.template)(`<div><div><div class=dialkit-folder-header-top>`);
962
+ var _tmpl$4 = /* @__PURE__ */ (0, import_web2.template)(`<div class=dialkit-folder-title-row><span class="dialkit-folder-title dialkit-folder-title-root">`);
963
+ var _tmpl$5 = /* @__PURE__ */ (0, import_web2.template)(`<div class=dialkit-folder-title-row><span class=dialkit-folder-title>`);
964
+ var _tmpl$6 = /* @__PURE__ */ (0, import_web2.template)(`<svg class=dialkit-panel-icon viewBox="0 0 16 16"fill=none><path opacity=0.5 fill=currentColor></path><circle fill=currentColor stroke=currentColor stroke-width=1.25></circle><circle fill=currentColor stroke=currentColor stroke-width=1.25></circle><circle fill=currentColor stroke=currentColor stroke-width=1.25>`);
965
+ var _tmpl$7 = /* @__PURE__ */ (0, import_web2.template)(`<svg class=dialkit-folder-icon viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2.5 stroke-linecap=round stroke-linejoin=round><path>`);
966
+ var _tmpl$8 = /* @__PURE__ */ (0, import_web2.template)(`<div class="dialkit-panel-inner dialkit-panel-inline">`);
967
+ var _tmpl$9 = /* @__PURE__ */ (0, import_web2.template)(`<div class=dialkit-panel-inner>`);
576
968
  function Folder(props) {
577
- const [isOpen, setIsOpen] = (0, import_solid_js2.createSignal)(props.defaultOpen ?? true);
578
- const [isCollapsed, setIsCollapsed] = (0, import_solid_js2.createSignal)(!(props.defaultOpen ?? true));
579
- const [contentHeight, setContentHeight] = (0, import_solid_js2.createSignal)(void 0);
580
- const [contentMounted, setContentMounted] = (0, import_solid_js2.createSignal)(props.defaultOpen ?? true);
969
+ const [isOpen, setIsOpen] = (0, import_solid_js3.createSignal)(props.defaultOpen ?? true);
970
+ const [isCollapsed, setIsCollapsed] = (0, import_solid_js3.createSignal)(!(props.defaultOpen ?? true));
971
+ const [contentHeight, setContentHeight] = (0, import_solid_js3.createSignal)(void 0);
972
+ const [windowHeight, setWindowHeight] = (0, import_solid_js3.createSignal)(typeof window !== "undefined" ? window.innerHeight : 800);
973
+ if (props.isRoot) {
974
+ const onResize = () => setWindowHeight(window.innerHeight);
975
+ window.addEventListener("resize", onResize);
976
+ (0, import_solid_js3.onCleanup)(() => window.removeEventListener("resize", onResize));
977
+ }
978
+ const [contentMounted, setContentMounted] = (0, import_solid_js3.createSignal)(props.defaultOpen ?? true);
581
979
  let skipFirstAnim = props.defaultOpen ?? true;
582
980
  let sectionContentRef;
583
981
  let sectionAnim = null;
@@ -586,7 +984,7 @@ function Folder(props) {
586
984
  let chevronInitialized = false;
587
985
  let panelTapAnim = null;
588
986
  let contentRef;
589
- (0, import_solid_js2.createEffect)(() => {
987
+ (0, import_solid_js3.createEffect)(() => {
590
988
  if (!props.isRoot || !isOpen()) return;
591
989
  const el = contentRef;
592
990
  if (!el) return;
@@ -595,9 +993,9 @@ function Folder(props) {
595
993
  setContentHeight((prev) => prev === h ? prev : h);
596
994
  });
597
995
  ro.observe(el);
598
- (0, import_solid_js2.onCleanup)(() => ro.disconnect());
996
+ (0, import_solid_js3.onCleanup)(() => ro.disconnect());
599
997
  });
600
- (0, import_solid_js2.createEffect)(() => {
998
+ (0, import_solid_js3.createEffect)(() => {
601
999
  if (props.isRoot || !folderChevronRef) return;
602
1000
  const open = isOpen();
603
1001
  chevronAnim?.stop();
@@ -613,9 +1011,10 @@ function Folder(props) {
613
1011
  visualDuration: 0.35,
614
1012
  bounce: 0.15
615
1013
  });
616
- (0, import_solid_js2.onCleanup)(() => chevronAnim?.stop());
1014
+ (0, import_solid_js3.onCleanup)(() => chevronAnim?.stop());
617
1015
  });
618
1016
  const handleToggle = () => {
1017
+ if (props.inline && props.isRoot) return;
619
1018
  const next = !isOpen();
620
1019
  setIsOpen(next);
621
1020
  if (next) {
@@ -668,54 +1067,87 @@ function Folder(props) {
668
1067
  };
669
1068
  const folderContent = () => (() => {
670
1069
  var _el$ = _tmpl$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild;
671
- (0, import_web10.use)((el) => {
1070
+ (0, import_web11.use)((el) => {
672
1071
  if (props.isRoot) contentRef = el;
673
1072
  }, _el$);
674
1073
  _el$2.$$click = handleToggle;
675
- (0, import_web8.insert)(_el$3, (() => {
676
- var _c$ = (0, import_web9.memo)(() => !!props.isRoot);
677
- return () => _c$() ? (0, import_web7.createComponent)(import_solid_js2.Show, {
1074
+ (0, import_web9.insert)(_el$3, (() => {
1075
+ var _c$ = (0, import_web10.memo)(() => !!props.isRoot);
1076
+ return () => _c$() ? (0, import_web8.createComponent)(import_solid_js3.Show, {
678
1077
  get when() {
679
1078
  return isOpen();
680
1079
  },
681
1080
  get children() {
682
1081
  var _el$7 = _tmpl$4(), _el$8 = _el$7.firstChild;
683
- (0, import_web8.insert)(_el$8, () => props.title);
1082
+ (0, import_web9.insert)(_el$8, () => props.title);
684
1083
  return _el$7;
685
1084
  }
686
1085
  }) : (() => {
687
1086
  var _el$9 = _tmpl$5(), _el$0 = _el$9.firstChild;
688
- (0, import_web8.insert)(_el$0, () => props.title);
1087
+ (0, import_web9.insert)(_el$0, () => props.title);
689
1088
  return _el$9;
690
1089
  })();
691
1090
  })(), null);
692
- (0, import_web8.insert)(_el$3, (() => {
693
- var _c$2 = (0, import_web9.memo)(() => !!props.isRoot);
694
- return () => _c$2() ? _tmpl$6() : (() => {
695
- var _el$10 = _tmpl$7();
1091
+ (0, import_web9.insert)(_el$3, (() => {
1092
+ var _c$2 = (0, import_web10.memo)(() => !!(props.isRoot && !props.inline));
1093
+ return () => _c$2() && (() => {
1094
+ var _el$1 = _tmpl$6(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$11.nextSibling, _el$13 = _el$12.nextSibling;
1095
+ (0, import_web7.effect)((_p$) => {
1096
+ var _v$3 = ICON_PANEL.path, _v$4 = ICON_PANEL.circles[0].cx, _v$5 = ICON_PANEL.circles[0].cy, _v$6 = ICON_PANEL.circles[0].r, _v$7 = ICON_PANEL.circles[1].cx, _v$8 = ICON_PANEL.circles[1].cy, _v$9 = ICON_PANEL.circles[1].r, _v$0 = ICON_PANEL.circles[2].cx, _v$1 = ICON_PANEL.circles[2].cy, _v$10 = ICON_PANEL.circles[2].r;
1097
+ _v$3 !== _p$.e && (0, import_web4.setAttribute)(_el$10, "d", _p$.e = _v$3);
1098
+ _v$4 !== _p$.t && (0, import_web4.setAttribute)(_el$11, "cx", _p$.t = _v$4);
1099
+ _v$5 !== _p$.a && (0, import_web4.setAttribute)(_el$11, "cy", _p$.a = _v$5);
1100
+ _v$6 !== _p$.o && (0, import_web4.setAttribute)(_el$11, "r", _p$.o = _v$6);
1101
+ _v$7 !== _p$.i && (0, import_web4.setAttribute)(_el$12, "cx", _p$.i = _v$7);
1102
+ _v$8 !== _p$.n && (0, import_web4.setAttribute)(_el$12, "cy", _p$.n = _v$8);
1103
+ _v$9 !== _p$.s && (0, import_web4.setAttribute)(_el$12, "r", _p$.s = _v$9);
1104
+ _v$0 !== _p$.h && (0, import_web4.setAttribute)(_el$13, "cx", _p$.h = _v$0);
1105
+ _v$1 !== _p$.r && (0, import_web4.setAttribute)(_el$13, "cy", _p$.r = _v$1);
1106
+ _v$10 !== _p$.d && (0, import_web4.setAttribute)(_el$13, "r", _p$.d = _v$10);
1107
+ return _p$;
1108
+ }, {
1109
+ e: void 0,
1110
+ t: void 0,
1111
+ a: void 0,
1112
+ o: void 0,
1113
+ i: void 0,
1114
+ n: void 0,
1115
+ s: void 0,
1116
+ h: void 0,
1117
+ r: void 0,
1118
+ d: void 0
1119
+ });
1120
+ return _el$1;
1121
+ })();
1122
+ })(), null);
1123
+ (0, import_web9.insert)(_el$3, (() => {
1124
+ var _c$3 = (0, import_web10.memo)(() => !!!props.isRoot);
1125
+ return () => _c$3() && (() => {
1126
+ var _el$14 = _tmpl$7(), _el$15 = _el$14.firstChild;
696
1127
  var _ref$ = folderChevronRef;
697
- typeof _ref$ === "function" ? (0, import_web10.use)(_ref$, _el$10) : folderChevronRef = _el$10;
698
- return _el$10;
1128
+ typeof _ref$ === "function" ? (0, import_web11.use)(_ref$, _el$14) : folderChevronRef = _el$14;
1129
+ (0, import_web4.setAttribute)(_el$15, "d", ICON_CHEVRON);
1130
+ return _el$14;
699
1131
  })();
700
1132
  })(), null);
701
- (0, import_web8.insert)(_el$2, (0, import_web7.createComponent)(import_solid_js2.Show, {
1133
+ (0, import_web9.insert)(_el$2, (0, import_web8.createComponent)(import_solid_js3.Show, {
702
1134
  get when() {
703
- return (0, import_web9.memo)(() => !!(props.isRoot && props.toolbar))() && isOpen();
1135
+ return (0, import_web10.memo)(() => !!(props.isRoot && props.toolbar))() && isOpen();
704
1136
  },
705
1137
  get children() {
706
1138
  var _el$4 = _tmpl$();
707
1139
  _el$4.$$click = (e) => e.stopPropagation();
708
- (0, import_web8.insert)(_el$4, () => props.toolbar);
1140
+ (0, import_web9.insert)(_el$4, () => props.toolbar);
709
1141
  return _el$4;
710
1142
  }
711
1143
  }), null);
712
- (0, import_web8.insert)(_el$, (0, import_web7.createComponent)(import_solid_js2.Show, {
1144
+ (0, import_web9.insert)(_el$, (0, import_web8.createComponent)(import_solid_js3.Show, {
713
1145
  get when() {
714
- return (0, import_web9.memo)(() => !!props.isRoot)() ? isOpen() : contentMounted();
1146
+ return (0, import_web10.memo)(() => !!props.isRoot)() ? isOpen() : contentMounted();
715
1147
  },
716
1148
  get children() {
717
1149
  var _el$5 = _tmpl$2(), _el$6 = _el$5.firstChild;
718
- (0, import_web10.use)((el) => {
1150
+ (0, import_web11.use)((el) => {
719
1151
  if (props.isRoot) return;
720
1152
  sectionContentRef = el;
721
1153
  if (skipFirstAnim) {
@@ -737,17 +1169,17 @@ function Folder(props) {
737
1169
  }
738
1170
  });
739
1171
  }, _el$5);
740
- (0, import_web8.insert)(_el$6, () => props.children);
741
- (0, import_web6.effect)((_$p) => (0, import_web5.style)(_el$5, !props.isRoot ? {
1172
+ (0, import_web9.insert)(_el$6, () => props.children);
1173
+ (0, import_web7.effect)((_$p) => (0, import_web6.style)(_el$5, !props.isRoot ? {
742
1174
  "clip-path": "inset(0 -20px)"
743
1175
  } : void 0, _$p));
744
1176
  return _el$5;
745
1177
  }
746
1178
  }), null);
747
- (0, import_web6.effect)((_p$) => {
1179
+ (0, import_web7.effect)((_p$) => {
748
1180
  var _v$ = `dialkit-folder ${props.isRoot ? "dialkit-folder-root" : ""}`, _v$2 = `dialkit-folder-header ${props.isRoot ? "dialkit-panel-header" : ""}`;
749
- _v$ !== _p$.e && (0, import_web4.className)(_el$, _p$.e = _v$);
750
- _v$2 !== _p$.t && (0, import_web4.className)(_el$2, _p$.t = _v$2);
1181
+ _v$ !== _p$.e && (0, import_web5.className)(_el$, _p$.e = _v$);
1182
+ _v$2 !== _p$.t && (0, import_web5.className)(_el$2, _p$.t = _v$2);
751
1183
  return _p$;
752
1184
  }, {
753
1185
  e: void 0,
@@ -756,31 +1188,38 @@ function Folder(props) {
756
1188
  return _el$;
757
1189
  })();
758
1190
  if (props.isRoot) {
1191
+ if (props.inline) {
1192
+ return (() => {
1193
+ var _el$16 = _tmpl$8();
1194
+ (0, import_web9.insert)(_el$16, folderContent);
1195
+ return _el$16;
1196
+ })();
1197
+ }
759
1198
  let panelRef;
760
1199
  let rootPanelAnim = null;
761
1200
  let rootPanelInitialized = false;
762
1201
  let lastRootOpen = isOpen();
763
- (0, import_solid_js2.createEffect)(() => {
1202
+ (0, import_solid_js3.createEffect)(() => {
764
1203
  if (!panelRef || isOpen()) return;
765
1204
  const handler = (e) => {
766
1205
  e.stopPropagation();
767
1206
  handleToggle();
768
1207
  };
769
1208
  panelRef.addEventListener("click", handler);
770
- (0, import_solid_js2.onCleanup)(() => panelRef.removeEventListener("click", handler));
1209
+ (0, import_solid_js3.onCleanup)(() => panelRef.removeEventListener("click", handler));
771
1210
  });
772
- (0, import_solid_js2.createEffect)(() => {
1211
+ (0, import_solid_js3.createEffect)(() => {
773
1212
  if (!panelRef) return;
774
1213
  const open = isOpen();
775
- const measuredOpenHeight = contentHeight() !== void 0 ? contentHeight() + 24 : panelRef.getBoundingClientRect().height;
1214
+ const measuredOpenHeight = contentHeight() !== void 0 ? Math.min(contentHeight() + 10, windowHeight() - 32) : panelRef.getBoundingClientRect().height;
776
1215
  const target = {
777
1216
  width: open ? 280 : 42,
778
1217
  height: open ? measuredOpenHeight : 42,
779
1218
  borderRadius: open ? 14 : 21,
780
- boxShadow: open ? "0 8px 32px rgba(0, 0, 0, 0.5)" : "0 4px 16px rgba(0, 0, 0, 0.25)"
1219
+ boxShadow: open ? "var(--dial-shadow)" : "var(--dial-shadow-collapsed)"
781
1220
  };
782
1221
  panelRef.style.cursor = open ? "" : "pointer";
783
- panelRef.style.overflow = open ? "" : "hidden";
1222
+ panelRef.style.overflow = open ? "hidden auto" : "hidden";
784
1223
  if (!rootPanelInitialized) {
785
1224
  rootPanelInitialized = true;
786
1225
  panelRef.style.width = `${target.width}px`;
@@ -807,13 +1246,13 @@ function Folder(props) {
807
1246
  panelRef.style.height = `${target.height}px`;
808
1247
  }
809
1248
  });
810
- (0, import_solid_js2.onCleanup)(() => {
1249
+ (0, import_solid_js3.onCleanup)(() => {
811
1250
  rootPanelAnim?.stop();
812
1251
  panelTapAnim?.stop();
813
1252
  });
814
1253
  return (() => {
815
- var _el$11 = _tmpl$8();
816
- _el$11.addEventListener("pointerleave", () => {
1254
+ var _el$17 = _tmpl$9();
1255
+ _el$17.addEventListener("pointerleave", () => {
817
1256
  if (isOpen()) return;
818
1257
  panelTapAnim?.stop();
819
1258
  panelTapAnim = (0, import_motion.animate)(panelRef, {
@@ -824,7 +1263,7 @@ function Folder(props) {
824
1263
  bounce: 0.3
825
1264
  });
826
1265
  });
827
- _el$11.addEventListener("pointercancel", () => {
1266
+ _el$17.addEventListener("pointercancel", () => {
828
1267
  if (isOpen()) return;
829
1268
  panelTapAnim?.stop();
830
1269
  panelTapAnim = (0, import_motion.animate)(panelRef, {
@@ -835,7 +1274,7 @@ function Folder(props) {
835
1274
  bounce: 0.3
836
1275
  });
837
1276
  });
838
- _el$11.$$pointerup = () => {
1277
+ _el$17.$$pointerup = () => {
839
1278
  if (isOpen()) return;
840
1279
  panelTapAnim?.stop();
841
1280
  panelTapAnim = (0, import_motion.animate)(panelRef, {
@@ -846,7 +1285,7 @@ function Folder(props) {
846
1285
  bounce: 0.3
847
1286
  });
848
1287
  };
849
- _el$11.$$pointerdown = () => {
1288
+ _el$17.$$pointerdown = () => {
850
1289
  if (isOpen()) return;
851
1290
  document.activeElement?.blur?.();
852
1291
  panelTapAnim?.stop();
@@ -859,18 +1298,17 @@ function Folder(props) {
859
1298
  });
860
1299
  };
861
1300
  var _ref$2 = panelRef;
862
- typeof _ref$2 === "function" ? (0, import_web10.use)(_ref$2, _el$11) : panelRef = _el$11;
863
- (0, import_web8.insert)(_el$11, folderContent);
864
- (0, import_web6.effect)(() => (0, import_web3.setAttribute)(_el$11, "data-collapsed", String(isCollapsed())));
865
- return _el$11;
1301
+ typeof _ref$2 === "function" ? (0, import_web11.use)(_ref$2, _el$17) : panelRef = _el$17;
1302
+ (0, import_web9.insert)(_el$17, folderContent);
1303
+ (0, import_web7.effect)(() => (0, import_web4.setAttribute)(_el$17, "data-collapsed", String(isCollapsed())));
1304
+ return _el$17;
866
1305
  })();
867
1306
  }
868
1307
  return folderContent();
869
1308
  }
870
- (0, import_web2.delegateEvents)(["click", "pointerdown", "pointerup"]);
1309
+ (0, import_web3.delegateEvents)(["click", "pointerdown", "pointerup"]);
871
1310
 
872
1311
  // src/solid/components/Slider.tsx
873
- var import_web11 = require("solid-js/web");
874
1312
  var import_web12 = require("solid-js/web");
875
1313
  var import_web13 = require("solid-js/web");
876
1314
  var import_web14 = require("solid-js/web");
@@ -878,33 +1316,18 @@ var import_web15 = require("solid-js/web");
878
1316
  var import_web16 = require("solid-js/web");
879
1317
  var import_web17 = require("solid-js/web");
880
1318
  var import_web18 = require("solid-js/web");
881
- var import_solid_js3 = require("solid-js");
1319
+ var import_web19 = require("solid-js/web");
1320
+ var import_web20 = require("solid-js/web");
1321
+ var import_solid_js4 = require("solid-js");
882
1322
  var import_motion2 = require("motion");
883
- var _tmpl$9 = /* @__PURE__ */ (0, import_web11.template)(`<div class=dialkit-slider-hashmark>`);
884
- var _tmpl$22 = /* @__PURE__ */ (0, import_web11.template)(`<div class=dialkit-slider-wrapper><div><div class=dialkit-slider-hashmarks></div><div class=dialkit-slider-fill style="transition:background 0.15s"></div><div class=dialkit-slider-handle style="transform:translateY(-50%) scaleX(0.25) scaleY(1);opacity:0;background:rgba(255, 255, 255, 0.9)"></div><span class=dialkit-slider-label>`);
885
- var _tmpl$32 = /* @__PURE__ */ (0, import_web11.template)(`<input type=text class=dialkit-slider-input>`);
886
- var _tmpl$42 = /* @__PURE__ */ (0, import_web11.template)(`<span>`);
1323
+ var _tmpl$10 = /* @__PURE__ */ (0, import_web12.template)(`<div class=dialkit-slider-hashmark>`);
1324
+ var _tmpl$22 = /* @__PURE__ */ (0, import_web12.template)(`<span>`);
1325
+ var _tmpl$32 = /* @__PURE__ */ (0, import_web12.template)(`<div class=dialkit-slider-wrapper><div><div class=dialkit-slider-hashmarks></div><div class=dialkit-slider-fill></div><div class=dialkit-slider-handle style="transform:translateY(-50%) scaleX(0.25) scaleY(1);opacity:0"></div><span class=dialkit-slider-label>`);
1326
+ var _tmpl$42 = /* @__PURE__ */ (0, import_web12.template)(`<input type=text class=dialkit-slider-input>`);
887
1327
  var CLICK_THRESHOLD = 3;
888
1328
  var DEAD_ZONE = 32;
889
1329
  var MAX_CURSOR_RANGE = 200;
890
1330
  var MAX_STRETCH = 8;
891
- function decimalsForStep(step) {
892
- const s = step.toString();
893
- const dot = s.indexOf(".");
894
- return dot === -1 ? 0 : s.length - dot - 1;
895
- }
896
- function roundValue(val, step) {
897
- const raw = Math.round(val / step) * step;
898
- return parseFloat(raw.toFixed(decimalsForStep(step)));
899
- }
900
- function snapToDecile(rawValue, min, max) {
901
- const normalized = (rawValue - min) / (max - min);
902
- const nearest = Math.round(normalized * 10) / 10;
903
- if (Math.abs(normalized - nearest) <= 0.03125) {
904
- return min + nearest * (max - min);
905
- }
906
- return rawValue;
907
- }
908
1331
  function Slider(props) {
909
1332
  const min = () => props.min ?? 0;
910
1333
  const max = () => props.max ?? 1;
@@ -916,13 +1339,13 @@ function Slider(props) {
916
1339
  let labelRef;
917
1340
  let valueSpanRef;
918
1341
  let inputRef;
919
- const [isInteracting, setIsInteracting] = (0, import_solid_js3.createSignal)(false);
920
- const [isDragging, setIsDragging] = (0, import_solid_js3.createSignal)(false);
921
- const [isHovered, setIsHovered] = (0, import_solid_js3.createSignal)(false);
922
- const [isValueHovered, setIsValueHovered] = (0, import_solid_js3.createSignal)(false);
923
- const [isValueEditable, setIsValueEditable] = (0, import_solid_js3.createSignal)(false);
924
- const [showInput, setShowInput] = (0, import_solid_js3.createSignal)(false);
925
- const [inputValue, setInputValue] = (0, import_solid_js3.createSignal)("");
1342
+ const [isInteracting, setIsInteracting] = (0, import_solid_js4.createSignal)(false);
1343
+ const [isDragging, setIsDragging] = (0, import_solid_js4.createSignal)(false);
1344
+ const [isHovered, setIsHovered] = (0, import_solid_js4.createSignal)(false);
1345
+ const [isValueHovered, setIsValueHovered] = (0, import_solid_js4.createSignal)(false);
1346
+ const [isValueEditable, setIsValueEditable] = (0, import_solid_js4.createSignal)(false);
1347
+ const [showInput, setShowInput] = (0, import_solid_js4.createSignal)(false);
1348
+ const [inputValue, setInputValue] = (0, import_solid_js4.createSignal)("");
926
1349
  const fillPercent = (0, import_motion2.motionValue)((props.value - min()) / (max() - min()) * 100);
927
1350
  const rubberStretchPx = (0, import_motion2.motionValue)(0);
928
1351
  const handleOpacityMv = (0, import_motion2.motionValue)(0);
@@ -942,7 +1365,7 @@ function Slider(props) {
942
1365
  handleRef.style.opacity = String(handleOpacityMv.get());
943
1366
  handleRef.style.transform = `translateY(-50%) scaleX(${handleScaleXMv.get()}) scaleY(${handleScaleYMv.get()})`;
944
1367
  };
945
- (0, import_solid_js3.createEffect)(() => {
1368
+ (0, import_solid_js4.createEffect)(() => {
946
1369
  if (!isInteracting() && !snapAnim) {
947
1370
  fillPercent.jump((props.value - min()) / (max() - min()) * 100);
948
1371
  }
@@ -1060,11 +1483,11 @@ function Slider(props) {
1060
1483
  const handlePointerCancel = () => {
1061
1484
  cancelInteraction();
1062
1485
  };
1063
- (0, import_solid_js3.createEffect)(() => {
1486
+ (0, import_solid_js4.createEffect)(() => {
1064
1487
  const hovered = isValueHovered();
1065
1488
  const editing = showInput();
1066
1489
  const editable = isValueEditable();
1067
- (0, import_solid_js3.onCleanup)(() => {
1490
+ (0, import_solid_js4.onCleanup)(() => {
1068
1491
  if (hoverTimeout) {
1069
1492
  clearTimeout(hoverTimeout);
1070
1493
  hoverTimeout = null;
@@ -1076,7 +1499,7 @@ function Slider(props) {
1076
1499
  setIsValueEditable(false);
1077
1500
  }
1078
1501
  });
1079
- (0, import_solid_js3.onCleanup)(() => {
1502
+ (0, import_solid_js4.onCleanup)(() => {
1080
1503
  if (hoverTimeout) clearTimeout(hoverTimeout);
1081
1504
  snapAnim?.stop();
1082
1505
  rubberAnim?.stop();
@@ -1084,7 +1507,7 @@ function Slider(props) {
1084
1507
  handleScaleXAnim?.stop();
1085
1508
  handleScaleYAnim?.stop();
1086
1509
  });
1087
- (0, import_solid_js3.onMount)(() => {
1510
+ (0, import_solid_js4.onMount)(() => {
1088
1511
  const unsubFill = fillPercent.on("change", applyFillStyles);
1089
1512
  const unsubRubber = rubberStretchPx.on("change", applyRubberStyles);
1090
1513
  const unsubHandleOpacity = handleOpacityMv.on("change", applyHandleVisualStyles);
@@ -1093,7 +1516,7 @@ function Slider(props) {
1093
1516
  applyFillStyles(fillPercent.get());
1094
1517
  applyRubberStyles(rubberStretchPx.get());
1095
1518
  applyHandleVisualStyles();
1096
- (0, import_solid_js3.onCleanup)(() => {
1519
+ (0, import_solid_js4.onCleanup)(() => {
1097
1520
  unsubFill();
1098
1521
  unsubRubber();
1099
1522
  unsubHandleOpacity();
@@ -1101,7 +1524,7 @@ function Slider(props) {
1101
1524
  unsubHandleScaleY();
1102
1525
  });
1103
1526
  });
1104
- (0, import_solid_js3.createEffect)(() => {
1527
+ (0, import_solid_js4.createEffect)(() => {
1105
1528
  if (showInput() && inputRef) {
1106
1529
  inputRef.focus();
1107
1530
  inputRef.select();
@@ -1157,7 +1580,7 @@ function Slider(props) {
1157
1580
  if (isDragging()) return 0.9;
1158
1581
  return 0.5;
1159
1582
  };
1160
- (0, import_solid_js3.createEffect)(() => {
1583
+ (0, import_solid_js4.createEffect)(() => {
1161
1584
  const targetOpacity = handleOpacity();
1162
1585
  const targetScaleX = isActive() ? 1 : 0.25;
1163
1586
  const targetScaleY = isActive() && valueDodge() ? 0.75 : 1;
@@ -1178,7 +1601,6 @@ function Slider(props) {
1178
1601
  bounce: 0.1
1179
1602
  });
1180
1603
  });
1181
- const fillBackground = () => isActive() ? "rgba(255, 255, 255, 0.15)" : "rgba(255, 255, 255, 0.11)";
1182
1604
  const discreteSteps = () => (max() - min()) / step();
1183
1605
  const hashMarks = () => {
1184
1606
  const ds = discreteSteps();
@@ -1188,8 +1610,8 @@ function Slider(props) {
1188
1610
  }, (_, i) => {
1189
1611
  const pct = (i + 1) * step() / (max() - min()) * 100;
1190
1612
  return (() => {
1191
- var _el$ = _tmpl$9();
1192
- (0, import_web18.setStyleProperty)(_el$, "left", `${pct}%`);
1613
+ var _el$ = _tmpl$10();
1614
+ (0, import_web20.setStyleProperty)(_el$, "left", `${pct}%`);
1193
1615
  return _el$;
1194
1616
  })();
1195
1617
  });
@@ -1199,16 +1621,16 @@ function Slider(props) {
1199
1621
  }, (_, i) => {
1200
1622
  const pct = (i + 1) * 10;
1201
1623
  return (() => {
1202
- var _el$2 = _tmpl$9();
1203
- (0, import_web18.setStyleProperty)(_el$2, "left", `${pct}%`);
1624
+ var _el$2 = _tmpl$10();
1625
+ (0, import_web20.setStyleProperty)(_el$2, "left", `${pct}%`);
1204
1626
  return _el$2;
1205
1627
  })();
1206
1628
  });
1207
1629
  };
1208
1630
  return (() => {
1209
- var _el$3 = _tmpl$22(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling;
1631
+ var _el$3 = _tmpl$32(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling;
1210
1632
  var _ref$ = wrapperRef;
1211
- typeof _ref$ === "function" ? (0, import_web17.use)(_ref$, _el$3) : wrapperRef = _el$3;
1633
+ typeof _ref$ === "function" ? (0, import_web19.use)(_ref$, _el$3) : wrapperRef = _el$3;
1212
1634
  _el$4.addEventListener("mouseleave", () => setIsHovered(false));
1213
1635
  _el$4.addEventListener("mouseenter", () => setIsHovered(true));
1214
1636
  _el$4.addEventListener("pointercancel", handlePointerCancel);
@@ -1216,188 +1638,184 @@ function Slider(props) {
1216
1638
  _el$4.$$pointermove = handlePointerMove;
1217
1639
  _el$4.$$pointerdown = handlePointerDown;
1218
1640
  var _ref$2 = trackRef;
1219
- typeof _ref$2 === "function" ? (0, import_web17.use)(_ref$2, _el$4) : trackRef = _el$4;
1220
- (0, import_web16.insert)(_el$5, hashMarks);
1641
+ typeof _ref$2 === "function" ? (0, import_web19.use)(_ref$2, _el$4) : trackRef = _el$4;
1642
+ (0, import_web18.insert)(_el$5, hashMarks);
1221
1643
  var _ref$3 = fillRef;
1222
- typeof _ref$3 === "function" ? (0, import_web17.use)(_ref$3, _el$6) : fillRef = _el$6;
1644
+ typeof _ref$3 === "function" ? (0, import_web19.use)(_ref$3, _el$6) : fillRef = _el$6;
1223
1645
  var _ref$4 = handleRef;
1224
- typeof _ref$4 === "function" ? (0, import_web17.use)(_ref$4, _el$7) : handleRef = _el$7;
1646
+ typeof _ref$4 === "function" ? (0, import_web19.use)(_ref$4, _el$7) : handleRef = _el$7;
1225
1647
  var _ref$5 = labelRef;
1226
- typeof _ref$5 === "function" ? (0, import_web17.use)(_ref$5, _el$8) : labelRef = _el$8;
1227
- (0, import_web16.insert)(_el$8, () => props.label);
1228
- (0, import_web16.insert)(_el$4, (() => {
1229
- var _c$ = (0, import_web15.memo)(() => !!showInput());
1648
+ typeof _ref$5 === "function" ? (0, import_web19.use)(_ref$5, _el$8) : labelRef = _el$8;
1649
+ (0, import_web18.insert)(_el$8, () => props.label, null);
1650
+ (0, import_web18.insert)(_el$8, (0, import_web15.createComponent)(import_solid_js4.Show, {
1651
+ get when() {
1652
+ return props.shortcut;
1653
+ },
1654
+ get children() {
1655
+ var _el$9 = _tmpl$22();
1656
+ (0, import_web18.insert)(_el$9, () => formatSliderShortcut(props.shortcut));
1657
+ (0, import_web17.effect)(() => (0, import_web16.className)(_el$9, `dialkit-shortcut-pill${props.shortcutActive ? " dialkit-shortcut-pill-active" : ""}`));
1658
+ return _el$9;
1659
+ }
1660
+ }), null);
1661
+ (0, import_web18.insert)(_el$4, (() => {
1662
+ var _c$ = (0, import_web14.memo)(() => !!showInput());
1230
1663
  return () => _c$() ? (() => {
1231
- var _el$9 = _tmpl$32();
1232
- _el$9.$$mousedown = (e) => e.stopPropagation();
1233
- _el$9.$$click = (e) => e.stopPropagation();
1234
- _el$9.addEventListener("blur", handleInputSubmit);
1235
- _el$9.$$keydown = handleInputKeyDown;
1236
- _el$9.$$input = (e) => setInputValue(e.currentTarget.value);
1664
+ var _el$0 = _tmpl$42();
1665
+ _el$0.$$mousedown = (e) => e.stopPropagation();
1666
+ _el$0.$$click = (e) => e.stopPropagation();
1667
+ _el$0.addEventListener("blur", handleInputSubmit);
1668
+ _el$0.$$keydown = handleInputKeyDown;
1669
+ _el$0.$$input = (e) => setInputValue(e.currentTarget.value);
1237
1670
  var _ref$6 = inputRef;
1238
- typeof _ref$6 === "function" ? (0, import_web17.use)(_ref$6, _el$9) : inputRef = _el$9;
1239
- (0, import_web14.effect)(() => _el$9.value = inputValue());
1240
- return _el$9;
1671
+ typeof _ref$6 === "function" ? (0, import_web19.use)(_ref$6, _el$0) : inputRef = _el$0;
1672
+ (0, import_web17.effect)(() => _el$0.value = inputValue());
1673
+ return _el$0;
1241
1674
  })() : (() => {
1242
- var _el$0 = _tmpl$42();
1243
- _el$0.$$mousedown = (e) => isValueEditable() && e.stopPropagation();
1244
- _el$0.$$click = handleValueClick;
1245
- _el$0.addEventListener("mouseleave", () => setIsValueHovered(false));
1246
- _el$0.addEventListener("mouseenter", () => setIsValueHovered(true));
1675
+ var _el$1 = _tmpl$22();
1676
+ _el$1.$$mousedown = (e) => isValueEditable() && e.stopPropagation();
1677
+ _el$1.$$click = handleValueClick;
1678
+ _el$1.addEventListener("mouseleave", () => setIsValueHovered(false));
1679
+ _el$1.addEventListener("mouseenter", () => setIsValueHovered(true));
1247
1680
  var _ref$7 = valueSpanRef;
1248
- typeof _ref$7 === "function" ? (0, import_web17.use)(_ref$7, _el$0) : valueSpanRef = _el$0;
1249
- (0, import_web16.insert)(_el$0, displayValue);
1250
- (0, import_web14.effect)((_p$) => {
1251
- var _v$5 = `dialkit-slider-value ${isValueEditable() ? "dialkit-slider-value-editable" : ""}`, _v$6 = isValueEditable() ? "text" : "default";
1252
- _v$5 !== _p$.e && (0, import_web13.className)(_el$0, _p$.e = _v$5);
1253
- _v$6 !== _p$.t && (0, import_web18.setStyleProperty)(_el$0, "cursor", _p$.t = _v$6);
1681
+ typeof _ref$7 === "function" ? (0, import_web19.use)(_ref$7, _el$1) : valueSpanRef = _el$1;
1682
+ (0, import_web18.insert)(_el$1, displayValue);
1683
+ (0, import_web17.effect)((_p$) => {
1684
+ var _v$4 = `dialkit-slider-value ${isValueEditable() ? "dialkit-slider-value-editable" : ""}`, _v$5 = isValueEditable() ? "text" : "default";
1685
+ _v$4 !== _p$.e && (0, import_web16.className)(_el$1, _p$.e = _v$4);
1686
+ _v$5 !== _p$.t && (0, import_web20.setStyleProperty)(_el$1, "cursor", _p$.t = _v$5);
1254
1687
  return _p$;
1255
1688
  }, {
1256
1689
  e: void 0,
1257
1690
  t: void 0
1258
1691
  });
1259
- return _el$0;
1692
+ return _el$1;
1260
1693
  })();
1261
1694
  })(), null);
1262
- (0, import_web14.effect)((_p$) => {
1263
- var _v$ = `dialkit-slider ${isActive() ? "dialkit-slider-active" : ""}`, _v$2 = fillBackground(), _v$3 = `${fillPercent.get()}%`, _v$4 = `max(5px, calc(${fillPercent.get()}% - 9px))`;
1264
- _v$ !== _p$.e && (0, import_web13.className)(_el$4, _p$.e = _v$);
1265
- _v$2 !== _p$.t && (0, import_web18.setStyleProperty)(_el$6, "background", _p$.t = _v$2);
1266
- _v$3 !== _p$.a && (0, import_web18.setStyleProperty)(_el$6, "width", _p$.a = _v$3);
1267
- _v$4 !== _p$.o && (0, import_web18.setStyleProperty)(_el$7, "left", _p$.o = _v$4);
1695
+ (0, import_web17.effect)((_p$) => {
1696
+ var _v$ = `dialkit-slider ${isActive() ? "dialkit-slider-active" : ""}`, _v$2 = `${fillPercent.get()}%`, _v$3 = `max(5px, calc(${fillPercent.get()}% - 9px))`;
1697
+ _v$ !== _p$.e && (0, import_web16.className)(_el$4, _p$.e = _v$);
1698
+ _v$2 !== _p$.t && (0, import_web20.setStyleProperty)(_el$6, "width", _p$.t = _v$2);
1699
+ _v$3 !== _p$.a && (0, import_web20.setStyleProperty)(_el$7, "left", _p$.a = _v$3);
1268
1700
  return _p$;
1269
1701
  }, {
1270
1702
  e: void 0,
1271
1703
  t: void 0,
1272
- a: void 0,
1273
- o: void 0
1704
+ a: void 0
1274
1705
  });
1275
1706
  return _el$3;
1276
1707
  })();
1277
1708
  }
1278
- (0, import_web12.delegateEvents)(["pointerdown", "pointermove", "pointerup", "input", "keydown", "click", "mousedown"]);
1709
+ (0, import_web13.delegateEvents)(["pointerdown", "pointermove", "pointerup", "input", "keydown", "click", "mousedown"]);
1279
1710
 
1280
1711
  // src/solid/components/Toggle.tsx
1281
- var import_web27 = require("solid-js/web");
1282
- var import_web28 = require("solid-js/web");
1283
1712
  var import_web29 = require("solid-js/web");
1284
1713
  var import_web30 = require("solid-js/web");
1714
+ var import_web31 = require("solid-js/web");
1715
+ var import_web32 = require("solid-js/web");
1716
+ var import_web33 = require("solid-js/web");
1717
+ var import_web34 = require("solid-js/web");
1718
+ var import_solid_js6 = require("solid-js");
1285
1719
 
1286
1720
  // src/solid/components/SegmentedControl.tsx
1287
- var import_web19 = require("solid-js/web");
1288
- var import_web20 = require("solid-js/web");
1289
1721
  var import_web21 = require("solid-js/web");
1290
1722
  var import_web22 = require("solid-js/web");
1291
1723
  var import_web23 = require("solid-js/web");
1292
1724
  var import_web24 = require("solid-js/web");
1293
1725
  var import_web25 = require("solid-js/web");
1294
1726
  var import_web26 = require("solid-js/web");
1295
- var import_solid_js4 = require("solid-js");
1296
- var import_motion3 = require("motion");
1297
- var _tmpl$10 = /* @__PURE__ */ (0, import_web19.template)(`<div class=dialkit-segmented><div class=dialkit-segmented-pill style=left:0px;width:0px>`);
1298
- var _tmpl$23 = /* @__PURE__ */ (0, import_web19.template)(`<button class=dialkit-segmented-button>`);
1727
+ var import_web27 = require("solid-js/web");
1728
+ var import_web28 = require("solid-js/web");
1729
+ var import_solid_js5 = require("solid-js");
1730
+ var _tmpl$11 = /* @__PURE__ */ (0, import_web21.template)(`<div class=dialkit-segmented>`);
1731
+ var _tmpl$23 = /* @__PURE__ */ (0, import_web21.template)(`<div class=dialkit-segmented-pill>`);
1732
+ var _tmpl$33 = /* @__PURE__ */ (0, import_web21.template)(`<button class=dialkit-segmented-button>`);
1299
1733
  function SegmentedControl(props) {
1300
1734
  let containerRef;
1301
- let pillRef;
1302
- const buttonRefs = /* @__PURE__ */ new Map();
1303
- const [pillReady, setPillReady] = (0, import_solid_js4.createSignal)(false);
1304
1735
  let hasAnimated = false;
1305
- let pillAnim = null;
1306
- const measurePill = () => {
1307
- const button = buttonRefs.get(props.value);
1308
- if (!button || !containerRef) return null;
1309
- const containerRect = containerRef.getBoundingClientRect();
1310
- const buttonRect = button.getBoundingClientRect();
1311
- return {
1312
- left: buttonRect.left - containerRect.left,
1313
- width: buttonRect.width
1314
- };
1315
- };
1316
- const setPillImmediate = (left, width) => {
1317
- if (!pillRef) return;
1318
- pillRef.style.left = `${left}px`;
1319
- pillRef.style.width = `${width}px`;
1320
- };
1321
- const updatePill = (shouldAnimate) => {
1322
- const next = measurePill();
1323
- if (!next) return;
1324
- if (!pillReady()) {
1325
- setPillImmediate(next.left, next.width);
1326
- setPillReady(true);
1327
- return;
1328
- }
1329
- if (!shouldAnimate || !hasAnimated) {
1330
- pillAnim?.stop();
1331
- pillAnim = null;
1332
- setPillImmediate(next.left, next.width);
1333
- return;
1334
- }
1335
- pillAnim?.stop();
1336
- pillAnim = (0, import_motion3.animate)(pillRef, {
1337
- left: next.left,
1338
- width: next.width
1339
- }, {
1340
- type: "spring",
1341
- visualDuration: 0.2,
1342
- bounce: 0.15,
1343
- onComplete: () => {
1344
- pillAnim = null;
1345
- }
1736
+ const [pillStyle, setPillStyle] = (0, import_solid_js5.createSignal)(null);
1737
+ const measure = () => {
1738
+ if (!containerRef) return;
1739
+ const activeButton = containerRef.querySelector('[data-active="true"]');
1740
+ if (!activeButton) return;
1741
+ setPillStyle({
1742
+ left: activeButton.offsetLeft,
1743
+ width: activeButton.offsetWidth
1346
1744
  });
1347
1745
  };
1348
- (0, import_solid_js4.createRenderEffect)(() => {
1349
- const _ = props.value;
1350
- if (!pillReady()) return;
1351
- updatePill(true);
1746
+ (0, import_solid_js5.createEffect)(() => {
1747
+ void props.value;
1748
+ void props.options.length;
1749
+ measure();
1352
1750
  });
1353
- (0, import_solid_js4.onMount)(() => {
1354
- requestAnimationFrame(() => {
1355
- updatePill(false);
1751
+ const transition = () => {
1752
+ void props.value;
1753
+ if (!hasAnimated) {
1356
1754
  hasAnimated = true;
1357
- });
1358
- if (typeof ResizeObserver === "undefined") return;
1359
- const ro = new ResizeObserver(() => updatePill(false));
1360
- ro.observe(containerRef);
1361
- (0, import_solid_js4.onCleanup)(() => {
1362
- pillAnim?.stop();
1363
- ro.disconnect();
1364
- });
1365
- });
1755
+ return "none";
1756
+ }
1757
+ return "left 0.2s cubic-bezier(0.25, 1, 0.5, 1), width 0.2s cubic-bezier(0.25, 1, 0.5, 1)";
1758
+ };
1366
1759
  return (() => {
1367
- var _el$ = _tmpl$10(), _el$2 = _el$.firstChild;
1760
+ var _el$ = _tmpl$11();
1368
1761
  var _ref$ = containerRef;
1369
- typeof _ref$ === "function" ? (0, import_web26.use)(_ref$, _el$) : containerRef = _el$;
1370
- var _ref$2 = pillRef;
1371
- typeof _ref$2 === "function" ? (0, import_web26.use)(_ref$2, _el$2) : pillRef = _el$2;
1372
- (0, import_web24.insert)(_el$, (0, import_web25.createComponent)(import_solid_js4.For, {
1762
+ typeof _ref$ === "function" ? (0, import_web28.use)(_ref$, _el$) : containerRef = _el$;
1763
+ (0, import_web26.insert)(_el$, (0, import_web27.createComponent)(import_solid_js5.Show, {
1764
+ get when() {
1765
+ return pillStyle();
1766
+ },
1767
+ children: (style) => (() => {
1768
+ var _el$2 = _tmpl$23();
1769
+ (0, import_web25.effect)((_p$) => {
1770
+ var _v$ = `${style().left}px`, _v$2 = `${style().width}px`, _v$3 = transition();
1771
+ _v$ !== _p$.e && (0, import_web24.setStyleProperty)(_el$2, "left", _p$.e = _v$);
1772
+ _v$2 !== _p$.t && (0, import_web24.setStyleProperty)(_el$2, "width", _p$.t = _v$2);
1773
+ _v$3 !== _p$.a && (0, import_web24.setStyleProperty)(_el$2, "transition", _p$.a = _v$3);
1774
+ return _p$;
1775
+ }, {
1776
+ e: void 0,
1777
+ t: void 0,
1778
+ a: void 0
1779
+ });
1780
+ return _el$2;
1781
+ })()
1782
+ }), null);
1783
+ (0, import_web26.insert)(_el$, (0, import_web27.createComponent)(import_solid_js5.For, {
1373
1784
  get each() {
1374
1785
  return props.options;
1375
1786
  },
1376
1787
  children: (option) => (() => {
1377
- var _el$3 = _tmpl$23();
1788
+ var _el$3 = _tmpl$33();
1378
1789
  _el$3.$$click = () => props.onChange(option.value);
1379
- (0, import_web26.use)((el) => {
1380
- if (!el) return;
1381
- buttonRefs.set(option.value, el);
1382
- }, _el$3);
1383
- (0, import_web24.insert)(_el$3, () => option.label);
1384
- (0, import_web23.effect)(() => (0, import_web21.setAttribute)(_el$3, "data-active", String(props.value === option.value)));
1790
+ (0, import_web26.insert)(_el$3, () => option.label);
1791
+ (0, import_web25.effect)(() => (0, import_web23.setAttribute)(_el$3, "data-active", String(props.value === option.value)));
1385
1792
  return _el$3;
1386
1793
  })()
1387
1794
  }), null);
1388
- (0, import_web23.effect)((_$p) => (0, import_web22.setStyleProperty)(_el$2, "visibility", pillReady() ? "visible" : "hidden"));
1389
1795
  return _el$;
1390
1796
  })();
1391
1797
  }
1392
- (0, import_web20.delegateEvents)(["click"]);
1798
+ (0, import_web22.delegateEvents)(["click"]);
1393
1799
 
1394
1800
  // src/solid/components/Toggle.tsx
1395
- var _tmpl$11 = /* @__PURE__ */ (0, import_web27.template)(`<div class=dialkit-labeled-control><span class=dialkit-labeled-control-label>`);
1801
+ var _tmpl$12 = /* @__PURE__ */ (0, import_web29.template)(`<span>`);
1802
+ var _tmpl$24 = /* @__PURE__ */ (0, import_web29.template)(`<div class=dialkit-labeled-control><span class=dialkit-labeled-control-label>`);
1396
1803
  function Toggle(props) {
1397
1804
  return (() => {
1398
- var _el$ = _tmpl$11(), _el$2 = _el$.firstChild;
1399
- (0, import_web30.insert)(_el$2, () => props.label);
1400
- (0, import_web30.insert)(_el$, (0, import_web28.createComponent)(SegmentedControl, {
1805
+ var _el$ = _tmpl$24(), _el$2 = _el$.firstChild;
1806
+ (0, import_web34.insert)(_el$2, () => props.label, null);
1807
+ (0, import_web34.insert)(_el$2, (0, import_web31.createComponent)(import_solid_js6.Show, {
1808
+ get when() {
1809
+ return props.shortcut;
1810
+ },
1811
+ get children() {
1812
+ var _el$3 = _tmpl$12();
1813
+ (0, import_web34.insert)(_el$3, () => formatToggleShortcut(props.shortcut));
1814
+ (0, import_web33.effect)(() => (0, import_web32.className)(_el$3, `dialkit-shortcut-pill${props.shortcutActive ? " dialkit-shortcut-pill-active" : ""}`));
1815
+ return _el$3;
1816
+ }
1817
+ }), null);
1818
+ (0, import_web34.insert)(_el$, (0, import_web31.createComponent)(SegmentedControl, {
1401
1819
  options: [{
1402
1820
  value: "off",
1403
1821
  label: "Off"
@@ -1415,20 +1833,20 @@ function Toggle(props) {
1415
1833
  }
1416
1834
 
1417
1835
  // src/solid/components/SpringControl.tsx
1836
+ var import_web39 = require("solid-js/web");
1837
+ var import_web40 = require("solid-js/web");
1838
+ var import_web41 = require("solid-js/web");
1839
+ var import_web42 = require("solid-js/web");
1840
+ var import_solid_js7 = require("solid-js");
1841
+
1842
+ // src/solid/components/SpringVisualization.tsx
1418
1843
  var import_web35 = require("solid-js/web");
1419
1844
  var import_web36 = require("solid-js/web");
1420
1845
  var import_web37 = require("solid-js/web");
1421
1846
  var import_web38 = require("solid-js/web");
1422
- var import_solid_js5 = require("solid-js");
1423
-
1424
- // src/solid/components/SpringVisualization.tsx
1425
- var import_web31 = require("solid-js/web");
1426
- var import_web32 = require("solid-js/web");
1427
- var import_web33 = require("solid-js/web");
1428
- var import_web34 = require("solid-js/web");
1429
- var _tmpl$12 = /* @__PURE__ */ (0, import_web31.template)(`<svg><line y1=0 y2=140 stroke="rgba(255, 255, 255, 0.08)"stroke-width=1></svg>`, false, true, false);
1430
- var _tmpl$24 = /* @__PURE__ */ (0, import_web31.template)(`<svg><line x1=0 x2=256 stroke="rgba(255, 255, 255, 0.08)"stroke-width=1></svg>`, false, true, false);
1431
- var _tmpl$33 = /* @__PURE__ */ (0, import_web31.template)(`<svg viewBox="0 0 256 140"class=dialkit-spring-viz><line x1=0 y1=70 x2=256 y2=70 stroke="rgba(255, 255, 255, 0.15)"stroke-width=1 stroke-dasharray=4,4></line><path fill=none stroke="rgba(255, 255, 255, 0.6)"stroke-width=2 stroke-linecap=round stroke-linejoin=round>`);
1847
+ var _tmpl$13 = /* @__PURE__ */ (0, import_web35.template)(`<svg><line y1=0 y2=140 stroke="rgba(255, 255, 255, 0.08)"stroke-width=1></svg>`, false, true, false);
1848
+ var _tmpl$25 = /* @__PURE__ */ (0, import_web35.template)(`<svg><line x1=0 x2=256 stroke="rgba(255, 255, 255, 0.08)"stroke-width=1></svg>`, false, true, false);
1849
+ var _tmpl$34 = /* @__PURE__ */ (0, import_web35.template)(`<svg viewBox="0 0 256 140"class=dialkit-spring-viz><line x1=0 y1=70 x2=256 y2=70 stroke="rgba(255, 255, 255, 0.15)"stroke-width=1 stroke-dasharray=4,4></line><path fill=none stroke="rgba(255, 255, 255, 0.6)"stroke-width=2 stroke-linecap=round stroke-linejoin=round>`);
1432
1850
  function generateSpringCurve(stiffness, damping, mass, duration) {
1433
1851
  const points = [];
1434
1852
  const steps = 100;
@@ -1486,66 +1904,62 @@ function SpringVisualization(props) {
1486
1904
  const x = width / 4 * i;
1487
1905
  const y = height / 4 * i;
1488
1906
  lines.push((() => {
1489
- var _el$ = _tmpl$12();
1490
- (0, import_web34.setAttribute)(_el$, "x1", x);
1491
- (0, import_web34.setAttribute)(_el$, "x2", x);
1907
+ var _el$ = _tmpl$13();
1908
+ (0, import_web38.setAttribute)(_el$, "x1", x);
1909
+ (0, import_web38.setAttribute)(_el$, "x2", x);
1492
1910
  return _el$;
1493
1911
  })(), (() => {
1494
- var _el$2 = _tmpl$24();
1495
- (0, import_web34.setAttribute)(_el$2, "y1", y);
1496
- (0, import_web34.setAttribute)(_el$2, "y2", y);
1912
+ var _el$2 = _tmpl$25();
1913
+ (0, import_web38.setAttribute)(_el$2, "y1", y);
1914
+ (0, import_web38.setAttribute)(_el$2, "y2", y);
1497
1915
  return _el$2;
1498
1916
  })());
1499
1917
  }
1500
1918
  return lines;
1501
1919
  };
1502
1920
  return (() => {
1503
- var _el$3 = _tmpl$33(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling;
1504
- (0, import_web33.insert)(_el$3, gridLines, _el$4);
1505
- (0, import_web32.effect)(() => (0, import_web34.setAttribute)(_el$5, "d", params()));
1921
+ var _el$3 = _tmpl$34(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling;
1922
+ (0, import_web37.insert)(_el$3, gridLines, _el$4);
1923
+ (0, import_web36.effect)(() => (0, import_web38.setAttribute)(_el$5, "d", params()));
1506
1924
  return _el$3;
1507
1925
  })();
1508
1926
  }
1509
1927
 
1510
1928
  // src/solid/components/SpringControl.tsx
1511
- var _tmpl$13 = /* @__PURE__ */ (0, import_web35.template)(`<div style=display:flex;flex-direction:column;gap:6px><div class=dialkit-labeled-control><span class=dialkit-labeled-control-label>Type`);
1929
+ var _tmpl$14 = /* @__PURE__ */ (0, import_web39.template)(`<div style=display:flex;flex-direction:column;gap:6px><div class=dialkit-labeled-control><span class=dialkit-labeled-control-label>Type`);
1512
1930
  function SpringControl(props) {
1513
- const [mode, setMode] = (0, import_solid_js5.createSignal)(DialStore.getSpringMode(props.panelId, props.path));
1514
- (0, import_solid_js5.onMount)(() => {
1931
+ const [mode, setMode] = (0, import_solid_js7.createSignal)(DialStore.getSpringMode(props.panelId, props.path));
1932
+ (0, import_solid_js7.onMount)(() => {
1515
1933
  const unsub = DialStore.subscribe(props.panelId, () => {
1516
1934
  setMode(DialStore.getSpringMode(props.panelId, props.path));
1517
1935
  });
1518
- (0, import_solid_js5.onCleanup)(unsub);
1936
+ (0, import_solid_js7.onCleanup)(unsub);
1519
1937
  });
1520
1938
  const isSimpleMode = () => mode() === "simple";
1939
+ const cache = {
1940
+ simple: props.spring.visualDuration !== void 0 ? props.spring : {
1941
+ type: "spring",
1942
+ visualDuration: 0.3,
1943
+ bounce: 0.2
1944
+ },
1945
+ advanced: props.spring.stiffness !== void 0 ? props.spring : {
1946
+ type: "spring",
1947
+ stiffness: 200,
1948
+ damping: 25,
1949
+ mass: 1
1950
+ }
1951
+ };
1521
1952
  const handleModeChange = (newMode) => {
1953
+ if (isSimpleMode()) {
1954
+ cache.simple = props.spring;
1955
+ } else {
1956
+ cache.advanced = props.spring;
1957
+ }
1522
1958
  DialStore.updateSpringMode(props.panelId, props.path, newMode);
1523
1959
  if (newMode === "simple") {
1524
- const {
1525
- stiffness,
1526
- damping,
1527
- mass,
1528
- ...rest
1529
- } = props.spring;
1530
- props.onChange({
1531
- ...rest,
1532
- type: "spring",
1533
- visualDuration: props.spring.visualDuration ?? 0.3,
1534
- bounce: props.spring.bounce ?? 0.2
1535
- });
1960
+ props.onChange(cache.simple);
1536
1961
  } else {
1537
- const {
1538
- visualDuration,
1539
- bounce,
1540
- ...rest
1541
- } = props.spring;
1542
- props.onChange({
1543
- ...rest,
1544
- type: "spring",
1545
- stiffness: props.spring.stiffness ?? 200,
1546
- damping: props.spring.damping ?? 25,
1547
- mass: props.spring.mass ?? 1
1548
- });
1962
+ props.onChange(cache.advanced);
1549
1963
  }
1550
1964
  };
1551
1965
  const handleUpdate = (key, value) => {
@@ -1572,14 +1986,14 @@ function SpringControl(props) {
1572
1986
  });
1573
1987
  }
1574
1988
  };
1575
- return (0, import_web38.createComponent)(Folder, {
1989
+ return (0, import_web42.createComponent)(Folder, {
1576
1990
  get title() {
1577
1991
  return props.label;
1578
1992
  },
1579
1993
  defaultOpen: true,
1580
1994
  get children() {
1581
- var _el$ = _tmpl$13(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild;
1582
- (0, import_web37.insert)(_el$, (0, import_web38.createComponent)(SpringVisualization, {
1995
+ var _el$ = _tmpl$14(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild;
1996
+ (0, import_web41.insert)(_el$, (0, import_web42.createComponent)(SpringVisualization, {
1583
1997
  get spring() {
1584
1998
  return props.spring;
1585
1999
  },
@@ -1587,7 +2001,7 @@ function SpringControl(props) {
1587
2001
  return isSimpleMode();
1588
2002
  }
1589
2003
  }), _el$2);
1590
- (0, import_web37.insert)(_el$2, (0, import_web38.createComponent)(SegmentedControl, {
2004
+ (0, import_web41.insert)(_el$2, (0, import_web42.createComponent)(SegmentedControl, {
1591
2005
  options: [{
1592
2006
  value: "simple",
1593
2007
  label: "Time"
@@ -1600,9 +2014,9 @@ function SpringControl(props) {
1600
2014
  },
1601
2015
  onChange: handleModeChange
1602
2016
  }), null);
1603
- (0, import_web37.insert)(_el$, (() => {
1604
- var _c$ = (0, import_web36.memo)(() => !!isSimpleMode());
1605
- return () => _c$() ? [(0, import_web38.createComponent)(Slider, {
2017
+ (0, import_web41.insert)(_el$, (() => {
2018
+ var _c$ = (0, import_web40.memo)(() => !!isSimpleMode());
2019
+ return () => _c$() ? [(0, import_web42.createComponent)(Slider, {
1606
2020
  label: "Duration",
1607
2021
  get value() {
1608
2022
  return props.spring.visualDuration ?? 0.3;
@@ -1612,7 +2026,7 @@ function SpringControl(props) {
1612
2026
  max: 1,
1613
2027
  step: 0.05,
1614
2028
  unit: "s"
1615
- }), (0, import_web38.createComponent)(Slider, {
2029
+ }), (0, import_web42.createComponent)(Slider, {
1616
2030
  label: "Bounce",
1617
2031
  get value() {
1618
2032
  return props.spring.bounce ?? 0.2;
@@ -1621,7 +2035,7 @@ function SpringControl(props) {
1621
2035
  min: 0,
1622
2036
  max: 1,
1623
2037
  step: 0.05
1624
- })] : [(0, import_web38.createComponent)(Slider, {
2038
+ })] : [(0, import_web42.createComponent)(Slider, {
1625
2039
  label: "Stiffness",
1626
2040
  get value() {
1627
2041
  return props.spring.stiffness ?? 400;
@@ -1630,7 +2044,7 @@ function SpringControl(props) {
1630
2044
  min: 1,
1631
2045
  max: 1e3,
1632
2046
  step: 10
1633
- }), (0, import_web38.createComponent)(Slider, {
2047
+ }), (0, import_web42.createComponent)(Slider, {
1634
2048
  label: "Damping",
1635
2049
  get value() {
1636
2050
  return props.spring.damping ?? 17;
@@ -1639,7 +2053,7 @@ function SpringControl(props) {
1639
2053
  min: 1,
1640
2054
  max: 100,
1641
2055
  step: 1
1642
- }), (0, import_web38.createComponent)(Slider, {
2056
+ }), (0, import_web42.createComponent)(Slider, {
1643
2057
  label: "Mass",
1644
2058
  get value() {
1645
2059
  return props.spring.mass ?? 1;
@@ -1656,44 +2070,44 @@ function SpringControl(props) {
1656
2070
  }
1657
2071
 
1658
2072
  // src/solid/components/TextControl.tsx
1659
- var import_web39 = require("solid-js/web");
1660
- var import_web40 = require("solid-js/web");
1661
- var import_web41 = require("solid-js/web");
1662
- var import_web42 = require("solid-js/web");
1663
2073
  var import_web43 = require("solid-js/web");
1664
- var import_solid_js6 = require("solid-js");
1665
- var _tmpl$14 = /* @__PURE__ */ (0, import_web39.template)(`<div class=dialkit-text-control><label class=dialkit-text-label></label><input type=text class=dialkit-text-input>`);
2074
+ var import_web44 = require("solid-js/web");
2075
+ var import_web45 = require("solid-js/web");
2076
+ var import_web46 = require("solid-js/web");
2077
+ var import_web47 = require("solid-js/web");
2078
+ var import_solid_js8 = require("solid-js");
2079
+ var _tmpl$15 = /* @__PURE__ */ (0, import_web43.template)(`<div class=dialkit-text-control><label class=dialkit-text-label></label><input type=text class=dialkit-text-input>`);
1666
2080
  function TextControl(props) {
1667
- const inputId = (0, import_solid_js6.createUniqueId)();
2081
+ const inputId = (0, import_solid_js8.createUniqueId)();
1668
2082
  return (() => {
1669
- var _el$ = _tmpl$14(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling;
1670
- (0, import_web43.setAttribute)(_el$2, "for", inputId);
1671
- (0, import_web42.insert)(_el$2, () => props.label);
2083
+ var _el$ = _tmpl$15(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling;
2084
+ (0, import_web47.setAttribute)(_el$2, "for", inputId);
2085
+ (0, import_web46.insert)(_el$2, () => props.label);
1672
2086
  _el$3.$$input = (e) => props.onChange(e.currentTarget.value);
1673
- (0, import_web43.setAttribute)(_el$3, "id", inputId);
1674
- (0, import_web41.effect)(() => (0, import_web43.setAttribute)(_el$3, "placeholder", props.placeholder));
1675
- (0, import_web41.effect)(() => _el$3.value = props.value);
2087
+ (0, import_web47.setAttribute)(_el$3, "id", inputId);
2088
+ (0, import_web45.effect)(() => (0, import_web47.setAttribute)(_el$3, "placeholder", props.placeholder));
2089
+ (0, import_web45.effect)(() => _el$3.value = props.value);
1676
2090
  return _el$;
1677
2091
  })();
1678
2092
  }
1679
- (0, import_web40.delegateEvents)(["input"]);
2093
+ (0, import_web44.delegateEvents)(["input"]);
1680
2094
 
1681
2095
  // src/solid/components/SelectControl.tsx
1682
- var import_web44 = require("solid-js/web");
1683
- var import_web45 = require("solid-js/web");
1684
- var import_web46 = require("solid-js/web");
1685
- var import_web47 = require("solid-js/web");
1686
2096
  var import_web48 = require("solid-js/web");
1687
2097
  var import_web49 = require("solid-js/web");
1688
2098
  var import_web50 = require("solid-js/web");
1689
2099
  var import_web51 = require("solid-js/web");
1690
2100
  var import_web52 = require("solid-js/web");
1691
- var import_solid_js7 = require("solid-js");
1692
2101
  var import_web53 = require("solid-js/web");
1693
- var import_motion4 = require("motion");
1694
- var _tmpl$15 = /* @__PURE__ */ (0, import_web44.template)(`<div class=dialkit-select-dropdown>`);
1695
- var _tmpl$25 = /* @__PURE__ */ (0, import_web44.template)(`<div class=dialkit-select-row><button class=dialkit-select-trigger><span class=dialkit-select-label></span><div class=dialkit-select-right><span class=dialkit-select-value></span><svg class=dialkit-select-chevron viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2.5 stroke-linecap=round stroke-linejoin=round><path d="M6 9.5L12 15.5L18 9.5">`);
1696
- var _tmpl$34 = /* @__PURE__ */ (0, import_web44.template)(`<button class=dialkit-select-option>`);
2102
+ var import_web54 = require("solid-js/web");
2103
+ var import_web55 = require("solid-js/web");
2104
+ var import_web56 = require("solid-js/web");
2105
+ var import_solid_js9 = require("solid-js");
2106
+ var import_web57 = require("solid-js/web");
2107
+ var import_motion3 = require("motion");
2108
+ var _tmpl$16 = /* @__PURE__ */ (0, import_web48.template)(`<div class=dialkit-select-dropdown>`);
2109
+ var _tmpl$26 = /* @__PURE__ */ (0, import_web48.template)(`<div class=dialkit-select-row><button class=dialkit-select-trigger><span class=dialkit-select-label></span><div class=dialkit-select-right><span class=dialkit-select-value></span><svg class=dialkit-select-chevron viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2.5 stroke-linecap=round stroke-linejoin=round><path>`);
2110
+ var _tmpl$35 = /* @__PURE__ */ (0, import_web48.template)(`<button class=dialkit-select-option>`);
1697
2111
  function toTitleCase(s) {
1698
2112
  return s.replace(/\b\w/g, (c) => c.toUpperCase());
1699
2113
  }
@@ -1704,10 +2118,10 @@ function normalizeOptions(options) {
1704
2118
  } : opt);
1705
2119
  }
1706
2120
  function SelectControl(props) {
1707
- const [isOpen, setIsOpen] = (0, import_solid_js7.createSignal)(false);
1708
- const [mounted, setMounted] = (0, import_solid_js7.createSignal)(false);
1709
- const [pos, setPos] = (0, import_solid_js7.createSignal)(null);
1710
- const [portalTarget, setPortalTarget] = (0, import_solid_js7.createSignal)(null);
2121
+ const [isOpen, setIsOpen] = (0, import_solid_js9.createSignal)(false);
2122
+ const [mounted, setMounted] = (0, import_solid_js9.createSignal)(false);
2123
+ const [pos, setPos] = (0, import_solid_js9.createSignal)(null);
2124
+ const [portalTarget, setPortalTarget] = (0, import_solid_js9.createSignal)(null);
1711
2125
  let triggerRef;
1712
2126
  let dropdownRef;
1713
2127
  let chevronRef;
@@ -1715,22 +2129,22 @@ function SelectControl(props) {
1715
2129
  let chevronAnim = null;
1716
2130
  const normalized = () => normalizeOptions(props.options);
1717
2131
  const selectedOption = () => normalized().find((o) => o.value === props.value);
1718
- (0, import_solid_js7.onMount)(() => {
2132
+ (0, import_solid_js9.onMount)(() => {
1719
2133
  const root = triggerRef?.closest(".dialkit-root");
1720
2134
  setPortalTarget(root ?? document.body);
1721
2135
  if (chevronRef) {
1722
2136
  chevronRef.style.transform = `rotate(${isOpen() ? 180 : 0}deg)`;
1723
2137
  }
1724
- (0, import_solid_js7.onCleanup)(() => {
2138
+ (0, import_solid_js9.onCleanup)(() => {
1725
2139
  closeAnim?.stop();
1726
2140
  chevronAnim?.stop();
1727
2141
  });
1728
2142
  });
1729
- (0, import_solid_js7.createEffect)(() => {
2143
+ (0, import_solid_js9.createEffect)(() => {
1730
2144
  if (!chevronRef) return;
1731
2145
  const open = isOpen();
1732
2146
  chevronAnim?.stop();
1733
- chevronAnim = (0, import_motion4.animate)(chevronRef, {
2147
+ chevronAnim = (0, import_motion3.animate)(chevronRef, {
1734
2148
  rotate: open ? 180 : 0
1735
2149
  }, {
1736
2150
  type: "spring",
@@ -1766,7 +2180,7 @@ function SelectControl(props) {
1766
2180
  }
1767
2181
  const above = pos()?.above ?? false;
1768
2182
  closeAnim?.stop();
1769
- closeAnim = (0, import_motion4.animate)(dropdownRef, {
2183
+ closeAnim = (0, import_motion3.animate)(dropdownRef, {
1770
2184
  opacity: 0,
1771
2185
  y: above ? 8 : -8,
1772
2186
  scale: 0.95
@@ -1780,7 +2194,7 @@ function SelectControl(props) {
1780
2194
  }
1781
2195
  });
1782
2196
  };
1783
- (0, import_solid_js7.createEffect)(() => {
2197
+ (0, import_solid_js9.createEffect)(() => {
1784
2198
  if (!isOpen()) return;
1785
2199
  const handleViewportChange = () => updatePos();
1786
2200
  const handleClick = (e) => {
@@ -1793,7 +2207,7 @@ function SelectControl(props) {
1793
2207
  document.addEventListener("mousedown", handleClick);
1794
2208
  window.addEventListener("resize", handleViewportChange);
1795
2209
  window.addEventListener("scroll", handleViewportChange, true);
1796
- (0, import_solid_js7.onCleanup)(() => {
2210
+ (0, import_solid_js9.onCleanup)(() => {
1797
2211
  document.removeEventListener("mousedown", handleClick);
1798
2212
  window.removeEventListener("resize", handleViewportChange);
1799
2213
  window.removeEventListener("scroll", handleViewportChange, true);
@@ -1816,34 +2230,35 @@ function SelectControl(props) {
1816
2230
  };
1817
2231
  };
1818
2232
  return (() => {
1819
- var _el$ = _tmpl$25(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling;
2233
+ var _el$ = _tmpl$26(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling, _el$7 = _el$6.firstChild;
1820
2234
  _el$2.$$click = () => isOpen() ? closeDropdown() : openDropdown();
1821
2235
  var _ref$ = triggerRef;
1822
- typeof _ref$ === "function" ? (0, import_web52.use)(_ref$, _el$2) : triggerRef = _el$2;
1823
- (0, import_web51.insert)(_el$3, () => props.label);
1824
- (0, import_web51.insert)(_el$5, () => selectedOption()?.label ?? props.value);
2236
+ typeof _ref$ === "function" ? (0, import_web56.use)(_ref$, _el$2) : triggerRef = _el$2;
2237
+ (0, import_web55.insert)(_el$3, () => props.label);
2238
+ (0, import_web55.insert)(_el$5, () => selectedOption()?.label ?? props.value);
1825
2239
  var _ref$2 = chevronRef;
1826
- typeof _ref$2 === "function" ? (0, import_web52.use)(_ref$2, _el$6) : chevronRef = _el$6;
1827
- (0, import_web51.insert)(_el$, (0, import_web49.createComponent)(import_solid_js7.Show, {
2240
+ typeof _ref$2 === "function" ? (0, import_web56.use)(_ref$2, _el$6) : chevronRef = _el$6;
2241
+ (0, import_web53.setAttribute)(_el$7, "d", ICON_CHEVRON);
2242
+ (0, import_web55.insert)(_el$, (0, import_web52.createComponent)(import_solid_js9.Show, {
1828
2243
  get when() {
1829
2244
  return !!portalTarget();
1830
2245
  },
1831
2246
  get children() {
1832
- return (0, import_web49.createComponent)(import_web53.Portal, {
2247
+ return (0, import_web52.createComponent)(import_web57.Portal, {
1833
2248
  get mount() {
1834
2249
  return portalTarget();
1835
2250
  },
1836
2251
  get children() {
1837
- return (0, import_web49.createComponent)(import_solid_js7.Show, {
2252
+ return (0, import_web52.createComponent)(import_solid_js9.Show, {
1838
2253
  get when() {
1839
- return (0, import_web50.memo)(() => !!mounted())() && pos();
2254
+ return (0, import_web54.memo)(() => !!mounted())() && pos();
1840
2255
  },
1841
2256
  get children() {
1842
- var _el$7 = _tmpl$15();
1843
- (0, import_web52.use)((el) => {
2257
+ var _el$8 = _tmpl$16();
2258
+ (0, import_web56.use)((el) => {
1844
2259
  dropdownRef = el;
1845
2260
  const above = pos()?.above ?? false;
1846
- (0, import_motion4.animate)(el, {
2261
+ (0, import_motion3.animate)(el, {
1847
2262
  opacity: [0, 1],
1848
2263
  y: [above ? 8 : -8, 0],
1849
2264
  scale: [0.95, 1]
@@ -1852,60 +2267,60 @@ function SelectControl(props) {
1852
2267
  visualDuration: 0.15,
1853
2268
  bounce: 0
1854
2269
  });
1855
- }, _el$7);
1856
- (0, import_web51.insert)(_el$7, (0, import_web49.createComponent)(import_solid_js7.For, {
2270
+ }, _el$8);
2271
+ (0, import_web55.insert)(_el$8, (0, import_web52.createComponent)(import_solid_js9.For, {
1857
2272
  get each() {
1858
2273
  return normalized();
1859
2274
  },
1860
2275
  children: (option) => (() => {
1861
- var _el$8 = _tmpl$34();
1862
- _el$8.$$click = () => {
2276
+ var _el$9 = _tmpl$35();
2277
+ _el$9.$$click = () => {
1863
2278
  props.onChange(option.value);
1864
2279
  closeDropdown();
1865
2280
  };
1866
- (0, import_web51.insert)(_el$8, () => option.label);
1867
- (0, import_web48.effect)(() => (0, import_web46.setAttribute)(_el$8, "data-selected", String(option.value === props.value)));
1868
- return _el$8;
2281
+ (0, import_web55.insert)(_el$9, () => option.label);
2282
+ (0, import_web51.effect)(() => (0, import_web53.setAttribute)(_el$9, "data-selected", String(option.value === props.value)));
2283
+ return _el$9;
1869
2284
  })()
1870
2285
  }));
1871
- (0, import_web48.effect)((_$p) => (0, import_web47.style)(_el$7, dropdownStyle(), _$p));
1872
- return _el$7;
2286
+ (0, import_web51.effect)((_$p) => (0, import_web50.style)(_el$8, dropdownStyle(), _$p));
2287
+ return _el$8;
1873
2288
  }
1874
2289
  });
1875
2290
  }
1876
2291
  });
1877
2292
  }
1878
2293
  }), null);
1879
- (0, import_web48.effect)(() => (0, import_web46.setAttribute)(_el$2, "data-open", String(isOpen())));
2294
+ (0, import_web51.effect)(() => (0, import_web53.setAttribute)(_el$2, "data-open", String(isOpen())));
1880
2295
  return _el$;
1881
2296
  })();
1882
2297
  }
1883
- (0, import_web45.delegateEvents)(["click"]);
2298
+ (0, import_web49.delegateEvents)(["click"]);
1884
2299
 
1885
2300
  // src/solid/components/ColorControl.tsx
1886
- var import_web54 = require("solid-js/web");
1887
- var import_web55 = require("solid-js/web");
1888
- var import_web56 = require("solid-js/web");
1889
- var import_web57 = require("solid-js/web");
1890
2301
  var import_web58 = require("solid-js/web");
1891
2302
  var import_web59 = require("solid-js/web");
1892
2303
  var import_web60 = require("solid-js/web");
1893
2304
  var import_web61 = require("solid-js/web");
1894
- var import_solid_js8 = require("solid-js");
1895
- var _tmpl$16 = /* @__PURE__ */ (0, import_web54.template)(`<input type=text class=dialkit-color-hex-input autofocus>`);
1896
- var _tmpl$26 = /* @__PURE__ */ (0, import_web54.template)(`<div class=dialkit-color-control><label class=dialkit-color-label></label><div class=dialkit-color-inputs><button class=dialkit-color-swatch title="Pick color"></button><input type=color class=dialkit-color-picker-native>`);
1897
- var _tmpl$35 = /* @__PURE__ */ (0, import_web54.template)(`<span class=dialkit-color-hex>`);
2305
+ var import_web62 = require("solid-js/web");
2306
+ var import_web63 = require("solid-js/web");
2307
+ var import_web64 = require("solid-js/web");
2308
+ var import_web65 = require("solid-js/web");
2309
+ var import_solid_js10 = require("solid-js");
2310
+ var _tmpl$17 = /* @__PURE__ */ (0, import_web58.template)(`<input type=text class=dialkit-color-hex-input autofocus>`);
2311
+ var _tmpl$27 = /* @__PURE__ */ (0, import_web58.template)(`<div class=dialkit-color-control><label class=dialkit-color-label></label><div class=dialkit-color-inputs><button class=dialkit-color-swatch title="Pick color"></button><input type=color class=dialkit-color-picker-native>`);
2312
+ var _tmpl$36 = /* @__PURE__ */ (0, import_web58.template)(`<span class=dialkit-color-hex>`);
1898
2313
  var HEX_COLOR_REGEX = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/;
1899
2314
  function expandShorthandHex(hex) {
1900
2315
  if (hex.length !== 4) return hex;
1901
2316
  return `#${hex[1]}${hex[1]}${hex[2]}${hex[2]}${hex[3]}${hex[3]}`;
1902
2317
  }
1903
2318
  function ColorControl(props) {
1904
- const [isEditing, setIsEditing] = (0, import_solid_js8.createSignal)(false);
1905
- const [editValue, setEditValue] = (0, import_solid_js8.createSignal)(props.value);
1906
- const textInputId = (0, import_solid_js8.createUniqueId)();
2319
+ const [isEditing, setIsEditing] = (0, import_solid_js10.createSignal)(false);
2320
+ const [editValue, setEditValue] = (0, import_solid_js10.createSignal)(props.value);
2321
+ const textInputId = (0, import_solid_js10.createUniqueId)();
1907
2322
  let colorInputRef;
1908
- (0, import_solid_js8.createEffect)(() => {
2323
+ (0, import_solid_js10.createEffect)(() => {
1909
2324
  if (!isEditing()) {
1910
2325
  setEditValue(props.value);
1911
2326
  }
@@ -1926,77 +2341,77 @@ function ColorControl(props) {
1926
2341
  }
1927
2342
  };
1928
2343
  return (() => {
1929
- var _el$ = _tmpl$26(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$5 = _el$3.firstChild, _el$6 = _el$5.nextSibling;
1930
- (0, import_web61.setAttribute)(_el$2, "for", textInputId);
1931
- (0, import_web60.insert)(_el$2, () => props.label);
1932
- (0, import_web60.insert)(_el$3, (0, import_web58.createComponent)(import_solid_js8.Show, {
2344
+ var _el$ = _tmpl$27(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$5 = _el$3.firstChild, _el$6 = _el$5.nextSibling;
2345
+ (0, import_web65.setAttribute)(_el$2, "for", textInputId);
2346
+ (0, import_web64.insert)(_el$2, () => props.label);
2347
+ (0, import_web64.insert)(_el$3, (0, import_web62.createComponent)(import_solid_js10.Show, {
1933
2348
  get when() {
1934
2349
  return isEditing();
1935
2350
  },
1936
2351
  get fallback() {
1937
2352
  return (() => {
1938
- var _el$7 = _tmpl$35();
2353
+ var _el$7 = _tmpl$36();
1939
2354
  _el$7.$$click = () => setIsEditing(true);
1940
- (0, import_web60.insert)(_el$7, () => (props.value ?? "").toUpperCase());
2355
+ (0, import_web64.insert)(_el$7, () => (props.value ?? "").toUpperCase());
1941
2356
  return _el$7;
1942
2357
  })();
1943
2358
  },
1944
2359
  get children() {
1945
- var _el$4 = _tmpl$16();
2360
+ var _el$4 = _tmpl$17();
1946
2361
  _el$4.$$keydown = handleKeyDown;
1947
2362
  _el$4.addEventListener("blur", handleTextSubmit);
1948
2363
  _el$4.$$input = (e) => setEditValue(e.currentTarget.value);
1949
- (0, import_web61.setAttribute)(_el$4, "id", textInputId);
1950
- (0, import_web59.effect)(() => _el$4.value = editValue());
2364
+ (0, import_web65.setAttribute)(_el$4, "id", textInputId);
2365
+ (0, import_web63.effect)(() => _el$4.value = editValue());
1951
2366
  return _el$4;
1952
2367
  }
1953
2368
  }), _el$5);
1954
2369
  _el$5.$$click = () => colorInputRef?.click();
1955
2370
  _el$6.$$input = (e) => props.onChange(e.currentTarget.value);
1956
2371
  var _ref$ = colorInputRef;
1957
- typeof _ref$ === "function" ? (0, import_web57.use)(_ref$, _el$6) : colorInputRef = _el$6;
1958
- (0, import_web59.effect)((_p$) => {
2372
+ typeof _ref$ === "function" ? (0, import_web61.use)(_ref$, _el$6) : colorInputRef = _el$6;
2373
+ (0, import_web63.effect)((_p$) => {
1959
2374
  var _v$ = props.value, _v$2 = `Pick color for ${props.label}`, _v$3 = `${props.label} color picker`;
1960
- _v$ !== _p$.e && (0, import_web56.setStyleProperty)(_el$5, "background-color", _p$.e = _v$);
1961
- _v$2 !== _p$.t && (0, import_web61.setAttribute)(_el$5, "aria-label", _p$.t = _v$2);
1962
- _v$3 !== _p$.a && (0, import_web61.setAttribute)(_el$6, "aria-label", _p$.a = _v$3);
2375
+ _v$ !== _p$.e && (0, import_web60.setStyleProperty)(_el$5, "background-color", _p$.e = _v$);
2376
+ _v$2 !== _p$.t && (0, import_web65.setAttribute)(_el$5, "aria-label", _p$.t = _v$2);
2377
+ _v$3 !== _p$.a && (0, import_web65.setAttribute)(_el$6, "aria-label", _p$.a = _v$3);
1963
2378
  return _p$;
1964
2379
  }, {
1965
2380
  e: void 0,
1966
2381
  t: void 0,
1967
2382
  a: void 0
1968
2383
  });
1969
- (0, import_web59.effect)(() => _el$6.value = props.value.length === 4 ? expandShorthandHex(props.value) : props.value.slice(0, 7));
2384
+ (0, import_web63.effect)(() => _el$6.value = props.value.length === 4 ? expandShorthandHex(props.value) : props.value.slice(0, 7));
1970
2385
  return _el$;
1971
2386
  })();
1972
2387
  }
1973
- (0, import_web55.delegateEvents)(["input", "keydown", "click"]);
2388
+ (0, import_web59.delegateEvents)(["input", "keydown", "click"]);
1974
2389
 
1975
2390
  // src/solid/components/PresetManager.tsx
1976
- var import_web62 = require("solid-js/web");
1977
- var import_web63 = require("solid-js/web");
1978
- var import_web64 = require("solid-js/web");
1979
- var import_web65 = require("solid-js/web");
1980
2391
  var import_web66 = require("solid-js/web");
1981
2392
  var import_web67 = require("solid-js/web");
1982
2393
  var import_web68 = require("solid-js/web");
1983
2394
  var import_web69 = require("solid-js/web");
1984
2395
  var import_web70 = require("solid-js/web");
1985
- var import_solid_js9 = require("solid-js");
1986
2396
  var import_web71 = require("solid-js/web");
1987
- var import_motion5 = require("motion");
1988
- var _tmpl$17 = /* @__PURE__ */ (0, import_web62.template)(`<div class="dialkit-root dialkit-preset-dropdown"style=position:fixed><div class=dialkit-preset-item><span class=dialkit-preset-name>Version 1`);
1989
- var _tmpl$27 = /* @__PURE__ */ (0, import_web62.template)(`<div class=dialkit-preset-manager><button class=dialkit-preset-trigger><span class=dialkit-preset-label></span><svg class=dialkit-select-chevron viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2.5 stroke-linecap=round stroke-linejoin=round><path d="M6 9.5L12 15.5L18 9.5">`);
1990
- var _tmpl$36 = /* @__PURE__ */ (0, import_web62.template)(`<div class=dialkit-preset-item><span class=dialkit-preset-name></span><button class=dialkit-preset-delete title="Delete preset"><svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path d="M5 6.5L5.80734 18.2064C5.91582 19.7794 7.22348 21 8.80023 21H15.1998C16.7765 21 18.0842 19.7794 18.1927 18.2064L19 6.5"></path><path d="M10 11V16"></path><path d="M14 11V16"></path><path d="M3.5 6H20.5"></path><path d="M8.07092 5.74621C8.42348 3.89745 10.0485 2.5 12 2.5C13.9515 2.5 15.5765 3.89745 15.9291 5.74621">`);
2397
+ var import_web72 = require("solid-js/web");
2398
+ var import_web73 = require("solid-js/web");
2399
+ var import_web74 = require("solid-js/web");
2400
+ var import_solid_js11 = require("solid-js");
2401
+ var import_web75 = require("solid-js/web");
2402
+ var import_motion4 = require("motion");
2403
+ var _tmpl$18 = /* @__PURE__ */ (0, import_web66.template)(`<div class="dialkit-root dialkit-preset-dropdown"style=position:fixed><div class=dialkit-preset-item><span class=dialkit-preset-name>Version 1`);
2404
+ var _tmpl$28 = /* @__PURE__ */ (0, import_web66.template)(`<div class=dialkit-preset-manager><button class=dialkit-preset-trigger><span class=dialkit-preset-label></span><svg class=dialkit-select-chevron viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2.5 stroke-linecap=round stroke-linejoin=round><path>`);
2405
+ var _tmpl$37 = /* @__PURE__ */ (0, import_web66.template)(`<div class=dialkit-preset-item><span class=dialkit-preset-name></span><button class=dialkit-preset-delete title="Delete preset"><svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path></path><path></path><path></path><path></path><path>`);
1991
2406
  function PresetManager(props) {
1992
- const [isOpen, setIsOpen] = (0, import_solid_js9.createSignal)(false);
1993
- const [mounted, setMounted] = (0, import_solid_js9.createSignal)(false);
1994
- const [pos, setPos] = (0, import_solid_js9.createSignal)({
2407
+ const [isOpen, setIsOpen] = (0, import_solid_js11.createSignal)(false);
2408
+ const [mounted, setMounted] = (0, import_solid_js11.createSignal)(false);
2409
+ const [pos, setPos] = (0, import_solid_js11.createSignal)({
1995
2410
  top: 0,
1996
2411
  left: 0,
1997
2412
  width: 0
1998
2413
  });
1999
- const [portalTarget, setPortalTarget] = (0, import_solid_js9.createSignal)(null);
2414
+ const [portalTarget, setPortalTarget] = (0, import_solid_js11.createSignal)(null);
2000
2415
  let triggerRef;
2001
2416
  let dropdownRef;
2002
2417
  let chevronRef;
@@ -2004,24 +2419,24 @@ function PresetManager(props) {
2004
2419
  let chevronAnim = null;
2005
2420
  const hasPresets = () => props.presets.length > 0;
2006
2421
  const activePreset = () => props.presets.find((p) => p.id === props.activePresetId);
2007
- (0, import_solid_js9.onMount)(() => {
2422
+ (0, import_solid_js11.onMount)(() => {
2008
2423
  const root = triggerRef?.closest(".dialkit-root");
2009
2424
  setPortalTarget(root ?? document.body);
2010
2425
  if (chevronRef) {
2011
2426
  chevronRef.style.transform = `rotate(${isOpen() ? 180 : 0}deg)`;
2012
2427
  chevronRef.style.opacity = String(hasPresets() ? 0.6 : 0.25);
2013
2428
  }
2014
- (0, import_solid_js9.onCleanup)(() => {
2429
+ (0, import_solid_js11.onCleanup)(() => {
2015
2430
  closeAnim?.stop();
2016
2431
  chevronAnim?.stop();
2017
2432
  });
2018
2433
  });
2019
- (0, import_solid_js9.createEffect)(() => {
2434
+ (0, import_solid_js11.createEffect)(() => {
2020
2435
  if (!chevronRef) return;
2021
2436
  const open = isOpen();
2022
2437
  const has = hasPresets();
2023
2438
  chevronAnim?.stop();
2024
- chevronAnim = (0, import_motion5.animate)(chevronRef, {
2439
+ chevronAnim = (0, import_motion4.animate)(chevronRef, {
2025
2440
  rotate: open ? 180 : 0,
2026
2441
  opacity: has ? 0.6 : 0.25
2027
2442
  }, {
@@ -2054,7 +2469,7 @@ function PresetManager(props) {
2054
2469
  return;
2055
2470
  }
2056
2471
  closeAnim?.stop();
2057
- closeAnim = (0, import_motion5.animate)(dropdownRef, {
2472
+ closeAnim = (0, import_motion4.animate)(dropdownRef, {
2058
2473
  opacity: 0,
2059
2474
  y: 4,
2060
2475
  scale: 0.97
@@ -2072,7 +2487,7 @@ function PresetManager(props) {
2072
2487
  if (isOpen()) closeDropdown();
2073
2488
  else openDropdown();
2074
2489
  };
2075
- (0, import_solid_js9.createEffect)(() => {
2490
+ (0, import_solid_js11.createEffect)(() => {
2076
2491
  if (!isOpen()) return;
2077
2492
  const handleViewportChange = () => updatePos();
2078
2493
  const handler = (e) => {
@@ -2084,7 +2499,7 @@ function PresetManager(props) {
2084
2499
  document.addEventListener("mousedown", handler);
2085
2500
  window.addEventListener("resize", handleViewportChange);
2086
2501
  window.addEventListener("scroll", handleViewportChange, true);
2087
- (0, import_solid_js9.onCleanup)(() => {
2502
+ (0, import_solid_js11.onCleanup)(() => {
2088
2503
  document.removeEventListener("mousedown", handler);
2089
2504
  window.removeEventListener("resize", handleViewportChange);
2090
2505
  window.removeEventListener("scroll", handleViewportChange, true);
@@ -2100,35 +2515,36 @@ function PresetManager(props) {
2100
2515
  DialStore.deletePreset(props.panelId, presetId);
2101
2516
  };
2102
2517
  return (() => {
2103
- var _el$ = _tmpl$27(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
2518
+ var _el$ = _tmpl$28(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$4.firstChild;
2104
2519
  _el$2.$$click = toggle;
2105
2520
  var _ref$ = triggerRef;
2106
- typeof _ref$ === "function" ? (0, import_web70.use)(_ref$, _el$2) : triggerRef = _el$2;
2107
- (0, import_web68.insert)(_el$3, (() => {
2108
- var _c$ = (0, import_web69.memo)(() => !!activePreset());
2521
+ typeof _ref$ === "function" ? (0, import_web74.use)(_ref$, _el$2) : triggerRef = _el$2;
2522
+ (0, import_web72.insert)(_el$3, (() => {
2523
+ var _c$ = (0, import_web73.memo)(() => !!activePreset());
2109
2524
  return () => _c$() ? activePreset().name : "Version 1";
2110
2525
  })());
2111
2526
  var _ref$2 = chevronRef;
2112
- typeof _ref$2 === "function" ? (0, import_web70.use)(_ref$2, _el$4) : chevronRef = _el$4;
2113
- (0, import_web68.insert)(_el$, (0, import_web67.createComponent)(import_solid_js9.Show, {
2527
+ typeof _ref$2 === "function" ? (0, import_web74.use)(_ref$2, _el$4) : chevronRef = _el$4;
2528
+ (0, import_web71.setAttribute)(_el$5, "d", ICON_CHEVRON);
2529
+ (0, import_web72.insert)(_el$, (0, import_web70.createComponent)(import_solid_js11.Show, {
2114
2530
  get when() {
2115
2531
  return !!portalTarget();
2116
2532
  },
2117
2533
  get children() {
2118
- return (0, import_web67.createComponent)(import_web71.Portal, {
2534
+ return (0, import_web70.createComponent)(import_web75.Portal, {
2119
2535
  get mount() {
2120
2536
  return portalTarget();
2121
2537
  },
2122
2538
  get children() {
2123
- return (0, import_web67.createComponent)(import_solid_js9.Show, {
2539
+ return (0, import_web70.createComponent)(import_solid_js11.Show, {
2124
2540
  get when() {
2125
2541
  return mounted();
2126
2542
  },
2127
2543
  get children() {
2128
- var _el$5 = _tmpl$17(), _el$6 = _el$5.firstChild;
2129
- (0, import_web70.use)((el) => {
2544
+ var _el$6 = _tmpl$18(), _el$7 = _el$6.firstChild;
2545
+ (0, import_web74.use)((el) => {
2130
2546
  dropdownRef = el;
2131
- (0, import_motion5.animate)(el, {
2547
+ (0, import_motion4.animate)(el, {
2132
2548
  opacity: [0, 1],
2133
2549
  y: [4, 0],
2134
2550
  scale: [0.97, 1]
@@ -2137,27 +2553,43 @@ function PresetManager(props) {
2137
2553
  visualDuration: 0.15,
2138
2554
  bounce: 0
2139
2555
  });
2140
- }, _el$5);
2141
- _el$6.$$click = () => handleSelect(null);
2142
- (0, import_web68.insert)(_el$5, (0, import_web67.createComponent)(import_solid_js9.For, {
2556
+ }, _el$6);
2557
+ _el$7.$$click = () => handleSelect(null);
2558
+ (0, import_web72.insert)(_el$6, (0, import_web70.createComponent)(import_solid_js11.For, {
2143
2559
  get each() {
2144
2560
  return props.presets;
2145
2561
  },
2146
2562
  children: (preset) => (() => {
2147
- var _el$7 = _tmpl$36(), _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling;
2148
- _el$7.$$click = () => handleSelect(preset.id);
2149
- (0, import_web68.insert)(_el$8, () => preset.name);
2150
- _el$9.$$click = (e) => handleDelete(e, preset.id);
2151
- (0, import_web66.effect)(() => (0, import_web64.setAttribute)(_el$7, "data-active", String(preset.id === props.activePresetId)));
2152
- return _el$7;
2563
+ var _el$8 = _tmpl$37(), _el$9 = _el$8.firstChild, _el$0 = _el$9.nextSibling, _el$1 = _el$0.firstChild, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$11.nextSibling, _el$13 = _el$12.nextSibling, _el$14 = _el$13.nextSibling;
2564
+ _el$8.$$click = () => handleSelect(preset.id);
2565
+ (0, import_web72.insert)(_el$9, () => preset.name);
2566
+ _el$0.$$click = (e) => handleDelete(e, preset.id);
2567
+ (0, import_web69.effect)((_p$) => {
2568
+ var _v$8 = String(preset.id === props.activePresetId), _v$9 = ICON_TRASH[0], _v$0 = ICON_TRASH[1], _v$1 = ICON_TRASH[2], _v$10 = ICON_TRASH[3], _v$11 = ICON_TRASH[4];
2569
+ _v$8 !== _p$.e && (0, import_web71.setAttribute)(_el$8, "data-active", _p$.e = _v$8);
2570
+ _v$9 !== _p$.t && (0, import_web71.setAttribute)(_el$10, "d", _p$.t = _v$9);
2571
+ _v$0 !== _p$.a && (0, import_web71.setAttribute)(_el$11, "d", _p$.a = _v$0);
2572
+ _v$1 !== _p$.o && (0, import_web71.setAttribute)(_el$12, "d", _p$.o = _v$1);
2573
+ _v$10 !== _p$.i && (0, import_web71.setAttribute)(_el$13, "d", _p$.i = _v$10);
2574
+ _v$11 !== _p$.n && (0, import_web71.setAttribute)(_el$14, "d", _p$.n = _v$11);
2575
+ return _p$;
2576
+ }, {
2577
+ e: void 0,
2578
+ t: void 0,
2579
+ a: void 0,
2580
+ o: void 0,
2581
+ i: void 0,
2582
+ n: void 0
2583
+ });
2584
+ return _el$8;
2153
2585
  })()
2154
2586
  }), null);
2155
- (0, import_web66.effect)((_p$) => {
2587
+ (0, import_web69.effect)((_p$) => {
2156
2588
  var _v$ = `${pos().top}px`, _v$2 = `${pos().left}px`, _v$3 = `${pos().width}px`, _v$4 = String(!props.activePresetId);
2157
- _v$ !== _p$.e && (0, import_web65.setStyleProperty)(_el$5, "top", _p$.e = _v$);
2158
- _v$2 !== _p$.t && (0, import_web65.setStyleProperty)(_el$5, "left", _p$.t = _v$2);
2159
- _v$3 !== _p$.a && (0, import_web65.setStyleProperty)(_el$5, "min-width", _p$.a = _v$3);
2160
- _v$4 !== _p$.o && (0, import_web64.setAttribute)(_el$6, "data-active", _p$.o = _v$4);
2589
+ _v$ !== _p$.e && (0, import_web68.setStyleProperty)(_el$6, "top", _p$.e = _v$);
2590
+ _v$2 !== _p$.t && (0, import_web68.setStyleProperty)(_el$6, "left", _p$.t = _v$2);
2591
+ _v$3 !== _p$.a && (0, import_web68.setStyleProperty)(_el$6, "min-width", _p$.a = _v$3);
2592
+ _v$4 !== _p$.o && (0, import_web71.setAttribute)(_el$7, "data-active", _p$.o = _v$4);
2161
2593
  return _p$;
2162
2594
  }, {
2163
2595
  e: void 0,
@@ -2165,18 +2597,18 @@ function PresetManager(props) {
2165
2597
  a: void 0,
2166
2598
  o: void 0
2167
2599
  });
2168
- return _el$5;
2600
+ return _el$6;
2169
2601
  }
2170
2602
  });
2171
2603
  }
2172
2604
  });
2173
2605
  }
2174
2606
  }), null);
2175
- (0, import_web66.effect)((_p$) => {
2607
+ (0, import_web69.effect)((_p$) => {
2176
2608
  var _v$5 = String(isOpen()), _v$6 = String(!!activePreset()), _v$7 = String(!hasPresets());
2177
- _v$5 !== _p$.e && (0, import_web64.setAttribute)(_el$2, "data-open", _p$.e = _v$5);
2178
- _v$6 !== _p$.t && (0, import_web64.setAttribute)(_el$2, "data-has-preset", _p$.t = _v$6);
2179
- _v$7 !== _p$.a && (0, import_web64.setAttribute)(_el$2, "data-disabled", _p$.a = _v$7);
2609
+ _v$5 !== _p$.e && (0, import_web71.setAttribute)(_el$2, "data-open", _p$.e = _v$5);
2610
+ _v$6 !== _p$.t && (0, import_web71.setAttribute)(_el$2, "data-has-preset", _p$.t = _v$6);
2611
+ _v$7 !== _p$.a && (0, import_web71.setAttribute)(_el$2, "data-disabled", _p$.a = _v$7);
2180
2612
  return _p$;
2181
2613
  }, {
2182
2614
  e: void 0,
@@ -2186,19 +2618,21 @@ function PresetManager(props) {
2186
2618
  return _el$;
2187
2619
  })();
2188
2620
  }
2189
- (0, import_web63.delegateEvents)(["click"]);
2621
+ (0, import_web67.delegateEvents)(["click"]);
2190
2622
 
2191
2623
  // src/solid/components/Panel.tsx
2192
- var _tmpl$18 = /* @__PURE__ */ (0, import_web72.template)(`<button class=dialkit-button>`);
2193
- var _tmpl$28 = /* @__PURE__ */ (0, import_web72.template)(`<button class=dialkit-toolbar-add title="Add preset"><svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2.5 stroke-linecap=round stroke-linejoin=round><path d="M4 6H20"></path><path d="M4 12H10"></path><path d="M15 15L21 15"></path><path d="M18 12V18"></path><path d="M4 18H10">`);
2194
- var _tmpl$37 = /* @__PURE__ */ (0, import_web72.template)(`<button class=dialkit-toolbar-copy title="Copy parameters"><span class=dialkit-toolbar-copy-icon-wrap><span class=dialkit-toolbar-copy-icon style=opacity:1;transform:scale(1);filter:blur(0px)><svg viewBox="0 0 24 24"fill=none width=16 height=16><path d="M8 6C8 4.34315 9.34315 3 11 3H13C14.6569 3 16 4.34315 16 6V7H8V6Z"stroke=currentColor stroke-width=2 stroke-linejoin=round></path><path d="M19.2405 16.1852L18.5436 14.3733C18.4571 14.1484 18.241 14 18 14C17.759 14 17.5429 14.1484 17.4564 14.3733L16.7595 16.1852C16.658 16.4493 16.4493 16.658 16.1852 16.7595L14.3733 17.4564C14.1484 17.5429 14 17.759 14 18C14 18.241 14.1484 18.4571 14.3733 18.5436L16.1852 19.2405C16.4493 19.342 16.658 19.5507 16.7595 19.8148L17.4564 21.6267C17.5429 21.8516 17.759 22 18 22C18.241 22 18.4571 21.8516 18.5436 21.6267L19.2405 19.8148C19.342 19.5507 19.5507 19.342 19.8148 19.2405L21.6267 18.5436C21.8516 18.4571 22 18.241 22 18C22 17.759 21.8516 17.5429 21.6267 17.4564L19.8148 16.7595C19.5507 16.658 19.342 16.4493 19.2405 16.1852Z"fill=currentColor></path><path d="M16 5H17C18.6569 5 20 6.34315 20 8V11M8 5H7C5.34315 5 4 6.34315 4 8V18C4 19.6569 5.34315 21 7 21H12"stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round></path></svg></span><span class=dialkit-toolbar-copy-icon style=opacity:0;transform:scale(0.5);filter:blur(4px)><svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round width=16 height=16><path d="M5 12.75L10 19L19 5"></path></svg></span></span>Copy`);
2195
- var _tmpl$43 = /* @__PURE__ */ (0, import_web72.template)(`<div class=dialkit-panel-wrapper>`);
2624
+ var _tmpl$19 = /* @__PURE__ */ (0, import_web76.template)(`<button class=dialkit-button>`);
2625
+ var _tmpl$29 = /* @__PURE__ */ (0, import_web76.template)(`<button class=dialkit-toolbar-add title="Add preset"><svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2.5 stroke-linecap=round stroke-linejoin=round><path></path><path></path><path></path><path></path><path>`);
2626
+ var _tmpl$38 = /* @__PURE__ */ (0, import_web76.template)(`<button class=dialkit-toolbar-copy title="Copy parameters"><span class=dialkit-toolbar-copy-icon-wrap><span class=dialkit-toolbar-copy-icon style=opacity:1;transform:scale(1);filter:blur(0px)><svg viewBox="0 0 24 24"fill=none width=16 height=16><path stroke=currentColor stroke-width=2 stroke-linejoin=round></path><path fill=currentColor></path><path stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round></path></svg></span><span class=dialkit-toolbar-copy-icon style=opacity:0;transform:scale(0.5);filter:blur(4px)><svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round width=16 height=16><path></path></svg></span></span>Copy`);
2627
+ var _tmpl$43 = /* @__PURE__ */ (0, import_web76.template)(`<div class=dialkit-panel-wrapper>`);
2196
2628
  function Panel(props) {
2197
- const [copied, setCopied] = (0, import_solid_js10.createSignal)(false);
2198
- const [isPanelOpen, setIsPanelOpen] = (0, import_solid_js10.createSignal)(props.defaultOpen ?? true);
2199
- const [values, setValues] = (0, import_solid_js10.createSignal)(DialStore.getValues(props.panel.id));
2200
- const [presets, setPresets] = (0, import_solid_js10.createSignal)(DialStore.getPresets(props.panel.id));
2201
- const [activePresetId, setActivePresetId] = (0, import_solid_js10.createSignal)(DialStore.getActivePresetId(props.panel.id));
2629
+ const [copied, setCopied] = (0, import_solid_js12.createSignal)(false);
2630
+ const [isPanelOpen, setIsPanelOpen] = (0, import_solid_js12.createSignal)(props.defaultOpen ?? true);
2631
+ const shortcutCtx = useShortcutContext();
2632
+ const hasShortcuts = () => Object.keys(props.panel.shortcuts).length > 0;
2633
+ const [values, setValues] = (0, import_solid_js12.createSignal)(DialStore.getValues(props.panel.id));
2634
+ const [presets, setPresets] = (0, import_solid_js12.createSignal)(DialStore.getPresets(props.panel.id));
2635
+ const [activePresetId, setActivePresetId] = (0, import_solid_js12.createSignal)(DialStore.getActivePresetId(props.panel.id));
2202
2636
  let addButtonRef;
2203
2637
  let copyButtonRef;
2204
2638
  let copyClipboardIconRef;
@@ -2213,7 +2647,7 @@ function Panel(props) {
2213
2647
  visualDuration: 0.15,
2214
2648
  bounce: 0.3
2215
2649
  };
2216
- (0, import_solid_js10.onMount)(() => {
2650
+ (0, import_solid_js12.onMount)(() => {
2217
2651
  const unsub = DialStore.subscribe(props.panel.id, () => {
2218
2652
  setValues(DialStore.getValues(props.panel.id));
2219
2653
  setPresets(DialStore.getPresets(props.panel.id));
@@ -2230,7 +2664,7 @@ function Panel(props) {
2230
2664
  copyCheckIconRef.style.filter = "blur(4px)";
2231
2665
  didInitCopyIcons = true;
2232
2666
  }
2233
- (0, import_solid_js10.onCleanup)(unsub);
2667
+ (0, import_solid_js12.onCleanup)(unsub);
2234
2668
  });
2235
2669
  const handleAddPreset = () => {
2236
2670
  const nextNum = presets().length + 2;
@@ -2249,7 +2683,7 @@ Apply these values as the new defaults in the createDialKit call.`;
2249
2683
  setCopied(true);
2250
2684
  setTimeout(() => setCopied(false), 1500);
2251
2685
  };
2252
- (0, import_solid_js10.createEffect)(() => {
2686
+ (0, import_solid_js12.createEffect)(() => {
2253
2687
  const isCopied = copied();
2254
2688
  if (!copyClipboardIconRef || !copyCheckIconRef) return;
2255
2689
  copyClipboardAnim?.stop();
@@ -2260,18 +2694,18 @@ Apply these values as the new defaults in the createDialKit call.`;
2260
2694
  visualDuration: 0.3,
2261
2695
  bounce: 0.2
2262
2696
  };
2263
- copyClipboardAnim = (0, import_motion6.animate)(copyClipboardIconRef, {
2697
+ copyClipboardAnim = (0, import_motion5.animate)(copyClipboardIconRef, {
2264
2698
  opacity: isCopied ? 0 : 1,
2265
2699
  scale: isCopied ? 0.5 : 1,
2266
2700
  filter: isCopied ? "blur(4px)" : "blur(0px)"
2267
2701
  }, transition);
2268
- copyCheckAnim = (0, import_motion6.animate)(copyCheckIconRef, {
2702
+ copyCheckAnim = (0, import_motion5.animate)(copyCheckIconRef, {
2269
2703
  opacity: isCopied ? 1 : 0,
2270
2704
  scale: isCopied ? 1 : 0.5,
2271
2705
  filter: isCopied ? "blur(0px)" : "blur(4px)"
2272
2706
  }, transition);
2273
2707
  });
2274
- (0, import_solid_js10.onCleanup)(() => {
2708
+ (0, import_solid_js12.onCleanup)(() => {
2275
2709
  addTapAnim?.stop();
2276
2710
  copyTapAnim?.stop();
2277
2711
  copyClipboardAnim?.stop();
@@ -2280,28 +2714,28 @@ Apply these values as the new defaults in the createDialKit call.`;
2280
2714
  const handleAddTapStart = () => {
2281
2715
  if (!addButtonRef) return;
2282
2716
  addTapAnim?.stop();
2283
- addTapAnim = (0, import_motion6.animate)(addButtonRef, {
2717
+ addTapAnim = (0, import_motion5.animate)(addButtonRef, {
2284
2718
  scale: 0.9
2285
2719
  }, tapTransition);
2286
2720
  };
2287
2721
  const handleAddTapEnd = () => {
2288
2722
  if (!addButtonRef) return;
2289
2723
  addTapAnim?.stop();
2290
- addTapAnim = (0, import_motion6.animate)(addButtonRef, {
2724
+ addTapAnim = (0, import_motion5.animate)(addButtonRef, {
2291
2725
  scale: 1
2292
2726
  }, tapTransition);
2293
2727
  };
2294
2728
  const handleCopyTapStart = () => {
2295
2729
  if (!copyButtonRef) return;
2296
2730
  copyTapAnim?.stop();
2297
- copyTapAnim = (0, import_motion6.animate)(copyButtonRef, {
2731
+ copyTapAnim = (0, import_motion5.animate)(copyButtonRef, {
2298
2732
  scale: 0.95
2299
2733
  }, tapTransition);
2300
2734
  };
2301
2735
  const handleCopyTapEnd = () => {
2302
2736
  if (!copyButtonRef) return;
2303
2737
  copyTapAnim?.stop();
2304
- copyTapAnim = (0, import_motion6.animate)(copyButtonRef, {
2738
+ copyTapAnim = (0, import_motion5.animate)(copyButtonRef, {
2305
2739
  scale: 1
2306
2740
  }, tapTransition);
2307
2741
  };
@@ -2309,7 +2743,7 @@ Apply these values as the new defaults in the createDialKit call.`;
2309
2743
  const value = () => values()[control.path];
2310
2744
  switch (control.type) {
2311
2745
  case "slider":
2312
- return (0, import_web77.createComponent)(Slider, {
2746
+ return (0, import_web82.createComponent)(Slider, {
2313
2747
  get label() {
2314
2748
  return control.label;
2315
2749
  },
@@ -2325,20 +2759,32 @@ Apply these values as the new defaults in the createDialKit call.`;
2325
2759
  },
2326
2760
  get step() {
2327
2761
  return control.step;
2762
+ },
2763
+ get shortcut() {
2764
+ return control.shortcut;
2765
+ },
2766
+ get shortcutActive() {
2767
+ return (0, import_web83.memo)(() => shortcutCtx().activePanelId === props.panel.id)() && shortcutCtx().activePath === control.path;
2328
2768
  }
2329
2769
  });
2330
2770
  case "toggle":
2331
- return (0, import_web77.createComponent)(Toggle, {
2771
+ return (0, import_web82.createComponent)(Toggle, {
2332
2772
  get label() {
2333
2773
  return control.label;
2334
2774
  },
2335
2775
  get checked() {
2336
2776
  return value();
2337
2777
  },
2338
- onChange: (v) => DialStore.updateValue(props.panel.id, control.path, v)
2778
+ onChange: (v) => DialStore.updateValue(props.panel.id, control.path, v),
2779
+ get shortcut() {
2780
+ return control.shortcut;
2781
+ },
2782
+ get shortcutActive() {
2783
+ return (0, import_web83.memo)(() => shortcutCtx().activePanelId === props.panel.id)() && shortcutCtx().activePath === control.path;
2784
+ }
2339
2785
  });
2340
2786
  case "spring":
2341
- return (0, import_web77.createComponent)(SpringControl, {
2787
+ return (0, import_web82.createComponent)(SpringControl, {
2342
2788
  get panelId() {
2343
2789
  return props.panel.id;
2344
2790
  },
@@ -2354,7 +2800,7 @@ Apply these values as the new defaults in the createDialKit call.`;
2354
2800
  onChange: (v) => DialStore.updateValue(props.panel.id, control.path, v)
2355
2801
  });
2356
2802
  case "folder":
2357
- return (0, import_web77.createComponent)(Folder, {
2803
+ return (0, import_web82.createComponent)(Folder, {
2358
2804
  get title() {
2359
2805
  return control.label;
2360
2806
  },
@@ -2362,16 +2808,16 @@ Apply these values as the new defaults in the createDialKit call.`;
2362
2808
  return control.defaultOpen ?? true;
2363
2809
  },
2364
2810
  get children() {
2365
- return (0, import_web77.createComponent)(import_solid_js10.For, {
2811
+ return (0, import_web82.createComponent)(import_solid_js12.For, {
2366
2812
  get each() {
2367
2813
  return control.children ?? [];
2368
2814
  },
2369
- children: (child) => (0, import_web76.memo)(() => renderControl(child))
2815
+ children: (child) => (0, import_web83.memo)(() => renderControl(child))
2370
2816
  });
2371
2817
  }
2372
2818
  });
2373
2819
  case "text":
2374
- return (0, import_web77.createComponent)(TextControl, {
2820
+ return (0, import_web82.createComponent)(TextControl, {
2375
2821
  get label() {
2376
2822
  return control.label;
2377
2823
  },
@@ -2384,7 +2830,7 @@ Apply these values as the new defaults in the createDialKit call.`;
2384
2830
  }
2385
2831
  });
2386
2832
  case "select":
2387
- return (0, import_web77.createComponent)(SelectControl, {
2833
+ return (0, import_web82.createComponent)(SelectControl, {
2388
2834
  get label() {
2389
2835
  return control.label;
2390
2836
  },
@@ -2397,7 +2843,7 @@ Apply these values as the new defaults in the createDialKit call.`;
2397
2843
  onChange: (v) => DialStore.updateValue(props.panel.id, control.path, v)
2398
2844
  });
2399
2845
  case "color":
2400
- return (0, import_web77.createComponent)(ColorControl, {
2846
+ return (0, import_web82.createComponent)(ColorControl, {
2401
2847
  get label() {
2402
2848
  return control.label;
2403
2849
  },
@@ -2411,29 +2857,44 @@ Apply these values as the new defaults in the createDialKit call.`;
2411
2857
  }
2412
2858
  };
2413
2859
  const renderControls = () => {
2414
- return (0, import_web77.createComponent)(import_solid_js10.For, {
2860
+ return (0, import_web82.createComponent)(import_solid_js12.For, {
2415
2861
  get each() {
2416
2862
  return props.panel.controls;
2417
2863
  },
2418
- children: (control) => (0, import_web76.memo)(() => (0, import_web76.memo)(() => control.type === "action")() ? (() => {
2419
- var _el$ = _tmpl$18();
2864
+ children: (control) => (0, import_web83.memo)(() => (0, import_web83.memo)(() => control.type === "action")() ? (() => {
2865
+ var _el$ = _tmpl$19();
2420
2866
  _el$.$$click = () => DialStore.triggerAction(props.panel.id, control.path);
2421
- (0, import_web75.insert)(_el$, () => control.label);
2867
+ (0, import_web81.insert)(_el$, () => control.label);
2422
2868
  return _el$;
2423
2869
  })() : renderControl(control))
2424
2870
  });
2425
2871
  };
2426
2872
  const toolbar = [(() => {
2427
- var _el$2 = _tmpl$28();
2873
+ var _el$2 = _tmpl$29(), _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling;
2428
2874
  _el$2.addEventListener("pointerleave", handleAddTapEnd);
2429
2875
  _el$2.addEventListener("pointercancel", handleAddTapEnd);
2430
2876
  _el$2.$$pointerup = handleAddTapEnd;
2431
2877
  _el$2.$$pointerdown = handleAddTapStart;
2432
2878
  _el$2.$$click = handleAddPreset;
2433
2879
  var _ref$ = addButtonRef;
2434
- typeof _ref$ === "function" ? (0, import_web74.use)(_ref$, _el$2) : addButtonRef = _el$2;
2880
+ typeof _ref$ === "function" ? (0, import_web80.use)(_ref$, _el$2) : addButtonRef = _el$2;
2881
+ (0, import_web79.effect)((_p$) => {
2882
+ var _v$ = ICON_ADD_PRESET[0], _v$2 = ICON_ADD_PRESET[1], _v$3 = ICON_ADD_PRESET[2], _v$4 = ICON_ADD_PRESET[3], _v$5 = ICON_ADD_PRESET[4];
2883
+ _v$ !== _p$.e && (0, import_web78.setAttribute)(_el$4, "d", _p$.e = _v$);
2884
+ _v$2 !== _p$.t && (0, import_web78.setAttribute)(_el$5, "d", _p$.t = _v$2);
2885
+ _v$3 !== _p$.a && (0, import_web78.setAttribute)(_el$6, "d", _p$.a = _v$3);
2886
+ _v$4 !== _p$.o && (0, import_web78.setAttribute)(_el$7, "d", _p$.o = _v$4);
2887
+ _v$5 !== _p$.i && (0, import_web78.setAttribute)(_el$8, "d", _p$.i = _v$5);
2888
+ return _p$;
2889
+ }, {
2890
+ e: void 0,
2891
+ t: void 0,
2892
+ a: void 0,
2893
+ o: void 0,
2894
+ i: void 0
2895
+ });
2435
2896
  return _el$2;
2436
- })(), (0, import_web77.createComponent)(PresetManager, {
2897
+ })(), (0, import_web82.createComponent)(PresetManager, {
2437
2898
  get panelId() {
2438
2899
  return props.panel.id;
2439
2900
  },
@@ -2445,23 +2906,35 @@ Apply these values as the new defaults in the createDialKit call.`;
2445
2906
  },
2446
2907
  onAdd: handleAddPreset
2447
2908
  }), (() => {
2448
- var _el$3 = _tmpl$37(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling;
2449
- _el$3.addEventListener("pointerleave", handleCopyTapEnd);
2450
- _el$3.addEventListener("pointercancel", handleCopyTapEnd);
2451
- _el$3.$$pointerup = handleCopyTapEnd;
2452
- _el$3.$$pointerdown = handleCopyTapStart;
2453
- _el$3.$$click = handleCopy;
2909
+ var _el$9 = _tmpl$38(), _el$0 = _el$9.firstChild, _el$1 = _el$0.firstChild, _el$10 = _el$1.firstChild, _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling, _el$13 = _el$12.nextSibling, _el$14 = _el$1.nextSibling, _el$15 = _el$14.firstChild, _el$16 = _el$15.firstChild;
2910
+ _el$9.addEventListener("pointerleave", handleCopyTapEnd);
2911
+ _el$9.addEventListener("pointercancel", handleCopyTapEnd);
2912
+ _el$9.$$pointerup = handleCopyTapEnd;
2913
+ _el$9.$$pointerdown = handleCopyTapStart;
2914
+ _el$9.$$click = handleCopy;
2454
2915
  var _ref$2 = copyButtonRef;
2455
- typeof _ref$2 === "function" ? (0, import_web74.use)(_ref$2, _el$3) : copyButtonRef = _el$3;
2916
+ typeof _ref$2 === "function" ? (0, import_web80.use)(_ref$2, _el$9) : copyButtonRef = _el$9;
2456
2917
  var _ref$3 = copyClipboardIconRef;
2457
- typeof _ref$3 === "function" ? (0, import_web74.use)(_ref$3, _el$5) : copyClipboardIconRef = _el$5;
2918
+ typeof _ref$3 === "function" ? (0, import_web80.use)(_ref$3, _el$1) : copyClipboardIconRef = _el$1;
2458
2919
  var _ref$4 = copyCheckIconRef;
2459
- typeof _ref$4 === "function" ? (0, import_web74.use)(_ref$4, _el$6) : copyCheckIconRef = _el$6;
2460
- return _el$3;
2920
+ typeof _ref$4 === "function" ? (0, import_web80.use)(_ref$4, _el$14) : copyCheckIconRef = _el$14;
2921
+ (0, import_web78.setAttribute)(_el$16, "d", ICON_CHECK);
2922
+ (0, import_web79.effect)((_p$) => {
2923
+ var _v$6 = ICON_CLIPBOARD.board, _v$7 = ICON_CLIPBOARD.sparkle, _v$8 = ICON_CLIPBOARD.body;
2924
+ _v$6 !== _p$.e && (0, import_web78.setAttribute)(_el$11, "d", _p$.e = _v$6);
2925
+ _v$7 !== _p$.t && (0, import_web78.setAttribute)(_el$12, "d", _p$.t = _v$7);
2926
+ _v$8 !== _p$.a && (0, import_web78.setAttribute)(_el$13, "d", _p$.a = _v$8);
2927
+ return _p$;
2928
+ }, {
2929
+ e: void 0,
2930
+ t: void 0,
2931
+ a: void 0
2932
+ });
2933
+ return _el$9;
2461
2934
  })()];
2462
2935
  return (() => {
2463
- var _el$7 = _tmpl$43();
2464
- (0, import_web75.insert)(_el$7, (0, import_web77.createComponent)(Folder, {
2936
+ var _el$17 = _tmpl$43();
2937
+ (0, import_web81.insert)(_el$17, (0, import_web82.createComponent)(Folder, {
2465
2938
  get title() {
2466
2939
  return props.panel.name;
2467
2940
  },
@@ -2469,54 +2942,91 @@ Apply these values as the new defaults in the createDialKit call.`;
2469
2942
  return props.defaultOpen ?? true;
2470
2943
  },
2471
2944
  isRoot: true,
2945
+ get inline() {
2946
+ return props.inline ?? false;
2947
+ },
2472
2948
  onOpenChange: setIsPanelOpen,
2473
2949
  toolbar,
2474
2950
  get children() {
2475
2951
  return renderControls();
2476
2952
  }
2477
2953
  }));
2478
- return _el$7;
2954
+ return _el$17;
2479
2955
  })();
2480
2956
  }
2481
- (0, import_web73.delegateEvents)(["click", "pointerdown", "pointerup"]);
2957
+ (0, import_web77.delegateEvents)(["click", "pointerdown", "pointerup"]);
2482
2958
 
2483
2959
  // src/solid/components/DialRoot.tsx
2484
- var _tmpl$19 = /* @__PURE__ */ (0, import_web78.template)(`<div class=dialkit-root><div class=dialkit-panel>`);
2960
+ var import_meta = {};
2961
+ var _tmpl$20 = /* @__PURE__ */ (0, import_web84.template)(`<div class=dialkit-root><div class=dialkit-panel>`);
2962
+ var isDevDefault = typeof process !== "undefined" && process?.env?.NODE_ENV ? process.env.NODE_ENV !== "production" : typeof import_meta !== "undefined" && import_meta.env?.MODE ? import_meta.env.MODE !== "production" : true;
2485
2963
  function DialRoot(props) {
2486
- const [panels, setPanels] = (0, import_solid_js11.createSignal)([]);
2487
- const [mounted, setMounted] = (0, import_solid_js11.createSignal)(false);
2488
- (0, import_solid_js11.onMount)(() => {
2964
+ if ((props.productionEnabled ?? isDevDefault) === false) return null;
2965
+ const [panels, setPanels] = (0, import_solid_js13.createSignal)([]);
2966
+ const [mounted, setMounted] = (0, import_solid_js13.createSignal)(false);
2967
+ const inline = () => (props.mode ?? "popover") === "inline";
2968
+ (0, import_solid_js13.onMount)(() => {
2489
2969
  setMounted(true);
2490
2970
  setPanels(DialStore.getPanels());
2491
2971
  const unsub = DialStore.subscribeGlobal(() => {
2492
2972
  setPanels(DialStore.getPanels());
2493
2973
  });
2494
- (0, import_solid_js11.onCleanup)(unsub);
2974
+ (0, import_solid_js13.onCleanup)(unsub);
2975
+ });
2976
+ const content = () => (0, import_web89.createComponent)(ShortcutListener, {
2977
+ get children() {
2978
+ var _el$ = _tmpl$20(), _el$2 = _el$.firstChild;
2979
+ (0, import_web88.insert)(_el$2, (0, import_web89.createComponent)(import_solid_js13.For, {
2980
+ get each() {
2981
+ return panels();
2982
+ },
2983
+ children: (panel) => (0, import_web89.createComponent)(Panel, {
2984
+ panel,
2985
+ get defaultOpen() {
2986
+ return inline() || (props.defaultOpen ?? true);
2987
+ },
2988
+ get inline() {
2989
+ return inline();
2990
+ }
2991
+ })
2992
+ }));
2993
+ (0, import_web87.effect)((_p$) => {
2994
+ var _v$ = props.mode ?? "popover", _v$2 = props.theme ?? "system", _v$3 = inline() ? void 0 : props.position ?? "top-right", _v$4 = props.mode ?? "popover";
2995
+ _v$ !== _p$.e && (0, import_web86.setAttribute)(_el$, "data-mode", _p$.e = _v$);
2996
+ _v$2 !== _p$.t && (0, import_web86.setAttribute)(_el$, "data-theme", _p$.t = _v$2);
2997
+ _v$3 !== _p$.a && (0, import_web86.setAttribute)(_el$2, "data-position", _p$.a = _v$3);
2998
+ _v$4 !== _p$.o && (0, import_web86.setAttribute)(_el$2, "data-mode", _p$.o = _v$4);
2999
+ return _p$;
3000
+ }, {
3001
+ e: void 0,
3002
+ t: void 0,
3003
+ a: void 0,
3004
+ o: void 0
3005
+ });
3006
+ return _el$;
3007
+ }
2495
3008
  });
2496
- return (0, import_web82.createComponent)(import_solid_js11.Show, {
3009
+ return (0, import_web89.createComponent)(import_solid_js13.Show, {
2497
3010
  get when() {
2498
- return (0, import_web83.memo)(() => !!(mounted() && typeof window !== "undefined"))() && panels().length > 0;
3011
+ return (0, import_web85.memo)(() => !!(mounted() && typeof window !== "undefined"))() && panels().length > 0;
2499
3012
  },
2500
3013
  get children() {
2501
- return (0, import_web82.createComponent)(import_web84.Portal, {
2502
- get mount() {
2503
- return document.body;
3014
+ return (0, import_web89.createComponent)(import_solid_js13.Show, {
3015
+ get when() {
3016
+ return !inline();
3017
+ },
3018
+ get fallback() {
3019
+ return content();
2504
3020
  },
2505
3021
  get children() {
2506
- var _el$ = _tmpl$19(), _el$2 = _el$.firstChild;
2507
- (0, import_web81.insert)(_el$2, (0, import_web82.createComponent)(import_solid_js11.For, {
2508
- get each() {
2509
- return panels();
3022
+ return (0, import_web89.createComponent)(import_web90.Portal, {
3023
+ get mount() {
3024
+ return document.body;
2510
3025
  },
2511
- children: (panel) => (0, import_web82.createComponent)(Panel, {
2512
- panel,
2513
- get defaultOpen() {
2514
- return props.defaultOpen ?? true;
2515
- }
2516
- })
2517
- }));
2518
- (0, import_web80.effect)(() => (0, import_web79.setAttribute)(_el$2, "data-position", props.position ?? "top-right"));
2519
- return _el$;
3026
+ get children() {
3027
+ return content();
3028
+ }
3029
+ });
2520
3030
  }
2521
3031
  });
2522
3032
  }
@@ -2524,32 +3034,32 @@ function DialRoot(props) {
2524
3034
  }
2525
3035
 
2526
3036
  // src/solid/components/ButtonGroup.tsx
2527
- var import_web85 = require("solid-js/web");
2528
- var import_web86 = require("solid-js/web");
2529
- var import_web87 = require("solid-js/web");
2530
- var import_web88 = require("solid-js/web");
2531
- var import_web89 = require("solid-js/web");
2532
- var import_solid_js12 = require("solid-js");
2533
- var _tmpl$20 = /* @__PURE__ */ (0, import_web85.template)(`<div class=dialkit-button-group>`);
2534
- var _tmpl$29 = /* @__PURE__ */ (0, import_web85.template)(`<button class=dialkit-button>`);
3037
+ var import_web91 = require("solid-js/web");
3038
+ var import_web92 = require("solid-js/web");
3039
+ var import_web93 = require("solid-js/web");
3040
+ var import_web94 = require("solid-js/web");
3041
+ var import_web95 = require("solid-js/web");
3042
+ var import_solid_js14 = require("solid-js");
3043
+ var _tmpl$21 = /* @__PURE__ */ (0, import_web91.template)(`<div class=dialkit-button-group>`);
3044
+ var _tmpl$210 = /* @__PURE__ */ (0, import_web91.template)(`<button class=dialkit-button>`);
2535
3045
  function ButtonGroup(props) {
2536
3046
  return (() => {
2537
- var _el$ = _tmpl$20();
2538
- (0, import_web88.insert)(_el$, (0, import_web89.createComponent)(import_solid_js12.For, {
3047
+ var _el$ = _tmpl$21();
3048
+ (0, import_web94.insert)(_el$, (0, import_web95.createComponent)(import_solid_js14.For, {
2539
3049
  get each() {
2540
3050
  return props.buttons;
2541
3051
  },
2542
3052
  children: (button) => (() => {
2543
- var _el$2 = _tmpl$29();
2544
- (0, import_web87.addEventListener)(_el$2, "click", button.onClick, true);
2545
- (0, import_web88.insert)(_el$2, () => button.label);
3053
+ var _el$2 = _tmpl$210();
3054
+ (0, import_web93.addEventListener)(_el$2, "click", button.onClick, true);
3055
+ (0, import_web94.insert)(_el$2, () => button.label);
2546
3056
  return _el$2;
2547
3057
  })()
2548
3058
  }));
2549
3059
  return _el$;
2550
3060
  })();
2551
3061
  }
2552
- (0, import_web86.delegateEvents)(["click"]);
3062
+ (0, import_web92.delegateEvents)(["click"]);
2553
3063
  // Annotate the CommonJS export names for ESM import in node:
2554
3064
  0 && (module.exports = {
2555
3065
  ButtonGroup,