@ark-ui/solid 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/cjs/index.js +254 -49
  3. package/cjs/index.js.map +1 -1
  4. package/esm/index.js +240 -50
  5. package/esm/index.js.map +1 -1
  6. package/package.json +53 -52
  7. package/source/accordion/accordion-item.jsx +4 -3
  8. package/source/accordion/accordion-root.jsx +4 -4
  9. package/source/clipboard/clipboard-context.js +5 -0
  10. package/source/clipboard/clipboard-control.jsx +8 -0
  11. package/source/clipboard/clipboard-indicator.jsx +16 -0
  12. package/source/clipboard/clipboard-input.jsx +8 -0
  13. package/source/clipboard/clipboard-label.jsx +8 -0
  14. package/source/clipboard/clipboard-root.jsx +22 -0
  15. package/source/clipboard/clipboard-trigger.jsx +8 -0
  16. package/source/clipboard/clipboard.jsx +7 -0
  17. package/source/clipboard/index.js +9 -0
  18. package/source/clipboard/use-clipboard.jsx +10 -0
  19. package/source/collapsible/collapsible-content.jsx +11 -0
  20. package/source/collapsible/collapsible-context.js +5 -0
  21. package/source/collapsible/collapsible-root.jsx +24 -0
  22. package/source/collapsible/collapsible-trigger.jsx +8 -0
  23. package/source/collapsible/collapsible.jsx +4 -0
  24. package/source/collapsible/index.js +6 -0
  25. package/source/collapsible/use-collapsible.js +23 -0
  26. package/source/color-picker/use-color-picker.js +0 -1
  27. package/source/date-picker/use-date-picker.js +0 -1
  28. package/source/dialog/dialog-backdrop.jsx +4 -3
  29. package/source/dialog/dialog-root.jsx +5 -3
  30. package/source/dialog/use-dialog.js +1 -1
  31. package/source/hover-card/use-hover-card.js +1 -1
  32. package/source/index.jsx +3 -0
  33. package/source/locale/index.js +2 -0
  34. package/source/locale/locale-context.jsx +7 -0
  35. package/source/locale/locale.jsx +24 -0
  36. package/source/menu/use-menu.js +1 -1
  37. package/source/popover/use-popover.js +1 -1
  38. package/source/presence/index.js +1 -2
  39. package/source/presence/split-presence-props.js +6 -8
  40. package/source/presence/use-presence.js +8 -7
  41. package/source/render-strategy.js +7 -0
  42. package/source/select/use-select.js +0 -1
  43. package/source/splitter/splitter-root.jsx +0 -1
  44. package/source/tabs/tab-content.jsx +4 -3
  45. package/source/tabs/tabs-root.jsx +4 -4
  46. package/source/tooltip/use-tooltip.js +1 -1
  47. package/source/tree-view/tree-view-branch-indicator.jsx +1 -4
  48. package/types/clipboard/clipboard-context.d.ts +4 -0
  49. package/types/clipboard/clipboard-control.d.ts +4 -0
  50. package/types/clipboard/clipboard-indicator.d.ts +10 -0
  51. package/types/clipboard/clipboard-input.d.ts +4 -0
  52. package/types/clipboard/clipboard-label.d.ts +4 -0
  53. package/types/clipboard/clipboard-root.d.ts +11 -0
  54. package/types/clipboard/clipboard-trigger.d.ts +4 -0
  55. package/types/clipboard/clipboard.d.ts +7 -0
  56. package/types/clipboard/index.d.ts +11 -0
  57. package/types/clipboard/use-clipboard.d.ts +9 -0
  58. package/types/collapsible/collapsible-content.d.ts +4 -0
  59. package/types/collapsible/collapsible-context.d.ts +4 -0
  60. package/types/collapsible/collapsible-root.d.ts +6 -0
  61. package/types/collapsible/collapsible-trigger.d.ts +4 -0
  62. package/types/collapsible/collapsible.d.ts +4 -0
  63. package/types/collapsible/index.d.ts +8 -0
  64. package/types/collapsible/use-collapsible.d.ts +15 -0
  65. package/types/index.d.ts +3 -0
  66. package/types/locale/index.d.ts +2 -0
  67. package/types/locale/locale-context.d.ts +5 -0
  68. package/types/locale/locale.d.ts +9 -0
  69. package/types/menu/menu-item-group.d.ts +3 -5
  70. package/types/presence/index.d.ts +2 -3
  71. package/types/presence/split-presence-props.d.ts +1 -1
  72. package/types/presence/use-presence.d.ts +2 -11
  73. package/types/render-strategy.d.ts +14 -0
  74. package/types/tabs/tabs-root.d.ts +2 -2
  75. package/source/presence/presence-props-context.js +0 -5
  76. package/types/presence/presence-props-context.d.ts +0 -4
