@ark-ui/solid 2.1.1 → 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 (50) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/cjs/index.js +113 -49
  3. package/cjs/index.js.map +1 -1
  4. package/esm/index.js +109 -49
  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/collapsible/collapsible-content.jsx +11 -0
  10. package/source/collapsible/collapsible-context.js +5 -0
  11. package/source/collapsible/collapsible-root.jsx +24 -0
  12. package/source/collapsible/collapsible-trigger.jsx +8 -0
  13. package/source/collapsible/collapsible.jsx +4 -0
  14. package/source/collapsible/index.js +6 -0
  15. package/source/collapsible/use-collapsible.js +23 -0
  16. package/source/color-picker/use-color-picker.js +0 -1
  17. package/source/date-picker/use-date-picker.js +0 -1
  18. package/source/dialog/dialog-backdrop.jsx +4 -3
  19. package/source/dialog/dialog-root.jsx +5 -3
  20. package/source/dialog/use-dialog.js +1 -1
  21. package/source/hover-card/use-hover-card.js +1 -1
  22. package/source/index.jsx +1 -0
  23. package/source/menu/use-menu.js +1 -1
  24. package/source/popover/use-popover.js +1 -1
  25. package/source/presence/index.js +1 -2
  26. package/source/presence/split-presence-props.js +6 -8
  27. package/source/presence/use-presence.js +8 -7
  28. package/source/render-strategy.js +7 -0
  29. package/source/select/use-select.js +0 -1
  30. package/source/splitter/splitter-root.jsx +0 -1
  31. package/source/tabs/tab-content.jsx +4 -3
  32. package/source/tabs/tabs-root.jsx +4 -4
  33. package/source/tooltip/use-tooltip.js +1 -1
  34. package/source/tree-view/tree-view-branch-indicator.jsx +1 -4
  35. package/types/collapsible/collapsible-content.d.ts +4 -0
  36. package/types/collapsible/collapsible-context.d.ts +4 -0
  37. package/types/collapsible/collapsible-root.d.ts +6 -0
  38. package/types/collapsible/collapsible-trigger.d.ts +4 -0
  39. package/types/collapsible/collapsible.d.ts +4 -0
  40. package/types/collapsible/index.d.ts +8 -0
  41. package/types/collapsible/use-collapsible.d.ts +15 -0
  42. package/types/index.d.ts +1 -0
  43. package/types/menu/menu-item-group.d.ts +3 -5
  44. package/types/presence/index.d.ts +2 -3
  45. package/types/presence/split-presence-props.d.ts +1 -1
  46. package/types/presence/use-presence.d.ts +2 -11
  47. package/types/render-strategy.d.ts +14 -0
  48. package/types/tabs/tabs-root.d.ts +2 -2
  49. package/source/presence/presence-props-context.js +0 -5
  50. package/types/presence/presence-props-context.d.ts +0 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ark-ui/solid",
3
- "version": "2.1.1",
3
+ "version": "2.2.0",
4
4
  "description": "A collection of unstyled, accessible UI components for Solid, utilizing state machines for seamless interaction.",
5
5
  "keywords": [
6
6
  "accordion",
@@ -8,6 +8,7 @@
8
8
  "carousel",
9
9
  "checkbox",
10
10
  "clipboard",
11
+ "collapsible",
11
12
  "color picker",
12
13
  "combobox",
13
14
  "date picker",
@@ -84,78 +85,78 @@
84
85
  "release-it": "release-it --config ../../../release-it.json"
85
86
  },
