dialkit 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +171 -1
  2. package/dist/index.cjs +876 -337
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +41 -6
  5. package/dist/index.d.ts +41 -6
  6. package/dist/index.js +878 -341
  7. package/dist/index.js.map +1 -1
  8. package/dist/solid/index.cjs +1011 -544
  9. package/dist/solid/index.cjs.map +1 -1
  10. package/dist/solid/index.d.cts +33 -3
  11. package/dist/solid/index.d.ts +33 -3
  12. package/dist/solid/index.js +864 -398
  13. package/dist/solid/index.js.map +1 -1
  14. package/dist/store/index.cjs +52 -12
  15. package/dist/store/index.cjs.map +1 -1
  16. package/dist/store/index.d.cts +25 -3
  17. package/dist/store/index.d.ts +25 -3
  18. package/dist/store/index.js +52 -12
  19. package/dist/store/index.js.map +1 -1
  20. package/dist/styles.css +256 -25
  21. package/dist/svelte/components/ControlRenderer.svelte +12 -0
  22. package/dist/svelte/components/ControlRenderer.svelte.d.ts.map +1 -1
  23. package/dist/svelte/components/DialRoot.svelte +22 -8
  24. package/dist/svelte/components/DialRoot.svelte.d.ts +3 -0
  25. package/dist/svelte/components/DialRoot.svelte.d.ts.map +1 -1
  26. package/dist/svelte/components/Folder.svelte +17 -8
  27. package/dist/svelte/components/Folder.svelte.d.ts.map +1 -1
  28. package/dist/svelte/components/Panel.svelte +14 -9
  29. package/dist/svelte/components/Panel.svelte.d.ts.map +1 -1
  30. package/dist/svelte/components/PresetManager.svelte +7 -6
  31. package/dist/svelte/components/PresetManager.svelte.d.ts.map +1 -1
  32. package/dist/svelte/components/SegmentedControl.svelte +30 -74
  33. package/dist/svelte/components/SegmentedControl.svelte.d.ts.map +1 -1
  34. package/dist/svelte/components/SelectControl.svelte +2 -1
  35. package/dist/svelte/components/SelectControl.svelte.d.ts.map +1 -1
  36. package/dist/svelte/components/ShortcutListener.svelte +265 -0
  37. package/dist/svelte/components/ShortcutListener.svelte.d.ts +13 -0
  38. package/dist/svelte/components/ShortcutListener.svelte.d.ts.map +1 -0
  39. package/dist/svelte/components/ShortcutsMenu.svelte +128 -0
  40. package/dist/svelte/components/ShortcutsMenu.svelte.d.ts +7 -0
  41. package/dist/svelte/components/ShortcutsMenu.svelte.d.ts.map +1 -0
  42. package/dist/svelte/components/Slider.svelte +16 -29
  43. package/dist/svelte/components/Slider.svelte.d.ts +3 -0
  44. package/dist/svelte/components/Slider.svelte.d.ts.map +1 -1
  45. package/dist/svelte/components/SpringControl.svelte +17 -15
  46. package/dist/svelte/components/SpringControl.svelte.d.ts.map +1 -1
  47. package/dist/svelte/components/Toggle.svelte +13 -2
  48. package/dist/svelte/components/Toggle.svelte.d.ts +3 -0
  49. package/dist/svelte/components/Toggle.svelte.d.ts.map +1 -1
  50. package/dist/svelte/components/TransitionControl.svelte +28 -25
  51. package/dist/svelte/components/TransitionControl.svelte.d.ts.map +1 -1
  52. package/dist/svelte/createDialKit.svelte.d.ts +2 -1
  53. package/dist/svelte/createDialKit.svelte.d.ts.map +1 -1
  54. package/dist/svelte/createDialKit.svelte.js +1 -1
  55. package/dist/svelte/index.d.ts +6 -2
  56. package/dist/svelte/index.d.ts.map +1 -1
  57. package/dist/svelte/index.js +4 -0
  58. package/dist/svelte/theme-css.d.ts +1 -1
  59. package/dist/svelte/theme-css.d.ts.map +1 -1
  60. package/dist/svelte/theme-css.js +257 -26
  61. package/dist/vue/index.cjs +3056 -0
  62. package/dist/vue/index.cjs.map +1 -0
  63. package/dist/vue/index.d.cts +675 -0
  64. package/dist/vue/index.d.ts +675 -0
  65. package/dist/vue/index.js +3014 -0
  66. package/dist/vue/index.js.map +1 -0
  67. package/package.json +24 -4
