@ark-ui/solid 0.10.1 → 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 +14 -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 +32 -26
  21. package/index.d.ts +2 -0
  22. package/index.mjs +3 -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/CHANGELOG.md CHANGED
@@ -6,6 +6,17 @@ description: All notable changes to this project will be documented in this file
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.11.0] - 2023-09-08
10
+
11
+ ### Added
12
+
13
+ - Added `Presence` component
14
+ - To improve performance and reduce initial load times, we've introduced two new properties to the `AccordionContent`, `ComboboxContent`, `DialogBackdrop`, `DialogContent`, `HoverCardContent`, `MenuContent`, `PopoverContent`, `SelectContent`, and `TooltipContent` components. The `lazyMount` property allows for on-demand rendering of content, while the `unmountOnExit` property enables the removal of the component from the DOM once it's no longer required, ensuring better resource management and cleaner code.
15
+
16
+ ### Fixed
17
+
18
+ - Resolved an issue where the `ark` factory was not exported correctly.
19
+
9
20
  ## [0.10.1] - 2023-09-02
10
21
 
11
22
  ### Fixed
@@ -150,7 +161,7 @@ description: All notable changes to this project will be documented in this file
150
161
  - Add `Toast`
151
162
  - Add `Tooltip`
152
163
 
153
- [unreleased]: https://github.com/chakra-ui/ark/compare/@ark-ui/solid@0.10.1...HEAD
164
+ [unreleased]: https://github.com/chakra-ui/ark/compare/@ark-ui/solid@0.11.0...HEAD
154
165
  [0.1.0]: https://github.com/chakra-ui/ark/releases/tag/@ark-ui/solid@0.1.0
155
166
  [0.2.0]: https://github.com/chakra-ui/ark/releases/tag/@ark-ui/solid@0.2.0
156
167
  [0.3.0]: https://github.com/chakra-ui/ark/releases/tag/@ark-ui/solid@0.3.0
@@ -163,5 +174,6 @@ description: All notable changes to this project will be documented in this file
163
174
  [0.8.1]: https://github.com/chakra-ui/ark/releases/tag/@ark-ui/solid@0.8.1
164
175
  [0.9.0]: https://github.com/chakra-ui/ark/releases/tag/@ark-ui/solid@0.9.0
165
176
  [0.10.0]: https://github.com/chakra-ui/ark/releases/tag/@ark-ui/solid@0.10.0
166
-
167
177
  [0.10.1]: https://github.com/chakra-ui/ark/releases/tag/@ark-ui/solid@0.10.1
178
+
179
+ [0.11.0]: https://github.com/chakra-ui/ark/releases/tag/@ark-ui/solid@0.11.0
@@ -5,14 +5,25 @@ 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 accordionContext = require('./accordion-context.cjs');
9
10
  const accordionItemContext = require('./accordion-item-context.cjs');
11
+ const splitPresenceProps = require('../presence/split-presence-props.cjs');
10
12
 
11
13
  const AccordionContent = props => {
14
+ const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
12
15
  const api = accordionContext.useAccordionContext();
13
- const itemParams = accordionItemContext.useAccordionItemContext();
14
- const contentProps = solid.mergeProps(() => api().getContentProps(itemParams), props);
15
- return web.createComponent(factory.ark.div, contentProps);
16
+ const accordionItem = accordionItemContext.useAccordionItemContext();
17
+ const contentProps = solid.mergeProps(() => api().getContentProps(accordionItem), localProps);
18
+ return web.createComponent(index.Presence, web.mergeProps({
19
+ get present() {
20
+ return accordionItem.isOpen;
21
+ }
22
+ }, presenceProps, {
23
+ get children() {
24
+ return web.createComponent(factory.ark.div, contentProps);
25
+ }
26
+ }));
16
27
  };
17
28
 
18
29
  exports.AccordionContent = AccordionContent;
@@ -1,4 +1,5 @@
1
1
  import { JSX } from 'solid-js';
2
2
  import { type HTMLArkProps } from '../factory';
3
- export type AccordionContentProps = HTMLArkProps<'div'>;
3
+ import { type PresenceProps } from '../presence';
4
+ export type AccordionContentProps = HTMLArkProps<'div'> & PresenceProps;
4
5
  export declare const AccordionContent: (props: AccordionContentProps) => JSX.Element;