86
87
  "dependencies": {
87
- "@ark-ui/anatomy": "2.2.0",
88
- "@zag-js/accordion": "0.36.2",
89
- "@zag-js/avatar": "0.36.2",
90
- "@zag-js/carousel": "0.36.2",
91
- "@zag-js/checkbox": "0.36.2",
92
- "@zag-js/clipboard": "0.36.2",
93
- "@zag-js/collapsible": "0.36.2",
94
- "@zag-js/color-picker": "0.36.2",
95
- "@zag-js/combobox": "0.36.2",
96
- "@zag-js/date-picker": "0.36.2",
97
- "@zag-js/dialog": "0.36.2",
98
- "@zag-js/editable": "0.36.2",
99
- "@zag-js/file-upload": "0.36.2",
100
- "@zag-js/hover-card": "0.36.2",
101
- "@zag-js/i18n-utils": "0.36.2",
102
- "@zag-js/menu": "0.36.2",
103
- "@zag-js/number-input": "0.36.2",
104
- "@zag-js/pagination": "0.36.2",
105
- "@zag-js/pin-input": "0.36.2",
106
- "@zag-js/popover": "0.36.2",
107
- "@zag-js/presence": "0.36.2",
108
- "@zag-js/progress": "0.36.2",
109
- "@zag-js/radio-group": "0.36.2",
110
- "@zag-js/rating-group": "0.36.2",
111
- "@zag-js/select": "0.36.2",
112
- "@zag-js/slider": "0.36.2",
113
- "@zag-js/solid": "0.36.2",
114
- "@zag-js/splitter": "0.36.2",
115
- "@zag-js/switch": "0.36.2",
116
- "@zag-js/tabs": "0.36.2",
117
- "@zag-js/tags-input": "0.36.2",
118
- "@zag-js/toast": "0.36.2",
119
- "@zag-js/toggle-group": "0.36.2",
120
- "@zag-js/tooltip": "0.36.2",
121
- "@zag-js/tree-view": "0.36.2",
122
- "@zag-js/types": "0.36.2"
88
+ "@ark-ui/anatomy": "2.3.1",
89
+ "@zag-js/accordion": "0.38.0",
90
+ "@zag-js/avatar": "0.38.0",
91
+ "@zag-js/carousel": "0.38.0",
92
+ "@zag-js/checkbox": "0.38.0",
93
+ "@zag-js/clipboard": "0.38.0",
94
+ "@zag-js/collapsible": "0.38.0",
95
+ "@zag-js/color-picker": "0.38.0",
96
+ "@zag-js/combobox": "0.38.0",
97
+ "@zag-js/date-picker": "0.38.0",
98
+ "@zag-js/dialog": "0.38.0",
99
+ "@zag-js/editable": "0.38.0",
100
+ "@zag-js/file-upload": "0.38.0",
101
+ "@zag-js/hover-card": "0.38.0",
102
+ "@zag-js/i18n-utils": "0.38.0",
103
+ "@zag-js/menu": "0.38.0",
104
+ "@zag-js/number-input": "0.38.0",
105
+ "@zag-js/pagination": "0.38.0",
106
+ "@zag-js/pin-input": "0.38.0",
107
+ "@zag-js/popover": "0.38.0",
108
+ "@zag-js/presence": "0.38.0",
109
+ "@zag-js/progress": "0.38.0",
110
+ "@zag-js/radio-group": "0.38.0",
111
+ "@zag-js/rating-group": "0.38.0",
112
+ "@zag-js/select": "0.38.0",
113
+ "@zag-js/slider": "0.38.0",
114
+ "@zag-js/solid": "0.38.0",
115
+ "@zag-js/splitter": "0.38.0",
116
+ "@zag-js/switch": "0.38.0",
117
+ "@zag-js/tabs": "0.38.0",
118
+ "@zag-js/tags-input": "0.38.0",
119
+ "@zag-js/toast": "0.38.0",
120
+ "@zag-js/toggle-group": "0.38.0",
121
+ "@zag-js/tooltip": "0.38.0",
122
+ "@zag-js/tree-view": "0.38.0",
123
+ "@zag-js/types": "0.38.0"
123
124
  },
124
125
  "devDependencies": {
125
126
  "@release-it/keep-a-changelog": "5.0.0",
126
127
  "@solidjs/testing-library": "0.8.6",
127
- "@storybook/addon-essentials": "7.6.14",
128
- "@storybook/addon-interactions": "7.6.14",
129
- "@storybook/addon-links": "7.6.14",
130
- "@storybook/blocks": "7.6.14",
128
+ "@storybook/addon-essentials": "7.6.17",
129
+ "@storybook/addon-interactions": "7.6.17",
130
+ "@storybook/addon-links": "7.6.17",
131
+ "@storybook/blocks": "7.6.17",
131
132
  "@storybook/testing-library": "0.2.2",
132
133
  "@testing-library/dom": "9.3.4",
133
134
  "@testing-library/jest-dom": "6.4.2",
134
135
  "@testing-library/user-event": "14.5.2",
135
136
  "@types/jsdom": "21.1.6",
136
137
  "@types/testing-library__jest-dom": "5.14.9",
137
- "@typescript-eslint/eslint-plugin": "6.21.0",
138
- "@typescript-eslint/parser": "6.21.0",
139
- "@vitest/coverage-v8": "1.2.2",
140
- "eslint": "8.56.0",
138
+ "@typescript-eslint/eslint-plugin": "7.0.2",
139
+ "@typescript-eslint/parser": "7.0.2",
140
+ "@vitest/coverage-v8": "1.3.1",
141
+ "eslint": "8.57.0",
141
142
  "eslint-plugin-jest-dom": "5.1.0",
142
143
  "eslint-plugin-testing-library": "6.2.0",
143
144
  "globby": "14.0.1",
144
145
  "jsdom": "24.0.0",
145
146
  "react": "18.2.0",
146
147
  "react-dom": "18.2.0",
147
- "release-it": "17.0.3",
148
+ "release-it": "17.1.1",
148
149
  "resize-observer-polyfill": "1.5.1",
149
- "rollup": "4.10.0",
150
+ "rollup": "4.12.0",
150
151
  "rollup-preset-solid": "2.0.1",
151
- "solid-js": "1.8.14",
152
- "storybook": "7.6.14",
152
+ "solid-js": "1.8.15",
153
+ "storybook": "7.6.17",
153
154
  "storybook-solidjs": "1.0.0-beta.2",
154
155
  "storybook-solidjs-vite": "1.0.0-beta.2",
155
156
  "typescript": "5.3.3",
156
- "vite": "5.1.1",
157
- "vite-plugin-solid": "2.9.1",
158
- "vitest": "1.2.2"
157
+ "vite": "5.1.4",
158
+ "vite-plugin-solid": "2.10.1",
159
+ "vitest": "1.3.1"
159
160
  },
