@yahoo/uds 3.131.0 → 3.132.1

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 (105) hide show
  1. package/dist/automated-config/dist/utils/getConfigVariantProperties.d.cts +2 -2
  2. package/dist/automated-config/dist/utils/getConfigVariantProperties.d.ts +2 -2
  3. package/dist/components/Banner/Banner.cjs +5 -2
  4. package/dist/components/Banner/Banner.d.cts +9 -0
  5. package/dist/components/Banner/Banner.d.ts +9 -0
  6. package/dist/components/Banner/Banner.js +5 -2
  7. package/dist/components/Divider/Divider.d.cts +2 -2
  8. package/dist/components/Divider/Divider.d.ts +2 -2
  9. package/dist/components/Divider/DividerCore.cjs +17 -10
  10. package/dist/components/Divider/DividerCore.d.cts +10 -4
  11. package/dist/components/Divider/DividerCore.d.ts +10 -4
  12. package/dist/components/Divider/DividerCore.js +17 -10
  13. package/dist/components/Divider/DividerInternal.cjs +15 -11
  14. package/dist/components/Divider/DividerInternal.js +15 -11
  15. package/dist/components/Link.cjs +13 -6
  16. package/dist/components/Link.d.cts +10 -0
  17. package/dist/components/Link.d.ts +10 -0
  18. package/dist/components/Link.js +13 -6
  19. package/dist/components/client/Badge.cjs +10 -4
  20. package/dist/components/client/Badge.d.cts +12 -1
  21. package/dist/components/client/Badge.d.ts +12 -1
  22. package/dist/components/client/Badge.js +10 -4
  23. package/dist/components/client/Button.cjs +20 -9
  24. package/dist/components/client/Button.d.cts +12 -1
  25. package/dist/components/client/Button.d.ts +12 -1
  26. package/dist/components/client/Button.js +20 -9
  27. package/dist/components/client/Checkbox.cjs +14 -6
  28. package/dist/components/client/Checkbox.d.cts +9 -4
  29. package/dist/components/client/Checkbox.d.ts +9 -4
  30. package/dist/components/client/Checkbox.js +14 -6
  31. package/dist/components/client/Chip/Chip.d.cts +1 -1
  32. package/dist/components/client/Chip/Chip.d.ts +1 -1
  33. package/dist/components/client/IconButton.cjs +4 -2
  34. package/dist/components/client/IconButton.d.cts +10 -2
  35. package/dist/components/client/IconButton.d.ts +10 -2
  36. package/dist/components/client/IconButton.js +4 -2
  37. package/dist/components/client/Input/Input.cjs +16 -6
  38. package/dist/components/client/Input/Input.d.cts +3 -0
  39. package/dist/components/client/Input/Input.d.ts +3 -0
  40. package/dist/components/client/Input/Input.js +17 -7
  41. package/dist/components/client/Input/InputHelpTextInternal.cjs +16 -6
  42. package/dist/components/client/Input/InputHelpTextInternal.d.cts +10 -0
  43. package/dist/components/client/Input/InputHelpTextInternal.d.ts +10 -0
  44. package/dist/components/client/Input/InputHelpTextInternal.js +16 -6
  45. package/dist/components/client/Menu/Menu.Content.cjs +2 -1
  46. package/dist/components/client/Menu/Menu.Content.d.cts +7 -0
  47. package/dist/components/client/Menu/Menu.Content.d.ts +7 -0
  48. package/dist/components/client/Menu/Menu.Content.js +2 -1
  49. package/dist/components/client/Menu/Menu.Divider.cjs +8 -10
  50. package/dist/components/client/Menu/Menu.Divider.js +8 -10
  51. package/dist/components/client/Menu/Menu.Item.cjs +23 -14
  52. package/dist/components/client/Menu/Menu.Item.d.cts +11 -0
  53. package/dist/components/client/Menu/Menu.Item.d.ts +11 -0
  54. package/dist/components/client/Menu/Menu.Item.js +24 -15
  55. package/dist/components/client/Menu/Menu.ItemBase.cjs +17 -9
  56. package/dist/components/client/Menu/Menu.ItemBase.d.cts +9 -5
  57. package/dist/components/client/Menu/Menu.ItemBase.d.ts +9 -5
  58. package/dist/components/client/Menu/Menu.ItemBase.js +17 -9
  59. package/dist/components/client/Menu/Menu.ItemCheckbox.cjs +10 -10
  60. package/dist/components/client/Menu/Menu.ItemCheckbox.d.cts +1 -1
  61. package/dist/components/client/Menu/Menu.ItemCheckbox.d.ts +1 -1
  62. package/dist/components/client/Menu/Menu.ItemCheckbox.js +10 -10
  63. package/dist/components/client/Popover/PopoverContent.cjs +4 -1
  64. package/dist/components/client/Popover/PopoverContent.d.cts +3 -0
  65. package/dist/components/client/Popover/PopoverContent.d.ts +3 -0
  66. package/dist/components/client/Popover/PopoverContent.js +4 -1
  67. package/dist/components/client/Popover/UDSPopoverConfigProvider.d.cts +1 -1
  68. package/dist/components/client/Popover/UDSPopoverConfigProvider.d.ts +1 -1
  69. package/dist/components/client/Radio/Radio.cjs +18 -15
  70. package/dist/components/client/Radio/Radio.d.cts +9 -4
  71. package/dist/components/client/Radio/Radio.d.ts +9 -4
  72. package/dist/components/client/Radio/Radio.js +18 -15
  73. package/dist/components/client/Switch.cjs +14 -6
  74. package/dist/components/client/Switch.d.cts +9 -5
  75. package/dist/components/client/Switch.d.ts +9 -5
  76. package/dist/components/client/Switch.js +14 -6
  77. package/dist/components/client/Tabs/Tab.cjs +11 -5
  78. package/dist/components/client/Tabs/Tab.d.cts +14 -3
  79. package/dist/components/client/Tabs/Tab.d.ts +14 -3
  80. package/dist/components/client/Tabs/Tab.js +11 -5
  81. package/dist/components/client/Toast/UDSToastConfigProvider.d.cts +1 -1
  82. package/dist/components/client/Toast/UDSToastConfigProvider.d.ts +1 -1
  83. package/dist/components/client/Tooltip/TooltipContent.cjs +9 -3
  84. package/dist/components/client/Tooltip/TooltipContent.d.cts +14 -2
  85. package/dist/components/client/Tooltip/TooltipContent.d.ts +14 -2
  86. package/dist/components/client/Tooltip/TooltipContent.js +9 -3
  87. package/dist/components/experimental/client/SwitchV2.cjs +14 -6
  88. package/dist/components/experimental/client/SwitchV2.d.cts +9 -5
  89. package/dist/components/experimental/client/SwitchV2.d.ts +9 -5
  90. package/dist/components/experimental/client/SwitchV2.js +14 -6
  91. package/dist/components/index.d.cts +1 -1
  92. package/dist/components/index.d.ts +1 -1
  93. package/dist/index.d.cts +1 -1
  94. package/dist/index.d.ts +1 -1
  95. package/dist/styles/styler.d.cts +65 -65
  96. package/dist/styles/styler.d.ts +65 -65
  97. package/dist/types/dist/index.d.cts +3 -3
  98. package/dist/types/dist/index.d.ts +3 -3
  99. package/dist/uds/generated/componentData.cjs +1485 -1482
  100. package/dist/uds/generated/componentData.js +1485 -1482
  101. package/dist/uds/generated/tailwindPurge.cjs +73 -73
  102. package/dist/uds/generated/tailwindPurge.js +73 -73
  103. package/generated/componentData.json +2039 -2030
  104. package/generated/tailwindPurge.ts +1 -1
  105. package/package.json +1 -1