package/CHANGELOG.md CHANGED
@@ -6,6 +6,56 @@ description: All notable changes to this project will be documented in this file
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.2.0] - 2024-02-27
10
+
11
+ ### Added
12
+
13
+ - Added `Collapsible` component.
14
+
15
+ ### Changed
16
+
17
+ - Enhanced the performance of the Ark `factory` by utilizing `memo` to avoid unnecessary re-renders.
18
+ - Integrated `Collapsible` into `Accordion`, allowing the `Accordion` component to utilize `Collapsible` for animating the opening and closing of content.d
19
+
20
+ ```css
21
+ @keyframes slideDown {
22
+ from {
23
+ height: 0;
24
+ }
25
+ to {
26
+ height: var(--height);
27
+ }
28
+ }
29
+
30
+ @keyframes slideUp {
31
+ from {
32
+ height: var(--height);
33
+ }
34
+ to {
35
+ height: 0;
36
+ }
37
+ }
38
+
39
+ [data-scope='accordion'][data-part='item-content'][data-state='open'] {
40
+ animation: slideDown 250ms;
41
+ }
42
+
43
+ [data-scope='accordion'][data-part='item-content'][data-state='closed'] {
44
+ animation: slideUp 200ms;
45
+ }
46
+ ```
47
+
48
+ ### Fixed
49
+
50
+ - Fixed a bug where the disabled `Tooltip` would flash upon hovering and clicking the trigger.
51
+ - Fixed an issue where a disclosure components could not be initially set to an open state without being controlled.
52
+
53
+ ## [2.1.1] - 2024-02-16
54
+
55
+ ### Fixed
56
+
57
+ - Resolved an issue where the `Clipboard` component was not exported correctly.
58
+
9
59
  ## [2.1.0] - 2024-02-14
10
60
 
11
61
  ### Added
package/cjs/index.js CHANGED
@@ -9,6 +9,8 @@ var avatar$1 = require('@zag-js/avatar');
9
9
  var anatomy = require('@ark-ui/anatomy');
10
10
  var carousel$1 = require('@zag-js/carousel');
11
11
  var checkbox$1 = require('@zag-js/checkbox');
12
+ var clipboard$1 = require('@zag-js/clipboard');
13
+ var collapsible$1 = require('@zag-js/collapsible');
12
14
  var colorPicker$1 = require('@zag-js/color-picker');
13
15
  var combobox$1 = require('@zag-js/combobox');
14
16
  var datePicker$1 = require('@zag-js/date-picker');
@@ -16,6 +18,7 @@ var dialog$1 = require('@zag-js/dialog');
16
18
  var editable$1 = require('@zag-js/editable');
17
19
  var fileUpload$1 = require('@zag-js/file-upload');
18
20
  var hoverCard$1 = require('@zag-js/hover-card');
21
+ var i18nUtils = require('@zag-js/i18n-utils');
19
22
  var menu$1 = require('@zag-js/menu');
20
23
  var numberInput$1 = require('@zag-js/number-input');
21
24
  var pagination$1 = require('@zag-js/pagination');
@@ -57,6 +60,8 @@ var accordion__namespace = /*#__PURE__*/_interopNamespaceDefault(accordion$1);
57
60
  var avatar__namespace = /*#__PURE__*/_interopNamespaceDefault(avatar$1);
58
61
  var carousel__namespace = /*#__PURE__*/_interopNamespaceDefault(carousel$1);
59
62
  var checkbox__namespace = /*#__PURE__*/_interopNamespaceDefault(checkbox$1);
63
+ var clipboard__namespace = /*#__PURE__*/_interopNamespaceDefault(clipboard$1);
64
+ var collapsible__namespace = /*#__PURE__*/_interopNamespaceDefault(collapsible$1);
60
65
  var colorPicker__namespace = /*#__PURE__*/_interopNamespaceDefault(colorPicker$1);
61
66
  var combobox__namespace = /*#__PURE__*/_interopNamespaceDefault(combobox$1);
62
67
  var datePicker__namespace = /*#__PURE__*/_interopNamespaceDefault(datePicker$1);
@@ -142,15 +147,19 @@ function jsxFactory() {
142
147
  }
143
148
  const ark = jsxFactory();
144
149
 
