@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/esm/index.js CHANGED
@@ -1,12 +1,14 @@
1
1
  import { createComponent, Dynamic, mergeProps, memo, use, template, spread, insert, effect } from 'solid-js/web';
2
- import { createContext as createContext$1, useContext, splitProps, createSignal, createMemo, createEffect, Show, createUniqueId, Index, children, onCleanup } from 'solid-js';
2
+ import { createContext as createContext$1, useContext, splitProps, createSignal, createMemo, createEffect, Show, createUniqueId, children, Index, onCleanup } from 'solid-js';
3
3
  import { useMachine, normalizeProps, mergeProps as mergeProps$1, useActor } from '@zag-js/solid';
4
4
  import * as presence from '@zag-js/presence';
5
5
  import * as accordion$1 from '@zag-js/accordion';
6
6
  import * as avatar$1 from '@zag-js/avatar';
7
- import { carouselAnatomy, colorPickerAnatomy, datePickerAnatomy, segmentGroupAnatomy, selectAnatomy, treeViewAnatomy } from '@ark-ui/anatomy';
7
+ import { carouselAnatomy, colorPickerAnatomy, datePickerAnatomy, segmentGroupAnatomy, selectAnatomy } from '@ark-ui/anatomy';
8
8
  import * as carousel$1 from '@zag-js/carousel';
9
9
  import * as checkbox$1 from '@zag-js/checkbox';
10
+ import * as clipboard$1 from '@zag-js/clipboard';
11
+ import * as collapsible$1 from '@zag-js/collapsible';
10
12
  import * as colorPicker$1 from '@zag-js/color-picker';
11
13
  import * as combobox$1 from '@zag-js/combobox';
12
14
  import * as datePicker$1 from '@zag-js/date-picker';
@@ -14,6 +16,7 @@ import * as dialog$1 from '@zag-js/dialog';
14
16
  import * as editable$1 from '@zag-js/editable';
15
17
  import * as fileUpload$1 from '@zag-js/file-upload';
16
18
  import * as hoverCard$1 from '@zag-js/hover-card';
19
+ import { trackLocale, isRTL } from '@zag-js/i18n-utils';
17
20
  import * as menu$1 from '@zag-js/menu';
18
21
  import * as numberInput$1 from '@zag-js/number-input';
19
22
  import * as pagination$1 from '@zag-js/pagination';
@@ -92,15 +95,19 @@ function jsxFactory() {
92
95
  }
93
96
  const ark = jsxFactory();
94
97
 
95
- function splitPresenceProps(props) {
96
- return createSplitProps()(props, ['lazyMount', 'onExitComplete', 'present', 'unmountOnExit']);
97
- }
98
+ const splitPresenceProps = props => createSplitProps()(props, ['lazyMount', 'onExitComplete', 'present', 'unmountOnExit']);
99
+
100
+ const [RenderStrategyProvider, useRenderStrategyContext] = createContext({
101
+ hookName: 'useRenderStrategyContext',
102
+ providerName: '<RenderStrategyProvider />'
103
+ });
104
+ const splitRenderStrategyProps = props => createSplitProps()(props, ['lazyMount', 'unmountOnExit']);
98
105
 
