@ark-ui/solid 0.10.0 → 0.11.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 (59) hide show
  1. package/CHANGELOG.md +21 -2
  2. package/accordion/accordion-content.cjs +14 -3
  3. package/accordion/accordion-content.d.ts +2 -1
  4. package/accordion/accordion-content.mjs +15 -4
  5. package/combobox/combobox-content.cjs +14 -3
  6. package/combobox/combobox-content.d.ts +2 -1
  7. package/combobox/combobox-content.mjs +15 -4
  8. package/dialog/dialog-backdrop.cjs +14 -3
  9. package/dialog/dialog-backdrop.d.ts +2 -1
  10. package/dialog/dialog-backdrop.mjs +15 -4
  11. package/dialog/dialog-content.cjs +14 -3
  12. package/dialog/dialog-content.d.ts +2 -1
  13. package/dialog/dialog-content.mjs +15 -4
  14. package/factory.cjs +0 -1
  15. package/factory.d.ts +0 -1
  16. package/factory.mjs +1 -1
  17. package/hover-card/hover-card-content.cjs +14 -3
  18. package/hover-card/hover-card-content.d.ts +2 -1
  19. package/hover-card/hover-card-content.mjs +15 -4
  20. package/index.cjs +88 -48
  21. package/index.d.ts +3 -0
  22. package/index.mjs +20 -0
  23. package/menu/menu-content.cjs +14 -3
  24. package/menu/menu-content.d.ts +2 -1
  25. package/menu/menu-content.mjs +15 -4
  26. package/package.json +11 -4
  27. package/popover/popover-content.cjs +13 -2
  28. package/popover/popover-content.d.ts +2 -1
  29. package/popover/popover-content.mjs +14 -3
  30. package/presence/index.cjs +13 -0
  31. package/presence/index.d.ts +8 -0
  32. package/presence/index.mjs +8 -0
  33. package/presence/presence.cjs +33 -0
  34. package/presence/presence.d.ts +17 -0
  35. package/presence/presence.mjs +29 -0
  36. package/presence/presence.stories.d.ts +10 -0
  37. package/presence/presence.test.d.ts +1 -0
  38. package/presence/split-presence-props.cjs +16 -0
  39. package/presence/split-presence-props.d.ts +2 -0
  40. package/presence/split-presence-props.mjs +12 -0
  41. package/presence/use-presence.cjs +35 -0
  42. package/presence/use-presence.d.ts +5 -0
  43. package/presence/use-presence.mjs +12 -0
  44. package/select/select-content.cjs +13 -2
  45. package/select/select-content.d.ts +2 -1
  46. package/select/select-content.mjs +14 -3
  47. package/tabs/tab-content.cjs +11 -3
  48. package/tabs/tab-content.d.ts +3 -4
  49. package/tabs/tab-content.mjs +12 -4
  50. package/tabs/tab-presence.cjs +18 -0
  51. package/tabs/tab-presence.d.ts +5 -0
  52. package/tabs/tab-presence.mjs +14 -0
  53. package/tabs/tabs.test.d.ts +1 -0
  54. package/tags-input/index.d.ts +1 -1
  55. package/tooltip/tooltip-content.cjs +13 -2
  56. package/tooltip/tooltip-content.d.ts +2 -1
  57. package/tooltip/tooltip-content.mjs +14 -3
  58. package/tooltip/tooltip-positioner.cjs +1 -9
  59. package/tooltip/tooltip-positioner.mjs +1 -9
package/index.mjs CHANGED
@@ -3,17 +3,20 @@ export { Accordion } from './accordion/index.mjs';
3
3
  export { Avatar } from './avatar/index.mjs';
4
4
  export { Carousel } from './carousel/index.mjs';
5
5
  export { Checkbox } from './checkbox/index.mjs';
6
+ export { ColorPicker } from './color-picker/index.mjs';
6
7
  export { Combobox } from './combobox/index.mjs';
7
8
  export { DatePicker } from './date-picker/index.mjs';
8
9
  export { Dialog } from './dialog/index.mjs';
