@yahoo/uds 3.156.2 → 3.157.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 (180) hide show
  1. package/dist/automated-config/dist/generated/autoVariants.cjs +9 -4
  2. package/dist/automated-config/dist/generated/autoVariants.d.cts +2 -1
  3. package/dist/automated-config/dist/generated/autoVariants.d.ts +2 -1
  4. package/dist/automated-config/dist/generated/autoVariants.js +9 -4
  5. package/dist/automated-config/dist/generated/generatedConfigs.cjs +3078 -3089
  6. package/dist/automated-config/dist/generated/generatedConfigs.d.cts +158 -141
  7. package/dist/automated-config/dist/generated/generatedConfigs.d.ts +158 -141
  8. package/dist/automated-config/dist/generated/generatedConfigs.js +3078 -3089
  9. package/dist/automated-config/dist/generated/universalTokensConfigAuto.cjs +1217 -491
  10. package/dist/automated-config/dist/generated/universalTokensConfigAuto.d.cts +4 -1
  11. package/dist/automated-config/dist/generated/universalTokensConfigAuto.d.ts +4 -1
  12. package/dist/automated-config/dist/generated/universalTokensConfigAuto.js +1217 -491
  13. package/dist/automated-config/dist/properties.cjs +9 -2
  14. package/dist/automated-config/dist/properties.d.cts +23 -0
  15. package/dist/automated-config/dist/properties.d.ts +23 -0
  16. package/dist/automated-config/dist/properties.js +9 -2
  17. package/dist/automated-config/dist/types/ComponentConfig.d.cts +77 -4
  18. package/dist/automated-config/dist/types/ComponentConfig.d.ts +77 -4
  19. package/dist/automated-config/dist/types/ConfigSchema.d.cts +14 -2
  20. package/dist/automated-config/dist/types/ConfigSchema.d.ts +14 -2
  21. package/dist/automated-config/dist/types/StateAxis.cjs +90 -0
  22. package/dist/automated-config/dist/types/StateAxis.d.cts +70 -0
  23. package/dist/automated-config/dist/types/StateAxis.d.ts +70 -0
  24. package/dist/automated-config/dist/types/StateAxis.js +84 -0
  25. package/dist/automated-config/dist/utils/buildConfigSchema.cjs +105 -82
  26. package/dist/automated-config/dist/utils/buildConfigSchema.d.cts +41 -12
  27. package/dist/automated-config/dist/utils/buildConfigSchema.d.ts +41 -12
  28. package/dist/automated-config/dist/utils/buildConfigSchema.js +106 -83
  29. package/dist/automated-config/dist/utils/canonicalizeStateKey.cjs +32 -0
  30. package/dist/automated-config/dist/utils/canonicalizeStateKey.d.cts +48 -0
  31. package/dist/automated-config/dist/utils/canonicalizeStateKey.d.ts +48 -0
  32. package/dist/automated-config/dist/utils/canonicalizeStateKey.js +31 -0
  33. package/dist/automated-config/dist/utils/getButtonControlHeight.cjs +129 -0
  34. package/dist/automated-config/dist/utils/getButtonControlHeight.d.cts +133 -0
  35. package/dist/automated-config/dist/utils/getButtonControlHeight.d.ts +133 -0
  36. package/dist/automated-config/dist/utils/getButtonControlHeight.js +122 -0
  37. package/dist/automated-config/dist/utils/getButtonControlHeightPx.cjs +114 -0
  38. package/dist/automated-config/dist/utils/getButtonControlHeightPx.d.cts +78 -0
  39. package/dist/automated-config/dist/utils/getButtonControlHeightPx.d.ts +78 -0
  40. package/dist/automated-config/dist/utils/getButtonControlHeightPx.js +108 -0
  41. package/dist/automated-config/dist/utils/getConfigComponentVariant.d.cts +8 -0
  42. package/dist/automated-config/dist/utils/getConfigComponentVariant.d.ts +8 -0
  43. package/dist/automated-config/dist/utils/getConfigVariantProperties.d.cts +3 -3
  44. package/dist/automated-config/dist/utils/getConfigVariantProperties.d.ts +3 -3
  45. package/dist/automated-config/dist/utils/getConfigVariantPseudoStates.cjs +12 -5
  46. package/dist/automated-config/dist/utils/getConfigVariantPseudoStates.d.cts +8 -1
  47. package/dist/automated-config/dist/utils/getConfigVariantPseudoStates.d.ts +8 -1
  48. package/dist/automated-config/dist/utils/getConfigVariantPseudoStates.js +12 -5
  49. package/dist/automated-config/dist/utils/iconButtonMatchButtonHeight.cjs +110 -0
  50. package/dist/automated-config/dist/utils/iconButtonMatchButtonHeight.d.cts +19 -0
  51. package/dist/automated-config/dist/utils/iconButtonMatchButtonHeight.d.ts +19 -0
  52. package/dist/automated-config/dist/utils/iconButtonMatchButtonHeight.js +108 -0
  53. package/dist/automated-config/dist/utils/index.cjs +478 -111
  54. package/dist/automated-config/dist/utils/index.d.cts +76 -15
  55. package/dist/automated-config/dist/utils/index.d.ts +76 -15
  56. package/dist/automated-config/dist/utils/index.js +479 -113
  57. package/dist/automated-config/dist/utils/isConfiguratorPropertyVisible.cjs +15 -0
  58. package/dist/automated-config/dist/utils/isConfiguratorPropertyVisible.d.cts +20 -0
  59. package/dist/automated-config/dist/utils/isConfiguratorPropertyVisible.d.ts +20 -0
  60. package/dist/automated-config/dist/utils/isConfiguratorPropertyVisible.js +15 -0
  61. package/dist/automated-config/dist/utils/pseudoStateSelectors.cjs +122 -0
  62. package/dist/automated-config/dist/utils/pseudoStateSelectors.d.cts +80 -0
  63. package/dist/automated-config/dist/utils/pseudoStateSelectors.d.ts +80 -0
  64. package/dist/automated-config/dist/utils/pseudoStateSelectors.js +120 -0
  65. package/dist/automated-config/dist/utils/resolvePropertyStates.cjs +131 -0
  66. package/dist/automated-config/dist/utils/resolvePropertyStates.d.cts +49 -0
  67. package/dist/automated-config/dist/utils/resolvePropertyStates.d.ts +49 -0
  68. package/dist/automated-config/dist/utils/resolvePropertyStates.js +130 -0
  69. package/dist/automated-config/dist/utils/resolveSlotByCascade.cjs +118 -0
  70. package/dist/automated-config/dist/utils/resolveSlotByCascade.d.cts +68 -0
  71. package/dist/automated-config/dist/utils/resolveSlotByCascade.d.ts +68 -0
  72. package/dist/automated-config/dist/utils/resolveSlotByCascade.js +117 -0
  73. package/dist/automated-config/dist/utils/variantConfigGuards.d.cts +13 -0
  74. package/dist/automated-config/dist/utils/variantConfigGuards.d.ts +13 -0
  75. package/dist/components/client/Button.cjs +3 -3
  76. package/dist/components/client/Button.js +3 -3
  77. package/dist/components/client/Input/Input.cjs +42 -6
  78. package/dist/components/client/Input/Input.d.cts +13 -0
  79. package/dist/components/client/Input/Input.d.ts +13 -0
  80. package/dist/components/client/Input/Input.js +42 -6
  81. package/dist/components/client/Menu/Menu.ItemCheckbox.d.cts +1 -1
  82. package/dist/components/client/Menu/Menu.ItemCheckbox.d.ts +1 -1
  83. package/dist/config/dist/index.cjs +224 -553
  84. package/dist/config/dist/index.js +224 -553
  85. package/dist/css/dist/commands/css.cjs +1 -0
  86. package/dist/css/dist/commands/css.helpers.cjs +6 -0
  87. package/dist/css/dist/commands/css.helpers.js +6 -0
  88. package/dist/css/dist/commands/css.js +1 -0
  89. package/dist/css/dist/css/generate.cjs +4 -2
  90. package/dist/css/dist/css/generate.d.cts +28 -0
  91. package/dist/css/dist/css/generate.d.ts +28 -0
  92. package/dist/css/dist/css/generate.helpers.cjs +5 -1
  93. package/dist/css/dist/css/generate.helpers.js +6 -2
  94. package/dist/css/dist/css/generate.js +4 -2
  95. package/dist/css/dist/css/postcss.cjs +81 -0
  96. package/dist/css/dist/css/postcss.helpers.cjs +60 -0
  97. package/dist/css/dist/css/postcss.helpers.js +59 -1
  98. package/dist/css/dist/css/postcss.js +82 -2
  99. package/dist/css/dist/css/runner.cjs +12 -2
  100. package/dist/css/dist/css/runner.js +12 -2
  101. package/dist/css/dist/css/theme.d.cts +6 -0
  102. package/dist/css/dist/css/theme.d.ts +6 -0
  103. package/dist/css/dist/packages/automated-config/dist/properties.cjs +9 -2
  104. package/dist/css/dist/packages/automated-config/dist/properties.js +9 -2
  105. package/dist/css/dist/packages/automated-config/dist/utils/index.d.cts +6 -0
  106. package/dist/css/dist/packages/automated-config/dist/utils/index.d.ts +6 -0
  107. package/dist/css/dist/packages/config/dist/index.cjs +224 -553
  108. package/dist/css/dist/packages/config/dist/index.js +224 -553
  109. package/dist/css/dist/utils/optimizeCSS.cjs +59 -0
  110. package/dist/css/dist/utils/optimizeCSS.js +59 -0
  111. package/dist/css-tokens/dist/index.cjs +2 -0
  112. package/dist/css-tokens/dist/index.d.cts +2 -1
  113. package/dist/css-tokens/dist/index.d.ts +2 -1
  114. package/dist/css-tokens/dist/index.js +2 -1
  115. package/dist/index.cjs +48 -0
  116. package/dist/index.d.cts +15 -4
  117. package/dist/index.d.ts +15 -4
  118. package/dist/index.js +14 -3
  119. package/dist/styles/styler.d.cts +8 -7
  120. package/dist/styles/styler.d.ts +8 -7
  121. package/dist/styles/variants.d.cts +9 -4
  122. package/dist/styles/variants.d.ts +9 -4
  123. package/dist/tailwind-internal/dist/packages/automated-config/dist/generated/generatedConfigs.cjs +3078 -3089
  124. package/dist/tailwind-internal/dist/packages/automated-config/dist/generated/generatedConfigs.js +3078 -3089
  125. package/dist/tailwind-internal/dist/packages/automated-config/dist/properties.cjs +9 -2
  126. package/dist/tailwind-internal/dist/packages/automated-config/dist/properties.js +9 -2
  127. package/dist/tailwind-internal/dist/packages/automated-config/dist/types/StateAxis.cjs +81 -0
  128. package/dist/tailwind-internal/dist/packages/automated-config/dist/types/StateAxis.js +76 -0
  129. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/canonicalizeStateKey.cjs +33 -0
  130. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/canonicalizeStateKey.js +32 -0
  131. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/componentStatePseudoStates.cjs +0 -7
  132. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/componentStatePseudoStates.js +1 -7
  133. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/getButtonControlHeight.cjs +126 -0
  134. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/getButtonControlHeight.js +123 -0
  135. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/iconButtonMatchButtonHeight.cjs +20 -0
  136. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/iconButtonMatchButtonHeight.js +20 -0
  137. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/index.cjs +422 -111
  138. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/index.d.cts +6 -0
  139. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/index.d.ts +6 -0
  140. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/index.js +423 -112
  141. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/pseudoStateSelectors.cjs +122 -0
  142. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/pseudoStateSelectors.js +121 -0
  143. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/resolvePropertyStates.cjs +132 -0
  144. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/resolvePropertyStates.js +131 -0
  145. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/resolveSlotByCascade.cjs +95 -0
  146. package/dist/tailwind-internal/dist/packages/automated-config/dist/utils/resolveSlotByCascade.js +95 -0
  147. package/dist/tailwind-internal/dist/packages/config/dist/index.cjs +224 -553
  148. package/dist/tailwind-internal/dist/packages/config/dist/index.js +224 -553
  149. package/dist/tailwind-internal/dist/packages/css-tokens/dist/index.cjs +2 -0
  150. package/dist/tailwind-internal/dist/packages/css-tokens/dist/index.js +2 -1
  151. package/dist/tailwind-internal/dist/plugins/components.cjs +28 -24
  152. package/dist/tailwind-internal/dist/plugins/components.js +28 -24
  153. package/dist/tailwind-internal/dist/utils/composeTailwindPlugins.d.cts +3 -0
  154. package/dist/tailwind-internal/dist/utils/composeTailwindPlugins.d.ts +3 -0
  155. package/dist/tailwind-internal/dist/utils/getShadowStyles.d.cts +2 -2
  156. package/dist/tailwind-internal/dist/utils/getShadowStyles.d.ts +2 -2
  157. package/dist/tokens/automation/index.cjs +47 -0
  158. package/dist/tokens/automation/index.d.cts +13 -2
  159. package/dist/tokens/automation/index.d.ts +13 -2
  160. package/dist/tokens/automation/index.js +13 -2
  161. package/dist/tokens/consts/cssTokens.cjs +1 -0
  162. package/dist/tokens/consts/cssTokens.d.cts +2 -2
  163. package/dist/tokens/consts/cssTokens.d.ts +2 -2
  164. package/dist/tokens/consts/cssTokens.js +2 -2
  165. package/dist/tokens/index.cjs +48 -0
  166. package/dist/tokens/index.d.cts +15 -4
  167. package/dist/tokens/index.d.ts +15 -4
  168. package/dist/tokens/index.js +14 -3
  169. package/dist/tokens/types.d.cts +1 -1
  170. package/dist/tokens/types.d.ts +1 -1
  171. package/dist/uds/generated/componentData.cjs +2177 -2172
  172. package/dist/uds/generated/componentData.js +2177 -2172
  173. package/dist/uds/generated/migrationSchemaVersion.cjs +1 -1
  174. package/dist/uds/generated/migrationSchemaVersion.js +1 -1
  175. package/dist/uds/generated/tailwindPurge.cjs +79 -78
  176. package/dist/uds/generated/tailwindPurge.js +79 -78
  177. package/generated/componentData.json +2718 -2713
  178. package/generated/migrationSchemaVersion.ts +1 -1
  179. package/generated/tailwindPurge.ts +2 -2
  180. package/package.json +1 -1
