@ark-ui/react 1.0.0-beta.4 → 1.0.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 (157) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/accordion/accordion-context.d.ts +2 -1
  3. package/accordion/accordion-item-content.cjs +14 -21
  4. package/accordion/accordion-item-content.d.ts +1 -3
  5. package/accordion/accordion-item-content.mjs +14 -21
  6. package/accordion/accordion-item-context.d.ts +2 -2
  7. package/accordion/accordion-item-trigger.cjs +11 -1
  8. package/accordion/accordion-item-trigger.mjs +11 -1
  9. package/accordion/accordion-item.cjs +7 -1
  10. package/accordion/accordion-item.d.ts +4 -5
  11. package/accordion/accordion-item.mjs +7 -1
  12. package/accordion/accordion.cjs +7 -3
  13. package/accordion/accordion.d.ts +2 -1
  14. package/accordion/accordion.mjs +7 -3
  15. package/carousel/carousel.d.ts +4 -5
  16. package/checkbox/checkbox.cjs +2 -2
  17. package/checkbox/checkbox.d.ts +4 -5
  18. package/checkbox/checkbox.mjs +2 -2
  19. package/color-picker/color-picker-content.cjs +8 -11
  20. package/color-picker/color-picker-content.d.ts +1 -3
  21. package/color-picker/color-picker-content.mjs +8 -11
  22. package/color-picker/color-picker-positioner.cjs +6 -0
  23. package/color-picker/color-picker-positioner.mjs +6 -0
  24. package/color-picker/color-picker-view.cjs +29 -0
  25. package/color-picker/color-picker-view.d.ts +8 -0
  26. package/color-picker/color-picker-view.mjs +25 -0
  27. package/color-picker/color-picker.cjs +31 -28
  28. package/color-picker/color-picker.d.ts +6 -5
  29. package/color-picker/color-picker.mjs +32 -29
  30. package/color-picker/index.cjs +3 -1
  31. package/color-picker/index.d.ts +3 -1
  32. package/color-picker/index.mjs +3 -1
  33. package/combobox/combobox-content.cjs +8 -11
  34. package/combobox/combobox-content.d.ts +1 -3
  35. package/combobox/combobox-content.mjs +8 -11
  36. package/combobox/combobox-item.d.ts +6 -4
  37. package/combobox/combobox-positioner.cjs +6 -0
  38. package/combobox/combobox-positioner.mjs +6 -0
  39. package/combobox/combobox.cjs +8 -2
  40. package/combobox/combobox.d.ts +4 -3
  41. package/combobox/combobox.mjs +8 -2
  42. package/date-picker/date-picker-content.cjs +8 -11
  43. package/date-picker/date-picker-content.d.ts +1 -3
  44. package/date-picker/date-picker-content.mjs +8 -11
  45. package/date-picker/date-picker-positioner.cjs +6 -0
  46. package/date-picker/date-picker-positioner.mjs +6 -0
  47. package/date-picker/date-picker-view.d.ts +3 -3
  48. package/date-picker/date-picker.cjs +10 -4
  49. package/date-picker/date-picker.d.ts +6 -5
  50. package/date-picker/date-picker.mjs +10 -4
  51. package/dialog/dialog-backdrop.cjs +8 -11
  52. package/dialog/dialog-backdrop.d.ts +1 -3
  53. package/dialog/dialog-backdrop.mjs +8 -11
  54. package/dialog/dialog-content.cjs +8 -11
  55. package/dialog/dialog-content.d.ts +1 -3
  56. package/dialog/dialog-content.mjs +8 -11
  57. package/dialog/dialog-positioner.cjs +6 -0
  58. package/dialog/dialog-positioner.mjs +6 -0
  59. package/dialog/dialog-trigger.cjs +10 -1
  60. package/dialog/dialog-trigger.mjs +10 -1
  61. package/dialog/dialog.cjs +8 -3
  62. package/dialog/dialog.d.ts +4 -6
  63. package/dialog/dialog.mjs +8 -3
  64. package/editable/editable.d.ts +4 -5
  65. package/environment/environment-context.d.ts +1 -1
  66. package/hover-card/hover-card-content.cjs +8 -11
  67. package/hover-card/hover-card-content.d.ts +1 -3
  68. package/hover-card/hover-card-content.mjs +8 -11
  69. package/hover-card/hover-card-positioner.cjs +6 -0
  70. package/hover-card/hover-card-positioner.mjs +6 -0
  71. package/hover-card/hover-card.cjs +8 -3
  72. package/hover-card/hover-card.d.ts +4 -6
  73. package/hover-card/hover-card.mjs +8 -3
  74. package/index.cjs +8 -0
  75. package/index.mjs +3 -0
  76. package/menu/menu-content.cjs +8 -11
  77. package/menu/menu-content.d.ts +1 -3
  78. package/menu/menu-content.mjs +8 -11
  79. package/menu/menu-option-item.d.ts +2 -2
  80. package/menu/menu.cjs +11 -12
  81. package/menu/menu.d.ts +4 -11
  82. package/menu/menu.mjs +12 -13
  83. package/package.json +49 -50
  84. package/pagination/pagination.d.ts +3 -3
  85. package/popover/popover-content.cjs +8 -11
  86. package/popover/popover-content.d.ts +1 -3
  87. package/popover/popover-content.mjs +8 -11
  88. package/popover/popover-positioner.cjs +6 -0
  89. package/popover/popover-positioner.mjs +6 -0
  90. package/popover/popover-trigger.cjs +10 -1
  91. package/popover/popover-trigger.mjs +10 -1
  92. package/popover/popover.cjs +8 -3
  93. package/popover/popover.d.ts +4 -6
  94. package/popover/popover.mjs +8 -3
  95. package/presence/index.cjs +8 -0
  96. package/presence/index.d.ts +8 -5
  97. package/presence/index.mjs +3 -0
  98. package/presence/presence-context.cjs +15 -0
  99. package/presence/presence-context.d.ts +6 -0
  100. package/presence/presence-context.mjs +10 -0
  101. package/presence/presence-props-context.cjs +17 -0
  102. package/presence/presence-props-context.d.ts +6 -0
  103. package/presence/presence-props-context.mjs +12 -0
  104. package/presence/presence.cjs +18 -19
  105. package/presence/presence.d.ts +6 -21
  106. package/presence/presence.mjs +19 -20
  107. package/presence/split-presence-props.d.ts +2 -2
  108. package/presence/use-presence.cjs +22 -4
  109. package/presence/use-presence.d.ts +21 -1
  110. package/presence/use-presence.mjs +20 -2
  111. package/radio-group/radio-group-item.d.ts +2 -3
  112. package/rating-group/rating-group-control.d.ts +5 -3
  113. package/rating-group/rating-group-item.d.ts +4 -5
  114. package/segment-group/segment-group-item.d.ts +2 -3
  115. package/segment-group/segment-group.anatomy.d.ts +2 -0
  116. package/select/select-content.cjs +8 -11
  117. package/select/select-content.d.ts +1 -3
  118. package/select/select-content.mjs +8 -11
  119. package/select/select-item.d.ts +2 -3
  120. package/select/select-positioner.cjs +6 -0
  121. package/select/select-positioner.mjs +6 -0
  122. package/select/select.cjs +8 -2
  123. package/select/select.d.ts +4 -3
  124. package/select/select.mjs +8 -2
  125. package/slider/slider-value-text.cjs +1 -3
  126. package/slider/slider-value-text.d.ts +3 -6
  127. package/slider/slider-value-text.mjs +1 -3
  128. package/slider/slider.d.ts +3 -3
  129. package/splitter/splitter.d.ts +3 -3
  130. package/switch/switch.d.ts +3 -3
  131. package/switch/switch.stories.d.ts +1 -0
  132. package/tabs/tab-content.cjs +13 -12
  133. package/tabs/tab-content.d.ts +2 -4
  134. package/tabs/tab-content.mjs +13 -12
  135. package/tabs/tabs.cjs +7 -3
  136. package/tabs/tabs.d.ts +2 -1
  137. package/tabs/tabs.mjs +7 -3
  138. package/tags-input/tags-input-item.d.ts +4 -5
  139. package/tags-input/tags-input.d.ts +3 -3
  140. package/toast/toast.stories.d.ts +3 -1
  141. package/tooltip/tooltip-content.cjs +8 -11
  142. package/tooltip/tooltip-content.d.ts +1 -3
  143. package/tooltip/tooltip-content.mjs +8 -11
  144. package/tooltip/tooltip-positioner.cjs +6 -0
  145. package/tooltip/tooltip-positioner.mjs +6 -0
  146. package/tooltip/tooltip.cjs +8 -3
  147. package/tooltip/tooltip.d.ts +4 -4
  148. package/tooltip/tooltip.mjs +8 -3
  149. package/types.d.ts +1 -3
  150. package/use-event.cjs +6 -2
  151. package/use-event.mjs +6 -2
  152. package/tabs/tab-presence.cjs +0 -17
  153. package/tabs/tab-presence.d.ts +0 -6
  154. package/tabs/tab-presence.mjs +0 -13
  155. package/use-latest-ref.cjs +0 -14
  156. package/use-latest-ref.d.ts +0 -3
  157. package/use-latest-ref.mjs +0 -10