@@ -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,22 +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 dialkit-panel-inline">`);
576
- var _tmpl$9 = /* @__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>`);
577
968
  function Folder(props) {
578
- const [isOpen, setIsOpen] = (0, import_solid_js2.createSignal)(props.defaultOpen ?? true);
579
- const [isCollapsed, setIsCollapsed] = (0, import_solid_js2.createSignal)(!(props.defaultOpen ?? true));
580
- const [contentHeight, setContentHeight] = (0, import_solid_js2.createSignal)(void 0);
581
- 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);
582
979
  let skipFirstAnim = props.defaultOpen ?? true;
583
980
  let sectionContentRef;
584
981
  let sectionAnim = null;
@@ -587,7 +984,7 @@ function Folder(props) {
587
984
  let chevronInitialized = false;
588
985
  let panelTapAnim = null;
589
986
  let contentRef;
590
- (0, import_solid_js2.createEffect)(() => {
987
+ (0, import_solid_js3.createEffect)(() => {
591
988
  if (!props.isRoot || !isOpen()) return;
592
989
  const el = contentRef;
593
990
  if (!el) return;
@@ -596,9 +993,9 @@ function Folder(props) {
596
993
  setContentHeight((prev) => prev === h ? prev : h);
597
994
  });
598
995
  ro.observe(el);
599
- (0, import_solid_js2.onCleanup)(() => ro.disconnect());
996
+ (0, import_solid_js3.onCleanup)(() => ro.disconnect());
600
997
  });
601
- (0, import_solid_js2.createEffect)(() => {
998
+ (0, import_solid_js3.createEffect)(() => {
602
999
  if (props.isRoot || !folderChevronRef) return;
603
1000
  const open = isOpen();
604
1001
  chevronAnim?.stop();
@@ -614,7 +1011,7 @@ function Folder(props) {
614
1011
  visualDuration: 0.35,
615
1012
  bounce: 0.15
616
1013
  });
617
- (0, import_solid_js2.onCleanup)(() => chevronAnim?.stop());
1014
+ (0, import_solid_js3.onCleanup)(() => chevronAnim?.stop());
618
1015
  });
619
1016
  const handleToggle = () => {
620
1017
  if (props.inline && props.isRoot) return;
@@ -670,58 +1067,87 @@ function Folder(props) {
670
1067
  };
671
1068
  const folderContent = () => (() => {
672
1069
  var _el$ = _tmpl$3(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild;
673
- (0, import_web10.use)((el) => {
1070
+ (0, import_web11.use)((el) => {
674
1071
  if (props.isRoot) contentRef = el;
675
1072
  }, _el$);
676
1073
  _el$2.$$click = handleToggle;
677
- (0, import_web8.insert)(_el$3, (() => {
678
- var _c$ = (0, import_web9.memo)(() => !!props.isRoot);
679
- 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, {
680
1077
  get when() {
681
1078
  return isOpen();
682
1079
  },
683
1080
  get children() {
684
1081
  var _el$7 = _tmpl$4(), _el$8 = _el$7.firstChild;
685
- (0, import_web8.insert)(_el$8, () => props.title);
1082
+ (0, import_web9.insert)(_el$8, () => props.title);
686
1083
  return _el$7;
687
1084
  }
688
1085
  }) : (() => {
689
1086
  var _el$9 = _tmpl$5(), _el$0 = _el$9.firstChild;
690
- (0, import_web8.insert)(_el$0, () => props.title);
1087
+ (0, import_web9.insert)(_el$0, () => props.title);
691
1088
  return _el$9;
692
1089
  })();
693
1090
  })(), null);
694
- (0, import_web8.insert)(_el$3, (() => {
695
- var _c$2 = (0, import_web9.memo)(() => !!(props.isRoot && !props.inline));
696
- return () => _c$2() && _tmpl$6();
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
+ })();
697
1122
  })(), null);
698
- (0, import_web8.insert)(_el$3, (() => {
699
- var _c$3 = (0, import_web9.memo)(() => !!!props.isRoot);
1123
+ (0, import_web9.insert)(_el$3, (() => {
1124
+ var _c$3 = (0, import_web10.memo)(() => !!!props.isRoot);
700
1125
  return () => _c$3() && (() => {
701
- var _el$10 = _tmpl$7();
1126
+ var _el$14 = _tmpl$7(), _el$15 = _el$14.firstChild;
702
1127
  var _ref$ = folderChevronRef;
703
- typeof _ref$ === "function" ? (0, import_web10.use)(_ref$, _el$10) : folderChevronRef = _el$10;
704
- 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;
705
1131
  })();
706
1132
  })(), null);
707
- (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, {
708
1134
  get when() {
709
- return (0, import_web9.memo)(() => !!(props.isRoot && props.toolbar))() && isOpen();
1135
+ return (0, import_web10.memo)(() => !!(props.isRoot && props.toolbar))() && isOpen();
710
1136
  },
711
1137
  get children() {
712
1138
  var _el$4 = _tmpl$();
713
1139
  _el$4.$$click = (e) => e.stopPropagation();
714
- (0, import_web8.insert)(_el$4, () => props.toolbar);
1140
+ (0, import_web9.insert)(_el$4, () => props.toolbar);
715
1141
  return _el$4;
716
1142
  }
717
1143
  }), null);
718
- (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, {
719
1145
  get when() {
720
- return (0, import_web9.memo)(() => !!props.isRoot)() ? isOpen() : contentMounted();
1146
+ return (0, import_web10.memo)(() => !!props.isRoot)() ? isOpen() : contentMounted();
721
1147
  },
722
1148
  get children() {
723
1149
  var _el$5 = _tmpl$2(), _el$6 = _el$5.firstChild;
724
- (0, import_web10.use)((el) => {
1150
+ (0, import_web11.use)((el) => {
725
1151
  if (props.isRoot) return;
726
1152
  sectionContentRef = el;
727
1153
  if (skipFirstAnim) {
@@ -743,17 +1169,17 @@ function Folder(props) {
743
1169
  }
744
1170
  });
745
1171
  }, _el$5);
746
- (0, import_web8.insert)(_el$6, () => props.children);
747
- (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 ? {
748
1174
  "clip-path": "inset(0 -20px)"
749
1175
  } : void 0, _$p));
750
1176
  return _el$5;
751
1177
  }
752
1178
  }), null);
753
- (0, import_web6.effect)((_p$) => {
1179
+ (0, import_web7.effect)((_p$) => {
754
1180
  var _v$ = `dialkit-folder ${props.isRoot ? "dialkit-folder-root" : ""}`, _v$2 = `dialkit-folder-header ${props.isRoot ? "dialkit-panel-header" : ""}`;
755
- _v$ !== _p$.e && (0, import_web4.className)(_el$, _p$.e = _v$);
756
- _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);
757
1183
  return _p$;
758
1184
  }, {
759
1185
  e: void 0,
@@ -764,36 +1190,36 @@ function Folder(props) {
764
1190
  if (props.isRoot) {
765
1191
  if (props.inline) {
766
1192
  return (() => {
767
- var _el$11 = _tmpl$8();
768
- (0, import_web8.insert)(_el$11, folderContent);
769
- return _el$11;
1193
+ var _el$16 = _tmpl$8();
1194
+ (0, import_web9.insert)(_el$16, folderContent);
1195
+ return _el$16;
770
1196
  })();
771
1197
  }
772
1198
  let panelRef;
773
1199
  let rootPanelAnim = null;
774
1200
  let rootPanelInitialized = false;
775
1201
  let lastRootOpen = isOpen();
776
- (0, import_solid_js2.createEffect)(() => {
1202
+ (0, import_solid_js3.createEffect)(() => {
777
1203
  if (!panelRef || isOpen()) return;
778
1204
  const handler = (e) => {
779
1205
  e.stopPropagation();
780
1206
  handleToggle();
781
1207
  };
782
1208
  panelRef.addEventListener("click", handler);
783
- (0, import_solid_js2.onCleanup)(() => panelRef.removeEventListener("click", handler));
1209
+ (0, import_solid_js3.onCleanup)(() => panelRef.removeEventListener("click", handler));
784
1210
  });
785
- (0, import_solid_js2.createEffect)(() => {
1211
+ (0, import_solid_js3.createEffect)(() => {
786
1212
  if (!panelRef) return;
787
1213
  const open = isOpen();
788
- 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;
789
1215
  const target = {
790
1216
  width: open ? 280 : 42,
791
1217
  height: open ? measuredOpenHeight : 42,
792
1218
  borderRadius: open ? 14 : 21,
793
- 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)"
794
1220
  };
795
1221
  panelRef.style.cursor = open ? "" : "pointer";
796
- panelRef.style.overflow = open ? "" : "hidden";
1222
+ panelRef.style.overflow = open ? "hidden auto" : "hidden";
797
1223
  if (!rootPanelInitialized) {
798
1224
  rootPanelInitialized = true;
799
1225
  panelRef.style.width = `${target.width}px`;
@@ -820,13 +1246,13 @@ function Folder(props) {
820
1246
  panelRef.style.height = `${target.height}px`;
821
1247
  }
822
1248
  });
823
- (0, import_solid_js2.onCleanup)(() => {
1249
+ (0, import_solid_js3.onCleanup)(() => {
824
1250
  rootPanelAnim?.stop();
825
1251
  panelTapAnim?.stop();
826
1252
  });
827
1253
  return (() => {
828
- var _el$12 = _tmpl$9();
829
- _el$12.addEventListener("pointerleave", () => {
1254
+ var _el$17 = _tmpl$9();
1255
+ _el$17.addEventListener("pointerleave", () => {
830
1256
  if (isOpen()) return;
831
1257
  panelTapAnim?.stop();
832
1258
  panelTapAnim = (0, import_motion.animate)(panelRef, {
@@ -837,7 +1263,7 @@ function Folder(props) {
837
1263
  bounce: 0.3
838
1264
  });
839
1265
  });
840
- _el$12.addEventListener("pointercancel", () => {
1266
+ _el$17.addEventListener("pointercancel", () => {
841
1267
  if (isOpen()) return;
842
1268
  panelTapAnim?.stop();
843
1269
  panelTapAnim = (0, import_motion.animate)(panelRef, {
@@ -848,7 +1274,7 @@ function Folder(props) {
848
1274
  bounce: 0.3
849
1275
  });
850
1276
  });
851
- _el$12.$$pointerup = () => {
1277
+ _el$17.$$pointerup = () => {
852
1278
  if (isOpen()) return;
853
1279
  panelTapAnim?.stop();
854
1280
  panelTapAnim = (0, import_motion.animate)(panelRef, {
@@ -859,7 +1285,7 @@ function Folder(props) {
859
1285
  bounce: 0.3
860
1286
  });
861
1287
  };
862
- _el$12.$$pointerdown = () => {
1288
+ _el$17.$$pointerdown = () => {
863
1289
  if (isOpen()) return;
864
1290
  document.activeElement?.blur?.();
865
1291
  panelTapAnim?.stop();
@@ -872,18 +1298,17 @@ function Folder(props) {
872
1298
  });
873
1299
  };
874
1300
  var _ref$2 = panelRef;
875
- typeof _ref$2 === "function" ? (0, import_web10.use)(_ref$2, _el$12) : panelRef = _el$12;
876
- (0, import_web8.insert)(_el$12, folderContent);
877
- (0, import_web6.effect)(() => (0, import_web3.setAttribute)(_el$12, "data-collapsed", String(isCollapsed())));
878
- return _el$12;
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;
879
1305
  })();
880
1306
  }
881
1307
  return folderContent();
882
1308
  }
883
- (0, import_web2.delegateEvents)(["click", "pointerdown", "pointerup"]);
1309
+ (0, import_web3.delegateEvents)(["click", "pointerdown", "pointerup"]);
884
1310
 
885
1311
  // src/solid/components/Slider.tsx
886
- var import_web11 = require("solid-js/web");
887
1312
  var import_web12 = require("solid-js/web");
888
1313
  var import_web13 = require("solid-js/web");
889
1314
  var import_web14 = require("solid-js/web");
@@ -891,33 +1316,18 @@ var import_web15 = require("solid-js/web");
891
1316
  var import_web16 = require("solid-js/web");
892
1317
  var import_web17 = require("solid-js/web");
893
1318
  var import_web18 = require("solid-js/web");
894
- 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");
895
1322
  var import_motion2 = require("motion");
896
- var _tmpl$10 = /* @__PURE__ */ (0, import_web11.template)(`<div class=dialkit-slider-hashmark>`);
897
- 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>`);
898
- var _tmpl$32 = /* @__PURE__ */ (0, import_web11.template)(`<input type=text class=dialkit-slider-input>`);
899
- 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>`);
900
1327
  var CLICK_THRESHOLD = 3;
901
1328
  var DEAD_ZONE = 32;
902
1329
  var MAX_CURSOR_RANGE = 200;
903
1330
  var MAX_STRETCH = 8;