9
10
  export { Editable } from './editable/index.mjs';
10
11
  export { Environment } from './environment/index.mjs';
12
+ export { ark } from './factory.mjs';
11
13
  export { HoverCard } from './hover-card/index.mjs';
12
14
  export { Menu } from './menu/index.mjs';
13
15
  export { NumberInput } from './number-input/index.mjs';
14
16
  export { Pagination } from './pagination/index.mjs';
15
17
  export { PinInput } from './pin-input/index.mjs';
16
18
  export { Popover } from './popover/index.mjs';
19
+ export { Presence } from './presence/index.mjs';
17
20
  export { Pressable } from './pressable/index.mjs';
18
21
  export { RadioGroup } from './radio-group/index.mjs';
19
22
  export { RangeSlider } from './range-slider/index.mjs';
@@ -51,6 +54,22 @@ export { CheckboxControl } from './checkbox/checkbox-control.mjs';
51
54
  export { CheckboxLabel } from './checkbox/checkbox-label.mjs';
52
55
  export { anatomy as checkboxAnatomy } from '@zag-js/checkbox';
53
56
  export { useCheckboxContext } from './checkbox/checkbox-context.mjs';
57
+ export { ColorPickerArea } from './color-picker/color-picker-area.mjs';
58
+ export { ColorPickerAreaGradient } from './color-picker/color-picker-area-gradient.mjs';
59
+ export { ColorPickerAreaThumb } from './color-picker/color-picker-area-thumb.mjs';
60
+ export { ColorPickerChannelInput } from './color-picker/color-picker-channel-input.mjs';
61
+ export { ColorPickerChannelSliderBackground } from './color-picker/color-picker-channel-slider-background.mjs';
62
+ export { ColorPickerChannelSliderThumb } from './color-picker/color-picker-channel-slider-thumb.mjs';
63
+ export { ColorPickerChannelSliderTrack } from './color-picker/color-picker-channel-slider-track.mjs';
64
+ export { ColorPickerContent } from './color-picker/color-picker-content.mjs';
65
+ export { ColorPickerEyeDropperTrigger } from './color-picker/color-picker-eye-dropper-trigger.mjs';
66
+ export { ColorPickerSwatch } from './color-picker/color-picker-swatch.mjs';
67
+ export { ColorPickerSwatchBackground } from './color-picker/color-picker-swatch-background.mjs';
68
+ export { ColorPickerSwatchGroup } from './color-picker/color-picker-swatch-group.mjs';
69
+ export { colorPickerAnatomy } from './color-picker/color-picker.anatomy.mjs';
70
+ export { useColorPickerAreaContext } from './color-picker/color-picker-area-context.mjs';
71
+ export { useColorPickerContext } from './color-picker/color-picker-context.mjs';
72
+ export { useColorPickerSwatchContext } from './color-picker/color-picker-swatch-context.mjs';
54
73
  export { ComboboxClearTrigger } from './combobox/combobox-clear-trigger.mjs';
55
74
  export { ComboboxContent } from './combobox/combobox-content.mjs';
56
75
  export { ComboboxControl } from './combobox/combobox-control.mjs';
@@ -162,6 +181,7 @@ export { PopoverTitle } from './popover/popover-title.mjs';
162
181
  export { PopoverTrigger } from './popover/popover-trigger.mjs';
163
182
  export { anatomy as popoverAnatomy } from '@zag-js/popover';
164
183
  export { usePopoverContext } from './popover/popover-context.mjs';
184
+ export { splitPresenceProps } from './presence/split-presence-props.mjs';
165
185
  export { usePressable } from './pressable/use-pressable.mjs';
166
186
  export { Radio } from './radio-group/radio.mjs';
167
187
  export { RadioControl } from './radio-group/radio-control.mjs';
@@ -5,12 +5,23 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const web = require('solid-js/web');
6
6
  const solid = require('@zag-js/solid');
7
7
  const factory = require('../factory.cjs');
8
+ const index = require('../presence/index.cjs');
8
9
  const menuContext = require('./menu-context.cjs');