@@ -4,13 +4,18 @@ import { mergeProps } from '@zag-js/react';
4
4
  import { forwardRef } from 'react';
5
5
  import { createSplitProps } from '../create-split-props.mjs';
6
6
  import { ark } from '../factory.mjs';
7
+ import '../presence/index.mjs';
7
8
  import { runIfFn } from '../run-if-fn.mjs';
8
9
  import { DatePickerProvider } from './date-picker-context.mjs';
9
10
  import { useDatePicker } from './use-date-picker.mjs';
11
+ import { splitPresenceProps } from '../presence/split-presence-props.mjs';
12
+ import { usePresence } from '../presence/use-presence.mjs';
13
+ import { PresenceProvider } from '../presence/presence-context.mjs';
10
14
 
11
15
  const DatePicker = forwardRef((props, ref) => {
12
- const [datePickerProps, { children, ...localProps }] = createSplitProps()(
13
- props,
16
+ const [presenceProps, datePickerProps] = splitPresenceProps(props);
17
+ const [useDatePickerProps, { children, ...localProps }] = createSplitProps()(
18
+ datePickerProps,
14
19
  [
15
20
  "closeOnSelect",
16
21
  "defaultValue",
@@ -46,10 +51,11 @@ const DatePicker = forwardRef((props, ref) => {
46
51
  "view"
47
52
  ]
48
53
  );
49
- const api = useDatePicker(datePickerProps);
54
+ const api = useDatePicker(useDatePickerProps);
55
+ const presenceApi = usePresence({ ...presenceProps, present: api.isOpen });
50
56
  const view = runIfFn(children, api);
51
57
  const mergedProps = mergeProps(api.rootProps, localProps);
52
- return /* @__PURE__ */ jsx(DatePickerProvider, { value: api, children: /* @__PURE__ */ jsx(ark.div, { ...mergedProps, ref, children: view }) });
58
+ return /* @__PURE__ */ jsx(DatePickerProvider, { value: api, children: /* @__PURE__ */ jsx(PresenceProvider, { value: presenceApi, children: /* @__PURE__ */ jsx(ark.div, { ...mergedProps, ref, children: view }) }) });
53
59
  });
54
60
  DatePicker.displayName = "DatePicker";
55
61
 
@@ -7,22 +7,19 @@ const jsxRuntime = require('react/jsx-runtime');
7
7
  const react$1 = require('@zag-js/react');
8
8
  const react = require('react');
9
9
  const factory = require('../factory.cjs');
10
- const index = require('../presence/index.cjs');
10
+ require('../presence/index.cjs');
11
11
  const dialogContext = require('./dialog-context.cjs');
12
- const splitPresenceProps = require('../presence/split-presence-props.cjs');
12
+ const presenceContext = require('../presence/presence-context.cjs');
13
13
 
14
14
  const DialogBackdrop = react.forwardRef((props, ref) => {
15
- const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
16
15
  const api = dialogContext.useDialogContext();
17
- return /* @__PURE__ */ jsxRuntime.jsx(index.Presence, { present: api.isOpen, ...presenceProps, fallback: /* @__PURE__ */ jsxRuntime.jsx("div", { ...api.backdropProps }), children: /* @__PURE__ */ jsxRuntime.jsx(DialogInnerBackdrop, { ref, ...localProps }) });
16
+ const presenceApi = presenceContext.usePresenceContext();
17
+ const mergedProps = react$1.mergeProps(api.backdropProps, props);
18
+ if (presenceApi.isUnmounted) {
19
+ return null;
20
+ }
21
+ return /* @__PURE__ */ jsxRuntime.jsx(factory.ark.div, { ref, ...mergedProps });
18
22
  });
19
23
  DialogBackdrop.displayName = "DialogBackdrop";
20
- const DialogInnerBackdrop = react.forwardRef(
21
- function DialogInnerBackdrop2(props, ref) {
22
- const api = dialogContext.useDialogContext();
23
- const mergedProps = react$1.mergeProps(api.backdropProps, props);
24
- return /* @__PURE__ */ jsxRuntime.jsx(factory.ark.div, { ...mergedProps, ref });
25
- }
26
- );
27
24
 
28
25
  exports.DialogBackdrop = DialogBackdrop;
@@ -1,8 +1,6 @@
1
1
  import { ForwardRefExoticComponent, RefAttributes } from 'react';
2
2
  /// <reference types="react" />
3
3
  import { type HTMLArkProps } from '../factory';
4
- import { type PresenceProps } from '../presence';
5
- import type { Assign } from '../types';
6
- export interface DialogBackdropProps extends Assign<HTMLArkProps<'div'>, Omit<PresenceProps, 'children' | 'fallback'>> {
4
+ export interface DialogBackdropProps extends HTMLArkProps<'div'> {
7
5
  }
8
6
  export declare const DialogBackdrop: ForwardRefExoticComponent<DialogBackdropProps & RefAttributes<HTMLDivElement>>;
@@ -3,22 +3,19 @@ import { jsx } from 'react/jsx-runtime';
3
3
  import { mergeProps } from '@zag-js/react';
4
4
  import { forwardRef } from 'react';
5
5
  import { ark } from '../factory.mjs';
6
- import { Presence } from '../presence/index.mjs';
6
+ import '../presence/index.mjs';
7
7
  import { useDialogContext } from './dialog-context.mjs';
8
- import { splitPresenceProps } from '../presence/split-presence-props.mjs';
8
+ import { usePresenceContext } from '../presence/presence-context.mjs';
9
9
 
10
10
  const DialogBackdrop = forwardRef((props, ref) => {
11
- const [presenceProps, localProps] = splitPresenceProps(props);
12
11
  const api = useDialogContext();
13
- return /* @__PURE__ */ jsx(Presence, { present: api.isOpen, ...presenceProps, fallback: /* @__PURE__ */ jsx("div", { ...api.backdropProps }), children: /* @__PURE__ */ jsx(DialogInnerBackdrop, { ref, ...localProps }) });
12
+ const presenceApi = usePresenceContext();
13
+ const mergedProps = mergeProps(api.backdropProps, props);
14
+ if (presenceApi.isUnmounted) {
15
+ return null;
16
+ }
17
+ return /* @__PURE__ */ jsx(ark.div, { ref, ...mergedProps });
14
18
  });
15
19
  DialogBackdrop.displayName = "DialogBackdrop";
16
- const DialogInnerBackdrop = forwardRef(
17
- function DialogInnerBackdrop2(props, ref) {
18
- const api = useDialogContext();
19
- const mergedProps = mergeProps(api.backdropProps, props);
20
- return /* @__PURE__ */ jsx(ark.div, { ...mergedProps, ref });
21
- }
22
- );
23
20
 
24
21
  export { DialogBackdrop };
@@ -7,22 +7,19 @@ const jsxRuntime = require('react/jsx-runtime');
7
7
  const react$1 = require('@zag-js/react');
8
8
  const react = require('react');
9
9
  const factory = require('../factory.cjs');
10
- const index = require('../presence/index.cjs');
10
+ require('../presence/index.cjs');
11
11
  const dialogContext = require('./dialog-context.cjs');
12
- const splitPresenceProps = require('../presence/split-presence-props.cjs');
12
+ const presenceContext = require('../presence/presence-context.cjs');
13
13
 
14
14
  const DialogContent = react.forwardRef((props, ref) => {
15
- const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
16
15
  const api = dialogContext.useDialogContext();
17
- return /* @__PURE__ */ jsxRuntime.jsx(index.Presence, { present: api.isOpen, ...presenceProps, fallback: /* @__PURE__ */ jsxRuntime.jsx("div", { ...api.contentProps }), children: /* @__PURE__ */ jsxRuntime.jsx(DialogInnerContent, { ref, ...localProps }) });
16
+ const presenceApi = presenceContext.usePresenceContext();
17
+ const mergedProps = react$1.mergeProps(api.contentProps, presenceApi.getPresenceProps(ref), props);
18
+ if (presenceApi.isUnmounted) {
19
+ return null;
20
+ }
21
+ return /* @__PURE__ */ jsxRuntime.jsx(factory.ark.div, { ...mergedProps });
18
22
  });
19
23
  DialogContent.displayName = "DialogContent";
20
- const DialogInnerContent = react.forwardRef(
21
- function DialogInnerContent2(props, ref) {
22
- const api = dialogContext.useDialogContext();
23
- const mergedProps = react$1.mergeProps(api.contentProps, props);
24
- return /* @__PURE__ */ jsxRuntime.jsx(factory.ark.div, { ...mergedProps, ref });
25
- }
26
- );
27
24
 
28
25
  exports.DialogContent = DialogContent;
@@ -1,8 +1,6 @@
1
1
  import { ForwardRefExoticComponent, RefAttributes } from 'react';
2
2
  /// <reference types="react" />
3
3
  import { type HTMLArkProps } from '../factory';
4
- import { type PresenceProps } from '../presence';
5
- import type { Assign } from '../types';
6
- export interface DialogContentProps extends Assign<HTMLArkProps<'div'>, Omit<PresenceProps, 'children' | 'fallback'>> {
4
+ export interface DialogContentProps extends HTMLArkProps<'div'> {
7
5
  }
8
6
  export declare const DialogContent: ForwardRefExoticComponent<DialogContentProps & RefAttributes<HTMLDivElement>>;
@@ -3,22 +3,19 @@ import { jsx } from 'react/jsx-runtime';
3
3
  import { mergeProps } from '@zag-js/react';
4
4
  import { forwardRef } from 'react';
5
5
  import { ark } from '../factory.mjs';
6
- import { Presence } from '../presence/index.mjs';
6
+ import '../presence/index.mjs';
7
7
  import { useDialogContext } from './dialog-context.mjs';
8
- import { splitPresenceProps } from '../presence/split-presence-props.mjs';
8
+ import { usePresenceContext } from '../presence/presence-context.mjs';
9
9
 
10
10
  const DialogContent = forwardRef((props, ref) => {
11
- const [presenceProps, localProps] = splitPresenceProps(props);
12
11
  const api = useDialogContext();
13
- return /* @__PURE__ */ jsx(Presence, { present: api.isOpen, ...presenceProps, fallback: /* @__PURE__ */ jsx("div", { ...api.contentProps }), children: /* @__PURE__ */ jsx(DialogInnerContent, { ref, ...localProps }) });
12
+ const presenceApi = usePresenceContext();
13
+ const mergedProps = mergeProps(api.contentProps, presenceApi.getPresenceProps(ref), props);
14
+ if (presenceApi.isUnmounted) {
15
+ return null;
16
+ }
17
+ return /* @__PURE__ */ jsx(ark.div, { ...mergedProps });
14
18
  });
15
19
  DialogContent.displayName = "DialogContent";
16
- const DialogInnerContent = forwardRef(
17
- function DialogInnerContent2(props, ref) {
18
- const api = useDialogContext();
19
- const mergedProps = mergeProps(api.contentProps, props);
20
- return /* @__PURE__ */ jsx(ark.div, { ...mergedProps, ref });
21
- }
22
- );
23
20
 
24
21
  export { DialogContent };
@@ -7,11 +7,17 @@ const jsxRuntime = require('react/jsx-runtime');
7
7
  const react$1 = require('@zag-js/react');
8
8
  const react = require('react');
9
9
  const factory = require('../factory.cjs');
10
+ require('../presence/index.cjs');
10
11
  const dialogContext = require('./dialog-context.cjs');
12
+ const presenceContext = require('../presence/presence-context.cjs');
11
13
 
12
14
  const DialogPositioner = react.forwardRef((props, ref) => {
13
15
  const api = dialogContext.useDialogContext();
14
16
  const mergedProps = react$1.mergeProps(api.positionerProps, props);
17
+ const presenceApi = presenceContext.usePresenceContext();
18
+ if (presenceApi.isUnmounted) {
19
+ return null;
20
+ }
15
21
  return /* @__PURE__ */ jsxRuntime.jsx(factory.ark.div, { ...mergedProps, ref });
16
22
  });
17
23
  DialogPositioner.displayName = "DialogPositioner";
@@ -3,11 +3,17 @@ import { jsx } from 'react/jsx-runtime';
3
3
  import { mergeProps } from '@zag-js/react';
4
4
  import { forwardRef } from 'react';
5
5
  import { ark } from '../factory.mjs';
6
+ import '../presence/index.mjs';
6
7
  import { useDialogContext } from './dialog-context.mjs';
8
+ import { usePresenceContext } from '../presence/presence-context.mjs';
7
9
 
8
10
  const DialogPositioner = forwardRef((props, ref) => {
9
11
  const api = useDialogContext();
10
12
  const mergedProps = mergeProps(api.positionerProps, props);
13
+ const presenceApi = usePresenceContext();
14
+ if (presenceApi.isUnmounted) {
15
+ return null;
16
+ }
11
17
  return /* @__PURE__ */ jsx(ark.div, { ...mergedProps, ref });
12
18
  });
13
19
  DialogPositioner.displayName = "DialogPositioner";
@@ -7,11 +7,20 @@ const jsxRuntime = require('react/jsx-runtime');
7
7
  const react$1 = require('@zag-js/react');
8
8
  const react = require('react');
9
9
  const factory = require('../factory.cjs');
10
+ require('../presence/index.cjs');
10
11
  const dialogContext = require('./dialog-context.cjs');
12
+ const presenceContext = require('../presence/presence-context.cjs');
11
13
 
12
14
  const DialogTrigger = react.forwardRef((props, ref) => {
13
15
  const api = dialogContext.useDialogContext();
14
- const mergedProps = react$1.mergeProps(api.triggerProps, props);
16
+ const presence = presenceContext.usePresenceContext();
17
+ const mergedProps = react$1.mergeProps(
18
+ {
19
+ ...api.triggerProps,
20
+ "aria-controls": presence.isUnmounted ? void 0 : api.triggerProps["aria-controls"]
21
+ },
22
+ props
23
+ );
15
24
  return /* @__PURE__ */ jsxRuntime.jsx(factory.ark.button, { ...mergedProps, ref });
16
25
  });
17
26
  DialogTrigger.displayName = "DialogTrigger";
@@ -3,11 +3,20 @@ import { jsx } from 'react/jsx-runtime';
3
3
  import { mergeProps } from '@zag-js/react';
4
4
  import { forwardRef } from 'react';
5
5
  import { ark } from '../factory.mjs';
6
+ import '../presence/index.mjs';
6
7
  import { useDialogContext } from './dialog-context.mjs';
8
+ import { usePresenceContext } from '../presence/presence-context.mjs';
7
9
 
8
10
  const DialogTrigger = forwardRef((props, ref) => {
9
11
  const api = useDialogContext();
10
- const mergedProps = mergeProps(api.triggerProps, props);
12
+ const presence = usePresenceContext();
13
+ const mergedProps = mergeProps(
14
+ {
15
+ ...api.triggerProps,
16
+ "aria-controls": presence.isUnmounted ? void 0 : api.triggerProps["aria-controls"]
17
+ },
18
+ props
19
+ );
11
20
  return /* @__PURE__ */ jsx(ark.button, { ...mergedProps, ref });
12
21
  });
13
22
  DialogTrigger.displayName = "DialogTrigger";
package/dialog/dialog.cjs CHANGED
@@ -5,15 +5,20 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
 
6
6
  const jsxRuntime = require('react/jsx-runtime');
7
7
  require('react');
8
+ require('../presence/index.cjs');
9
+ const splitPresenceProps = require('../presence/split-presence-props.cjs');
8
10
  const runIfFn = require('../run-if-fn.cjs');
9
11
  const dialogContext = require('./dialog-context.cjs');
10
12
  const useDialog = require('./use-dialog.cjs');
13
+ const usePresence = require('../presence/use-presence.cjs');
14
+ const presenceContext = require('../presence/presence-context.cjs');
11
15
 
12
16
  const Dialog = (props) => {
13
- const { children, ...useDialogProps } = props;
14
- const api = useDialog.useDialog(useDialogProps);
17
+ const [presenceProps, { children, ...localProps }] = splitPresenceProps.splitPresenceProps(props);
18
+ const api = useDialog.useDialog(localProps);
19
+ const presenceApi = usePresence.usePresence({ ...presenceProps, present: api.isOpen });
15
20
  const view = runIfFn.runIfFn(children, api);
16
- return /* @__PURE__ */ jsxRuntime.jsx(dialogContext.DialogProvider, { value: api, children: view });
21
+ return /* @__PURE__ */ jsxRuntime.jsx(dialogContext.DialogProvider, { value: api, children: /* @__PURE__ */ jsxRuntime.jsx(presenceContext.PresenceProvider, { value: presenceApi, children: view }) });
17
22
  };
18
23
 
19
24
  exports.Dialog = Dialog;
@@ -1,10 +1,8 @@
1
1
  import { JSX } from 'react/jsx-runtime';
2
2
  import { type ReactNode } from 'react';
3
- import { type Assign } from '../types';
4
- import { type DialogContext } from './dialog-context';
5
- import { type UseDialogProps } from './use-dialog';
6
- export interface DialogProps extends Assign<UseDialogProps, {
7
- children?: ReactNode | ((props: DialogContext) => ReactNode);
8
- }> {
3
+ import type { UsePresenceProps } from '../presence';
4
+ import { type UseDialogProps, type UseDialogReturn } from './use-dialog';
5
+ export interface DialogProps extends UseDialogProps, UsePresenceProps {
6
+ children?: ReactNode | ((api: UseDialogReturn) => ReactNode);
9
7
  }
10
8
  export declare const Dialog: (props: DialogProps) => JSX.Element;
package/dialog/dialog.mjs CHANGED
@@ -1,15 +1,20 @@
1
1
  'use client';
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
  import 'react';
4
+ import '../presence/index.mjs';
5
+ import { splitPresenceProps } from '../presence/split-presence-props.mjs';
4
6
  import { runIfFn } from '../run-if-fn.mjs';
5
7
  import { DialogProvider } from './dialog-context.mjs';
6
8
  import { useDialog } from './use-dialog.mjs';
9
+ import { usePresence } from '../presence/use-presence.mjs';
10
+ import { PresenceProvider } from '../presence/presence-context.mjs';
7
11
 
8
12
  const Dialog = (props) => {
9
- const { children, ...useDialogProps } = props;
10
- const api = useDialog(useDialogProps);
13
+ const [presenceProps, { children, ...localProps }] = splitPresenceProps(props);
14
+ const api = useDialog(localProps);
15
+ const presenceApi = usePresence({ ...presenceProps, present: api.isOpen });
11
16
  const view = runIfFn(children, api);
12
- return /* @__PURE__ */ jsx(DialogProvider, { value: api, children: view });
17
+ return /* @__PURE__ */ jsx(DialogProvider, { value: api, children: /* @__PURE__ */ jsx(PresenceProvider, { value: presenceApi, children: view }) });
13
18
  };
14
19
 
15
20
  export { Dialog };
@@ -1,10 +1,9 @@
1
1
  import { ForwardRefExoticComponent, RefAttributes, type ReactNode } from 'react';
2
2
  import { type HTMLArkProps } from '../factory';
3
3
  import { type Assign } from '../types';
4
- import { type EditableContext } from './editable-context';
5
- import { type UseEditableProps } from './use-editable';
6
- export interface EditableProps extends Assign<Omit<HTMLArkProps<'div'>, 'children'> & {
7
- children?: ReactNode | ((pages: EditableContext) => ReactNode);
8
- }, UseEditableProps> {
4
+ import { type UseEditableProps, type UseEditableReturn } from './use-editable';
5
+ export interface EditableProps extends Assign<Assign<HTMLArkProps<'div'>, {
6
+ children?: ReactNode | ((api: UseEditableReturn) => ReactNode);
7
+ }>, UseEditableProps> {
9
8
  }
10
9
  export declare const Editable: ForwardRefExoticComponent<EditableProps & RefAttributes<HTMLDivElement>>;
@@ -2,4 +2,4 @@ import { Provider } from 'react';
2
2
  /// <reference types="react" />
3
3
  import { type CommonProperties } from '@zag-js/types';
4
4
  export type EnvironmentContext = CommonProperties['getRootNode'];
5
- export declare const EnvironmentProvider: Provider<(() => ShadowRoot | Node | Document) | undefined>, useEnvironmentContext: () => (() => ShadowRoot | Node | Document) | undefined;
5
+ export declare const EnvironmentProvider: Provider<(() => Node | ShadowRoot | Document) | undefined>, useEnvironmentContext: () => (() => Node | ShadowRoot | Document) | undefined;
@@ -7,22 +7,19 @@ const jsxRuntime = require('react/jsx-runtime');
7
7
  const react$1 = require('@zag-js/react');
8
8
  const react = require('react');
9
9
  const factory = require('../factory.cjs');
10
- const index = require('../presence/index.cjs');
10
+ require('../presence/index.cjs');
11
11
  const hoverCardContext = require('./hover-card-context.cjs');
12
- const splitPresenceProps = require('../presence/split-presence-props.cjs');
12
+ const presenceContext = require('../presence/presence-context.cjs');
13
13
 
14
14
  const HoverCardContent = react.forwardRef((props, ref) => {
15
- const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
16
15
  const api = hoverCardContext.useHoverCardContext();
17
- return /* @__PURE__ */ jsxRuntime.jsx(index.Presence, { present: api.isOpen, ...presenceProps, fallback: /* @__PURE__ */ jsxRuntime.jsx("div", { ...api.contentProps }), children: /* @__PURE__ */ jsxRuntime.jsx(HoverCardInnerContent, { ref, ...localProps }) });
16
+ const presenceApi = presenceContext.usePresenceContext();
17
+ const mergedProps = react$1.mergeProps(api.contentProps, presenceApi.getPresenceProps(ref), props);
18
+ if (presenceApi.isUnmounted) {
19
+ return null;
20
+ }
21
+ return /* @__PURE__ */ jsxRuntime.jsx(factory.ark.div, { ...mergedProps });
18
22
  });
19
23
  HoverCardContent.displayName = "HoverCardContent";
20
- const HoverCardInnerContent = react.forwardRef(
21
- function HoverCardInnerContent2(props, ref) {
22
- const api = hoverCardContext.useHoverCardContext();
23
- const mergedProps = react$1.mergeProps(api.contentProps, props);
24
- return /* @__PURE__ */ jsxRuntime.jsx(factory.ark.div, { ...mergedProps, ref });
25
- }
26
- );
27
24
 
28
25
  exports.HoverCardContent = HoverCardContent;
@@ -1,8 +1,6 @@
1
1
  import { ForwardRefExoticComponent, RefAttributes } from 'react';
2
2
  /// <reference types="react" />
3
3
  import { type HTMLArkProps } from '../factory';
4
- import { type PresenceProps } from '../presence';
5
- import type { Assign } from '../types';
6
- export interface HoverCardContentProps extends Assign<HTMLArkProps<'div'>, Omit<PresenceProps, 'children' | 'fallback'>> {
4
+ export interface HoverCardContentProps extends HTMLArkProps<'div'> {
7
5
  }
8
6
  export declare const HoverCardContent: ForwardRefExoticComponent<HoverCardContentProps & RefAttributes<HTMLDivElement>>;
@@ -3,22 +3,19 @@ import { jsx } from 'react/jsx-runtime';
3
3
  import { mergeProps } from '@zag-js/react';
4
4
  import { forwardRef } from 'react';
5
5
  import { ark } from '../factory.mjs';
6
- import { Presence } from '../presence/index.mjs';
6
+ import '../presence/index.mjs';
7
7
  import { useHoverCardContext } from './hover-card-context.mjs';
8
- import { splitPresenceProps } from '../presence/split-presence-props.mjs';
8
+ import { usePresenceContext } from '../presence/presence-context.mjs';
9
9
 
10
10
  const HoverCardContent = forwardRef((props, ref) => {
11
- const [presenceProps, localProps] = splitPresenceProps(props);
12
11
  const api = useHoverCardContext();
13
- return /* @__PURE__ */ jsx(Presence, { present: api.isOpen, ...presenceProps, fallback: /* @__PURE__ */ jsx("div", { ...api.contentProps }), children: /* @__PURE__ */ jsx(HoverCardInnerContent, { ref, ...localProps }) });
12
+ const presenceApi = usePresenceContext();
13
+ const mergedProps = mergeProps(api.contentProps, presenceApi.getPresenceProps(ref), props);
14
+ if (presenceApi.isUnmounted) {
15
+ return null;
16
+ }
17
+ return /* @__PURE__ */ jsx(ark.div, { ...mergedProps });
14
18
  });
15
19
  HoverCardContent.displayName = "HoverCardContent";
16
- const HoverCardInnerContent = forwardRef(
17
- function HoverCardInnerContent2(props, ref) {
18
- const api = useHoverCardContext();
19
- const mergedProps = mergeProps(api.contentProps, props);
20
- return /* @__PURE__ */ jsx(ark.div, { ...mergedProps, ref });
21
- }
22
- );
23
20
 
24
21
  export { HoverCardContent };
@@ -7,12 +7,18 @@ const jsxRuntime = require('react/jsx-runtime');
7
7
  const react$1 = require('@zag-js/react');
8
8
  const react = require('react');
9
9
  const factory = require('../factory.cjs');
10
+ require('../presence/index.cjs');
10
11
  const hoverCardContext = require('./hover-card-context.cjs');
12
+ const presenceContext = require('../presence/presence-context.cjs');
11
13
 
12
14
  const HoverCardPositioner = react.forwardRef(
13
15
  (props, ref) => {
14
16
  const api = hoverCardContext.useHoverCardContext();
15
17
  const mergedProps = react$1.mergeProps(api.positionerProps, props);
18
+ const presenceApi = presenceContext.usePresenceContext();
19
+ if (presenceApi.isUnmounted) {
20
+ return null;
21
+ }
16
22
  return /* @__PURE__ */ jsxRuntime.jsx(factory.ark.div, { ...mergedProps, ref });
17
23
  }
18
24
  );
@@ -3,12 +3,18 @@ import { jsx } from 'react/jsx-runtime';
3
3
  import { mergeProps } from '@zag-js/react';
4
4
  import { forwardRef } from 'react';
5
5
  import { ark } from '../factory.mjs';
6
+ import '../presence/index.mjs';
6
7
  import { useHoverCardContext } from './hover-card-context.mjs';
8
+ import { usePresenceContext } from '../presence/presence-context.mjs';
7
9
 
8
10
  const HoverCardPositioner = forwardRef(
9
11
  (props, ref) => {
10
12
  const api = useHoverCardContext();
11
13
  const mergedProps = mergeProps(api.positionerProps, props);
14
+ const presenceApi = usePresenceContext();
15
+ if (presenceApi.isUnmounted) {
16
+ return null;
17
+ }
12
18
  return /* @__PURE__ */ jsx(ark.div, { ...mergedProps, ref });
13
19
  }
14
20
  );
@@ -5,15 +5,20 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
 
6
6
  const jsxRuntime = require('react/jsx-runtime');
7
7
  require('react');
8
+ require('../presence/index.cjs');
9
+ const splitPresenceProps = require('../presence/split-presence-props.cjs');
8
10
  const runIfFn = require('../run-if-fn.cjs');
9
11
  const hoverCardContext = require('./hover-card-context.cjs');
10
12
  const useHoverCard = require('./use-hover-card.cjs');
13
+ const usePresence = require('../presence/use-presence.cjs');
14
+ const presenceContext = require('../presence/presence-context.cjs');
11
15
 
12
16
  const HoverCard = (props) => {
13
- const { children, ...useHoverCardProps } = props;
14
- const api = useHoverCard.useHoverCard(useHoverCardProps);
17
+ const [presenceProps, { children, ...localProps }] = splitPresenceProps.splitPresenceProps(props);
18
+ const api = useHoverCard.useHoverCard(localProps);
19
+ const presenceApi = usePresence.usePresence({ ...presenceProps, present: api.isOpen });
15
20
  const view = runIfFn.runIfFn(children, api);
16
- return /* @__PURE__ */ jsxRuntime.jsx(hoverCardContext.HoverCardProvider, { value: api, children: view });
21
+ return /* @__PURE__ */ jsxRuntime.jsx(hoverCardContext.HoverCardProvider, { value: api, children: /* @__PURE__ */ jsxRuntime.jsx(presenceContext.PresenceProvider, { value: presenceApi, children: view }) });
17
22
  };
18
23
 
19
24
  exports.HoverCard = HoverCard;
@@ -1,10 +1,8 @@
1
1
  import { JSX } from 'react/jsx-runtime';
2
2
  import { type ReactNode } from 'react';
3
- import type { Assign } from '../types';
4
- import { type HoverCardContext } from './hover-card-context';
5
- import { type UseHoverCardProps } from './use-hover-card';
6
- export interface HoverCardProps extends Assign<UseHoverCardProps, {
7
- children?: ReactNode | ((props: HoverCardContext) => ReactNode);
8
- }> {
3
+ import type { UsePresenceProps } from '../presence';
4
+ import { type UseHoverCardProps, type UseHoverCardReturn } from './use-hover-card';
5
+ export interface HoverCardProps extends UseHoverCardProps, UsePresenceProps {
6
+ children?: ReactNode | ((api: UseHoverCardReturn) => ReactNode);
9
7
  }
10
8
  export declare const HoverCard: (props: HoverCardProps) => JSX.Element;
@@ -1,15 +1,20 @@
1
1
  'use client';
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
  import 'react';
4
+ import '../presence/index.mjs';
5
+ import { splitPresenceProps } from '../presence/split-presence-props.mjs';
4
6
  import { runIfFn } from '../run-if-fn.mjs';
5
7
  import { HoverCardProvider } from './hover-card-context.mjs';
6
8
  import { useHoverCard } from './use-hover-card.mjs';
9
+ import { usePresence } from '../presence/use-presence.mjs';
10
+ import { PresenceProvider } from '../presence/presence-context.mjs';
7
11
 
8
12
  const HoverCard = (props) => {
9
- const { children, ...useHoverCardProps } = props;
10
- const api = useHoverCard(useHoverCardProps);
13
+ const [presenceProps, { children, ...localProps }] = splitPresenceProps(props);
14
+ const api = useHoverCard(localProps);
15
+ const presenceApi = usePresence({ ...presenceProps, present: api.isOpen });
11
16
  const view = runIfFn(children, api);
12
- return /* @__PURE__ */ jsx(HoverCardProvider, { value: api, children: view });
17
+ return /* @__PURE__ */ jsx(HoverCardProvider, { value: api, children: /* @__PURE__ */ jsx(PresenceProvider, { value: presenceApi, children: view }) });
13
18
  };
14
19
 
15
20
  export { HoverCard };
package/index.cjs CHANGED
@@ -179,7 +179,10 @@ const popoverPositioner = require('./popover/popover-positioner.cjs');
179
179
  const popoverTitle = require('./popover/popover-title.cjs');
180
180
  const popoverTrigger = require('./popover/popover-trigger.cjs');
181
181
  const popoverContext = require('./popover/popover-context.cjs');
182
+ const presencePropsContext = require('./presence/presence-props-context.cjs');
183
+ const presenceContext = require('./presence/presence-context.cjs');
182
184
  const splitPresenceProps = require('./presence/split-presence-props.cjs');
185
+ const usePresence = require('./presence/use-presence.cjs');
183
186
  const radioGroupItem = require('./radio-group/radio-group-item.cjs');
184
187
  const radioGroupItemControl = require('./radio-group/radio-group-item-control.cjs');
185
188
  const radioGroupItemText = require('./radio-group/radio-group-item-text.cjs');
@@ -437,7 +440,12 @@ exports.PopoverPositioner = popoverPositioner.PopoverPositioner;
437
440
  exports.PopoverTitle = popoverTitle.PopoverTitle;
438
441
  exports.PopoverTrigger = popoverTrigger.PopoverTrigger;
439
442
  exports.usePopoverContext = popoverContext.usePopoverContext;
443
+ exports.PresencePropsProvider = presencePropsContext.PresencePropsProvider;
444
+ exports.usePresencePropsContext = presencePropsContext.usePresencePropsContext;
445
+ exports.PresenceProvider = presenceContext.PresenceProvider;
446
+ exports.usePresenceContext = presenceContext.usePresenceContext;
440
447
  exports.splitPresenceProps = splitPresenceProps.splitPresenceProps;
448
+ exports.usePresence = usePresence.usePresence;
441
449
  exports.RadioGroupItem = radioGroupItem.RadioGroupItem;
442
450
  exports.RadioGroupItemControl = radioGroupItemControl.RadioGroupItemControl;
443
451
  exports.RadioGroupItemText = radioGroupItemText.RadioGroupItemText;
package/index.mjs CHANGED
@@ -175,7 +175,10 @@ export { PopoverPositioner } from './popover/popover-positioner.mjs';
175
175
  export { PopoverTitle } from './popover/popover-title.mjs';
176
176
  export { PopoverTrigger } from './popover/popover-trigger.mjs';
177
177
  export { usePopoverContext } from './popover/popover-context.mjs';
178
+ export { PresencePropsProvider, usePresencePropsContext } from './presence/presence-props-context.mjs';
179
+ export { PresenceProvider, usePresenceContext } from './presence/presence-context.mjs';
178
180
  export { splitPresenceProps } from './presence/split-presence-props.mjs';
181
+ export { usePresence } from './presence/use-presence.mjs';
179
182
  export { RadioGroupItem } from './radio-group/radio-group-item.mjs';
180
183
  export { RadioGroupItemControl } from './radio-group/radio-group-item-control.mjs';
181
184
  export { RadioGroupItemText } from './radio-group/radio-group-item-text.mjs';
@@ -7,22 +7,19 @@ const jsxRuntime = require('react/jsx-runtime');
7
7
  const react$1 = require('@zag-js/react');
8
8
  const react = require('react');
9
9
  const factory = require('../factory.cjs');
10
- const index = require('../presence/index.cjs');
10
+ require('../presence/index.cjs');
11
11
  const menuContext = require('./menu-context.cjs');
12
- const splitPresenceProps = require('../presence/split-presence-props.cjs');
12
+ const presenceContext = require('../presence/presence-context.cjs');
13
13
 
14
14
  const MenuContent = react.forwardRef((props, ref) => {
15
- const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
16
15
  const api = menuContext.useMenuContext();
17
- return /* @__PURE__ */ jsxRuntime.jsx(index.Presence, { present: api?.isOpen, ...presenceProps, fallback: /* @__PURE__ */ jsxRuntime.jsx("div", { ...api.contentProps }), children: /* @__PURE__ */ jsxRuntime.jsx(MenuInnerContent, { ref, ...localProps }) });
16
+ const presenceApi = presenceContext.usePresenceContext();
17
+ const mergedProps = react$1.mergeProps(api?.contentProps ?? {}, presenceApi.getPresenceProps(ref), props);
18
+ if (presenceApi.isUnmounted) {
19
+ return null;
20
+ }
21
+ return /* @__PURE__ */ jsxRuntime.jsx(factory.ark.div, { ...mergedProps });
18
22
  });
19
23
  MenuContent.displayName = "MenuContent";
20
- const MenuInnerContent = react.forwardRef(
21
- function MenuInnerContent2(props, ref) {
22
- const api = menuContext.useMenuContext();
23
- const mergedProps = react$1.mergeProps(api?.contentProps ?? {}, props);
24
- return /* @__PURE__ */ jsxRuntime.jsx(factory.ark.div, { ...mergedProps, ref });
25
- }
26
- );
27
24
 
28
25
  exports.MenuContent = MenuContent;
@@ -1,8 +1,6 @@
1
1
  import { ForwardRefExoticComponent, RefAttributes } from 'react';
2
2
  /// <reference types="react" />
3
3
  import { type HTMLArkProps } from '../factory';
4
- import { type PresenceProps } from '../presence';
5
- import type { Assign } from '../types';
6
- export interface MenuContentProps extends Assign<HTMLArkProps<'div'>, Omit<PresenceProps, 'children' | 'fallback'>> {
4
+ export interface MenuContentProps extends HTMLArkProps<'div'> {
7
5
  }
8
6
  export declare const MenuContent: ForwardRefExoticComponent<MenuContentProps & RefAttributes<HTMLDivElement>>;