@ark-ui/solid 3.6.2 → 3.8.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 (32) hide show
  1. package/dist/cjs/index.js +126 -26
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/esm/index.js +117 -27
  4. package/dist/esm/index.js.map +1 -1
  5. package/dist/source/components/field/field-root.jsx +1 -0
  6. package/dist/source/components/field/use-field.js +10 -9
  7. package/dist/source/components/index.js +1 -0
  8. package/dist/source/components/progress/progress-value-text.jsx +1 -1
  9. package/dist/source/components/select/use-select.js +13 -5
  10. package/dist/source/components/timer/index.js +9 -0
  11. package/dist/source/components/timer/timer-action-trigger.jsx +8 -0
  12. package/dist/source/components/timer/timer-context.jsx +2 -0
  13. package/dist/source/components/timer/timer-item.jsx +10 -0
  14. package/dist/source/components/timer/timer-root-provider.jsx +11 -0
  15. package/dist/source/components/timer/timer-root.jsx +22 -0
  16. package/dist/source/components/timer/timer-separator.jsx +8 -0
  17. package/dist/source/components/timer/timer.js +6 -0
  18. package/dist/source/components/timer/use-timer-context.js +5 -0
  19. package/dist/source/components/timer/use-timer.js +15 -0
  20. package/dist/types/components/field/use-field.d.ts +33 -17
  21. package/dist/types/components/index.d.ts +1 -0
  22. package/dist/types/components/timer/index.d.ts +9 -0
  23. package/dist/types/components/timer/timer-action-trigger.d.ts +7 -0
  24. package/dist/types/components/timer/timer-context.d.ts +6 -0
  25. package/dist/types/components/timer/timer-item.d.ts +7 -0
  26. package/dist/types/components/timer/timer-root-provider.d.ts +11 -0
  27. package/dist/types/components/timer/timer-root.d.ts +7 -0
  28. package/dist/types/components/timer/timer-separator.d.ts +6 -0
  29. package/dist/types/components/timer/timer.d.ts +6 -0
  30. package/dist/types/components/timer/use-timer-context.d.ts +4 -0
  31. package/dist/types/components/timer/use-timer.d.ts +9 -0
  32. package/package.json +53 -50
package/dist/cjs/index.js CHANGED
@@ -42,6 +42,7 @@ var toast$1 = require('@zag-js/toast');
42
42
  var toggleGroup$1 = require('@zag-js/toggle-group');
43
43
  var tooltip$1 = require('@zag-js/tooltip');
44
44
  var treeView$1 = require('@zag-js/tree-view');
45
+ var timer$1 = require('@zag-js/timer');
45
46
 