10
+ const splitPresenceProps = require('../presence/split-presence-props.cjs');
9
11
 
10
12
  const MenuContent = props => {
11
- const menu = menuContext.useMenuContext();
12
- const contentProps = solid.mergeProps(() => menu?.().contentProps, props);
13
- return web.createComponent(factory.ark.div, contentProps);
13
+ const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
14
+ const api = menuContext.useMenuContext();
15
+ const mergedProps = solid.mergeProps(() => api?.().contentProps, localProps);
16
+ return web.createComponent(index.Presence, web.mergeProps({
17
+ get present() {
18
+ return api?.().isOpen;
19
+ }
20
+ }, presenceProps, {
21
+ get children() {
22
+ return web.createComponent(factory.ark.div, mergedProps);
23
+ }
24
+ }));
14
25
  };
15
26
 
16
27
  exports.MenuContent = MenuContent;
@@ -1,4 +1,5 @@
1
1
  import { JSX } from 'solid-js';
2
2
  import { type HTMLArkProps } from '../factory';
3
- export type MenuContentProps = HTMLArkProps<'div'>;
3
+ import { type PresenceProps } from '../presence';
4
+ export type MenuContentProps = HTMLArkProps<'div'> & PresenceProps;
4
5
  export declare const MenuContent: (props: MenuContentProps) => JSX.Element;
@@ -1,12 +1,23 @@
1
- import { createComponent } from 'solid-js/web';
1
+ import { createComponent, mergeProps as mergeProps$1 } from 'solid-js/web';
2
2
  import { mergeProps } from '@zag-js/solid';
3
3
  import { ark } from '../factory.mjs';
4
+ import { Presence } from '../presence/index.mjs';
4
5
  import { useMenuContext } from './menu-context.mjs';
6
+ import { splitPresenceProps } from '../presence/split-presence-props.mjs';
5
7
 
6
8
  const MenuContent = props => {
7
- const menu = useMenuContext();
8
- const contentProps = mergeProps(() => menu?.().contentProps, props);
9
- return createComponent(ark.div, contentProps);
9
+ const [presenceProps, localProps] = splitPresenceProps(props);
10
+ const api = useMenuContext();
11
+ const mergedProps = mergeProps(() => api?.().contentProps, localProps);
12
+ return createComponent(Presence, mergeProps$1({
13
+ get present() {
14
+ return api?.().isOpen;
15
+ }
16
+ }, presenceProps, {
17
+ get children() {
18
+ return createComponent(ark.div, mergedProps);
19
+ }
20
+ }));
10
21
  };
11
22
 
12
23
  export { MenuContent };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ark-ui/solid",
3
- "version": "0.10.0",
3
+ "version": "0.11.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",
@@ -19,6 +19,7 @@
19
19
  "pagination",
20
20
  "pin input",
21
21
  "popover",
22
+ "presence",
22
23
  "pressable",
23
24
  "radio group",
24
25
  "range slider",
@@ -75,6 +76,7 @@
75
76
  "@zag-js/pagination": "0.17.0",
76
77
  "@zag-js/pin-input": "0.17.0",
77
78
  "@zag-js/popover": "0.17.0",
79
+ "@zag-js/presence": "0.17.0",
78
80
  "@zag-js/pressable": "0.17.0",
79
81
  "@zag-js/radio-group": "0.17.0",
80
82
  "@zag-js/range-slider": "0.17.0",
@@ -99,12 +101,12 @@
99
101
  "@storybook/blocks": "7.4.0",
100
102
  "@storybook/testing-library": "0.2.0",
101
103
  "@testing-library/dom": "9.3.1",
102
- "@testing-library/jest-dom": "6.1.2",
104
+ "@testing-library/jest-dom": "6.1.3",
103
105
  "@testing-library/user-event": "14.4.3",
104
106
  "@types/jsdom": "21.1.2",
105
107
  "@types/testing-library__jest-dom": "5.14.9",
