@ark-ui/react 1.0.0-beta.3 → 1.0.0-beta.5

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 (181) hide show
  1. package/CHANGELOG.md +11 -1
  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/carousel/carousel.stories.d.ts +2 -0
  17. package/checkbox/checkbox.cjs +2 -2
  18. package/checkbox/checkbox.d.ts +4 -5
  19. package/checkbox/checkbox.mjs +2 -2
  20. package/color-picker/color-picker-content.cjs +8 -11
  21. package/color-picker/color-picker-content.d.ts +1 -3
  22. package/color-picker/color-picker-content.mjs +8 -11
  23. package/color-picker/color-picker-positioner.cjs +6 -0
  24. package/color-picker/color-picker-positioner.mjs +6 -0
  25. package/color-picker/color-picker-view.cjs +15 -0
  26. package/color-picker/color-picker-view.d.ts +7 -0
  27. package/color-picker/color-picker-view.mjs +11 -0
  28. package/color-picker/color-picker.cjs +31 -28
  29. package/color-picker/color-picker.d.ts +6 -5
  30. package/color-picker/color-picker.mjs +32 -29
  31. package/color-picker/color-picker.stories.d.ts +1 -0
  32. package/color-picker/index.cjs +3 -1
  33. package/color-picker/index.d.ts +4 -1
  34. package/color-picker/index.mjs +3 -1
  35. package/combobox/combobox-content.cjs +8 -11
  36. package/combobox/combobox-content.d.ts +1 -3
  37. package/combobox/combobox-content.mjs +8 -11
  38. package/combobox/combobox-item.d.ts +6 -4
  39. package/combobox/combobox-positioner.cjs +6 -0
  40. package/combobox/combobox-positioner.mjs +6 -0
  41. package/combobox/combobox.cjs +8 -2
  42. package/combobox/combobox.d.ts +4 -3
  43. package/combobox/combobox.mjs +8 -2
  44. package/date-picker/date-picker-content.cjs +8 -11
  45. package/date-picker/date-picker-content.d.ts +1 -3
  46. package/date-picker/date-picker-content.mjs +8 -11
  47. package/date-picker/date-picker-positioner.cjs +6 -0
  48. package/date-picker/date-picker-positioner.mjs +6 -0
  49. package/date-picker/date-picker-view.d.ts +3 -3
  50. package/date-picker/date-picker.cjs +11 -5
  51. package/date-picker/date-picker.d.ts +6 -5
  52. package/date-picker/date-picker.mjs +11 -5
  53. package/date-picker/date-picker.stories.d.ts +1 -0
  54. package/dialog/dialog-backdrop.cjs +8 -11
  55. package/dialog/dialog-backdrop.d.ts +1 -3
  56. package/dialog/dialog-backdrop.mjs +8 -11
  57. package/dialog/dialog-content.cjs +8 -11
  58. package/dialog/dialog-content.d.ts +1 -3
  59. package/dialog/dialog-content.mjs +8 -11
  60. package/dialog/dialog-positioner.cjs +6 -0
  61. package/dialog/dialog-positioner.mjs +6 -0
  62. package/dialog/dialog-trigger.cjs +10 -1
  63. package/dialog/dialog-trigger.mjs +10 -1
  64. package/dialog/dialog.cjs +8 -3
  65. package/dialog/dialog.d.ts +4 -6
  66. package/dialog/dialog.mjs +8 -3
  67. package/editable/editable.d.ts +4 -5
  68. package/environment/environment-context.d.ts +1 -1
  69. package/hover-card/hover-card-content.cjs +8 -11
  70. package/hover-card/hover-card-content.d.ts +1 -3
  71. package/hover-card/hover-card-content.mjs +8 -11
  72. package/hover-card/hover-card-positioner.cjs +6 -0
  73. package/hover-card/hover-card-positioner.mjs +6 -0
  74. package/hover-card/hover-card.cjs +8 -3
  75. package/hover-card/hover-card.d.ts +4 -6
  76. package/hover-card/hover-card.mjs +8 -3
  77. package/index.cjs +10 -2
  78. package/index.mjs +4 -1
  79. package/menu/index.d.ts +1 -1
  80. package/menu/menu-content.cjs +8 -11
  81. package/menu/menu-content.d.ts +1 -3
  82. package/menu/menu-content.mjs +8 -11
  83. package/menu/menu-item-group-label.cjs +1 -1
  84. package/menu/menu-item-group-label.d.ts +3 -3
  85. package/menu/menu-item-group-label.mjs +1 -1
  86. package/menu/menu-option-item.d.ts +2 -2
  87. package/menu/menu.cjs +11 -12
  88. package/menu/menu.d.ts +4 -11
  89. package/menu/menu.mjs +12 -13
  90. package/menu/menu.stories.d.ts +4 -1
  91. package/number-input/number-input.stories.d.ts +6 -1
  92. package/package.json +50 -50
  93. package/pagination/pagination.d.ts +3 -3
  94. package/pin-input/pin-input.stories.d.ts +5 -0
  95. package/popover/popover-content.cjs +8 -11
  96. package/popover/popover-content.d.ts +1 -3
  97. package/popover/popover-content.mjs +8 -11
  98. package/popover/popover-positioner.cjs +6 -0
  99. package/popover/popover-positioner.mjs +6 -0
  100. package/popover/popover-trigger.cjs +10 -1
  101. package/popover/popover-trigger.mjs +10 -1
  102. package/popover/popover.cjs +8 -3
  103. package/popover/popover.d.ts +4 -6
  104. package/popover/popover.mjs +8 -3
  105. package/popover/popover.stories.d.ts +4 -1
  106. package/presence/index.cjs +8 -0
  107. package/presence/index.d.ts +8 -5
  108. package/presence/index.mjs +3 -0
  109. package/presence/presence-context.cjs +15 -0
  110. package/presence/presence-context.d.ts +6 -0
  111. package/presence/presence-context.mjs +10 -0
  112. package/presence/presence-props-context.cjs +17 -0
  113. package/presence/presence-props-context.d.ts +6 -0
  114. package/presence/presence-props-context.mjs +12 -0
  115. package/presence/presence.cjs +18 -19
  116. package/presence/presence.d.ts +6 -21
  117. package/presence/presence.mjs +19 -20
  118. package/presence/split-presence-props.d.ts +2 -2
  119. package/presence/use-presence.cjs +22 -4
  120. package/presence/use-presence.d.ts +21 -1
  121. package/presence/use-presence.mjs +20 -2
  122. package/radio-group/radio-group-item.d.ts +2 -3
  123. package/radio-group/radio-group.stories.d.ts +3 -0
  124. package/rating-group/rating-group-control.d.ts +5 -3
  125. package/rating-group/rating-group-item.d.ts +4 -5
  126. package/rating-group/rating-group.stories.d.ts +6 -0
  127. package/segment-group/segment-group-item.d.ts +2 -3
  128. package/segment-group/segment-group.stories.d.ts +3 -0
  129. package/select/select-content.cjs +8 -11
  130. package/select/select-content.d.ts +1 -3
  131. package/select/select-content.mjs +8 -11
  132. package/select/select-control.cjs +4 -1
  133. package/select/select-control.mjs +5 -2
  134. package/select/select-item.d.ts +2 -3
  135. package/select/select-positioner.cjs +6 -0
  136. package/select/select-positioner.mjs +6 -0
  137. package/select/select.cjs +8 -2
  138. package/select/select.d.ts +4 -3
  139. package/select/select.mjs +8 -2
  140. package/select/select.stories.d.ts +1 -1
  141. package/slider/index.cjs +4 -4
  142. package/slider/index.d.ts +4 -4
  143. package/slider/index.mjs +4 -4
  144. package/slider/{slider-output.cjs → slider-value-text.cjs} +5 -7
  145. package/slider/slider-value-text.d.ts +6 -0
  146. package/slider/slider-value-text.mjs +16 -0
  147. package/slider/slider.d.ts +3 -3
  148. package/slider/slider.stories.d.ts +9 -2
  149. package/splitter/splitter.d.ts +3 -3
  150. package/switch/switch.d.ts +3 -3
  151. package/switch/switch.stories.d.ts +1 -0
  152. package/tabs/tab-content.cjs +13 -12
  153. package/tabs/tab-content.d.ts +2 -4
  154. package/tabs/tab-content.mjs +13 -12
  155. package/tabs/tabs.cjs +7 -3
  156. package/tabs/tabs.d.ts +2 -1
  157. package/tabs/tabs.mjs +7 -3
  158. package/tags-input/tags-input-item.d.ts +4 -5
  159. package/tags-input/tags-input.d.ts +3 -3
  160. package/tags-input/tags-input.stories.d.ts +6 -0
  161. package/toast/toast.stories.d.ts +5 -1
  162. package/toggle-group/toggle-group.stories.d.ts +1 -1
  163. package/tooltip/tooltip-content.cjs +8 -11
  164. package/tooltip/tooltip-content.d.ts +1 -3
  165. package/tooltip/tooltip-content.mjs +8 -11
  166. package/tooltip/tooltip-positioner.cjs +6 -0
  167. package/tooltip/tooltip-positioner.mjs +6 -0
  168. package/tooltip/tooltip.cjs +8 -3
  169. package/tooltip/tooltip.d.ts +4 -4
  170. package/tooltip/tooltip.mjs +8 -3
  171. package/types.d.ts +1 -3
  172. package/use-event.cjs +6 -2
  173. package/use-event.mjs +6 -2
  174. package/slider/slider-output.d.ts +0 -9
  175. package/slider/slider-output.mjs +0 -18
  176. package/tabs/tab-presence.cjs +0 -17
  177. package/tabs/tab-presence.d.ts +0 -6
  178. package/tabs/tab-presence.mjs +0 -13
  179. package/use-latest-ref.cjs +0 -14
  180. package/use-latest-ref.d.ts +0 -3
  181. package/use-latest-ref.mjs +0 -10