@@ -15,6 +15,10 @@ let lodash_isFunction_js = require("lodash/isFunction.js");
15
15
  lodash_isFunction_js = require_runtime.__toESM(lodash_isFunction_js);
16
16
  let motion_react = require("motion/react");
17
17
  //#region src/components/client/Input/Input.tsx
18
+ function setNativeInputValue(input, next) {
19
+ (Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value")?.set)?.call(input, next);
20
+ input.dispatchEvent(new Event("input", { bubbles: true }));
21
+ }
18
22
  const HelpTextContent = (0, react.memo)(function HelpTextContentOriginal({ helpText, helperTextIcon, spacingStart, spacingTop, size, isFilled, helperTextSlotProps, ...rest }) {
19
23
  if (!helpText) return null;
20
24
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Box.Box, {
@@ -82,7 +86,7 @@ const EndIcon = (0, react.memo)(function EndIcon({ icon, className, iconProps })
82
86
  *
83
87
  * @related [Checkbox](https://uds.build/docs/components/checkbox), [Radio](https://uds.build/docs/components/radio).
84
88
  **/
85
- 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) {
89
+ 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, onBlur, onFocus, formatOnBlur, parseOnFocus, slotProps, style, className, ...otherProps }, forwardedRef) {
86
90
  const generatedId = (0, react.useId)();
87
91
  const uid = id ?? `uds-input-${generatedId}`;
88
92
  const helpTextId = `uds-input-${uid}-help-text`;
@@ -98,7 +102,36 @@ const Input = (0, react.forwardRef)(function Input({ id, label, type = "text", s
98
102
  const handleChange = (0, react.useCallback)((e) => {
99
103
  if (!isControlled) setValue(e.target.value);
100
104
  onChange?.(e);
101
- }, [isControlled, onChange]);
105
+ slotProps?.input?.onChange?.(e);
106
+ }, [
107
+ isControlled,
108
+ onChange,
109
+ slotProps
110
+ ]);
111
+ const handleBlur = (0, react.useCallback)((e) => {
112
+ if (formatOnBlur && ref.current) {
113
+ const next = formatOnBlur(e.target.value);
114
+ if (next !== e.target.value) setNativeInputValue(ref.current, next);
115
+ }
116
+ onBlur?.(e);
117
+ slotProps?.input?.onBlur?.(e);
118
+ }, [
119
+ formatOnBlur,
120
+ onBlur,
121
+ slotProps
122
+ ]);
123
+ const handleFocus = (0, react.useCallback)((e) => {
124
+ if (parseOnFocus && ref.current) {
125
+ const next = parseOnFocus(e.target.value);
126
+ if (next !== e.target.value) setNativeInputValue(ref.current, next);
127
+ }
128
+ onFocus?.(e);
129
+ slotProps?.input?.onFocus?.(e);
130
+ }, [
131
+ parseOnFocus,
132
+ onFocus,
133
+ slotProps
134
+ ]);
102
135
  const layoutVariant = (0, motion_react.useReducedMotion)() ? "smooth" : "bouncy";
103
136
  const reduceMotion = forceReduceMotion ? "always" : "user";
104
137
  const isInteractive = !readOnly && !disabled;
@@ -110,7 +143,8 @@ const Input = (0, react.forwardRef)(function Input({ id, label, type = "text", s
110
143
  className: require_styles_styler.cx([className, disabled ? "opacity-50" : ""])
111
144
  }),
112
145
  inputWrapper: require_styles_styler.cx(require_styles_styler.getStyles({
113
- inputSizeInputWrapper: size,
146
+ inputSizeInputWrapperStatic: size,
147
+ inputSizeInputWrapperDynamic: size,
114
148
  inputVariantInputWrapper: "default",
115
149
  inputVariantValueInputWrapper: !value ? "empty" : "filled"
116
150
  }), "min-w-[200px]", inputWrapperClassName),
@@ -120,7 +154,7 @@ const Input = (0, react.forwardRef)(function Input({ id, label, type = "text", s
120
154
  inputVariantValueInput: !value ? "empty" : "filled",
121
155
  inputVariantInputPlaceholder: "default",
122
156
  inputVariantValueInputPlaceholder: !value ? "empty" : "filled",
123
- className: require_styles_styler.cx("grow", "uds-hit-target", "bg-clip-text", "focus:outline-none", isInteractive ? "cursor-text" : "cursor-not-allowed", inputClassName)
157
+ className: require_styles_styler.cx("grow", "uds-hit-target", "bg-transparent", "bg-clip-text", "focus-visible:outline-none", isInteractive ? "cursor-text" : "cursor-not-allowed", inputClassName)
124
158
  }),
125
159
  label: require_styles_styler.cx(require_styles_styler.getStyles({
126
160
  inputSizeLabel: size,
@@ -182,10 +216,12 @@ const Input = (0, react.forwardRef)(function Input({ id, label, type = "text", s
182
216
  disabled,
183
217
  "aria-describedby": helpTextId,
184
218
  "aria-invalid": hasError,
185
- onChange: handleChange,
186
219
  className: classNames.input,
187
220
  ...otherProps,
188
- ...inputProps
221
+ ...inputProps,
222
+ onChange: handleChange,
223
+ onBlur: handleBlur,
224
+ onFocus: handleFocus
189
225
  }),
190
226
  endIcon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_HStack.HStack, {
191
227
  alignItems: "center",
@@ -27,6 +27,19 @@ interface InputProps extends NativeInputProps, UniversalInputProps {
27
27
  helperText?: Partial<React.HTMLAttributes<HTMLSpanElement> & DataAttributes>;
28
28
  helperTextIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
29
29
  };
30
+ /** Called on user-initiated blur. Return the formatted display value.
31
+ * The result flows through `onChange`. Programmatic value changes (autofill,
32
+ * password managers, parent state updates) do NOT trigger this.
33
+ *
34
+ * In controlled mode (`value` prop supplied) the formatted value is surfaced
35
+ * only through `onChange` — the parent MUST fold it back into `value`, or it
36
+ * reverts on the next render. Uncontrolled usage handles this internally. */
37
+ formatOnBlur?: (value: string) => string;
38
+ /** Called on focus. Return the value to display while editing (typically the
39
+ * raw, unformatted form). Omit to leave the value as-is on focus.
40
+ * The result flows through `onChange` (same controlled-mode caveat as
41
+ * `formatOnBlur`: the parent must propagate the value when `value` is set). */
42
+ parseOnFocus?: (value: string) => string;
30
43
  }
31
44
  /**
32
45
  * **📦 An input that allows users to enter text and collect data.**
@@ -28,6 +28,19 @@ interface InputProps extends NativeInputProps, UniversalInputProps {
28
28
  helperText?: Partial<React.HTMLAttributes<HTMLSpanElement> & DataAttributes>;
29
29
  helperTextIcon?: Partial<IconPropsWithSVGProps & DataAttributes>;
30
30
  };
31
+ /** Called on user-initiated blur. Return the formatted display value.
32
+ * The result flows through `onChange`. Programmatic value changes (autofill,
33
+ * password managers, parent state updates) do NOT trigger this.
34
+ *
35
+ * In controlled mode (`value` prop supplied) the formatted value is surfaced
36
+ * only through `onChange` — the parent MUST fold it back into `value`, or it
37
+ * reverts on the next render. Uncontrolled usage handles this internally. */
38
+ formatOnBlur?: (value: string) => string;
39
+ /** Called on focus. Return the value to display while editing (typically the
40
+ * raw, unformatted form). Omit to leave the value as-is on focus.
41
+ * The result flows through `onChange` (same controlled-mode caveat as
42
+ * `formatOnBlur`: the parent must propagate the value when `value` is set). */
43
+ parseOnFocus?: (value: string) => string;
31
44
  }
32
45
  /**
33
46
  * **📦 An input that allows users to enter text and collect data.**
@@ -12,6 +12,10 @@ import { jsx, jsxs } from "react/jsx-runtime";
12
12
  import { isFunction } from "lodash-es";
13
13
  import { useReducedMotion } from "motion/react";
14
14
  //#region src/components/client/Input/Input.tsx
15
+ function setNativeInputValue(input, next) {
16
+ (Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value")?.set)?.call(input, next);
17
+ input.dispatchEvent(new Event("input", { bubbles: true }));
18
+ }
15
19
  const HelpTextContent = memo(function HelpTextContentOriginal({ helpText, helperTextIcon, spacingStart, spacingTop, size, isFilled, helperTextSlotProps, ...rest }) {
16
20
  if (!helpText) return null;
17
21
  return /* @__PURE__ */ jsx(Box, {
@@ -79,7 +83,7 @@ const EndIcon = 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 = 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) {
86
+ 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, onBlur, onFocus, formatOnBlur, parseOnFocus, slotProps, style, className, ...otherProps }, forwardedRef) {
83
87
  const generatedId = useId();
84
88
  const uid = id ?? `uds-input-${generatedId}`;
85
89
  const helpTextId = `uds-input-${uid}-help-text`;
@@ -95,7 +99,36 @@ const Input = forwardRef(function Input({ id, label, type = "text", size = "md",
95
99
  const handleChange = useCallback((e) => {
96
100
  if (!isControlled) setValue(e.target.value);
97
101
  onChange?.(e);
98
- }, [isControlled, onChange]);
102
+ slotProps?.input?.onChange?.(e);
103
+ }, [
104
+ isControlled,
105
+ onChange,
106
+ slotProps
107
+ ]);
108
+ const handleBlur = useCallback((e) => {
109
+ if (formatOnBlur && ref.current) {
110
+ const next = formatOnBlur(e.target.value);
111
+ if (next !== e.target.value) setNativeInputValue(ref.current, next);
112
+ }
113
+ onBlur?.(e);
114
+ slotProps?.input?.onBlur?.(e);
115
+ }, [
116
+ formatOnBlur,
117
+ onBlur,
118
+ slotProps
119
+ ]);
120
+ const handleFocus = useCallback((e) => {
121
+ if (parseOnFocus && ref.current) {
122
+ const next = parseOnFocus(e.target.value);
123
+ if (next !== e.target.value) setNativeInputValue(ref.current, next);
124
+ }
125
+ onFocus?.(e);
126
+ slotProps?.input?.onFocus?.(e);
127
+ }, [
128
+ parseOnFocus,
129
+ onFocus,
130
+ slotProps
131
+ ]);
99
132
  const layoutVariant = useReducedMotion() ? "smooth" : "bouncy";
100
133
  const reduceMotion = forceReduceMotion ? "always" : "user";
101
134
  const isInteractive = !readOnly && !disabled;
@@ -107,7 +140,8 @@ const Input = forwardRef(function Input({ id, label, type = "text", size = "md",
107
140
  className: cx([className, disabled ? "opacity-50" : ""])
108
141
  }),
109
142
  inputWrapper: cx(getStyles({
110
- inputSizeInputWrapper: size,
143
+ inputSizeInputWrapperStatic: size,
144
+ inputSizeInputWrapperDynamic: size,
111
145
  inputVariantInputWrapper: "default",
112
146
  inputVariantValueInputWrapper: !value ? "empty" : "filled"
113
147
  }), "min-w-[200px]", inputWrapperClassName),
@@ -117,7 +151,7 @@ const Input = forwardRef(function Input({ id, label, type = "text", size = "md",
117
151
  inputVariantValueInput: !value ? "empty" : "filled",
118
152
  inputVariantInputPlaceholder: "default",
119
153
  inputVariantValueInputPlaceholder: !value ? "empty" : "filled",
120
- className: cx("grow", "uds-hit-target", "bg-clip-text", "focus:outline-none", isInteractive ? "cursor-text" : "cursor-not-allowed", inputClassName)
154
+ className: cx("grow", "uds-hit-target", "bg-transparent", "bg-clip-text", "focus-visible:outline-none", isInteractive ? "cursor-text" : "cursor-not-allowed", inputClassName)
121
155
  }),
122
156
  label: cx(getStyles({
123
157
  inputSizeLabel: size,
@@ -179,10 +213,12 @@ const Input = forwardRef(function Input({ id, label, type = "text", size = "md",
179
213
  disabled,
180
214
  "aria-describedby": helpTextId,
181
215
  "aria-invalid": hasError,
182
- onChange: handleChange,
183
216
  className: classNames.input,
184
217
  ...otherProps,
185
- ...inputProps
218
+ ...inputProps,
219
+ onChange: handleChange,
220
+ onBlur: handleBlur,
221
+ onFocus: handleFocus
186
222
  }),
187
223
  endIcon && /* @__PURE__ */ jsx(HStack, {
188
224
  alignItems: "center",
@@ -87,6 +87,6 @@ interface MenuItemCheckboxProps extends Omit<PressableProps, 'asChild'>, HtmlBut
87
87
  *
88
88
  * @related [Menu](https://uds.build/docs/components/menu), [Menu.Item](https://uds.build/docs/components/menu-item)
89
89
  **/
90
- declare const MenuItemCheckbox: _$react.ForwardRefExoticComponent<Omit<MenuItemCheckboxProps, "active" | "hideEndIcon" | "rootProps"> & _$react.RefAttributes<HTMLDivElement>>;
90
+ declare const MenuItemCheckbox: _$react.ForwardRefExoticComponent<Omit<MenuItemCheckboxProps, "rootProps" | "hideEndIcon" | "active"> & _$react.RefAttributes<HTMLDivElement>>;
91
91
  //#endregion
92
92
  export { MenuItemCheckbox, type MenuItemCheckboxProps };
@@ -88,6 +88,6 @@ interface MenuItemCheckboxProps extends Omit<PressableProps, 'asChild'>, HtmlBut
88
88
  *
89
89
  * @related [Menu](https://uds.build/docs/components/menu), [Menu.Item](https://uds.build/docs/components/menu-item)
90
90
  **/
91
- declare const MenuItemCheckbox: _$react.ForwardRefExoticComponent<Omit<MenuItemCheckboxProps, "active" | "hideEndIcon" | "rootProps"> & _$react.RefAttributes<HTMLDivElement>>;
91
+ declare const MenuItemCheckbox: _$react.ForwardRefExoticComponent<Omit<MenuItemCheckboxProps, "rootProps" | "hideEndIcon" | "active"> & _$react.RefAttributes<HTMLDivElement>>;
92
92
  //#endregion
93
93
  export { MenuItemCheckbox, type MenuItemCheckboxProps };