@@ -1,14 +1,25 @@
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 { useAccordionContext } from './accordion-context.mjs';
5
6
  import { useAccordionItemContext } from './accordion-item-context.mjs';
7
+ import { splitPresenceProps } from '../presence/split-presence-props.mjs';
6
8
 
7
9
  const AccordionContent = props => {
10
+ const [presenceProps, localProps] = splitPresenceProps(props);
8
11
  const api = useAccordionContext();
9
- const itemParams = useAccordionItemContext();
10
- const contentProps = mergeProps(() => api().getContentProps(itemParams), props);
11
- return createComponent(ark.div, contentProps);
12
+ const accordionItem = useAccordionItemContext();
13
+ const contentProps = mergeProps(() => api().getContentProps(accordionItem), localProps);
14
+ return createComponent(Presence, mergeProps$1({
15
+ get present() {
16
+ return accordionItem.isOpen;
17
+ }
18
+ }, presenceProps, {
19
+ get children() {
20
+ return createComponent(ark.div, contentProps);
21
+ }
22
+ }));
12
23
  };
13
24
 
14
25
  export { AccordionContent };
@@ -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 comboboxContext = require('./combobox-context.cjs');
10
+ const splitPresenceProps = require('../presence/split-presence-props.cjs');
9
11
 
10
12
  const ComboboxContent = props => {
11
- const combobox = comboboxContext.useComboboxContext();
12
- const contentProps = solid.mergeProps(() => combobox().contentProps, props);
13
- return web.createComponent(factory.ark.div, contentProps);
13
+ const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
14
+ const api = comboboxContext.useComboboxContext();
15
+ const contentProps = 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, contentProps);
23
+ }
24
+ }));
14
25
  };
15
26
 
16
27
  exports.ComboboxContent = ComboboxContent;
@@ -1,4 +1,5 @@
1
1
  import { JSX } from 'solid-js';
2
2
  import { type HTMLArkProps } from '../factory';
3
- export type ComboboxContentProps = HTMLArkProps<'div'>;
3
+ import { type PresenceProps } from '../presence';
4
+ export type ComboboxContentProps = HTMLArkProps<'div'> & PresenceProps;
4
5
  export declare const ComboboxContent: (props: ComboboxContentProps) => 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 { useComboboxContext } from './combobox-context.mjs';
6
+ import { splitPresenceProps } from '../presence/split-presence-props.mjs';
5
7
 
6
8
  const ComboboxContent = props => {
7
- const combobox = useComboboxContext();
8
- const contentProps = mergeProps(() => combobox().contentProps, props);
9
- return createComponent(ark.div, contentProps);
9
+ const [presenceProps, localProps] = splitPresenceProps(props);
10
+ const api = useComboboxContext();
11
+ const contentProps = 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, contentProps);
19
+ }
20
+ }));
10
21
  };
11
22
 
12
23
  export { ComboboxContent };
@@ -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 dialogContext = require('./dialog-context.cjs');
10
+ const splitPresenceProps = require('../presence/split-presence-props.cjs');
9
11
 