904
- function decimalsForStep(step) {
905
- const s = step.toString();
906
- const dot = s.indexOf(".");
907
- return dot === -1 ? 0 : s.length - dot - 1;
908
- }
909
- function roundValue(val, step) {
910
- const raw = Math.round(val / step) * step;
911
- return parseFloat(raw.toFixed(decimalsForStep(step)));
912
- }
913
- function snapToDecile(rawValue, min, max) {
914
- const normalized = (rawValue - min) / (max - min);
915
- const nearest = Math.round(normalized * 10) / 10;
916
- if (Math.abs(normalized - nearest) <= 0.03125) {
917
- return min + nearest * (max - min);
918
- }
919
- return rawValue;
920
- }
921
1331
  function Slider(props) {
922
1332
  const min = () => props.min ?? 0;
923
1333
  const max = () => props.max ?? 1;
@@ -929,13 +1339,13 @@ function Slider(props) {
929
1339
  let labelRef;
930
1340
  let valueSpanRef;
931
1341
  let inputRef;
932
- const [isInteracting, setIsInteracting] = (0, import_solid_js3.createSignal)(false);
933
- const [isDragging, setIsDragging] = (0, import_solid_js3.createSignal)(false);
934
- const [isHovered, setIsHovered] = (0, import_solid_js3.createSignal)(false);
935
- const [isValueHovered, setIsValueHovered] = (0, import_solid_js3.createSignal)(false);
936
- const [isValueEditable, setIsValueEditable] = (0, import_solid_js3.createSignal)(false);
937
- const [showInput, setShowInput] = (0, import_solid_js3.createSignal)(false);
938
- 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)("");
939
1349
  const fillPercent = (0, import_motion2.motionValue)((props.value - min()) / (max() - min()) * 100);
940
1350
  const rubberStretchPx = (0, import_motion2.motionValue)(0);
941
1351
  const handleOpacityMv = (0, import_motion2.motionValue)(0);
@@ -955,7 +1365,7 @@ function Slider(props) {
955
1365
  handleRef.style.opacity = String(handleOpacityMv.get());
956
1366
  handleRef.style.transform = `translateY(-50%) scaleX(${handleScaleXMv.get()}) scaleY(${handleScaleYMv.get()})`;
957
1367
  };
958
- (0, import_solid_js3.createEffect)(() => {
1368
+ (0, import_solid_js4.createEffect)(() => {
959
1369
  if (!isInteracting() && !snapAnim) {
960
1370
  fillPercent.jump((props.value - min()) / (max() - min()) * 100);
961
1371
  }
@@ -1073,11 +1483,11 @@ function Slider(props) {
1073
1483
  const handlePointerCancel = () => {
1074
1484
  cancelInteraction();
1075
1485
  };
1076
- (0, import_solid_js3.createEffect)(() => {
1486
+ (0, import_solid_js4.createEffect)(() => {
1077
1487
  const hovered = isValueHovered();
1078
1488
  const editing = showInput();
1079
1489
  const editable = isValueEditable();
1080
- (0, import_solid_js3.onCleanup)(() => {
1490
+ (0, import_solid_js4.onCleanup)(() => {
1081
1491
  if (hoverTimeout) {
1082
1492
  clearTimeout(hoverTimeout);
1083
1493
  hoverTimeout = null;
@@ -1089,7 +1499,7 @@ function Slider(props) {
1089
1499
  setIsValueEditable(false);
1090
1500
  }
1091
1501
  });
1092
- (0, import_solid_js3.onCleanup)(() => {
1502
+ (0, import_solid_js4.onCleanup)(() => {
1093
1503
  if (hoverTimeout) clearTimeout(hoverTimeout);
1094
1504
  snapAnim?.stop();
1095
1505
  rubberAnim?.stop();
@@ -1097,7 +1507,7 @@ function Slider(props) {
1097
1507
  handleScaleXAnim?.stop();
1098
1508
  handleScaleYAnim?.stop();
1099
1509
  });
1100
- (0, import_solid_js3.onMount)(() => {
1510
+ (0, import_solid_js4.onMount)(() => {
1101
1511
  const unsubFill = fillPercent.on("change", applyFillStyles);
1102
1512
  const unsubRubber = rubberStretchPx.on("change", applyRubberStyles);
1103
1513
  const unsubHandleOpacity = handleOpacityMv.on("change", applyHandleVisualStyles);
@@ -1106,7 +1516,7 @@ function Slider(props) {
1106
1516
  applyFillStyles(fillPercent.get());
1107
1517
  applyRubberStyles(rubberStretchPx.get());
1108
1518
  applyHandleVisualStyles();
1109
- (0, import_solid_js3.onCleanup)(() => {
1519
+ (0, import_solid_js4.onCleanup)(() => {
1110
1520
  unsubFill();
1111
1521
  unsubRubber();
1112
1522
  unsubHandleOpacity();
@@ -1114,7 +1524,7 @@ function Slider(props) {
1114
1524
  unsubHandleScaleY();
1115
1525
  });
1116
1526
  });
1117
- (0, import_solid_js3.createEffect)(() => {
1527
+ (0, import_solid_js4.createEffect)(() => {
1118
1528
  if (showInput() && inputRef) {
1119
1529
  inputRef.focus();
1120
1530
  inputRef.select();
@@ -1170,7 +1580,7 @@ function Slider(props) {
1170
1580
  if (isDragging()) return 0.9;
1171
1581
  return 0.5;
1172
1582
  };
1173
- (0, import_solid_js3.createEffect)(() => {
1583
+ (0, import_solid_js4.createEffect)(() => {
1174
1584
  const targetOpacity = handleOpacity();
1175
1585
  const targetScaleX = isActive() ? 1 : 0.25;
1176
1586
  const targetScaleY = isActive() && valueDodge() ? 0.75 : 1;
@@ -1191,7 +1601,6 @@ function Slider(props) {
1191
1601
  bounce: 0.1
1192
1602
  });
1193
1603
  });
1194
- const fillBackground = () => isActive() ? "rgba(255, 255, 255, 0.15)" : "rgba(255, 255, 255, 0.11)";
1195
1604
  const discreteSteps = () => (max() - min()) / step();
1196
1605
  const hashMarks = () => {
1197
1606
  const ds = discreteSteps();
@@ -1202,7 +1611,7 @@ function Slider(props) {
1202
1611
  const pct = (i + 1) * step() / (max() - min()) * 100;
1203
1612
  return (() => {
1204
1613
  var _el$ = _tmpl$10();
1205
- (0, import_web18.setStyleProperty)(_el$, "left", `${pct}%`);
1614
+ (0, import_web20.setStyleProperty)(_el$, "left", `${pct}%`);
1206
1615
  return _el$;
1207
1616
  })();
1208
1617
  });
@@ -1213,15 +1622,15 @@ function Slider(props) {
1213
1622
  const pct = (i + 1) * 10;
1214
1623
  return (() => {
1215
1624
  var _el$2 = _tmpl$10();
1216
- (0, import_web18.setStyleProperty)(_el$2, "left", `${pct}%`);
1625
+ (0, import_web20.setStyleProperty)(_el$2, "left", `${pct}%`);
1217
1626
  return _el$2;
1218
1627
  })();
1219
1628
  });
1220
1629
  };
1221
1630
  return (() => {
1222
- 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;
1223
1632
  var _ref$ = wrapperRef;
1224
- 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;
1225
1634
  _el$4.addEventListener("mouseleave", () => setIsHovered(false));
1226
1635
  _el$4.addEventListener("mouseenter", () => setIsHovered(true));
1227
1636
  _el$4.addEventListener("pointercancel", handlePointerCancel);
@@ -1229,188 +1638,184 @@ function Slider(props) {
1229
1638
  _el$4.$$pointermove = handlePointerMove;
1230
1639
  _el$4.$$pointerdown = handlePointerDown;
1231
1640
  var _ref$2 = trackRef;
1232
- typeof _ref$2 === "function" ? (0, import_web17.use)(_ref$2, _el$4) : trackRef = _el$4;
1233
- (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);
1234
1643
  var _ref$3 = fillRef;
1235
- 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;
1236
1645
  var _ref$4 = handleRef;
1237
- 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;
1238
1647
  var _ref$5 = labelRef;
1239
- typeof _ref$5 === "function" ? (0, import_web17.use)(_ref$5, _el$8) : labelRef = _el$8;
1240
- (0, import_web16.insert)(_el$8, () => props.label);
1241
- (0, import_web16.insert)(_el$4, (() => {
1242
- 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());
1243
1663
  return () => _c$() ? (() => {
1244
- var _el$9 = _tmpl$32();
1245
- _el$9.$$mousedown = (e) => e.stopPropagation();
1246
- _el$9.$$click = (e) => e.stopPropagation();
1247
- _el$9.addEventListener("blur", handleInputSubmit);
1248
- _el$9.$$keydown = handleInputKeyDown;
1249
- _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);
1250
1670
  var _ref$6 = inputRef;
1251
- typeof _ref$6 === "function" ? (0, import_web17.use)(_ref$6, _el$9) : inputRef = _el$9;
1252
- (0, import_web14.effect)(() => _el$9.value = inputValue());
1253
- 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;
1254
1674
  })() : (() => {
1255
- var _el$0 = _tmpl$42();
1256
- _el$0.$$mousedown = (e) => isValueEditable() && e.stopPropagation();
1257
- _el$0.$$click = handleValueClick;
1258
- _el$0.addEventListener("mouseleave", () => setIsValueHovered(false));
1259
- _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));
1260
1680
  var _ref$7 = valueSpanRef;
1261
- typeof _ref$7 === "function" ? (0, import_web17.use)(_ref$7, _el$0) : valueSpanRef = _el$0;
1262
- (0, import_web16.insert)(_el$0, displayValue);
1263
- (0, import_web14.effect)((_p$) => {
1264
- var _v$5 = `dialkit-slider-value ${isValueEditable() ? "dialkit-slider-value-editable" : ""}`, _v$6 = isValueEditable() ? "text" : "default";
1265
- _v$5 !== _p$.e && (0, import_web13.className)(_el$0, _p$.e = _v$5);
1266
- _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);
1267
1687
  return _p$;
1268
1688
  }, {
1269
1689
  e: void 0,
1270
1690
  t: void 0
1271
1691
  });
1272
- return _el$0;
1692
+ return _el$1;
1273
1693
  })();
1274
1694
  })(), null);
1275
- (0, import_web14.effect)((_p$) => {
1276
- var _v$ = `dialkit-slider ${isActive() ? "dialkit-slider-active" : ""}`, _v$2 = fillBackground(), _v$3 = `${fillPercent.get()}%`, _v$4 = `max(5px, calc(${fillPercent.get()}% - 9px))`;
1277
- _v$ !== _p$.e && (0, import_web13.className)(_el$4, _p$.e = _v$);
1278
- _v$2 !== _p$.t && (0, import_web18.setStyleProperty)(_el$6, "background", _p$.t = _v$2);
1279
- _v$3 !== _p$.a && (0, import_web18.setStyleProperty)(_el$6, "width", _p$.a = _v$3);
1280
- _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);
1281
1700
  return _p$;
1282
1701
  }, {
1283
1702
  e: void 0,
1284
1703
  t: void 0,
1285
- a: void 0,
1286
- o: void 0
1704
+ a: void 0
1287
1705
  });
1288
1706
  return _el$3;
1289
1707
  })();
1290
1708
  }
1291
- (0, import_web12.delegateEvents)(["pointerdown", "pointermove", "pointerup", "input", "keydown", "click", "mousedown"]);
1709
+ (0, import_web13.delegateEvents)(["pointerdown", "pointermove", "pointerup", "input", "keydown", "click", "mousedown"]);
1292
1710
 
1293
1711
  // src/solid/components/Toggle.tsx
1294
- var import_web27 = require("solid-js/web");
1295
- var import_web28 = require("solid-js/web");
1296
1712
  var import_web29 = require("solid-js/web");
1297
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");
1298
1719
 
1299
1720
  // src/solid/components/SegmentedControl.tsx
1300
- var import_web19 = require("solid-js/web");
1301
- var import_web20 = require("solid-js/web");
1302
1721
  var import_web21 = require("solid-js/web");
1303
1722
  var import_web22 = require("solid-js/web");
1304
1723
  var import_web23 = require("solid-js/web");
1305
1724
  var import_web24 = require("solid-js/web");
1306
1725
  var import_web25 = require("solid-js/web");
1307
1726
  var import_web26 = require("solid-js/web");
1308
- var import_solid_js4 = require("solid-js");
1309
- var import_motion3 = require("motion");
1310
- var _tmpl$11 = /* @__PURE__ */ (0, import_web19.template)(`<div class=dialkit-segmented><div class=dialkit-segmented-pill style=left:0px;width:0px>`);
1311
- 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>`);
1312
1733
  function SegmentedControl(props) {
1313
1734
  let containerRef;
1314
- let pillRef;
1315
- const buttonRefs = /* @__PURE__ */ new Map();
1316
- const [pillReady, setPillReady] = (0, import_solid_js4.createSignal)(false);
1317
1735
  let hasAnimated = false;
1318
- let pillAnim = null;
1319
- const measurePill = () => {
1320
- const button = buttonRefs.get(props.value);
1321
- if (!button || !containerRef) return null;
1322
- const containerRect = containerRef.getBoundingClientRect();
1323
- const buttonRect = button.getBoundingClientRect();
1324
- return {
1325
- left: buttonRect.left - containerRect.left,
1326
- width: buttonRect.width
1327
- };
1328
- };
1329
- const setPillImmediate = (left, width) => {
1330
- if (!pillRef) return;
1331
- pillRef.style.left = `${left}px`;
1332
- pillRef.style.width = `${width}px`;
1333
- };
1334
- const updatePill = (shouldAnimate) => {
1335
- const next = measurePill();
1336
- if (!next) return;
1337
- if (!pillReady()) {
1338
- setPillImmediate(next.left, next.width);
1339
- setPillReady(true);
1340
- return;
1341
- }
1342
- if (!shouldAnimate || !hasAnimated) {
1343
- pillAnim?.stop();
1344
- pillAnim = null;
1345
- setPillImmediate(next.left, next.width);
1346
- return;
1347
- }
1348
- pillAnim?.stop();
1349
- pillAnim = (0, import_motion3.animate)(pillRef, {
1350
- left: next.left,
1351
- width: next.width
1352
- }, {
1353
- type: "spring",
1354
- visualDuration: 0.2,
1355
- bounce: 0.15,
1356
- onComplete: () => {
1357
- pillAnim = null;
1358
- }
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
1359
1744
  });
1360
1745
  };
1361
- (0, import_solid_js4.createRenderEffect)(() => {
1362
- const _ = props.value;
1363
- if (!pillReady()) return;
1364
- updatePill(true);
1746
+ (0, import_solid_js5.createEffect)(() => {
1747
+ void props.value;
1748
+ void props.options.length;
1749
+ measure();
1365
1750
  });
1366
- (0, import_solid_js4.onMount)(() => {
1367
- requestAnimationFrame(() => {
1368
- updatePill(false);
1751
+ const transition = () => {
1752
+ void props.value;
1753
+ if (!hasAnimated) {
1369
1754
  hasAnimated = true;
1370
- });
1371
- if (typeof ResizeObserver === "undefined") return;
1372
- const ro = new ResizeObserver(() => updatePill(false));
1373
- ro.observe(containerRef);
1374
- (0, import_solid_js4.onCleanup)(() => {
1375
- pillAnim?.stop();
1376
- ro.disconnect();
1377
- });
1378
- });
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
+ };
1379
1759
  return (() => {
1380
- var _el$ = _tmpl$11(), _el$2 = _el$.firstChild;
1760
+ var _el$ = _tmpl$11();
1381
1761
  var _ref$ = containerRef;
1382
- typeof _ref$ === "function" ? (0, import_web26.use)(_ref$, _el$) : containerRef = _el$;
1383
- var _ref$2 = pillRef;
1384
- typeof _ref$2 === "function" ? (0, import_web26.use)(_ref$2, _el$2) : pillRef = _el$2;
1385
- (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, {
1386
1784
  get each() {
1387
1785
  return props.options;
1388
1786
  },
1389
1787
  children: (option) => (() => {
1390
- var _el$3 = _tmpl$23();
1788
+ var _el$3 = _tmpl$33();
1391
1789
  _el$3.$$click = () => props.onChange(option.value);
1392
- (0, import_web26.use)((el) => {
1393
- if (!el) return;
1394
- buttonRefs.set(option.value, el);
1395
- }, _el$3);
1396
- (0, import_web24.insert)(_el$3, () => option.label);
1397
- (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)));
1398
1792
  return _el$3;
1399
1793
  })()
1400
1794
  }), null);
1401
- (0, import_web23.effect)((_$p) => (0, import_web22.setStyleProperty)(_el$2, "visibility", pillReady() ? "visible" : "hidden"));
1402
1795
  return _el$;
1403
1796
  })();
1404
1797
  }
1405
- (0, import_web20.delegateEvents)(["click"]);
1798
+ (0, import_web22.delegateEvents)(["click"]);
1406
1799
 
1407
1800
  // src/solid/components/Toggle.tsx
1408
- var _tmpl$12 = /* @__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>`);
1409
1803
  function Toggle(props) {
1410
1804
  return (() => {
1411
- var _el$ = _tmpl$12(), _el$2 = _el$.firstChild;
1412
- (0, import_web30.insert)(_el$2, () => props.label);
1413
- (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, {
1414
1819
  options: [{
1415
1820
  value: "off",
1416
1821
  label: "Off"
@@ -1428,20 +1833,20 @@ function Toggle(props) {
1428
1833
  }
1429
1834
 
1430
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
1431
1843
  var import_web35 = require("solid-js/web");
1432
1844
  var import_web36 = require("solid-js/web");
1433
1845
  var import_web37 = require("solid-js/web");
1434
1846
  var import_web38 = require("solid-js/web");
1435
- var import_solid_js5 = require("solid-js");
1436
-
1437
- // src/solid/components/SpringVisualization.tsx
1438
- var import_web31 = require("solid-js/web");
1439
- var import_web32 = require("solid-js/web");
1440
- var import_web33 = require("solid-js/web");
1441
- var import_web34 = require("solid-js/web");
1442
- var _tmpl$13 = /* @__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);
1443
- 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);
1444
- 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>`);
1445
1850
  function generateSpringCurve(stiffness, damping, mass, duration) {
1446
1851
  const points = [];
1447
1852
  const steps = 100;
@@ -1500,65 +1905,61 @@ function SpringVisualization(props) {
1500
1905
  const y = height / 4 * i;
1501
1906
  lines.push((() => {
1502
1907
  var _el$ = _tmpl$13();
1503
- (0, import_web34.setAttribute)(_el$, "x1", x);
1504
- (0, import_web34.setAttribute)(_el$, "x2", x);
1908
+ (0, import_web38.setAttribute)(_el$, "x1", x);
1909
+ (0, import_web38.setAttribute)(_el$, "x2", x);
1505
1910
  return _el$;
1506
1911
  })(), (() => {
1507
- var _el$2 = _tmpl$24();
1508
- (0, import_web34.setAttribute)(_el$2, "y1", y);
1509
- (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);
1510
1915
  return _el$2;
1511
1916
  })());
1512
1917
  }
1513
1918
  return lines;
1514
1919
  };
1515
1920
  return (() => {
1516
- var _el$3 = _tmpl$33(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling;
1517
- (0, import_web33.insert)(_el$3, gridLines, _el$4);
1518
- (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()));
1519
1924
  return _el$3;
1520
1925
  })();
1521
1926
  }
1522
1927
 
1523
1928
  // src/solid/components/SpringControl.tsx
1524
- var _tmpl$14 = /* @__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`);
1525
1930
  function SpringControl(props) {
1526
- const [mode, setMode] = (0, import_solid_js5.createSignal)(DialStore.getSpringMode(props.panelId, props.path));
1527
- (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)(() => {
1528
1933
  const unsub = DialStore.subscribe(props.panelId, () => {
1529
1934
  setMode(DialStore.getSpringMode(props.panelId, props.path));
1530
1935
  });
1531
- (0, import_solid_js5.onCleanup)(unsub);
1936
+ (0, import_solid_js7.onCleanup)(unsub);
1532
1937
  });
1533
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
+ };
1534
1952
  const handleModeChange = (newMode) => {
1953
+ if (isSimpleMode()) {
1954
+ cache.simple = props.spring;
1955
+ } else {
1956
+ cache.advanced = props.spring;
1957
+ }
1535
1958
  DialStore.updateSpringMode(props.panelId, props.path, newMode);
1536
1959
  if (newMode === "simple") {
1537
- const {
1538
- stiffness,
1539
- damping,
1540
- mass,
1541
- ...rest
1542
- } = props.spring;
1543
- props.onChange({
1544
- ...rest,
1545
- type: "spring",
1546
- visualDuration: props.spring.visualDuration ?? 0.3,
1547
- bounce: props.spring.bounce ?? 0.2
1548
- });
1960
+ props.onChange(cache.simple);
1549
1961
  } else {
1550
- const {
1551
- visualDuration,
1552
- bounce,
1553
- ...rest
1554
- } = props.spring;
1555
- props.onChange({
1556
- ...rest,
1557
- type: "spring",
1558
- stiffness: props.spring.stiffness ?? 200,
1559
- damping: props.spring.damping ?? 25,
1560
- mass: props.spring.mass ?? 1
1561
- });
1962
+ props.onChange(cache.advanced);
1562
1963
  }
1563
1964
  };
1564
1965
  const handleUpdate = (key, value) => {
@@ -1585,14 +1986,14 @@ function SpringControl(props) {
1585
1986
  });
1586
1987
  }
1587
1988
  };
1588
- return (0, import_web38.createComponent)(Folder, {
1989
+ return (0, import_web42.createComponent)(Folder, {
1589
1990
  get title() {
1590
1991
  return props.label;
1591
1992
  },
1592
1993
  defaultOpen: true,
1593
1994
  get children() {
1594
1995
  var _el$ = _tmpl$14(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild;
1595
- (0, import_web37.insert)(_el$, (0, import_web38.createComponent)(SpringVisualization, {
1996
+ (0, import_web41.insert)(_el$, (0, import_web42.createComponent)(SpringVisualization, {
1596
1997
  get spring() {
1597
1998
  return props.spring;
1598
1999
  },
@@ -1600,7 +2001,7 @@ function SpringControl(props) {
1600
2001
  return isSimpleMode();
1601
2002
  }
1602
2003
  }), _el$2);
1603
- (0, import_web37.insert)(_el$2, (0, import_web38.createComponent)(SegmentedControl, {
2004
+ (0, import_web41.insert)(_el$2, (0, import_web42.createComponent)(SegmentedControl, {
1604
2005
  options: [{
1605
2006
  value: "simple",
1606
2007
  label: "Time"
@@ -1613,9 +2014,9 @@ function SpringControl(props) {
1613
2014
  },
1614
2015
  onChange: handleModeChange
1615
2016
  }), null);
1616
- (0, import_web37.insert)(_el$, (() => {
1617
- var _c$ = (0, import_web36.memo)(() => !!isSimpleMode());
1618
- 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, {
1619
2020
  label: "Duration",
1620
2021
  get value() {
1621
2022
  return props.spring.visualDuration ?? 0.3;
@@ -1625,7 +2026,7 @@ function SpringControl(props) {
1625
2026
  max: 1,
1626
2027
  step: 0.05,
1627
2028
  unit: "s"
1628
- }), (0, import_web38.createComponent)(Slider, {
2029
+ }), (0, import_web42.createComponent)(Slider, {
1629
2030
  label: "Bounce",
1630
2031
  get value() {
1631
2032
  return props.spring.bounce ?? 0.2;
@@ -1634,7 +2035,7 @@ function SpringControl(props) {
1634
2035
  min: 0,
1635
2036
  max: 1,
1636
2037
  step: 0.05
1637
- })] : [(0, import_web38.createComponent)(Slider, {
2038
+ })] : [(0, import_web42.createComponent)(Slider, {
1638
2039
  label: "Stiffness",
1639
2040
  get value() {
1640
2041
  return props.spring.stiffness ?? 400;
@@ -1643,7 +2044,7 @@ function SpringControl(props) {
1643
2044
  min: 1,
1644
2045
  max: 1e3,
1645
2046
  step: 10
1646
- }), (0, import_web38.createComponent)(Slider, {
2047
+ }), (0, import_web42.createComponent)(Slider, {
1647
2048
  label: "Damping",
1648
2049
  get value() {
1649
2050
  return props.spring.damping ?? 17;
@@ -1652,7 +2053,7 @@ function SpringControl(props) {
1652
2053
  min: 1,
1653
2054
  max: 100,
1654
2055
  step: 1
1655
- }), (0, import_web38.createComponent)(Slider, {
2056
+ }), (0, import_web42.createComponent)(Slider, {
1656
2057
  label: "Mass",
1657
2058
  get value() {
1658
2059
  return props.spring.mass ?? 1;
@@ -1669,44 +2070,44 @@ function SpringControl(props) {
1669
2070
  }
1670
2071
 
1671
2072
  // src/solid/components/TextControl.tsx
1672
- var import_web39 = require("solid-js/web");
1673
- var import_web40 = require("solid-js/web");
1674
- var import_web41 = require("solid-js/web");
1675
- var import_web42 = require("solid-js/web");
1676
2073
  var import_web43 = require("solid-js/web");
1677
- var import_solid_js6 = require("solid-js");
1678
- var _tmpl$15 = /* @__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>`);
1679
2080
  function TextControl(props) {
1680
- const inputId = (0, import_solid_js6.createUniqueId)();
2081
+ const inputId = (0, import_solid_js8.createUniqueId)();
1681
2082
  return (() => {
1682
2083
  var _el$ = _tmpl$15(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling;
1683
- (0, import_web43.setAttribute)(_el$2, "for", inputId);
1684
- (0, import_web42.insert)(_el$2, () => props.label);
2084
+ (0, import_web47.setAttribute)(_el$2, "for", inputId);
2085
+ (0, import_web46.insert)(_el$2, () => props.label);
1685
2086
  _el$3.$$input = (e) => props.onChange(e.currentTarget.value);
1686
- (0, import_web43.setAttribute)(_el$3, "id", inputId);
1687
- (0, import_web41.effect)(() => (0, import_web43.setAttribute)(_el$3, "placeholder", props.placeholder));
1688
- (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);
1689
2090
  return _el$;
1690
2091
  })();
1691
2092
  }
1692
- (0, import_web40.delegateEvents)(["input"]);
2093
+ (0, import_web44.delegateEvents)(["input"]);
1693
2094
 
1694
2095
  // src/solid/components/SelectControl.tsx
1695
- var import_web44 = require("solid-js/web");
1696
- var import_web45 = require("solid-js/web");
1697
- var import_web46 = require("solid-js/web");
1698
- var import_web47 = require("solid-js/web");
1699
2096
  var import_web48 = require("solid-js/web");
1700
2097
  var import_web49 = require("solid-js/web");
1701
2098
  var import_web50 = require("solid-js/web");
1702
2099
  var import_web51 = require("solid-js/web");
1703
2100
  var import_web52 = require("solid-js/web");
1704
- var import_solid_js7 = require("solid-js");
1705
2101
  var import_web53 = require("solid-js/web");
1706
- var import_motion4 = require("motion");
1707
- var _tmpl$16 = /* @__PURE__ */ (0, import_web44.template)(`<div class=dialkit-select-dropdown>`);
1708
- 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">`);
1709
- 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>`);
1710
2111
  function toTitleCase(s) {
1711
2112
  return s.replace(/\b\w/g, (c) => c.toUpperCase());
1712
2113
  }
@@ -1717,10 +2118,10 @@ function normalizeOptions(options) {
1717
2118
  } : opt);
1718
2119
  }
1719
2120
  function SelectControl(props) {
1720
- const [isOpen, setIsOpen] = (0, import_solid_js7.createSignal)(false);
1721
- const [mounted, setMounted] = (0, import_solid_js7.createSignal)(false);
1722
- const [pos, setPos] = (0, import_solid_js7.createSignal)(null);
1723
- 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);
1724
2125
  let triggerRef;
1725
2126
  let dropdownRef;
1726
2127
  let chevronRef;
@@ -1728,22 +2129,22 @@ function SelectControl(props) {
1728
2129
  let chevronAnim = null;
1729
2130
  const normalized = () => normalizeOptions(props.options);
1730
2131
  const selectedOption = () => normalized().find((o) => o.value === props.value);
1731
- (0, import_solid_js7.onMount)(() => {
2132
+ (0, import_solid_js9.onMount)(() => {
1732
2133
  const root = triggerRef?.closest(".dialkit-root");
1733
2134
  setPortalTarget(root ?? document.body);
1734
2135
  if (chevronRef) {
1735
2136
  chevronRef.style.transform = `rotate(${isOpen() ? 180 : 0}deg)`;
1736
2137
  }
1737
- (0, import_solid_js7.onCleanup)(() => {
2138
+ (0, import_solid_js9.onCleanup)(() => {
1738
2139
  closeAnim?.stop();
1739
2140
  chevronAnim?.stop();
1740
2141
  });
1741
2142
  });
1742
- (0, import_solid_js7.createEffect)(() => {
2143
+ (0, import_solid_js9.createEffect)(() => {
1743
2144
  if (!chevronRef) return;
1744
2145
  const open = isOpen();
1745
2146
  chevronAnim?.stop();
1746
- chevronAnim = (0, import_motion4.animate)(chevronRef, {
2147
+ chevronAnim = (0, import_motion3.animate)(chevronRef, {
1747
2148
  rotate: open ? 180 : 0
1748
2149
  }, {
1749
2150
  type: "spring",
@@ -1779,7 +2180,7 @@ function SelectControl(props) {
1779
2180
  }
1780
2181
  const above = pos()?.above ?? false;
1781
2182
  closeAnim?.stop();
1782
- closeAnim = (0, import_motion4.animate)(dropdownRef, {
2183
+ closeAnim = (0, import_motion3.animate)(dropdownRef, {
1783
2184
  opacity: 0,
1784
2185
  y: above ? 8 : -8,
1785
2186
  scale: 0.95
@@ -1793,7 +2194,7 @@ function SelectControl(props) {
1793
2194
  }
1794
2195
  });
1795
2196
  };
1796
- (0, import_solid_js7.createEffect)(() => {
2197
+ (0, import_solid_js9.createEffect)(() => {
1797
2198
  if (!isOpen()) return;
1798
2199
  const handleViewportChange = () => updatePos();
1799
2200
  const handleClick = (e) => {
@@ -1806,7 +2207,7 @@ function SelectControl(props) {
1806
2207
  document.addEventListener("mousedown", handleClick);
1807
2208
  window.addEventListener("resize", handleViewportChange);
1808
2209
  window.addEventListener("scroll", handleViewportChange, true);
1809
- (0, import_solid_js7.onCleanup)(() => {
2210
+ (0, import_solid_js9.onCleanup)(() => {
1810
2211
  document.removeEventListener("mousedown", handleClick);
1811
2212
  window.removeEventListener("resize", handleViewportChange);
1812
2213
  window.removeEventListener("scroll", handleViewportChange, true);
@@ -1829,34 +2230,35 @@ function SelectControl(props) {
1829
2230
  };
1830
2231
  };
1831
2232
  return (() => {
1832
- 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;
1833
2234
  _el$2.$$click = () => isOpen() ? closeDropdown() : openDropdown();
1834
2235
  var _ref$ = triggerRef;
1835
- typeof _ref$ === "function" ? (0, import_web52.use)(_ref$, _el$2) : triggerRef = _el$2;
1836
- (0, import_web51.insert)(_el$3, () => props.label);
1837
- (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);
1838
2239
  var _ref$2 = chevronRef;
1839
- typeof _ref$2 === "function" ? (0, import_web52.use)(_ref$2, _el$6) : chevronRef = _el$6;
1840
- (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, {
1841
2243
  get when() {
1842
2244
  return !!portalTarget();
1843
2245
  },
1844
2246
  get children() {
1845
- return (0, import_web49.createComponent)(import_web53.Portal, {
2247
+ return (0, import_web52.createComponent)(import_web57.Portal, {
1846
2248
  get mount() {
1847
2249
  return portalTarget();
1848
2250
  },
1849
2251
  get children() {
1850
- return (0, import_web49.createComponent)(import_solid_js7.Show, {
2252
+ return (0, import_web52.createComponent)(import_solid_js9.Show, {
1851
2253
  get when() {
1852
- return (0, import_web50.memo)(() => !!mounted())() && pos();
2254
+ return (0, import_web54.memo)(() => !!mounted())() && pos();
1853
2255
  },
1854
2256
  get children() {
1855
- var _el$7 = _tmpl$16();
1856
- (0, import_web52.use)((el) => {
2257
+ var _el$8 = _tmpl$16();
2258
+ (0, import_web56.use)((el) => {
1857
2259
  dropdownRef = el;
1858
2260
  const above = pos()?.above ?? false;
1859
- (0, import_motion4.animate)(el, {
2261
+ (0, import_motion3.animate)(el, {
1860
2262
  opacity: [0, 1],
1861
2263
  y: [above ? 8 : -8, 0],
1862
2264
  scale: [0.95, 1]
@@ -1865,60 +2267,60 @@ function SelectControl(props) {
1865
2267
  visualDuration: 0.15,
1866
2268
  bounce: 0
1867
2269
  });
1868
- }, _el$7);
1869
- (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, {
1870
2272
  get each() {
1871
2273
  return normalized();
1872
2274
  },
1873
2275
  children: (option) => (() => {
1874
- var _el$8 = _tmpl$34();
1875
- _el$8.$$click = () => {
2276
+ var _el$9 = _tmpl$35();
2277
+ _el$9.$$click = () => {
1876
2278
  props.onChange(option.value);
1877
2279
  closeDropdown();
1878
2280
  };
1879
- (0, import_web51.insert)(_el$8, () => option.label);
1880
- (0, import_web48.effect)(() => (0, import_web46.setAttribute)(_el$8, "data-selected", String(option.value === props.value)));
1881
- 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;
1882
2284
  })()
1883
2285
  }));
1884
- (0, import_web48.effect)((_$p) => (0, import_web47.style)(_el$7, dropdownStyle(), _$p));
1885
- return _el$7;
2286
+ (0, import_web51.effect)((_$p) => (0, import_web50.style)(_el$8, dropdownStyle(), _$p));
2287
+ return _el$8;
1886
2288
  }
1887
2289
  });
1888
2290
  }
1889
2291
  });
1890
2292
  }
1891
2293
  }), null);
1892
- (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())));
1893
2295
  return _el$;
1894
2296
  })();
1895
2297
  }
1896
- (0, import_web45.delegateEvents)(["click"]);
2298
+ (0, import_web49.delegateEvents)(["click"]);
1897
2299
 
1898
2300
  // src/solid/components/ColorControl.tsx
1899
- var import_web54 = require("solid-js/web");
1900
- var import_web55 = require("solid-js/web");
1901
- var import_web56 = require("solid-js/web");
1902
- var import_web57 = require("solid-js/web");
1903
2301
  var import_web58 = require("solid-js/web");
1904
2302
  var import_web59 = require("solid-js/web");
1905
2303
  var import_web60 = require("solid-js/web");
1906
2304
  var import_web61 = require("solid-js/web");
1907
- var import_solid_js8 = require("solid-js");
1908
- var _tmpl$17 = /* @__PURE__ */ (0, import_web54.template)(`<input type=text class=dialkit-color-hex-input autofocus>`);
1909
- 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>`);
1910
- 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>`);
1911
2313
  var HEX_COLOR_REGEX = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/;
1912
2314
  function expandShorthandHex(hex) {
1913
2315
  if (hex.length !== 4) return hex;
1914
2316
  return `#${hex[1]}${hex[1]}${hex[2]}${hex[2]}${hex[3]}${hex[3]}`;
1915
2317
  }
1916
2318
  function ColorControl(props) {
1917
- const [isEditing, setIsEditing] = (0, import_solid_js8.createSignal)(false);
1918
- const [editValue, setEditValue] = (0, import_solid_js8.createSignal)(props.value);
1919
- 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)();
1920
2322
  let colorInputRef;
1921
- (0, import_solid_js8.createEffect)(() => {
2323
+ (0, import_solid_js10.createEffect)(() => {
1922
2324
  if (!isEditing()) {
1923
2325
  setEditValue(props.value);
1924
2326
  }
@@ -1939,18 +2341,18 @@ function ColorControl(props) {
1939
2341
  }
1940
2342
  };
1941
2343
  return (() => {
1942
- var _el$ = _tmpl$26(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$5 = _el$3.firstChild, _el$6 = _el$5.nextSibling;
1943
- (0, import_web61.setAttribute)(_el$2, "for", textInputId);
1944
- (0, import_web60.insert)(_el$2, () => props.label);
1945
- (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, {
1946
2348
  get when() {
1947
2349
  return isEditing();
1948
2350
  },
1949
2351
  get fallback() {
1950
2352
  return (() => {
1951
- var _el$7 = _tmpl$35();
2353
+ var _el$7 = _tmpl$36();
1952
2354
  _el$7.$$click = () => setIsEditing(true);
1953
- (0, import_web60.insert)(_el$7, () => (props.value ?? "").toUpperCase());
2355
+ (0, import_web64.insert)(_el$7, () => (props.value ?? "").toUpperCase());
1954
2356
  return _el$7;
1955
2357
  })();
1956
2358
  },
@@ -1959,57 +2361,57 @@ function ColorControl(props) {
1959
2361
  _el$4.$$keydown = handleKeyDown;
1960
2362
  _el$4.addEventListener("blur", handleTextSubmit);
1961
2363
  _el$4.$$input = (e) => setEditValue(e.currentTarget.value);
1962
- (0, import_web61.setAttribute)(_el$4, "id", textInputId);
1963
- (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());
1964
2366
  return _el$4;
1965
2367
  }
1966
2368
  }), _el$5);
1967
2369
  _el$5.$$click = () => colorInputRef?.click();
1968
2370
  _el$6.$$input = (e) => props.onChange(e.currentTarget.value);
1969
2371
  var _ref$ = colorInputRef;
1970
- typeof _ref$ === "function" ? (0, import_web57.use)(_ref$, _el$6) : colorInputRef = _el$6;
1971
- (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$) => {
1972
2374
  var _v$ = props.value, _v$2 = `Pick color for ${props.label}`, _v$3 = `${props.label} color picker`;
1973
- _v$ !== _p$.e && (0, import_web56.setStyleProperty)(_el$5, "background-color", _p$.e = _v$);
1974
- _v$2 !== _p$.t && (0, import_web61.setAttribute)(_el$5, "aria-label", _p$.t = _v$2);
1975
- _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);
1976
2378
  return _p$;
1977
2379
  }, {
1978
2380
  e: void 0,
1979
2381
  t: void 0,
1980
2382
  a: void 0
1981
2383
  });
1982
- (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));
1983
2385
  return _el$;
1984
2386
  })();
1985
2387
  }
1986
- (0, import_web55.delegateEvents)(["input", "keydown", "click"]);
2388
+ (0, import_web59.delegateEvents)(["input", "keydown", "click"]);
1987
2389
 
1988
2390
  // src/solid/components/PresetManager.tsx
1989
- var import_web62 = require("solid-js/web");
1990
- var import_web63 = require("solid-js/web");
1991
- var import_web64 = require("solid-js/web");
1992
- var import_web65 = require("solid-js/web");
1993
2391
  var import_web66 = require("solid-js/web");
1994
2392
  var import_web67 = require("solid-js/web");
1995
2393
  var import_web68 = require("solid-js/web");
1996
2394
  var import_web69 = require("solid-js/web");
1997
2395
  var import_web70 = require("solid-js/web");
1998
- var import_solid_js9 = require("solid-js");
1999
2396
  var import_web71 = require("solid-js/web");
2000
- var import_motion5 = require("motion");
2001
- var _tmpl$18 = /* @__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`);
2002
- 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">`);
2003
- 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>`);
2004
2406
  function PresetManager(props) {
2005
- const [isOpen, setIsOpen] = (0, import_solid_js9.createSignal)(false);
2006
- const [mounted, setMounted] = (0, import_solid_js9.createSignal)(false);
2007
- 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)({
2008
2410
  top: 0,
2009
2411
  left: 0,
2010
2412
  width: 0
2011
2413
  });
2012
- const [portalTarget, setPortalTarget] = (0, import_solid_js9.createSignal)(null);
2414
+ const [portalTarget, setPortalTarget] = (0, import_solid_js11.createSignal)(null);
2013
2415
  let triggerRef;
2014
2416
  let dropdownRef;
2015
2417
  let chevronRef;
@@ -2017,24 +2419,24 @@ function PresetManager(props) {
2017
2419
  let chevronAnim = null;
2018
2420
  const hasPresets = () => props.presets.length > 0;
2019
2421
  const activePreset = () => props.presets.find((p) => p.id === props.activePresetId);
2020
- (0, import_solid_js9.onMount)(() => {
2422
+ (0, import_solid_js11.onMount)(() => {
2021
2423
  const root = triggerRef?.closest(".dialkit-root");
2022
2424
  setPortalTarget(root ?? document.body);
2023
2425
  if (chevronRef) {
2024
2426
  chevronRef.style.transform = `rotate(${isOpen() ? 180 : 0}deg)`;
2025
2427
  chevronRef.style.opacity = String(hasPresets() ? 0.6 : 0.25);
2026
2428
  }
2027
- (0, import_solid_js9.onCleanup)(() => {
2429
+ (0, import_solid_js11.onCleanup)(() => {
2028
2430
  closeAnim?.stop();
2029
2431
  chevronAnim?.stop();
2030
2432
  });
2031
2433
  });
2032
- (0, import_solid_js9.createEffect)(() => {
2434
+ (0, import_solid_js11.createEffect)(() => {
2033
2435
  if (!chevronRef) return;
2034
2436
  const open = isOpen();
2035
2437
  const has = hasPresets();
2036
2438
  chevronAnim?.stop();
2037
- chevronAnim = (0, import_motion5.animate)(chevronRef, {
2439
+ chevronAnim = (0, import_motion4.animate)(chevronRef, {
2038
2440
  rotate: open ? 180 : 0,
2039
2441
  opacity: has ? 0.6 : 0.25
2040
2442
  }, {
@@ -2067,7 +2469,7 @@ function PresetManager(props) {
2067
2469
  return;
2068
2470
  }
2069
2471
  closeAnim?.stop();
2070
- closeAnim = (0, import_motion5.animate)(dropdownRef, {
2472
+ closeAnim = (0, import_motion4.animate)(dropdownRef, {
2071
2473
  opacity: 0,
2072
2474
  y: 4,
2073
2475
  scale: 0.97
@@ -2085,7 +2487,7 @@ function PresetManager(props) {
2085
2487
  if (isOpen()) closeDropdown();
2086
2488
  else openDropdown();
2087
2489
  };
2088
- (0, import_solid_js9.createEffect)(() => {
2490
+ (0, import_solid_js11.createEffect)(() => {
2089
2491
  if (!isOpen()) return;
2090
2492
  const handleViewportChange = () => updatePos();
2091
2493
  const handler = (e) => {
@@ -2097,7 +2499,7 @@ function PresetManager(props) {
2097
2499
  document.addEventListener("mousedown", handler);
2098
2500
  window.addEventListener("resize", handleViewportChange);
2099
2501
  window.addEventListener("scroll", handleViewportChange, true);
2100
- (0, import_solid_js9.onCleanup)(() => {
2502
+ (0, import_solid_js11.onCleanup)(() => {
2101
2503
  document.removeEventListener("mousedown", handler);
2102
2504
  window.removeEventListener("resize", handleViewportChange);
2103
2505
  window.removeEventListener("scroll", handleViewportChange, true);
@@ -2113,35 +2515,36 @@ function PresetManager(props) {
2113
2515
  DialStore.deletePreset(props.panelId, presetId);
2114
2516
  };
2115
2517
  return (() => {
2116
- 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;
2117
2519
  _el$2.$$click = toggle;
2118
2520
  var _ref$ = triggerRef;
2119
- typeof _ref$ === "function" ? (0, import_web70.use)(_ref$, _el$2) : triggerRef = _el$2;
2120
- (0, import_web68.insert)(_el$3, (() => {
2121
- 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());
2122
2524
  return () => _c$() ? activePreset().name : "Version 1";
2123
2525
  })());
2124
2526
  var _ref$2 = chevronRef;
2125
- typeof _ref$2 === "function" ? (0, import_web70.use)(_ref$2, _el$4) : chevronRef = _el$4;
2126
- (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, {
2127
2530
  get when() {
2128
2531
  return !!portalTarget();
2129
2532
  },
2130
2533
  get children() {
2131
- return (0, import_web67.createComponent)(import_web71.Portal, {
2534
+ return (0, import_web70.createComponent)(import_web75.Portal, {
2132
2535
  get mount() {
2133
2536
  return portalTarget();
2134
2537
  },
2135
2538
  get children() {
2136
- return (0, import_web67.createComponent)(import_solid_js9.Show, {
2539
+ return (0, import_web70.createComponent)(import_solid_js11.Show, {
2137
2540
  get when() {
2138
2541
  return mounted();
2139
2542
  },
2140
2543
  get children() {
2141
- var _el$5 = _tmpl$18(), _el$6 = _el$5.firstChild;
2142
- (0, import_web70.use)((el) => {
2544
+ var _el$6 = _tmpl$18(), _el$7 = _el$6.firstChild;
2545
+ (0, import_web74.use)((el) => {
2143
2546
  dropdownRef = el;
2144
- (0, import_motion5.animate)(el, {
2547
+ (0, import_motion4.animate)(el, {
2145
2548
  opacity: [0, 1],
2146
2549
  y: [4, 0],
2147
2550
  scale: [0.97, 1]
@@ -2150,27 +2553,43 @@ function PresetManager(props) {
2150
2553
  visualDuration: 0.15,
2151
2554
  bounce: 0
2152
2555
  });
2153
- }, _el$5);
2154
- _el$6.$$click = () => handleSelect(null);
2155
- (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, {
2156
2559
  get each() {
2157
2560
  return props.presets;
2158
2561
  },
2159
2562
  children: (preset) => (() => {
2160
- var _el$7 = _tmpl$36(), _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling;
2161
- _el$7.$$click = () => handleSelect(preset.id);
2162
- (0, import_web68.insert)(_el$8, () => preset.name);
2163
- _el$9.$$click = (e) => handleDelete(e, preset.id);
2164
- (0, import_web66.effect)(() => (0, import_web64.setAttribute)(_el$7, "data-active", String(preset.id === props.activePresetId)));
2165
- 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;
2166
2585
  })()
2167
2586
  }), null);
2168
- (0, import_web66.effect)((_p$) => {
2587
+ (0, import_web69.effect)((_p$) => {
2169
2588
  var _v$ = `${pos().top}px`, _v$2 = `${pos().left}px`, _v$3 = `${pos().width}px`, _v$4 = String(!props.activePresetId);
2170
- _v$ !== _p$.e && (0, import_web65.setStyleProperty)(_el$5, "top", _p$.e = _v$);
2171
- _v$2 !== _p$.t && (0, import_web65.setStyleProperty)(_el$5, "left", _p$.t = _v$2);
2172
- _v$3 !== _p$.a && (0, import_web65.setStyleProperty)(_el$5, "min-width", _p$.a = _v$3);
2173
- _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);
2174
2593
  return _p$;
2175
2594
  }, {
2176
2595
  e: void 0,
@@ -2178,18 +2597,18 @@ function PresetManager(props) {
2178
2597
  a: void 0,
2179
2598
  o: void 0
2180
2599
  });
2181
- return _el$5;
2600
+ return _el$6;
2182
2601
  }
2183
2602
  });
2184
2603
  }
2185
2604
  });
2186
2605
  }
2187
2606
  }), null);
2188
- (0, import_web66.effect)((_p$) => {
2607
+ (0, import_web69.effect)((_p$) => {
2189
2608
  var _v$5 = String(isOpen()), _v$6 = String(!!activePreset()), _v$7 = String(!hasPresets());
2190
- _v$5 !== _p$.e && (0, import_web64.setAttribute)(_el$2, "data-open", _p$.e = _v$5);
2191
- _v$6 !== _p$.t && (0, import_web64.setAttribute)(_el$2, "data-has-preset", _p$.t = _v$6);
2192
- _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);
2193
2612
  return _p$;
2194
2613
  }, {
2195
2614
  e: void 0,
@@ -2199,19 +2618,21 @@ function PresetManager(props) {
2199
2618
  return _el$;
2200
2619
  })();
2201
2620
  }
2202
- (0, import_web63.delegateEvents)(["click"]);
2621
+ (0, import_web67.delegateEvents)(["click"]);
2203
2622
 
2204
2623
  // src/solid/components/Panel.tsx
2205
- var _tmpl$19 = /* @__PURE__ */ (0, import_web72.template)(`<button class=dialkit-button>`);
2206
- 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">`);
2207
- 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`);
2208
- 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>`);
2209
2628
  function Panel(props) {
2210
- const [copied, setCopied] = (0, import_solid_js10.createSignal)(false);
2211
- const [isPanelOpen, setIsPanelOpen] = (0, import_solid_js10.createSignal)(props.defaultOpen ?? true);
2212
- const [values, setValues] = (0, import_solid_js10.createSignal)(DialStore.getValues(props.panel.id));
2213
- const [presets, setPresets] = (0, import_solid_js10.createSignal)(DialStore.getPresets(props.panel.id));
2214
- 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));
2215
2636
  let addButtonRef;
2216
2637
  let copyButtonRef;
2217
2638
  let copyClipboardIconRef;
@@ -2226,7 +2647,7 @@ function Panel(props) {
2226
2647
  visualDuration: 0.15,
2227
2648
  bounce: 0.3
2228
2649
  };
2229
- (0, import_solid_js10.onMount)(() => {
2650
+ (0, import_solid_js12.onMount)(() => {
2230
2651
  const unsub = DialStore.subscribe(props.panel.id, () => {
2231
2652
  setValues(DialStore.getValues(props.panel.id));
2232
2653
  setPresets(DialStore.getPresets(props.panel.id));
@@ -2243,7 +2664,7 @@ function Panel(props) {
2243
2664
  copyCheckIconRef.style.filter = "blur(4px)";
2244
2665
  didInitCopyIcons = true;
2245
2666
  }
2246
- (0, import_solid_js10.onCleanup)(unsub);
2667
+ (0, import_solid_js12.onCleanup)(unsub);
2247
2668
  });
2248
2669
  const handleAddPreset = () => {
2249
2670
  const nextNum = presets().length + 2;
@@ -2262,7 +2683,7 @@ Apply these values as the new defaults in the createDialKit call.`;
2262
2683
  setCopied(true);
2263
2684
  setTimeout(() => setCopied(false), 1500);
2264
2685
  };
2265
- (0, import_solid_js10.createEffect)(() => {
2686
+ (0, import_solid_js12.createEffect)(() => {
2266
2687
  const isCopied = copied();
2267
2688
  if (!copyClipboardIconRef || !copyCheckIconRef) return;
2268
2689
  copyClipboardAnim?.stop();
@@ -2273,18 +2694,18 @@ Apply these values as the new defaults in the createDialKit call.`;
2273
2694
  visualDuration: 0.3,
2274
2695
  bounce: 0.2
2275
2696
  };
2276
- copyClipboardAnim = (0, import_motion6.animate)(copyClipboardIconRef, {
2697
+ copyClipboardAnim = (0, import_motion5.animate)(copyClipboardIconRef, {
2277
2698
  opacity: isCopied ? 0 : 1,
2278
2699
  scale: isCopied ? 0.5 : 1,
2279
2700
  filter: isCopied ? "blur(4px)" : "blur(0px)"
2280
2701
  }, transition);
2281
- copyCheckAnim = (0, import_motion6.animate)(copyCheckIconRef, {
2702
+ copyCheckAnim = (0, import_motion5.animate)(copyCheckIconRef, {
2282
2703
  opacity: isCopied ? 1 : 0,
2283
2704
  scale: isCopied ? 1 : 0.5,
2284
2705
  filter: isCopied ? "blur(0px)" : "blur(4px)"
2285
2706
  }, transition);
2286
2707
  });
2287
- (0, import_solid_js10.onCleanup)(() => {
2708
+ (0, import_solid_js12.onCleanup)(() => {
2288
2709
  addTapAnim?.stop();
2289
2710
  copyTapAnim?.stop();
2290
2711
  copyClipboardAnim?.stop();
@@ -2293,28 +2714,28 @@ Apply these values as the new defaults in the createDialKit call.`;
2293
2714
  const handleAddTapStart = () => {
2294
2715
  if (!addButtonRef) return;
2295
2716
  addTapAnim?.stop();
2296
- addTapAnim = (0, import_motion6.animate)(addButtonRef, {
2717
+ addTapAnim = (0, import_motion5.animate)(addButtonRef, {
2297
2718
  scale: 0.9
2298
2719
  }, tapTransition);
2299
2720
  };
2300
2721
  const handleAddTapEnd = () => {
2301
2722
  if (!addButtonRef) return;
2302
2723
  addTapAnim?.stop();
2303
- addTapAnim = (0, import_motion6.animate)(addButtonRef, {
2724
+ addTapAnim = (0, import_motion5.animate)(addButtonRef, {
2304
2725
  scale: 1
2305
2726
  }, tapTransition);
2306
2727
  };
2307
2728
  const handleCopyTapStart = () => {
2308
2729
  if (!copyButtonRef) return;
2309
2730
  copyTapAnim?.stop();
2310
- copyTapAnim = (0, import_motion6.animate)(copyButtonRef, {
2731
+ copyTapAnim = (0, import_motion5.animate)(copyButtonRef, {
2311
2732
  scale: 0.95
2312
2733
  }, tapTransition);
2313
2734
  };
2314
2735
  const handleCopyTapEnd = () => {
2315
2736
  if (!copyButtonRef) return;
2316
2737
  copyTapAnim?.stop();
2317
- copyTapAnim = (0, import_motion6.animate)(copyButtonRef, {
2738
+ copyTapAnim = (0, import_motion5.animate)(copyButtonRef, {
2318
2739
  scale: 1
2319
2740
  }, tapTransition);
2320
2741
  };
@@ -2322,7 +2743,7 @@ Apply these values as the new defaults in the createDialKit call.`;
2322
2743
  const value = () => values()[control.path];
2323
2744
  switch (control.type) {
2324
2745
  case "slider":
2325
- return (0, import_web77.createComponent)(Slider, {
2746
+ return (0, import_web82.createComponent)(Slider, {
2326
2747
  get label() {
2327
2748
  return control.label;
2328
2749
  },
@@ -2338,20 +2759,32 @@ Apply these values as the new defaults in the createDialKit call.`;
2338
2759
  },
2339
2760
  get step() {
2340
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;
2341
2768
  }
2342
2769
  });
2343
2770
  case "toggle":
2344
- return (0, import_web77.createComponent)(Toggle, {
2771
+ return (0, import_web82.createComponent)(Toggle, {
2345
2772
  get label() {
2346
2773
  return control.label;
2347
2774
  },
2348
2775
  get checked() {
2349
2776
  return value();
2350
2777
  },
2351
- 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
+ }
2352
2785
  });
2353
2786
  case "spring":
2354
- return (0, import_web77.createComponent)(SpringControl, {
2787
+ return (0, import_web82.createComponent)(SpringControl, {
2355
2788
  get panelId() {
2356
2789
  return props.panel.id;
2357
2790
  },
@@ -2367,7 +2800,7 @@ Apply these values as the new defaults in the createDialKit call.`;
2367
2800
  onChange: (v) => DialStore.updateValue(props.panel.id, control.path, v)
2368
2801
  });
2369
2802
  case "folder":
2370
- return (0, import_web77.createComponent)(Folder, {
2803
+ return (0, import_web82.createComponent)(Folder, {
2371
2804
  get title() {
2372
2805
  return control.label;
2373
2806
  },
@@ -2375,16 +2808,16 @@ Apply these values as the new defaults in the createDialKit call.`;
2375
2808
  return control.defaultOpen ?? true;
2376
2809
  },
2377
2810
  get children() {
2378
- return (0, import_web77.createComponent)(import_solid_js10.For, {
2811
+ return (0, import_web82.createComponent)(import_solid_js12.For, {
2379
2812
  get each() {
2380
2813
  return control.children ?? [];
2381
2814
  },
2382
- children: (child) => (0, import_web76.memo)(() => renderControl(child))
2815
+ children: (child) => (0, import_web83.memo)(() => renderControl(child))
2383
2816
  });
2384
2817
  }
2385
2818
  });
2386
2819
  case "text":
2387
- return (0, import_web77.createComponent)(TextControl, {
2820
+ return (0, import_web82.createComponent)(TextControl, {
2388
2821
  get label() {
2389
2822
  return control.label;
2390
2823
  },
@@ -2397,7 +2830,7 @@ Apply these values as the new defaults in the createDialKit call.`;
2397
2830
  }
2398
2831
  });
2399
2832
  case "select":
2400
- return (0, import_web77.createComponent)(SelectControl, {
2833
+ return (0, import_web82.createComponent)(SelectControl, {
2401
2834
  get label() {
2402
2835
  return control.label;
2403
2836
  },
@@ -2410,7 +2843,7 @@ Apply these values as the new defaults in the createDialKit call.`;
2410
2843
  onChange: (v) => DialStore.updateValue(props.panel.id, control.path, v)
2411
2844
  });
2412
2845
  case "color":
2413
- return (0, import_web77.createComponent)(ColorControl, {
2846
+ return (0, import_web82.createComponent)(ColorControl, {
2414
2847
  get label() {
2415
2848
  return control.label;
2416
2849
  },
@@ -2424,29 +2857,44 @@ Apply these values as the new defaults in the createDialKit call.`;
2424
2857
  }
2425
2858
  };
2426
2859
  const renderControls = () => {
2427
- return (0, import_web77.createComponent)(import_solid_js10.For, {
2860
+ return (0, import_web82.createComponent)(import_solid_js12.For, {
2428
2861
  get each() {
2429
2862
  return props.panel.controls;
2430
2863
  },
2431
- children: (control) => (0, import_web76.memo)(() => (0, import_web76.memo)(() => control.type === "action")() ? (() => {
2864
+ children: (control) => (0, import_web83.memo)(() => (0, import_web83.memo)(() => control.type === "action")() ? (() => {
2432
2865
  var _el$ = _tmpl$19();
2433
2866
  _el$.$$click = () => DialStore.triggerAction(props.panel.id, control.path);
2434
- (0, import_web75.insert)(_el$, () => control.label);
2867
+ (0, import_web81.insert)(_el$, () => control.label);
2435
2868
  return _el$;
2436
2869
  })() : renderControl(control))
2437
2870
  });
2438
2871
  };
2439
2872
  const toolbar = [(() => {
2440
- 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;
2441
2874
  _el$2.addEventListener("pointerleave", handleAddTapEnd);
2442
2875
  _el$2.addEventListener("pointercancel", handleAddTapEnd);
2443
2876
  _el$2.$$pointerup = handleAddTapEnd;
2444
2877
  _el$2.$$pointerdown = handleAddTapStart;
2445
2878
  _el$2.$$click = handleAddPreset;
2446
2879
  var _ref$ = addButtonRef;
2447
- 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
+ });
2448
2896
  return _el$2;
2449
- })(), (0, import_web77.createComponent)(PresetManager, {
2897
+ })(), (0, import_web82.createComponent)(PresetManager, {
2450
2898
  get panelId() {
2451
2899
  return props.panel.id;
2452
2900
  },
@@ -2458,23 +2906,35 @@ Apply these values as the new defaults in the createDialKit call.`;
2458
2906
  },
2459
2907
  onAdd: handleAddPreset
2460
2908
  }), (() => {
2461
- var _el$3 = _tmpl$37(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling;
2462
- _el$3.addEventListener("pointerleave", handleCopyTapEnd);
2463
- _el$3.addEventListener("pointercancel", handleCopyTapEnd);
2464
- _el$3.$$pointerup = handleCopyTapEnd;
2465
- _el$3.$$pointerdown = handleCopyTapStart;
2466
- _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;
2467
2915
  var _ref$2 = copyButtonRef;
2468
- 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;
2469
2917
  var _ref$3 = copyClipboardIconRef;
2470
- 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;
2471
2919
  var _ref$4 = copyCheckIconRef;
2472
- typeof _ref$4 === "function" ? (0, import_web74.use)(_ref$4, _el$6) : copyCheckIconRef = _el$6;
2473
- 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;
2474
2934
  })()];
2475
2935
  return (() => {
2476
- var _el$7 = _tmpl$43();
2477
- (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, {
2478
2938
  get title() {
2479
2939
  return props.panel.name;
2480
2940
  },
@@ -2491,60 +2951,67 @@ Apply these values as the new defaults in the createDialKit call.`;
2491
2951
  return renderControls();
2492
2952
  }
2493
2953
  }));
2494
- return _el$7;
2954
+ return _el$17;
2495
2955
  })();
2496
2956
  }
2497
- (0, import_web73.delegateEvents)(["click", "pointerdown", "pointerup"]);
2957
+ (0, import_web77.delegateEvents)(["click", "pointerdown", "pointerup"]);
2498
2958
 
2499
2959
  // src/solid/components/DialRoot.tsx
2500
- var _tmpl$20 = /* @__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;
2501
2963
  function DialRoot(props) {
2502
- const [panels, setPanels] = (0, import_solid_js11.createSignal)([]);
2503
- const [mounted, setMounted] = (0, import_solid_js11.createSignal)(false);
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);
2504
2967
  const inline = () => (props.mode ?? "popover") === "inline";
2505
- (0, import_solid_js11.onMount)(() => {
2968
+ (0, import_solid_js13.onMount)(() => {
2506
2969
  setMounted(true);
2507
2970
  setPanels(DialStore.getPanels());
2508
2971
  const unsub = DialStore.subscribeGlobal(() => {
2509
2972
  setPanels(DialStore.getPanels());
2510
2973
  });
2511
- (0, import_solid_js11.onCleanup)(unsub);
2974
+ (0, import_solid_js13.onCleanup)(unsub);
2512
2975
  });
2513
- const content = () => (() => {
2514
- var _el$ = _tmpl$20(), _el$2 = _el$.firstChild;
2515
- (0, import_web82.insert)(_el$2, (0, import_web83.createComponent)(import_solid_js11.For, {
2516
- get each() {
2517
- return panels();
2518
- },
2519
- children: (panel) => (0, import_web83.createComponent)(Panel, {
2520
- panel,
2521
- get defaultOpen() {
2522
- return inline() || (props.defaultOpen ?? true);
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();
2523
2982
  },
2524
- get inline() {
2525
- return inline();
2526
- }
2527
- })
2528
- }));
2529
- (0, import_web81.effect)((_p$) => {
2530
- var _v$ = props.mode ?? "popover", _v$2 = inline() ? void 0 : props.position ?? "top-right", _v$3 = props.mode ?? "popover";
2531
- _v$ !== _p$.e && (0, import_web80.setAttribute)(_el$, "data-mode", _p$.e = _v$);
2532
- _v$2 !== _p$.t && (0, import_web80.setAttribute)(_el$2, "data-position", _p$.t = _v$2);
2533
- _v$3 !== _p$.a && (0, import_web80.setAttribute)(_el$2, "data-mode", _p$.a = _v$3);
2534
- return _p$;
2535
- }, {
2536
- e: void 0,
2537
- t: void 0,
2538
- a: void 0
2539
- });
2540
- return _el$;
2541
- })();
2542
- return (0, import_web83.createComponent)(import_solid_js11.Show, {
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
+ }
3008
+ });
3009
+ return (0, import_web89.createComponent)(import_solid_js13.Show, {
2543
3010
  get when() {
2544
- return (0, import_web79.memo)(() => !!(mounted() && typeof window !== "undefined"))() && panels().length > 0;
3011
+ return (0, import_web85.memo)(() => !!(mounted() && typeof window !== "undefined"))() && panels().length > 0;
2545
3012
  },
2546
3013
  get children() {
2547
- return (0, import_web83.createComponent)(import_solid_js11.Show, {
3014
+ return (0, import_web89.createComponent)(import_solid_js13.Show, {
2548
3015
  get when() {
2549
3016
  return !inline();
2550
3017
  },
@@ -2552,7 +3019,7 @@ function DialRoot(props) {
2552
3019
  return content();
2553
3020
  },
2554
3021
  get children() {
2555
- return (0, import_web83.createComponent)(import_web84.Portal, {
3022
+ return (0, import_web89.createComponent)(import_web90.Portal, {
2556
3023
  get mount() {
2557
3024
  return document.body;
2558
3025
  },
@@ -2567,32 +3034,32 @@ function DialRoot(props) {
2567
3034
  }
2568
3035
 
2569
3036
  // src/solid/components/ButtonGroup.tsx
2570
- var import_web85 = require("solid-js/web");
2571
- var import_web86 = require("solid-js/web");
2572
- var import_web87 = require("solid-js/web");
2573
- var import_web88 = require("solid-js/web");
2574
- var import_web89 = require("solid-js/web");
2575
- var import_solid_js12 = require("solid-js");
2576
- var _tmpl$21 = /* @__PURE__ */ (0, import_web85.template)(`<div class=dialkit-button-group>`);
2577
- 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>`);
2578
3045
  function ButtonGroup(props) {
2579
3046
  return (() => {
2580
3047
  var _el$ = _tmpl$21();
2581
- (0, import_web88.insert)(_el$, (0, import_web89.createComponent)(import_solid_js12.For, {
3048
+ (0, import_web94.insert)(_el$, (0, import_web95.createComponent)(import_solid_js14.For, {
2582
3049
  get each() {
2583
3050
  return props.buttons;
2584
3051
  },
2585
3052
  children: (button) => (() => {
2586
- var _el$2 = _tmpl$29();
2587
- (0, import_web87.addEventListener)(_el$2, "click", button.onClick, true);
2588
- (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);
2589
3056
  return _el$2;
2590
3057
  })()
2591
3058
  }));
2592
3059
  return _el$;
2593
3060
  })();
2594
3061
  }
2595
- (0, import_web86.delegateEvents)(["click"]);
3062
+ (0, import_web92.delegateEvents)(["click"]);
2596
3063
  // Annotate the CommonJS export names for ESM import in node:
2597
3064
  0 && (module.exports = {
2598
3065
  ButtonGroup,