@@ -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 { usePopoverContext } from './popover-context.mjs';
8
+ import { usePresenceContext } from '../presence/presence-context.mjs';
7
9
 
8
10
  const PopoverTrigger = forwardRef((props, ref) => {
9
11
  const api = usePopoverContext();
10
- const mergedProps = mergeProps(api.triggerProps, props);
12
+ const presenceApi = usePresenceContext();
13
+ const mergedProps = mergeProps(
14
+ {
15
+ ...api.triggerProps,
16
+ "aria-controls": presenceApi.isUnmounted ? void 0 : api.triggerProps["aria-controls"]
17
+ },
18
+ props
19
+ );
11
20
  return /* @__PURE__ */ jsx(ark.button, { ...mergedProps, ref });
12
21
  });
13
22
  PopoverTrigger.displayName = "PopoverTrigger";
@@ -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 popoverContext = require('./popover-context.cjs');
10
12
  const usePopover = require('./use-popover.cjs');
13
+ const usePresence = require('../presence/use-presence.cjs');
14
+ const presenceContext = require('../presence/presence-context.cjs');
11
15
 
12
16
  const Popover = (props) => {
13
- const { children, ...usePopoverProps } = props;
14
- const api = usePopover.usePopover(usePopoverProps);
17
+ const [presenceProps, { children, ...localProps }] = splitPresenceProps.splitPresenceProps(props);
18
+ const api = usePopover.usePopover(localProps);
19
+ const presenceApi = usePresence.usePresence({ ...presenceProps, present: api.isOpen });
15
20
  const view = runIfFn.runIfFn(children, api);
16
- return /* @__PURE__ */ jsxRuntime.jsx(popoverContext.PopoverProvider, { value: api, children: view });
21
+ return /* @__PURE__ */ jsxRuntime.jsx(popoverContext.PopoverProvider, { value: api, children: /* @__PURE__ */ jsxRuntime.jsx(presenceContext.PresenceProvider, { value: presenceApi, children: view }) });
17
22
  };
