@yahoo/uds 3.150.1-beta.1 → 3.152.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 (49) hide show
  1. package/dist/components/client/IconButton.cjs +62 -31
  2. package/dist/components/client/IconButton.d.cts +2 -1
  3. package/dist/components/client/IconButton.d.ts +2 -1
  4. package/dist/components/client/IconButton.js +63 -32
  5. package/dist/components/client/Modal/ManagedModal.cjs +52 -0
  6. package/dist/components/client/Modal/ManagedModal.d.cts +16 -0
  7. package/dist/components/client/Modal/ManagedModal.d.ts +17 -0
  8. package/dist/components/client/Modal/ManagedModal.js +50 -0
  9. package/dist/components/client/Modal/ModalPortal.cjs +17 -0
  10. package/dist/components/client/Modal/ModalPortal.d.cts +10 -0
  11. package/dist/components/client/Modal/ModalPortal.d.ts +11 -0
  12. package/dist/components/client/Modal/ModalPortal.js +15 -0
  13. package/dist/components/client/Modal/createModal.cjs +18 -0
  14. package/dist/components/client/Modal/createModal.d.cts +11 -0
  15. package/dist/components/client/Modal/createModal.d.ts +12 -0
  16. package/dist/components/client/Modal/createModal.js +17 -0
  17. package/dist/components/client/Modal/index.cjs +4 -0
  18. package/dist/components/client/Modal/index.d.cts +3 -1
  19. package/dist/components/client/Modal/index.d.ts +3 -1
  20. package/dist/components/client/Modal/index.js +3 -1
  21. package/dist/components/client/Modal/modalStore.cjs +254 -0
  22. package/dist/components/client/Modal/modalStore.d.cts +35 -0
  23. package/dist/components/client/Modal/modalStore.d.ts +36 -0
  24. package/dist/components/client/Modal/modalStore.js +248 -0
  25. package/dist/components/client/index.cjs +4 -0
  26. package/dist/components/client/index.d.cts +3 -1
  27. package/dist/components/client/index.d.ts +3 -1
  28. package/dist/components/client/index.js +3 -1
  29. package/dist/components/index.cjs +4 -0
  30. package/dist/components/index.d.cts +3 -1
  31. package/dist/components/index.d.ts +3 -1
  32. package/dist/components/index.js +3 -1
  33. package/dist/css/dist/purger/optimized/purgeFromCode.cjs +3 -5
  34. package/dist/css/dist/purger/optimized/purgeFromCode.js +3 -5
  35. package/dist/index.cjs +4 -0
  36. package/dist/index.d.cts +3 -1
  37. package/dist/index.d.ts +3 -1
  38. package/dist/index.js +3 -1
  39. package/dist/styles/styler.d.cts +3 -3
  40. package/dist/styles/styler.d.ts +3 -3
  41. package/dist/types/dist/index.d.cts +2 -0
  42. package/dist/types/dist/index.d.ts +2 -0
  43. package/dist/uds/generated/componentData.cjs +1807 -1766
  44. package/dist/uds/generated/componentData.js +1807 -1766
  45. package/dist/uds/generated/tailwindPurge.cjs +8 -42
  46. package/dist/uds/generated/tailwindPurge.js +8 -42
  47. package/generated/componentData.json +2584 -2535
  48. package/generated/tailwindPurge.ts +3 -3
  49. package/package.json +1 -1
@@ -4,6 +4,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
4
  require("../../_virtual/_rolldown/runtime.cjs");
5
5
  const require_index = require("../../css-tokens/dist/index.cjs");
6
6
  const require_styles_styler = require("../../styles/styler.cjs");
7
+ const require_utils_createSlot = require("../../utils/createSlot.cjs");
7
8
  const require_components_Icon = require("../Icon.cjs");
8
9
  const require_generateDefaultClassName = require("../../automated-config/dist/utils/generateDefaultClassName.cjs");
9
10
  require("./buttonConstants.cjs");