160
161
  "peerDependencies": {
161
162
  "solid-js": ">=1.6.0"
@@ -1,15 +1,16 @@
1
1
  import { mergeProps } from '@zag-js/solid';
2
2
  import { createSplitProps } from '../create-split-props';
3
3
  import { ark } from '../factory';
4
- import { PresenceProvider, usePresence, usePresencePropsContext } from '../presence';
4
+ import { PresenceProvider, usePresence } from '../presence';
5
+ import { useRenderStrategyContext } from '../render-strategy';
5
6
  import { runIfFn } from '../run-if-fn';
6
7
  import { useAccordionContext } from './accordion-context';
7
8
  import { AccordionItemProvider } from './accordion-item-context';
8
9
  export const AccordionItem = (props) => {
9
10
  const [itemProps, localProps] = createSplitProps()(props, ['value', 'disabled']);
10
11
  const api = useAccordionContext();
11
- const presenceProps = usePresencePropsContext();
12
- const presenceApi = usePresence(mergeProps(presenceProps, () => ({ present: api().getItemState(itemProps).isOpen })));
12
+ const renderStrategyProps = useRenderStrategyContext();
13
+ const presenceApi = usePresence(mergeProps(renderStrategyProps, () => ({ present: api().getItemState(itemProps).isOpen })));
13
14
  const mergedProps = mergeProps(() => api().getItemProps(itemProps), localProps);
14
15
  const getChildren = () => runIfFn(localProps.children, () => api().getItemState(itemProps));
15
16
  return (<AccordionItemProvider value={itemProps}>
@@ -1,11 +1,11 @@
1
1
  import { mergeProps } from '@zag-js/solid';
2
2
  import { createSplitProps } from '../create-split-props';
3
3
  import { ark } from '../factory';
4
- import { PresencePropsProvider, splitPresenceProps } from '../presence';
4
+ import { RenderStrategyProvider, splitRenderStrategyProps } from '../render-strategy';
5
5
  import { AccordionProvider } from './accordion-context';
6
6
  import { useAccordion } from './use-accordion';
7
7
  export const AccordionRoot = (props) => {
8
- const [presenceProps, accordionProps] = splitPresenceProps(props);
8
+ const [renderStrategyProps, accordionProps] = splitRenderStrategyProps(props);
9
9
  const [useAccordionProps, localProps] = createSplitProps()(accordionProps, [
10
10
  'collapsible',
11
11
  'dir',
@@ -22,8 +22,8 @@ export const AccordionRoot = (props) => {
22
22
  const api = useAccordion(useAccordionProps);
23
23
  const mergedProps = mergeProps(() => api().rootProps, localProps);
24
24
  return (<AccordionProvider value={api}>
25
- <PresencePropsProvider value={presenceProps}>
25
+ <RenderStrategyProvider value={renderStrategyProps}>
26
26
  <ark.div {...mergedProps}/>
27
- </PresencePropsProvider>
27
+ </RenderStrategyProvider>
28
28
  </AccordionProvider>);
29
29
  };
@@ -0,0 +1,11 @@
1
+ import { mergeProps } from '@zag-js/solid';
2
+ import { Show } from 'solid-js';
3
+ import { ark } from '../factory';
4
+ import { useCollapsibleContext } from './collapsible-context';
5
+ export const CollapsibleContent = (props) => {
6
+ const api = useCollapsibleContext();
7
+ const mergedProps = mergeProps(() => api().contentProps, props);
8
+ return (<Show when={!api().isUnmounted}>
9
+ <ark.div {...mergedProps}/>
10
+ </Show>);
11
+ };
@@ -0,0 +1,5 @@
1
+ import { createContext } from '../create-context';
2
+ export const [CollapsibleProvider, useCollapsibleContext] = createContext({
3
+ hookName: 'useCollapsibleContext',
4
+ providerName: '<CollapsibleProvider />',
5
+ });
@@ -0,0 +1,24 @@
1
+ import { mergeProps } from '@zag-js/solid';
2
+ import { createSplitProps } from '../create-split-props';
3
+ import { ark } from '../factory';
4
+ import { CollapsibleProvider } from './collapsible-context';
5
+ import { useCollapsible } from './use-collapsible';
6
+ export const CollapsibleRoot = (props) => {
7
+ const [params, localProps] = createSplitProps()(props, [
8
+ 'dir',
9
+ 'disabled',
10
+ 'getRootNode',
11
+ 'id',
12
+ 'ids',
13
+ 'lazyMount',
14
+ 'onExitComplete',
15
+ 'onOpenChange',
16
+ 'open',
17
+ 'unmountOnExit',
18
+ ]);
19
+ const api = useCollapsible(params);
20
+ const mergedProps = mergeProps(() => api().rootProps, localProps);
21
+ return (<CollapsibleProvider value={api}>
22
+ <ark.div {...mergedProps}/>
23
+ </CollapsibleProvider>);
24
+ };
@@ -0,0 +1,8 @@
1
+ import { mergeProps } from '@zag-js/solid';
2
+ import { ark } from '../factory';
3
+ import { useCollapsibleContext } from './collapsible-context';
4
+ export const CollapsibleTrigger = (props) => {
5
+ const api = useCollapsibleContext();
6
+ const mergedProps = () => mergeProps(api().triggerProps, props);
7
+ return <ark.button {...mergedProps}>{props.children}</ark.button>;
8
+ };
@@ -0,0 +1,4 @@
1
+ import { CollapsibleContent as Content } from './collapsible-content';
2
+ import { CollapsibleRoot as Root } from './collapsible-root';
3
+ import { CollapsibleTrigger as Trigger } from './collapsible-trigger';
4
+ export { Content, Root, Trigger };
@@ -0,0 +1,6 @@
1
+ import { CollapsibleContent } from './collapsible-content';
2
+ import { useCollapsibleContext } from './collapsible-context';
3
+ import { CollapsibleRoot } from './collapsible-root';
4
+ import { CollapsibleTrigger } from './collapsible-trigger';
5
+ export * as Collapsible from './collapsible';
6
+ export { CollapsibleContent, CollapsibleRoot, CollapsibleTrigger, useCollapsibleContext };
@@ -0,0 +1,23 @@
1
+ import * as collapsible from '@zag-js/collapsible';
2
+ import { mergeProps, normalizeProps, useMachine } from '@zag-js/solid';
3
+ import { createEffect, createMemo, createSignal, createUniqueId } from 'solid-js';
4
+ import { useEnvironmentContext } from '../environment';
5
+ import { splitRenderStrategyProps } from '../render-strategy';
6
+ export const useCollapsible = (props) => {
7
+ const getRootNode = useEnvironmentContext();
8
+ const [renderStrategyProps, collapsibleProps] = splitRenderStrategyProps(props);
9
+ const context = mergeProps({ id: createUniqueId(), getRootNode }, collapsibleProps);
10
+ const [state, send] = useMachine(collapsible.machine(context), { context });
11
+ const [wasVisible, setWasVisible] = createSignal(false);
12
+ createEffect(() => {
13
+ const isPresent = api().isVisible;
14
+ if (isPresent)
15
+ setWasVisible(true);
16
+ });
17
+ const api = createMemo(() => collapsible.connect(state, send, normalizeProps));
18
+ return createMemo(() => ({
19
+ ...api(),
20
+ isUnmounted: (!api().isVisible && !wasVisible() && renderStrategyProps.lazyMount) ||
21
+ (renderStrategyProps.unmountOnExit && !api().isVisible && wasVisible()),
22
+ }));
23
+ };
@@ -9,7 +9,6 @@ export const useColorPicker = (props) => {
9
9
  id: createUniqueId(),
10
10
  getRootNode,
11
11
  value: local.value ? colorPicker.parse(local.value) : undefined,
12
- 'open.controlled': props.open !== undefined,
13
12
  }), rest);
14
13
  const [state, send] = useMachine(colorPicker.machine(context), { context });
15
14
  return createMemo(() => colorPicker.connect(state, send, normalizeProps));
@@ -10,7 +10,6 @@ export const useDatePicker = (props) => {
10
10
  getRootNode,
11
11
  focusedValue: local.focusedValue ? datePicker.parse(local.focusedValue) : undefined,
12
12
  value: local.value ? datePicker.parse(local.value) : undefined,
13
- 'open.controlled': props.open !== undefined,
14
13
  }), rest);
15
14
  const [state, send] = useMachine(datePicker.machine(context), { context });
16
15
  return createMemo(() => datePicker.connect(state, send, normalizeProps));
@@ -1,12 +1,13 @@
1
1
  import { mergeProps } from '@zag-js/solid';
2
2
  import { Show } from 'solid-js';
3
3
  import { ark } from '../factory';
4
- import { usePresence, usePresencePropsContext } from '../presence';
4
+ import { usePresence } from '../presence';
5
+ import { useRenderStrategyContext } from '../render-strategy';
5
6
  import { useDialogContext } from './dialog-context';
6
7
  export const DialogBackdrop = (props) => {
7
8
  const api = useDialogContext();
8
- const presenceProps = usePresencePropsContext();
9
- const presenceApi = usePresence(mergeProps(presenceProps, () => ({ present: api().isOpen })));
9
+ const renderStrategyProps = useRenderStrategyContext();
10
+ const presenceApi = usePresence(mergeProps(renderStrategyProps, () => ({ present: api().isOpen })));
10
11
  const mergedProps = mergeProps(() => api().backdropProps, () => presenceApi().presenceProps, props);
11
12
  return (<Show when={!presenceApi().isUnmounted}>
12
13
  <ark.div {...mergedProps}/>
@@ -1,11 +1,13 @@
1
1
  import { mergeProps } from '@zag-js/solid';
2
2
  import { createSplitProps } from '../create-split-props';
3
- import { PresencePropsProvider, PresenceProvider, splitPresenceProps, usePresence, } from '../presence';
3
+ import { PresenceProvider, splitPresenceProps, usePresence, } from '../presence';
4
+ import { RenderStrategyProvider, splitRenderStrategyProps } from '../render-strategy';
4
5
  import { runIfFn } from '../run-if-fn';
5
6
  import { DialogProvider } from './dialog-context';
6
7
  import { useDialog } from './use-dialog';
7
8
  export const DialogRoot = (props) => {
8
9
  const [presenceProps, dialogProps] = splitPresenceProps(props);
10
+ const [renderStrategyProps] = splitRenderStrategyProps(presenceProps);
9
11
  const [useDialogProps, localProps] = createSplitProps()(dialogProps, [
10
12
  'aria-label',
11
13
  'closeOnEscapeKeyDown',
@@ -32,8 +34,8 @@ export const DialogRoot = (props) => {
32
34
  const apiPresence = usePresence(mergeProps(presenceProps, () => ({ present: api().isOpen })));
33
35
  const getChildren = () => runIfFn(localProps.children, api);
34
36
  return (<DialogProvider value={api}>
35
- <PresencePropsProvider value={presenceProps}>
37
+ <RenderStrategyProvider value={renderStrategyProps}>
36
38
  <PresenceProvider value={apiPresence}>{getChildren()}</PresenceProvider>
37
- </PresencePropsProvider>
39
+ </RenderStrategyProvider>
38
40
  </DialogProvider>);
39
41
  };
@@ -4,7 +4,7 @@ import { createMemo, createUniqueId } from 'solid-js';
4
4
  import { useEnvironmentContext } from '../environment';
5
5
  export const useDialog = (props) => {
6
6
  const getRootNode = useEnvironmentContext();
7
- const context = mergeProps({ id: createUniqueId(), getRootNode, 'open.controlled': props.open !== undefined }, props);
7
+ const context = mergeProps({ id: createUniqueId(), getRootNode }, props);
8
8
  const [state, send] = useMachine(dialog.machine(context), { context });
9
9
  return createMemo(() => dialog.connect(state, send, normalizeProps));
10
10
  };
@@ -4,7 +4,7 @@ import { createMemo, createUniqueId } from 'solid-js';
4
4
  import { useEnvironmentContext } from '../environment';
5
5
  export const useHoverCard = (props) => {
6
6
  const getRootNode = useEnvironmentContext();
7
- const context = mergeProps({ id: createUniqueId(), getRootNode, 'open.controlled': props.open !== undefined }, props);
7
+ const context = mergeProps({ id: createUniqueId(), getRootNode }, props);
8
8
  const [state, send] = useMachine(hoverCard.machine(context), { context });
9
9
  return createMemo(() => hoverCard.connect(state, send, normalizeProps));
10
10
  };
package/source/index.jsx CHANGED
@@ -3,6 +3,7 @@ export * from './avatar';
3
3
  export * from './carousel';
4
4
  export * from './checkbox';
5
5
  export * from './clipboard';
6
+ export * from './collapsible';
6
7
  export * from './color-picker';
7
8
  export * from './combobox';
8
9
  export * from './date-picker';
@@ -4,7 +4,7 @@ import { createMemo, createUniqueId } from 'solid-js';
4
4
  import { useEnvironmentContext } from '../environment';
5
5
  export const useMenu = (props) => {
6
6
  const getRootNode = useEnvironmentContext();
7
- const context = mergeProps({ id: createUniqueId(), getRootNode, 'open.controlled': props.open !== undefined }, props);
7
+ const context = mergeProps({ id: createUniqueId(), getRootNode }, props);
8
8
  const [state, send, machine] = useMachine(menu.machine(context), { context });
9
9
  return createMemo(() => ({
10
10
  api: () => menu.connect(state, send, normalizeProps),
@@ -4,7 +4,7 @@ import { createMemo, createUniqueId } from 'solid-js';
4
4
  import { useEnvironmentContext } from '../environment';
5
5
  export const usePopover = (props) => {
6
6
  const getRootNode = useEnvironmentContext();
7
- const context = mergeProps({ id: createUniqueId(), getRootNode, 'open.controlled': props.open !== undefined }, props);
7
+ const context = mergeProps({ id: createUniqueId(), getRootNode }, props);
8
8
  const [state, send] = useMachine(popover.machine(context), { context });
9
9
  return createMemo(() => popover.connect(state, send, normalizeProps));
10
10
  };
@@ -1,6 +1,5 @@
1
1
  import { Presence } from './presence';
2
2
  import { PresenceProvider, usePresenceContext } from './presence-context';
3
- import { PresencePropsProvider, usePresencePropsContext, } from './presence-props-context';
4
3
  import { splitPresenceProps } from './split-presence-props';
5
4
  import { usePresence } from './use-presence';
6
- export { Presence, PresencePropsProvider, PresenceProvider, splitPresenceProps, usePresence, usePresenceContext, usePresencePropsContext, };
5
+ export { Presence, PresenceProvider, splitPresenceProps, usePresence, usePresenceContext };
@@ -1,9 +1,7 @@
1
1
  import { createSplitProps } from '../create-split-props';
2
- export function splitPresenceProps(props) {
3
- return createSplitProps()(props, [
4
- 'lazyMount',
5
- 'onExitComplete',
6
- 'present',
7
- 'unmountOnExit',
8
- ]);
9
- }
2
+ export const splitPresenceProps = (props) => createSplitProps()(props, [
3
+ 'lazyMount',
4
+ 'onExitComplete',
5
+ 'present',
6
+ 'unmountOnExit',
7
+ ]);
@@ -1,11 +1,12 @@
1
1
  import * as presence from '@zag-js/presence';
2
2
  import { normalizeProps, useMachine } from '@zag-js/solid';
3
- import { createEffect, createMemo, createSignal, splitProps } from 'solid-js';
3
+ import { createEffect, createMemo, createSignal } from 'solid-js';
4
+ import { splitRenderStrategyProps } from '../render-strategy';
4
5
  export const usePresence = (props) => {
5
- const [localProps, machineProps] = splitProps(props, ['lazyMount', 'unmountOnExit']);
6
+ const [renderStrategyProps, context] = splitRenderStrategyProps(props);
6
7
  const [wasEverPresent, setWasEverPresent] = createSignal(false);
7
- const [state, send] = useMachine(presence.machine(machineProps), {
8
- context: machineProps,
8
+ const [state, send] = useMachine(presence.machine(context), {
9
+ context,
9
10
  });
10
11
  const api = createMemo(() => presence.connect(state, send, normalizeProps));
11
12
  createEffect(() => {
@@ -14,13 +15,13 @@ export const usePresence = (props) => {
14
15
  setWasEverPresent(true);
15
16
  });
16
17
  return createMemo(() => ({
17
- isUnmounted: (!api().isPresent && !wasEverPresent() && localProps.lazyMount) ||
18
- (localProps.unmountOnExit && !api().isPresent && wasEverPresent()),
18
+ isUnmounted: (!api().isPresent && !wasEverPresent() && renderStrategyProps.lazyMount) ||
19
+ (renderStrategyProps.unmountOnExit && !api().isPresent && wasEverPresent()),
19
20
  isPresent: api().isPresent,
20
21
  presenceProps: {
21
22
  ref: api().setNode,
22
23
  hidden: !api().isPresent,
23
- 'data-state': machineProps.present ? 'open' : 'closed',
24
+ 'data-state': context.present ? 'open' : 'closed',
24
25
  },
25
26
  }));
26
27
  };
@@ -0,0 +1,7 @@
1
+ import { createContext } from './create-context';
2
+ import { createSplitProps } from './create-split-props';
3
+ export const [RenderStrategyProvider, useRenderStrategyContext] = createContext({
4
+ hookName: 'useRenderStrategyContext',
5
+ providerName: '<RenderStrategyProvider />',
6
+ });
7
+ export const splitRenderStrategyProps = (props) => createSplitProps()(props, ['lazyMount', 'unmountOnExit']);
@@ -16,7 +16,6 @@ export const useSelect = (props) => {
16
16
  id: createUniqueId(),
17
17
  getRootNode,
18
18
  collection: collection(),
19
- 'open.controlled': props.open !== undefined,
20
19
  }, rest);
21
20
  const [state, send] = useMachine(select.machine(context()), {
22
21
  context,
@@ -12,7 +12,6 @@ export const SplitterRoot = (props) => {
12
12
  'ids',
13
13
  'onSizeChange',
14
14
  'onSizeChangeEnd',
15
- 'onSizeChangeStart',
16
15
  'orientation',
17
16
  'size',
18
17
  ]);
@@ -2,13 +2,14 @@ import { mergeProps } from '@zag-js/solid';
2
2
  import { Show } from 'solid-js';
3
3
  import { createSplitProps } from '../create-split-props';
4
4
  import { ark } from '../factory';
5
- import { PresenceProvider, usePresence, usePresencePropsContext } from '../presence';
5
+ import { PresenceProvider, usePresence } from '../presence';
6
+ import { useRenderStrategyContext } from '../render-strategy';
6
7
  import { useTabsContext } from './tabs-context';
7
8
  export const TabContent = (props) => {
8
9
  const [contentProps, localProps] = createSplitProps()(props, ['value']);
9
10
  const api = useTabsContext();
10
- const presenceProps = usePresencePropsContext();
11
- const presenceApi = usePresence(mergeProps(presenceProps, () => ({ present: api().value === contentProps.value })));
11
+ const renderStrategyProps = useRenderStrategyContext();
12
+ const presenceApi = usePresence(mergeProps(renderStrategyProps, () => ({ present: api().value === contentProps.value })));
12
13
  const mergedProps = mergeProps(() => api().getContentProps(contentProps), () => presenceApi().presenceProps, localProps);
13
14
  return (<PresenceProvider value={presenceApi}>
14
15
  <Show when={!presenceApi().isUnmounted}>
@@ -1,11 +1,11 @@
1
1
  import { mergeProps } from '@zag-js/solid';
2
2
  import { createSplitProps } from '../create-split-props';
3
3
  import { ark } from '../factory';
4
- import { PresencePropsProvider, splitPresenceProps } from '../presence';
4
+ import { RenderStrategyProvider, splitRenderStrategyProps, } from '../render-strategy';
5
5
  import { TabsProvider } from './tabs-context';
6
6
  import { useTabs } from './use-tabs';
7
7
  export const TabsRoot = (props) => {
8
- const [presenceProps, tabsProps] = splitPresenceProps(props);
8
+ const [renderStrategyProps, tabsProps] = splitRenderStrategyProps(props);
9
9
  const [tabsParams, restProps] = createSplitProps()(tabsProps, [
10
10
  'activationMode',
11
11
  'dir',
@@ -22,8 +22,8 @@ export const TabsRoot = (props) => {
22
22
  const api = useTabs(tabsParams);
23
23
  const mergedProps = mergeProps(() => api().rootProps, restProps);
24
24
  return (<TabsProvider value={api}>
25
- <PresencePropsProvider value={presenceProps}>
25
+ <RenderStrategyProvider value={renderStrategyProps}>
26
26
  <ark.div {...mergedProps}/>
27
- </PresencePropsProvider>
27
+ </RenderStrategyProvider>
28
28
  </TabsProvider>);
29
29
  };
@@ -4,7 +4,7 @@ import { createMemo, createUniqueId } from 'solid-js';
4
4
  import { useEnvironmentContext } from '../environment';
5
5
  export const useTooltip = (props) => {
6
6
  const getRootNode = useEnvironmentContext();
7
- const context = mergeProps({ id: createUniqueId(), getRootNode, 'open.controlled': props.open !== undefined }, props);
7
+ const context = mergeProps({ id: createUniqueId(), getRootNode }, props);
8
8
  const [state, send] = useMachine(tooltip.machine(context), { context });
9
9
  return createMemo(() => tooltip.connect(state, send, normalizeProps));
10
10
  };
@@ -1,4 +1,3 @@
1
- import { treeViewAnatomy } from '@ark-ui/anatomy';
2
1
  import { mergeProps } from '@zag-js/solid';
3
2
  import { ark } from '../factory';
4
3
  import { useTreeViewBranchContext } from './tree-view-branch-context';
@@ -6,8 +5,6 @@ import { useTreeViewContext } from './tree-view-context';
6
5
  export const TreeViewBranchIndicator = (props) => {
7
6
  const api = useTreeViewContext();
8
7
  const branchProps = useTreeViewBranchContext();
9
- const mergedProps = mergeProps(() => api().getBranchProps(branchProps),
10
- // TODO use api.getBranchIndicatorProps() when available
11
- treeViewAnatomy.build().branchIndicator.attrs, props);
8
+ const mergedProps = mergeProps(() => api().getBranchIndicatorProps(branchProps), props);
12
9
  return <ark.div {...mergedProps}/>;
13
10
  };
@@ -0,0 +1,4 @@
1
+ import { type ArkComponent, type HTMLArkProps } from '../factory';
2
+ export interface CollapsibleContentProps extends HTMLArkProps<'div'> {
3
+ }
4
+ export declare const CollapsibleContent: ArkComponent<'div'>;
@@ -0,0 +1,4 @@
1
+ import { type UseCollapsibleReturn } from './use-collapsible';
2
+ export interface CollapsibleContext extends UseCollapsibleReturn {
3
+ }
4
+ export declare const CollapsibleProvider: import("solid-js").ContextProviderComponent<CollapsibleContext>, useCollapsibleContext: () => CollapsibleContext;
@@ -0,0 +1,6 @@
1
+ import { type ArkComponent, type HTMLArkProps } from '../factory';
2
+ import type { Assign } from '../types';
3
+ import { type UseCollapsibleProps } from './use-collapsible';
4
+ export interface CollapsibleRootProps extends Assign<HTMLArkProps<'div'>, UseCollapsibleProps> {
5
+ }
6
+ export declare const CollapsibleRoot: ArkComponent<'div', UseCollapsibleProps>;
@@ -0,0 +1,4 @@
1
+ import { type ArkComponent, type HTMLArkProps } from '../factory';
2
+ export interface CollapsibleTriggerProps extends HTMLArkProps<'button'> {
3
+ }
4
+ export declare const CollapsibleTrigger: ArkComponent<'button'>;
@@ -0,0 +1,4 @@
1
+ import { CollapsibleContent as Content } from './collapsible-content';
2
+ import { CollapsibleRoot as Root } from './collapsible-root';
3
+ import { CollapsibleTrigger as Trigger } from './collapsible-trigger';
4
+ export { Content, Root, Trigger };
@@ -0,0 +1,8 @@
1
+ import type { OpenChangeDetails as CollapsibleOpenChangeDetails } from '@zag-js/collapsible';
2
+ import { CollapsibleContent, type CollapsibleContentProps } from './collapsible-content';
3
+ import { useCollapsibleContext, type CollapsibleContext } from './collapsible-context';
4
+ import { CollapsibleRoot, type CollapsibleRootProps } from './collapsible-root';
5
+ import { CollapsibleTrigger, type CollapsibleTriggerProps } from './collapsible-trigger';
6
+ export * as Collapsible from './collapsible';
7
+ export { CollapsibleContent, CollapsibleRoot, CollapsibleTrigger, useCollapsibleContext };
8
+ export type { CollapsibleContentProps, CollapsibleContext, CollapsibleOpenChangeDetails, CollapsibleRootProps, CollapsibleTriggerProps, };
@@ -0,0 +1,15 @@
1
+ import * as collapsible from '@zag-js/collapsible';
2
+ import { type PropTypes } from '@zag-js/solid';
3
+ import { type Accessor } from 'solid-js';
4
+ import { type RenderStrategyProps } from '../render-strategy';
5
+ import { type Optional } from '../types';
6
+ export interface UseCollapsibleProps extends Optional<Omit<collapsible.Context, 'open.controlled'>, 'id'>, RenderStrategyProps {
7
+ }
8
+ export interface UseCollapsibleReturn extends Accessor<collapsible.Api<PropTypes> & {
9
+ /**
10
+ * Whether the content is unmounted
11
+ */
12
+ isUnmounted?: boolean;
13
+ }> {
14
+ }
15
+ export declare const useCollapsible: (props: UseCollapsibleProps) => UseCollapsibleReturn;