18
23
 
19
24
  exports.Popover = Popover;
@@ -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 PopoverContext } from './popover-context';
5
- import { type UsePopoverProps } from './use-popover';
6
- export interface PopoverProps extends Assign<UsePopoverProps, {
7
- children?: ReactNode | ((props: PopoverContext) => ReactNode);
8
- }> {
3
+ import type { UsePresenceProps } from '../presence';
4
+ import { type UsePopoverProps, type UsePopoverReturn } from './use-popover';
5
+ export interface PopoverProps extends UsePopoverProps, UsePresenceProps {
6
+ children?: ReactNode | ((api: UsePopoverReturn) => ReactNode);
9
7
  }
10
8
  export declare const Popover: (props: PopoverProps) => 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 { PopoverProvider } from './popover-context.mjs';
6
8
  import { usePopover } from './use-popover.mjs';
9
+ import { usePresence } from '../presence/use-presence.mjs';
10
+ import { PresenceProvider } from '../presence/presence-context.mjs';
7
11
 
8
12
  const Popover = (props) => {
9
- const { children, ...usePopoverProps } = props;
10
- const api = usePopover(usePopoverProps);
13
+ const [presenceProps, { children, ...localProps }] = splitPresenceProps(props);
14
+ const api = usePopover(localProps);
15
+ const presenceApi = usePresence({ ...presenceProps, present: api.isOpen });
11
16
  const view = runIfFn(children, api);
12
- return /* @__PURE__ */ jsx(PopoverProvider, { value: api, children: view });
17
+ return /* @__PURE__ */ jsx(PopoverProvider, { value: api, children: /* @__PURE__ */ jsx(PresenceProvider, { value: presenceApi, children: view }) });
13
18
  };
14
19
 
15
20
  export { Popover };
@@ -5,8 +5,11 @@ type PopoverType = typeof Popover;
5
5
  declare const meta: Meta<PopoverType>;
6
6
  export default meta;
7
7
  export declare const Basic: () => JSX.Element;
8
+ export declare const Portalled: () => JSX.Element;
9
+ export declare const OnOpenChange: () => JSX.Element;
8
10
  export declare const Controlled: () => JSX.Element;
9
11
  export declare const RenderFn: () => JSX.Element;
10
12
  export declare const Arrow: () => JSX.Element;
11
- export declare const Positioning: () => JSX.Element;
12
13
  export declare const CloseBehavior: () => JSX.Element;
14
+ export declare const Positioning: () => JSX.Element;
15
+ export declare const Modal: () => JSX.Element;
@@ -4,11 +4,19 @@
4
4
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
 
6
6
  const presence = require('./presence.cjs');
7
+ const presenceContext = require('./presence-context.cjs');
8
+ const presencePropsContext = require('./presence-props-context.cjs');
7
9
  const splitPresenceProps = require('./split-presence-props.cjs');
10
+ const usePresence = require('./use-presence.cjs');
8
11
 
9
12
  const Presence = Object.assign(presence.Presence, {
10
13
  Root: presence.Presence
11
14
  });
12
15
 
16
+ exports.PresenceProvider = presenceContext.PresenceProvider;
17
+ exports.usePresenceContext = presenceContext.usePresenceContext;
18
+ exports.PresencePropsProvider = presencePropsContext.PresencePropsProvider;
19
+ exports.usePresencePropsContext = presencePropsContext.usePresencePropsContext;
13
20
  exports.splitPresenceProps = splitPresenceProps.splitPresenceProps;
21
+ exports.usePresence = usePresence.usePresence;
14
22
  exports.Presence = Presence;
@@ -1,9 +1,12 @@
1
- import { ReactElement, JSXElementConstructor } from 'react';
1
+ import { ForwardRefExoticComponent, RefAttributes } from 'react';
2
2
  /// <reference types="react" />
3
3
  import { type PresenceProps } from './presence';
4
+ import { PresenceProvider, usePresenceContext, type PresenceContext } from './presence-context';
5
+ import { PresencePropsProvider, usePresencePropsContext, type PresencePropsContext } from './presence-props-context';
4
6
  import { splitPresenceProps } from './split-presence-props';
5
- declare const Presence: ((props: PresenceProps) => ReactElement<any, string | JSXElementConstructor<any>> | undefined) & {
6
- Root: (props: PresenceProps) => ReactElement<any, string | JSXElementConstructor<any>> | undefined;
7
+ import { usePresence, type UsePresenceProps, type UsePresenceReturn } from './use-presence';
8
+ declare const Presence: ForwardRefExoticComponent<PresenceProps & RefAttributes<HTMLDivElement>> & {
9
+ Root: ForwardRefExoticComponent<PresenceProps & RefAttributes<HTMLDivElement>>;
7
10
  };
8
- export { Presence, splitPresenceProps };
9
- export type { PresenceProps };
11
+ export { Presence, PresencePropsProvider, PresenceProvider, splitPresenceProps, usePresence, usePresenceContext, usePresencePropsContext, };
12
+ export type { PresenceContext, PresenceProps, PresencePropsContext, UsePresenceProps, UsePresenceReturn, };
@@ -1,6 +1,9 @@
1
1
  'use client';
2
2
  import { Presence as Presence$1 } from './presence.mjs';
3
+ export { PresenceProvider, usePresenceContext } from './presence-context.mjs';
4
+ export { PresencePropsProvider, usePresencePropsContext } from './presence-props-context.mjs';
3
5
  export { splitPresenceProps } from './split-presence-props.mjs';
6
+ export { usePresence } from './use-presence.mjs';
4
7
 
5
8
  const Presence = Object.assign(Presence$1, {
6
9
  Root: Presence$1
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
+
6
+ const createContext = require('../create-context.cjs');
7
+
8
+ const [PresenceProvider, usePresenceContext] = createContext.createContext({
9
+ name: "PresenceContext",
10
+ hookName: "usePresenceContext",
11
+ providerName: "<PresenceProvider />"
12
+ });
13
+
14
+ exports.PresenceProvider = PresenceProvider;
15
+ exports.usePresenceContext = usePresenceContext;
@@ -0,0 +1,6 @@
1
+ import { Provider } from 'react';
2
+ /// <reference types="react" />
3
+ import type { UsePresenceReturn } from './use-presence';
4
+ export interface PresenceContext extends UsePresenceReturn {
5
+ }
6
+ export declare const PresenceProvider: Provider<PresenceContext>, usePresenceContext: () => PresenceContext;
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { createContext } from '../create-context.mjs';
3
+
4
+ const [PresenceProvider, usePresenceContext] = createContext({
5
+ name: "PresenceContext",
6
+ hookName: "usePresenceContext",
7
+ providerName: "<PresenceProvider />"
8
+ });
9
+
10
+ export { PresenceProvider, usePresenceContext };
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
+
6
+ const createContext = require('../create-context.cjs');
7
+
8
+ const [PresencePropsProvider, usePresencePropsContext] = createContext.createContext(
9
+ {
10
+ name: "PresencePropsContext",
11
+ hookName: "usePresencePropsContext",
12
+ providerName: "<PresencePropsProvider />"
13
+ }
14
+ );
15
+
16
+ exports.PresencePropsProvider = PresencePropsProvider;
17
+ exports.usePresencePropsContext = usePresencePropsContext;
@@ -0,0 +1,6 @@
1
+ import { Provider } from 'react';
2
+ /// <reference types="react" />
3
+ import type { UsePresenceProps } from './use-presence';
4
+ export interface PresencePropsContext extends UsePresenceProps {
5
+ }
6
+ export declare const PresencePropsProvider: Provider<PresencePropsContext>, usePresencePropsContext: () => PresencePropsContext;
@@ -0,0 +1,12 @@
1
+ 'use client';
2
+ import { createContext } from '../create-context.mjs';
3
+
4
+ const [PresencePropsProvider, usePresencePropsContext] = createContext(
5
+ {
6
+ name: "PresencePropsContext",
7
+ hookName: "usePresencePropsContext",
8
+ providerName: "<PresencePropsProvider />"
9
+ }
10
+ );
11
+
12
+ export { PresencePropsProvider, usePresencePropsContext };
@@ -3,29 +3,28 @@
3
3
 
4
4
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
 
6
+ const jsxRuntime = require('react/jsx-runtime');
6
7
  const react = require('react');
7
- const composeRefs = require('../compose-refs.cjs');
8
- const createSplitProps = require('../create-split-props.cjs');
8
+ const factory = require('../factory.cjs');
9
+ const splitPresenceProps = require('./split-presence-props.cjs');
9
10
  const usePresence = require('./use-presence.cjs');
10
11
 
11
- const Presence = (props) => {
12
- const [presenceProps, { children, lazyMount, fallback, unmountOnExit }] = createSplitProps.createSplitProps()(props, ["present", "onExitComplete"]);
12
+ const Presence = react.forwardRef((props, ref) => {
13
+ const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
13
14
  const api = usePresence.usePresence(presenceProps);
14
- const wasEverPresent = react.useRef(false);
15
- if (api.isPresent) {
16
- wasEverPresent.current = true;
15
+ if (api.isUnmounted) {
16
+ return null;
17
17
  }
18
- if (!api.isPresent && !wasEverPresent.current && lazyMount || unmountOnExit && !api.isPresent && wasEverPresent.current) {
19
- return fallback;
20
- }
21
- const onlyChild = react.Children.only(children);
22
- return react.cloneElement(onlyChild, {
23
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
- ref: composeRefs.composeRefs(api.setNode, onlyChild.ref),
25
- hidden: !api.isPresent,
26
- ["data-state"]: presenceProps.present ? "open" : "closed",
27
- ...onlyChild.props
28
- });
29
- };
18
+ return /* @__PURE__ */ jsxRuntime.jsx(
19
+ factory.ark.div,
20
+ {
21
+ ...localProps,
22
+ ...api.getPresenceProps(ref),
23
+ "data-scope": "presence",
24
+ "data-part": "root"
25
+ }
26
+ );
27
+ });
28
+ Presence.displayName = "Presence";
30
29
 
31
30
  exports.Presence = Presence;
@@ -1,23 +1,8 @@
1
- import { JSXElementConstructor, type ReactElement } from 'react';
1
+ import { ForwardRefExoticComponent, RefAttributes } from 'react';
2
+ /// <reference types="react" />
3
+ import { type HTMLArkProps } from '../factory';
4
+ import type { Assign } from '../types';
2
5
  import { type UsePresenceProps } from './use-presence';
3
- export interface PresenceProps extends UsePresenceProps {
4
- /**
5
- * Only a single child is allowed.
6
- */
7
- children: ReactElement;
8
- /**
9
- * Whether to enable lazy mounting
10
- * @default false
11
- */
12
- lazyMount?: boolean;
13
- /**
14
- * Whether to unmount on exit.
15
- * @default false
16
- */
17
- unmountOnExit?: boolean;
18
- /**
19
- * A fallback to render the component is not present.
20
- */
21
- fallback?: ReactElement;
6
+ export interface PresenceProps extends Assign<HTMLArkProps<'div'>, UsePresenceProps> {
22
7
  }
23
- export declare const Presence: (props: PresenceProps) => ReactElement<any, string | JSXElementConstructor<any>> | undefined;
8
+ export declare const Presence: ForwardRefExoticComponent<PresenceProps & RefAttributes<HTMLDivElement>>;
@@ -1,27 +1,26 @@
1
1
  'use client';
2
- import { useRef, Children, cloneElement } from 'react';
3
- import { composeRefs } from '../compose-refs.mjs';
4
- import { createSplitProps } from '../create-split-props.mjs';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { forwardRef } from 'react';
4
+ import { ark } from '../factory.mjs';
5
+ import { splitPresenceProps } from './split-presence-props.mjs';
5
6
  import { usePresence } from './use-presence.mjs';
6
7
 
7
- const Presence = (props) => {
8
- const [presenceProps, { children, lazyMount, fallback, unmountOnExit }] = createSplitProps()(props, ["present", "onExitComplete"]);
8
+ const Presence = forwardRef((props, ref) => {
9
+ const [presenceProps, localProps] = splitPresenceProps(props);
9
10
  const api = usePresence(presenceProps);
10
- const wasEverPresent = useRef(false);
11
- if (api.isPresent) {
12
- wasEverPresent.current = true;
11
+ if (api.isUnmounted) {
12
+ return null;
13
13
  }
14
- if (!api.isPresent && !wasEverPresent.current && lazyMount || unmountOnExit && !api.isPresent && wasEverPresent.current) {
15
- return fallback;
16
- }
17
- const onlyChild = Children.only(children);
18
- return cloneElement(onlyChild, {
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
- ref: composeRefs(api.setNode, onlyChild.ref),
21
- hidden: !api.isPresent,
22
- ["data-state"]: presenceProps.present ? "open" : "closed",
23
- ...onlyChild.props
24
- });
25
- };
14
+ return /* @__PURE__ */ jsx(
15
+ ark.div,
16
+ {
17
+ ...localProps,
18
+ ...api.getPresenceProps(ref),
19
+ "data-scope": "presence",
20
+ "data-part": "root"
21
+ }
22
+ );
23
+ });
24
+ Presence.displayName = "Presence";
26
25
 
27
26
  export { Presence };
@@ -1,2 +1,2 @@
1
- import type { PresenceProps } from './presence';
2
- export declare function splitPresenceProps<T>(props: T & Omit<PresenceProps, 'children'>): [Omit<PresenceProps, "children" | "fallback">, Omit<T & Omit<PresenceProps, "children">, "present" | "onExitComplete" | "lazyMount" | "unmountOnExit">];
1
+ import type { UsePresenceProps } from './use-presence';
2
+ export declare function splitPresenceProps<T>(props: T & UsePresenceProps): [UsePresenceProps, Omit<T & UsePresenceProps, "present" | "onExitComplete" | "lazyMount" | "unmountOnExit">];
@@ -4,7 +4,9 @@
4
4
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
 
6
6
  const presence = require('@zag-js/presence');
7
- const react = require('@zag-js/react');
7
+ const react$1 = require('@zag-js/react');
8
+ const react = require('react');
9
+ const composeRefs = require('../compose-refs.cjs');
8
10
  const useEvent = require('../use-event.cjs');
9
11
 
10
12
  function _interopNamespaceDefault(e) {
@@ -27,12 +29,28 @@ function _interopNamespaceDefault(e) {
27
29
  const presence__namespace = /*#__PURE__*/_interopNamespaceDefault(presence);
28
30
 
29
31
  const usePresence = (props) => {
32
+ const { lazyMount, unmountOnExit, ...rest } = props;
33
+ const wasEverPresent = react.useRef(false);
30
34
  const context = {
31
- ...props,
35
+ ...rest,
32
36
  onExitComplete: useEvent.useEvent(props.onExitComplete)
33
37
  };
34
- const [state, send] = react.useMachine(presence__namespace.machine(context), { context });
35
- return presence__namespace.connect(state, send, react.normalizeProps);
38
+ const [state, send] = react$1.useMachine(presence__namespace.machine(context), { context });
39
+ const api = presence__namespace.connect(state, send, react$1.normalizeProps);
40
+ if (api.isPresent) {
41
+ wasEverPresent.current = true;
42
+ }
43
+ const isUnmounted = !api.isPresent && !wasEverPresent.current && lazyMount || unmountOnExit && !api.isPresent && wasEverPresent.current;
44
+ const getPresenceProps = (ref) => ({
45
+ ref: composeRefs.composeRefs(api.setNode, ref),
46
+ "data-state": props.present ? "open" : "closed",
47
+ hidden: !api.isPresent
48
+ });
49
+ return {
50
+ getPresenceProps,
51
+ isPresent: api.isPresent,
52
+ isUnmounted
53
+ };
36
54
  };
37
55
 
38
56
  exports.usePresence = usePresence;
@@ -1,5 +1,25 @@
1
1
  import * as presence from '@zag-js/presence';
2
+ import { type ForwardedRef } from 'react';
2
3
  import type { Optional } from '../types';
3
4
  export interface UsePresenceProps extends Optional<presence.Context, 'present'> {
5
+ /**
6
+ * Whether to enable lazy mounting
7
+ * @default false
8
+ */
9
+ lazyMount?: boolean;
10
+ /**
11
+ * Whether to unmount on exit.
12
+ * @default false
13
+ */
14
+ unmountOnExit?: boolean;
4
15
  }
5
- export declare const usePresence: (props: UsePresenceProps) => presence.Api;
16
+ export type UsePresenceReturn = ReturnType<typeof usePresence>;
17
+ export declare const usePresence: (props: UsePresenceProps) => {
18
+ getPresenceProps: <T extends HTMLElement>(ref: ForwardedRef<T>) => {
19
+ ref: ForwardedRef<T>;
20
+ 'data-state': string;
21
+ hidden: boolean;
22
+ };
23
+ isPresent: boolean;
24
+ isUnmounted: boolean | undefined;
25
+ };
@@ -1,15 +1,33 @@
1
1
  'use client';
2
2
  import * as presence from '@zag-js/presence';
3
3
  import { useMachine, normalizeProps } from '@zag-js/react';
4
+ import { useRef } from 'react';
5
+ import { composeRefs } from '../compose-refs.mjs';
4
6
  import { useEvent } from '../use-event.mjs';
5
7
 
6
8
  const usePresence = (props) => {
9
+ const { lazyMount, unmountOnExit, ...rest } = props;
10
+ const wasEverPresent = useRef(false);
7
11
  const context = {
8
- ...props,
12
+ ...rest,
9
13
  onExitComplete: useEvent(props.onExitComplete)
10
14
  };
11
15
  const [state, send] = useMachine(presence.machine(context), { context });
12
- return presence.connect(state, send, normalizeProps);
16
+ const api = presence.connect(state, send, normalizeProps);
17
+ if (api.isPresent) {
18
+ wasEverPresent.current = true;
19
+ }
20
+ const isUnmounted = !api.isPresent && !wasEverPresent.current && lazyMount || unmountOnExit && !api.isPresent && wasEverPresent.current;
21
+ const getPresenceProps = (ref) => ({
22
+ ref: composeRefs(api.setNode, ref),
23
+ "data-state": props.present ? "open" : "closed",
24
+ hidden: !api.isPresent
25
+ });
26
+ return {
27
+ getPresenceProps,
28
+ isPresent: api.isPresent,
29
+ isUnmounted
30
+ };
13
31
  };
14
32
 
15
33
  export { usePresence };
@@ -1,10 +1,9 @@
1
- import { ForwardRefExoticComponent, RefAttributes } from 'react';
2
- /// <reference types="react" />
3
1
  import type { ItemProps, ItemState } from '@zag-js/radio-group';
2
+ import { ForwardRefExoticComponent, RefAttributes, type ReactNode } from 'react';
4
3
  import { type HTMLArkProps } from '../factory';
5
4
  import type { Assign } from '../types';
6
5
  export interface RadioGroupItemProps extends Assign<HTMLArkProps<'label'>, {
7
- children?: React.ReactNode | ((props: ItemState) => React.ReactNode);
6
+ children?: ReactNode | ((state: ItemState) => ReactNode);
8
7
  }>, ItemProps {
9
8
  }
10
9
  export declare const RadioGroupItem: ForwardRefExoticComponent<RadioGroupItemProps & RefAttributes<HTMLLabelElement>>;
@@ -5,3 +5,6 @@ type RadioGroupType = typeof RadioGroup;
5
5
  declare const meta: Meta<RadioGroupType>;
6
6
  export default meta;
7
7
  export declare const Basic: () => JSX.Element;
8
+ export declare const Disabled: () => JSX.Element;
9
+ export declare const InitialValue: () => JSX.Element;
10
+ export declare const OnChange: () => JSX.Element;
@@ -1,7 +1,9 @@
1
1
  import { ForwardRefExoticComponent, RefAttributes, type ReactNode } from 'react';
2
2
  import { type HTMLArkProps } from '../factory';
3
- import { type RatingGroupContext } from './rating-group-context';
4
- export interface RatingGroupControlProps extends Omit<HTMLArkProps<'div'>, 'children'> {
5
- children?: ReactNode | ((context: RatingGroupContext) => ReactNode);
3
+ import type { Assign } from '../types';
4
+ import type { UseRatingGroupReturn } from './use-rating-group';
5
+ export interface RatingGroupControlProps extends Assign<HTMLArkProps<'div'>, {
6
+ children?: ReactNode | ((api: UseRatingGroupReturn) => ReactNode);
7
+ }> {
6
8
  }
7
9
  export declare const RatingGroupControl: ForwardRefExoticComponent<RatingGroupControlProps & RefAttributes<HTMLDivElement>>;
@@ -1,10 +1,9 @@
1
- import type { ItemProps } from '@zag-js/rating-group';
1
+ import type { ItemProps, ItemState } from '@zag-js/rating-group';
2
2
  import { ForwardRefExoticComponent, RefAttributes, type ReactNode } from 'react';
3
3
  import { type HTMLArkProps } from '../factory';
4
4
  import type { Assign } from '../types';
5
- import { type RatingGroupItemContext } from './rating-group-item-context';
6
- export interface RatingGroupItemProps extends Assign<HTMLArkProps<'span'>, ItemProps & {
7
- children: (state: RatingGroupItemContext) => ReactNode | ReactNode;
8
- }> {
5
+ export interface RatingGroupItemProps extends Assign<HTMLArkProps<'span'>, {
6
+ children?: ReactNode | ((state: ItemState) => ReactNode);
7
+ }>, ItemProps {
9
8
  }
10
9
  export declare const RatingGroupItem: ForwardRefExoticComponent<RatingGroupItemProps & RefAttributes<HTMLSpanElement>>;
@@ -5,3 +5,9 @@ type RatingGroupType = typeof RatingGroup;
5
5
  declare const meta: Meta<RatingGroupType>;
6
6
  export default meta;
7
7
  export declare const Basic: () => JSX.Element;
8
+ export declare const HalfRatings: () => JSX.Element;
9
+ export declare const InitialValue: () => JSX.Element;
10
+ export declare const Controlled: () => JSX.Element;
11
+ export declare const Disabled: () => JSX.Element;
12
+ export declare const ReadOnly: () => JSX.Element;
13
+ export declare const FormUsage: () => JSX.Element;
@@ -1,10 +1,9 @@
1
- import { ForwardRefExoticComponent, RefAttributes } from 'react';
2
- /// <reference types="react" />
1
+ import { ForwardRefExoticComponent, RefAttributes, type ReactNode } from 'react';
3
2
  import { type HTMLArkProps } from '../factory';
4
3
  import type { Assign } from '../types';
5
4
  import { type ItemState, type SegmentGroupItemContext } from './segment-group-item-context';
6
5
  export interface SegmentGroupItemProps extends Assign<HTMLArkProps<'label'>, {
7
- children?: React.ReactNode | ((props: ItemState) => React.ReactNode);
6
+ children?: ReactNode | ((state: ItemState) => ReactNode);
8
7
  }>, SegmentGroupItemContext {
9
8
  }
10
9
  export declare const SegmentGroupItem: ForwardRefExoticComponent<SegmentGroupItemProps & RefAttributes<HTMLLabelElement>>;
@@ -5,3 +5,6 @@ type SegmentGroupType = typeof SegmentGroup;
5
5
  declare const meta: Meta<SegmentGroupType>;
6
6
  export default meta;
7
7
  export declare const Basic: () => JSX.Element;
8
+ export declare const InitialValue: () => JSX.Element;
9
+ export declare const Controlled: () => JSX.Element;
10
+ export declare const Disabled: () => JSX.Element;
@@ -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 selectContext = require('./select-context.cjs');
12
- const splitPresenceProps = require('../presence/split-presence-props.cjs');
12
+ const presenceContext = require('../presence/presence-context.cjs');
13
13
 
14
14
  const SelectContent = react.forwardRef((props, ref) => {
15
- const [presenceProps, localProps] = splitPresenceProps.splitPresenceProps(props);
16
15
  const api = selectContext.useSelectContext();
17
- return /* @__PURE__ */ jsxRuntime.jsx(index.Presence, { present: api.isOpen, ...presenceProps, fallback: /* @__PURE__ */ jsxRuntime.jsx("div", { ...api.contentProps }), children: /* @__PURE__ */ jsxRuntime.jsx(SelectInnerContent, { 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
  SelectContent.displayName = "SelectContent";
20
- const SelectInnerContent = react.forwardRef(
21
- function SelectInnerContent2(props, ref) {
22
- const api = selectContext.useSelectContext();
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.SelectContent = SelectContent;
@@ -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 SelectContentProps extends Assign<HTMLArkProps<'div'>, Omit<PresenceProps, 'children' | 'fallback'>> {
4
+ export interface SelectContentProps extends HTMLArkProps<'div'> {
7
5
  }
8
6
  export declare const SelectContent: ForwardRefExoticComponent<SelectContentProps & 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 { useSelectContext } from './select-context.mjs';
8
- import { splitPresenceProps } from '../presence/split-presence-props.mjs';
8
+ import { usePresenceContext } from '../presence/presence-context.mjs';
9
9
 
10
10
  const SelectContent = forwardRef((props, ref) => {
11
- const [presenceProps, localProps] = splitPresenceProps(props);
12
11
  const api = useSelectContext();
13
- return /* @__PURE__ */ jsx(Presence, { present: api.isOpen, ...presenceProps, fallback: /* @__PURE__ */ jsx("div", { ...api.contentProps }), children: /* @__PURE__ */ jsx(SelectInnerContent, { 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
  SelectContent.displayName = "SelectContent";
16
- const SelectInnerContent = forwardRef(
17
- function SelectInnerContent2(props, ref) {
18
- const api = useSelectContext();
19
- const mergedProps = mergeProps(api.contentProps, props);
20
- return /* @__PURE__ */ jsx(ark.div, { ...mergedProps, ref });
21
- }
22
- );
23
20
 
24
21
  export { SelectContent };