@ark-ui/solid 3.2.1 → 3.3.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 (82) hide show
  1. package/README.md +19 -14
  2. package/dist/cjs/index.js +2013 -33
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/esm/index.js +1977 -23
  5. package/dist/esm/index.js.map +1 -1
  6. package/dist/source/components/checkbox/checkbox-group.jsx +18 -0
  7. package/dist/source/components/checkbox/checkbox.js +1 -0
  8. package/dist/source/components/checkbox/index.js +3 -0
  9. package/dist/source/components/checkbox/use-checkbox-group-context.jsx +6 -0
  10. package/dist/source/components/checkbox/use-checkbox-group.js +52 -0
  11. package/dist/source/components/checkbox/use-checkbox.js +9 -4
  12. package/dist/source/components/combobox/combobox-list.jsx +8 -0
  13. package/dist/source/components/combobox/combobox.js +1 -0
  14. package/dist/source/components/combobox/index.js +1 -0
  15. package/dist/source/components/index.js +2 -0
  16. package/dist/source/components/presence/split-presence-props.js +1 -0
  17. package/dist/source/components/qr-code/index.js +9 -0
  18. package/dist/source/components/qr-code/qr-code-context.js +2 -0
  19. package/dist/source/components/qr-code/qr-code-frame.jsx +8 -0
  20. package/dist/source/components/qr-code/qr-code-overlay.jsx +8 -0
  21. package/dist/source/components/qr-code/qr-code-pattern.jsx +8 -0
  22. package/dist/source/components/qr-code/qr-code-root-provider.jsx +11 -0
  23. package/dist/source/components/qr-code/qr-code-root.jsx +18 -0
  24. package/dist/source/components/qr-code/qr-code.js +6 -0
  25. package/dist/source/components/qr-code/use-qr-code-context.js +5 -0
  26. package/dist/source/components/qr-code/use-qr-code.js +19 -0
  27. package/dist/source/components/select/index.js +1 -0
  28. package/dist/source/components/select/select-list.jsx +8 -0
  29. package/dist/source/components/select/select.js +1 -0
  30. package/dist/source/components/signature-pad/index.js +11 -0
  31. package/dist/source/components/signature-pad/signature-pad-clear-trigger.jsx +8 -0
  32. package/dist/source/components/signature-pad/signature-pad-context.jsx +2 -0
  33. package/dist/source/components/signature-pad/signature-pad-control.jsx +8 -0
  34. package/dist/source/components/signature-pad/signature-pad-guide.jsx +8 -0
  35. package/dist/source/components/signature-pad/signature-pad-label.jsx +8 -0
  36. package/dist/source/components/signature-pad/signature-pad-root-provider.jsx +13 -0
  37. package/dist/source/components/signature-pad/signature-pad-root.jsx +22 -0
  38. package/dist/source/components/signature-pad/signature-pad-segment.jsx +18 -0
  39. package/dist/source/components/signature-pad/signature-pad.js +8 -0
  40. package/dist/source/components/signature-pad/use-signature-pad-context.js +5 -0
  41. package/dist/source/components/signature-pad/use-signature-pad.js +17 -0
  42. package/dist/source/components/tabs/tab-content.jsx +4 -1
  43. package/dist/source/components/toast/toast-root.jsx +3 -1
  44. package/dist/source/utils/use-controllable-state.js +18 -0
  45. package/dist/types/components/checkbox/checkbox-group.d.ts +6 -0
  46. package/dist/types/components/checkbox/checkbox.d.ts +1 -0
  47. package/dist/types/components/checkbox/index.d.ts +3 -0
  48. package/dist/types/components/checkbox/use-checkbox-group-context.d.ts +4 -0
  49. package/dist/types/components/checkbox/use-checkbox-group.d.ts +42 -0
  50. package/dist/types/components/checkbox/use-checkbox.d.ts +1 -1
  51. package/dist/types/components/combobox/combobox-list.d.ts +4 -0
  52. package/dist/types/components/combobox/combobox.d.ts +1 -0
  53. package/dist/types/components/combobox/index.d.ts +1 -0
  54. package/dist/types/components/index.d.ts +2 -0
  55. package/dist/types/components/presence/split-presence-props.d.ts +1 -1
  56. package/dist/types/components/qr-code/index.d.ts +10 -0
  57. package/dist/types/components/qr-code/qr-code-context.d.ts +6 -0
  58. package/dist/types/components/qr-code/qr-code-frame.d.ts +4 -0
  59. package/dist/types/components/qr-code/qr-code-overlay.d.ts +4 -0
  60. package/dist/types/components/qr-code/qr-code-pattern.d.ts +4 -0
  61. package/dist/types/components/qr-code/qr-code-root-provider.d.ts +9 -0
  62. package/dist/types/components/qr-code/qr-code-root.d.ts +6 -0
  63. package/dist/types/components/qr-code/qr-code.d.ts +7 -0
  64. package/dist/types/components/qr-code/use-qr-code-context.d.ts +4 -0
  65. package/dist/types/components/qr-code/use-qr-code.d.ts +9 -0
  66. package/dist/types/components/select/index.d.ts +1 -0
  67. package/dist/types/components/select/select-list.d.ts +4 -0
  68. package/dist/types/components/select/select.d.ts +1 -0
  69. package/dist/types/components/signature-pad/index.d.ts +12 -0
  70. package/dist/types/components/signature-pad/signature-pad-clear-trigger.d.ts +4 -0
  71. package/dist/types/components/signature-pad/signature-pad-context.d.ts +6 -0
  72. package/dist/types/components/signature-pad/signature-pad-control.d.ts +4 -0
  73. package/dist/types/components/signature-pad/signature-pad-guide.d.ts +4 -0
  74. package/dist/types/components/signature-pad/signature-pad-label.d.ts +4 -0
  75. package/dist/types/components/signature-pad/signature-pad-root-provider.d.ts +9 -0
  76. package/dist/types/components/signature-pad/signature-pad-root.d.ts +6 -0
  77. package/dist/types/components/signature-pad/signature-pad-segment.d.ts +4 -0
  78. package/dist/types/components/signature-pad/signature-pad.d.ts +9 -0
  79. package/dist/types/components/signature-pad/use-signature-pad-context.d.ts +4 -0
  80. package/dist/types/components/signature-pad/use-signature-pad.d.ts +9 -0
  81. package/dist/types/utils/use-controllable-state.d.ts +7 -0
  82. package/package.json +45 -44
package/dist/cjs/index.js CHANGED
@@ -6,7 +6,7 @@ var solid = require('@zag-js/solid');
6
6
  var collapsible$1 = require('@zag-js/collapsible');
7
7
  var accordion$1 = require('@zag-js/accordion');
8
8
  var avatar$1 = require('@zag-js/avatar');
9
- var anatomy = require('@ark-ui/anatomy');
9
+ var anatomy$1 = require('@ark-ui/anatomy');
10
10
  var carousel$1 = require('@zag-js/carousel');
11
11
  var checkbox$1 = require('@zag-js/checkbox');
12
12
  var clipboard$1 = require('@zag-js/clipboard');
@@ -25,9 +25,12 @@ var pagination$1 = require('@zag-js/pagination');
25
25
  var pinInput$1 = require('@zag-js/pin-input');
26
26
  var popover$1 = require('@zag-js/popover');
27
27
  var progress$1 = require('@zag-js/progress');
28
+ var qrCode$1 = require('@zag-js/qr-code');
28
29
  var radio = require('@zag-js/radio-group');
29
30
  var rating = require('@zag-js/rating-group');
30
31
  var select$1 = require('@zag-js/select');
32
+ var domQuery = require('@zag-js/dom-query');
33
+ var types = require('@zag-js/types');
31
34
  var slider$1 = require('@zag-js/slider');
32
35
  var splitter$1 = require('@zag-js/splitter');
33
36
  var zagSwitch = require('@zag-js/switch');
@@ -37,7 +40,6 @@ var toast$1 = require('@zag-js/toast');
37
40
  var toggleGroup$1 = require('@zag-js/toggle-group');
38
41
  var tooltip$1 = require('@zag-js/tooltip');
39
42
  var treeView$1 = require('@zag-js/tree-view');
40
- var domQuery = require('@zag-js/dom-query');
41
43
 
