@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.
- package/CHANGELOG.md +44 -0
- package/cjs/index.js +113 -49
- package/cjs/index.js.map +1 -1
- package/esm/index.js +109 -49
- package/esm/index.js.map +1 -1
- package/package.json +53 -52
- package/source/accordion/accordion-item.jsx +4 -3
- package/source/accordion/accordion-root.jsx +4 -4
- package/source/collapsible/collapsible-content.jsx +11 -0
- package/source/collapsible/collapsible-context.js +5 -0
- package/source/collapsible/collapsible-root.jsx +24 -0
- package/source/collapsible/collapsible-trigger.jsx +8 -0
- package/source/collapsible/collapsible.jsx +4 -0
- package/source/collapsible/index.js +6 -0
- package/source/collapsible/use-collapsible.js +23 -0
- package/source/color-picker/use-color-picker.js +0 -1
- package/source/date-picker/use-date-picker.js +0 -1
- package/source/dialog/dialog-backdrop.jsx +4 -3
- package/source/dialog/dialog-root.jsx +5 -3
- package/source/dialog/use-dialog.js +1 -1
- package/source/hover-card/use-hover-card.js +1 -1
- package/source/index.jsx +1 -0
- package/source/menu/use-menu.js +1 -1
- package/source/popover/use-popover.js +1 -1
- package/source/presence/index.js +1 -2
- package/source/presence/split-presence-props.js +6 -8
- package/source/presence/use-presence.js +8 -7
- package/source/render-strategy.js +7 -0
- package/source/select/use-select.js +0 -1
- package/source/splitter/splitter-root.jsx +0 -1
- package/source/tabs/tab-content.jsx +4 -3
- package/source/tabs/tabs-root.jsx +4 -4
- package/source/tooltip/use-tooltip.js +1 -1
- package/source/tree-view/tree-view-branch-indicator.jsx +1 -4
- package/types/collapsible/collapsible-content.d.ts +4 -0
- package/types/collapsible/collapsible-context.d.ts +4 -0
- package/types/collapsible/collapsible-root.d.ts +6 -0
- package/types/collapsible/collapsible-trigger.d.ts +4 -0
- package/types/collapsible/collapsible.d.ts +4 -0
- package/types/collapsible/index.d.ts +8 -0
- package/types/collapsible/use-collapsible.d.ts +15 -0
- package/types/index.d.ts +1 -0
- package/types/menu/menu-item-group.d.ts +3 -5
- package/types/presence/index.d.ts +2 -3
- package/types/presence/split-presence-props.d.ts +1 -1
- package/types/presence/use-presence.d.ts +2 -11
- package/types/render-strategy.d.ts +14 -0
- package/types/tabs/tabs-root.d.ts +2 -2
- package/source/presence/presence-props-context.js +0 -5
- 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.
|
|
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.
|
|
88
|
-
"@zag-js/accordion": "0.
|
|
89
|
-
"@zag-js/avatar": "0.
|
|
90
|
-
"@zag-js/carousel": "0.
|
|
91
|
-
"@zag-js/checkbox": "0.
|
|
92
|
-
"@zag-js/clipboard": "0.
|
|
93
|
-
"@zag-js/collapsible": "0.
|
|
94
|
-
"@zag-js/color-picker": "0.
|
|
95
|
-
"@zag-js/combobox": "0.
|
|
96
|
-
"@zag-js/date-picker": "0.
|
|
97
|
-
"@zag-js/dialog": "0.
|
|
98
|
-
"@zag-js/editable": "0.
|
|
99
|
-
"@zag-js/file-upload": "0.
|
|
100
|
-
"@zag-js/hover-card": "0.
|
|
101
|
-
"@zag-js/i18n-utils": "0.
|
|
102
|
-
"@zag-js/menu": "0.
|
|
103
|
-
"@zag-js/number-input": "0.
|
|
104
|
-
"@zag-js/pagination": "0.
|
|
105
|
-
"@zag-js/pin-input": "0.
|
|
106
|
-
"@zag-js/popover": "0.
|
|
107
|
-
"@zag-js/presence": "0.
|
|
108
|
-
"@zag-js/progress": "0.
|
|
109
|
-
"@zag-js/radio-group": "0.
|
|
110
|
-
"@zag-js/rating-group": "0.
|
|
111
|
-
"@zag-js/select": "0.
|
|
112
|
-
"@zag-js/slider": "0.
|
|
113
|
-
"@zag-js/solid": "0.
|
|
114
|
-
"@zag-js/splitter": "0.
|
|
115
|
-
"@zag-js/switch": "0.
|
|
116
|
-
"@zag-js/tabs": "0.
|
|
117
|
-
"@zag-js/tags-input": "0.
|
|
118
|
-
"@zag-js/toast": "0.
|
|
119
|
-
"@zag-js/toggle-group": "0.
|
|
120
|
-
"@zag-js/tooltip": "0.
|
|
121
|
-
"@zag-js/tree-view": "0.
|
|
122
|
-
"@zag-js/types": "0.
|
|
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.
|
|
128
|
-
"@storybook/addon-interactions": "7.6.
|
|
129
|
-
"@storybook/addon-links": "7.6.
|
|
130
|
-
"@storybook/blocks": "7.6.
|
|
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": "
|
|
138
|
-
"@typescript-eslint/parser": "
|
|
139
|
-
"@vitest/coverage-v8": "1.
|
|
140
|
-
"eslint": "8.
|
|
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.
|
|
148
|
+
"release-it": "17.1.1",
|
|
148
149
|
"resize-observer-polyfill": "1.5.1",
|
|
149
|
-
"rollup": "4.
|
|
150
|
+
"rollup": "4.12.0",
|
|
150
151
|
"rollup-preset-solid": "2.0.1",
|
|
151
|
-
"solid-js": "1.8.
|
|
152
|
-
"storybook": "7.6.
|
|
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.
|
|
157
|
-
"vite-plugin-solid": "2.
|
|
158
|
-
"vitest": "1.
|
|
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
|
|
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
|
|
12
|
-
const presenceApi = usePresence(mergeProps(
|
|
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 {
|
|
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 [
|
|
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
|
-
<
|
|
25
|
+
<RenderStrategyProvider value={renderStrategyProps}>
|
|
26
26
|
<ark.div {...mergedProps}/>
|
|
27
|
-
</
|
|
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,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,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
|
|
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
|
|
9
|
-
const presenceApi = usePresence(mergeProps(
|
|
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 {
|
|
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
|
-
<
|
|
37
|
+
<RenderStrategyProvider value={renderStrategyProps}>
|
|
36
38
|
<PresenceProvider value={apiPresence}>{getChildren()}</PresenceProvider>
|
|
37
|
-
</
|
|
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
|
|
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
|
|
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
package/source/menu/use-menu.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
};
|
package/source/presence/index.js
CHANGED
|
@@ -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,
|
|
5
|
+
export { Presence, PresenceProvider, splitPresenceProps, usePresence, usePresenceContext };
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { createSplitProps } from '../create-split-props';
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
|
3
|
+
import { createEffect, createMemo, createSignal } from 'solid-js';
|
|
4
|
+
import { splitRenderStrategyProps } from '../render-strategy';
|
|
4
5
|
export const usePresence = (props) => {
|
|
5
|
-
const [
|
|
6
|
+
const [renderStrategyProps, context] = splitRenderStrategyProps(props);
|
|
6
7
|
const [wasEverPresent, setWasEverPresent] = createSignal(false);
|
|
7
|
-
const [state, send] = useMachine(presence.machine(
|
|
8
|
-
context
|
|
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() &&
|
|
18
|
-
(
|
|
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':
|
|
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']);
|
|
@@ -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
|
|
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
|
|
11
|
-
const presenceApi = usePresence(mergeProps(
|
|
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 {
|
|
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 [
|
|
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
|
-
<
|
|
25
|
+
<RenderStrategyProvider value={renderStrategyProps}>
|
|
26
26
|
<ark.div {...mergedProps}/>
|
|
27
|
-
</
|
|
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
|
|
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().
|
|
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 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,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;
|