@@ -43,9 +43,10 @@ const defaultVariantIconClass = generateDefaultClassName("button", "variant", "i
43
43
  * @related [Icon](https://uds.build/docs/components/icon), [Button](https://uds.build/docs/components/button), and [Pressable](https://uds.build/docs/components/pressable)
44
44
  *
45
45
  **/
46
- const IconButton = forwardRef(function IconButton({ variant, size, iconVariant, loading, disableEffects, name, type = "button", htmlName, className, children, ...rest }, forwardedRef) {
46
+ const IconButton = forwardRef(function IconButton({ variant, size, iconVariant, loading, disableEffects, name, slotProps, type = "button", htmlName, className, children, ...rest }, forwardedRef) {
47
47
  const ref = useRef(null);
48
48
  useImperativeHandle(forwardedRef, () => ref.current);
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]);
@@ -115,7 +116,8 @@ const IconButton = forwardRef(function IconButton({ variant, size, iconVariant,
115
116
  name,
116
117
  variant: iconVariant,
117
118
  color: "current",
118
- className: styles.icon
119
+ className: cx(styles.icon, iconSlotClassName),
120
+ ...iconSlotProps
119
121
  })
120
122
  }, name.name)]
121
123
  })
@@ -16,7 +16,7 @@ lodash_isFunction_js = require_runtime.__toESM(lodash_isFunction_js);
16
16
  let motion_react = require("motion/react");
17
17
 
18
18
  //#region src/components/client/Input/Input.tsx