42
44
  function _interopNamespaceDefault(e) {
43
45
  var n = Object.create(null);
@@ -76,6 +78,7 @@ var pagination__namespace = /*#__PURE__*/_interopNamespaceDefault(pagination$1);
76
78
  var pinInput__namespace = /*#__PURE__*/_interopNamespaceDefault(pinInput$1);
77
79
  var popover__namespace = /*#__PURE__*/_interopNamespaceDefault(popover$1);
78
80
  var progress__namespace = /*#__PURE__*/_interopNamespaceDefault(progress$1);
81
+ var qrCode__namespace = /*#__PURE__*/_interopNamespaceDefault(qrCode$1);
79
82
  var radio__namespace = /*#__PURE__*/_interopNamespaceDefault(radio);
80
83
  var rating__namespace = /*#__PURE__*/_interopNamespaceDefault(rating);
81
84
  var select__namespace = /*#__PURE__*/_interopNamespaceDefault(select$1);
@@ -184,8 +187,8 @@ const CollapsibleContent = props => {
184
187
 
185
188
  const CollapsibleContext = props => props.children(useCollapsibleContext());
186
189
 
187
- const isFunction = value => typeof value === 'function';
188
- const runIfFn = (valueOrFn, ...args) => isFunction(valueOrFn) ? valueOrFn(...args) : valueOrFn;
190
+ const isFunction$1 = value => typeof value === 'function';
191
+ const runIfFn$1 = (valueOrFn, ...args) => isFunction$1(valueOrFn) ? valueOrFn(...args) : valueOrFn;
189
192
 
190
193
  const [EnvironmentContextProvider, useEnvironmentContext] = createContext({
191
194
  hookName: 'useEnvironmentContext',
@@ -198,10 +201,10 @@ const [EnvironmentContextProvider, useEnvironmentContext] = createContext({
198
201
  })
199
202
  });
200
203
 
201
- var _tmpl$$4 = /*#__PURE__*/web.template(`<span hidden>`);
204
+ var _tmpl$$5 = /*#__PURE__*/web.template(`<span hidden>`);
202
205
  const EnvironmentProvider = props => {
203
206
  const [spanRef, setSpanRef] = solidJs.createSignal();
204
- const getRootNode = () => runIfFn(props.value) ?? spanRef()?.ownerDocument ?? document;
207
+ const getRootNode = () => runIfFn$1(props.value) ?? spanRef()?.ownerDocument ?? document;
205
208
  const environment = solidJs.createMemo(() => ({
206
209
  getRootNode,
207
210
  getDocument: () => domQuery.getDocument(getRootNode()),
@@ -215,7 +218,7 @@ const EnvironmentProvider = props => {
215
218
  return !props.value;
216
219
  },
217
220
  get children() {
218
- var _el$ = _tmpl$$4();
221
+ var _el$ = _tmpl$$5();
219
222
  web.use(setSpanRef, _el$);
220
223
  return _el$;
221
224
  }
@@ -528,7 +531,7 @@ const [CarouselProvider, useCarouselContext] = createContext({
528
531
  const CarouselContext = props => props.children(useCarouselContext());
529
532
 
530
533
  const CarouselControl = props => {
531
- const mergedProps = solid.mergeProps(() => anatomy.carouselAnatomy.build().control.attrs, props);
534
+ const mergedProps = solid.mergeProps(() => anatomy$1.carouselAnatomy.build().control.attrs, props);
532
535
  return web.createComponent(ark.div, mergedProps);
533
536
  };
534
537
 
@@ -646,6 +649,88 @@ const CheckboxControl = props => {
646
649
  return web.createComponent(ark.div, mergedProps);
647
650
  };
648
651
 
652
+ function useControllableState(props) {
653
+ const [uncontrolledValue, setUncontrolledValue] = solidJs.createSignal(runIfFn$1(props.defaultValue));
654
+ const controlled = solidJs.createMemo(() => props.value?.() !== undefined);
655
+ const currentValue = solidJs.createMemo(() => controlled() ? props.value?.() : uncontrolledValue());
656
+ const setValue = next => {
657
+ solidJs.untrack(() => {
658
+ const nextValue = runIfFn$1(next, currentValue());
659
+ if (controlled()) {
660
+ return props.onChange?.(nextValue);
661
+ }
662
+ setUncontrolledValue(nextValue);
663
+ return props.onChange?.(nextValue);
664
+ });
665
+ };
666
+ return [currentValue, setValue];
667
+ }
668
+
669
+ function useCheckboxGroup(props = {}) {
670
+ const interative = solidJs.createMemo(() => !(props.disabled || props.readOnly));
671
+ const [value, setValue] = useControllableState({
672
+ value: props.value,
673
+ defaultValue: props.defaultValue || [],
674
+ onChange: props.onValueChange
675
+ });
676
+ return solidJs.createMemo(() => {
677
+ const isChecked = val => {
678
+ return value().some(v => String(v) === String(val));
679
+ };
680
+ const toggleValue = val => {
681
+ isChecked(val) ? removeValue(val) : addValue(val);
682
+ };
683
+ const addValue = val => {
684
+ if (!interative()) return;
685
+ if (isChecked(val)) return;
686
+ setValue(value().concat(val));
687
+ };
688
+ const removeValue = val => {
689
+ if (!interative()) return;
690
+ setValue(value().filter(v => String(v) !== String(val)));
691
+ };
692
+ const getItemProps = itemProps => {
693
+ return {
694
+ checked: itemProps.value != null ? isChecked(itemProps.value) : undefined,
695
+ onCheckedChange() {
696
+ if (itemProps.value != null) {
697
+ toggleValue(itemProps.value);
698
+ }
699
+ },
700
+ disabled: props.disabled,
701
+ readOnly: props.readOnly
702
+ };
703
+ };
704
+ return {
705
+ isChecked,
706
+ value,
707
+ disabled: props.disabled,
708
+ readOnly: props.readOnly,
709
+ setValue,
710
+ addValue,
711
+ toggleValue,
712
+ getItemProps
713
+ };
714
+ });
715
+ }
716
+
717
+ const [CheckboxGroupContextProvider, useCheckboxGroupContext] = createContext({
718
+ hookName: 'useCheckboxGroupContext',
719
+ providerName: '<CheckboxGroupProvider />',
720
+ strict: false
721
+ });
722
+
723
+ const CheckboxGroup = props => {
724
+ const [checkboxGroupProps, localProps] = createSplitProps()(props, ['defaultValue', 'value', 'onValueChange', 'disabled', 'readOnly']);
725
+ const checkboxGroup = useCheckboxGroup(checkboxGroupProps);
726
+ return web.createComponent(CheckboxGroupContextProvider, {
727
+ value: checkboxGroup,
728
+ get children() {
729
+ return web.createComponent(ark.div, web.mergeProps(localProps, () => anatomy$1.checkboxAnatomy.build().group.attrs));
730
+ }
731
+ });
732
+ };
733
+
649
734
  const CheckboxHiddenInput = props => {
650
735
  const checkbox = useCheckboxContext();
651
736
  const mergedProps = solid.mergeProps(() => checkbox().getHiddenInputProps(), props);
@@ -669,7 +754,13 @@ const CheckboxLabel = props => {
669
754
  return web.createComponent(ark.span, mergedProps);
670
755
  };
671
756
 
672
- const useCheckbox = props => {
757
+ const useCheckbox = ownProps => {
758
+ const checkboxGroup = useCheckboxGroupContext();
759
+ const props = solidJs.createMemo(() => {
760
+ return solid.mergeProps(ownProps, checkboxGroup?.().getItemProps({
761
+ value: ownProps.value
762
+ }) ?? {});
763
+ }, [ownProps, checkboxGroup]);
673
764
  const locale = useLocaleContext();
674
765
  const environment = useEnvironmentContext();
675
766
  const id = solidJs.createUniqueId();
@@ -677,8 +768,8 @@ const useCheckbox = props => {
677
768
  id,
678
769
  dir: locale().dir,
679
770
  getRootNode: environment().getRootNode,
680
- checked: props.defaultChecked,
681
- ...props
771
+ checked: props().defaultChecked,
772
+ ...props()
682
773
  }));
683
774
  const [state, send] = solid.useMachine(checkbox__namespace.machine(context()), {
684
775
  context
@@ -715,6 +806,7 @@ var checkbox = /*#__PURE__*/Object.freeze({
715
806
  __proto__: null,
716
807
  Context: CheckboxContext,
717
808
  Control: CheckboxControl,
809
+ Group: CheckboxGroup,
718
810
  HiddenInput: CheckboxHiddenInput,
719
811
  Indicator: CheckboxIndicator,
720
812
  Label: CheckboxLabel,
@@ -902,7 +994,7 @@ const ColorPickerChannelSliderTrack = props => {
902
994
  return web.createComponent(ark.div, mergedProps);
903
995
  };
904
996
 
905
- const splitPresenceProps = props => createSplitProps()(props, ['lazyMount', 'onExitComplete', 'present', 'unmountOnExit']);
997
+ const splitPresenceProps = props => createSplitProps()(props, ['immediate', 'lazyMount', 'onExitComplete', 'present', 'unmountOnExit']);
906
998
 
907
999
  const usePresence = props => {
908
1000
  const [renderStrategyProps, context] = splitRenderStrategyProps(props);
@@ -1142,7 +1234,7 @@ const ColorPickerTrigger = props => {
1142
1234
 
1143
1235
  const ColorPickerValueText = props => {
1144
1236
  const api = useColorPickerContext();
1145
- const mergedProps = solid.mergeProps(() => anatomy.colorPickerAnatomy.build().valueText.attrs, props);
1237
+ const mergedProps = solid.mergeProps(() => anatomy$1.colorPickerAnatomy.build().valueText.attrs, props);
1146
1238
  return web.createComponent(ark.span, web.mergeProps(mergedProps, {
1147
1239
  get children() {
1148
1240
  return api().valueAsString || props.children;
@@ -1152,7 +1244,7 @@ const ColorPickerValueText = props => {
1152
1244
 
1153
1245
  const ColorPickerView = props => {
1154
1246
  const api = useColorPickerContext();
1155
- const mergedProps = solid.mergeProps(() => anatomy.colorPickerAnatomy.build().view.attrs, props);
1247
+ const mergedProps = solid.mergeProps(() => anatomy$1.colorPickerAnatomy.build().view.attrs, props);
1156
1248
  return web.createComponent(solidJs.Show, {
1157
1249
  get when() {
1158
1250
  return api().format === props.format;
@@ -1315,6 +1407,12 @@ const ComboboxLabel = props => {
1315
1407
  return web.createComponent(ark.label, mergedProps);
1316
1408
  };
1317
1409
 
1410
+ const ComboboxList = props => {
1411
+ const combobox = useComboboxContext();
1412
+ const mergedProps = solid.mergeProps(() => combobox().getListProps(), props);
1413
+ return web.createComponent(ark.div, mergedProps);
1414
+ };
1415
+
1318
1416
  const ComboboxPositioner = props => {
1319
1417
  const api = useComboboxContext();
1320
1418
  const presenceApi = usePresenceContext();
@@ -1415,6 +1513,7 @@ var combobox = /*#__PURE__*/Object.freeze({
1415
1513
  ItemIndicator: ComboboxItemIndicator,
1416
1514
  ItemText: ComboboxItemText,
1417
1515
  Label: ComboboxLabel,
1516
+ List: ComboboxList,
1418
1517
  Positioner: ComboboxPositioner,
1419
1518
  Root: ComboboxRoot,
1420
1519
  RootProvider: ComboboxRootProvider,
@@ -1467,14 +1566,14 @@ const DatePickerLabel = props => {
1467
1566
  return web.createComponent(ark.label, mergedProps);
1468
1567
  };
1469
1568
 
1470
- var _tmpl$$3 = /*#__PURE__*/web.template(`<option>`);
1569
+ var _tmpl$$4 = /*#__PURE__*/web.template(`<option>`);
1471
1570
  const DatePickerMonthSelect = props => {
1472
1571
  const api = useDatePickerContext();
1473
1572
  const mergedProps = solid.mergeProps(() => api().getMonthSelectProps(), props);
1474
1573
  return web.createComponent(ark.select, web.mergeProps(mergedProps, {
1475
1574
  get children() {
1476
1575
  return api().getMonths().map(month => (() => {
1477
- var _el$ = _tmpl$$3();
1576
+ var _el$ = _tmpl$$4();
1478
1577
  web.insert(_el$, () => month.label);
1479
1578
  web.effect(() => _el$.value = month.value);
1480
1579
  return _el$;
@@ -1712,7 +1811,7 @@ const DatePickerTrigger = props => {
1712
1811
  const DatePickerView = props => {
1713
1812
  const [viewProps, localProps] = createSplitProps()(props, ['view']);
1714
1813
  const api = useDatePickerContext();
1715
- const mergedProps = solid.mergeProps(() => anatomy.datePickerAnatomy.build().view.attrs, localProps);
1814
+ const mergedProps = solid.mergeProps(() => anatomy$1.datePickerAnatomy.build().view.attrs, localProps);
1716
1815
  return web.createComponent(DatePickerViewProvider, {
1717
1816
  value: viewProps,
1718
1817
  get children() {
@@ -1739,7 +1838,7 @@ const DatePickerViewTrigger = props => {
1739
1838
  return web.createComponent(ark.button, mergedProps);
1740
1839
  };
1741
1840
 
1742
- var _tmpl$$2 = /*#__PURE__*/web.template(`<option>`);
1841
+ var _tmpl$$3 = /*#__PURE__*/web.template(`<option>`);
1743
1842
  const DatePickerYearSelect = props => {
1744
1843
  const api = useDatePickerContext();
1745
1844
  const mergedProps = solid.mergeProps(() => api().getYearSelectProps(), props);
@@ -1749,7 +1848,7 @@ const DatePickerYearSelect = props => {
1749
1848
  from: 1_000,
1750
1849
  to: 4_000
1751
1850
  }).map(year => (() => {
1752
- var _el$ = _tmpl$$2();
1851
+ var _el$ = _tmpl$$3();
1753
1852
  _el$.value = year;
1754
1853
  web.insert(_el$, year);
1755
1854
  return _el$;
@@ -3272,6 +3371,82 @@ var progress = /*#__PURE__*/Object.freeze({
3272
3371
  View: ProgressView
3273
3372
  });
3274
3373
 
3374
+ const [QrCodeProvider, useQrCodeContext] = createContext({
3375
+ hookName: 'useQrCodeContext',
3376
+ providerName: '<QrCodeProvider />'
3377
+ });
3378
+
3379
+ const QrCodeContext = props => props.children(useQrCodeContext());
3380
+
3381
+ const QrCodeFrame = props => {
3382
+ const qrCode = useQrCodeContext();
3383
+ const mergedProps = solid.mergeProps(() => qrCode().getFrameProps(), props);
3384
+ return web.createComponent(ark.svg, mergedProps);
3385
+ };
3386
+
3387
+ const QrCodeOverlay = props => {
3388
+ const qrCode = useQrCodeContext();
3389
+ const mergedProps = solid.mergeProps(() => qrCode().getOverlayProps(), props);
3390
+ return web.createComponent(ark.div, mergedProps);
3391
+ };
3392
+
3393
+ const QrCodePattern = props => {
3394
+ const qrCode = useQrCodeContext();
3395
+ const mergedProps = solid.mergeProps(() => qrCode().getPatternProps(), props);
3396
+ return web.createComponent(ark.path, mergedProps);
3397
+ };
3398
+
3399
+ const useQrCode = props => {
3400
+ const locale = useLocaleContext();
3401
+ const environment = useEnvironmentContext();
3402
+ const id = solidJs.createUniqueId();
3403
+ const context = solidJs.createMemo(() => ({
3404
+ id,
3405
+ dir: locale().dir,
3406
+ getRootNode: environment().getRootNode,
3407
+ ...props
3408
+ }));
3409
+ const [state, send] = solid.useMachine(qrCode__namespace.machine(context()), {
3410
+ context
3411
+ });
3412
+ return solidJs.createMemo(() => qrCode__namespace.connect(state, send, solid.normalizeProps));
3413
+ };
3414
+
3415
+ const QrCodeRoot = props => {
3416
+ const [useQrCodeProps, restProps] = createSplitProps()(props, ['encoding', 'id', 'ids', 'value']);
3417
+ const api = useQrCode(useQrCodeProps);
3418
+ const mergedProps = solid.mergeProps(() => api().getRootProps(), restProps);
3419
+ return web.createComponent(QrCodeProvider, {
3420
+ value: api,
3421
+ get children() {
3422
+ return web.createComponent(ark.div, mergedProps);
3423
+ }
3424
+ });
3425
+ };
3426
+
3427
+ const QrCodeRootProvider = props => {
3428
+ const [{
3429
+ value: qrCode
3430
+ }, localProps] = createSplitProps()(props, ['value']);
3431
+ const mergedProps = solid.mergeProps(() => qrCode().getRootProps(), localProps);
3432
+ return web.createComponent(QrCodeProvider, {
3433
+ value: qrCode,
3434
+ get children() {
3435
+ return web.createComponent(ark.div, mergedProps);
3436
+ }
3437
+ });
3438
+ };
3439
+
3440
+ var qrCode = /*#__PURE__*/Object.freeze({
3441
+ __proto__: null,
3442
+ Frame: QrCodeFrame,
3443
+ Overlay: QrCodeOverlay,
3444
+ Pattern: QrCodePattern,
3445
+ QrCodeContext: QrCodeContext,
3446
+ Root: QrCodeRoot,
3447
+ RootProvider: QrCodeRootProvider
3448
+ });
3449
+
3275
3450
  const [RadioGroupProvider, useRadioGroupContext] = createContext({
3276
3451
  hookName: 'useRadioGroupContext',
3277
3452
  providerName: '<RadioGroupProvider />'
@@ -3505,7 +3680,7 @@ const SegmentGroupContext = props => props.children(useSegmentGroupContext());
3505
3680
 
3506
3681
  const SegmentGroupIndicator = props => {
3507
3682
  const segmentGroup = useSegmentGroupContext();
3508
- const mergedProps = solid.mergeProps(() => segmentGroup().getIndicatorProps(), anatomy.segmentGroupAnatomy.build().indicator.attrs, props);
3683
+ const mergedProps = solid.mergeProps(() => segmentGroup().getIndicatorProps(), anatomy$1.segmentGroupAnatomy.build().indicator.attrs, props);
3509
3684
  return web.createComponent(ark.div, mergedProps);
3510
3685
  };
3511
3686
 
@@ -3522,7 +3697,7 @@ const [SegmentGroupItemPropsProvider, useSegmentGroupItemPropsContext] = createC
3522
3697
  const SegmentGroupItem = props => {
3523
3698
  const [itemProps, localProps] = createSplitProps()(props, ['value', 'disabled', 'invalid']);
3524
3699
  const segmentGroup = useSegmentGroupContext();
3525
- const mergedProps = solid.mergeProps(() => segmentGroup().getItemProps(itemProps), anatomy.segmentGroupAnatomy.build().item.attrs, localProps);
3700
+ const mergedProps = solid.mergeProps(() => segmentGroup().getItemProps(itemProps), anatomy$1.segmentGroupAnatomy.build().item.attrs, localProps);
3526
3701
  const itemState = solidJs.createMemo(() => segmentGroup().getItemState(itemProps));
3527
3702
  return web.createComponent(SegmentGroupItemPropsProvider, {
3528
3703
  value: itemProps,
@@ -3542,7 +3717,7 @@ const SegmentGroupItemContext = props => props.children(useSegmentGroupItemConte
3542
3717
  const SegmentGroupItemControl = props => {
3543
3718
  const segmentGroup = useSegmentGroupContext();
3544
3719
  const itemProps = useSegmentGroupItemPropsContext();
3545
- const mergedProps = solid.mergeProps(() => segmentGroup().getItemControlProps(itemProps), anatomy.segmentGroupAnatomy.build().itemControl.attrs, props);
3720
+ const mergedProps = solid.mergeProps(() => segmentGroup().getItemControlProps(itemProps), anatomy$1.segmentGroupAnatomy.build().itemControl.attrs, props);
3546
3721
  return web.createComponent(ark.div, mergedProps);
3547
3722
  };
3548
3723
 
@@ -3556,13 +3731,13 @@ const SegmentGroupItemHiddenInput = props => {
3556
3731
  const SegmentGroupItemText = props => {
3557
3732
  const segmentGroup = useSegmentGroupContext();
3558
3733
  const itemProps = useSegmentGroupItemPropsContext();
3559
- const mergedProps = solid.mergeProps(() => segmentGroup().getItemTextProps(itemProps), anatomy.segmentGroupAnatomy.build().itemText.attrs, props);
3734
+ const mergedProps = solid.mergeProps(() => segmentGroup().getItemTextProps(itemProps), anatomy$1.segmentGroupAnatomy.build().itemText.attrs, props);
3560
3735
  return web.createComponent(ark.span, mergedProps);
3561
3736
  };
3562
3737
 
3563
3738
  const SegmentGroupLabel = props => {
3564
3739
  const segmentGroup = useSegmentGroupContext();
3565
- const mergedProps = solid.mergeProps(() => segmentGroup().getLabelProps(), anatomy.segmentGroupAnatomy.build().label.attrs, props);
3740
+ const mergedProps = solid.mergeProps(() => segmentGroup().getLabelProps(), anatomy$1.segmentGroupAnatomy.build().label.attrs, props);
3566
3741
  return web.createComponent(ark.label, mergedProps);
3567
3742
  };
3568
3743
 
@@ -3586,7 +3761,7 @@ const useSegmentGroup = props => {
3586
3761
  const SegmentGroupRoot = props => {
3587
3762
  const [useSegmentGroupProps, localProps] = createSplitProps()(props, ['defaultValue', 'disabled', 'form', 'id', 'ids', 'name', 'onValueChange', 'orientation', 'readOnly', 'value']);
3588
3763
  const segmentGroup = useSegmentGroup(useSegmentGroupProps);
3589
- const mergedProps = solid.mergeProps(() => segmentGroup().getRootProps(), anatomy.segmentGroupAnatomy.build().root.attrs, localProps);
3764
+ const mergedProps = solid.mergeProps(() => segmentGroup().getRootProps(), anatomy$1.segmentGroupAnatomy.build().root.attrs, localProps);
3590
3765
  return web.createComponent(SegmentGroupProvider, {
3591
3766
  value: segmentGroup,
3592
3767
  get children() {
@@ -3599,7 +3774,7 @@ const SegmentGroupRootProvider = props => {
3599
3774
  const [{
3600
3775
  value: segmentGroup
3601
3776
  }, localProps] = createSplitProps()(props, ['value']);
3602
- const mergedProps = solid.mergeProps(() => segmentGroup().getRootProps(), anatomy.segmentGroupAnatomy.build().root.attrs, localProps);
3777
+ const mergedProps = solid.mergeProps(() => segmentGroup().getRootProps(), anatomy$1.segmentGroupAnatomy.build().root.attrs, localProps);
3603
3778
  return web.createComponent(SegmentGroupProvider, {
3604
3779
  value: segmentGroup,
3605
3780
  get children() {
@@ -3655,8 +3830,8 @@ const SelectControl = props => {
3655
3830
  return web.createComponent(ark.div, mergedProps);
3656
3831
  };
3657
3832
 
3658
- var _tmpl$$1 = /*#__PURE__*/web.template(`<option value="">`),
3659
- _tmpl$2 = /*#__PURE__*/web.template(`<option>`);
3833
+ var _tmpl$$2 = /*#__PURE__*/web.template(`<option value="">`),
3834
+ _tmpl$2$1 = /*#__PURE__*/web.template(`<option>`);
3660
3835
  const SelectHiddenSelect = props => {
3661
3836
  const select = useSelectContext();
3662
3837
  const mergedProps = solid.mergeProps(() => select().getControlProps(), props);
@@ -3668,14 +3843,14 @@ const SelectHiddenSelect = props => {
3668
3843
  return isValueEmpty();
3669
3844
  },
3670
3845
  get children() {
3671
- return _tmpl$$1();
3846
+ return _tmpl$$2();
3672
3847
  }
3673
3848
  }), web.createComponent(solidJs.Index, {
3674
3849
  get each() {
3675
3850
  return select().collection.toArray();
3676
3851
  },
3677
3852
  children: option => (() => {
3678
- var _el$2 = _tmpl$2();
3853
+ var _el$2 = _tmpl$2$1();
3679
3854
  web.insert(_el$2, () => option().label);
3680
3855
  web.effect(() => _el$2.value = option().value);
3681
3856
  return _el$2;
@@ -3770,6 +3945,12 @@ const SelectLabel = props => {
3770
3945
  return web.createComponent(ark.label, mergedProps);
3771
3946
  };
3772
3947
 
3948
+ const SelectList = props => {
3949
+ const select = useSelectContext();
3950
+ const mergedProps = solid.mergeProps(() => select().getListProps(), props);
3951
+ return web.createComponent(ark.div, mergedProps);
3952
+ };
3953
+
3773
3954
  const SelectPositioner = props => {
3774
3955
  const select = useSelectContext();
3775
3956
  const presenceApi = usePresenceContext();
@@ -3857,7 +4038,7 @@ const SelectTrigger = props => {
3857
4038
 
3858
4039
  const SelectValueText = props => {
3859
4040
  const select = useSelectContext();
3860
- const mergedProps = solid.mergeProps(() => anatomy.selectAnatomy.build().valueText.attrs, props);
4041
+ const mergedProps = solid.mergeProps(() => anatomy$1.selectAnatomy.build().valueText.attrs, props);
3861
4042
  return web.createComponent(ark.span, web.mergeProps(mergedProps, {
3862
4043
  get children() {
3863
4044
  return select().valueAsString || props.placeholder;
@@ -3880,6 +4061,7 @@ var select = /*#__PURE__*/Object.freeze({
3880
4061
  ItemIndicator: SelectItemIndicator,
3881
4062
  ItemText: SelectItemText,
3882
4063
  Label: SelectLabel,
4064
+ List: SelectList,
3883
4065
  Positioner: SelectPositioner,
3884
4066
  Root: SelectRoot,
3885
4067
  RootProvider: SelectRootProvider,
@@ -3887,6 +4069,1777 @@ var select = /*#__PURE__*/Object.freeze({
3887
4069
  ValueText: SelectValueText
3888
4070
  });
3889
4071
 
4072
+ const [SignaturePadProvider, useSignaturePadContext] = createContext({
4073
+ hookName: 'useSignaturePadContext',
4074
+ providerName: '<SignaturePadProvider />'
4075
+ });
4076
+
4077
+ const SignaturePadClearTrigger = props => {
4078
+ const signaturePad = useSignaturePadContext();
4079
+ const mergedProps = solid.mergeProps(() => signaturePad().getClearTriggerProps(), props);
4080
+ return web.createComponent(ark.button, mergedProps);
4081
+ };
4082
+
4083
+ const SignaturePadContext = props => props.children(useSignaturePadContext());
4084
+
4085
+ const SignaturePadControl = props => {
4086
+ const signaturePad = useSignaturePadContext();
4087
+ const mergedProps = solid.mergeProps(() => signaturePad().getControlProps(), props);
4088
+ return web.createComponent(ark.div, web.mergeProps({
4089
+ role: "application"
4090
+ }, mergedProps));
4091
+ };
4092
+
4093
+ const SignaturePadGuide = props => {
4094
+ const signaturePad = useSignaturePadContext();
4095
+ const mergedProps = solid.mergeProps(() => signaturePad().getGuideProps(), props);
4096
+ return web.createComponent(ark.div, mergedProps);
4097
+ };
4098
+
4099
+ const SignaturePadLabel = props => {
4100
+ const signaturePad = useSignaturePadContext();
4101
+ const mergedProps = solid.mergeProps(() => signaturePad().getLabelProps(), props);
4102
+ return web.createComponent(ark.label, mergedProps);
4103
+ };
4104
+
4105
+ // src/create-anatomy.ts
4106
+ var createAnatomy = (name, parts = []) => ({
4107
+ parts: (...values) => {
4108
+ if (isEmpty(parts)) {
4109
+ return createAnatomy(name, values);
4110
+ }
4111
+ throw new Error("createAnatomy().parts(...) should only be called once. Did you mean to use .extendWith(...) ?");
4112
+ },
4113
+ extendWith: (...values) => createAnatomy(name, [...parts, ...values]),
4114
+ rename: (newName) => createAnatomy(newName, parts),
4115
+ keys: () => parts,
4116
+ build: () => [...new Set(parts)].reduce(
4117
+ (prev, part) => Object.assign(prev, {
4118
+ [part]: {
4119
+ selector: [
4120
+ `&[data-scope="${toKebabCase(name)}"][data-part="${toKebabCase(part)}"]`,
4121
+ `& [data-scope="${toKebabCase(name)}"][data-part="${toKebabCase(part)}"]`
4122
+ ].join(", "),
4123
+ attrs: { "data-scope": toKebabCase(name), "data-part": toKebabCase(part) }
4124
+ }
4125
+ }),
4126
+ {}
4127
+ )
4128
+ });
4129
+ var toKebabCase = (value) => value.replace(/([A-Z])([A-Z])/g, "$1-$2").replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
4130
+ var isEmpty = (v) => v.length === 0;
4131
+
4132
+ // src/index.ts
4133
+ var state = "default";
4134
+ var userSelect = "";
4135
+ var elementMap = /* @__PURE__ */ new WeakMap();
4136
+ function disableTextSelectionImpl(options = {}) {
4137
+ const { target, doc } = options;
4138
+ const docNode = doc ?? document;
4139
+ const rootEl = docNode.documentElement;
4140
+ if (domQuery.isIos()) {
4141
+ if (state === "default") {
4142
+ userSelect = rootEl.style.webkitUserSelect;
4143
+ rootEl.style.webkitUserSelect = "none";
4144
+ }
4145
+ state = "disabled";
4146
+ } else if (target) {
4147
+ elementMap.set(target, target.style.userSelect);
4148
+ target.style.userSelect = "none";
4149
+ }
4150
+ return () => restoreTextSelection({ target, doc: docNode });
4151
+ }
4152
+ function restoreTextSelection(options = {}) {
4153
+ const { target, doc } = options;
4154
+ const docNode = doc ?? document;
4155
+ const rootEl = docNode.documentElement;
4156
+ if (domQuery.isIos()) {
4157
+ if (state !== "disabled") return;
4158
+ state = "restoring";
4159
+ setTimeout(() => {
4160
+ domQuery.nextTick(() => {
4161
+ if (state === "restoring") {
4162
+ if (rootEl.style.webkitUserSelect === "none") {
4163
+ rootEl.style.webkitUserSelect = userSelect || "";
4164
+ }
4165
+ userSelect = "";
4166
+ state = "default";
4167
+ }
4168
+ });
4169
+ }, 300);
4170
+ } else {
4171
+ if (target && elementMap.has(target)) {
4172
+ const prevUserSelect = elementMap.get(target);
4173
+ if (target.style.userSelect === "none") {
4174
+ target.style.userSelect = prevUserSelect ?? "";
4175
+ }
4176
+ if (target.getAttribute("style") === "") {
4177
+ target.removeAttribute("style");
4178
+ }
4179
+ elementMap.delete(target);
4180
+ }
4181
+ }
4182
+ }
4183
+ function disableTextSelection(options = {}) {
4184
+ const { defer, target, ...restOptions } = options;
4185
+ const func = defer ? domQuery.raf : (v) => v();
4186
+ const cleanups = [];
4187
+ cleanups.push(
4188
+ func(() => {
4189
+ const node = typeof target === "function" ? target() : target;
4190
+ cleanups.push(disableTextSelectionImpl({ ...restOptions, target: node }));
4191
+ })
4192
+ );
4193
+ return () => {
4194
+ cleanups.forEach((fn) => fn?.());
4195
+ };
4196
+ }
4197
+
4198
+ // src/add-dom-event.ts
4199
+ var addDomEvent = (target, eventName, handler, options) => {
4200
+ const node = typeof target === "function" ? target() : target;
4201
+ node?.addEventListener(eventName, handler, options);
4202
+ return () => {
4203
+ node?.removeEventListener(eventName, handler, options);
4204
+ };
4205
+ };
4206
+ var isLeftClick = (e) => e.button === 0;
4207
+ var isModifierKey = (e) => e.ctrlKey || e.altKey || e.metaKey;
4208
+
4209
+ // src/get-event-point.ts
4210
+ function pointFromTouch(e, type = "client") {
4211
+ const point = e.touches[0] || e.changedTouches[0];
4212
+ return { x: point[`${type}X`], y: point[`${type}Y`] };
4213
+ }
4214
+ function pointFromMouse(point, type = "client") {
4215
+ return { x: point[`${type}X`], y: point[`${type}Y`] };
4216
+ }
4217
+ var isTouchEvent = (event) => "touches" in event && event.touches.length > 0;
4218
+ function getEventPoint(event, type = "client") {
4219
+ return isTouchEvent(event) ? pointFromTouch(event, type) : pointFromMouse(event, type);
4220
+ }
4221
+
4222
+ // src/get-point-value.ts
4223
+ function clamp(value) {
4224
+ return Math.max(0, Math.min(1, value));
4225
+ }
4226
+ function getRelativePoint(point, element) {
4227
+ const { left, top, width, height } = element.getBoundingClientRect();
4228
+ const offset = { x: point.x - left, y: point.y - top };
4229
+ const percent = { x: clamp(offset.x / width), y: clamp(offset.y / height) };
4230
+ function getPercentValue(options = {}) {
4231
+ const { dir = "ltr", orientation = "horizontal", inverted } = options;
4232
+ const invertX = typeof inverted === "object" ? inverted.x : inverted;
4233
+ const invertY = typeof inverted === "object" ? inverted.y : inverted;
4234
+ if (orientation === "horizontal") {
4235
+ return dir === "rtl" || invertX ? 1 - percent.x : percent.x;
4236
+ }
4237
+ return invertY ? 1 - percent.y : percent.y;
4238
+ }
4239
+ return { offset, percent, getPercentValue };
4240
+ }
4241
+ function trackPointerMove(doc, handlers) {
4242
+ const { onPointerMove, onPointerUp } = handlers;
4243
+ const history = [];
4244
+ const handleMove = (event) => {
4245
+ const point = getEventPoint(event);
4246
+ history.push({ ...point, timestamp: performance.now() });
4247
+ const distance = Math.sqrt(point.x ** 2 + point.y ** 2);
4248
+ const moveBuffer = event.pointerType === "touch" ? 10 : 5;
4249
+ if (distance < moveBuffer) return;
4250
+ if (event.pointerType === "mouse" && event.button === 0) {
4251
+ onPointerUp();
4252
+ return;
4253
+ }
4254
+ onPointerMove({ point, event, velocity: getVelocity(history, 0.1) });
4255
+ };
4256
+ const cleanups = [
4257
+ addDomEvent(doc, "pointermove", handleMove, false),
4258
+ addDomEvent(doc, "pointerup", onPointerUp, false),
4259
+ addDomEvent(doc, "pointercancel", onPointerUp, false),
4260
+ addDomEvent(doc, "contextmenu", onPointerUp, false),
4261
+ disableTextSelection({ doc })
4262
+ ];
4263
+ return () => {
4264
+ cleanups.forEach((cleanup) => cleanup());
4265
+ history.length = 0;
4266
+ };
4267
+ }
4268
+ function lastDevicePoint(history) {
4269
+ return history[history.length - 1];
4270
+ }
4271
+ function ms(seconds) {
4272
+ return seconds * 1e3;
4273
+ }
4274
+ function sec(milliseconds) {
4275
+ return milliseconds / 1e3;
4276
+ }
4277
+ function getVelocity(history, timeDelta) {
4278
+ if (history.length < 2) return { x: 0, y: 0 };
4279
+ let i = history.length - 1;
4280
+ let timestampedPoint = null;
4281
+ const lastPoint = lastDevicePoint(history);
4282
+ while (i >= 0) {
4283
+ timestampedPoint = history[i];
4284
+ if (lastPoint.timestamp - timestampedPoint.timestamp > ms(timeDelta)) {
4285
+ break;
4286
+ }
4287
+ i--;
4288
+ }
4289
+ if (!timestampedPoint) return { x: 0, y: 0 };
4290
+ const time = sec(lastPoint.timestamp - timestampedPoint.timestamp);
4291
+ if (time === 0) return { x: 0, y: 0 };
4292
+ const currentVelocity = {
4293
+ x: (lastPoint.x - timestampedPoint.x) / time,
4294
+ y: (lastPoint.y - timestampedPoint.y) / time
4295
+ };
4296
+ if (currentVelocity.x === Infinity) currentVelocity.x = 0;
4297
+ if (currentVelocity.y === Infinity) currentVelocity.y = 0;
4298
+ return {
4299
+ x: Math.abs(currentVelocity.x),
4300
+ y: Math.abs(currentVelocity.y)
4301
+ };
4302
+ }
4303
+
4304
+ /* eslint @typescript-eslint/no-explicit-any: off */
4305
+ // symbols
4306
+ const GET_ORIGINAL_SYMBOL = Symbol();
4307
+ // get object prototype
4308
+ const getProto = Object.getPrototypeOf;
4309
+ const objectsToTrack = new WeakMap();
4310
+ // check if obj is a plain object or an array
4311
+ const isObjectToTrack = obj => obj && (objectsToTrack.has(obj) ? objectsToTrack.get(obj) : getProto(obj) === Object.prototype || getProto(obj) === Array.prototype);
4312
+ /**
4313
+ * Unwrap proxy to get the original object.
4314
+ *
4315
+ * Used to retrieve the original object used to create the proxy instance with `createProxy`.
4316
+ *
4317
+ * @param {Proxy<object>} obj - The proxy wrapper of the originial object.
4318
+ * @returns {object | null} - Return either the unwrapped object if exists.
4319
+ *
4320
+ * @example
4321
+ * import { createProxy, getUntracked } from 'proxy-compare';
4322
+ *
4323
+ * const original = { a: "1", c: "2", d: { e: "3" } };
4324
+ * const affected = new WeakMap();
4325
+ *
4326
+ * const proxy = createProxy(original, affected);
4327
+ * const originalFromProxy = getUntracked(proxy)
4328
+ *
4329
+ * Object.is(original, originalFromProxy) // true
4330
+ * isChanged(original, originalFromProxy, affected) // false
4331
+ */
4332
+ const getUntracked = obj => {
4333
+ if (isObjectToTrack(obj)) {
4334
+ return obj[GET_ORIGINAL_SYMBOL] || null;
4335
+ }
4336
+ return null;
4337
+ };
4338
+ /**
4339
+ * Mark object to be tracked.
4340
+ *
4341
+ * This function marks an object that will be passed into `createProxy`
4342
+ * as marked to track or not. By default only Array and Object are marked to track,
4343
+ * so this is useful for example to mark a class instance to track or to mark a object
4344
+ * to be untracked when creating your proxy.
4345
+ *
4346
+ * @param obj - Object to mark as tracked or not.
4347
+ * @param mark - Boolean indicating whether you want to track this object or not.
4348
+ * @returns - No return.
4349
+ *
4350
+ * @example
4351
+ * import { createProxy, markToTrack, isChanged } from 'proxy-compare';
4352
+ *
4353
+ * const nested = { e: "3" }
4354
+ *
4355
+ * markToTrack(nested, false)
4356
+ *
4357
+ * const original = { a: "1", c: "2", d: nested };
4358
+ * const affected = new WeakMap();
4359
+ *
4360
+ * const proxy = createProxy(original, affected);
4361
+ *
4362
+ * proxy.d.e
4363
+ *
4364
+ * isChanged(original, { d: { e: "3" } }, affected) // true
4365
+ */
4366
+ const markToTrack = (obj, mark = true) => {
4367
+ objectsToTrack.set(obj, mark);
4368
+ };
4369
+
4370
+ // src/global.ts
4371
+ function getGlobal() {
4372
+ if (typeof globalThis !== "undefined") return globalThis;
4373
+ if (typeof self !== "undefined") return self;
4374
+ if (typeof window !== "undefined") return window;
4375
+ if (typeof global !== "undefined") return global;
4376
+ }
4377
+ function makeGlobal(key, value) {
4378
+ const g = getGlobal();
4379
+ if (!g) return value();
4380
+ g[key] || (g[key] = value());
4381
+ return g[key];
4382
+ }
4383
+ var isDev$1 = process.env.NODE_ENV !== "production";
4384
+ var isObject$1 = (x) => typeof x === "object" && x !== null;
4385
+ var proxyStateMap = makeGlobal("__zag__proxyStateMap", () => /* @__PURE__ */ new WeakMap());
4386
+ var refSet = makeGlobal("__zag__refSet", () => /* @__PURE__ */ new WeakSet());
4387
+ var buildProxyFunction = (objectIs = Object.is, newProxy = (target, handler) => new Proxy(target, handler), canProxy = (x) => isObject$1(x) && !refSet.has(x) && (Array.isArray(x) || !(Symbol.iterator in x)) && !(x instanceof WeakMap) && !(x instanceof WeakSet) && !(x instanceof Error) && !(x instanceof Number) && !(x instanceof Date) && !(x instanceof String) && !(x instanceof RegExp) && !(x instanceof ArrayBuffer), defaultHandlePromise = (promise) => {
4388
+ switch (promise.status) {
4389
+ case "fulfilled":
4390
+ return promise.value;
4391
+ case "rejected":
4392
+ throw promise.reason;
4393
+ default:
4394
+ throw promise;
4395
+ }
4396
+ }, snapCache = /* @__PURE__ */ new WeakMap(), createSnapshot = (target, version, handlePromise = defaultHandlePromise) => {
4397
+ const cache = snapCache.get(target);
4398
+ if (cache?.[0] === version) {
4399
+ return cache[1];
4400
+ }
4401
+ const snap = Array.isArray(target) ? [] : Object.create(Object.getPrototypeOf(target));
4402
+ markToTrack(snap, true);
4403
+ snapCache.set(target, [version, snap]);
4404
+ Reflect.ownKeys(target).forEach((key) => {
4405
+ const value = Reflect.get(target, key);
4406
+ if (refSet.has(value)) {
4407
+ markToTrack(value, false);
4408
+ snap[key] = value;
4409
+ } else if (value instanceof Promise) {
4410
+ Object.defineProperty(snap, key, {
4411
+ get() {
4412
+ return handlePromise(value);
4413
+ }
4414
+ });
4415
+ } else if (proxyStateMap.has(value)) {
4416
+ snap[key] = snapshot(value, handlePromise);
4417
+ } else {
4418
+ snap[key] = value;
4419
+ }
4420
+ });
4421
+ return Object.freeze(snap);
4422
+ }, proxyCache = /* @__PURE__ */ new WeakMap(), versionHolder = [1, 1], proxyFunction2 = (initialObject) => {
4423
+ if (!isObject$1(initialObject)) {
4424
+ throw new Error("object required");
4425
+ }
4426
+ const found = proxyCache.get(initialObject);
4427
+ if (found) {
4428
+ return found;
4429
+ }
4430
+ let version = versionHolder[0];
4431
+ const listeners = /* @__PURE__ */ new Set();
4432
+ const notifyUpdate = (op, nextVersion = ++versionHolder[0]) => {
4433
+ if (version !== nextVersion) {
4434
+ version = nextVersion;
4435
+ listeners.forEach((listener) => listener(op, nextVersion));
4436
+ }
4437
+ };
4438
+ let checkVersion = versionHolder[1];
4439
+ const ensureVersion = (nextCheckVersion = ++versionHolder[1]) => {
4440
+ if (checkVersion !== nextCheckVersion && !listeners.size) {
4441
+ checkVersion = nextCheckVersion;
4442
+ propProxyStates.forEach(([propProxyState]) => {
4443
+ const propVersion = propProxyState[1](nextCheckVersion);
4444
+ if (propVersion > version) {
4445
+ version = propVersion;
4446
+ }
4447
+ });
4448
+ }
4449
+ return version;
4450
+ };
4451
+ const createPropListener = (prop) => (op, nextVersion) => {
4452
+ const newOp = [...op];
4453
+ newOp[1] = [prop, ...newOp[1]];
4454
+ notifyUpdate(newOp, nextVersion);
4455
+ };
4456
+ const propProxyStates = /* @__PURE__ */ new Map();
4457
+ const addPropListener = (prop, propProxyState) => {
4458
+ if (isDev$1 && propProxyStates.has(prop)) {
4459
+ throw new Error("prop listener already exists");
4460
+ }
4461
+ if (listeners.size) {
4462
+ const remove = propProxyState[3](createPropListener(prop));
4463
+ propProxyStates.set(prop, [propProxyState, remove]);
4464
+ } else {
4465
+ propProxyStates.set(prop, [propProxyState]);
4466
+ }
4467
+ };
4468
+ const removePropListener = (prop) => {
4469
+ const entry = propProxyStates.get(prop);
4470
+ if (entry) {
4471
+ propProxyStates.delete(prop);
4472
+ entry[1]?.();
4473
+ }
4474
+ };
4475
+ const addListener = (listener) => {
4476
+ listeners.add(listener);
4477
+ if (listeners.size === 1) {
4478
+ propProxyStates.forEach(([propProxyState, prevRemove], prop) => {
4479
+ if (isDev$1 && prevRemove) {
4480
+ throw new Error("remove already exists");
4481
+ }
4482
+ const remove = propProxyState[3](createPropListener(prop));
4483
+ propProxyStates.set(prop, [propProxyState, remove]);
4484
+ });
4485
+ }
4486
+ const removeListener = () => {
4487
+ listeners.delete(listener);
4488
+ if (listeners.size === 0) {
4489
+ propProxyStates.forEach(([propProxyState, remove], prop) => {
4490
+ if (remove) {
4491
+ remove();
4492
+ propProxyStates.set(prop, [propProxyState]);
4493
+ }
4494
+ });
4495
+ }
4496
+ };
4497
+ return removeListener;
4498
+ };
4499
+ const baseObject = Array.isArray(initialObject) ? [] : Object.create(Object.getPrototypeOf(initialObject));
4500
+ const handler = {
4501
+ deleteProperty(target, prop) {
4502
+ const prevValue = Reflect.get(target, prop);
4503
+ removePropListener(prop);
4504
+ const deleted = Reflect.deleteProperty(target, prop);
4505
+ if (deleted) {
4506
+ notifyUpdate(["delete", [prop], prevValue]);
4507
+ }
4508
+ return deleted;
4509
+ },
4510
+ set(target, prop, value, receiver) {
4511
+ const hasPrevValue = Reflect.has(target, prop);
4512
+ const prevValue = Reflect.get(target, prop, receiver);
4513
+ if (hasPrevValue && (objectIs(prevValue, value) || proxyCache.has(value) && objectIs(prevValue, proxyCache.get(value)))) {
4514
+ return true;
4515
+ }
4516
+ removePropListener(prop);
4517
+ if (isObject$1(value)) {
4518
+ value = getUntracked(value) || value;
4519
+ }
4520
+ let nextValue = value;
4521
+ if (Object.getOwnPropertyDescriptor(target, prop)?.set) ; else if (value instanceof Promise) {
4522
+ value.then((v) => {
4523
+ Object.assign(value, { status: "fulfilled", value: v });
4524
+ notifyUpdate(["resolve", [prop], v]);
4525
+ }).catch((e) => {
4526
+ Object.assign(value, { status: "rejected", reason: e });
4527
+ notifyUpdate(["reject", [prop], e]);
4528
+ });
4529
+ } else {
4530
+ if (!proxyStateMap.has(value) && canProxy(value)) {
4531
+ nextValue = proxy(value);
4532
+ }
4533
+ const childProxyState = !refSet.has(nextValue) && proxyStateMap.get(nextValue);
4534
+ if (childProxyState) {
4535
+ addPropListener(prop, childProxyState);
4536
+ }
4537
+ }
4538
+ Reflect.set(target, prop, nextValue, receiver);
4539
+ notifyUpdate(["set", [prop], value, prevValue]);
4540
+ return true;
4541
+ }
4542
+ };
4543
+ const proxyObject = newProxy(baseObject, handler);
4544
+ proxyCache.set(initialObject, proxyObject);
4545
+ const proxyState = [baseObject, ensureVersion, createSnapshot, addListener];
4546
+ proxyStateMap.set(proxyObject, proxyState);
4547
+ Reflect.ownKeys(initialObject).forEach((key) => {
4548
+ const desc = Object.getOwnPropertyDescriptor(initialObject, key);
4549
+ if (desc.get || desc.set) {
4550
+ Object.defineProperty(baseObject, key, desc);
4551
+ } else {
4552
+ proxyObject[key] = initialObject[key];
4553
+ }
4554
+ });
4555
+ return proxyObject;
4556
+ }) => [
4557
+ // public functions
4558
+ proxyFunction2,
4559
+ // shared state
4560
+ proxyStateMap,
4561
+ refSet,
4562
+ // internal things
4563
+ objectIs,
4564
+ newProxy,
4565
+ canProxy,
4566
+ defaultHandlePromise,
4567
+ snapCache,
4568
+ createSnapshot,
4569
+ proxyCache,
4570
+ versionHolder
4571
+ ];
4572
+ var [proxyFunction] = buildProxyFunction();
4573
+ function proxy(initialObject = {}) {
4574
+ return proxyFunction(initialObject);
4575
+ }
4576
+ function subscribe(proxyObject, callback, notifyInSync) {
4577
+ const proxyState = proxyStateMap.get(proxyObject);
4578
+ if (isDev$1 && !proxyState) {
4579
+ console.warn("Please use proxy object");
4580
+ }
4581
+ let promise;
4582
+ const ops = [];
4583
+ const addListener = proxyState[3];
4584
+ let isListenerActive = false;
4585
+ const listener = (op) => {
4586
+ ops.push(op);
4587
+ if (notifyInSync) {
4588
+ callback(ops.splice(0));
4589
+ return;
4590
+ }
4591
+ if (!promise) {
4592
+ promise = Promise.resolve().then(() => {
4593
+ promise = void 0;
4594
+ if (isListenerActive) {
4595
+ callback(ops.splice(0));
4596
+ }
4597
+ });
4598
+ }
4599
+ };
4600
+ const removeListener = addListener(listener);
4601
+ isListenerActive = true;
4602
+ return () => {
4603
+ isListenerActive = false;
4604
+ removeListener();
4605
+ };
4606
+ }
4607
+ function snapshot(proxyObject, handlePromise) {
4608
+ const proxyState = proxyStateMap.get(proxyObject);
4609
+ if (isDev$1 && !proxyState) {
4610
+ console.warn("Please use proxy object");
4611
+ }
4612
+ const [target, ensureVersion, createSnapshot] = proxyState;
4613
+ return createSnapshot(target, ensureVersion(), handlePromise);
4614
+ }
4615
+ function ref(obj) {
4616
+ refSet.add(obj);
4617
+ return obj;
4618
+ }
4619
+
4620
+ // src/proxy-computed.ts
4621
+ function proxyWithComputed(initialObject, computedFns) {
4622
+ const keys = Object.keys(computedFns);
4623
+ keys.forEach((key) => {
4624
+ if (Object.getOwnPropertyDescriptor(initialObject, key)) {
4625
+ throw new Error("object property already defined");
4626
+ }
4627
+ const computedFn = computedFns[key];
4628
+ const { get, set } = typeof computedFn === "function" ? { get: computedFn } : computedFn;
4629
+ const desc = {};
4630
+ desc.get = () => get(snapshot(proxyObject));
4631
+ if (set) {
4632
+ desc.set = (newValue) => set(proxyObject, newValue);
4633
+ }
4634
+ Object.defineProperty(initialObject, key, desc);
4635
+ });
4636
+ const proxyObject = proxy(initialObject);
4637
+ return proxyObject;
4638
+ }
4639
+
4640
+ function set(obj, key, val) {
4641
+ if (typeof val.value === 'object') val.value = klona(val.value);
4642
+ if (!val.enumerable || val.get || val.set || !val.configurable || !val.writable || key === '__proto__') {
4643
+ Object.defineProperty(obj, key, val);
4644
+ } else obj[key] = val.value;
4645
+ }
4646
+
4647
+ function klona(x) {
4648
+ if (typeof x !== 'object') return x;
4649
+
4650
+ var i=0, k, list, tmp, str=Object.prototype.toString.call(x);
4651
+
4652
+ if (str === '[object Object]') {
4653
+ tmp = Object.create(x.__proto__ || null);
4654
+ } else if (str === '[object Array]') {
4655
+ tmp = Array(x.length);
4656
+ } else if (str === '[object Set]') {
4657
+ tmp = new Set;
4658
+ x.forEach(function (val) {
4659
+ tmp.add(klona(val));
4660
+ });
4661
+ } else if (str === '[object Map]') {
4662
+ tmp = new Map;
4663
+ x.forEach(function (val, key) {
4664
+ tmp.set(klona(key), klona(val));
4665
+ });
4666
+ } else if (str === '[object Date]') {
4667
+ tmp = new Date(+x);
4668
+ } else if (str === '[object RegExp]') {
4669
+ tmp = new RegExp(x.source, x.flags);
4670
+ } else if (str === '[object DataView]') {
4671
+ tmp = new x.constructor( klona(x.buffer) );
4672
+ } else if (str === '[object ArrayBuffer]') {
4673
+ tmp = x.slice(0);
4674
+ } else if (str.slice(-6) === 'Array]') {
4675
+ // ArrayBuffer.isView(x)
4676
+ // ~> `new` bcuz `Buffer.slice` => ref
4677
+ tmp = new x.constructor(x);
4678
+ }
4679
+
4680
+ if (tmp) {
4681
+ for (list=Object.getOwnPropertySymbols(x); i < list.length; i++) {
4682
+ set(tmp, list[i], Object.getOwnPropertyDescriptor(x, list[i]));
4683
+ }
4684
+
4685
+ for (i=0, list=Object.getOwnPropertyNames(x); i < list.length; i++) {
4686
+ if (Object.hasOwnProperty.call(tmp, k=list[i]) && tmp[k] === x[k]) continue;
4687
+ set(tmp, k, Object.getOwnPropertyDescriptor(x, k));
4688
+ }
4689
+ }
4690
+
4691
+ return tmp || x;
4692
+ }
4693
+
4694
+ var __defProp = Object.defineProperty;
4695
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4696
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4697
+
4698
+ // ../utilities/core/src/array.ts
4699
+ function clear(v) {
4700
+ while (v.length > 0) v.pop();
4701
+ return v;
4702
+ }
4703
+
4704
+ // ../utilities/core/src/functions.ts
4705
+ var runIfFn = (v, ...a) => {
4706
+ const res = typeof v === "function" ? v(...a) : v;
4707
+ return res ?? void 0;
4708
+ };
4709
+ var cast = (v) => v;
4710
+ var noop = () => {
4711
+ };
4712
+ var uuid = /* @__PURE__ */ (() => {
4713
+ let id = 0;
4714
+ return () => {
4715
+ id++;
4716
+ return id.toString(36);
4717
+ };
4718
+ })();
4719
+
4720
+ // ../utilities/core/src/guard.ts
4721
+ var isDev = () => process.env.NODE_ENV !== "production";
4722
+ var isArray = (v) => Array.isArray(v);
4723
+ var isObject = (v) => !(v == null || typeof v !== "object" || isArray(v));
4724
+ var isNumber = (v) => typeof v === "number" && !Number.isNaN(v);
4725
+ var isString = (v) => typeof v === "string";
4726
+ var isFunction = (v) => typeof v === "function";
4727
+ var hasProp = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
4728
+
4729
+ // ../utilities/core/src/object.ts
4730
+ function compact$1(obj) {
4731
+ if (!isPlainObject$1(obj) || obj === void 0) {
4732
+ return obj;
4733
+ }
4734
+ const keys = Reflect.ownKeys(obj).filter((key) => typeof key === "string");
4735
+ const filtered = {};
4736
+ for (const key of keys) {
4737
+ const value = obj[key];
4738
+ if (value !== void 0) {
4739
+ filtered[key] = compact$1(value);
4740
+ }
4741
+ }
4742
+ return filtered;
4743
+ }
4744
+ var isPlainObject$1 = (value) => {
4745
+ return value && typeof value === "object" && value.constructor === Object;
4746
+ };
4747
+
4748
+ // ../utilities/core/src/warning.ts
4749
+ function warn(...a) {
4750
+ const m = a.length === 1 ? a[0] : a[1];
4751
+ const c = a.length === 2 ? a[0] : true;
4752
+ if (c && process.env.NODE_ENV !== "production") {
4753
+ console.warn(m);
4754
+ }
4755
+ }
4756
+ function invariant(...a) {
4757
+ const m = a.length === 1 ? a[0] : a[1];
4758
+ const c = a.length === 2 ? a[0] : true;
4759
+ if (c && process.env.NODE_ENV !== "production") {
4760
+ throw new Error(m);
4761
+ }
4762
+ }
4763
+
4764
+ // src/deep-merge.ts
4765
+ function deepMerge(source, ...objects) {
4766
+ for (const obj of objects) {
4767
+ const target = compact$1(obj);
4768
+ for (const key in target) {
4769
+ if (isObject(obj[key])) {
4770
+ if (!source[key]) {
4771
+ source[key] = {};
4772
+ }
4773
+ deepMerge(source[key], obj[key]);
4774
+ } else {
4775
+ source[key] = obj[key];
4776
+ }
4777
+ }
4778
+ }
4779
+ return source;
4780
+ }
4781
+ function structuredClone(v) {
4782
+ return klona(v);
4783
+ }
4784
+ function toEvent(event) {
4785
+ const obj = isString(event) ? { type: event } : event;
4786
+ return obj;
4787
+ }
4788
+ function toArray(value) {
4789
+ if (!value) return [];
4790
+ return isArray(value) ? value.slice() : [value];
4791
+ }
4792
+ function isGuardHelper(value) {
4793
+ return isObject(value) && value.predicate != null;
4794
+ }
4795
+
4796
+ // src/guard-utils.ts
4797
+ var Truthy = () => true;
4798
+ function determineGuardFn(guard, guardMap) {
4799
+ guard = guard ?? Truthy;
4800
+ return (context, event, meta) => {
4801
+ if (isString(guard)) {
4802
+ const value = guardMap[guard];
4803
+ return isFunction(value) ? value(context, event, meta) : value;
4804
+ }
4805
+ if (isGuardHelper(guard)) {
4806
+ return guard.predicate(guardMap)(context, event, meta);
4807
+ }
4808
+ return guard?.(context, event, meta);
4809
+ };
4810
+ }
4811
+ function determineActionsFn(values, guardMap) {
4812
+ return (context, event, meta) => {
4813
+ if (isGuardHelper(values)) {
4814
+ return values.predicate(guardMap)(context, event, meta);
4815
+ }
4816
+ return values;
4817
+ };
4818
+ }
4819
+ function createProxy(config) {
4820
+ const computedContext = config.computed ?? cast({});
4821
+ const initialContext = config.context ?? cast({});
4822
+ const initialTags = config.initial ? config.states?.[config.initial]?.tags : [];
4823
+ const state = proxy({
4824
+ value: config.initial ?? "",
4825
+ previousValue: "",
4826
+ event: cast({}),
4827
+ previousEvent: cast({}),
4828
+ context: proxyWithComputed(initialContext, computedContext),
4829
+ done: false,
4830
+ tags: initialTags ?? [],
4831
+ hasTag(tag) {
4832
+ return this.tags.includes(tag);
4833
+ },
4834
+ matches(...value) {
4835
+ return value.includes(this.value);
4836
+ },
4837
+ can(event) {
4838
+ return cast(this).nextEvents.includes(event);
4839
+ },
4840
+ get nextEvents() {
4841
+ const stateEvents = config.states?.[this.value]?.["on"] ?? {};
4842
+ const globalEvents = config?.on ?? {};
4843
+ return Object.keys({ ...stateEvents, ...globalEvents });
4844
+ },
4845
+ get changed() {
4846
+ if (this.event.value === "machine.init" /* Init */ || !this.previousValue) return false;
4847
+ return this.value !== this.previousValue;
4848
+ }
4849
+ });
4850
+ return cast(state);
4851
+ }
4852
+
4853
+ // src/delay-utils.ts
4854
+ function determineDelayFn(delay, delaysMap) {
4855
+ return (context, event) => {
4856
+ if (isNumber(delay)) return delay;
4857
+ if (isFunction(delay)) {
4858
+ return delay(context, event);
4859
+ }
4860
+ if (isString(delay)) {
4861
+ const value = Number.parseFloat(delay);
4862
+ if (!Number.isNaN(value)) {
4863
+ return value;
4864
+ }
4865
+ if (delaysMap) {
4866
+ const valueOrFn = delaysMap?.[delay];
4867
+ invariant(
4868
+ valueOrFn == null,
4869
+ `[@zag-js/core > determine-delay] Cannot determine delay for \`${delay}\`. It doesn't exist in \`options.delays\``
4870
+ );
4871
+ return isFunction(valueOrFn) ? valueOrFn(context, event) : valueOrFn;
4872
+ }
4873
+ }
4874
+ };
4875
+ }
4876
+
4877
+ // src/transition-utils.ts
4878
+ function toTarget(target) {
4879
+ return isString(target) ? { target } : target;
4880
+ }
4881
+ function determineTransitionFn(transitions, guardMap) {
4882
+ return (context, event, meta) => {
4883
+ return toArray(transitions).map(toTarget).find((transition) => {
4884
+ const determineGuard = determineGuardFn(transition.guard, guardMap);
4885
+ const guard = determineGuard(context, event, meta);
4886
+ return guard ?? transition.target ?? transition.actions;
4887
+ });
4888
+ };
4889
+ }
4890
+
4891
+ // src/machine.ts
4892
+ var Machine = class {
4893
+ // Let's get started!
4894
+ constructor(config, options) {
4895
+ __publicField(this, "status", "Not Started" /* NotStarted */);
4896
+ __publicField(this, "state");
4897
+ __publicField(this, "initialState");
4898
+ __publicField(this, "initialContext");
4899
+ __publicField(this, "id");
4900
+ __publicField(this, "type", "machine" /* Machine */);
4901
+ // Cleanup function map (per state)
4902
+ __publicField(this, "activityEvents", /* @__PURE__ */ new Map());
4903
+ __publicField(this, "delayedEvents", /* @__PURE__ */ new Map());
4904
+ // state update listeners the user can opt-in for
4905
+ __publicField(this, "stateListeners", /* @__PURE__ */ new Set());
4906
+ __publicField(this, "doneListeners", /* @__PURE__ */ new Set());
4907
+ __publicField(this, "contextWatchers", /* @__PURE__ */ new Set());
4908
+ // Cleanup functions (for `subscribe`)
4909
+ __publicField(this, "removeStateListener", noop);
4910
+ // For Parent <==> Spawned Actor relationship
4911
+ __publicField(this, "parent");
4912
+ __publicField(this, "children", /* @__PURE__ */ new Map());
4913
+ // A map of guard, action, delay implementations
4914
+ __publicField(this, "guardMap");
4915
+ __publicField(this, "actionMap");
4916
+ __publicField(this, "delayMap");
4917
+ __publicField(this, "activityMap");
4918
+ __publicField(this, "sync");
4919
+ __publicField(this, "options");
4920
+ __publicField(this, "config");
4921
+ __publicField(this, "_created", () => {
4922
+ const event = toEvent("machine.created" /* Created */);
4923
+ this.executeActions(this.config?.created, event);
4924
+ });
4925
+ // Starts the interpreted machine.
4926
+ __publicField(this, "start", (init) => {
4927
+ this.state.value = "";
4928
+ this.state.tags = [];
4929
+ if (this.status === "Running" /* Running */) {
4930
+ return this;
4931
+ }
4932
+ this.status = "Running" /* Running */;
4933
+ this.removeStateListener = subscribe(
4934
+ this.state,
4935
+ () => {
4936
+ this.stateListeners.forEach((listener) => {
4937
+ listener(this.stateSnapshot);
4938
+ });
4939
+ },
4940
+ this.sync
4941
+ );
4942
+ this.setupContextWatchers();
4943
+ this.executeActivities(toEvent("machine.start" /* Start */), toArray(this.config.activities), "machine.start" /* Start */);
4944
+ this.executeActions(this.config.entry, toEvent("machine.start" /* Start */));
4945
+ const event = toEvent("machine.init" /* Init */);
4946
+ const target = isObject(init) ? init.value : init;
4947
+ const context = isObject(init) ? init.context : void 0;
4948
+ if (context) {
4949
+ this.setContext(context);
4950
+ }
4951
+ const transition = {
4952
+ target: target ?? this.config.initial
4953
+ };
4954
+ const next = this.getNextStateInfo(transition, event);
4955
+ this.initialState = next;
4956
+ this.performStateChangeEffects(this.state.value, next, event);
4957
+ return this;
4958
+ });
4959
+ __publicField(this, "setupContextWatchers", () => {
4960
+ const { watch } = this.config;
4961
+ if (!watch) return;
4962
+ let prev = snapshot(this.state.context);
4963
+ const cleanup = subscribe(this.state.context, () => {
4964
+ const next = snapshot(this.state.context);
4965
+ for (const [key, fn] of Object.entries(watch)) {
4966
+ const isEqual = this.options.compareFns?.[key] ?? Object.is;
4967
+ if (isEqual(prev[key], next[key])) continue;
4968
+ this.executeActions(fn, this.state.event);
4969
+ }
4970
+ prev = next;
4971
+ });
4972
+ this.contextWatchers.add(cleanup);
4973
+ });
4974
+ // Stops the interpreted machine
4975
+ __publicField(this, "stop", () => {
4976
+ if (this.status === "Stopped" /* Stopped */) return;
4977
+ this.performExitEffects(this.state.value, toEvent("machine.stop" /* Stop */));
4978
+ this.executeActions(this.config.exit, toEvent("machine.stop" /* Stop */));
4979
+ this.setState("");
4980
+ this.setEvent("machine.stop" /* Stop */);
4981
+ this.stopStateListeners();
4982
+ this.stopChildren();
4983
+ this.stopActivities();
4984
+ this.stopDelayedEvents();
4985
+ this.stopContextWatchers();
4986
+ this.status = "Stopped" /* Stopped */;
4987
+ return this;
4988
+ });
4989
+ __publicField(this, "stopStateListeners", () => {
4990
+ this.removeStateListener();
4991
+ this.stateListeners.clear();
4992
+ });
4993
+ __publicField(this, "stopContextWatchers", () => {
4994
+ this.contextWatchers.forEach((fn) => fn());
4995
+ this.contextWatchers.clear();
4996
+ });
4997
+ __publicField(this, "stopDelayedEvents", () => {
4998
+ this.delayedEvents.forEach((state) => {
4999
+ state.forEach((stop) => stop());
5000
+ });
5001
+ this.delayedEvents.clear();
5002
+ });
5003
+ // Cleanup running activities (e.g `setInterval`, invoked callbacks, promises)
5004
+ __publicField(this, "stopActivities", (state) => {
5005
+ if (state) {
5006
+ this.activityEvents.get(state)?.forEach((stop) => stop());
5007
+ this.activityEvents.get(state)?.clear();
5008
+ this.activityEvents.delete(state);
5009
+ } else {
5010
+ this.activityEvents.forEach((state2) => {
5011
+ state2.forEach((stop) => stop());
5012
+ state2.clear();
5013
+ });
5014
+ this.activityEvents.clear();
5015
+ }
5016
+ });
5017
+ /**
5018
+ * Function to send event to spawned child machine or actor
5019
+ */
5020
+ __publicField(this, "sendChild", (evt, to) => {
5021
+ const event = toEvent(evt);
5022
+ const id = runIfFn(to, this.contextSnapshot);
5023
+ const child = this.children.get(id);
5024
+ if (!child) {
5025
+ invariant(`[@zag-js/core] Cannot send '${event.type}' event to unknown child`);
5026
+ }
5027
+ child.send(event);
5028
+ });
5029
+ /**
5030
+ * Function to stop a running child machine or actor
5031
+ */
5032
+ __publicField(this, "stopChild", (id) => {
5033
+ if (!this.children.has(id)) {
5034
+ invariant(`[@zag-js/core > stop-child] Cannot stop unknown child ${id}`);
5035
+ }
5036
+ this.children.get(id).stop();
5037
+ this.children.delete(id);
5038
+ });
5039
+ __publicField(this, "removeChild", (id) => {
5040
+ this.children.delete(id);
5041
+ });
5042
+ // Stop and delete spawned actors
5043
+ __publicField(this, "stopChildren", () => {
5044
+ this.children.forEach((child) => child.stop());
5045
+ this.children.clear();
5046
+ });
5047
+ __publicField(this, "setParent", (parent) => {
5048
+ this.parent = parent;
5049
+ });
5050
+ __publicField(this, "spawn", (src, id) => {
5051
+ const actor = runIfFn(src);
5052
+ if (id) actor.id = id;
5053
+ actor.type = "machine.actor" /* Actor */;
5054
+ actor.setParent(this);
5055
+ this.children.set(actor.id, cast(actor));
5056
+ actor.onDone(() => {
5057
+ this.removeChild(actor.id);
5058
+ }).start();
5059
+ return cast(ref(actor));
5060
+ });
5061
+ __publicField(this, "stopActivity", (key) => {
5062
+ if (!this.state.value) return;
5063
+ const cleanups = this.activityEvents.get(this.state.value);
5064
+ cleanups?.get(key)?.();
5065
+ cleanups?.delete(key);
5066
+ });
5067
+ __publicField(this, "addActivityCleanup", (state, key, cleanup) => {
5068
+ if (!state) return;
5069
+ if (!this.activityEvents.has(state)) {
5070
+ this.activityEvents.set(state, /* @__PURE__ */ new Map([[key, cleanup]]));
5071
+ } else {
5072
+ this.activityEvents.get(state)?.set(key, cleanup);
5073
+ }
5074
+ });
5075
+ __publicField(this, "setState", (target) => {
5076
+ this.state.previousValue = this.state.value;
5077
+ this.state.value = target;
5078
+ const stateNode = this.getStateNode(target);
5079
+ if (target == null) {
5080
+ clear(this.state.tags);
5081
+ } else {
5082
+ this.state.tags = toArray(stateNode?.tags);
5083
+ }
5084
+ });
5085
+ /**
5086
+ * To used within side effects for React or Vue to update context
5087
+ */
5088
+ __publicField(this, "setContext", (context) => {
5089
+ if (!context) return;
5090
+ deepMerge(this.state.context, compact$1(context));
5091
+ });
5092
+ __publicField(this, "setOptions", (options) => {
5093
+ const opts = compact$1(options);
5094
+ this.actionMap = { ...this.actionMap, ...opts.actions };
5095
+ this.delayMap = { ...this.delayMap, ...opts.delays };
5096
+ this.activityMap = { ...this.activityMap, ...opts.activities };
5097
+ this.guardMap = { ...this.guardMap, ...opts.guards };
5098
+ });
5099
+ __publicField(this, "getStateNode", (state) => {
5100
+ if (!state) return;
5101
+ return this.config.states?.[state];
5102
+ });
5103
+ __publicField(this, "getNextStateInfo", (transitions, event) => {
5104
+ const transition = this.determineTransition(transitions, event);
5105
+ const isTargetless = !transition?.target;
5106
+ const target = transition?.target ?? this.state.value;
5107
+ const changed = this.state.value !== target;
5108
+ const stateNode = this.getStateNode(target);
5109
+ const reenter = !isTargetless && !changed && !transition?.internal;
5110
+ const info = {
5111
+ reenter,
5112
+ transition,
5113
+ stateNode,
5114
+ target,
5115
+ changed
5116
+ };
5117
+ this.log("NextState:", `[${event.type}]`, this.state.value, "---->", info.target);
5118
+ return info;
5119
+ });
5120
+ __publicField(this, "getAfterActions", (transition, delay) => {
5121
+ let id;
5122
+ return {
5123
+ entry: () => {
5124
+ id = globalThis.setTimeout(() => {
5125
+ const next = this.getNextStateInfo(transition, this.state.event);
5126
+ this.performStateChangeEffects(this.state.value, next, this.state.event);
5127
+ }, delay);
5128
+ },
5129
+ exit: () => {
5130
+ globalThis.clearTimeout(id);
5131
+ }
5132
+ };
5133
+ });
5134
+ /**
5135
+ * All `after` events leverage `setTimeout` and `clearTimeout`,
5136
+ * we invoke the `clearTimeout` on exit and `setTimeout` on entry.
5137
+ *
5138
+ * To achieve this, we split the `after` defintion into `entry` and `exit`
5139
+ * functions and append them to the state's `entry` and `exit` actions
5140
+ */
5141
+ __publicField(this, "getDelayedEventActions", (state) => {
5142
+ const stateNode = this.getStateNode(state);
5143
+ const event = this.state.event;
5144
+ if (!stateNode || !stateNode.after) return;
5145
+ const entries = [];
5146
+ const exits = [];
5147
+ if (isArray(stateNode.after)) {
5148
+ const transition = this.determineTransition(stateNode.after, event);
5149
+ if (!transition) return;
5150
+ if (!hasProp(transition, "delay")) {
5151
+ throw new Error(`[@zag-js/core > after] Delay is required for after transition: ${JSON.stringify(transition)}`);
5152
+ }
5153
+ const determineDelay = determineDelayFn(transition.delay, this.delayMap);
5154
+ const __delay = determineDelay(this.contextSnapshot, event);
5155
+ const actions = this.getAfterActions(transition, __delay);
5156
+ entries.push(actions.entry);
5157
+ exits.push(actions.exit);
5158
+ return { entries, exits };
5159
+ }
5160
+ if (isObject(stateNode.after)) {
5161
+ for (const delay in stateNode.after) {
5162
+ const transition = stateNode.after[delay];
5163
+ const determineDelay = determineDelayFn(delay, this.delayMap);
5164
+ const __delay = determineDelay(this.contextSnapshot, event);
5165
+ const actions = this.getAfterActions(transition, __delay);
5166
+ entries.push(actions.entry);
5167
+ exits.push(actions.exit);
5168
+ }
5169
+ }
5170
+ return { entries, exits };
5171
+ });
5172
+ /**
5173
+ * Function to executes defined actions. It can accept actions as string
5174
+ * (referencing `options.actions`) or actual functions.
5175
+ */
5176
+ __publicField(this, "executeActions", (actions, event) => {
5177
+ const pickedActions = determineActionsFn(actions, this.guardMap)(this.contextSnapshot, event, this.guardMeta);
5178
+ for (const action of toArray(pickedActions)) {
5179
+ const fn = isString(action) ? this.actionMap?.[action] : action;
5180
+ warn(
5181
+ isString(action) && !fn,
5182
+ `[@zag-js/core > execute-actions] No implementation found for action: \`${action}\``
5183
+ );
5184
+ fn?.(this.state.context, event, this.meta);
5185
+ }
5186
+ });
5187
+ /**
5188
+ * Function to execute running activities and registers
5189
+ * their cleanup function internally (to be called later on when we exit the state)
5190
+ */
5191
+ __publicField(this, "executeActivities", (event, activities, state) => {
5192
+ for (const activity of activities) {
5193
+ const fn = isString(activity) ? this.activityMap?.[activity] : activity;
5194
+ if (!fn) {
5195
+ warn(`[@zag-js/core > execute-activity] No implementation found for activity: \`${activity}\``);
5196
+ continue;
5197
+ }
5198
+ const cleanup = fn(this.state.context, event, this.meta);
5199
+ if (cleanup) {
5200
+ const key = isString(activity) ? activity : activity.name || uuid();
5201
+ this.addActivityCleanup(state ?? this.state.value, key, cleanup);
5202
+ }
5203
+ }
5204
+ });
5205
+ /**
5206
+ * Normalizes the `every` definition to transition. `every` can be:
5207
+ * - An array of possible actions to run (we need to pick the first match based on guard)
5208
+ * - An object of intervals and actions
5209
+ */
5210
+ __publicField(this, "createEveryActivities", (every, callbackfn) => {
5211
+ if (!every) return;
5212
+ if (isArray(every)) {
5213
+ const picked = toArray(every).find((transition) => {
5214
+ const delayOrFn = transition.delay;
5215
+ const determineDelay2 = determineDelayFn(delayOrFn, this.delayMap);
5216
+ const delay2 = determineDelay2(this.contextSnapshot, this.state.event);
5217
+ const determineGuard = determineGuardFn(transition.guard, this.guardMap);
5218
+ const guard = determineGuard(this.contextSnapshot, this.state.event, this.guardMeta);
5219
+ return guard ?? delay2 != null;
5220
+ });
5221
+ if (!picked) return;
5222
+ const determineDelay = determineDelayFn(picked.delay, this.delayMap);
5223
+ const delay = determineDelay(this.contextSnapshot, this.state.event);
5224
+ const activity = () => {
5225
+ const id = globalThis.setInterval(() => {
5226
+ this.executeActions(picked.actions, this.state.event);
5227
+ }, delay);
5228
+ return () => {
5229
+ globalThis.clearInterval(id);
5230
+ };
5231
+ };
5232
+ callbackfn(activity);
5233
+ } else {
5234
+ for (const interval in every) {
5235
+ const actions = every?.[interval];
5236
+ const determineDelay = determineDelayFn(interval, this.delayMap);
5237
+ const delay = determineDelay(this.contextSnapshot, this.state.event);
5238
+ const activity = () => {
5239
+ const id = globalThis.setInterval(() => {
5240
+ this.executeActions(actions, this.state.event);
5241
+ }, delay);
5242
+ return () => {
5243
+ globalThis.clearInterval(id);
5244
+ };
5245
+ };
5246
+ callbackfn(activity);
5247
+ }
5248
+ }
5249
+ });
5250
+ __publicField(this, "setEvent", (event) => {
5251
+ this.state.previousEvent = this.state.event;
5252
+ this.state.event = ref(toEvent(event));
5253
+ });
5254
+ __publicField(this, "performExitEffects", (current, event) => {
5255
+ const currentState = this.state.value;
5256
+ if (currentState === "") return;
5257
+ const stateNode = current ? this.getStateNode(current) : void 0;
5258
+ this.stopActivities(currentState);
5259
+ const _exit = determineActionsFn(stateNode?.exit, this.guardMap)(this.contextSnapshot, event, this.guardMeta);
5260
+ const exitActions = toArray(_exit);
5261
+ const afterExitActions = this.delayedEvents.get(currentState);
5262
+ if (afterExitActions) {
5263
+ exitActions.push(...afterExitActions);
5264
+ }
5265
+ this.executeActions(exitActions, event);
5266
+ });
5267
+ __publicField(this, "performEntryEffects", (next, event) => {
5268
+ const stateNode = this.getStateNode(next);
5269
+ const activities = toArray(stateNode?.activities);
5270
+ this.createEveryActivities(stateNode?.every, (activity) => {
5271
+ activities.unshift(activity);
5272
+ });
5273
+ if (activities.length > 0) {
5274
+ this.executeActivities(event, activities);
5275
+ }
5276
+ const pickedActions = determineActionsFn(stateNode?.entry, this.guardMap)(
5277
+ this.contextSnapshot,
5278
+ event,
5279
+ this.guardMeta
5280
+ );
5281
+ const entryActions = toArray(pickedActions);
5282
+ const afterActions = this.getDelayedEventActions(next);
5283
+ if (stateNode?.after && afterActions) {
5284
+ this.delayedEvents.set(next, afterActions?.exits);
5285
+ entryActions.push(...afterActions.entries);
5286
+ }
5287
+ this.executeActions(entryActions, event);
5288
+ if (stateNode?.type === "final") {
5289
+ this.state.done = true;
5290
+ this.doneListeners.forEach((listener) => {
5291
+ listener(this.stateSnapshot);
5292
+ });
5293
+ this.stop();
5294
+ }
5295
+ });
5296
+ __publicField(this, "performTransitionEffects", (transitions, event) => {
5297
+ const transition = this.determineTransition(transitions, event);
5298
+ this.executeActions(transition?.actions, event);
5299
+ });
5300
+ /**
5301
+ * Performs all the requires side-effects or reactions when
5302
+ * we move from state A => state B.
5303
+ *
5304
+ * The Effect order:
5305
+ * Exit actions (current state) => Transition actions => Go to state => Entry actions (next state)
5306
+ */
5307
+ __publicField(this, "performStateChangeEffects", (current, next, event) => {
5308
+ this.setEvent(event);
5309
+ const changed = next.changed || next.reenter;
5310
+ if (changed) {
5311
+ this.performExitEffects(current, event);
5312
+ }
5313
+ this.performTransitionEffects(next.transition, event);
5314
+ this.setState(next.target);
5315
+ if (changed) {
5316
+ this.performEntryEffects(next.target, event);
5317
+ }
5318
+ });
5319
+ __publicField(this, "determineTransition", (transition, event) => {
5320
+ const fn = determineTransitionFn(transition, this.guardMap);
5321
+ return fn?.(this.contextSnapshot, event, this.guardMeta);
5322
+ });
5323
+ /**
5324
+ * Function to send event to parent machine from spawned child
5325
+ */
5326
+ __publicField(this, "sendParent", (evt) => {
5327
+ if (!this.parent) {
5328
+ invariant("[@zag-js/core > send-parent] Cannot send event to an unknown parent");
5329
+ }
5330
+ const event = toEvent(evt);
5331
+ this.parent?.send(event);
5332
+ });
5333
+ __publicField(this, "log", (...args) => {
5334
+ if (isDev() && this.options.debug) {
5335
+ console.log(...args);
5336
+ }
5337
+ });
5338
+ /**
5339
+ * Function to send an event to current machine
5340
+ */
5341
+ __publicField(this, "send", (evt) => {
5342
+ const event = toEvent(evt);
5343
+ this.transition(this.state.value, event);
5344
+ });
5345
+ __publicField(this, "transition", (state, evt) => {
5346
+ const stateNode = isString(state) ? this.getStateNode(state) : state?.stateNode;
5347
+ const event = toEvent(evt);
5348
+ if (!stateNode && !this.config.on) {
5349
+ const msg = this.status === "Stopped" /* Stopped */ ? "[@zag-js/core > transition] Cannot transition a stopped machine" : `[@zag-js/core > transition] State does not have a definition for \`state\`: ${state}, \`event\`: ${event.type}`;
5350
+ warn(msg);
5351
+ return;
5352
+ }
5353
+ const transitions = stateNode?.on?.[event.type] ?? this.config.on?.[event.type];
5354
+ const next = this.getNextStateInfo(transitions, event);
5355
+ this.performStateChangeEffects(this.state.value, next, event);
5356
+ return next.stateNode;
5357
+ });
5358
+ __publicField(this, "subscribe", (listener) => {
5359
+ this.stateListeners.add(listener);
5360
+ if (this.status === "Running" /* Running */) {
5361
+ listener(this.stateSnapshot);
5362
+ }
5363
+ return () => {
5364
+ this.stateListeners.delete(listener);
5365
+ };
5366
+ });
5367
+ __publicField(this, "onDone", (listener) => {
5368
+ this.doneListeners.add(listener);
5369
+ return this;
5370
+ });
5371
+ __publicField(this, "onTransition", (listener) => {
5372
+ this.stateListeners.add(listener);
5373
+ if (this.status === "Running" /* Running */) {
5374
+ listener(this.stateSnapshot);
5375
+ }
5376
+ return this;
5377
+ });
5378
+ this.config = structuredClone(config);
5379
+ this.options = structuredClone(options ?? {});
5380
+ this.id = this.config.id ?? `machine-${uuid()}`;
5381
+ this.guardMap = this.options?.guards ?? {};
5382
+ this.actionMap = this.options?.actions ?? {};
5383
+ this.delayMap = this.options?.delays ?? {};
5384
+ this.activityMap = this.options?.activities ?? {};
5385
+ this.sync = this.options?.sync ?? false;
5386
+ this.state = createProxy(this.config);
5387
+ this.initialContext = snapshot(this.state.context);
5388
+ }
5389
+ // immutable state value
5390
+ get stateSnapshot() {
5391
+ return cast(snapshot(this.state));
5392
+ }
5393
+ getState() {
5394
+ return this.stateSnapshot;
5395
+ }
5396
+ // immutable context value
5397
+ get contextSnapshot() {
5398
+ return this.stateSnapshot.context;
5399
+ }
5400
+ /**
5401
+ * A reference to the instance methods of the machine.
5402
+ * Useful when spawning child machines and managing the communication between them.
5403
+ */
5404
+ get self() {
5405
+ const self = this;
5406
+ return {
5407
+ id: this.id,
5408
+ send: this.send.bind(this),
5409
+ sendParent: this.sendParent.bind(this),
5410
+ sendChild: this.sendChild.bind(this),
5411
+ stop: this.stop.bind(this),
5412
+ stopChild: this.stopChild.bind(this),
5413
+ spawn: this.spawn.bind(this),
5414
+ stopActivity: this.stopActivity.bind(this),
5415
+ get state() {
5416
+ return self.stateSnapshot;
5417
+ },
5418
+ get initialContext() {
5419
+ return self.initialContext;
5420
+ },
5421
+ get initialState() {
5422
+ return self.initialState?.target ?? "";
5423
+ }
5424
+ };
5425
+ }
5426
+ get meta() {
5427
+ return {
5428
+ state: this.stateSnapshot,
5429
+ guards: this.guardMap,
5430
+ send: this.send.bind(this),
5431
+ self: this.self,
5432
+ initialContext: this.initialContext,
5433
+ initialState: this.initialState?.target ?? "",
5434
+ getState: () => this.stateSnapshot,
5435
+ getAction: (key) => this.actionMap[key],
5436
+ getGuard: (key) => this.guardMap[key]
5437
+ };
5438
+ }
5439
+ get guardMeta() {
5440
+ return {
5441
+ state: this.stateSnapshot
5442
+ };
5443
+ }
5444
+ get [Symbol.toStringTag]() {
5445
+ return "Machine";
5446
+ }
5447
+ };
5448
+ var createMachine = (config, options) => new Machine(config, options);
5449
+
5450
+ // src/array.ts
5451
+
5452
+ // src/object.ts
5453
+ function compact(obj) {
5454
+ if (!isPlainObject(obj) || obj === void 0) {
5455
+ return obj;
5456
+ }
5457
+ const keys = Reflect.ownKeys(obj).filter((key) => typeof key === "string");
5458
+ const filtered = {};
5459
+ for (const key of keys) {
5460
+ const value = obj[key];
5461
+ if (value !== void 0) {
5462
+ filtered[key] = compact(value);
5463
+ }
5464
+ }
5465
+ return filtered;
5466
+ }
5467
+ var isPlainObject = (value) => {
5468
+ return value && typeof value === "object" && value.constructor === Object;
5469
+ };
5470
+
5471
+ function $(e,t,u,x=h=>h){return e*x(.5-t*(.5-u))}function se(e){return [-e[0],-e[1]]}function l(e,t){return [e[0]+t[0],e[1]+t[1]]}function a(e,t){return [e[0]-t[0],e[1]-t[1]]}function b(e,t){return [e[0]*t,e[1]*t]}function he(e,t){return [e[0]/t,e[1]/t]}function R(e){return [e[1],-e[0]]}function B(e,t){return e[0]*t[0]+e[1]*t[1]}function ue(e,t){return e[0]===t[0]&&e[1]===t[1]}function ge(e){return Math.hypot(e[0],e[1])}function de(e){return e[0]*e[0]+e[1]*e[1]}function A(e,t){return de(a(e,t))}function G(e){return he(e,ge(e))}function ie(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function L(e,t,u){let x=Math.sin(u),h=Math.cos(u),y=e[0]-t[0],n=e[1]-t[1],f=y*h-n*x,d=y*x+n*h;return [f+t[0],d+t[1]]}function K(e,t,u){return l(e,b(a(t,e),u))}function ee(e,t,u){return l(e,b(t,u))}var{min:C,PI:xe}=Math,pe=.275,V=xe+1e-4;function ce(e,t={}){let{size:u=16,smoothing:x=.5,thinning:h=.5,simulatePressure:y=!0,easing:n=r=>r,start:f={},end:d={},last:D=!1}=t,{cap:S=!0,easing:j=r=>r*(2-r)}=f,{cap:q=!0,easing:c=r=>--r*r*r+1}=d;if(e.length===0||u<=0)return [];let p=e[e.length-1].runningLength,g=f.taper===!1?0:f.taper===!0?Math.max(u,p):f.taper,T=d.taper===!1?0:d.taper===!0?Math.max(u,p):d.taper,te=Math.pow(u*x,2),_=[],M=[],H=e.slice(0,10).reduce((r,i)=>{let o=i.pressure;if(y){let s=C(1,i.distance/u),W=C(1,1-s);o=C(1,r+(W-r)*(s*pe));}return (r+o)/2},e[0].pressure),m=$(u,h,e[e.length-1].pressure,n),U,X=e[0].vector,z=e[0].point,F=z,O=z,E=F,J=!1;for(let r=0;r<e.length;r++){let{pressure:i}=e[r],{point:o,vector:s,distance:W,runningLength:I}=e[r];if(r<e.length-1&&p-I<3)continue;if(h){if(y){let v=C(1,W/u),Z=C(1,1-v);i=C(1,H+(Z-H)*(v*pe));}m=$(u,h,i,n);}else m=u/2;U===void 0&&(U=m);let le=I<g?j(I/g):1,fe=p-I<T?c((p-I)/T):1;m=Math.max(.01,m*Math.min(le,fe));let re=(r<e.length-1?e[r+1]:e[r]).vector,Y=r<e.length-1?B(s,re):1,be=B(s,X)<0&&!J,ne=Y!==null&&Y<0;if(be||ne){let v=b(R(X),m);for(let Z=1/13,w=0;w<=1;w+=Z)O=L(a(o,v),o,V*w),_.push(O),E=L(l(o,v),o,V*-w),M.push(E);z=O,F=E,ne&&(J=!0);continue}if(J=!1,r===e.length-1){let v=b(R(s),m);_.push(a(o,v)),M.push(l(o,v));continue}let oe=b(R(K(re,s,Y)),m);O=a(o,oe),(r<=1||A(z,O)>te)&&(_.push(O),z=O),E=l(o,oe),(r<=1||A(F,E)>te)&&(M.push(E),F=E),H=i,X=s;}let P=e[0].point.slice(0,2),k=e.length>1?e[e.length-1].point.slice(0,2):l(e[0].point,[1,1]),Q=[],N=[];if(e.length===1){if(!(g||T)||D){let r=ee(P,G(R(a(P,k))),-(U||m)),i=[];for(let o=1/13,s=o;s<=1;s+=o)i.push(L(r,P,V*2*s));return i}}else {if(!(g||T&&e.length===1))if(S)for(let i=1/13,o=i;o<=1;o+=i){let s=L(M[0],P,V*o);Q.push(s);}else {let i=a(_[0],M[0]),o=b(i,.5),s=b(i,.51);Q.push(a(P,o),a(P,s),l(P,s),l(P,o));}let r=R(se(e[e.length-1].vector));if(T||g&&e.length===1)N.push(k);else if(q){let i=ee(k,r,m);for(let o=1/29,s=o;s<1;s+=o)N.push(L(i,k,V*3*s));}else N.push(l(k,b(r,m)),l(k,b(r,m*.99)),a(k,b(r,m*.99)),a(k,b(r,m)));}return _.concat(N,M.reverse(),Q)}function me(e,t={}){var q;let{streamline:u=.5,size:x=16,last:h=!1}=t;if(e.length===0)return [];let y=.15+(1-u)*.85,n=Array.isArray(e[0])?e:e.map(({x:c,y:p,pressure:g=.5})=>[c,p,g]);if(n.length===2){let c=n[1];n=n.slice(0,-1);for(let p=1;p<5;p++)n.push(K(n[0],c,p/4));}n.length===1&&(n=[...n,[...l(n[0],[1,1]),...n[0].slice(2)]]);let f=[{point:[n[0][0],n[0][1]],pressure:n[0][2]>=0?n[0][2]:.25,vector:[1,1],distance:0,runningLength:0}],d=!1,D=0,S=f[0],j=n.length-1;for(let c=1;c<n.length;c++){let p=h&&c===j?n[c].slice(0,2):K(S.point,n[c],y);if(ue(S.point,p))continue;let g=ie(p,S.point);if(D+=g,c<j&&!d){if(D<x)continue;d=!0;}S={point:p,pressure:n[c][2]>=0?n[c][2]:.5,vector:G(a(S.point,p)),distance:g,runningLength:D},f.push(S);}return f[0].vector=((q=f[1])==null?void 0:q.vector)||[0,0],f}function ae(e,t={}){return ce(me(e,t),t)}var _e=ae;
5472
+
5473
+ // src/signature-pad.anatomy.ts
5474
+ var anatomy = createAnatomy("signature-pad").parts(
5475
+ "root",
5476
+ "control",
5477
+ "segment",
5478
+ "segmentPath",
5479
+ "guide",
5480
+ "clearTrigger",
5481
+ "label"
5482
+ );
5483
+ var parts = anatomy.build();
5484
+ var dom = domQuery.createScope({
5485
+ getRootId: (ctx) => ctx.ids?.root ?? `signature-${ctx.id}`,
5486
+ getControlId: (ctx) => ctx.ids?.control ?? `signature-control-${ctx.id}`,
5487
+ getHiddenInputId: (ctx) => ctx.ids?.hiddenInput ?? `signature-input-${ctx.id}`,
5488
+ getControlEl: (ctx) => dom.getById(ctx, dom.getControlId(ctx)),
5489
+ getSegmentEl: (ctx) => domQuery.query(dom.getControlEl(ctx), "[data-part=segment]"),
5490
+ getHiddenInputEl: (ctx) => dom.getById(ctx, dom.getHiddenInputId(ctx)),
5491
+ getDataUrl: (ctx, options) => {
5492
+ if (ctx.isEmpty) return Promise.resolve("");
5493
+ return domQuery.getDataUrl(dom.getSegmentEl(ctx), options);
5494
+ }
5495
+ });
5496
+
5497
+ // src/signature-pad.connect.ts
5498
+ function connect(state, send, normalize) {
5499
+ const drawing = state.matches("drawing");
5500
+ const empty = state.context.isEmpty;
5501
+ const interactive = state.context.isInteractive;
5502
+ const disabled = !!state.context.disabled;
5503
+ return {
5504
+ empty,
5505
+ drawing,
5506
+ currentPath: state.context.currentPath,
5507
+ paths: state.context.paths,
5508
+ clear() {
5509
+ send({ type: "CLEAR" });
5510
+ },
5511
+ getDataUrl(type, quality) {
5512
+ return dom.getDataUrl(state.context, { type, quality });
5513
+ },
5514
+ getLabelProps() {
5515
+ return normalize.element({
5516
+ ...parts.label.attrs,
5517
+ "data-disabled": domQuery.dataAttr(disabled),
5518
+ htmlFor: dom.getControlId(state.context)
5519
+ });
5520
+ },
5521
+ getRootProps() {
5522
+ return normalize.element({
5523
+ ...parts.root.attrs,
5524
+ "data-disabled": domQuery.dataAttr(disabled),
5525
+ id: dom.getRootId(state.context)
5526
+ });
5527
+ },
5528
+ getControlProps() {
5529
+ return normalize.element({
5530
+ ...parts.control.attrs,
5531
+ tabIndex: disabled ? void 0 : 0,
5532
+ id: dom.getControlId(state.context),
5533
+ "aria-label": "Signature Pad",
5534
+ "aria-roledescription": "signature pad",
5535
+ "aria-disabled": disabled,
5536
+ "data-disabled": domQuery.dataAttr(disabled),
5537
+ onPointerDown(event) {
5538
+ if (!isLeftClick(event)) return;
5539
+ if (isModifierKey(event)) return;
5540
+ if (!interactive) return;
5541
+ const target = domQuery.getEventTarget(event);
5542
+ if (target?.closest("[data-part=clear-trigger]")) return;
5543
+ event.currentTarget.setPointerCapture(event.pointerId);
5544
+ const point = { x: event.clientX, y: event.clientY };
5545
+ const { offset } = getRelativePoint(point, dom.getControlEl(state.context));
5546
+ send({ type: "POINTER_DOWN", point: offset, pressure: event.pressure });
5547
+ },
5548
+ onPointerUp(event) {
5549
+ if (!interactive) return;
5550
+ if (event.currentTarget.hasPointerCapture(event.pointerId)) {
5551
+ event.currentTarget.releasePointerCapture(event.pointerId);
5552
+ }
5553
+ },
5554
+ style: {
5555
+ position: "relative",
5556
+ touchAction: "none",
5557
+ userSelect: "none"
5558
+ }
5559
+ });
5560
+ },
5561
+ getSegmentProps() {
5562
+ return normalize.svg({
5563
+ ...parts.segment.attrs,
5564
+ style: {
5565
+ position: "absolute",
5566
+ top: 0,
5567
+ left: 0,
5568
+ width: "100%",
5569
+ height: "100%",
5570
+ pointerEvents: "none",
5571
+ fill: state.context.drawing.fill
5572
+ }
5573
+ });
5574
+ },
5575
+ getSegmentPathProps(props2) {
5576
+ return normalize.path({
5577
+ ...parts.segmentPath.attrs,
5578
+ d: props2.path
5579
+ });
5580
+ },
5581
+ getGuideProps() {
5582
+ return normalize.element({
5583
+ ...parts.guide.attrs,
5584
+ "data-disabled": domQuery.dataAttr(disabled)
5585
+ });
5586
+ },
5587
+ getClearTriggerProps() {
5588
+ return normalize.button({
5589
+ ...parts.clearTrigger.attrs,
5590
+ type: "button",
5591
+ "aria-label": "Clear Signature",
5592
+ hidden: !state.context.paths.length || drawing,
5593
+ disabled,
5594
+ onClick() {
5595
+ send({ type: "CLEAR" });
5596
+ }
5597
+ });
5598
+ },
5599
+ getHiddenInputProps(props2) {
5600
+ return normalize.input({
5601
+ type: "text",
5602
+ hidden: true,
5603
+ disabled,
5604
+ name: state.context.name,
5605
+ value: props2.value
5606
+ });
5607
+ }
5608
+ };
5609
+ }
5610
+
5611
+ // src/get-svg-path.ts
5612
+ var average = (a, b) => (a + b) / 2;
5613
+ function getSvgPathFromStroke(points, closed = true) {
5614
+ const len = points.length;
5615
+ if (len < 4) {
5616
+ return "";
5617
+ }
5618
+ let a = points[0];
5619
+ let b = points[1];
5620
+ const c = points[2];
5621
+ let result = `M${a[0].toFixed(2)},${a[1].toFixed(2)} Q${b[0].toFixed(2)},${b[1].toFixed(2)} ${average(b[0], c[0]).toFixed(2)},${average(
5622
+ b[1],
5623
+ c[1]
5624
+ ).toFixed(2)} T`;
5625
+ for (let i = 2, max = len - 1; i < max; i++) {
5626
+ a = points[i];
5627
+ b = points[i + 1];
5628
+ result += `${average(a[0], b[0]).toFixed(2)},${average(a[1], b[1]).toFixed(2)} `;
5629
+ }
5630
+ if (closed) {
5631
+ result += "Z";
5632
+ }
5633
+ return result;
5634
+ }
5635
+
5636
+ // src/signature-pad.machine.ts
5637
+ function machine(userContext) {
5638
+ const ctx = compact(userContext);
5639
+ return createMachine(
5640
+ {
5641
+ id: "signature-pad",
5642
+ initial: "idle",
5643
+ context: {
5644
+ readOnly: false,
5645
+ disabled: false,
5646
+ ...ctx,
5647
+ paths: [],
5648
+ currentPoints: [],
5649
+ currentPath: null,
5650
+ drawing: {
5651
+ size: 2,
5652
+ simulatePressure: false,
5653
+ thinning: 0.7,
5654
+ smoothing: 0.4,
5655
+ streamline: 0.6,
5656
+ ...ctx.drawing
5657
+ }
5658
+ },
5659
+ computed: {
5660
+ isInteractive: (ctx2) => !(ctx2.disabled || ctx2.readOnly),
5661
+ isEmpty: (ctx2) => ctx2.paths.length === 0
5662
+ },
5663
+ on: {
5664
+ CLEAR: {
5665
+ actions: ["clearPoints", "invokeOnDrawEnd", "focusCanvasEl"]
5666
+ }
5667
+ },
5668
+ states: {
5669
+ idle: {
5670
+ on: {
5671
+ POINTER_DOWN: {
5672
+ target: "drawing",
5673
+ actions: ["addPoint"]
5674
+ }
5675
+ }
5676
+ },
5677
+ drawing: {
5678
+ activities: ["trackPointerMove"],
5679
+ on: {
5680
+ POINTER_MOVE: {
5681
+ actions: ["addPoint", "invokeOnDraw"]
5682
+ },
5683
+ POINTER_UP: {
5684
+ target: "idle",
5685
+ actions: ["endStroke", "invokeOnDrawEnd"]
5686
+ }
5687
+ }
5688
+ }
5689
+ }
5690
+ },
5691
+ {
5692
+ activities: {
5693
+ trackPointerMove(ctx2, _evt, { send }) {
5694
+ const doc = dom.getDoc(ctx2);
5695
+ return trackPointerMove(doc, {
5696
+ onPointerMove({ event, point }) {
5697
+ const { offset } = getRelativePoint(point, dom.getControlEl(ctx2));
5698
+ send({ type: "POINTER_MOVE", point: offset, pressure: event.pressure });
5699
+ },
5700
+ onPointerUp() {
5701
+ send({ type: "POINTER_UP" });
5702
+ }
5703
+ });
5704
+ }
5705
+ },
5706
+ actions: {
5707
+ addPoint(ctx2, evt) {
5708
+ ctx2.currentPoints.push(evt.point);
5709
+ const stroke = _e(ctx2.currentPoints, ctx2.drawing);
5710
+ ctx2.currentPath = getSvgPathFromStroke(stroke);
5711
+ },
5712
+ endStroke(ctx2) {
5713
+ ctx2.paths.push(ctx2.currentPath);
5714
+ ctx2.currentPoints = [];
5715
+ ctx2.currentPath = null;
5716
+ },
5717
+ clearPoints(ctx2) {
5718
+ ctx2.currentPoints = [];
5719
+ ctx2.paths = [];
5720
+ },
5721
+ focusCanvasEl(ctx2) {
5722
+ queueMicrotask(() => {
5723
+ dom.getControlEl(ctx2)?.focus({ preventScroll: true });
5724
+ });
5725
+ },
5726
+ invokeOnDraw(ctx2) {
5727
+ ctx2.onDraw?.({
5728
+ paths: [...ctx2.paths, ctx2.currentPath]
5729
+ });
5730
+ },
5731
+ invokeOnDrawEnd(ctx2) {
5732
+ ctx2.onDrawEnd?.({
5733
+ paths: [...ctx2.paths],
5734
+ getDataUrl(type, quality = 0.92) {
5735
+ return dom.getDataUrl(ctx2, { type, quality });
5736
+ }
5737
+ });
5738
+ }
5739
+ }
5740
+ }
5741
+ );
5742
+ }
5743
+ types.createProps()([
5744
+ "dir",
5745
+ "disabled",
5746
+ "getRootNode",
5747
+ "id",
5748
+ "ids",
5749
+ "onDraw",
5750
+ "onDrawEnd",
5751
+ "readOnly",
5752
+ "drawing",
5753
+ "name"
5754
+ ]);
5755
+
5756
+ const useSignaturePad = props => {
5757
+ const locale = useLocaleContext();
5758
+ const environment = useEnvironmentContext();
5759
+ const id = solidJs.createUniqueId();
5760
+ const context = solidJs.createMemo(() => ({
5761
+ id,
5762
+ dir: locale().dir,
5763
+ getRootNode: environment().getRootNode,
5764
+ ...props
5765
+ }));
5766
+ const [state, send] = solid.useMachine(machine(context()), {
5767
+ context
5768
+ });
5769
+ return solidJs.createMemo(() => connect(state, send, solid.normalizeProps));
5770
+ };
5771
+
5772
+ const SignaturePadRoot = props => {
5773
+ const [useSignaturePadProps, localProps] = createSplitProps()(props, ['id', 'ids', 'drawing', 'disabled', 'readOnly', 'name', 'onDraw', 'onDrawEnd']);
5774
+ const signaturePad = useSignaturePad(useSignaturePadProps);
5775
+ const mergedProps = solid.mergeProps(() => signaturePad().getRootProps(), localProps);
5776
+ return web.createComponent(SignaturePadProvider, {
5777
+ value: signaturePad,
5778
+ get children() {
5779
+ return web.createComponent(ark.div, mergedProps);
5780
+ }
5781
+ });
5782
+ };
5783
+
5784
+ const SignaturePadRootProvider = props => {
5785
+ const [{
5786
+ value: signaturePad
5787
+ }, localProps] = createSplitProps()(props, ['value']);
5788
+ const mergedProps = solid.mergeProps(() => signaturePad().getRootProps(), localProps);
5789
+ return web.createComponent(SignaturePadProvider, {
5790
+ value: signaturePad,
5791
+ get children() {
5792
+ return web.createComponent(ark.div, mergedProps);
5793
+ }
5794
+ });
5795
+ };
5796
+
5797
+ var _tmpl$$1 = /*#__PURE__*/web.template(`<title>Signature`),
5798
+ _tmpl$2 = /*#__PURE__*/web.template(`<svg><path></svg>`, false, true);
5799
+ const SignaturePadSegment = props => {
5800
+ const signaturePad = useSignaturePadContext();
5801
+ const mergedProps = solid.mergeProps(() => signaturePad().getSegmentProps(), props);
5802
+ return web.createComponent(ark.svg, web.mergeProps(mergedProps, {
5803
+ get children() {
5804
+ return [_tmpl$$1(), web.createComponent(solidJs.For, {
5805
+ get each() {
5806
+ return signaturePad().paths;
5807
+ },
5808
+ children: path => (() => {
5809
+ var _el$3 = _tmpl$2();
5810
+ web.spread(_el$3, web.mergeProps(() => signaturePad().getSegmentPathProps({
5811
+ path
5812
+ })), true, false);
5813
+ return _el$3;
5814
+ })()
5815
+ }), web.createComponent(solidJs.Show, {
5816
+ get when() {
5817
+ return signaturePad().currentPath;
5818
+ },
5819
+ get children() {
5820
+ var _el$2 = _tmpl$2();
5821
+ web.spread(_el$2, web.mergeProps(() => signaturePad().getSegmentPathProps({
5822
+ path: signaturePad().currentPath
5823
+ })), true, false);
5824
+ return _el$2;
5825
+ }
5826
+ })];
5827
+ }
5828
+ }));
5829
+ };
5830
+
5831
+ var signaturePad = /*#__PURE__*/Object.freeze({
5832
+ __proto__: null,
5833
+ ClearTrigger: SignaturePadClearTrigger,
5834
+ Context: SignaturePadContext,
5835
+ Control: SignaturePadControl,
5836
+ Guide: SignaturePadGuide,
5837
+ Label: SignaturePadLabel,
5838
+ Root: SignaturePadRoot,
5839
+ RootProvider: SignaturePadRootProvider,
5840
+ Segment: SignaturePadSegment
5841
+ });
5842
+
3890
5843
  const [SliderProvider, useSliderContext] = createContext({
3891
5844
  hookName: 'useSliderContext',
3892
5845
  providerName: '<SliderProvider />'
@@ -4189,7 +6142,8 @@ const TabContent = props => {
4189
6142
  const api = useTabsContext();
4190
6143
  const renderStrategyProps = useRenderStrategyContext();
4191
6144
  const presenceApi = usePresence(solid.mergeProps(renderStrategyProps, () => ({
4192
- present: api().value === contentProps.value
6145
+ present: api().value === contentProps.value,
6146
+ immediate: true
4193
6147
  })));
4194
6148
  const mergedProps = solid.mergeProps(() => api().getContentProps(contentProps), () => presenceApi().presenceProps, localProps);
4195
6149
  return web.createComponent(PresenceProvider, {
@@ -4488,11 +6442,12 @@ const ToastDescription = props => {
4488
6442
  var _tmpl$ = /*#__PURE__*/web.template(`<div><div></div><div>`);
4489
6443
  const ToastRoot = props => {
4490
6444
  const toast = useToastContext();
6445
+ const mergedProps = solid.mergeProps(() => toast().getRootProps(), props);
4491
6446
  return (() => {
4492
6447
  var _el$ = _tmpl$(),
4493
6448
  _el$2 = _el$.firstChild,
4494
6449
  _el$3 = _el$2.nextSibling;
4495
- web.spread(_el$, web.mergeProps(() => toast().getRootProps()), false, true);
6450
+ web.spread(_el$, mergedProps, false, true);
4496
6451
  web.spread(_el$2, web.mergeProps(() => toast().getGhostBeforeProps()), false, false);
4497
6452
  web.insert(_el$, () => props.children, _el$3);
4498
6453
  web.spread(_el$3, web.mergeProps(() => toast().getGhostAfterProps()), false, false);
@@ -4967,6 +6922,7 @@ exports.CarouselViewport = CarouselViewport;
4967
6922
  exports.Checkbox = checkbox;
4968
6923
  exports.CheckboxContext = CheckboxContext;
4969
6924
  exports.CheckboxControl = CheckboxControl;
6925
+ exports.CheckboxGroup = CheckboxGroup;
4970
6926
  exports.CheckboxHiddenInput = CheckboxHiddenInput;
4971
6927
  exports.CheckboxIndicator = CheckboxIndicator;
4972
6928
  exports.CheckboxLabel = CheckboxLabel;
@@ -5027,6 +6983,7 @@ exports.ComboboxItemGroupLabel = ComboboxItemGroupLabel;
5027
6983
  exports.ComboboxItemIndicator = ComboboxItemIndicator;
5028
6984
  exports.ComboboxItemText = ComboboxItemText;
5029
6985
  exports.ComboboxLabel = ComboboxLabel;
6986
+ exports.ComboboxList = ComboboxList;
5030
6987
  exports.ComboboxPositioner = ComboboxPositioner;
5031
6988
  exports.ComboboxRoot = ComboboxRoot;
5032
6989
  exports.ComboboxRootProvider = ComboboxRootProvider;
@@ -5186,6 +7143,13 @@ exports.ProgressRootProvider = ProgressRootProvider;
5186
7143
  exports.ProgressTrack = ProgressTrack;
5187
7144
  exports.ProgressValueText = ProgressValueText;
5188
7145
  exports.ProgressView = ProgressView;
7146
+ exports.QrCode = qrCode;
7147
+ exports.QrCodeContext = QrCodeContext;
7148
+ exports.QrCodeFrame = QrCodeFrame;
7149
+ exports.QrCodeOverlay = QrCodeOverlay;
7150
+ exports.QrCodePattern = QrCodePattern;
7151
+ exports.QrCodeRoot = QrCodeRoot;
7152
+ exports.QrCodeRootProvider = QrCodeRootProvider;
5189
7153
  exports.RadioGroup = radioGroup;
5190
7154
  exports.RadioGroupContext = RadioGroupContext;
5191
7155
  exports.RadioGroupIndicator = RadioGroupIndicator;
@@ -5231,11 +7195,21 @@ exports.SelectItemGroupLabel = SelectItemGroupLabel;
5231
7195
  exports.SelectItemIndicator = SelectItemIndicator;
5232
7196
  exports.SelectItemText = SelectItemText;
5233
7197
  exports.SelectLabel = SelectLabel;
7198
+ exports.SelectList = SelectList;
5234
7199
  exports.SelectPositioner = SelectPositioner;
5235
7200
  exports.SelectRoot = SelectRoot;
5236
7201
  exports.SelectRootProvider = SelectRootProvider;
5237
7202
  exports.SelectTrigger = SelectTrigger;
5238
7203
  exports.SelectValueText = SelectValueText;
7204
+ exports.SignaturePad = signaturePad;
7205
+ exports.SignaturePadClearTrigger = SignaturePadClearTrigger;
7206
+ exports.SignaturePadContext = SignaturePadContext;
7207
+ exports.SignaturePadControl = SignaturePadControl;
7208
+ exports.SignaturePadGuide = SignaturePadGuide;
7209
+ exports.SignaturePadLabel = SignaturePadLabel;
7210
+ exports.SignaturePadRoot = SignaturePadRoot;
7211
+ exports.SignaturePadRootProvider = SignaturePadRootProvider;
7212
+ exports.SignaturePadSegment = SignaturePadSegment;
5239
7213
  exports.Slider = slider;
5240
7214
  exports.SliderContext = SliderContext;
5241
7215
  exports.SliderControl = SliderControl;
@@ -5336,6 +7310,8 @@ exports.useCarousel = useCarousel;
5336
7310
  exports.useCarouselContext = useCarouselContext;
5337
7311
  exports.useCheckbox = useCheckbox;
5338
7312
  exports.useCheckboxContext = useCheckboxContext;
7313
+ exports.useCheckboxGroup = useCheckboxGroup;
7314
+ exports.useCheckboxGroupContext = useCheckboxGroupContext;
5339
7315
  exports.useClipboard = useClipboard;
5340
7316
  exports.useClipboardContext = useClipboardContext;
5341
7317
  exports.useCollapsible = useCollapsible;
@@ -5372,6 +7348,8 @@ exports.usePresence = usePresence;
5372
7348
  exports.usePresenceContext = usePresenceContext;
5373
7349
  exports.useProgress = useProgress;
5374
7350
  exports.useProgressContext = useProgressContext;
7351
+ exports.useQrCode = useQrCode;
7352
+ exports.useQrCodeContext = useQrCodeContext;
5375
7353
  exports.useRadioGroup = useRadioGroup;
5376
7354
  exports.useRadioGroupContext = useRadioGroupContext;
5377
7355
  exports.useRadioGroupItemContext = useRadioGroupItemContext;
@@ -5384,6 +7362,8 @@ exports.useSegmentGroupItemContext = useSegmentGroupItemContext;
5384
7362
  exports.useSelect = useSelect;
5385
7363
  exports.useSelectContext = useSelectContext;
5386
7364
  exports.useSelectItemContext = useSelectItemContext;
7365
+ exports.useSignaturePad = useSignaturePad;
7366
+ exports.useSignaturePadContext = useSignaturePadContext;
5387
7367
  exports.useSlider = useSlider;
5388
7368
  exports.useSliderContext = useSliderContext;
5389
7369
  exports.useSplitter = useSplitter;