46
47
  function _interopNamespaceDefault(e) {
47
48
  var n = Object.create(null);
@@ -95,6 +96,7 @@ var toast__namespace = /*#__PURE__*/_interopNamespaceDefault(toast$1);
95
96
  var toggleGroup__namespace = /*#__PURE__*/_interopNamespaceDefault(toggleGroup$1);
96
97
  var tooltip__namespace = /*#__PURE__*/_interopNamespaceDefault(tooltip$1);
97
98
  var treeView__namespace = /*#__PURE__*/_interopNamespaceDefault(treeView$1);
99
+ var timer__namespace = /*#__PURE__*/_interopNamespaceDefault(timer$1);
98
100
 
99
101
  function getErrorMessage(hook, provider) {
100
102
  return `${hook} returned \`undefined\`. Seems you forgot to wrap component within ${provider}`;
@@ -838,14 +840,14 @@ const useFieldset = props => {
838
840
  const getRootProps = () => ({
839
841
  ...parts$2.root.attrs,
840
842
  disabled,
841
- 'data-disabled': dataAttr$1(disabled),
842
- 'data-invalid': dataAttr$1(invalid),
843
+ 'data-disabled': dataAttr(disabled),
844
+ 'data-invalid': dataAttr(invalid),
843
845
  'aria-describedby': labelIds.join(' ') || undefined
844
846
  });
845
847
  const getLegendProps = () => ({
846
848
  ...parts$2.legend.attrs,
847
- 'data-disabled': dataAttr$1(disabled),
848
- 'data-invalid': dataAttr$1(invalid)
849
+ 'data-disabled': dataAttr(disabled),
850
+ 'data-invalid': dataAttr(invalid)
849
851
  });
850
852
  const getHelperTextProps = () => ({
851
853
  id: helperTextId,
@@ -868,7 +870,7 @@ const useFieldset = props => {
868
870
  getErrorTextProps
869
871
  }));
870
872
  };
871
- const dataAttr$1 = condition => condition ? '' : undefined;
873
+ const dataAttr = condition => condition ? '' : undefined;
872
874
 
873
875
  const FieldsetRoot = props => {
874
876
  const [useFieldsetProps, localProps] = createSplitProps()(props, ['id', 'disabled', 'invalid']);
@@ -918,6 +920,7 @@ const parts$1 = fieldAnatomy.build();
918
920
  const useField = props => {
919
921
  const fieldset = useFieldsetContext();
920
922
  const {
923
+ ids,
921
924
  disabled = Boolean(fieldset?.().disabled),
922
925
  invalid = false,
923
926
  readOnly = false,
@@ -927,25 +930,27 @@ const useField = props => {
927
930
  const [hasHelperText, setHasHelperText] = solidJs.createSignal(false);
928
931
  const id = props.id ?? solidJs.createUniqueId();
929
932
  let rootRef;
930
- const errorTextId = `field::${id}::error-text`;
931
- const helperTextId = `field::${id}::helper-text`;
932
- const labelId = `field::${id}::label`;
933
+ const rootId = ids?.control ?? `field::${id}`;
934
+ const errorTextId = ids?.errorText ?? `field::${id}::error-text`;
935
+ const helperTextId = ids?.helperText ?? `field::${id}::helper-text`;
936
+ const labelId = ids?.label ?? `field::${id}::label`;
933
937
  solidJs.createEffect(() => {
934
938
  return;
935
939
  });
936
940
  const getRootProps = () => ({
937
941
  ...parts$1.root.attrs,
942
+ id: rootId,
938
943
  role: 'group',
939
- 'data-disabled': dataAttr(disabled),
940
- 'data-invalid': dataAttr(invalid),
941
- 'data-readonly': dataAttr(readOnly)
944
+ 'data-disabled': domQuery.dataAttr(disabled),
945
+ 'data-invalid': domQuery.dataAttr(invalid),
946
+ 'data-readonly': domQuery.dataAttr(readOnly)
942
947
  });
943
948
  const getLabelProps = () => ({
944
949
  ...parts$1.label.attrs,
945
950
  id: labelId,
946
- 'data-disabled': dataAttr(disabled),
947
- 'data-invalid': dataAttr(invalid),
948
- 'data-readonly': dataAttr(readOnly),
951
+ 'data-disabled': domQuery.dataAttr(disabled),
952
+ 'data-invalid': domQuery.dataAttr(invalid),
953
+ 'data-readonly': domQuery.dataAttr(readOnly),
949
954
  htmlFor: id
950
955
  });
951
956
  const labelIds = [];
@@ -953,9 +958,10 @@ const useField = props => {
953
958
  if (hasHelperText()) labelIds.push(helperTextId);
954
959
  const getControlProps = () => ({
955
960
  'aria-describedby': labelIds.join(' ') || undefined,
956
- 'aria-invalid': ariaAttr(invalid),
957
- 'aria-required': ariaAttr(required),
958
- 'aria-readonly': ariaAttr(readOnly),
961
+ 'aria-invalid': domQuery.ariaAttr(invalid),
962
+ 'data-invalid': domQuery.dataAttr(invalid),
963
+ 'data-required': domQuery.dataAttr(required),
964
+ 'data-readonly': domQuery.dataAttr(readOnly),
959
965
  id,
960
966
  required,
961
967
  disabled,
@@ -1006,11 +1012,9 @@ const useField = props => {
1006
1012
  getErrorTextProps
1007
1013
  }));
1008
1014
  };
1009
- const dataAttr = condition => condition ? '' : undefined;
1010
- const ariaAttr = condition => condition ? true : undefined;
1011
1015
 
1012
1016
  const FieldRoot = props => {
1013
- const [useFieldProps, localProps] = createSplitProps()(props, ['id', 'disabled', 'invalid', 'readOnly', 'required']);
1017
+ const [useFieldProps, localProps] = createSplitProps()(props, ['id', 'ids', 'disabled', 'invalid', 'readOnly', 'required']);
1014
1018
  const field = useField(useFieldProps);
1015
1019
  const mergedProps = solid.mergeProps(() => field().getRootProps(), localProps);
1016
1020
  return web.createComponent(FieldProvider, {
@@ -3918,7 +3922,7 @@ const ProgressValueText = props => {
3918
3922
  const mergedProps = solid.mergeProps(() => api().getValueTextProps(), props);
3919
3923
  return web.createComponent(ark.span, web.mergeProps(mergedProps, {
3920
3924
  get children() {
3921
- return props.children || api().valueAsString;
3925
+ return props.children || api().percentAsString;
3922
3926
  }
3923
3927
  }));
3924
3928
  };
@@ -4564,14 +4568,14 @@ const SelectPositioner = props => {
4564
4568
 
4565
4569
  const useSelect = props => {
4566
4570
  const [collectionOptions, selectProps] = createSplitProps()(props, ['isItemDisabled', 'itemToValue', 'itemToString', 'items']);
4567
- const collection = () => select__namespace.collection({
4571
+ const collection = solidJs.createMemo(() => select__namespace.collection({
4568
4572
  ...collectionOptions
4569
- });
4573
+ }));
4570
4574
  const locale = useLocaleContext();
4571
4575
  const environment = useEnvironmentContext();
4572
4576
  const id = solidJs.createUniqueId();
4573
4577
  const field = useFieldContext();
4574
- const context = solidJs.createMemo(() => ({
4578
+ const initialContext = solidJs.createMemo(() => ({
4575
4579
  id,
4576
4580
  ids: {
4577
4581
  label: field?.().ids.label,
@@ -4589,10 +4593,18 @@ const useSelect = props => {
4589
4593
  'open.controlled': props.open !== undefined,
4590
4594
  ...selectProps
4591
4595
  }));
4592
- const [state, send] = solid.useMachine(select__namespace.machine(context()), {
4596
+ const context = solidJs.createMemo(() => {
4597
+ const [, restProps] = solidJs.splitProps(initialContext(), ['collection']);
4598
+ return restProps;
4599
+ });
4600
+ const [state, send] = solid.useMachine(select__namespace.machine(initialContext()), {
4593
4601
  context
4594
4602
  });
4595
- return solidJs.createMemo(() => select__namespace.connect(state, send, solid.normalizeProps));
4603
+ const api = solidJs.createMemo(() => select__namespace.connect(state, send, solid.normalizeProps));
4604
+ solidJs.createEffect(() => {
4605
+ api().setCollection(collection());
4606
+ });
4607
+ return api;
4596
4608
  };
4597
4609
 
4598
4610
  const SelectRoot = props => {
@@ -6080,6 +6092,85 @@ var treeView = /*#__PURE__*/Object.freeze({
6080
6092
  Tree: TreeViewTree
6081
6093
  });
6082
6094
 
6095
+ const [TimerProvider, useTimerContext] = createContext({
6096
+ hookName: 'useTimerContext',
6097
+ providerName: '<TimerProvider />'
6098
+ });
6099
+
6100
+ const TimerContext = props => props.children(useTimerContext());
6101
+
6102
+ const TimerActionTrigger = props => {
6103
+ const timer = useTimerContext();
6104
+ const mergedProps = solid.mergeProps(() => timer().getActionTriggerProps(props), props);
6105
+ return web.createComponent(ark.button, mergedProps);
6106
+ };
6107
+
6108
+ const TimerItem = props => {
6109
+ const [itemProps, localProps] = createSplitProps()(props, ['type']);
6110
+ const timer = useTimerContext();
6111
+ const mergedProps = solid.mergeProps(() => timer().getItemProps(itemProps), localProps);
6112
+ return web.createComponent(ark.div, web.mergeProps(mergedProps, {
6113
+ get children() {
6114
+ return timer().formattedTime[itemProps.type];
6115
+ }
6116
+ }));
6117
+ };
6118
+
6119
+ const TimerSeparator = props => {
6120
+ const timer = useTimerContext();
6121
+ const mergedProps = solid.mergeProps(() => timer().getSeparatorProps(), props);
6122
+ return web.createComponent(ark.div, mergedProps);
6123
+ };
6124
+
6125
+ const useTimer = props => {
6126
+ const env = useEnvironmentContext();
6127
+ const id = solidJs.createUniqueId();
6128
+ const context = solidJs.createMemo(() => ({
6129
+ id,
6130
+ getRootNode: env().getRootNode,
6131
+ ...props
6132
+ }));
6133
+ const [state, send] = solid.useMachine(timer__namespace.machine(context()), {
6134
+ context
6135
+ });
6136
+ return solidJs.createMemo(() => timer__namespace.connect(state, send, solid.normalizeProps));
6137
+ };
6138
+
6139
+ const TimerRoot = props => {
6140
+ const [useTimerProps, localProps] = createSplitProps()(props, ['id', 'autoStart', 'interval', 'countdown', 'startMs', 'targetMs', 'onComplete', 'onTick']);
6141
+ const timer = useTimer(useTimerProps);
6142
+ const mergedProps = solid.mergeProps(() => timer().getRootProps(), localProps);
6143
+ return web.createComponent(TimerProvider, {
6144
+ value: timer,
6145
+ get children() {
6146
+ return web.createComponent(ark.div, mergedProps);
6147
+ }
6148
+ });
6149
+ };
6150
+
6151
+ const TimerRootProvider = props => {
6152
+ const [{
6153
+ value: timer
6154
+ }, localProps] = createSplitProps()(props, ['value']);
6155
+ const mergedProps = solid.mergeProps(() => timer().getRootProps(), localProps);
6156
+ return web.createComponent(TimerProvider, {
6157
+ value: timer,
6158
+ get children() {
6159
+ return web.createComponent(ark.div, mergedProps);
6160
+ }
6161
+ });
6162
+ };
6163
+
6164
+ var timer = /*#__PURE__*/Object.freeze({
6165
+ __proto__: null,
6166
+ ActionTrigger: TimerActionTrigger,
6167
+ Context: TimerContext,
6168
+ Item: TimerItem,
6169
+ Root: TimerRoot,
6170
+ RootProvider: TimerRootProvider,
6171
+ Separator: TimerSeparator
6172
+ });
6173
+
6083
6174
  Object.defineProperty(exports, "collapsibleAnatomy", {
6084
6175
  enumerable: true,
6085
6176
  get: function () { return collapsible$1.anatomy; }
@@ -6601,6 +6692,13 @@ exports.TimePickerRoot = TimePickerRoot;
6601
6692
  exports.TimePickerRootProvider = TimePickerRootProvider;
6602
6693
  exports.TimePickerSpacer = TimePickerSpacer;
6603
6694
  exports.TimePickerTrigger = TimePickerTrigger;
6695
+ exports.Timer = timer;
6696
+ exports.TimerActionTrigger = TimerActionTrigger;
6697
+ exports.TimerContext = TimerContext;
6698
+ exports.TimerItem = TimerItem;
6699
+ exports.TimerRoot = TimerRoot;
6700
+ exports.TimerRootProvider = TimerRootProvider;
6701
+ exports.TimerSeparator = TimerSeparator;
6604
6702
  exports.Toast = toast;
6605
6703
  exports.ToastActionTrigger = ToastActionTrigger;
6606
6704
  exports.ToastCloseTrigger = ToastCloseTrigger;
@@ -6728,6 +6826,8 @@ exports.useTagsInputContext = useTagsInputContext;
6728
6826
  exports.useTagsInputItemContext = useTagsInputItemContext;
6729
6827
  exports.useTimePicker = useTimePicker;
6730
6828
  exports.useTimePickerContext = useTimePickerContext;
6829
+ exports.useTimer = useTimer;
6830
+ exports.useTimerContext = useTimerContext;
6731
6831
  exports.useToastContext = useToastContext;
6732
6832
  exports.useToggleGroup = useToggleGroup;
6733
6833
  exports.useToggleGroupContext = useToggleGroupContext;