106
- "@typescript-eslint/eslint-plugin": "6.5.0",
107
- "@typescript-eslint/parser": "6.5.0",
108
+ "@typescript-eslint/eslint-plugin": "6.6.0",
109
+ "@typescript-eslint/parser": "6.6.0",
108
110
  "@vitest/coverage-v8": "0.34.3",
109
111
  "eslint": "8.48.0",
110
112
  "globby": "13.2.2",
@@ -217,6 +219,11 @@
217
219
  "import": "./popover/index.mjs",
218
220
  "require": "./popover/index.cjs"
219
221
  },
222
+ "./presence": {
223
+ "types": "./presence/index.d.ts",
224
+ "import": "./presence/index.mjs",
225
+ "require": "./presence/index.cjs"
226
+ },
220
227
  "./pressable": {
221
228
  "types": "./pressable/index.d.ts",
222
229
  "import": "./pressable/index.mjs",
@@ -5,12 +5,23 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const web = require('solid-js/web');
6
6
  const solid = require('@zag-js/solid');
7
7
  const factory = require('../factory.cjs');
8
+ const index = require('../presence/index.cjs');
8
9
  const popoverContext = require('./popover-context.cjs');
10
+ const splitPresenceProps = require('../presence/split-presence-props.cjs');
9
11
 
10
12
  const PopoverContent = props => {
13
+ const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
11
14
  const api = popoverContext.usePopoverContext();
12
- const contentProps = solid.mergeProps(() => api().contentProps, props);
13
- return web.createComponent(factory.ark.div, contentProps);
15
+ const mergedProps = solid.mergeProps(() => api().contentProps, localProps);
16
+ return web.createComponent(index.Presence, web.mergeProps({
17
+ get present() {
18
+ return api().isOpen;
19
+ }
20
+ }, presenceProps, {
21
+ get children() {
22
+ return web.createComponent(factory.ark.div, mergedProps);
23
+ }
24
+ }));
14
25
  };
15
26
 
16
27
  exports.PopoverContent = PopoverContent;
@@ -1,4 +1,5 @@
1
1
  import { JSX } from 'solid-js';
2
2
  import { type HTMLArkProps } from '../factory';
3
- export type PopoverContentProps = HTMLArkProps<'div'>;
3
+ import { type PresenceProps } from '../presence';
4
+ export type PopoverContentProps = HTMLArkProps<'div'> & PresenceProps;
4
5
  export declare const PopoverContent: (props: PopoverContentProps) => JSX.Element;
@@ -1,12 +1,23 @@
1
- import { createComponent } from 'solid-js/web';
1
+ import { createComponent, mergeProps as mergeProps$1 } from 'solid-js/web';
2
2
  import { mergeProps } from '@zag-js/solid';
3
3
  import { ark } from '../factory.mjs';
4
+ import { Presence } from '../presence/index.mjs';
4
5
  import { usePopoverContext } from './popover-context.mjs';
6
+ import { splitPresenceProps } from '../presence/split-presence-props.mjs';
5
7
 
6
8
  const PopoverContent = props => {
9
+ const [presenceProps, localProps] = splitPresenceProps(props);
7
10
  const api = usePopoverContext();
8
- const contentProps = mergeProps(() => api().contentProps, props);
9
- return createComponent(ark.div, contentProps);
11
+ const mergedProps = mergeProps(() => api().contentProps, localProps);
12
+ return createComponent(Presence, mergeProps$1({
13
+ get present() {
14
+ return api().isOpen;
15
+ }
16
+ }, presenceProps, {
17
+ get children() {
18
+ return createComponent(ark.div, mergedProps);
19
+ }
20
+ }));
10
21
  };
11
22
 
12
23
  export { PopoverContent };
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const presence = require('./presence.cjs');
6
+ const splitPresenceProps = require('./split-presence-props.cjs');
7
+
8
+ const Presence = Object.assign(presence.Presence, {
9
+ Root: presence.Presence
10
+ });
11
+
12
+ exports.splitPresenceProps = splitPresenceProps.splitPresenceProps;
13
+ exports.Presence = Presence;
@@ -0,0 +1,8 @@
1
+ import { JSX } from 'solid-js';
2
+ import { type PresenceProps } from './presence';
3
+ import { splitPresenceProps } from './split-presence-props';
4
+ declare const Presence: ((props: PresenceProps) => JSX.Element) & {
5
+ Root: (props: PresenceProps) => JSX.Element;
6
+ };
7
+ export { Presence, splitPresenceProps };
8
+ export type { PresenceProps };
@@ -0,0 +1,8 @@
1
+ import { Presence as Presence$1 } from './presence.mjs';
2
+ export { splitPresenceProps } from './split-presence-props.mjs';
3
+
4
+ const Presence = Object.assign(Presence$1, {
5
+ Root: Presence$1
6
+ });
7
+
8
+ export { Presence };
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const web = require('solid-js/web');
6
+ const solidJs = require('solid-js');
7
+ const createSplitProps = require('../create-split-props.cjs');
8
+ const usePresence = require('./use-presence.cjs');
9
+
10
+ const Presence = props => {
11
+ const [presenceProps, localProps] = createSplitProps.createSplitProps()(props, ['onExitComplete', 'present']);
12
+ const api = usePresence.usePresence(presenceProps);
13
+ const [wasEverPresent, setWasEverPresent] = solidJs.createSignal(false);
14
+ const getChildren = solidJs.children(() => props.children);
15
+ solidJs.createEffect(() => {
16
+ const isPresent = api().isPresent;
17
+ if (isPresent) setWasEverPresent(true);
18
+ const children = getChildren();
19
+ if (children instanceof HTMLElement) {
20
+ api().setNode(children);
21
+ web.spread(children, {
22
+ ['data-state']: presenceProps.present ? 'open' : 'closed',
23
+ hidden: !api().isPresent
24
+ });
25
+ }
26
+ });
27
+ return web.memo((() => {
28
+ const _c$ = web.memo(() => !!(!api().isPresent && !wasEverPresent() && localProps.lazyMount || localProps.unmountOnExit && !api().isPresent && wasEverPresent()));
29
+ return () => _c$() ? null : getChildren();
30
+ })());
31
+ };
32
+
33
+ exports.Presence = Presence;
@@ -0,0 +1,17 @@
1
+ import { JSX, type JSXElement } from 'solid-js';
2
+ import { type UsePresenceProps } from './use-presence';
3
+ export type PresenceProps = UsePresenceProps & {
4
+ /**
5
+ * Whether to enable lazy mounting. Defaults to `false`.
6
+ */
7
+ lazyMount?: boolean;
8
+ /**
9
+ * Whether to unmount on exit. Defaults to `false`.
10
+ */
11
+ unmountOnExit?: boolean;
12
+ /**
13
+ * The children to render.
14
+ */
15
+ children?: JSXElement;
16
+ };
17
+ export declare const Presence: (props: PresenceProps) => JSX.Element;
@@ -0,0 +1,29 @@
1
+ import { spread, memo } from 'solid-js/web';
2
+ import { createSignal, children, createEffect } from 'solid-js';
3
+ import { createSplitProps } from '../create-split-props.mjs';
4
+ import { usePresence } from './use-presence.mjs';
5
+
6
+ const Presence = props => {
7
+ const [presenceProps, localProps] = createSplitProps()(props, ['onExitComplete', 'present']);
8
+ const api = usePresence(presenceProps);
9
+ const [wasEverPresent, setWasEverPresent] = createSignal(false);
10
+ const getChildren = children(() => props.children);
11
+ createEffect(() => {
12
+ const isPresent = api().isPresent;
13
+ if (isPresent) setWasEverPresent(true);
14
+ const children = getChildren();
15
+ if (children instanceof HTMLElement) {
16
+ api().setNode(children);
17
+ spread(children, {
18
+ ['data-state']: presenceProps.present ? 'open' : 'closed',
19
+ hidden: !api().isPresent
20
+ });
21
+ }
22
+ });
23
+ return memo((() => {
24
+ const _c$ = memo(() => !!(!api().isPresent && !wasEverPresent() && localProps.lazyMount || localProps.unmountOnExit && !api().isPresent && wasEverPresent()));
25
+ return () => _c$() ? null : getChildren();
26
+ })());
27
+ };
28
+
29
+ export { Presence };
@@ -0,0 +1,10 @@
1
+ import { JSX } from 'solid-js';
2
+ import type { Meta } from 'storybook-solidjs';
3
+ import { Presence } from './presence';
4
+ type PresenceType = typeof Presence;
5
+ declare const meta: Meta<PresenceType>;
6
+ export default meta;
7
+ export declare const Basic: () => JSX.Element;
8
+ export declare const LazyMount: () => JSX.Element;
9
+ export declare const UnmountOnExit: () => JSX.Element;
10
+ export declare const LazyMountAndUnmountOnExit: () => JSX.Element;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const createSplitProps = require('../create-split-props.cjs');
6
+
7
+ function splitPresenceProps(props) {
8
+ return createSplitProps.createSplitProps()(props, [
9
+ "lazyMount",
10
+ "onExitComplete",
11
+ "present",
12
+ "unmountOnExit"
13
+ ]);
14
+ }
15
+
16
+ exports.splitPresenceProps = splitPresenceProps;
@@ -0,0 +1,2 @@
1
+ import type { PresenceProps } from './presence';
2
+ export declare function splitPresenceProps<T>(props: T & Omit<PresenceProps, 'children'>): [Pick<T & Omit<PresenceProps, "children">, "present" | "onExitComplete" | "lazyMount" | "unmountOnExit">, Omit<T & Omit<PresenceProps, "children">, "present" | "onExitComplete" | "lazyMount" | "unmountOnExit">];
@@ -0,0 +1,12 @@
1
+ import { createSplitProps } from '../create-split-props.mjs';
2
+
3
+ function splitPresenceProps(props) {
4
+ return createSplitProps()(props, [
5
+ "lazyMount",
6
+ "onExitComplete",
7
+ "present",
8
+ "unmountOnExit"
9
+ ]);
10
+ }
11
+
12
+ export { splitPresenceProps };
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const presence = require('@zag-js/presence');
6
+ const solid = require('@zag-js/solid');
7
+ const solidJs = require('solid-js');
8
+
9
+ function _interopNamespaceDefault(e) {
10
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
11
+ if (e) {
12
+ for (const k in e) {
13
+ if (k !== 'default') {
14
+ const d = Object.getOwnPropertyDescriptor(e, k);
15
+ Object.defineProperty(n, k, d.get ? d : {
16
+ enumerable: true,
17
+ get: () => e[k]
18
+ });
19
+ }
20
+ }
21
+ }
22
+ n.default = e;
23
+ return Object.freeze(n);
24
+ }
25
+
26
+ const presence__namespace = /*#__PURE__*/_interopNamespaceDefault(presence);
27
+
28
+ const usePresence = (props) => {
29
+ const [state, send] = solid.useMachine(presence__namespace.machine(props), {
30
+ context: props
31
+ });
32
+ return solidJs.createMemo(() => presence__namespace.connect(state, send, solid.normalizeProps));
33
+ };
34
+
35
+ exports.usePresence = usePresence;
@@ -0,0 +1,5 @@
1
+ import { Accessor } from 'solid-js';
2
+ import * as presence from '@zag-js/presence';
3
+ import type { Optional } from '../types';
4
+ export type UsePresenceProps = Optional<presence.Context, 'present'>;
5
+ export declare const usePresence: (props: UsePresenceProps) => Accessor<presence.Api>;
@@ -0,0 +1,12 @@
1
+ import * as presence from '@zag-js/presence';
2
+ import { useMachine, normalizeProps } from '@zag-js/solid';
3
+ import { createMemo } from 'solid-js';
4
+
5
+ const usePresence = (props) => {
6
+ const [state, send] = useMachine(presence.machine(props), {
7
+ context: props
8
+ });
9
+ return createMemo(() => presence.connect(state, send, normalizeProps));
10
+ };
11
+
12
+ export { usePresence };
@@ -5,12 +5,23 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const web = require('solid-js/web');
6
6
  const solid = require('@zag-js/solid');
7
7
  const factory = require('../factory.cjs');
8
+ const index = require('../presence/index.cjs');
8
9
  const selectContext = require('./select-context.cjs');
10
+ const splitPresenceProps = require('../presence/split-presence-props.cjs');
9
11
 
10
12
  const SelectContent = props => {
13
+ const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
11
14
  const api = selectContext.useSelectContext();
12
- const contentProps = solid.mergeProps(() => api().contentProps, props);
13
- return web.createComponent(factory.ark.div, contentProps);
15
+ const mergedProps = solid.mergeProps(() => api().contentProps, localProps);
16
+ return web.createComponent(index.Presence, web.mergeProps({
17
+ get present() {
18
+ return api().isOpen;
19
+ }
20
+ }, presenceProps, {
21
+ get children() {
22
+ return web.createComponent(factory.ark.div, mergedProps);
23
+ }
24
+ }));
14
25
  };
15
26
 
16
27
  exports.SelectContent = SelectContent;
@@ -1,4 +1,5 @@
1
1
  import { JSX } from 'solid-js';
2
2
  import { type HTMLArkProps } from '../factory';
3
- export type SelectContentProps = HTMLArkProps<'div'>;
3
+ import { type PresenceProps } from '../presence';
4
+ export type SelectContentProps = HTMLArkProps<'div'> & PresenceProps;
4
5
  export declare const SelectContent: (props: SelectContentProps) => JSX.Element;
@@ -1,12 +1,23 @@
1
- import { createComponent } from 'solid-js/web';
1
+ import { createComponent, mergeProps as mergeProps$1 } from 'solid-js/web';
2
2
  import { mergeProps } from '@zag-js/solid';
3
3
  import { ark } from '../factory.mjs';
4
+ import { Presence } from '../presence/index.mjs';
4
5
  import { useSelectContext } from './select-context.mjs';
6
+ import { splitPresenceProps } from '../presence/split-presence-props.mjs';
5
7
 
6
8
  const SelectContent = props => {
9
+ const [presenceProps, localProps] = splitPresenceProps(props);
7
10
  const api = useSelectContext();
8
- const contentProps = mergeProps(() => api().contentProps, props);
9
- return createComponent(ark.div, contentProps);
11
+ const mergedProps = mergeProps(() => api().contentProps, localProps);
12
+ return createComponent(Presence, mergeProps$1({
13
+ get present() {
14
+ return api().isOpen;
15
+ }
16
+ }, presenceProps, {
17
+ get children() {
18
+ return createComponent(ark.div, mergedProps);
19
+ }
20
+ }));
10
21
  };
11
22
 
12
23
  export { SelectContent };
@@ -6,13 +6,21 @@ const web = require('solid-js/web');
6
6
  const solid = require('@zag-js/solid');
7
7
  const createSplitProps = require('../create-split-props.cjs');
8
8
  const factory = require('../factory.cjs');
9
+ require('../presence/index.cjs');
10
+ const tabPresence = require('./tab-presence.cjs');
9
11
  const tabsContext = require('./tabs-context.cjs');
12
+ const splitPresenceProps = require('../presence/split-presence-props.cjs');
10
13
 
11
14
  const TabContent = props => {
12
- const [tabParams, restProps] = createSplitProps.createSplitProps()(props, ['value']);
15
+ const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
16
+ const [getContentProps, restProps] = createSplitProps.createSplitProps()(localProps, ['value']);
13
17
  const api = tabsContext.useTabsContext();
14
- const contentProps = solid.mergeProps(() => api().getContentProps(tabParams), restProps);
15
- return web.createComponent(factory.ark.div, contentProps);
18
+ const contentProps = solid.mergeProps(() => api().getContentProps(getContentProps), restProps);
19
+ return web.createComponent(tabPresence.TabPresence, web.mergeProps(presenceProps, getContentProps, {
20
+ get children() {
21
+ return web.createComponent(factory.ark.div, contentProps);
22
+ }
23
+ }));
16
24
  };
17
25
 
18
26
  exports.TabContent = TabContent;
@@ -1,8 +1,7 @@
1
1
  import { JSX } from 'solid-js';
2
- import { type connect } from '@zag-js/tabs';
2
+ import { type ContentProps } from '@zag-js/tabs';
3
3
  import { type HTMLArkProps } from '../factory';
4
4
  import type { Assign } from '../types';
5
- type TabContentParams = Parameters<ReturnType<typeof connect>['getContentProps']>[0];
6
- export type TabContentProps = Assign<HTMLArkProps<'div'>, TabContentParams>;
5
+ import { type TabPresenceProps } from './tab-presence';
6
+ export type TabContentProps = Assign<HTMLArkProps<'div'>, ContentProps> & TabPresenceProps;
7
7
  export declare const TabContent: (props: TabContentProps) => JSX.Element;
8
- export {};
@@ -1,14 +1,22 @@
1
- import { createComponent } from 'solid-js/web';
1
+ import { createComponent, mergeProps as mergeProps$1 } from 'solid-js/web';
2
2
  import { mergeProps } from '@zag-js/solid';
3
3
  import { createSplitProps } from '../create-split-props.mjs';
4
4
  import { ark } from '../factory.mjs';
5
+ import '../presence/index.mjs';
6
+ import { TabPresence } from './tab-presence.mjs';
5
7
  import { useTabsContext } from './tabs-context.mjs';
8
+ import { splitPresenceProps } from '../presence/split-presence-props.mjs';
6
9
 
7
10
  const TabContent = props => {
8
- const [tabParams, restProps] = createSplitProps()(props, ['value']);
11
+ const [presenceProps, localProps] = splitPresenceProps(props);
12
+ const [getContentProps, restProps] = createSplitProps()(localProps, ['value']);
9
13
  const api = useTabsContext();
10
- const contentProps = mergeProps(() => api().getContentProps(tabParams), restProps);
11
- return createComponent(ark.div, contentProps);
14
+ const contentProps = mergeProps(() => api().getContentProps(getContentProps), restProps);
15
+ return createComponent(TabPresence, mergeProps$1(presenceProps, getContentProps, {
16
+ get children() {
17
+ return createComponent(ark.div, contentProps);
18
+ }
19
+ }));
12
20
  };
13
21
 
14
22
  export { TabContent };
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const web = require('solid-js/web');
6
+ const index = require('../presence/index.cjs');
7
+ const tabsContext = require('./tabs-context.cjs');
8
+
9
+ const TabPresence = props => {
10
+ const api = tabsContext.useTabsContext();
11
+ return web.createComponent(index.Presence, web.mergeProps({
12
+ get present() {
13
+ return api().value === props.value;
14
+ }
15
+ }, props));
16
+ };
17
+
18
+ exports.TabPresence = TabPresence;
@@ -0,0 +1,5 @@
1
+ import { JSX } from 'solid-js';
2
+ import type { ContentProps } from '@zag-js/tabs';
3
+ import { type PresenceProps } from '../presence';
4
+ export type TabPresenceProps = PresenceProps & ContentProps;
5
+ export declare const TabPresence: (props: TabPresenceProps) => JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { createComponent, mergeProps } from 'solid-js/web';
2
+ import { Presence } from '../presence/index.mjs';
3
+ import { useTabsContext } from './tabs-context.mjs';
4
+
5
+ const TabPresence = props => {
6
+ const api = useTabsContext();
7
+ return createComponent(Presence, mergeProps({
8
+ get present() {
9
+ return api().value === props.value;
10
+ }
11
+ }, props));
12
+ };
13
+
14
+ export { TabPresence };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
- import { HTMLArkProps } from '../factory';
1
+ import { HTMLArkProps } from '..';
2
2
  import { Assign } from '../types';
3
3
  import { JSX } from 'solid-js';
4
4
  import { Tag, type TagProps } from './tag';