10
12
  const DialogBackdrop = props => {
11
- const dialog = dialogContext.useDialogContext();
12
- const backdropProps = solid.mergeProps(() => dialog().backdropProps, props);
13
- return web.createComponent(factory.ark.div, backdropProps);
13
+ const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
14
+ const api = dialogContext.useDialogContext();
15
+ const mergedProps = solid.mergeProps(() => api().backdropProps, 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.DialogBackdrop = DialogBackdrop;
@@ -1,4 +1,5 @@
1
1
  import { JSX } from 'solid-js';
2
2
  import { type HTMLArkProps } from '../factory';
3
- export type DialogBackdropProps = HTMLArkProps<'div'>;
3
+ import { type PresenceProps } from '../presence';
4
+ export type DialogBackdropProps = HTMLArkProps<'div'> & PresenceProps;
4
5
  export declare const DialogBackdrop: (props: DialogBackdropProps) => 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 { useDialogContext } from './dialog-context.mjs';
6
+ import { splitPresenceProps } from '../presence/split-presence-props.mjs';
5
7
 
6
8
  const DialogBackdrop = props => {
7
- const dialog = useDialogContext();
8
- const backdropProps = mergeProps(() => dialog().backdropProps, props);
9
- return createComponent(ark.div, backdropProps);
9
+ const [presenceProps, localProps] = splitPresenceProps(props);
10
+ const api = useDialogContext();
11
+ const mergedProps = mergeProps(() => api().backdropProps, 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 { DialogBackdrop };
@@ -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 dialogContext = require('./dialog-context.cjs');
10
+ const splitPresenceProps = require('../presence/split-presence-props.cjs');
9
11
 
10
12
  const DialogContent = props => {
11
- const dialog = dialogContext.useDialogContext();
12
- const contentProps = solid.mergeProps(() => dialog().contentProps, props);
13
- return web.createComponent(factory.ark.div, contentProps);
13
+ const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
14
+ const api = dialogContext.useDialogContext();
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.DialogContent = DialogContent;
@@ -1,4 +1,5 @@
1
1
  import { JSX } from 'solid-js';
2
2
  import { type HTMLArkProps } from '../factory';
3
- export type DialogContentProps = HTMLArkProps<'div'>;
3
+ import { type PresenceProps } from '../presence';
4
+ export type DialogContentProps = HTMLArkProps<'div'> & PresenceProps;
4
5
  export declare const DialogContent: (props: DialogContentProps) => 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 { useDialogContext } from './dialog-context.mjs';
6
+ import { splitPresenceProps } from '../presence/split-presence-props.mjs';
5
7
 
6
8
  const DialogContent = props => {
7
- const dialog = useDialogContext();
8
- const contentProps = mergeProps(() => dialog().contentProps, props);
9
- return createComponent(ark.div, contentProps);
9
+ const [presenceProps, localProps] = splitPresenceProps(props);
10
+ const api = useDialogContext();
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 { DialogContent };
package/factory.cjs CHANGED
@@ -47,4 +47,3 @@ function jsxFactory() {
47
47
  const ark = jsxFactory();
48
48
 
49
49
  exports.ark = ark;
50
- exports.jsxFactory = jsxFactory;
package/factory.d.ts CHANGED
@@ -9,6 +9,5 @@ type JsxElements = {
9
9
  type AsChildForwardRefComponent<E extends ElementType> = Component<AsChildComponentProps<E>>;
10
10
  type AsChildComponentProps<E extends ElementType> = ComponentProps<E> & AsChildProps;
11
11
  export type HTMLArkProps<T extends ElementType> = AsChildComponentProps<T>;
12
- export declare function jsxFactory(): JsxElements;
13
12
  export declare const ark: JsxElements;
14
13
  export {};
package/factory.mjs CHANGED
@@ -42,4 +42,4 @@ function jsxFactory() {
42
42
  }
43
43
  const ark = jsxFactory();
44
44
 
45
- export { ark, jsxFactory };
45
+ export { ark };
@@ -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 hoverCardContext = require('./hover-card-context.cjs');
10
+ const splitPresenceProps = require('../presence/split-presence-props.cjs');
9
11
 
10
12
  const HoverCardContent = props => {
11
- const hoverCard = hoverCardContext.useHoverCardContext();
12
- const contentProps = solid.mergeProps(() => hoverCard().contentProps, props);
13
- return web.createComponent(factory.ark.div, contentProps);
13
+ const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
14
+ const api = hoverCardContext.useHoverCardContext();
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.HoverCardContent = HoverCardContent;
@@ -1,4 +1,5 @@
1
1
  import { JSX } from 'solid-js';
2
2
  import { type HTMLArkProps } from '../factory';
3
- export type HoverCardContentProps = HTMLArkProps<'div'>;
3
+ import { type PresenceProps } from '../presence';
4
+ export type HoverCardContentProps = HTMLArkProps<'div'> & PresenceProps;
4
5
  export declare const HoverCardContent: (props: HoverCardContentProps) => 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 { useHoverCardContext } from './hover-card-context.mjs';
6
+ import { splitPresenceProps } from '../presence/split-presence-props.mjs';
5
7
 
6
8
  const HoverCardContent = props => {
7
- const hoverCard = useHoverCardContext();
8
- const contentProps = mergeProps(() => hoverCard().contentProps, props);
9
- return createComponent(ark.div, contentProps);
9
+ const [presenceProps, localProps] = splitPresenceProps(props);
10
+ const api = useHoverCardContext();
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 { HoverCardContent };
package/index.cjs CHANGED
@@ -13,25 +13,27 @@ const index$6 = require('./date-picker/index.cjs');
13
13
  const index$7 = require('./dialog/index.cjs');
14
14
  const index$8 = require('./editable/index.cjs');
15
15
  const index$9 = require('./environment/index.cjs');
16
+ const factory = require('./factory.cjs');
16
17
  const index$a = require('./hover-card/index.cjs');
17
18
  const index$b = require('./menu/index.cjs');
18
19
  const index$c = require('./number-input/index.cjs');
19
20
  const index$d = require('./pagination/index.cjs');
20
21
  const index$e = require('./pin-input/index.cjs');
21
22
  const index$f = require('./popover/index.cjs');
22
- const index$g = require('./pressable/index.cjs');
23
- const index$h = require('./radio-group/index.cjs');
24
- const index$i = require('./range-slider/index.cjs');
25
- const index$j = require('./rating-group/index.cjs');
26
- const index$k = require('./segment-group/index.cjs');
27
- const index$l = require('./select/index.cjs');
28
- const index$m = require('./slider/index.cjs');
29
- const index$n = require('./splitter/index.cjs');
30
- const index$o = require('./switch/index.cjs');
31
- const index$p = require('./tabs/index.cjs');
32
- const index$q = require('./tags-input/index.cjs');
33
- const index$r = require('./toast/index.cjs');
34
- const index$s = require('./tooltip/index.cjs');
23
+ const index$g = require('./presence/index.cjs');
24
+ const index$h = require('./pressable/index.cjs');
25
+ const index$i = require('./radio-group/index.cjs');
26
+ const index$j = require('./range-slider/index.cjs');
27
+ const index$k = require('./rating-group/index.cjs');
28
+ const index$l = require('./segment-group/index.cjs');
29
+ const index$m = require('./select/index.cjs');
30
+ const index$n = require('./slider/index.cjs');
31
+ const index$o = require('./splitter/index.cjs');
32
+ const index$p = require('./switch/index.cjs');
33
+ const index$q = require('./tabs/index.cjs');
34
+ const index$r = require('./tags-input/index.cjs');
35
+ const index$s = require('./toast/index.cjs');
36
+ const index$t = require('./tooltip/index.cjs');
35
37
  const accordionContent = require('./accordion/accordion-content.cjs');
36
38
  const accordionItem = require('./accordion/accordion-item.cjs');
37
39
  const accordionTrigger = require('./accordion/accordion-trigger.cjs');
@@ -183,6 +185,7 @@ const popoverTitle = require('./popover/popover-title.cjs');
183
185
  const popoverTrigger = require('./popover/popover-trigger.cjs');
184
186
  const popover = require('@zag-js/popover');
185
187
  const popoverContext = require('./popover/popover-context.cjs');
188
+ const splitPresenceProps = require('./presence/split-presence-props.cjs');
186
189
  const usePressable = require('./pressable/use-pressable.cjs');
187
190
  const radio = require('./radio-group/radio.cjs');
188
191
  const radioControl = require('./radio-group/radio-control.cjs');
@@ -291,25 +294,27 @@ exports.DatePicker = index$6.DatePicker;
291
294
  exports.Dialog = index$7.Dialog;
292
295
  exports.Editable = index$8.Editable;
293
296
  exports.Environment = index$9.Environment;
297
+ exports.ark = factory.ark;
294
298
  exports.HoverCard = index$a.HoverCard;
295
299
  exports.Menu = index$b.Menu;
296
300
  exports.NumberInput = index$c.NumberInput;
297
301
  exports.Pagination = index$d.Pagination;
298
302
  exports.PinInput = index$e.PinInput;
299
303
  exports.Popover = index$f.Popover;
300
- exports.Pressable = index$g.Pressable;
301
- exports.RadioGroup = index$h.RadioGroup;
302
- exports.RangeSlider = index$i.RangeSlider;
303
- exports.RatingGroup = index$j.RatingGroup;
304
- exports.SegmentGroup = index$k.SegmentGroup;
305
- exports.Select = index$l.Select;
306
- exports.Slider = index$m.Slider;
307
- exports.Splitter = index$n.Splitter;
308
- exports.Switch = index$o.Switch;
309
- exports.Tabs = index$p.Tabs;
310
- exports.TagsInput = index$q.TagsInput;
311
- exports.Toast = index$r.Toast;
312
- exports.Tooltip = index$s.Tooltip;
304
+ exports.Presence = index$g.Presence;
305
+ exports.Pressable = index$h.Pressable;
306
+ exports.RadioGroup = index$i.RadioGroup;
307
+ exports.RangeSlider = index$j.RangeSlider;
308
+ exports.RatingGroup = index$k.RatingGroup;
309
+ exports.SegmentGroup = index$l.SegmentGroup;
310
+ exports.Select = index$m.Select;
311
+ exports.Slider = index$n.Slider;
312
+ exports.Splitter = index$o.Splitter;
313
+ exports.Switch = index$p.Switch;
314
+ exports.Tabs = index$q.Tabs;
315
+ exports.TagsInput = index$r.TagsInput;
316
+ exports.Toast = index$s.Toast;
317
+ exports.Tooltip = index$t.Tooltip;
313
318
  exports.AccordionContent = accordionContent.AccordionContent;
314
319
  exports.AccordionItem = accordionItem.AccordionItem;
315
320
  exports.AccordionTrigger = accordionTrigger.AccordionTrigger;
@@ -494,6 +499,7 @@ Object.defineProperty(exports, 'popoverAnatomy', {
494
499
  get: () => popover.anatomy
495
500
  });
496
501
  exports.usePopoverContext = popoverContext.usePopoverContext;
502
+ exports.splitPresenceProps = splitPresenceProps.splitPresenceProps;
497
503
  exports.usePressable = usePressable.usePressable;
498
504
  exports.Radio = radio.Radio;
499
505
  exports.RadioControl = radioControl.RadioControl;
package/index.d.ts CHANGED
@@ -9,12 +9,14 @@ export * from './date-picker';
9
9
  export * from './dialog';
10
10
  export * from './editable';
11
11
  export * from './environment';
12
+ export * from './factory';
12
13
  export * from './hover-card';
13
14
  export * from './menu';
14
15
  export * from './number-input';
15
16
  export * from './pagination';
16
17
  export * from './pin-input';
17
18
  export * from './popover';
19
+ export * from './presence';
18
20
  export * from './pressable';
19
21
  export * from './radio-group';
20
22
  export * from './range-slider';
package/index.mjs CHANGED
@@ -9,12 +9,14 @@ export { DatePicker } from './date-picker/index.mjs';
9
9
  export { Dialog } from './dialog/index.mjs';
10
10
  export { Editable } from './editable/index.mjs';
11
11
  export { Environment } from './environment/index.mjs';
12
+ export { ark } from './factory.mjs';
12
13
  export { HoverCard } from './hover-card/index.mjs';
13
14
  export { Menu } from './menu/index.mjs';
14
15
  export { NumberInput } from './number-input/index.mjs';
15
16
  export { Pagination } from './pagination/index.mjs';
16
17
  export { PinInput } from './pin-input/index.mjs';
17
18
  export { Popover } from './popover/index.mjs';
19
+ export { Presence } from './presence/index.mjs';
18
20
  export { Pressable } from './pressable/index.mjs';
19
21
  export { RadioGroup } from './radio-group/index.mjs';
20
22
  export { RangeSlider } from './range-slider/index.mjs';
@@ -179,6 +181,7 @@ export { PopoverTitle } from './popover/popover-title.mjs';
179
181
  export { PopoverTrigger } from './popover/popover-trigger.mjs';
180
182
  export { anatomy as popoverAnatomy } from '@zag-js/popover';
181
183
  export { usePopoverContext } from './popover/popover-context.mjs';
184
+ export { splitPresenceProps } from './presence/split-presence-props.mjs';
182
185
  export { usePressable } from './pressable/use-pressable.mjs';
183
186
  export { Radio } from './radio-group/radio.mjs';
184
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.1",
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",