145
- function splitPresenceProps(props) {
146
- return createSplitProps()(props, ['lazyMount', 'onExitComplete', 'present', 'unmountOnExit']);
147
- }
150
+ const splitPresenceProps = props => createSplitProps()(props, ['lazyMount', 'onExitComplete', 'present', 'unmountOnExit']);
151
+
152
+ const [RenderStrategyProvider, useRenderStrategyContext] = createContext({
153
+ hookName: 'useRenderStrategyContext',
154
+ providerName: '<RenderStrategyProvider />'
155
+ });
156
+ const splitRenderStrategyProps = props => createSplitProps()(props, ['lazyMount', 'unmountOnExit']);
148
157
 
149
158
  const usePresence = props => {
150
- const [localProps, machineProps] = solidJs.splitProps(props, ['lazyMount', 'unmountOnExit']);
159
+ const [renderStrategyProps, context] = splitRenderStrategyProps(props);
151
160
  const [wasEverPresent, setWasEverPresent] = solidJs.createSignal(false);
152
- const [state, send] = solid.useMachine(presence__namespace.machine(machineProps), {
153
- context: machineProps
161
+ const [state, send] = solid.useMachine(presence__namespace.machine(context), {
162
+ context
154
163
  });
155
164
  const api = solidJs.createMemo(() => presence__namespace.connect(state, send, solid.normalizeProps));
156
165
  solidJs.createEffect(() => {
@@ -158,12 +167,12 @@ const usePresence = props => {
158
167
  if (isPresent) setWasEverPresent(true);
159
168
  });
160
169
  return solidJs.createMemo(() => ({
161
- isUnmounted: !api().isPresent && !wasEverPresent() && localProps.lazyMount || localProps.unmountOnExit && !api().isPresent && wasEverPresent(),
170
+ isUnmounted: !api().isPresent && !wasEverPresent() && renderStrategyProps.lazyMount || renderStrategyProps.unmountOnExit && !api().isPresent && wasEverPresent(),
162
171
  isPresent: api().isPresent,
163
172
  presenceProps: {
164
173
  ref: api().setNode,
165
174
  hidden: !api().isPresent,
166
- 'data-state': machineProps.present ? 'open' : 'closed'
175
+ 'data-state': context.present ? 'open' : 'closed'
167
176
  }
168
177
  }));
169
178
  };
@@ -190,11 +199,6 @@ const [PresenceProvider, usePresenceContext] = createContext({
190
199
  providerName: '<PresenceProvider />'
191
200
  });
192
201
 
193
- const [PresencePropsProvider, usePresencePropsContext] = createContext({
194
- hookName: 'usePresencePropsContext',
195
- providerName: '<PresencePropsProvider />'
196
- });
197
-
198
202
  const isFunction = value => typeof value === 'function';
199
203
  const runIfFn = (valueOrFn, ...args) => isFunction(valueOrFn) ? valueOrFn(...args) : valueOrFn;
200
204
 
@@ -206,8 +210,8 @@ const [AccordionItemProvider, useAccordionItemContext] = createContext({
206
210
  const AccordionItem = props => {
207
211
  const [itemProps, localProps] = createSplitProps()(props, ['value', 'disabled']);
208
212
  const api = useAccordionContext();
209
- const presenceProps = usePresencePropsContext();
210
- const presenceApi = usePresence(solid.mergeProps(presenceProps, () => ({
213
+ const renderStrategyProps = useRenderStrategyContext();
214
+ const presenceApi = usePresence(solid.mergeProps(renderStrategyProps, () => ({
211
215
  present: api().getItemState(itemProps).isOpen
212
216
  })));
213
217
  const mergedProps = solid.mergeProps(() => api().getItemProps(itemProps), localProps);
@@ -300,15 +304,15 @@ const useAccordion = props => {
300
304
  };
301
305
 
302
306
  const AccordionRoot = props => {
303
- const [presenceProps, accordionProps] = splitPresenceProps(props);
307
+ const [renderStrategyProps, accordionProps] = splitRenderStrategyProps(props);
304
308
  const [useAccordionProps, localProps] = createSplitProps()(accordionProps, ['collapsible', 'dir', 'disabled', 'getRootNode', 'id', 'ids', 'multiple', 'onFocusChange', 'onValueChange', 'orientation', 'value']);
305
309
  const api = useAccordion(useAccordionProps);
306
310
  const mergedProps = solid.mergeProps(() => api().rootProps, localProps);
307
311
  return web.createComponent(AccordionProvider, {
308
312
  value: api,
309
313
  get children() {
310
- return web.createComponent(PresencePropsProvider, {
311
- value: presenceProps,
314
+ return web.createComponent(RenderStrategyProvider, {
315
+ value: renderStrategyProps,
312
316
  get children() {
313
317
  return web.createComponent(ark.div, mergedProps);
314
318
  }
@@ -535,6 +539,167 @@ var checkbox = /*#__PURE__*/Object.freeze({
535
539
  Root: CheckboxRoot
536
540
  });
537
541
 
542
+ const [ClipboardProvider, useClipboardContext] = createContext({
543
+ hookName: 'useClipboardContext',
544
+ providerName: '<ClipboardProvider />'
545
+ });
546
+
547
+ const ClipboardControl = props => {
548
+ const api = useClipboardContext();
549
+ const mergedProps = solid.mergeProps(() => api().controlProps, props);
550
+ return web.createComponent(ark.div, mergedProps);
551
+ };
552
+
553
+ const ClipboardIndicator = props => {
554
+ const [indicatorProps, localProps] = createSplitProps()(props, ['copied']);
555
+ const api = useClipboardContext();
556
+ const mergedProps = solid.mergeProps(api().getIndicatorProps({
557
+ copied: api().isCopied
558
+ }), localProps);
559
+ const getChildren = solidJs.children(() => localProps.children);
560
+ return web.createComponent(ark.div, web.mergeProps(mergedProps, {
561
+ get children() {
562
+ return web.createComponent(solidJs.Show, {
563
+ get when() {
564
+ return api().isCopied;
565
+ },
566
+ get fallback() {
567
+ return getChildren();
568
+ },
569
+ get children() {
570
+ return indicatorProps.copied;
571
+ }
572
+ });
573
+ }
574
+ }));
575
+ };
576
+
577
+ const ClipboardInput = props => {
578
+ const api = useClipboardContext();
579
+ const mergedProps = solid.mergeProps(() => api().inputProps, props);
580
+ return web.createComponent(ark.input, mergedProps);
581
+ };
582
+
583
+ const ClipboardLabel = props => {
584
+ const api = useClipboardContext();
585
+ const mergedProps = solid.mergeProps(() => api().labelProps, props);
586
+ return web.createComponent(ark.label, mergedProps);
587
+ };
588
+
589
+ const useClipboard = props => {
590
+ const getRootNode = useEnvironmentContext();
591
+ const context = solid.mergeProps({
592
+ id: solidJs.createUniqueId(),
593
+ getRootNode
594
+ }, props);
595
+ const [state, send] = solid.useMachine(clipboard__namespace.machine(context), {
596
+ context
597
+ });
598
+ return solidJs.createMemo(() => clipboard__namespace.connect(state, send, solid.normalizeProps));
599
+ };
600
+
601
+ const ClipboardRoot = props => {
602
+ const [useClipboardProps, localProps] = createSplitProps()(props, ['getRootNode', 'id', 'ids', 'value', 'timeout', 'onCopyStatusChange']);
603
+ const api = useClipboard(useClipboardProps);
604
+ const mergedProps = solid.mergeProps(() => api().rootProps, localProps);
605
+ const getChildren = () => runIfFn(localProps.children, api);
606
+ return web.createComponent(ClipboardProvider, {
607
+ value: api,
608
+ get children() {
609
+ return web.createComponent(ark.div, web.mergeProps(mergedProps, {
610
+ get children() {
611
+ return getChildren();
612
+ }
613
+ }));
614
+ }
615
+ });
616
+ };
617
+
618
+ const ClipboardTrigger = props => {
619
+ const api = useClipboardContext();
620
+ const mergedProps = solid.mergeProps(() => api().triggerProps, props);
621
+ return web.createComponent(ark.button, mergedProps);
622
+ };
623
+
624
+ var clipboard = /*#__PURE__*/Object.freeze({
625
+ __proto__: null,
626
+ Control: ClipboardControl,
627
+ Indicator: ClipboardIndicator,
628
+ Input: ClipboardInput,
629
+ Label: ClipboardLabel,
630
+ Root: ClipboardRoot,
631
+ Trigger: ClipboardTrigger
632
+ });
633
+
634
+ const [CollapsibleProvider, useCollapsibleContext] = createContext({
635
+ hookName: 'useCollapsibleContext',
636
+ providerName: '<CollapsibleProvider />'
637
+ });
638
+
639
+ const CollapsibleContent = props => {
640
+ const api = useCollapsibleContext();
641
+ const mergedProps = solid.mergeProps(() => api().contentProps, props);
642
+ return web.createComponent(solidJs.Show, {
643
+ get when() {
644
+ return !api().isUnmounted;
645
+ },
646
+ get children() {
647
+ return web.createComponent(ark.div, mergedProps);
648
+ }
649
+ });
650
+ };
651
+
652
+ const useCollapsible = props => {
653
+ const getRootNode = useEnvironmentContext();
654
+ const [renderStrategyProps, collapsibleProps] = splitRenderStrategyProps(props);
655
+ const context = solid.mergeProps({
656
+ id: solidJs.createUniqueId(),
657
+ getRootNode
658
+ }, collapsibleProps);
659
+ const [state, send] = solid.useMachine(collapsible__namespace.machine(context), {
660
+ context
661
+ });
662
+ const [wasVisible, setWasVisible] = solidJs.createSignal(false);
663
+ solidJs.createEffect(() => {
664
+ const isPresent = api().isVisible;
665
+ if (isPresent) setWasVisible(true);
666
+ });
667
+ const api = solidJs.createMemo(() => collapsible__namespace.connect(state, send, solid.normalizeProps));
668
+ return solidJs.createMemo(() => ({
669
+ ...api(),
670
+ isUnmounted: !api().isVisible && !wasVisible() && renderStrategyProps.lazyMount || renderStrategyProps.unmountOnExit && !api().isVisible && wasVisible()
671
+ }));
672
+ };
673
+
674
+ const CollapsibleRoot = props => {
675
+ const [params, localProps] = createSplitProps()(props, ['dir', 'disabled', 'getRootNode', 'id', 'ids', 'lazyMount', 'onExitComplete', 'onOpenChange', 'open', 'unmountOnExit']);
676
+ const api = useCollapsible(params);
677
+ const mergedProps = solid.mergeProps(() => api().rootProps, localProps);
678
+ return web.createComponent(CollapsibleProvider, {
679
+ value: api,
680
+ get children() {
681
+ return web.createComponent(ark.div, mergedProps);
682
+ }
683
+ });
684
+ };
685
+
686
+ const CollapsibleTrigger = props => {
687
+ const api = useCollapsibleContext();
688
+ const mergedProps = () => solid.mergeProps(api().triggerProps, props);
689
+ return web.createComponent(ark.button, web.mergeProps(mergedProps, {
690
+ get children() {
691
+ return props.children;
692
+ }
693
+ }));
694
+ };
695
+
696
+ var collapsible = /*#__PURE__*/Object.freeze({
697
+ __proto__: null,
698
+ Content: CollapsibleContent,
699
+ Root: CollapsibleRoot,
700
+ Trigger: CollapsibleTrigger
701
+ });
702
+
538
703
  const [ColorPickerAreaProvider, useColorPickerAreaContext] = createContext({
539
704
  hookName: 'useColorPickerAreaContext',
540
705
  providerName: '<ColorPickerAreaProvider />'
@@ -687,8 +852,7 @@ const useColorPicker = props => {
687
852
  const context = solid.mergeProps(() => ({
688
853
  id: solidJs.createUniqueId(),
689
854
  getRootNode,
690
- value: local.value ? colorPicker__namespace.parse(local.value) : undefined,
691
- 'open.controlled': props.open !== undefined
855
+ value: local.value ? colorPicker__namespace.parse(local.value) : undefined
692
856
  }), rest);
693
857
  const [state, send] = solid.useMachine(colorPicker__namespace.machine(context), {
694
858
  context
@@ -1124,8 +1288,7 @@ const useDatePicker = props => {
1124
1288
  id: solidJs.createUniqueId(),
1125
1289
  getRootNode,
1126
1290
  focusedValue: local.focusedValue ? datePicker__namespace.parse(local.focusedValue) : undefined,
1127
- value: local.value ? datePicker__namespace.parse(local.value) : undefined,
1128
- 'open.controlled': props.open !== undefined
1291
+ value: local.value ? datePicker__namespace.parse(local.value) : undefined
1129
1292
  }), rest);
1130
1293
  const [state, send] = solid.useMachine(datePicker__namespace.machine(context), {
1131
1294
  context
@@ -1351,8 +1514,8 @@ const [DialogProvider, useDialogContext] = createContext({
1351
1514
 
1352
1515
  const DialogBackdrop = props => {
1353
1516
  const api = useDialogContext();
1354
- const presenceProps = usePresencePropsContext();
1355
- const presenceApi = usePresence(solid.mergeProps(presenceProps, () => ({
1517
+ const renderStrategyProps = useRenderStrategyContext();
1518
+ const presenceApi = usePresence(solid.mergeProps(renderStrategyProps, () => ({
1356
1519
  present: api().isOpen
1357
1520
  })));
1358
1521
  const mergedProps = solid.mergeProps(() => api().backdropProps, () => presenceApi().presenceProps, props);
@@ -1410,8 +1573,7 @@ const useDialog = props => {
1410
1573
  const getRootNode = useEnvironmentContext();
1411
1574
  const context = solid.mergeProps({
1412
1575
  id: solidJs.createUniqueId(),
1413
- getRootNode,
1414
- 'open.controlled': props.open !== undefined
1576
+ getRootNode
1415
1577
  }, props);
1416
1578
  const [state, send] = solid.useMachine(dialog__namespace.machine(context), {
1417
1579
  context
@@ -1421,6 +1583,7 @@ const useDialog = props => {
1421
1583
 
1422
1584
  const DialogRoot = props => {
1423
1585
  const [presenceProps, dialogProps] = splitPresenceProps(props);
1586
+ const [renderStrategyProps] = splitRenderStrategyProps(presenceProps);
1424
1587
  const [useDialogProps, localProps] = createSplitProps()(dialogProps, ['aria-label', 'closeOnEscapeKeyDown', 'closeOnInteractOutside', 'dir', 'finalFocusEl', 'getRootNode', 'id', 'ids', 'initialFocusEl', 'modal', 'onEscapeKeyDown', 'onFocusOutside', 'onInteractOutside', 'onOpenChange', 'onPointerDownOutside', 'open', 'preventScroll', 'restoreFocus', 'role', 'trapFocus']);
1425
1588
  const api = useDialog(useDialogProps);
1426
1589
  const apiPresence = usePresence(solid.mergeProps(presenceProps, () => ({
@@ -1430,8 +1593,8 @@ const DialogRoot = props => {
1430
1593
  return web.createComponent(DialogProvider, {
1431
1594
  value: api,
1432
1595
  get children() {
1433
- return web.createComponent(PresencePropsProvider, {
1434
- value: presenceProps,
1596
+ return web.createComponent(RenderStrategyProvider, {
1597
+ value: renderStrategyProps,
1435
1598
  get children() {
1436
1599
  return web.createComponent(PresenceProvider, {
1437
1600
  value: apiPresence,
@@ -1772,8 +1935,7 @@ const useHoverCard = props => {
1772
1935
  const getRootNode = useEnvironmentContext();
1773
1936
  const context = solid.mergeProps({
1774
1937
  id: solidJs.createUniqueId(),
1775
- getRootNode,
1776
- 'open.controlled': props.open !== undefined
1938
+ getRootNode
1777
1939
  }, props);
1778
1940
  const [state, send] = solid.useMachine(hoverCard__namespace.machine(context), {
1779
1941
  context
@@ -1818,6 +1980,42 @@ var hoverCard = /*#__PURE__*/Object.freeze({
1818
1980
  Trigger: HoverCardTrigger
1819
1981
  });
1820
1982
 
1983
+ const [LocaleContextProvider, useLocaleContext] = createContext({
1984
+ hookName: 'useEnvironmentContext',
1985
+ providerName: '<EnvironmentProvider />',
1986
+ strict: false,
1987
+ defaultValue: () => ({
1988
+ dir: 'ltr',
1989
+ locale: 'en-US'
1990
+ })
1991
+ });
1992
+
1993
+ const LocaleProvider = props => {
1994
+ const [localeProps, restProps] = solidJs.splitProps(props, ['locale', 'defaultLocale']);
1995
+ const [locale, setLocale] = solidJs.createSignal(localeProps.defaultLocale || localeProps.locale || 'en-US');
1996
+ const getRootNode = useEnvironmentContext();
1997
+ solidJs.createEffect(() => {
1998
+ const cleanup = i18nUtils.trackLocale({
1999
+ locale: localeProps.locale,
2000
+ getRootNode,
2001
+ onLocaleChange(locale) {
2002
+ setLocale(locale.locale);
2003
+ }
2004
+ });
2005
+ solidJs.onCleanup(cleanup);
2006
+ });
2007
+ const context = solidJs.createMemo(() => ({
2008
+ locale: locale(),
2009
+ dir: i18nUtils.isRTL(locale()) ? 'rtl' : 'ltr'
2010
+ }));
2011
+ return web.createComponent(LocaleContextProvider, {
2012
+ value: context,
2013
+ get children() {
2014
+ return restProps.children;
2015
+ }
2016
+ });
2017
+ };
2018
+
1821
2019
  const [MenuProvider, useMenuContext] = createContext({
1822
2020
  hookName: 'useMenuContext',
1823
2021
  providerName: '<MenuProvider />',
@@ -1920,8 +2118,7 @@ const useMenu = props => {
1920
2118
  const getRootNode = useEnvironmentContext();
1921
2119
  const context = solid.mergeProps({
1922
2120
  id: solidJs.createUniqueId(),
1923
- getRootNode,
1924
- 'open.controlled': props.open !== undefined
2121
+ getRootNode
1925
2122
  }, props);
1926
2123
  const [state, send, machine] = solid.useMachine(menu__namespace.machine(context), {
1927
2124
  context
@@ -2296,8 +2493,7 @@ const usePopover = props => {
2296
2493
  const getRootNode = useEnvironmentContext();
2297
2494
  const context = solid.mergeProps({
2298
2495
  id: solidJs.createUniqueId(),
2299
- getRootNode,
2300
- 'open.controlled': props.open !== undefined
2496
+ getRootNode
2301
2497
  }, props);
2302
2498
  const [state, send] = solid.useMachine(popover__namespace.machine(context), {
2303
2499
  context
@@ -2869,8 +3065,7 @@ const useSelect = props => {
2869
3065
  const context = () => solid.mergeProps({
2870
3066
  id: solidJs.createUniqueId(),
2871
3067
  getRootNode,
2872
- collection: collection(),
2873
- 'open.controlled': props.open !== undefined
3068
+ collection: collection()
2874
3069
  }, rest);
2875
3070
  const [state, send] = solid.useMachine(select__namespace.machine(context()), {
2876
3071
  context
@@ -3072,7 +3267,7 @@ const useSplitter = props => {
3072
3267
  };
3073
3268
 
3074
3269
  const SplitterRoot = props => {
3075
- const [splitterParams, localProps] = createSplitProps()(props, ['dir', 'getRootNode', 'id', 'ids', 'onSizeChange', 'onSizeChangeEnd', 'onSizeChangeStart', 'orientation', 'size']);
3270
+ const [splitterParams, localProps] = createSplitProps()(props, ['dir', 'getRootNode', 'id', 'ids', 'onSizeChange', 'onSizeChangeEnd', 'orientation', 'size']);
3076
3271
  const api = useSplitter(splitterParams);
3077
3272
  const getChildren = () => runIfFn(localProps.children, api);
3078
3273
  const mergedProps = solid.mergeProps(() => api().rootProps, localProps);
@@ -3168,8 +3363,8 @@ const [TabsProvider, useTabsContext] = createContext({
3168
3363
  const TabContent = props => {
3169
3364
  const [contentProps, localProps] = createSplitProps()(props, ['value']);
3170
3365
  const api = useTabsContext();
3171
- const presenceProps = usePresencePropsContext();
3172
- const presenceApi = usePresence(solid.mergeProps(presenceProps, () => ({
3366
+ const renderStrategyProps = useRenderStrategyContext();
3367
+ const presenceApi = usePresence(solid.mergeProps(renderStrategyProps, () => ({
3173
3368
  present: api().value === contentProps.value
3174
3369
  })));
3175
3370
  const mergedProps = solid.mergeProps(() => api().getContentProps(contentProps), () => presenceApi().presenceProps, localProps);
@@ -3220,15 +3415,15 @@ const useTabs = props => {
3220
3415
  };
3221
3416
 
3222
3417
  const TabsRoot = props => {
3223
- const [presenceProps, tabsProps] = splitPresenceProps(props);
3418
+ const [renderStrategyProps, tabsProps] = splitRenderStrategyProps(props);
3224
3419
  const [tabsParams, restProps] = createSplitProps()(tabsProps, ['activationMode', 'dir', 'getRootNode', 'id', 'ids', 'loop', 'onFocusChange', 'onValueChange', 'orientation', 'translations', 'value']);
3225
3420
  const api = useTabs(tabsParams);
3226
3421
  const mergedProps = solid.mergeProps(() => api().rootProps, restProps);
3227
3422
  return web.createComponent(TabsProvider, {
3228
3423
  value: api,
3229
3424
  get children() {
3230
- return web.createComponent(PresencePropsProvider, {
3231
- value: presenceProps,
3425
+ return web.createComponent(RenderStrategyProvider, {
3426
+ value: renderStrategyProps,
3232
3427
  get children() {
3233
3428
  return web.createComponent(ark.div, mergedProps);
3234
3429
  }
@@ -3552,8 +3747,7 @@ const useTooltip = props => {
3552
3747
  const getRootNode = useEnvironmentContext();
3553
3748
  const context = solid.mergeProps({
3554
3749
  id: solidJs.createUniqueId(),
3555
- getRootNode,
3556
- 'open.controlled': props.open !== undefined
3750
+ getRootNode
3557
3751
  }, props);
3558
3752
  const [state, send] = solid.useMachine(tooltip__namespace.machine(context), {
3559
3753
  context
@@ -3656,9 +3850,7 @@ const TreeViewBranchControl = props => {
3656
3850
  const TreeViewBranchIndicator = props => {
3657
3851
  const api = useTreeViewContext();
3658
3852
  const branchProps = useTreeViewBranchContext();
3659
- const mergedProps = solid.mergeProps(() => api().getBranchProps(branchProps),
3660
- // TODO use api.getBranchIndicatorProps() when available
3661
- anatomy.treeViewAnatomy.build().branchIndicator.attrs, props);
3853
+ const mergedProps = solid.mergeProps(() => api().getBranchIndicatorProps(branchProps), props);
3662
3854
  return web.createComponent(ark.div, mergedProps);
3663
3855
  };
3664
3856
 
@@ -3803,6 +3995,17 @@ exports.CheckboxControl = CheckboxControl;
3803
3995
  exports.CheckboxIndicator = CheckboxIndicator;
3804
3996
  exports.CheckboxLabel = CheckboxLabel;
3805
3997
  exports.CheckboxRoot = CheckboxRoot;
3998
+ exports.Clipboard = clipboard;
3999
+ exports.ClipboardControl = ClipboardControl;
4000
+ exports.ClipboardIndicator = ClipboardIndicator;
4001
+ exports.ClipboardInput = ClipboardInput;
4002
+ exports.ClipboardLabel = ClipboardLabel;
4003
+ exports.ClipboardRoot = ClipboardRoot;
4004
+ exports.ClipboardTrigger = ClipboardTrigger;
4005
+ exports.Collapsible = collapsible;
4006
+ exports.CollapsibleContent = CollapsibleContent;
4007
+ exports.CollapsibleRoot = CollapsibleRoot;
4008
+ exports.CollapsibleTrigger = CollapsibleTrigger;
3806
4009
  exports.ColorPicker = colorPicker;
3807
4010
  exports.ColorPickerArea = ColorPickerArea;
3808
4011
  exports.ColorPickerAreaBackground = ColorPickerAreaBackground;
@@ -3905,6 +4108,7 @@ exports.HoverCardContent = HoverCardContent;
3905
4108
  exports.HoverCardPositioner = HoverCardPositioner;
3906
4109
  exports.HoverCardRoot = HoverCardRoot;
3907
4110
  exports.HoverCardTrigger = HoverCardTrigger;
4111
+ exports.LocaleProvider = LocaleProvider;
3908
4112
  exports.Menu = menu;
3909
4113
  exports.MenuArrow = MenuArrow;
3910
4114
  exports.MenuArrowTip = MenuArrowTip;
@@ -3951,7 +4155,6 @@ exports.PopoverRoot = PopoverRoot;
3951
4155
  exports.PopoverTitle = PopoverTitle;
3952
4156
  exports.PopoverTrigger = PopoverTrigger;
3953
4157
  exports.Presence = Presence;
3954
- exports.PresencePropsProvider = PresencePropsProvider;
3955
4158
  exports.PresenceProvider = PresenceProvider;
3956
4159
  exports.Progress = progress;
3957
4160
  exports.ProgressCircle = ProgressCircle;
@@ -4070,6 +4273,8 @@ exports.useAccordionItemContext = useAccordionItemContext;
4070
4273
  exports.useAvatarContext = useAvatarContext;
4071
4274
  exports.useCarouselContext = useCarouselContext;
4072
4275
  exports.useCheckboxContext = useCheckboxContext;
4276
+ exports.useClipboardContext = useClipboardContext;
4277
+ exports.useCollapsibleContext = useCollapsibleContext;
4073
4278
  exports.useColorPickerAreaContext = useColorPickerAreaContext;
4074
4279
  exports.useColorPickerChannelSliderContext = useColorPickerChannelSliderContext;
4075
4280
  exports.useColorPickerContext = useColorPickerContext;
@@ -4083,6 +4288,7 @@ exports.useEditableContext = useEditableContext;
4083
4288
  exports.useEnvironmentContext = useEnvironmentContext;
4084
4289
  exports.useFileUploadContext = useFileUploadContext;
4085
4290
  exports.useHoverCardContext = useHoverCardContext;
4291
+ exports.useLocaleContext = useLocaleContext;
4086
4292
  exports.useMenuContext = useMenuContext;
4087
4293
  exports.useNumberInputContext = useNumberInputContext;
4088
4294
  exports.usePaginationContext = usePaginationContext;
@@ -4090,7 +4296,6 @@ exports.usePinInputContext = usePinInputContext;
4090
4296
  exports.usePopoverContext = usePopoverContext;
4091
4297
  exports.usePresence = usePresence;
4092
4298
  exports.usePresenceContext = usePresenceContext;
4093
- exports.usePresencePropsContext = usePresencePropsContext;
4094
4299
  exports.useProgressContext = useProgressContext;
4095
4300
  exports.useRadioGroupContext = useRadioGroupContext;
4096
4301
  exports.useRadioGroupItemContext = useRadioGroupItemContext;