@@ -44,13 +45,15 @@ const defaultVariantIconClass = require_generateDefaultClassName.generateDefault
44
45
  * @related [Icon](https://uds.build/docs/components/icon), [Button](https://uds.build/docs/components/button), and [Pressable](https://uds.build/docs/components/pressable)
45
46
  *
46
47
  **/
47
- const IconButton = (0, react.forwardRef)(function IconButton({ variant, size, iconVariant, loading, disableEffects, name, slotProps, type = "button", htmlName, className, children, ...rest }, forwardedRef) {
48
+ const IconButton = (0, react.forwardRef)(function IconButton({ variant, size, iconVariant, loading, disableEffects, name, asChild = false, slotProps, type = "button", htmlName, className, children, ...rest }, forwardedRef) {
48
49
  const ref = (0, react.useRef)(null);
49
50
  (0, react.useImperativeHandle)(forwardedRef, () => ref.current);
50
51
  const { className: iconSlotClassName, ...iconSlotProps } = slotProps?.icon ?? {};
51
52
  const prefersReducedMotion = (0, motion_react.useReducedMotion)();
52
53
  const disableMotion = !!disableEffects || !!rest?.disabled;
53
54
  const layoutVariant = (0, react.useMemo)(() => prefersReducedMotion ? "smooth" : "subtle", [prefersReducedMotion]);
55
+ const Slot = (0, react.useMemo)(() => require_utils_createSlot.createSlot(), []);
56
+ const MotionSlot = (0, react.useMemo)(() => motion_react.m.create(Slot), [Slot]);
54
57
  const buttonVariants = (0, react.useMemo)(() => ({
55
58
  rest: { scale: disableMotion ? 1 : `var(${require_index.BUTTON_SCALE_EFFECT_REST})` },
56
59
  hover: { scale: disableMotion ? 1 : `var(${require_index.BUTTON_SCALE_EFFECT_HOVER})` },
@@ -78,6 +81,63 @@ const IconButton = (0, react.forwardRef)(function IconButton({ variant, size, ic
78
81
  rootSizeClass,
79
82
  rootVariantClass
80
83
  ]);
84
+ const iconContent = (0, react.useMemo)(() => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(motion_react.AnimatePresence, {
85
+ initial: false,
86
+ mode: "popLayout",
87
+ children: [loading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(motion_react.m.span, {
88
+ variants: require_components_client_Button.loadingMotionVariants,
89
+ initial: "loading",
90
+ animate: "loading",
91
+ exit: "hide",
92
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Icon.Icon, {
93
+ size: "sm",
94
+ name: _yahoo_uds_icons.Progress,
95
+ variant: iconVariant,
96
+ color: "current",
97
+ className: styles.loadingIcon
98
+ })
99
+ }, "loading"), name && !loading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(motion_react.m.span, {
100
+ variants: require_components_client_Button.iconMotionVariants,
101
+ initial: "icon",
102
+ animate: "icon",
103
+ exit: "hide",
104
+ children: !asChild && children || /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Icon.Icon, {
105
+ size: "sm",
106
+ name,
107
+ variant: iconVariant,
108
+ color: "current",
109
+ className: require_styles_styler.cx(styles.icon, iconSlotClassName),
110
+ ...iconSlotProps
111
+ })
112
+ }, name.name)]
113
+ }), [
114
+ asChild,
115
+ children,
116
+ iconSlotClassName,
117
+ iconSlotProps,
118
+ iconVariant,
119
+ loading,
120
+ name,
121
+ styles
122
+ ]);
123
+ if (asChild && (0, react.isValidElement)(children)) {
124
+ const childProps = children.props;
125
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_client_SpringMotionConfig.SpringMotionConfig, {
126
+ layoutSpeed: "3",
127
+ layoutVariant,
128
+ reducedMotion: disableEffects ? "always" : "user",
129
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MotionSlot, {
130
+ type,
131
+ className: styles.root,
132
+ initial: "icon",
133
+ variants: buttonVariants,
134
+ whileHover: "hover",
135
+ whileTap: "pressed",
136
+ ...rest,
137
+ children: (0, react.cloneElement)(children, childProps, iconContent)
138
+ })
139
+ });
140
+ }
81
141
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_client_SpringMotionConfig.SpringMotionConfig, {
82
142
  layoutSpeed: "3",
83
143
  layoutVariant,
@@ -92,36 +152,7 @@ const IconButton = (0, react.forwardRef)(function IconButton({ variant, size, ic
92
152
  whileHover: "hover",
93
153
  whileTap: "pressed",
94
154
  ...rest,
95
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(motion_react.AnimatePresence, {
96
- initial: false,
97
- mode: "popLayout",
98
- children: [loading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(motion_react.m.span, {
99
- variants: require_components_client_Button.loadingMotionVariants,
100
- initial: "loading",
101
- animate: "loading",
102
- exit: "hide",
103
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Icon.Icon, {
104
- size: "sm",
105
- name: _yahoo_uds_icons.Progress,
106
- variant: iconVariant,
107
- color: "current",
108
- className: styles.loadingIcon
109
- })
110
- }, "loading"), name && !loading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(motion_react.m.span, {
111
- variants: require_components_client_Button.iconMotionVariants,
112
- initial: "icon",
113
- animate: "icon",
114
- exit: "hide",
115
- children: children || /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Icon.Icon, {
116
- size: "sm",
117
- name,
118
- variant: iconVariant,
119
- color: "current",
120
- className: require_styles_styler.cx(styles.icon, iconSlotClassName),
121
- ...iconSlotProps
122
- })
123
- }, name.name)]
124
- })
155
+ children: iconContent
125
156
  })
126
157
  });
127
158
  });
@@ -1,6 +1,7 @@
1
1
 
2
2
  import { IconPropsWithSVGProps, UniversalIconButtonProps } from "../../tokens/types.cjs";
3
3
  import * as _$react from "react";
4
+ import { ForwardRefExoticComponent } from "react";
4
5
  import { HTMLMotionProps } from "motion/react";
5
6
 
6
7
  //#region src/components/client/IconButton.d.ts
@@ -40,6 +41,6 @@ interface IconButtonProps extends HtmlButtonProps, UniversalIconButtonProps {
40
41
  * @related [Icon](https://uds.build/docs/components/icon), [Button](https://uds.build/docs/components/button), and [Pressable](https://uds.build/docs/components/pressable)
41
42
  *
42
43
  **/
43
- declare const IconButton: _$react.ForwardRefExoticComponent<Omit<IconButtonProps, "ref"> & _$react.RefAttributes<HTMLButtonElement>>;
44
+ declare const IconButton: ForwardRefExoticComponent<Omit<IconButtonProps, "ref"> & _$react.RefAttributes<HTMLButtonElement>>;
44
45
  //#endregion
45
46
  export { IconButton, type IconButtonProps };
@@ -2,6 +2,7 @@
2
2
  "use client";
3
3
  import { IconPropsWithSVGProps, UniversalIconButtonProps } from "../../tokens/types.js";
4
4
  import * as _$react from "react";
5
+ import { ForwardRefExoticComponent } from "react";
5
6
  import { HTMLMotionProps } from "motion/react";
6
7
 
7
8
  //#region src/components/client/IconButton.d.ts
@@ -41,6 +42,6 @@ interface IconButtonProps extends HtmlButtonProps, UniversalIconButtonProps {
41
42
  * @related [Icon](https://uds.build/docs/components/icon), [Button](https://uds.build/docs/components/button), and [Pressable](https://uds.build/docs/components/pressable)
42
43
  *
43
44
  **/
44
- declare const IconButton: _$react.ForwardRefExoticComponent<Omit<IconButtonProps, "ref"> & _$react.RefAttributes<HTMLButtonElement>>;
45
+ declare const IconButton: ForwardRefExoticComponent<Omit<IconButtonProps, "ref"> & _$react.RefAttributes<HTMLButtonElement>>;
45
46
  //#endregion
46
47
  export { IconButton, type IconButtonProps };
@@ -2,13 +2,14 @@
2
2
  "use client";
3
3
  import { BUTTON_SCALE_EFFECT_HOVER, BUTTON_SCALE_EFFECT_PRESSED, BUTTON_SCALE_EFFECT_REST } from "../../css-tokens/dist/index.js";
4
4
  import { cx, getStyles } from "../../styles/styler.js";
5
+ import { createSlot } from "../../utils/createSlot.js";
5
6
  import { Icon } from "../Icon.js";
6
7
  import { generateDefaultClassName } from "../../automated-config/dist/utils/generateDefaultClassName.js";
7
8
  import "./buttonConstants.js";
8
9
  import { SpringMotionConfig } from "./SpringMotionConfig.js";
9
10
  import { iconMotionVariants, loadingMotionVariants } from "./Button.js";
10
11
  import { Progress } from "@yahoo/uds-icons";
11
- import { forwardRef, useImperativeHandle, useMemo, useRef } from "react";
12
+ import { cloneElement, forwardRef, isValidElement, useImperativeHandle, useMemo, useRef } from "react";
12
13
  import { jsx, jsxs } from "react/jsx-runtime";
13
14
  import { AnimatePresence, m, useReducedMotion } from "motion/react";
14
15
  //#region src/components/client/IconButton.tsx
@@ -42,13 +43,15 @@ const defaultVariantIconClass = generateDefaultClassName("button", "variant", "i
42
43
  * @related [Icon](https://uds.build/docs/components/icon), [Button](https://uds.build/docs/components/button), and [Pressable](https://uds.build/docs/components/pressable)
43
44
  *
44
45
  **/
45
- const IconButton = forwardRef(function IconButton({ variant, size, iconVariant, loading, disableEffects, name, slotProps, type = "button", htmlName, className, children, ...rest }, forwardedRef) {
46
+ const IconButton = forwardRef(function IconButton({ variant, size, iconVariant, loading, disableEffects, name, asChild = false, slotProps, type = "button", htmlName, className, children, ...rest }, forwardedRef) {
46
47
  const ref = useRef(null);
47
48
  useImperativeHandle(forwardedRef, () => ref.current);
48
49
  const { className: iconSlotClassName, ...iconSlotProps } = slotProps?.icon ?? {};
49
50
  const prefersReducedMotion = useReducedMotion();
50
51
  const disableMotion = !!disableEffects || !!rest?.disabled;
51
52
  const layoutVariant = useMemo(() => prefersReducedMotion ? "smooth" : "subtle", [prefersReducedMotion]);
53
+ const Slot = useMemo(() => createSlot(), []);
54
+ const MotionSlot = useMemo(() => m.create(Slot), [Slot]);
52
55
  const buttonVariants = useMemo(() => ({
53
56
  rest: { scale: disableMotion ? 1 : `var(${BUTTON_SCALE_EFFECT_REST})` },
54
57
  hover: { scale: disableMotion ? 1 : `var(${BUTTON_SCALE_EFFECT_HOVER})` },
@@ -76,6 +79,63 @@ const IconButton = forwardRef(function IconButton({ variant, size, iconVariant,
76
79
  rootSizeClass,
77
80
  rootVariantClass
78
81
  ]);
82
+ const iconContent = useMemo(() => /* @__PURE__ */ jsxs(AnimatePresence, {
83
+ initial: false,
84
+ mode: "popLayout",
85
+ children: [loading && /* @__PURE__ */ jsx(m.span, {
86
+ variants: loadingMotionVariants,
87
+ initial: "loading",
88
+ animate: "loading",
89
+ exit: "hide",
90
+ children: /* @__PURE__ */ jsx(Icon, {
91
+ size: "sm",
92
+ name: Progress,
93
+ variant: iconVariant,
94
+ color: "current",
95
+ className: styles.loadingIcon
96
+ })
97
+ }, "loading"), name && !loading && /* @__PURE__ */ jsx(m.span, {
98
+ variants: iconMotionVariants,
99
+ initial: "icon",
100
+ animate: "icon",
101
+ exit: "hide",
102
+ children: !asChild && children || /* @__PURE__ */ jsx(Icon, {
103
+ size: "sm",
104
+ name,
105
+ variant: iconVariant,
106
+ color: "current",
107
+ className: cx(styles.icon, iconSlotClassName),
108
+ ...iconSlotProps
109
+ })
110
+ }, name.name)]
111
+ }), [
112
+ asChild,
113
+ children,
114
+ iconSlotClassName,
115
+ iconSlotProps,
116
+ iconVariant,
117
+ loading,
118
+ name,
119
+ styles
120
+ ]);
121
+ if (asChild && isValidElement(children)) {
122
+ const childProps = children.props;
123
+ return /* @__PURE__ */ jsx(SpringMotionConfig, {
124
+ layoutSpeed: "3",
125
+ layoutVariant,
126
+ reducedMotion: disableEffects ? "always" : "user",
127
+ children: /* @__PURE__ */ jsx(MotionSlot, {
128
+ type,
129
+ className: styles.root,
130
+ initial: "icon",
131
+ variants: buttonVariants,
132
+ whileHover: "hover",
133
+ whileTap: "pressed",
134
+ ...rest,
135
+ children: cloneElement(children, childProps, iconContent)
136
+ })
137
+ });
138
+ }
79
139
  return /* @__PURE__ */ jsx(SpringMotionConfig, {
80
140
  layoutSpeed: "3",
81
141
  layoutVariant,
@@ -90,36 +150,7 @@ const IconButton = forwardRef(function IconButton({ variant, size, iconVariant,
90
150
  whileHover: "hover",
91
151
  whileTap: "pressed",
92
152
  ...rest,
93
- children: /* @__PURE__ */ jsxs(AnimatePresence, {
94
- initial: false,
95
- mode: "popLayout",
96
- children: [loading && /* @__PURE__ */ jsx(m.span, {
97
- variants: loadingMotionVariants,
98
- initial: "loading",
99
- animate: "loading",
100
- exit: "hide",
101
- children: /* @__PURE__ */ jsx(Icon, {
102
- size: "sm",
103
- name: Progress,
104
- variant: iconVariant,
105
- color: "current",
106
- className: styles.loadingIcon
107
- })
108
- }, "loading"), name && !loading && /* @__PURE__ */ jsx(m.span, {
109
- variants: iconMotionVariants,
110
- initial: "icon",
111
- animate: "icon",
112
- exit: "hide",
113
- children: children || /* @__PURE__ */ jsx(Icon, {
114
- size: "sm",
115
- name,
116
- variant: iconVariant,
117
- color: "current",
118
- className: cx(styles.icon, iconSlotClassName),
119
- ...iconSlotProps
120
- })
121
- }, name.name)]
122
- })
153
+ children: iconContent
123
154
  })
124
155
  });
125
156
  });
@@ -0,0 +1,52 @@
1
+ /*! © 2026 Yahoo, Inc. UDS v0.0.0-development */
2
+ "use client";
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ require("../../../_virtual/_rolldown/runtime.cjs");
5
+ const require_components_client_Modal_modalStore = require("./modalStore.cjs");
6
+ const require_components_client_Modal_UDSModalConfigProvider = require("./UDSModalConfigProvider.cjs");
7
+ const require_components_client_Modal_ModalActions = require("./ModalActions.cjs");
8
+ const require_components_client_Modal_ModalContent = require("./ModalContent.cjs");
9
+ const require_components_client_Modal_ModalDescription = require("./ModalDescription.cjs");
10
+ const require_components_client_Modal_ModalTitle = require("./ModalTitle.cjs");
11
+ const require_components_client_Modal_Modal = require("./Modal.cjs");
12
+ let react = require("react");
13
+ let react_jsx_runtime = require("react/jsx-runtime");
14
+ let motion_react = require("motion/react");
15
+ //#region src/components/client/Modal/ManagedModal.tsx
16
+ const ManagedModal = ({ slot }) => {
17
+ const { animationDuration } = require_components_client_Modal_UDSModalConfigProvider.useModalConfig();
18
+ const durationOut = typeof animationDuration === "number" ? animationDuration : animationDuration.out;
19
+ const exitDuration = (0, motion_react.useReducedMotion)() || slot.props.reduceMotion ? 0 : durationOut;
20
+ (0, react.useEffect)(() => {
21
+ if (!slot.closing) return;
22
+ const ownerId = slot.ownerId;
23
+ const timer = window.setTimeout(() => require_components_client_Modal_modalStore.removeModalEntry(ownerId), exitDuration);
24
+ return () => window.clearTimeout(timer);
25
+ }, [
26
+ slot.closing,
27
+ slot.ownerId,
28
+ exitDuration
29
+ ]);
30
+ const { onClose, title, description, content, actions, ...modalProps } = slot.props;
31
+ const { actionStartContent } = slot.options;
32
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_components_client_Modal_Modal.Modal, {
33
+ ...modalProps,
34
+ open: slot.open,
35
+ onClose: (event) => {
36
+ onClose?.(event);
37
+ require_components_client_Modal_modalStore.closeModalEntry(slot.ownerId);
38
+ },
39
+ children: [
40
+ title != null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_client_Modal_ModalTitle.ModalTitle, { children: title }) : null,
41
+ description != null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_client_Modal_ModalDescription.ModalDescription, { children: description }) : null,
42
+ content != null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_client_Modal_ModalContent.ModalContent, { children: content }) : null,
43
+ actions != null || actionStartContent != null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_client_Modal_ModalActions.ModalActions, {
44
+ startContent: actionStartContent,
45
+ children: actions
46
+ }) : null
47
+ ]
48
+ });
49
+ };
50
+ ManagedModal.displayName = "ManagedModal";
51
+ //#endregion
52
+ exports.ManagedModal = ManagedModal;
@@ -0,0 +1,16 @@
1
+
2
+ import { ModalSlotState } from "./modalStore.cjs";
3
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
+
5
+ //#region src/components/client/Modal/ManagedModal.d.ts
6
+ interface ManagedModalProps {
7
+ slot: ModalSlotState;
8
+ }
9
+ declare const ManagedModal: {
10
+ ({
11
+ slot
12
+ }: ManagedModalProps): _$react_jsx_runtime0.JSX.Element;
13
+ displayName: string;
14
+ };
15
+ //#endregion
16
+ export { ManagedModal };
@@ -0,0 +1,17 @@
1
+
2
+ "use client";
3
+ import { ModalSlotState } from "./modalStore.js";
4
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
5
+
6
+ //#region src/components/client/Modal/ManagedModal.d.ts
7
+ interface ManagedModalProps {
8
+ slot: ModalSlotState;
9
+ }
10
+ declare const ManagedModal: {
11
+ ({
12
+ slot
13
+ }: ManagedModalProps): _$react_jsx_runtime0.JSX.Element;
14
+ displayName: string;
15
+ };
16
+ //#endregion
17
+ export { ManagedModal };
@@ -0,0 +1,50 @@
1
+ /*! © 2026 Yahoo, Inc. UDS v0.0.0-development */
2
+ "use client";
3
+ import { closeModalEntry, removeModalEntry } from "./modalStore.js";
4
+ import { useModalConfig } from "./UDSModalConfigProvider.js";
5
+ import { ModalActions } from "./ModalActions.js";
6
+ import { ModalContent } from "./ModalContent.js";
7
+ import { ModalDescription } from "./ModalDescription.js";
8
+ import { ModalTitle } from "./ModalTitle.js";
9
+ import { Modal } from "./Modal.js";
10
+ import { useEffect } from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ import { useReducedMotion } from "motion/react";
13
+ //#region src/components/client/Modal/ManagedModal.tsx
14
+ const ManagedModal = ({ slot }) => {
15
+ const { animationDuration } = useModalConfig();
16
+ const durationOut = typeof animationDuration === "number" ? animationDuration : animationDuration.out;
17
+ const exitDuration = useReducedMotion() || slot.props.reduceMotion ? 0 : durationOut;
18
+ useEffect(() => {
19
+ if (!slot.closing) return;
20
+ const ownerId = slot.ownerId;
21
+ const timer = window.setTimeout(() => removeModalEntry(ownerId), exitDuration);
22
+ return () => window.clearTimeout(timer);
23
+ }, [
24
+ slot.closing,
25
+ slot.ownerId,
26
+ exitDuration
27
+ ]);
28
+ const { onClose, title, description, content, actions, ...modalProps } = slot.props;
29
+ const { actionStartContent } = slot.options;
30
+ return /* @__PURE__ */ jsxs(Modal, {
31
+ ...modalProps,
32
+ open: slot.open,
33
+ onClose: (event) => {
34
+ onClose?.(event);
35
+ closeModalEntry(slot.ownerId);
36
+ },
37
+ children: [
38
+ title != null ? /* @__PURE__ */ jsx(ModalTitle, { children: title }) : null,
39
+ description != null ? /* @__PURE__ */ jsx(ModalDescription, { children: description }) : null,
40
+ content != null ? /* @__PURE__ */ jsx(ModalContent, { children: content }) : null,
41
+ actions != null || actionStartContent != null ? /* @__PURE__ */ jsx(ModalActions, {
42
+ startContent: actionStartContent,
43
+ children: actions
44
+ }) : null
45
+ ]
46
+ });
47
+ };
48
+ ManagedModal.displayName = "ManagedModal";
49
+ //#endregion
50
+ export { ManagedModal };
@@ -0,0 +1,17 @@
1
+ /*! © 2026 Yahoo, Inc. UDS v0.0.0-development */
2
+ "use client";
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ require("../../../_virtual/_rolldown/runtime.cjs");
5
+ const require_components_client_Modal_modalStore = require("./modalStore.cjs");
6
+ const require_components_client_Modal_ManagedModal = require("./ManagedModal.cjs");
7
+ let react = require("react");
8
+ let react_jsx_runtime = require("react/jsx-runtime");
9
+ //#region src/components/client/Modal/ModalPortal.tsx
10
+ const ModalPortal = () => {
11
+ const slot = (0, react.useSyncExternalStore)(require_components_client_Modal_modalStore.subscribe, require_components_client_Modal_modalStore.getSnapshot, require_components_client_Modal_modalStore.getSnapshot);
12
+ if (!slot) return null;
13
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_client_Modal_ManagedModal.ManagedModal, { slot }, slot.slotId);
14
+ };
15
+ ModalPortal.displayName = "ModalPortal";
16
+ //#endregion
17
+ exports.ModalPortal = ModalPortal;
@@ -0,0 +1,10 @@
1
+
2
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
+
4
+ //#region src/components/client/Modal/ModalPortal.d.ts
5
+ declare const ModalPortal: {
6
+ (): _$react_jsx_runtime0.JSX.Element | null;
7
+ displayName: string;
8
+ };
9
+ //#endregion
10
+ export { ModalPortal };
@@ -0,0 +1,11 @@
1
+
2
+ "use client";
3
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
4
+
5
+ //#region src/components/client/Modal/ModalPortal.d.ts
6
+ declare const ModalPortal: {
7
+ (): _$react_jsx_runtime0.JSX.Element | null;
8
+ displayName: string;
9
+ };
10
+ //#endregion
11
+ export { ModalPortal };
@@ -0,0 +1,15 @@
1
+ /*! © 2026 Yahoo, Inc. UDS v0.0.0-development */
2
+ "use client";
3
+ import { getSnapshot, subscribe } from "./modalStore.js";
4
+ import { ManagedModal } from "./ManagedModal.js";
5
+ import { useSyncExternalStore } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ //#region src/components/client/Modal/ModalPortal.tsx
8
+ const ModalPortal = () => {
9
+ const slot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
10
+ if (!slot) return null;
11
+ return /* @__PURE__ */ jsx(ManagedModal, { slot }, slot.slotId);
12
+ };
13
+ ModalPortal.displayName = "ModalPortal";
14
+ //#endregion
15
+ export { ModalPortal };
@@ -0,0 +1,18 @@
1
+ /*! © 2026 Yahoo, Inc. UDS v0.0.0-development */
2
+ "use client";
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ const require_components_client_Modal_modalStore = require("./modalStore.cjs");
5
+ //#region src/components/client/Modal/createModal.tsx
6
+ function createModal(args) {
7
+ const id = require_components_client_Modal_modalStore.addModalEntry(args);
8
+ return {
9
+ update(next) {
10
+ require_components_client_Modal_modalStore.updateModalEntry(id, next);
11
+ },
12
+ close() {
13
+ require_components_client_Modal_modalStore.closeModalEntry(id);
14
+ }
15
+ };
16
+ }
17
+ //#endregion
18
+ exports.createModal = createModal;
@@ -0,0 +1,11 @@
1
+
2
+ import { CreateModalArgs } from "./modalStore.cjs";
3
+
4
+ //#region src/components/client/Modal/createModal.d.ts
5
+ interface ModalAPI {
6
+ update(args: Partial<CreateModalArgs>): void;
7
+ close(): void;
8
+ }
9
+ declare function createModal(args: CreateModalArgs): ModalAPI;
10
+ //#endregion
11
+ export { type ModalAPI, createModal };
@@ -0,0 +1,12 @@
1
+
2
+ "use client";
3
+ import { CreateModalArgs } from "./modalStore.js";
4
+
5
+ //#region src/components/client/Modal/createModal.d.ts
6
+ interface ModalAPI {
7
+ update(args: Partial<CreateModalArgs>): void;
8
+ close(): void;
9
+ }
10
+ declare function createModal(args: CreateModalArgs): ModalAPI;
11
+ //#endregion
12
+ export { type ModalAPI, createModal };
@@ -0,0 +1,17 @@
1
+ /*! © 2026 Yahoo, Inc. UDS v0.0.0-development */
2
+ "use client";
3
+ import { addModalEntry, closeModalEntry, updateModalEntry } from "./modalStore.js";
4
+ //#region src/components/client/Modal/createModal.tsx
5
+ function createModal(args) {
6
+ const id = addModalEntry(args);
7
+ return {
8
+ update(next) {
9
+ updateModalEntry(id, next);
10
+ },
11
+ close() {
12
+ closeModalEntry(id);
13
+ }
14
+ };
15
+ }
16
+ //#endregion
17
+ export { createModal };
@@ -1,16 +1,20 @@
1
1
  /*! © 2026 Yahoo, Inc. UDS v0.0.0-development */
2
2
  "use client";
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ const require_components_client_Modal_createModal = require("./createModal.cjs");
4
5
  const require_components_client_Modal_UDSModalConfigProvider = require("./UDSModalConfigProvider.cjs");
5
6
  const require_components_client_Modal_ModalActions = require("./ModalActions.cjs");
6
7
  const require_components_client_Modal_ModalContent = require("./ModalContent.cjs");
7
8
  const require_components_client_Modal_ModalDescription = require("./ModalDescription.cjs");
8
9
  const require_components_client_Modal_ModalTitle = require("./ModalTitle.cjs");
9
10
  const require_components_client_Modal_Modal = require("./Modal.cjs");
11
+ const require_components_client_Modal_ModalPortal = require("./ModalPortal.cjs");
10
12
  exports.Modal = require_components_client_Modal_Modal.Modal;
11
13
  exports.ModalActions = require_components_client_Modal_ModalActions.ModalActions;
12
14
  exports.ModalContent = require_components_client_Modal_ModalContent.ModalContent;
13
15
  exports.ModalDescription = require_components_client_Modal_ModalDescription.ModalDescription;
16
+ exports.ModalPortal = require_components_client_Modal_ModalPortal.ModalPortal;
14
17
  exports.ModalTitle = require_components_client_Modal_ModalTitle.ModalTitle;
15
18
  exports.UDSModalConfigProvider = require_components_client_Modal_UDSModalConfigProvider.UDSModalConfigProvider;
19
+ exports.createModal = require_components_client_Modal_createModal.createModal;
16
20
  exports.useModalConfig = require_components_client_Modal_UDSModalConfigProvider.useModalConfig;
@@ -1,8 +1,10 @@
1
1
 
2
+ import { ModalAPI, createModal } from "./createModal.cjs";
2
3
  import { ModalActions, ModalActionsProps } from "./ModalActions.cjs";
3
4
  import { ModalContent, ModalContentProps } from "./ModalContent.cjs";
4
5
  import { ModalDescription, ModalDescriptionProps } from "./ModalDescription.cjs";
6
+ import { ModalPortal } from "./ModalPortal.cjs";
5
7
  import { ModalTitle, ModalTitleProps } from "./ModalTitle.cjs";
6
8
  import { UDSModalConfigProvider, UDSModalConfigProviderProps, useModalConfig } from "./UDSModalConfigProvider.cjs";
7
9
  import { Modal, ModalProps } from "./Modal.cjs";
8
- export { Modal, ModalActions, type ModalActionsProps, ModalContent, type ModalContentProps, ModalDescription, type ModalDescriptionProps, type ModalProps, ModalTitle, type ModalTitleProps, UDSModalConfigProvider, type UDSModalConfigProviderProps, useModalConfig };
10
+ export { Modal, type ModalAPI, ModalActions, type ModalActionsProps, ModalContent, type ModalContentProps, ModalDescription, type ModalDescriptionProps, ModalPortal, type ModalProps, ModalTitle, type ModalTitleProps, UDSModalConfigProvider, type UDSModalConfigProviderProps, createModal, useModalConfig };
@@ -1,9 +1,11 @@
1
1
 
2
2
  "use client";
3
+ import { ModalAPI, createModal } from "./createModal.js";
3
4
  import { ModalActions, ModalActionsProps } from "./ModalActions.js";
4
5
  import { ModalContent, ModalContentProps } from "./ModalContent.js";
5
6
  import { ModalDescription, ModalDescriptionProps } from "./ModalDescription.js";
7
+ import { ModalPortal } from "./ModalPortal.js";
6
8
  import { ModalTitle, ModalTitleProps } from "./ModalTitle.js";
7
9
  import { UDSModalConfigProvider, UDSModalConfigProviderProps, useModalConfig } from "./UDSModalConfigProvider.js";
8
10
  import { Modal, ModalProps } from "./Modal.js";
9
- export { Modal, ModalActions, type ModalActionsProps, ModalContent, type ModalContentProps, ModalDescription, type ModalDescriptionProps, type ModalProps, ModalTitle, type ModalTitleProps, UDSModalConfigProvider, type UDSModalConfigProviderProps, useModalConfig };
11
+ export { Modal, type ModalAPI, ModalActions, type ModalActionsProps, ModalContent, type ModalContentProps, ModalDescription, type ModalDescriptionProps, ModalPortal, type ModalProps, ModalTitle, type ModalTitleProps, UDSModalConfigProvider, type UDSModalConfigProviderProps, createModal, useModalConfig };
@@ -1,9 +1,11 @@
1
1
  /*! © 2026 Yahoo, Inc. UDS v0.0.0-development */
2
2
  "use client";
3
+ import { createModal } from "./createModal.js";
3
4
  import { UDSModalConfigProvider, useModalConfig } from "./UDSModalConfigProvider.js";
4
5
  import { ModalActions } from "./ModalActions.js";
5
6
  import { ModalContent } from "./ModalContent.js";
6
7
  import { ModalDescription } from "./ModalDescription.js";
7
8
  import { ModalTitle } from "./ModalTitle.js";
8
9
  import { Modal } from "./Modal.js";
9
- export { Modal, ModalActions, ModalContent, ModalDescription, ModalTitle, UDSModalConfigProvider, useModalConfig };
10
+ import { ModalPortal } from "./ModalPortal.js";
11
+ export { Modal, ModalActions, ModalContent, ModalDescription, ModalPortal, ModalTitle, UDSModalConfigProvider, createModal, useModalConfig };