19
- const HelpTextContent = (0, react.memo)(function HelpTextContentOriginal({ helpText, helperTextIcon, spacingStart, spacingTop, size, isFilled, ...rest }) {
19
+ const HelpTextContent = (0, react.memo)(function HelpTextContentOriginal({ helpText, helperTextIcon, spacingStart, spacingTop, size, isFilled, helperTextSlotProps, ...rest }) {
20
20
  if (!helpText) return null;
21
21
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Box.Box, {
22
22
  spacingTop,
@@ -26,6 +26,10 @@ const HelpTextContent = (0, react.memo)(function HelpTextContentOriginal({ helpT
26
26
  startIcon: helperTextIcon,
27
27
  size,
28
28
  isFilled,
29
+ slotProps: {
30
+ startIcon: helperTextSlotProps?.helperTextIcon,
31
+ text: helperTextSlotProps?.helperText
32
+ },
29
33
  children: (0, lodash_isFunction_js.default)(helpText) ? helpText() : helpText
30
34
  })
31
35
  });
@@ -79,7 +83,7 @@ const EndIcon = (0, react.memo)(function EndIcon({ icon, className, iconProps })
79
83
  *
80
84
  * @related [Checkbox](https://uds.build/docs/components/checkbox), [Radio](https://uds.build/docs/components/radio).
81
85
  **/
82
- const Input = (0, react.forwardRef)(function Input({ id, label, type = "text", size = "md", startIcon, endIcon, helpText, helperTextIcon, hasError, width: containerWidth = "full", defaultValue, required, readOnly, disabled, reduceMotion: forceReduceMotion, onChange, slotProps, style, className, ...otherProps }, forwardedRef) {
86
+ const Input = (0, react.forwardRef)(function Input({ id, label, type = "text", size = "md", startIcon, endIcon, helpText, helperTextIcon, hasError, width: containerWidth = "full", defaultValue, value: valueProp, required, readOnly, disabled, reduceMotion: forceReduceMotion, onChange, slotProps, style, className, ...otherProps }, forwardedRef) {
83
87
  const generatedId = (0, react.useId)();
84
88
  const uid = id ?? `uds-input-${generatedId}`;
85
89
  const helpTextId = `uds-input-${uid}-help-text`;
@@ -87,11 +91,15 @@ const Input = (0, react.forwardRef)(function Input({ id, label, type = "text", s
87
91
  const { className: inputWrapperClassName, ...inputWrapperProps } = slotProps?.inputWrapper ?? {};
88
92
  const ref = (0, react.useRef)(null);
89
93
  (0, react.useImperativeHandle)(forwardedRef, () => ref.current);
90
- const [value, setValue] = (0, react.useState)(defaultValue ?? "");
94
+ const isControlled = valueProp !== void 0;
95
+ const [value, setValue] = (0, react.useState)(isControlled ? valueProp : defaultValue ?? "");
96
+ (0, react.useEffect)(() => {
97
+ if (isControlled) setValue(valueProp);
98
+ }, [valueProp, isControlled]);
91
99
  const handleChange = (0, react.useCallback)((e) => {
92
- setValue(e.target.value);
100
+ if (!isControlled) setValue(e.target.value);
93
101
  onChange?.(e);
94
- }, [onChange]);
102
+ }, [isControlled, onChange]);
95
103
  const layoutVariant = (0, motion_react.useReducedMotion)() ? "smooth" : "bouncy";
96
104
  const reduceMotion = forceReduceMotion ? "always" : "user";
97
105
  const isInteractive = !readOnly && !disabled;
@@ -147,6 +155,7 @@ const Input = (0, react.forwardRef)(function Input({ id, label, type = "text", s
147
155
  className: classNames.label,
148
156
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
149
157
  htmlFor: uid,
158
+ ...slotProps?.label,
150
159
  children: (0, lodash_isFunction_js.default)(label) ? label() : label
151
160
  }), required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
152
161
  className: classNames.labelRequired,
@@ -199,7 +208,8 @@ const Input = (0, react.forwardRef)(function Input({ id, label, type = "text", s
199
208
  spacingTop: "2",
200
209
  size,
201
210
  isFilled: !!value,
202
- helperTextIcon
211
+ helperTextIcon,
212
+ helperTextSlotProps: slotProps
203
213
  })
204
214
  })
205
215
  ]
@@ -24,6 +24,9 @@ interface InputProps extends NativeInputProps, UniversalInputProps {
24
24
  inputWrapper?: Partial<BoxProps & DataAttributes>;
25
25
  startIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
26
26
  endIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
27
+ label?: Partial<React.LabelHTMLAttributes<HTMLLabelElement> & DataAttributes>;
28
+ helperText?: Partial<React.HTMLAttributes<HTMLSpanElement> & DataAttributes>;
29
+ helperTextIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
27
30
  };
28
31
  }
29
32
  /**
@@ -25,6 +25,9 @@ interface InputProps extends NativeInputProps, UniversalInputProps {
25
25
  inputWrapper?: Partial<BoxProps & DataAttributes>;
26
26
  startIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
27
27
  endIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
28
+ label?: Partial<React.LabelHTMLAttributes<HTMLLabelElement> & DataAttributes>;
29
+ helperText?: Partial<React.HTMLAttributes<HTMLSpanElement> & DataAttributes>;
30
+ helperTextIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
28
31
  };
29
32
  }
30
33
  /**
@@ -7,13 +7,13 @@ import { HStack } from "../../HStack.js";
7
7
  import { VStack } from "../../VStack.js";
8
8
  import { AnimateHeightChange } from "../AnimateHeightChange.js";
9
9
  import { InputHelpTextInternal as InputHelpTextInternalMemo } from "./InputHelpTextInternal.js";
10
- import { forwardRef, memo, useCallback, useId, useImperativeHandle, useRef, useState } from "react";
10
+ import { forwardRef, memo, useCallback, useEffect, useId, useImperativeHandle, useRef, useState } from "react";
11
11
  import { jsx, jsxs } from "react/jsx-runtime";
12
12
  import { isFunction } from "lodash-es";
13
13
  import { useReducedMotion } from "motion/react";
14
14
 
15
15
  //#region src/components/client/Input/Input.tsx
16
- const HelpTextContent = memo(function HelpTextContentOriginal({ helpText, helperTextIcon, spacingStart, spacingTop, size, isFilled, ...rest }) {
16
+ const HelpTextContent = memo(function HelpTextContentOriginal({ helpText, helperTextIcon, spacingStart, spacingTop, size, isFilled, helperTextSlotProps, ...rest }) {
17
17
  if (!helpText) return null;
18
18
  return /* @__PURE__ */ jsx(Box, {
19
19
  spacingTop,
@@ -23,6 +23,10 @@ const HelpTextContent = memo(function HelpTextContentOriginal({ helpText, helper
23
23
  startIcon: helperTextIcon,
24
24
  size,
25
25
  isFilled,
26
+ slotProps: {
27
+ startIcon: helperTextSlotProps?.helperTextIcon,
28
+ text: helperTextSlotProps?.helperText
29
+ },
26
30
  children: isFunction(helpText) ? helpText() : helpText
27
31
  })
28
32
  });
@@ -76,7 +80,7 @@ const EndIcon = memo(function EndIcon({ icon, className, iconProps }) {
76
80
  *
77
81
  * @related [Checkbox](https://uds.build/docs/components/checkbox), [Radio](https://uds.build/docs/components/radio).
78
82
  **/
79
- const Input = forwardRef(function Input({ id, label, type = "text", size = "md", startIcon, endIcon, helpText, helperTextIcon, hasError, width: containerWidth = "full", defaultValue, required, readOnly, disabled, reduceMotion: forceReduceMotion, onChange, slotProps, style, className, ...otherProps }, forwardedRef) {
83
+ const Input = forwardRef(function Input({ id, label, type = "text", size = "md", startIcon, endIcon, helpText, helperTextIcon, hasError, width: containerWidth = "full", defaultValue, value: valueProp, required, readOnly, disabled, reduceMotion: forceReduceMotion, onChange, slotProps, style, className, ...otherProps }, forwardedRef) {
80
84
  const generatedId = useId();
81
85
  const uid = id ?? `uds-input-${generatedId}`;
82
86
  const helpTextId = `uds-input-${uid}-help-text`;
@@ -84,11 +88,15 @@ const Input = forwardRef(function Input({ id, label, type = "text", size = "md",
84
88
  const { className: inputWrapperClassName, ...inputWrapperProps } = slotProps?.inputWrapper ?? {};
85
89
  const ref = useRef(null);
86
90
  useImperativeHandle(forwardedRef, () => ref.current);
87
- const [value, setValue] = useState(defaultValue ?? "");
91
+ const isControlled = valueProp !== void 0;
92
+ const [value, setValue] = useState(isControlled ? valueProp : defaultValue ?? "");
93
+ useEffect(() => {
94
+ if (isControlled) setValue(valueProp);
95
+ }, [valueProp, isControlled]);
88
96
  const handleChange = useCallback((e) => {
89
- setValue(e.target.value);
97
+ if (!isControlled) setValue(e.target.value);
90
98
  onChange?.(e);
91
- }, [onChange]);
99
+ }, [isControlled, onChange]);
92
100
  const layoutVariant = useReducedMotion() ? "smooth" : "bouncy";
93
101
  const reduceMotion = forceReduceMotion ? "always" : "user";
94
102
  const isInteractive = !readOnly && !disabled;
@@ -144,6 +152,7 @@ const Input = forwardRef(function Input({ id, label, type = "text", size = "md",
144
152
  className: classNames.label,
145
153
  children: [/* @__PURE__ */ jsx("label", {
146
154
  htmlFor: uid,
155
+ ...slotProps?.label,
147
156
  children: isFunction(label) ? label() : label
148
157
  }), required && /* @__PURE__ */ jsx("span", {
149
158
  className: classNames.labelRequired,
@@ -196,7 +205,8 @@ const Input = forwardRef(function Input({ id, label, type = "text", size = "md",
196
205
  spacingTop: "2",
197
206
  size,
198
207
  isFilled: !!value,
199
- helperTextIcon
208
+ helperTextIcon,
209
+ helperTextSlotProps: slotProps
200
210
  })
201
211
  })
202
212
  ]
@@ -9,7 +9,7 @@ let react = require("react");
9
9
  let react_jsx_runtime = require("react/jsx-runtime");
10
10
 
11
11
  //#region src/components/client/Input/InputHelpTextInternal.tsx
12
- const InputHelpTextInternal = (0, react.forwardRef)(function InputHelpTextInternal({ startIcon, endIcon, iconProps, children, size, isFilled, ...rest }, ref) {
12
+ const InputHelpTextInternal = (0, react.forwardRef)(function InputHelpTextInternal({ startIcon, endIcon, iconProps, children, size, isFilled, slotProps, ...rest }, ref) {
13
13
  const defaultIconProps = { variant: "outline" };
14
14
  const classNames = {
15
15
  helperText: require_styles_styler.cx(require_styles_styler.getStyles({
@@ -23,6 +23,9 @@ const InputHelpTextInternal = (0, react.forwardRef)(function InputHelpTextIntern
23
23
  inputVariantValueHelperIcon: !isFilled ? "empty" : "filled"
24
24
  })
25
25
  };
26
+ const { className: startIconClassName, ...startIconSlotProps } = slotProps?.startIcon ?? {};
27
+ const { className: endIconClassName, ...endIconSlotProps } = slotProps?.endIcon ?? {};
28
+ const { className: textClassName, ...textSlotProps } = slotProps?.text ?? {};
26
29
  const props = {
27
30
  ...defaultIconProps,
28
31
  ...iconProps
@@ -36,18 +39,25 @@ const InputHelpTextInternal = (0, react.forwardRef)(function InputHelpTextIntern
36
39
  startIcon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
37
40
  icon: startIcon,
38
41
  ...props,
39
- iconProps,
40
- className: classNames.helperIcon
42
+ iconProps: {
43
+ ...iconProps,
44
+ ...startIconSlotProps
45
+ },
46
+ className: require_styles_styler.cx(classNames.helperIcon, startIconClassName)
41
47
  }),
42
48
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
43
- className: classNames.helperText,
49
+ className: require_styles_styler.cx(classNames.helperText, textClassName),
50
+ ...textSlotProps,
44
51
  children
45
52
  }),
46
53
  endIcon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
47
54
  icon: endIcon,
48
55
  ...props,
49
- iconProps,
50
- className: classNames.helperIcon
56
+ iconProps: {
57
+ ...iconProps,
58
+ ...endIconSlotProps
59
+ },
60
+ className: require_styles_styler.cx(classNames.helperIcon, endIconClassName)
51
61
  })
52
62
  ]
53
63
  });
@@ -1,5 +1,6 @@
1
1
 
2
2
  import { UniversalIconSlot } from "../../../types/dist/index.cjs";
3
+ import { IconPropsWithSVGProps } from "../../../tokens/types.cjs";
3
4
  import "../../../tokens/index.cjs";
4
5
  import { IconProps } from "../../Icon.cjs";
5
6
  import { InputProps } from "./Input.cjs";
@@ -7,6 +8,9 @@ import * as react from "react";
7
8
  import { PropsWithChildren } from "react";
8
9
 
9
10
  //#region src/components/client/Input/InputHelpTextInternal.d.ts
11
+ type DataAttributes = {
12
+ [name: `data-${string}`]: string;
13
+ };
10
14
  interface InputHelpTextInternalProps extends PropsWithChildren {
11
15
  /** Icon to render at the start of the content */
12
16
  startIcon?: UniversalIconSlot;
@@ -19,6 +23,12 @@ interface InputHelpTextInternalProps extends PropsWithChildren {
19
23
  iconProps?: Pick<IconProps, 'color' | 'size' | 'variant'>;
20
24
  size?: InputProps['size'];
21
25
  isFilled?: boolean;
26
+ /** Props to be passed into various slots within the component. */
27
+ slotProps?: {
28
+ startIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
29
+ endIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
30
+ text?: Partial<React.HTMLAttributes<HTMLSpanElement> & DataAttributes>;
31
+ };
22
32
  }
23
33
  declare const InputHelpTextInternalMemo: react.NamedExoticComponent<InputHelpTextInternalProps & react.RefAttributes<HTMLDivElement>>;
24
34
  //#endregion
@@ -1,6 +1,7 @@
1
1
 
2
2
  "use client";
3
3
  import { UniversalIconSlot } from "../../../types/dist/index.js";
4
+ import { IconPropsWithSVGProps } from "../../../tokens/types.js";
4
5
  import "../../../tokens/index.js";
5
6
  import { IconProps } from "../../Icon.js";
6
7
  import { InputProps } from "./Input.js";
@@ -8,6 +9,9 @@ import * as react from "react";
8
9
  import { PropsWithChildren } from "react";
9
10
 
10
11
  //#region src/components/client/Input/InputHelpTextInternal.d.ts
12
+ type DataAttributes = {
13
+ [name: `data-${string}`]: string;
14
+ };
11
15
  interface InputHelpTextInternalProps extends PropsWithChildren {
12
16
  /** Icon to render at the start of the content */
13
17
  startIcon?: UniversalIconSlot;
@@ -20,6 +24,12 @@ interface InputHelpTextInternalProps extends PropsWithChildren {
20
24
  iconProps?: Pick<IconProps, 'color' | 'size' | 'variant'>;
21
25
  size?: InputProps['size'];
22
26
  isFilled?: boolean;
27
+ /** Props to be passed into various slots within the component. */
28
+ slotProps?: {
29
+ startIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
30
+ endIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
31
+ text?: Partial<React.HTMLAttributes<HTMLSpanElement> & DataAttributes>;
32
+ };
23
33
  }
24
34
  declare const InputHelpTextInternalMemo: react.NamedExoticComponent<InputHelpTextInternalProps & react.RefAttributes<HTMLDivElement>>;
25
35
  //#endregion
@@ -7,7 +7,7 @@ import { forwardRef, memo } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
 
9
9
  //#region src/components/client/Input/InputHelpTextInternal.tsx
10
- const InputHelpTextInternal = forwardRef(function InputHelpTextInternal({ startIcon, endIcon, iconProps, children, size, isFilled, ...rest }, ref) {
10
+ const InputHelpTextInternal = forwardRef(function InputHelpTextInternal({ startIcon, endIcon, iconProps, children, size, isFilled, slotProps, ...rest }, ref) {
11
11
  const defaultIconProps = { variant: "outline" };
12
12
  const classNames = {
13
13
  helperText: cx(getStyles({
@@ -21,6 +21,9 @@ const InputHelpTextInternal = forwardRef(function InputHelpTextInternal({ startI
21
21
  inputVariantValueHelperIcon: !isFilled ? "empty" : "filled"
22
22
  })
23
23
  };
24
+ const { className: startIconClassName, ...startIconSlotProps } = slotProps?.startIcon ?? {};
25
+ const { className: endIconClassName, ...endIconSlotProps } = slotProps?.endIcon ?? {};
26
+ const { className: textClassName, ...textSlotProps } = slotProps?.text ?? {};
24
27
  const props = {
25
28
  ...defaultIconProps,
26
29
  ...iconProps
@@ -34,18 +37,25 @@ const InputHelpTextInternal = forwardRef(function InputHelpTextInternal({ startI
34
37
  startIcon && /* @__PURE__ */ jsx(IconSlot, {
35
38
  icon: startIcon,
36
39
  ...props,
37
- iconProps,
38
- className: classNames.helperIcon
40
+ iconProps: {
41
+ ...iconProps,
42
+ ...startIconSlotProps
43
+ },
44
+ className: cx(classNames.helperIcon, startIconClassName)
39
45
  }),
40
46
  /* @__PURE__ */ jsx("span", {
41
- className: classNames.helperText,
47
+ className: cx(classNames.helperText, textClassName),
48
+ ...textSlotProps,
42
49
  children
43
50
  }),
44
51
  endIcon && /* @__PURE__ */ jsx(IconSlot, {
45
52
  icon: endIcon,
46
53
  ...props,
47
- iconProps,
48
- className: classNames.helperIcon
54
+ iconProps: {
55
+ ...iconProps,
56
+ ...endIconSlotProps
57
+ },
58
+ className: cx(classNames.helperIcon, endIconClassName)
49
59
  })
50
60
  ]
51
61
  });
@@ -94,7 +94,7 @@ const useMenuAnimationVariants = (placement) => {
94
94
  *
95
95
  * @related [Menu](https://uds.build/docs/components/menu), [Menu.ItemCheckbox](https://uds.build/docs/components/menu-item-checkbox)
96
96
  **/
97
- const MenuContent = (0, react.forwardRef)(function MenuContent({ size = "default", variant = "default", gutter = "1", overflow, className, sameWidth, focusable, children, portalElement, portal = true, disableAutoBorderRadius, nestedBorderRadius = !disableAutoBorderRadius, nestedBorderRadiusSize, nestedBorderRadiusSpacing, nestedBorderRadiusWidth, ...props }, ref) {
97
+ const MenuContent = (0, react.forwardRef)(function MenuContent({ size = "default", variant = "default", gutter = "1", overflow, className, slotProps, sameWidth, focusable, children, portalElement, portal = true, disableAutoBorderRadius, nestedBorderRadius = !disableAutoBorderRadius, nestedBorderRadiusSize, nestedBorderRadiusSpacing, nestedBorderRadiusWidth, ...props }, ref) {
98
98
  const context = (0, _ariakit_react_menu.useMenuContext)();
99
99
  const open = (0, _ariakit_react.useStoreState)(context, "open");
100
100
  const mounted = (0, _ariakit_react.useStoreState)(context, "mounted");
@@ -146,6 +146,7 @@ const MenuContent = (0, react.forwardRef)(function MenuContent({ size = "default
146
146
  nestedBorderRadiusSpacing,
147
147
  nestedBorderRadiusWidth,
148
148
  className: classNames.root,
149
+ ...slotProps?.root,
149
150
  children
150
151
  })
151
152
  })
@@ -6,6 +6,9 @@ import * as react from "react";
6
6
  import { MenuProps } from "@ariakit/react/menu";
7
7
 
8
8
  //#region src/components/client/Menu/Menu.Content.d.ts
9
+ type DataAttributes = {
10
+ [name: `data-${string}`]: string;
11
+ };
9
12
  interface MenuContentProps extends Omit<VStackProps, 'asChild'> {
10
13
  /**
11
14
  * Controls spacing-related properties (border radius, border width, shadow, spacing, gap)
@@ -18,6 +21,10 @@ interface MenuContentProps extends Omit<VStackProps, 'asChild'> {
18
21
  */
19
22
  variant?: 'default';
20
23
  gutter?: SpacingAlias;
24
+ /** Props to be passed into various slots within the component. */
25
+ slotProps?: {
26
+ root?: DataAttributes;
27
+ };
21
28
  /** UDS handles nested border radius for the first and last item for you to prevent clipping and visual jank.
22
29
  * If you need to disable this, set this prop to true.
23
30
  *
@@ -7,6 +7,9 @@ import * as react from "react";
7
7
  import { MenuProps } from "@ariakit/react/menu";
8
8
 
9
9
  //#region src/components/client/Menu/Menu.Content.d.ts
10
+ type DataAttributes = {
11
+ [name: `data-${string}`]: string;
12
+ };
10
13
  interface MenuContentProps extends Omit<VStackProps, 'asChild'> {
11
14
  /**
12
15
  * Controls spacing-related properties (border radius, border width, shadow, spacing, gap)
@@ -19,6 +22,10 @@ interface MenuContentProps extends Omit<VStackProps, 'asChild'> {
19
22
  */
20
23
  variant?: 'default';
21
24
  gutter?: SpacingAlias;
25
+ /** Props to be passed into various slots within the component. */
26
+ slotProps?: {
27
+ root?: DataAttributes;
28
+ };
22
29
  /** UDS handles nested border radius for the first and last item for you to prevent clipping and visual jank.
23
30
  * If you need to disable this, set this prop to true.
24
31
  *
@@ -92,7 +92,7 @@ const useMenuAnimationVariants = (placement) => {
92
92
  *
93
93
  * @related [Menu](https://uds.build/docs/components/menu), [Menu.ItemCheckbox](https://uds.build/docs/components/menu-item-checkbox)
94
94
  **/
95
- const MenuContent = forwardRef(function MenuContent({ size = "default", variant = "default", gutter = "1", overflow, className, sameWidth, focusable, children, portalElement, portal = true, disableAutoBorderRadius, nestedBorderRadius = !disableAutoBorderRadius, nestedBorderRadiusSize, nestedBorderRadiusSpacing, nestedBorderRadiusWidth, ...props }, ref) {
95
+ const MenuContent = forwardRef(function MenuContent({ size = "default", variant = "default", gutter = "1", overflow, className, slotProps, sameWidth, focusable, children, portalElement, portal = true, disableAutoBorderRadius, nestedBorderRadius = !disableAutoBorderRadius, nestedBorderRadiusSize, nestedBorderRadiusSpacing, nestedBorderRadiusWidth, ...props }, ref) {
96
96
  const context = useMenuContext();
97
97
  const open = useStoreState(context, "open");
98
98
  const mounted = useStoreState(context, "mounted");
@@ -144,6 +144,7 @@ const MenuContent = forwardRef(function MenuContent({ size = "default", variant
144
144
  nestedBorderRadiusSpacing,
145
145
  nestedBorderRadiusWidth,
146
146
  className: classNames.root,
147
+ ...slotProps?.root,
147
148
  children
148
149
  })
149
150
  })
@@ -47,14 +47,6 @@ let react_jsx_runtime = require("react/jsx-runtime");
47
47
  * @related [Menu](https://uds.build/docs/components/menu), [Menu.Item](https://uds.build/docs/components/menu-item), [Divider](https://uds.build/docs/components/divider)
48
48
  **/
49
49
  const MenuDivider = (0, react.forwardRef)(function MenuDivider({ role = "separator", contentPosition = "start", gap = "4", children, spacingVertical = children ? "2" : "0", spacingHorizontal = children ? "4" : "0", className, ...props }, ref) {
50
- const layerClassNames = {
51
- root: require_styles_styler.getStyles({
52
- menuitemDividerVariantRoot: "default",
53
- className
54
- }),
55
- text: require_styles_styler.getStyles({ menuitemDividerVariantText: "default" }),
56
- line: require_styles_styler.getStyles({ menuitemDividerVariantLine: "default" })
57
- };
58
50
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Divider_DividerInternal.DividerInternal, {
59
51
  ref,
60
52
  role,
@@ -63,8 +55,14 @@ const MenuDivider = (0, react.forwardRef)(function MenuDivider({ role = "separat
63
55
  gap,
64
56
  spacingVertical,
65
57
  spacingHorizontal,
66
- className: layerClassNames.root,
67
- layerClassNames,
58
+ slotProps: {
59
+ root: { className: require_styles_styler.getStyles({
60
+ menuitemDividerVariantRoot: "default",
61
+ className
62
+ }) },
63
+ label: { className: require_styles_styler.getStyles({ menuitemDividerVariantText: "default" }) },
64
+ line: { className: require_styles_styler.getStyles({ menuitemDividerVariantLine: "default" }) }
65
+ },
68
66
  ...props,
69
67
  children
70
68
  });
@@ -45,14 +45,6 @@ import { jsx } from "react/jsx-runtime";
45
45
  * @related [Menu](https://uds.build/docs/components/menu), [Menu.Item](https://uds.build/docs/components/menu-item), [Divider](https://uds.build/docs/components/divider)
46
46
  **/
47
47
  const MenuDivider = forwardRef(function MenuDivider({ role = "separator", contentPosition = "start", gap = "4", children, spacingVertical = children ? "2" : "0", spacingHorizontal = children ? "4" : "0", className, ...props }, ref) {
48
- const layerClassNames = {
49
- root: getStyles({
50
- menuitemDividerVariantRoot: "default",
51
- className
52
- }),
53
- text: getStyles({ menuitemDividerVariantText: "default" }),
54
- line: getStyles({ menuitemDividerVariantLine: "default" })
55
- };
56
48
  return /* @__PURE__ */ jsx(DividerInternal, {
57
49
  ref,
58
50
  role,
@@ -61,8 +53,14 @@ const MenuDivider = forwardRef(function MenuDivider({ role = "separator", conten
61
53
  gap,
62
54
  spacingVertical,
63
55
  spacingHorizontal,
64
- className: layerClassNames.root,
65
- layerClassNames,
56
+ slotProps: {
57
+ root: { className: getStyles({
58
+ menuitemDividerVariantRoot: "default",
59
+ className
60
+ }) },
61
+ label: { className: getStyles({ menuitemDividerVariantText: "default" }) },
62
+ line: { className: getStyles({ menuitemDividerVariantLine: "default" }) }
63
+ },
66
64
  ...props,
67
65
  children
68
66
  });
@@ -52,24 +52,33 @@ let _ariakit_react_menu = require("@ariakit/react/menu");
52
52
  *
53
53
  * @related [Menu](https://uds.build/docs/components/menu), [Menu.ItemCheckbox](https://uds.build/docs/components/menu-item-checkbox)
54
54
  **/
55
- const MenuItem = (0, react.forwardRef)(function MenuItem({ active, hideOnClick, ...props }, ref) {
55
+ const MenuItem = (0, react.forwardRef)(function MenuItem({ active, hideOnClick, slotProps, ...props }, ref) {
56
56
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_client_Menu_Menu_ItemBase.MenuItemBase, {
57
57
  ref,
58
58
  as: _ariakit_react_menu.MenuItem,
59
59
  active,
60
- layerClassNames: {
61
- root: require_styles_styler.getStyles({
62
- menuitemItemVariantRoot: "default",
63
- menuitemItemVariantActiveRoot: active ? "on" : "off"
64
- }),
65
- text: require_styles_styler.getStyles({
66
- menuitemItemVariantText: "default",
67
- menuitemItemVariantActiveText: active ? "on" : "off"
68
- }),
69
- startIcon: require_styles_styler.getStyles({
70
- menuitemItemVariantIcon: "default",
71
- menuitemItemVariantActiveIcon: active ? "on" : "off"
72
- })
60
+ slotProps: {
61
+ root: {
62
+ className: require_styles_styler.cx(require_styles_styler.getStyles({
63
+ menuitemItemVariantRoot: "default",
64
+ menuitemItemVariantActiveRoot: active ? "on" : "off"
65
+ }), slotProps?.root?.className),
66
+ ...slotProps?.root
67
+ },
68
+ text: {
69
+ className: require_styles_styler.cx(require_styles_styler.getStyles({
70
+ menuitemItemVariantText: "default",
71
+ menuitemItemVariantActiveText: active ? "on" : "off"
72
+ }), slotProps?.text?.className),
73
+ ...slotProps?.text
74
+ },
75
+ startIcon: {
76
+ className: require_styles_styler.cx(require_styles_styler.getStyles({
77
+ menuitemItemVariantIcon: "default",
78
+ menuitemItemVariantActiveIcon: active ? "on" : "off"
79
+ }), slotProps?.startIcon?.className),
80
+ ...slotProps?.startIcon
81
+ }
73
82
  },
74
83
  rootProps: { hideOnClick },
75
84
  ...props
@@ -1,5 +1,6 @@
1
1
 
2
2
  import { UniversalMenuItemProps } from "../../../types/dist/index.cjs";
3
+ import { IconPropsWithSVGProps } from "../../../tokens/types.cjs";
3
4
  import "../../../tokens/index.cjs";
4
5
  import { PressableProps } from "../Pressable.cjs";
5
6
  import * as react from "react";
@@ -7,6 +8,9 @@ import { AriaRole } from "react";
7
8
  import { MenuItemProps as MenuItemProps$1 } from "@ariakit/react/menu";
8
9
 
9
10
  //#region src/components/client/Menu/Menu.Item.d.ts
11
+ type DataAttributes = {
12
+ [name: `data-${string}`]: string;
13
+ };
10
14
  interface MenuItemProps extends Omit<PressableProps, 'asChild'>, Omit<UniversalMenuItemProps, 'name'> {
11
15
  /**
12
16
  * Object returned by the [`useMenuStore`](https://ariakit.org/reference/use-menu-store) hook.
@@ -30,6 +34,13 @@ interface MenuItemProps extends Omit<PressableProps, 'asChild'>, Omit<UniversalM
30
34
  * @default 'menuitem'
31
35
  */
32
36
  role?: AriaRole;
37
+ /** Props to be passed into various slots within the component. */
38
+ slotProps?: {
39
+ root?: Partial<React.HTMLAttributes<HTMLDivElement> & DataAttributes>;
40
+ text?: Partial<Omit<React.HTMLAttributes<HTMLSpanElement>, 'color'> & DataAttributes>;
41
+ startIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
42
+ endIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
43
+ };
33
44
  }
34
45
  /**
35
46
  * **📋 A Menu Item component for navigation and actions**
@@ -1,6 +1,7 @@
1
1
 
2
2
  "use client";
3
3
  import { UniversalMenuItemProps } from "../../../types/dist/index.js";
4
+ import { IconPropsWithSVGProps } from "../../../tokens/types.js";
4
5
  import "../../../tokens/index.js";
5
6
  import { PressableProps } from "../Pressable.js";
6
7
  import * as react from "react";
@@ -8,6 +9,9 @@ import { AriaRole } from "react";
8
9
  import { MenuItemProps as MenuItemProps$1 } from "@ariakit/react/menu";
9
10
 
10
11
  //#region src/components/client/Menu/Menu.Item.d.ts
12
+ type DataAttributes = {
13
+ [name: `data-${string}`]: string;
14
+ };
11
15
  interface MenuItemProps extends Omit<PressableProps, 'asChild'>, Omit<UniversalMenuItemProps, 'name'> {
12
16
  /**
13
17
  * Object returned by the [`useMenuStore`](https://ariakit.org/reference/use-menu-store) hook.
@@ -31,6 +35,13 @@ interface MenuItemProps extends Omit<PressableProps, 'asChild'>, Omit<UniversalM
31
35
  * @default 'menuitem'
32
36
  */
33
37
  role?: AriaRole;
38
+ /** Props to be passed into various slots within the component. */
39
+ slotProps?: {
40
+ root?: Partial<React.HTMLAttributes<HTMLDivElement> & DataAttributes>;
41
+ text?: Partial<Omit<React.HTMLAttributes<HTMLSpanElement>, 'color'> & DataAttributes>;
42
+ startIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
43
+ endIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
44
+ };
34
45
  }
35
46
  /**
36
47
  * **📋 A Menu Item component for navigation and actions**