99
106
  const usePresence = props => {
100
- const [localProps, machineProps] = splitProps(props, ['lazyMount', 'unmountOnExit']);
107
+ const [renderStrategyProps, context] = splitRenderStrategyProps(props);
101
108
  const [wasEverPresent, setWasEverPresent] = createSignal(false);
102
- const [state, send] = useMachine(presence.machine(machineProps), {
103
- context: machineProps
109
+ const [state, send] = useMachine(presence.machine(context), {
110
+ context
104
111
  });
105
112
  const api = createMemo(() => presence.connect(state, send, normalizeProps));
106
113
  createEffect(() => {
@@ -108,12 +115,12 @@ const usePresence = props => {
108
115
  if (isPresent) setWasEverPresent(true);
109
116
  });
110
117
  return createMemo(() => ({
111
- isUnmounted: !api().isPresent && !wasEverPresent() && localProps.lazyMount || localProps.unmountOnExit && !api().isPresent && wasEverPresent(),
118
+ isUnmounted: !api().isPresent && !wasEverPresent() && renderStrategyProps.lazyMount || renderStrategyProps.unmountOnExit && !api().isPresent && wasEverPresent(),
112
119
  isPresent: api().isPresent,
113
120
  presenceProps: {
114
121
  ref: api().setNode,
115
122
  hidden: !api().isPresent,
116
- 'data-state': machineProps.present ? 'open' : 'closed'
123
+ 'data-state': context.present ? 'open' : 'closed'
117
124
  }
118
125
  }));
119
126
  };
@@ -140,11 +147,6 @@ const [PresenceProvider, usePresenceContext] = createContext({
140
147
  providerName: '<PresenceProvider />'
141
148
  });
142
149
 
143
- const [PresencePropsProvider, usePresencePropsContext] = createContext({
144
- hookName: 'usePresencePropsContext',
145
- providerName: '<PresencePropsProvider />'
146
- });
147
-
148
150
  const isFunction = value => typeof value === 'function';
149
151
  const runIfFn = (valueOrFn, ...args) => isFunction(valueOrFn) ? valueOrFn(...args) : valueOrFn;
150
152
 
@@ -156,8 +158,8 @@ const [AccordionItemProvider, useAccordionItemContext] = createContext({
156
158
  const AccordionItem = props => {
157
159
  const [itemProps, localProps] = createSplitProps()(props, ['value', 'disabled']);
158
160
  const api = useAccordionContext();
159
- const presenceProps = usePresencePropsContext();
160
- const presenceApi = usePresence(mergeProps$1(presenceProps, () => ({
161
+ const renderStrategyProps = useRenderStrategyContext();
162
+ const presenceApi = usePresence(mergeProps$1(renderStrategyProps, () => ({
161
163
  present: api().getItemState(itemProps).isOpen
162
164
  })));
163
165
  const mergedProps = mergeProps$1(() => api().getItemProps(itemProps), localProps);
@@ -250,15 +252,15 @@ const useAccordion = props => {
250
252
  };
251
253
 
252
254
  const AccordionRoot = props => {
253
- const [presenceProps, accordionProps] = splitPresenceProps(props);
255
+ const [renderStrategyProps, accordionProps] = splitRenderStrategyProps(props);
254
256
  const [useAccordionProps, localProps] = createSplitProps()(accordionProps, ['collapsible', 'dir', 'disabled', 'getRootNode', 'id', 'ids', 'multiple', 'onFocusChange', 'onValueChange', 'orientation', 'value']);
255
257
  const api = useAccordion(useAccordionProps);
256
258
  const mergedProps = mergeProps$1(() => api().rootProps, localProps);
257
259
  return createComponent(AccordionProvider, {
258
260
  value: api,
259
261
  get children() {
260
- return createComponent(PresencePropsProvider, {
261
- value: presenceProps,
262
+ return createComponent(RenderStrategyProvider, {
263
+ value: renderStrategyProps,
262
264
  get children() {
263
265
  return createComponent(ark.div, mergedProps);
264
266
  }
@@ -485,6 +487,167 @@ var checkbox = /*#__PURE__*/Object.freeze({
485
487
  Root: CheckboxRoot
486
488
  });
487
489
 
490
+ const [ClipboardProvider, useClipboardContext] = createContext({
491
+ hookName: 'useClipboardContext',
492
+ providerName: '<ClipboardProvider />'
493
+ });
494
+
495
+ const ClipboardControl = props => {
496
+ const api = useClipboardContext();
497
+ const mergedProps = mergeProps$1(() => api().controlProps, props);
498
+ return createComponent(ark.div, mergedProps);
499
+ };
500
+
501
+ const ClipboardIndicator = props => {
502
+ const [indicatorProps, localProps] = createSplitProps()(props, ['copied']);
503
+ const api = useClipboardContext();
504
+ const mergedProps = mergeProps$1(api().getIndicatorProps({
505
+ copied: api().isCopied
506
+ }), localProps);
507
+ const getChildren = children(() => localProps.children);
508
+ return createComponent(ark.div, mergeProps(mergedProps, {
509
+ get children() {
510
+ return createComponent(Show, {
511
+ get when() {
512
+ return api().isCopied;
513
+ },
514
+ get fallback() {
515
+ return getChildren();
516
+ },
517
+ get children() {
518
+ return indicatorProps.copied;
519
+ }
520
+ });
521
+ }
522
+ }));
523
+ };
524
+
525
+ const ClipboardInput = props => {
526
+ const api = useClipboardContext();
527
+ const mergedProps = mergeProps$1(() => api().inputProps, props);
528
+ return createComponent(ark.input, mergedProps);
529
+ };
530
+
531
+ const ClipboardLabel = props => {
532
+ const api = useClipboardContext();
533
+ const mergedProps = mergeProps$1(() => api().labelProps, props);
534
+ return createComponent(ark.label, mergedProps);
535
+ };
536
+
537
+ const useClipboard = props => {
538
+ const getRootNode = useEnvironmentContext();
539
+ const context = mergeProps$1({
540
+ id: createUniqueId(),
541
+ getRootNode
542
+ }, props);
543
+ const [state, send] = useMachine(clipboard$1.machine(context), {
544
+ context
545
+ });
546
+ return createMemo(() => clipboard$1.connect(state, send, normalizeProps));
547
+ };
548
+
549
+ const ClipboardRoot = props => {
550
+ const [useClipboardProps, localProps] = createSplitProps()(props, ['getRootNode', 'id', 'ids', 'value', 'timeout', 'onCopyStatusChange']);
551
+ const api = useClipboard(useClipboardProps);
552
+ const mergedProps = mergeProps$1(() => api().rootProps, localProps);
553
+ const getChildren = () => runIfFn(localProps.children, api);
554
+ return createComponent(ClipboardProvider, {
555
+ value: api,
556
+ get children() {
557
+ return createComponent(ark.div, mergeProps(mergedProps, {
558
+ get children() {
559
+ return getChildren();
560
+ }
561
+ }));
562
+ }
563
+ });
564
+ };
565
+
566
+ const ClipboardTrigger = props => {
567
+ const api = useClipboardContext();
568
+ const mergedProps = mergeProps$1(() => api().triggerProps, props);
569
+ return createComponent(ark.button, mergedProps);
570
+ };
571
+
572
+ var clipboard = /*#__PURE__*/Object.freeze({
573
+ __proto__: null,
574
+ Control: ClipboardControl,
575
+ Indicator: ClipboardIndicator,
576
+ Input: ClipboardInput,
577
+ Label: ClipboardLabel,
578
+ Root: ClipboardRoot,
579
+ Trigger: ClipboardTrigger
580
+ });
581
+
582
+ const [CollapsibleProvider, useCollapsibleContext] = createContext({
583
+ hookName: 'useCollapsibleContext',
584
+ providerName: '<CollapsibleProvider />'
585
+ });
586
+
587
+ const CollapsibleContent = props => {
588
+ const api = useCollapsibleContext();
589
+ const mergedProps = mergeProps$1(() => api().contentProps, props);
590
+ return createComponent(Show, {
591
+ get when() {
592
+ return !api().isUnmounted;
593
+ },
594
+ get children() {
595
+ return createComponent(ark.div, mergedProps);
596
+ }
597
+ });
598
+ };
599
+
600
+ const useCollapsible = props => {
601
+ const getRootNode = useEnvironmentContext();
602
+ const [renderStrategyProps, collapsibleProps] = splitRenderStrategyProps(props);
603
+ const context = mergeProps$1({
604
+ id: createUniqueId(),
605
+ getRootNode
606
+ }, collapsibleProps);
607
+ const [state, send] = useMachine(collapsible$1.machine(context), {
608
+ context
609
+ });
610
+ const [wasVisible, setWasVisible] = createSignal(false);
611
+ createEffect(() => {
612
+ const isPresent = api().isVisible;
613
+ if (isPresent) setWasVisible(true);
614
+ });
615
+ const api = createMemo(() => collapsible$1.connect(state, send, normalizeProps));
616
+ return createMemo(() => ({
617
+ ...api(),
618
+ isUnmounted: !api().isVisible && !wasVisible() && renderStrategyProps.lazyMount || renderStrategyProps.unmountOnExit && !api().isVisible && wasVisible()
619
+ }));
620
+ };
621
+
622
+ const CollapsibleRoot = props => {
623
+ const [params, localProps] = createSplitProps()(props, ['dir', 'disabled', 'getRootNode', 'id', 'ids', 'lazyMount', 'onExitComplete', 'onOpenChange', 'open', 'unmountOnExit']);
624
+ const api = useCollapsible(params);
625
+ const mergedProps = mergeProps$1(() => api().rootProps, localProps);
626
+ return createComponent(CollapsibleProvider, {
627
+ value: api,
628
+ get children() {
629
+ return createComponent(ark.div, mergedProps);
630
+ }
631
+ });
632
+ };
633
+
634
+ const CollapsibleTrigger = props => {
635
+ const api = useCollapsibleContext();
636
+ const mergedProps = () => mergeProps$1(api().triggerProps, props);
637
+ return createComponent(ark.button, mergeProps(mergedProps, {
638
+ get children() {
639
+ return props.children;
640
+ }
641
+ }));
642
+ };
643
+
644
+ var collapsible = /*#__PURE__*/Object.freeze({
645
+ __proto__: null,
646
+ Content: CollapsibleContent,
647
+ Root: CollapsibleRoot,
648
+ Trigger: CollapsibleTrigger
649
+ });
650
+
488
651
  const [ColorPickerAreaProvider, useColorPickerAreaContext] = createContext({
489
652
  hookName: 'useColorPickerAreaContext',
490
653
  providerName: '<ColorPickerAreaProvider />'
@@ -637,8 +800,7 @@ const useColorPicker = props => {
637
800
  const context = mergeProps$1(() => ({
638
801
  id: createUniqueId(),
639
802
  getRootNode,
640
- value: local.value ? colorPicker$1.parse(local.value) : undefined,
641
- 'open.controlled': props.open !== undefined
803
+ value: local.value ? colorPicker$1.parse(local.value) : undefined
642
804
  }), rest);
643
805
  const [state, send] = useMachine(colorPicker$1.machine(context), {
644
806
  context
@@ -1074,8 +1236,7 @@ const useDatePicker = props => {
1074
1236
  id: createUniqueId(),
1075
1237
  getRootNode,
1076
1238
  focusedValue: local.focusedValue ? datePicker$1.parse(local.focusedValue) : undefined,
1077
- value: local.value ? datePicker$1.parse(local.value) : undefined,
1078
- 'open.controlled': props.open !== undefined
1239
+ value: local.value ? datePicker$1.parse(local.value) : undefined
1079
1240
  }), rest);
1080
1241
  const [state, send] = useMachine(datePicker$1.machine(context), {
1081
1242
  context
@@ -1301,8 +1462,8 @@ const [DialogProvider, useDialogContext] = createContext({
1301
1462
 
1302
1463
  const DialogBackdrop = props => {
1303
1464
  const api = useDialogContext();
1304
- const presenceProps = usePresencePropsContext();
1305
- const presenceApi = usePresence(mergeProps$1(presenceProps, () => ({
1465
+ const renderStrategyProps = useRenderStrategyContext();
1466
+ const presenceApi = usePresence(mergeProps$1(renderStrategyProps, () => ({
1306
1467
  present: api().isOpen
1307
1468
  })));
1308
1469
  const mergedProps = mergeProps$1(() => api().backdropProps, () => presenceApi().presenceProps, props);
@@ -1360,8 +1521,7 @@ const useDialog = props => {
1360
1521
  const getRootNode = useEnvironmentContext();
1361
1522
  const context = mergeProps$1({
1362
1523
  id: createUniqueId(),
1363
- getRootNode,
1364
- 'open.controlled': props.open !== undefined
1524
+ getRootNode
1365
1525
  }, props);
1366
1526
  const [state, send] = useMachine(dialog$1.machine(context), {
1367
1527
  context
@@ -1371,6 +1531,7 @@ const useDialog = props => {
1371
1531
 
1372
1532
  const DialogRoot = props => {
1373
1533
  const [presenceProps, dialogProps] = splitPresenceProps(props);
1534
+ const [renderStrategyProps] = splitRenderStrategyProps(presenceProps);
1374
1535
  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']);
1375
1536
  const api = useDialog(useDialogProps);
1376
1537
  const apiPresence = usePresence(mergeProps$1(presenceProps, () => ({
@@ -1380,8 +1541,8 @@ const DialogRoot = props => {
1380
1541
  return createComponent(DialogProvider, {
1381
1542
  value: api,
1382
1543
  get children() {
1383
- return createComponent(PresencePropsProvider, {
1384
- value: presenceProps,
1544
+ return createComponent(RenderStrategyProvider, {
1545
+ value: renderStrategyProps,
1385
1546
  get children() {
1386
1547
  return createComponent(PresenceProvider, {
1387
1548
  value: apiPresence,
@@ -1722,8 +1883,7 @@ const useHoverCard = props => {
1722
1883
  const getRootNode = useEnvironmentContext();
1723
1884
  const context = mergeProps$1({
1724
1885
  id: createUniqueId(),
1725
- getRootNode,
1726
- 'open.controlled': props.open !== undefined
1886
+ getRootNode
1727
1887
  }, props);
1728
1888
  const [state, send] = useMachine(hoverCard$1.machine(context), {
1729
1889
  context
@@ -1768,6 +1928,42 @@ var hoverCard = /*#__PURE__*/Object.freeze({
1768
1928
  Trigger: HoverCardTrigger
1769
1929
  });
1770
1930
 
1931
+ const [LocaleContextProvider, useLocaleContext] = createContext({
1932
+ hookName: 'useEnvironmentContext',
1933
+ providerName: '<EnvironmentProvider />',
1934
+ strict: false,
1935
+ defaultValue: () => ({
1936
+ dir: 'ltr',
1937
+ locale: 'en-US'
1938
+ })
1939
+ });
1940
+
1941
+ const LocaleProvider = props => {
1942
+ const [localeProps, restProps] = splitProps(props, ['locale', 'defaultLocale']);
1943
+ const [locale, setLocale] = createSignal(localeProps.defaultLocale || localeProps.locale || 'en-US');
1944
+ const getRootNode = useEnvironmentContext();
1945
+ createEffect(() => {
1946
+ const cleanup = trackLocale({
1947
+ locale: localeProps.locale,
1948
+ getRootNode,
1949
+ onLocaleChange(locale) {
1950
+ setLocale(locale.locale);
1951
+ }
1952
+ });
1953
+ onCleanup(cleanup);
1954
+ });
1955
+ const context = createMemo(() => ({
1956
+ locale: locale(),
1957
+ dir: isRTL(locale()) ? 'rtl' : 'ltr'
1958
+ }));
1959
+ return createComponent(LocaleContextProvider, {
1960
+ value: context,
1961
+ get children() {
1962
+ return restProps.children;
1963
+ }
1964
+ });
1965
+ };
1966
+
1771
1967
  const [MenuProvider, useMenuContext] = createContext({
1772
1968
  hookName: 'useMenuContext',
1773
1969
  providerName: '<MenuProvider />',
@@ -1870,8 +2066,7 @@ const useMenu = props => {
1870
2066
  const getRootNode = useEnvironmentContext();
1871
2067
  const context = mergeProps$1({
1872
2068
  id: createUniqueId(),
1873
- getRootNode,
1874
- 'open.controlled': props.open !== undefined
2069
+ getRootNode
1875
2070
  }, props);
1876
2071
  const [state, send, machine] = useMachine(menu$1.machine(context), {
1877
2072
  context
@@ -2246,8 +2441,7 @@ const usePopover = props => {
2246
2441
  const getRootNode = useEnvironmentContext();
2247
2442
  const context = mergeProps$1({
2248
2443
  id: createUniqueId(),
2249
- getRootNode,
2250
- 'open.controlled': props.open !== undefined
2444
+ getRootNode
2251
2445
  }, props);
2252
2446
  const [state, send] = useMachine(popover$1.machine(context), {
2253
2447
  context
@@ -2819,8 +3013,7 @@ const useSelect = props => {
2819
3013
  const context = () => mergeProps$1({
2820
3014
  id: createUniqueId(),
2821
3015
  getRootNode,
2822
- collection: collection(),
2823
- 'open.controlled': props.open !== undefined
3016
+ collection: collection()
2824
3017
  }, rest);
2825
3018
  const [state, send] = useMachine(select$1.machine(context()), {
2826
3019
  context
@@ -3022,7 +3215,7 @@ const useSplitter = props => {
3022
3215
  };
3023
3216
 
3024
3217
  const SplitterRoot = props => {
3025
- const [splitterParams, localProps] = createSplitProps()(props, ['dir', 'getRootNode', 'id', 'ids', 'onSizeChange', 'onSizeChangeEnd', 'onSizeChangeStart', 'orientation', 'size']);
3218
+ const [splitterParams, localProps] = createSplitProps()(props, ['dir', 'getRootNode', 'id', 'ids', 'onSizeChange', 'onSizeChangeEnd', 'orientation', 'size']);
3026
3219
  const api = useSplitter(splitterParams);
3027
3220
  const getChildren = () => runIfFn(localProps.children, api);
3028
3221
  const mergedProps = mergeProps$1(() => api().rootProps, localProps);
@@ -3118,8 +3311,8 @@ const [TabsProvider, useTabsContext] = createContext({
3118
3311
  const TabContent = props => {
3119
3312
  const [contentProps, localProps] = createSplitProps()(props, ['value']);
3120
3313
  const api = useTabsContext();
3121
- const presenceProps = usePresencePropsContext();
3122
- const presenceApi = usePresence(mergeProps$1(presenceProps, () => ({
3314
+ const renderStrategyProps = useRenderStrategyContext();
3315
+ const presenceApi = usePresence(mergeProps$1(renderStrategyProps, () => ({
3123
3316
  present: api().value === contentProps.value
3124
3317
  })));
3125
3318
  const mergedProps = mergeProps$1(() => api().getContentProps(contentProps), () => presenceApi().presenceProps, localProps);
@@ -3170,15 +3363,15 @@ const useTabs = props => {
3170
3363
  };
3171
3364
 
3172
3365
  const TabsRoot = props => {
3173
- const [presenceProps, tabsProps] = splitPresenceProps(props);
3366
+ const [renderStrategyProps, tabsProps] = splitRenderStrategyProps(props);
3174
3367
  const [tabsParams, restProps] = createSplitProps()(tabsProps, ['activationMode', 'dir', 'getRootNode', 'id', 'ids', 'loop', 'onFocusChange', 'onValueChange', 'orientation', 'translations', 'value']);
3175
3368
  const api = useTabs(tabsParams);
3176
3369
  const mergedProps = mergeProps$1(() => api().rootProps, restProps);
3177
3370
  return createComponent(TabsProvider, {
3178
3371
  value: api,
3179
3372
  get children() {
3180
- return createComponent(PresencePropsProvider, {
3181
- value: presenceProps,
3373
+ return createComponent(RenderStrategyProvider, {
3374
+ value: renderStrategyProps,
3182
3375
  get children() {
3183
3376
  return createComponent(ark.div, mergedProps);
3184
3377
  }
@@ -3502,8 +3695,7 @@ const useTooltip = props => {
3502
3695
  const getRootNode = useEnvironmentContext();
3503
3696
  const context = mergeProps$1({
3504
3697
  id: createUniqueId(),
3505
- getRootNode,
3506
- 'open.controlled': props.open !== undefined
3698
+ getRootNode
3507
3699
  }, props);
3508
3700
  const [state, send] = useMachine(tooltip$1.machine(context), {
3509
3701
  context
@@ -3606,9 +3798,7 @@ const TreeViewBranchControl = props => {
3606
3798
  const TreeViewBranchIndicator = props => {
3607
3799
  const api = useTreeViewContext();
3608
3800
  const branchProps = useTreeViewBranchContext();
3609
- const mergedProps = mergeProps$1(() => api().getBranchProps(branchProps),
3610
- // TODO use api.getBranchIndicatorProps() when available
3611
- treeViewAnatomy.build().branchIndicator.attrs, props);
3801
+ const mergedProps = mergeProps$1(() => api().getBranchIndicatorProps(branchProps), props);
3612
3802
  return createComponent(ark.div, mergedProps);
3613
3803
  };
3614
3804
 
@@ -3728,5 +3918,5 @@ var treeView = /*#__PURE__*/Object.freeze({
3728
3918
  Tree: TreeViewTree
3729
3919
  });
3730
3920
 
3731
- export { accordion as Accordion, AccordionItem, AccordionItemContent, AccordionItemIndicator, AccordionItemTrigger, AccordionRoot, avatar as Avatar, AvatarFallback, AvatarImage, AvatarRoot, carousel as Carousel, CarouselControl, CarouselIndicator, CarouselIndicatorGroup, CarouselItem, CarouselItemGroup, CarouselNextTrigger, CarouselPrevTrigger, CarouselRoot, CarouselViewport, checkbox as Checkbox, CheckboxControl, CheckboxIndicator, CheckboxLabel, CheckboxRoot, colorPicker as ColorPicker, ColorPickerArea, ColorPickerAreaBackground, ColorPickerAreaThumb, ColorPickerChannelInput, ColorPickerChannelSlider, ColorPickerChannelSliderThumb, ColorPickerChannelSliderTrack, ColorPickerContent, ColorPickerControl, ColorPickerEyeDropperTrigger, ColorPickerFormatSelect, ColorPickerFormatTrigger, ColorPickerLabel, ColorPickerPositioner, ColorPickerRoot, ColorPickerSwatch, ColorPickerSwatchGroup, ColorPickerSwatchIndicator, ColorPickerSwatchTrigger, ColorPickerTransparencyGrid, ColorPickerTrigger, ColorPickerValueText, ColorPickerView, combobox as Combobox, ComboboxClearTrigger, ComboboxContent, ComboboxControl, ComboboxInput, ComboboxItem, ComboboxItemGroup, ComboboxItemGroupLabel, ComboboxItemIndicator, ComboboxItemText, ComboboxLabel, ComboboxPositioner, ComboboxRoot, ComboboxTrigger, datePicker as DatePicker, DatePickerClearTrigger, DatePickerContent, DatePickerControl, DatePickerInput, DatePickerLabel, DatePickerMonthSelect, DatePickerNextTrigger, DatePickerPositioner, DatePickerPresetTrigger, DatePickerPrevTrigger, DatePickerRangeText, DatePickerRoot, DatePickerTable, DatePickerTableBody, DatePickerTableCell, DatePickerTableCellTrigger, DatePickerTableHead, DatePickerTableHeader, DatePickerTableRow, DatePickerTrigger, DatePickerView, DatePickerViewControl, DatePickerViewTrigger, DatePickerYearSelect, dialog as Dialog, DialogBackdrop, DialogCloseTrigger, DialogContent, DialogDescription, DialogPositioner, DialogRoot, DialogTitle, DialogTrigger, editable as Editable, EditableArea, EditableCancelTrigger, EditableControl, EditableEditTrigger, EditableInput, EditableLabel, EditablePreview, EditableRoot, EditableSubmitTrigger, Environment, fileUpload as FileUpload, FileUploadDropzone, FileUploadItem, FileUploadItemDeleteTrigger, FileUploadItemGroup, FileUploadItemName, FileUploadItemPreview, FileUploadItemPreviewImage, FileUploadItemSizeText, FileUploadLabel, FileUploadRoot, FileUploadTrigger, hoverCard as HoverCard, HoverCardArrow, HoverCardArrowTip, HoverCardContent, HoverCardPositioner, HoverCardRoot, HoverCardTrigger, menu as Menu, MenuArrow, MenuArrowTip, MenuContent, MenuContextTrigger, MenuItem, MenuItemGroup, MenuItemGroupLabel, MenuOptionItem, MenuPositioner, MenuRoot, MenuSeparator, MenuTrigger, MenuTriggerItem, numberInput as NumberInput, NumberInputControl, NumberInputDecrementTrigger, NumberInputIncrementTrigger, NumberInputInput, NumberInputLabel, NumberInputRoot, NumberInputScrubber, pagination as Pagination, PaginationEllipsis, PaginationItem, PaginationNextTrigger, PaginationPrevTrigger, PaginationRoot, pinInput as PinInput, PinInputControl, PinInputInput, PinInputLabel, PinInputRoot, popover as Popover, PopoverAnchor, PopoverArrow, PopoverArrowTip, PopoverCloseTrigger, PopoverContent, PopoverDescription, PopoverIndicator, PopoverPositioner, PopoverRoot, PopoverTitle, PopoverTrigger, Presence, PresencePropsProvider, PresenceProvider, progress as Progress, ProgressCircle, ProgressCircleRange, ProgressCircleTrack, ProgressLabel, ProgressRange, ProgressRoot, ProgressTrack, ProgressValueText, ProgressView, radioGroup as RadioGroup, RadioGroupIndicator, RadioGroupItem, RadioGroupItemControl, RadioGroupItemText, RadioGroupLabel, RadioGroupRoot, ratingGroup as RatingGroup, RatingGroupControl, RatingGroupItem, RatingGroupLabel, RatingGroupRoot, segmentGroup as SegmentGroup, SegmentGroupIndicator, SegmentGroupItem, SegmentGroupItemControl, SegmentGroupItemText, SegmentGroupLabel, SegmentGroupRoot, select as Select, SelectClearTrigger, SelectContent, SelectControl, SelectIndicator, SelectItem, SelectItemGroup, SelectItemGroupLabel, SelectItemIndicator, SelectItemText, SelectLabel, SelectPositioner, SelectRoot, SelectTrigger, SelectValueText, slider as Slider, SliderControl, SliderLabel, SliderMarker, SliderMarkerGroup, SliderRange, SliderRoot, SliderThumb, SliderTrack, SliderValueText, splitter as Splitter, SplitterPanel, SplitterResizeTrigger, SplitterRoot, _switch as Switch, SwitchControl, SwitchLabel, SwitchRoot, SwitchThumb, TabContent, TabIndicator, TabList, TabTrigger, tabs as Tabs, TabsRoot, tagsInput as TagsInput, TagsInputClearTrigger, TagsInputControl, TagsInputInput, TagsInputItem, TagsInputItemDeleteTrigger, TagsInputItemInput, TagsInputItemPreview, TagsInputItemText, TagsInputLabel, TagsInputRoot, toast as Toast, ToastCloseTrigger, ToastDescription, ToastGroup, ToastRoot, ToastTitle, toggleGroup as ToggleGroup, ToggleGroupItem, ToggleGroupRoot, tooltip as Tooltip, TooltipArrow, TooltipArrowTip, TooltipContent, TooltipPositioner, TooltipRoot, TooltipTrigger, treeView as TreeView, TreeViewBranch, TreeViewBranchContent, TreeViewBranchControl, TreeViewBranchIndicator, TreeViewBranchText, TreeViewBranchTrigger, TreeViewItem, TreeViewItemIndicator, TreeViewItemText, TreeViewLabel, TreeViewRoot, TreeViewTree, ark, createToaster, splitPresenceProps, useAccordionContext, useAccordionItemContext, useAvatarContext, useCarouselContext, useCheckboxContext, useColorPickerAreaContext, useColorPickerChannelSliderContext, useColorPickerContext, useComboboxContext, useDatePickerContext, useDatePickerTableCellContext, useDatePickerTableContext, useDatePickerViewContext, useDialogContext, useEditableContext, useEnvironmentContext, useFileUploadContext, useHoverCardContext, useMenuContext, useNumberInputContext, usePaginationContext, usePinInputContext, usePopoverContext, usePresence, usePresenceContext, usePresencePropsContext, useProgressContext, useRadioGroupContext, useRadioGroupItemContext, useRatingGroupContext, useRatingGroupItemContext, useSegmentGroupContext, useSegmentGroupItemContext, useSelectContext, useSelectItemContext, useSliderContext, useSplitterContext, useSwitchContext, useTabsContext, useTagsInputContext, useTagsInputItemContext, useToggleGroupContext, useTooltipContext, useTreeViewContext, withAsProp };
3921
+ export { accordion as Accordion, AccordionItem, AccordionItemContent, AccordionItemIndicator, AccordionItemTrigger, AccordionRoot, avatar as Avatar, AvatarFallback, AvatarImage, AvatarRoot, carousel as Carousel, CarouselControl, CarouselIndicator, CarouselIndicatorGroup, CarouselItem, CarouselItemGroup, CarouselNextTrigger, CarouselPrevTrigger, CarouselRoot, CarouselViewport, checkbox as Checkbox, CheckboxControl, CheckboxIndicator, CheckboxLabel, CheckboxRoot, clipboard as Clipboard, ClipboardControl, ClipboardIndicator, ClipboardInput, ClipboardLabel, ClipboardRoot, ClipboardTrigger, collapsible as Collapsible, CollapsibleContent, CollapsibleRoot, CollapsibleTrigger, colorPicker as ColorPicker, ColorPickerArea, ColorPickerAreaBackground, ColorPickerAreaThumb, ColorPickerChannelInput, ColorPickerChannelSlider, ColorPickerChannelSliderThumb, ColorPickerChannelSliderTrack, ColorPickerContent, ColorPickerControl, ColorPickerEyeDropperTrigger, ColorPickerFormatSelect, ColorPickerFormatTrigger, ColorPickerLabel, ColorPickerPositioner, ColorPickerRoot, ColorPickerSwatch, ColorPickerSwatchGroup, ColorPickerSwatchIndicator, ColorPickerSwatchTrigger, ColorPickerTransparencyGrid, ColorPickerTrigger, ColorPickerValueText, ColorPickerView, combobox as Combobox, ComboboxClearTrigger, ComboboxContent, ComboboxControl, ComboboxInput, ComboboxItem, ComboboxItemGroup, ComboboxItemGroupLabel, ComboboxItemIndicator, ComboboxItemText, ComboboxLabel, ComboboxPositioner, ComboboxRoot, ComboboxTrigger, datePicker as DatePicker, DatePickerClearTrigger, DatePickerContent, DatePickerControl, DatePickerInput, DatePickerLabel, DatePickerMonthSelect, DatePickerNextTrigger, DatePickerPositioner, DatePickerPresetTrigger, DatePickerPrevTrigger, DatePickerRangeText, DatePickerRoot, DatePickerTable, DatePickerTableBody, DatePickerTableCell, DatePickerTableCellTrigger, DatePickerTableHead, DatePickerTableHeader, DatePickerTableRow, DatePickerTrigger, DatePickerView, DatePickerViewControl, DatePickerViewTrigger, DatePickerYearSelect, dialog as Dialog, DialogBackdrop, DialogCloseTrigger, DialogContent, DialogDescription, DialogPositioner, DialogRoot, DialogTitle, DialogTrigger, editable as Editable, EditableArea, EditableCancelTrigger, EditableControl, EditableEditTrigger, EditableInput, EditableLabel, EditablePreview, EditableRoot, EditableSubmitTrigger, Environment, fileUpload as FileUpload, FileUploadDropzone, FileUploadItem, FileUploadItemDeleteTrigger, FileUploadItemGroup, FileUploadItemName, FileUploadItemPreview, FileUploadItemPreviewImage, FileUploadItemSizeText, FileUploadLabel, FileUploadRoot, FileUploadTrigger, hoverCard as HoverCard, HoverCardArrow, HoverCardArrowTip, HoverCardContent, HoverCardPositioner, HoverCardRoot, HoverCardTrigger, LocaleProvider, menu as Menu, MenuArrow, MenuArrowTip, MenuContent, MenuContextTrigger, MenuItem, MenuItemGroup, MenuItemGroupLabel, MenuOptionItem, MenuPositioner, MenuRoot, MenuSeparator, MenuTrigger, MenuTriggerItem, numberInput as NumberInput, NumberInputControl, NumberInputDecrementTrigger, NumberInputIncrementTrigger, NumberInputInput, NumberInputLabel, NumberInputRoot, NumberInputScrubber, pagination as Pagination, PaginationEllipsis, PaginationItem, PaginationNextTrigger, PaginationPrevTrigger, PaginationRoot, pinInput as PinInput, PinInputControl, PinInputInput, PinInputLabel, PinInputRoot, popover as Popover, PopoverAnchor, PopoverArrow, PopoverArrowTip, PopoverCloseTrigger, PopoverContent, PopoverDescription, PopoverIndicator, PopoverPositioner, PopoverRoot, PopoverTitle, PopoverTrigger, Presence, PresenceProvider, progress as Progress, ProgressCircle, ProgressCircleRange, ProgressCircleTrack, ProgressLabel, ProgressRange, ProgressRoot, ProgressTrack, ProgressValueText, ProgressView, radioGroup as RadioGroup, RadioGroupIndicator, RadioGroupItem, RadioGroupItemControl, RadioGroupItemText, RadioGroupLabel, RadioGroupRoot, ratingGroup as RatingGroup, RatingGroupControl, RatingGroupItem, RatingGroupLabel, RatingGroupRoot, segmentGroup as SegmentGroup, SegmentGroupIndicator, SegmentGroupItem, SegmentGroupItemControl, SegmentGroupItemText, SegmentGroupLabel, SegmentGroupRoot, select as Select, SelectClearTrigger, SelectContent, SelectControl, SelectIndicator, SelectItem, SelectItemGroup, SelectItemGroupLabel, SelectItemIndicator, SelectItemText, SelectLabel, SelectPositioner, SelectRoot, SelectTrigger, SelectValueText, slider as Slider, SliderControl, SliderLabel, SliderMarker, SliderMarkerGroup, SliderRange, SliderRoot, SliderThumb, SliderTrack, SliderValueText, splitter as Splitter, SplitterPanel, SplitterResizeTrigger, SplitterRoot, _switch as Switch, SwitchControl, SwitchLabel, SwitchRoot, SwitchThumb, TabContent, TabIndicator, TabList, TabTrigger, tabs as Tabs, TabsRoot, tagsInput as TagsInput, TagsInputClearTrigger, TagsInputControl, TagsInputInput, TagsInputItem, TagsInputItemDeleteTrigger, TagsInputItemInput, TagsInputItemPreview, TagsInputItemText, TagsInputLabel, TagsInputRoot, toast as Toast, ToastCloseTrigger, ToastDescription, ToastGroup, ToastRoot, ToastTitle, toggleGroup as ToggleGroup, ToggleGroupItem, ToggleGroupRoot, tooltip as Tooltip, TooltipArrow, TooltipArrowTip, TooltipContent, TooltipPositioner, TooltipRoot, TooltipTrigger, treeView as TreeView, TreeViewBranch, TreeViewBranchContent, TreeViewBranchControl, TreeViewBranchIndicator, TreeViewBranchText, TreeViewBranchTrigger, TreeViewItem, TreeViewItemIndicator, TreeViewItemText, TreeViewLabel, TreeViewRoot, TreeViewTree, ark, createToaster, splitPresenceProps, useAccordionContext, useAccordionItemContext, useAvatarContext, useCarouselContext, useCheckboxContext, useClipboardContext, useCollapsibleContext, useColorPickerAreaContext, useColorPickerChannelSliderContext, useColorPickerContext, useComboboxContext, useDatePickerContext, useDatePickerTableCellContext, useDatePickerTableContext, useDatePickerViewContext, useDialogContext, useEditableContext, useEnvironmentContext, useFileUploadContext, useHoverCardContext, useLocaleContext, useMenuContext, useNumberInputContext, usePaginationContext, usePinInputContext, usePopoverContext, usePresence, usePresenceContext, useProgressContext, useRadioGroupContext, useRadioGroupItemContext, useRatingGroupContext, useRatingGroupItemContext, useSegmentGroupContext, useSegmentGroupItemContext, useSelectContext, useSelectItemContext, useSliderContext, useSplitterContext, useSwitchContext, useTabsContext, useTagsInputContext, useTagsInputItemContext, useToggleGroupContext, useTooltipContext, useTreeViewContext, withAsProp };
3732
3922
  //# sourceMappingURL=index.js.map