@spark-ui/components 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +19 -0
  4. package/dist/DialogTrigger-5SI4dvpK.d.mts +142 -0
  5. package/dist/DialogTrigger-5SI4dvpK.d.ts +142 -0
  6. package/dist/Input-g0LpWuv0.d.mts +17 -0
  7. package/dist/Input-g0LpWuv0.d.ts +17 -0
  8. package/dist/InputGroup-aoaZxCLk.d.mts +28 -0
  9. package/dist/InputGroup-aoaZxCLk.d.ts +28 -0
  10. package/dist/InputTrailingIcon-BBp7sE6D.d.mts +20 -0
  11. package/dist/InputTrailingIcon-ZZx8PoJy.d.ts +20 -0
  12. package/dist/LabelRequiredIndicator-DRnCzHMU.d.mts +19 -0
  13. package/dist/LabelRequiredIndicator-DRnCzHMU.d.ts +19 -0
  14. package/dist/accordion/index.d.mts +85 -0
  15. package/dist/accordion/index.d.ts +85 -0
  16. package/dist/accordion/index.js +461 -0
  17. package/dist/accordion/index.js.map +1 -0
  18. package/dist/accordion/index.mjs +249 -0
  19. package/dist/accordion/index.mjs.map +1 -0
  20. package/dist/alert-dialog/index.d.mts +119 -0
  21. package/dist/alert-dialog/index.d.ts +119 -0
  22. package/dist/alert-dialog/index.js +1451 -0
  23. package/dist/alert-dialog/index.js.map +1 -0
  24. package/dist/alert-dialog/index.mjs +177 -0
  25. package/dist/alert-dialog/index.mjs.map +1 -0
  26. package/dist/badge/index.d.mts +47 -0
  27. package/dist/badge/index.d.ts +47 -0
  28. package/dist/badge/index.js +122 -0
  29. package/dist/badge/index.js.map +1 -0
  30. package/dist/badge/index.mjs +95 -0
  31. package/dist/badge/index.mjs.map +1 -0
  32. package/dist/breadcrumb/index.d.mts +64 -0
  33. package/dist/breadcrumb/index.d.ts +64 -0
  34. package/dist/breadcrumb/index.js +326 -0
  35. package/dist/breadcrumb/index.js.map +1 -0
  36. package/dist/breadcrumb/index.mjs +149 -0
  37. package/dist/breadcrumb/index.mjs.map +1 -0
  38. package/dist/button/index.d.mts +40 -0
  39. package/dist/button/index.d.ts +40 -0
  40. package/dist/button/index.js +877 -0
  41. package/dist/button/index.js.map +1 -0
  42. package/dist/button/index.mjs +10 -0
  43. package/dist/button/index.mjs.map +1 -0
  44. package/dist/carousel/index.d.mts +253 -0
  45. package/dist/carousel/index.d.ts +253 -0
  46. package/dist/carousel/index.js +1678 -0
  47. package/dist/carousel/index.js.map +1 -0
  48. package/dist/carousel/index.mjs +716 -0
  49. package/dist/carousel/index.mjs.map +1 -0
  50. package/dist/checkbox/index.d.mts +120 -0
  51. package/dist/checkbox/index.d.ts +120 -0
  52. package/dist/checkbox/index.js +873 -0
  53. package/dist/checkbox/index.js.map +1 -0
  54. package/dist/checkbox/index.mjs +349 -0
  55. package/dist/checkbox/index.mjs.map +1 -0
  56. package/dist/chip/index.d.mts +97 -0
  57. package/dist/chip/index.d.ts +97 -0
  58. package/dist/chip/index.js +905 -0
  59. package/dist/chip/index.js.map +1 -0
  60. package/dist/chip/index.mjs +793 -0
  61. package/dist/chip/index.mjs.map +1 -0
  62. package/dist/chunk-2KPFQEAA.mjs +52 -0
  63. package/dist/chunk-2KPFQEAA.mjs.map +1 -0
  64. package/dist/chunk-4F5DOL57.mjs +26 -0
  65. package/dist/chunk-4F5DOL57.mjs.map +1 -0
  66. package/dist/chunk-6JOA37TZ.mjs +742 -0
  67. package/dist/chunk-6JOA37TZ.mjs.map +1 -0
  68. package/dist/chunk-7PMPYEHJ.mjs +379 -0
  69. package/dist/chunk-7PMPYEHJ.mjs.map +1 -0
  70. package/dist/chunk-AESXFMCC.mjs +68 -0
  71. package/dist/chunk-AESXFMCC.mjs.map +1 -0
  72. package/dist/chunk-B42LOFIZ.mjs +308 -0
  73. package/dist/chunk-B42LOFIZ.mjs.map +1 -0
  74. package/dist/chunk-FGOZHKBT.mjs +97 -0
  75. package/dist/chunk-FGOZHKBT.mjs.map +1 -0
  76. package/dist/chunk-HLXYG643.mjs +52 -0
  77. package/dist/chunk-HLXYG643.mjs.map +1 -0
  78. package/dist/chunk-JKNBJHD5.mjs +601 -0
  79. package/dist/chunk-JKNBJHD5.mjs.map +1 -0
  80. package/dist/chunk-K7VP7DH3.mjs +66 -0
  81. package/dist/chunk-K7VP7DH3.mjs.map +1 -0
  82. package/dist/chunk-MUNDKRAE.mjs +80 -0
  83. package/dist/chunk-MUNDKRAE.mjs.map +1 -0
  84. package/dist/chunk-NBZKMCHF.mjs +36 -0
  85. package/dist/chunk-NBZKMCHF.mjs.map +1 -0
  86. package/dist/chunk-PZWESKAR.mjs +314 -0
  87. package/dist/chunk-PZWESKAR.mjs.map +1 -0
  88. package/dist/collapsible/index.d.mts +60 -0
  89. package/dist/collapsible/index.d.ts +60 -0
  90. package/dist/collapsible/index.js +140 -0
  91. package/dist/collapsible/index.js.map +1 -0
  92. package/dist/collapsible/index.mjs +8 -0
  93. package/dist/collapsible/index.mjs.map +1 -0
  94. package/dist/combobox/index.d.mts +285 -0
  95. package/dist/combobox/index.d.ts +285 -0
  96. package/dist/combobox/index.js +2920 -0
  97. package/dist/combobox/index.js.map +1 -0
  98. package/dist/combobox/index.mjs +1267 -0
  99. package/dist/combobox/index.mjs.map +1 -0
  100. package/dist/dialog/index.d.mts +33 -0
  101. package/dist/dialog/index.d.ts +33 -0
  102. package/dist/dialog/index.js +1286 -0
  103. package/dist/dialog/index.js.map +1 -0
  104. package/dist/dialog/index.mjs +13 -0
  105. package/dist/dialog/index.mjs.map +1 -0
  106. package/dist/divider/index.d.mts +61 -0
  107. package/dist/divider/index.d.ts +61 -0
  108. package/dist/divider/index.js +223 -0
  109. package/dist/divider/index.js.map +1 -0
  110. package/dist/divider/index.mjs +196 -0
  111. package/dist/divider/index.mjs.map +1 -0
  112. package/dist/drawer/index.d.mts +148 -0
  113. package/dist/drawer/index.d.ts +148 -0
  114. package/dist/drawer/index.js +1266 -0
  115. package/dist/drawer/index.js.map +1 -0
  116. package/dist/drawer/index.mjs +299 -0
  117. package/dist/drawer/index.mjs.map +1 -0
  118. package/dist/dropdown/index.d.mts +233 -0
  119. package/dist/dropdown/index.d.ts +233 -0
  120. package/dist/dropdown/index.js +2402 -0
  121. package/dist/dropdown/index.js.map +1 -0
  122. package/dist/dropdown/index.mjs +741 -0
  123. package/dist/dropdown/index.mjs.map +1 -0
  124. package/dist/form-field/index.d.mts +176 -0
  125. package/dist/form-field/index.d.ts +176 -0
  126. package/dist/form-field/index.js +540 -0
  127. package/dist/form-field/index.js.map +1 -0
  128. package/dist/form-field/index.mjs +13 -0
  129. package/dist/form-field/index.mjs.map +1 -0
  130. package/dist/icon/index.d.mts +28 -0
  131. package/dist/icon/index.d.ts +28 -0
  132. package/dist/icon/index.js +127 -0
  133. package/dist/icon/index.js.map +1 -0
  134. package/dist/icon/index.mjs +9 -0
  135. package/dist/icon/index.mjs.map +1 -0
  136. package/dist/icon-button/index.d.mts +16 -0
  137. package/dist/icon-button/index.d.ts +16 -0
  138. package/dist/icon-button/index.js +921 -0
  139. package/dist/icon-button/index.js.map +1 -0
  140. package/dist/icon-button/index.mjs +11 -0
  141. package/dist/icon-button/index.mjs.map +1 -0
  142. package/dist/input/index.d.mts +78 -0
  143. package/dist/input/index.d.ts +78 -0
  144. package/dist/input/index.js +1119 -0
  145. package/dist/input/index.js.map +1 -0
  146. package/dist/input/index.mjs +16 -0
  147. package/dist/input/index.mjs.map +1 -0
  148. package/dist/kbd/index.d.mts +9 -0
  149. package/dist/kbd/index.d.ts +9 -0
  150. package/dist/kbd/index.js +46 -0
  151. package/dist/kbd/index.js.map +1 -0
  152. package/dist/kbd/index.mjs +19 -0
  153. package/dist/kbd/index.mjs.map +1 -0
  154. package/dist/label/index.d.mts +11 -0
  155. package/dist/label/index.d.ts +11 -0
  156. package/dist/label/index.js +78 -0
  157. package/dist/label/index.js.map +1 -0
  158. package/dist/label/index.mjs +7 -0
  159. package/dist/label/index.mjs.map +1 -0
  160. package/dist/link-box/index.d.mts +34 -0
  161. package/dist/link-box/index.d.ts +34 -0
  162. package/dist/link-box/index.js +92 -0
  163. package/dist/link-box/index.js.map +1 -0
  164. package/dist/link-box/index.mjs +58 -0
  165. package/dist/link-box/index.mjs.map +1 -0
  166. package/dist/pagination/index.d.mts +143 -0
  167. package/dist/pagination/index.d.ts +143 -0
  168. package/dist/pagination/index.js +1303 -0
  169. package/dist/pagination/index.js.map +1 -0
  170. package/dist/pagination/index.mjs +326 -0
  171. package/dist/pagination/index.mjs.map +1 -0
  172. package/dist/popover/index.d.mts +93 -0
  173. package/dist/popover/index.d.ts +93 -0
  174. package/dist/popover/index.js +1280 -0
  175. package/dist/popover/index.js.map +1 -0
  176. package/dist/popover/index.mjs +13 -0
  177. package/dist/popover/index.mjs.map +1 -0
  178. package/dist/portal/index.d.mts +13 -0
  179. package/dist/portal/index.d.ts +13 -0
  180. package/dist/portal/index.js +37 -0
  181. package/dist/portal/index.js.map +1 -0
  182. package/dist/portal/index.mjs +10 -0
  183. package/dist/portal/index.mjs.map +1 -0
  184. package/dist/progress/index.d.mts +48 -0
  185. package/dist/progress/index.d.ts +48 -0
  186. package/dist/progress/index.js +201 -0
  187. package/dist/progress/index.js.map +1 -0
  188. package/dist/progress/index.mjs +174 -0
  189. package/dist/progress/index.mjs.map +1 -0
  190. package/dist/progress-tracker/index.d.mts +81 -0
  191. package/dist/progress-tracker/index.d.ts +81 -0
  192. package/dist/progress-tracker/index.js +834 -0
  193. package/dist/progress-tracker/index.js.map +1 -0
  194. package/dist/progress-tracker/index.mjs +716 -0
  195. package/dist/progress-tracker/index.mjs.map +1 -0
  196. package/dist/radio-group/index.d.mts +100 -0
  197. package/dist/radio-group/index.d.ts +100 -0
  198. package/dist/radio-group/index.js +824 -0
  199. package/dist/radio-group/index.js.map +1 -0
  200. package/dist/radio-group/index.mjs +297 -0
  201. package/dist/radio-group/index.mjs.map +1 -0
  202. package/dist/rating/index.d.mts +78 -0
  203. package/dist/rating/index.d.ts +78 -0
  204. package/dist/rating/index.js +362 -0
  205. package/dist/rating/index.js.map +1 -0
  206. package/dist/rating/index.mjs +247 -0
  207. package/dist/rating/index.mjs.map +1 -0
  208. package/dist/scrolling-list/index.d.mts +105 -0
  209. package/dist/scrolling-list/index.d.ts +105 -0
  210. package/dist/scrolling-list/index.js +1367 -0
  211. package/dist/scrolling-list/index.js.map +1 -0
  212. package/dist/scrolling-list/index.mjs +407 -0
  213. package/dist/scrolling-list/index.mjs.map +1 -0
  214. package/dist/select/index.d.mts +167 -0
  215. package/dist/select/index.d.ts +167 -0
  216. package/dist/select/index.js +991 -0
  217. package/dist/select/index.js.map +1 -0
  218. package/dist/select/index.mjs +470 -0
  219. package/dist/select/index.mjs.map +1 -0
  220. package/dist/skeleton/index.d.mts +67 -0
  221. package/dist/skeleton/index.d.ts +67 -0
  222. package/dist/skeleton/index.js +206 -0
  223. package/dist/skeleton/index.js.map +1 -0
  224. package/dist/skeleton/index.mjs +147 -0
  225. package/dist/skeleton/index.mjs.map +1 -0
  226. package/dist/slider/index.d.mts +97 -0
  227. package/dist/slider/index.d.ts +97 -0
  228. package/dist/slider/index.js +209 -0
  229. package/dist/slider/index.js.map +1 -0
  230. package/dist/slider/index.mjs +182 -0
  231. package/dist/slider/index.mjs.map +1 -0
  232. package/dist/slot/index.d.mts +17 -0
  233. package/dist/slot/index.d.ts +17 -0
  234. package/dist/slot/index.js +51 -0
  235. package/dist/slot/index.js.map +1 -0
  236. package/dist/slot/index.mjs +11 -0
  237. package/dist/slot/index.mjs.map +1 -0
  238. package/dist/snackbar/index.d.mts +158 -0
  239. package/dist/snackbar/index.d.ts +158 -0
  240. package/dist/snackbar/index.js +1693 -0
  241. package/dist/snackbar/index.js.map +1 -0
  242. package/dist/snackbar/index.mjs +733 -0
  243. package/dist/snackbar/index.mjs.map +1 -0
  244. package/dist/spinner/index.d.mts +21 -0
  245. package/dist/spinner/index.d.ts +21 -0
  246. package/dist/spinner/index.js +139 -0
  247. package/dist/spinner/index.js.map +1 -0
  248. package/dist/spinner/index.mjs +9 -0
  249. package/dist/spinner/index.mjs.map +1 -0
  250. package/dist/stepper/index.d.mts +82 -0
  251. package/dist/stepper/index.d.ts +82 -0
  252. package/dist/stepper/index.js +2178 -0
  253. package/dist/stepper/index.js.map +1 -0
  254. package/dist/stepper/index.mjs +229 -0
  255. package/dist/stepper/index.mjs.map +1 -0
  256. package/dist/switch/index.d.mts +64 -0
  257. package/dist/switch/index.d.ts +64 -0
  258. package/dist/switch/index.js +768 -0
  259. package/dist/switch/index.js.map +1 -0
  260. package/dist/switch/index.mjs +245 -0
  261. package/dist/switch/index.mjs.map +1 -0
  262. package/dist/tabs/index.d.mts +103 -0
  263. package/dist/tabs/index.d.ts +103 -0
  264. package/dist/tabs/index.js +1315 -0
  265. package/dist/tabs/index.js.map +1 -0
  266. package/dist/tabs/index.mjs +391 -0
  267. package/dist/tabs/index.mjs.map +1 -0
  268. package/dist/tag/index.d.mts +27 -0
  269. package/dist/tag/index.d.ts +27 -0
  270. package/dist/tag/index.js +269 -0
  271. package/dist/tag/index.js.map +1 -0
  272. package/dist/tag/index.mjs +237 -0
  273. package/dist/tag/index.mjs.map +1 -0
  274. package/dist/text-link/index.d.mts +20 -0
  275. package/dist/text-link/index.d.ts +20 -0
  276. package/dist/text-link/index.js +99 -0
  277. package/dist/text-link/index.js.map +1 -0
  278. package/dist/text-link/index.mjs +8 -0
  279. package/dist/text-link/index.mjs.map +1 -0
  280. package/dist/textarea/index.d.mts +47 -0
  281. package/dist/textarea/index.d.ts +47 -0
  282. package/dist/textarea/index.js +1180 -0
  283. package/dist/textarea/index.js.map +1 -0
  284. package/dist/textarea/index.mjs +77 -0
  285. package/dist/textarea/index.mjs.map +1 -0
  286. package/dist/visually-hidden/index.d.mts +16 -0
  287. package/dist/visually-hidden/index.d.ts +16 -0
  288. package/dist/visually-hidden/index.js +67 -0
  289. package/dist/visually-hidden/index.js.map +1 -0
  290. package/dist/visually-hidden/index.mjs +8 -0
  291. package/dist/visually-hidden/index.mjs.map +1 -0
  292. package/global.d.ts +12 -0
  293. package/package.json +75 -0
  294. package/tsconfig.build.json +9 -0
  295. package/tsconfig.json +9 -0
  296. package/tsup.config.ts +11 -0
@@ -0,0 +1,1119 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/input/index.ts
21
+ var input_exports = {};
22
+ __export(input_exports, {
23
+ Input: () => Input,
24
+ InputGroup: () => InputGroup2,
25
+ useInputGroup: () => useInputGroup
26
+ });
27
+ module.exports = __toCommonJS(input_exports);
28
+
29
+ // src/input/InputClearButton.tsx
30
+ var import_DeleteOutline = require("@spark-ui/icons/DeleteOutline");
31
+ var import_class_variance_authority2 = require("class-variance-authority");
32
+
33
+ // src/icon/Icon.tsx
34
+ var import_react2 = require("react");
35
+
36
+ // src/slot/Slot.tsx
37
+ var import_radix_ui = require("radix-ui");
38
+ var import_react = require("react");
39
+ var import_jsx_runtime = require("react/jsx-runtime");
40
+ var Slottable = import_radix_ui.Slot.Slottable;
41
+ var Slot = ({ ref, ...props }) => {
42
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_radix_ui.Slot.Root, { ref, ...props });
43
+ };
44
+
45
+ // src/visually-hidden/VisuallyHidden.tsx
46
+ var import_jsx_runtime2 = require("react/jsx-runtime");
47
+ var VisuallyHidden = ({ asChild = false, ref, ...props }) => {
48
+ const Component = asChild ? Slot : "span";
49
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
50
+ Component,
51
+ {
52
+ ...props,
53
+ ref,
54
+ style: {
55
+ // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss
56
+ position: "absolute",
57
+ border: 0,
58
+ width: 1,
59
+ height: 1,
60
+ padding: 0,
61
+ margin: -1,
62
+ overflow: "hidden",
63
+ clip: "rect(0, 0, 0, 0)",
64
+ whiteSpace: "nowrap",
65
+ wordWrap: "normal",
66
+ ...props.style
67
+ }
68
+ }
69
+ );
70
+ };
71
+ VisuallyHidden.displayName = "VisuallyHidden";
72
+
73
+ // src/icon/Icon.styles.tsx
74
+ var import_internal_utils = require("@spark-ui/internal-utils");
75
+ var import_class_variance_authority = require("class-variance-authority");
76
+ var iconStyles = (0, import_class_variance_authority.cva)(["fill-current shrink-0"], {
77
+ variants: {
78
+ /**
79
+ * Color scheme of the icon.
80
+ */
81
+ intent: (0, import_internal_utils.makeVariants)({
82
+ current: ["text-current"],
83
+ main: ["text-main"],
84
+ support: ["text-support"],
85
+ accent: ["text-accent"],
86
+ basic: ["text-basic"],
87
+ success: ["text-success"],
88
+ alert: ["text-alert"],
89
+ error: ["text-error"],
90
+ info: ["text-info"],
91
+ neutral: ["text-neutral"]
92
+ }),
93
+ /**
94
+ * Sets the size of the icon.
95
+ */
96
+ size: (0, import_internal_utils.makeVariants)({
97
+ current: ["u-current-font-size"],
98
+ sm: ["w-sz-16", "h-sz-16"],
99
+ md: ["w-sz-24", "h-sz-24"],
100
+ lg: ["w-sz-32", "h-sz-32"],
101
+ xl: ["w-sz-40", "h-sz-40"]
102
+ })
103
+ }
104
+ });
105
+
106
+ // src/icon/Icon.tsx
107
+ var import_jsx_runtime3 = require("react/jsx-runtime");
108
+ var Icon = ({
109
+ label,
110
+ className,
111
+ size = "current",
112
+ intent = "current",
113
+ children,
114
+ ...others
115
+ }) => {
116
+ const child = import_react2.Children.only(children);
117
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
118
+ (0, import_react2.cloneElement)(child, {
119
+ className: iconStyles({ className, size, intent }),
120
+ "data-spark-component": "icon",
121
+ "aria-hidden": "true",
122
+ focusable: "false",
123
+ ...others
124
+ }),
125
+ label && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(VisuallyHidden, { children: label })
126
+ ] });
127
+ };
128
+ Icon.displayName = "Icon";
129
+
130
+ // src/input/InputGroupContext.ts
131
+ var import_react3 = require("react");
132
+ var InputGroupContext = (0, import_react3.createContext)(null);
133
+ var useInputGroup = () => {
134
+ const context = (0, import_react3.useContext)(InputGroupContext);
135
+ return context || { isStandalone: true };
136
+ };
137
+
138
+ // src/input/InputClearButton.tsx
139
+ var import_jsx_runtime4 = require("react/jsx-runtime");
140
+ var Root = ({ className, tabIndex = -1, onClick, ref, ...others }) => {
141
+ const { onClear, hasTrailingIcon } = useInputGroup();
142
+ const handleClick = (event) => {
143
+ if (onClick) {
144
+ onClick(event);
145
+ }
146
+ if (onClear) {
147
+ onClear();
148
+ }
149
+ };
150
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
151
+ "button",
152
+ {
153
+ ref,
154
+ className: (0, import_class_variance_authority2.cx)(
155
+ className,
156
+ "pointer-events-auto absolute top-1/2 -translate-y-1/2",
157
+ "inline-flex h-full items-center justify-center outline-hidden",
158
+ "text-neutral hover:text-neutral-hovered",
159
+ hasTrailingIcon ? "right-3xl px-sz-12" : "pl-md pr-lg right-0"
160
+ ),
161
+ tabIndex,
162
+ onClick: handleClick,
163
+ type: "button",
164
+ ...others,
165
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Icon, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_DeleteOutline.DeleteOutline, {}) })
166
+ }
167
+ );
168
+ };
169
+ var InputClearButton = Object.assign(Root, {
170
+ id: "ClearButton"
171
+ });
172
+ Root.displayName = "InputGroup.ClearButton";
173
+
174
+ // src/input/InputGroup.tsx
175
+ var import_use_combined_state = require("@spark-ui/use-combined-state");
176
+ var import_use_merge_refs = require("@spark-ui/use-merge-refs");
177
+ var import_react9 = require("react");
178
+
179
+ // src/form-field/FormField.tsx
180
+ var import_class_variance_authority3 = require("class-variance-authority");
181
+ var import_react6 = require("react");
182
+
183
+ // src/form-field/FormFieldContext.tsx
184
+ var import_react4 = require("react");
185
+ var FormFieldContext = (0, import_react4.createContext)(null);
186
+ var ID_PREFIX = ":form-field";
187
+ var useFormField = () => {
188
+ const context = (0, import_react4.useContext)(FormFieldContext);
189
+ if (!context) {
190
+ throw Error("useFormField must be used within a FormField provider");
191
+ }
192
+ return context;
193
+ };
194
+
195
+ // src/form-field/FormFieldProvider.tsx
196
+ var import_react5 = require("react");
197
+ var import_jsx_runtime5 = require("react/jsx-runtime");
198
+ var FormFieldProvider = ({
199
+ id,
200
+ name,
201
+ disabled = false,
202
+ readOnly = false,
203
+ state,
204
+ isRequired,
205
+ children
206
+ }) => {
207
+ const labelId = `${ID_PREFIX}-label-${(0, import_react5.useId)()}`;
208
+ const [messageIds, setMessageIds] = (0, import_react5.useState)([]);
209
+ const description = messageIds.length > 0 ? messageIds.join(" ") : void 0;
210
+ const handleMessageIdAdd = (0, import_react5.useCallback)((msgId) => {
211
+ setMessageIds((ids) => [...ids, msgId]);
212
+ }, []);
213
+ const handleMessageIdRemove = (0, import_react5.useCallback)((msgId) => {
214
+ setMessageIds((ids) => ids.filter((current) => current !== msgId));
215
+ }, []);
216
+ const value = (0, import_react5.useMemo)(() => {
217
+ const isInvalid = state === "error";
218
+ return {
219
+ id,
220
+ labelId,
221
+ name,
222
+ disabled,
223
+ readOnly,
224
+ state,
225
+ isRequired,
226
+ isInvalid,
227
+ description,
228
+ onMessageIdAdd: handleMessageIdAdd,
229
+ onMessageIdRemove: handleMessageIdRemove
230
+ };
231
+ }, [
232
+ id,
233
+ labelId,
234
+ name,
235
+ disabled,
236
+ readOnly,
237
+ description,
238
+ state,
239
+ isRequired,
240
+ handleMessageIdAdd,
241
+ handleMessageIdRemove
242
+ ]);
243
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(FormFieldContext.Provider, { value, children });
244
+ };
245
+ FormFieldProvider.displayName = "FormFieldProvider";
246
+
247
+ // src/form-field/FormField.tsx
248
+ var import_jsx_runtime6 = require("react/jsx-runtime");
249
+ var FormField = ({
250
+ className,
251
+ disabled = false,
252
+ readOnly = false,
253
+ name,
254
+ state,
255
+ isRequired = false,
256
+ asChild = false,
257
+ ref,
258
+ ...others
259
+ }) => {
260
+ const id = `${ID_PREFIX}-${(0, import_react6.useId)()}`;
261
+ const Component = asChild ? Slot : "div";
262
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
263
+ FormFieldProvider,
264
+ {
265
+ id,
266
+ name,
267
+ isRequired,
268
+ disabled,
269
+ readOnly,
270
+ state,
271
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
272
+ Component,
273
+ {
274
+ ref,
275
+ "data-spark-component": "form-field",
276
+ className: (0, import_class_variance_authority3.cx)(className, "gap-sm flex flex-col"),
277
+ ...others
278
+ }
279
+ )
280
+ }
281
+ );
282
+ };
283
+ FormField.displayName = "FormField";
284
+
285
+ // src/form-field/FormFieldStateMessage.tsx
286
+ var import_AlertOutline = require("@spark-ui/icons/AlertOutline");
287
+ var import_Check = require("@spark-ui/icons/Check");
288
+ var import_WarningOutline = require("@spark-ui/icons/WarningOutline");
289
+ var import_class_variance_authority5 = require("class-variance-authority");
290
+
291
+ // src/form-field/FormFieldMessage.tsx
292
+ var import_class_variance_authority4 = require("class-variance-authority");
293
+ var import_react7 = require("react");
294
+ var import_jsx_runtime7 = require("react/jsx-runtime");
295
+ var FormFieldMessage = ({
296
+ id: idProp,
297
+ className,
298
+ ref,
299
+ ...others
300
+ }) => {
301
+ const { onMessageIdAdd, onMessageIdRemove } = useFormField();
302
+ const currentId = `${ID_PREFIX}-message-${(0, import_react7.useId)()}`;
303
+ const id = idProp || currentId;
304
+ (0, import_react7.useEffect)(() => {
305
+ onMessageIdAdd(id);
306
+ return () => {
307
+ onMessageIdRemove(id);
308
+ };
309
+ }, [id, onMessageIdAdd, onMessageIdRemove]);
310
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
311
+ "span",
312
+ {
313
+ ref,
314
+ id,
315
+ "data-spark-component": "form-field-message",
316
+ className: (0, import_class_variance_authority4.cx)(className, "text-caption"),
317
+ ...others
318
+ }
319
+ );
320
+ };
321
+ FormFieldMessage.displayName = "FormField.Message";
322
+
323
+ // src/form-field/FormFieldStateMessage.tsx
324
+ var import_jsx_runtime8 = require("react/jsx-runtime");
325
+ var FormFieldStateMessage = ({
326
+ className,
327
+ state,
328
+ children,
329
+ ref,
330
+ ...others
331
+ }) => {
332
+ const field = useFormField();
333
+ if (field.state !== state) {
334
+ return null;
335
+ }
336
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
337
+ FormFieldMessage,
338
+ {
339
+ ref,
340
+ "data-spark-component": "form-field-state-message",
341
+ "aria-live": "polite",
342
+ className: (0, import_class_variance_authority5.cx)(
343
+ "gap-sm flex items-center",
344
+ state === "error" ? "text-error" : "text-on-surface/dim-1",
345
+ className
346
+ ),
347
+ ...others,
348
+ children: [
349
+ state === "alert" && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Icon, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_WarningOutline.WarningOutline, {}) }),
350
+ state === "error" && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Icon, { size: "sm", intent: "error", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_AlertOutline.AlertOutline, {}) }),
351
+ state === "success" && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Icon, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_Check.Check, {}) }),
352
+ children
353
+ ]
354
+ }
355
+ );
356
+ };
357
+ FormFieldStateMessage.displayName = "FormField.StateMessage";
358
+
359
+ // src/form-field/FormFieldAlertMessage.tsx
360
+ var import_jsx_runtime9 = require("react/jsx-runtime");
361
+ var FormFieldAlertMessage = ({ ref, ...props }) => {
362
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
363
+ FormFieldStateMessage,
364
+ {
365
+ ref,
366
+ "data-spark-component": "form-field-alert-message",
367
+ state: "alert",
368
+ ...props
369
+ }
370
+ );
371
+ };
372
+ FormFieldAlertMessage.displayName = "FormField.AlertMessage";
373
+
374
+ // src/form-field/FormFieldCharactersCount.tsx
375
+ var import_class_variance_authority6 = require("class-variance-authority");
376
+ var import_jsx_runtime10 = require("react/jsx-runtime");
377
+ var FormFieldCharactersCount = ({
378
+ className,
379
+ value = "",
380
+ maxLength,
381
+ ref,
382
+ ...others
383
+ }) => {
384
+ const displayValue = `${value.length}/${maxLength}`;
385
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
386
+ "span",
387
+ {
388
+ ref,
389
+ "data-spark-component": "form-field-characters-count",
390
+ className: (0, import_class_variance_authority6.cx)(className, "text-caption", "text-neutral"),
391
+ ...others,
392
+ children: displayValue
393
+ }
394
+ );
395
+ };
396
+ FormFieldCharactersCount.displayName = "FormField.CharactersCount";
397
+
398
+ // src/form-field/FormFieldControl.tsx
399
+ var import_react8 = require("react");
400
+ var import_jsx_runtime11 = require("react/jsx-runtime");
401
+ var useFormFieldControl = () => {
402
+ const { id, name, description, disabled, readOnly, state, labelId, isInvalid, isRequired } = (0, import_react8.useContext)(FormFieldContext) || {};
403
+ return {
404
+ id,
405
+ name,
406
+ description,
407
+ disabled,
408
+ readOnly,
409
+ state,
410
+ labelId,
411
+ isInvalid,
412
+ isRequired
413
+ };
414
+ };
415
+ var FormFieldControl = ({ children }) => {
416
+ const props = useFormFieldControl();
417
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_jsx_runtime11.Fragment, { children: children(props) });
418
+ };
419
+ FormFieldControl.displayName = "FormField.Control";
420
+
421
+ // src/form-field/FormFieldErrorMessage.tsx
422
+ var import_jsx_runtime12 = require("react/jsx-runtime");
423
+ var FormFieldErrorMessage = ({ ref, ...props }) => {
424
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
425
+ FormFieldStateMessage,
426
+ {
427
+ ref,
428
+ "data-spark-component": "form-field-error-message",
429
+ state: "error",
430
+ ...props
431
+ }
432
+ );
433
+ };
434
+ FormFieldErrorMessage.displayName = "FormField.ErrorMessage";
435
+
436
+ // src/form-field/FormFieldHelperMessage.tsx
437
+ var import_class_variance_authority7 = require("class-variance-authority");
438
+ var import_jsx_runtime13 = require("react/jsx-runtime");
439
+ var FormFieldHelperMessage = ({
440
+ className,
441
+ ref,
442
+ ...others
443
+ }) => {
444
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
445
+ FormFieldMessage,
446
+ {
447
+ ref,
448
+ "data-spark-component": "form-field-helper-message",
449
+ className: (0, import_class_variance_authority7.cx)("text-on-surface/dim-1", className),
450
+ ...others
451
+ }
452
+ );
453
+ };
454
+ FormFieldHelperMessage.displayName = "FormField.HelperMessage";
455
+
456
+ // src/form-field/FormFieldLabel.tsx
457
+ var import_class_variance_authority11 = require("class-variance-authority");
458
+
459
+ // src/label/Label.tsx
460
+ var import_class_variance_authority8 = require("class-variance-authority");
461
+ var import_radix_ui2 = require("radix-ui");
462
+ var import_jsx_runtime14 = require("react/jsx-runtime");
463
+ var Label = ({ className, ref, ...others }) => {
464
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
465
+ import_radix_ui2.Label.Label,
466
+ {
467
+ ref,
468
+ "data-spark-component": "label",
469
+ className: (0, import_class_variance_authority8.cx)("text-body-1", className),
470
+ ...others
471
+ }
472
+ );
473
+ };
474
+ Label.displayName = "Label";
475
+
476
+ // src/label/LabelRequiredIndicator.tsx
477
+ var import_class_variance_authority9 = require("class-variance-authority");
478
+ var import_jsx_runtime15 = require("react/jsx-runtime");
479
+ var LabelRequiredIndicator = ({
480
+ className,
481
+ children = "*",
482
+ ref,
483
+ ...others
484
+ }) => {
485
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
486
+ "span",
487
+ {
488
+ ref,
489
+ "data-spark-component": "label-required-indicator",
490
+ role: "presentation",
491
+ "aria-hidden": "true",
492
+ className: (0, import_class_variance_authority9.cx)(className, "text-caption text-on-surface/dim-1"),
493
+ ...others,
494
+ children
495
+ }
496
+ );
497
+ };
498
+ LabelRequiredIndicator.displayName = "Label.RequiredIndicator";
499
+
500
+ // src/label/index.ts
501
+ var Label2 = Object.assign(Label, {
502
+ RequiredIndicator: LabelRequiredIndicator
503
+ });
504
+ Label2.displayName = "Label";
505
+ LabelRequiredIndicator.displayName = "Label.RequiredIndicator";
506
+
507
+ // src/form-field/FormFieldRequiredIndicator.tsx
508
+ var import_class_variance_authority10 = require("class-variance-authority");
509
+ var import_jsx_runtime16 = require("react/jsx-runtime");
510
+ var FormFieldRequiredIndicator = ({
511
+ className,
512
+ ref,
513
+ ...props
514
+ }) => {
515
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Label2.RequiredIndicator, { ref, className: (0, import_class_variance_authority10.cx)("ml-sm", className), ...props });
516
+ };
517
+ FormFieldRequiredIndicator.displayName = "FormField.RequiredIndicator";
518
+
519
+ // src/form-field/FormFieldLabel.tsx
520
+ var import_jsx_runtime17 = require("react/jsx-runtime");
521
+ var FormFieldLabel = ({
522
+ htmlFor: htmlForProp,
523
+ className,
524
+ children,
525
+ requiredIndicator = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FormFieldRequiredIndicator, {}),
526
+ asChild,
527
+ ref,
528
+ ...others
529
+ }) => {
530
+ const control = useFormField();
531
+ const { disabled, labelId, isRequired } = control;
532
+ const htmlFor = asChild ? void 0 : htmlForProp || control.id;
533
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
534
+ Label2,
535
+ {
536
+ ref,
537
+ id: labelId,
538
+ "data-spark-component": "form-field-label",
539
+ htmlFor,
540
+ className: (0, import_class_variance_authority11.cx)(className, disabled ? "text-on-surface/dim-3 pointer-events-none" : void 0),
541
+ asChild,
542
+ ...others,
543
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
544
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Slottable, { children }),
545
+ isRequired && requiredIndicator
546
+ ] })
547
+ }
548
+ );
549
+ };
550
+ FormFieldLabel.displayName = "FormField.Label";
551
+
552
+ // src/form-field/FormFieldSuccessMessage.tsx
553
+ var import_jsx_runtime18 = require("react/jsx-runtime");
554
+ var FormFieldSuccessMessage = ({ ref, ...props }) => {
555
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
556
+ FormFieldStateMessage,
557
+ {
558
+ ref,
559
+ "data-spark-component": "form-field-success-message",
560
+ state: "success",
561
+ ...props
562
+ }
563
+ );
564
+ };
565
+ FormFieldSuccessMessage.displayName = "FormField.SuccessMessage";
566
+
567
+ // src/form-field/index.ts
568
+ var FormField2 = Object.assign(FormField, {
569
+ Label: FormFieldLabel,
570
+ Control: FormFieldControl,
571
+ StateMessage: FormFieldStateMessage,
572
+ SuccessMessage: FormFieldSuccessMessage,
573
+ AlertMessage: FormFieldAlertMessage,
574
+ ErrorMessage: FormFieldErrorMessage,
575
+ HelperMessage: FormFieldHelperMessage,
576
+ RequiredIndicator: FormFieldRequiredIndicator,
577
+ CharactersCount: FormFieldCharactersCount
578
+ });
579
+ FormField2.displayName = "FormField";
580
+ FormFieldLabel.displayName = "FormField.Label";
581
+ FormFieldControl.displayName = "FormField.Control";
582
+ FormFieldStateMessage.displayName = "FormField.StateMessage";
583
+ FormFieldSuccessMessage.displayName = "FormField.SuccessMessage";
584
+ FormFieldAlertMessage.displayName = "FormField.AlertMessage";
585
+ FormFieldErrorMessage.displayName = "FormField.ErrorMessage";
586
+ FormFieldHelperMessage.displayName = "FormField.HelperMessage";
587
+ FormFieldRequiredIndicator.displayName = "FormField.RequiredIndicator";
588
+ FormFieldCharactersCount.displayName = "FormField.CharactersCount";
589
+
590
+ // src/input/InputGroup.styles.ts
591
+ var import_class_variance_authority12 = require("class-variance-authority");
592
+ var inputGroupStyles = (0, import_class_variance_authority12.cva)(["relative inline-flex w-full"], {
593
+ variants: {
594
+ /**
595
+ * When `true`, prevents the user from interacting.
596
+ */
597
+ disabled: {
598
+ true: [
599
+ "cursor-not-allowed",
600
+ "relative",
601
+ "after:absolute",
602
+ "after:top-0",
603
+ "after:h-full",
604
+ "after:w-full",
605
+ "after:border-sm after:border-outline",
606
+ "after:rounded-lg"
607
+ ],
608
+ false: "after:hidden"
609
+ },
610
+ /**
611
+ * Sets the component as interactive or not.
612
+ */
613
+ readOnly: {
614
+ true: [
615
+ "relative",
616
+ "after:absolute",
617
+ "after:top-0",
618
+ "after:h-full",
619
+ "after:w-full",
620
+ "after:border-sm after:border-outline",
621
+ "after:rounded-lg"
622
+ ],
623
+ false: "after:hidden"
624
+ }
625
+ }
626
+ });
627
+
628
+ // src/input/InputGroup.tsx
629
+ var import_jsx_runtime19 = require("react/jsx-runtime");
630
+ var InputGroup = ({
631
+ className,
632
+ children: childrenProp,
633
+ state: stateProp,
634
+ disabled: disabledProp,
635
+ readOnly: readOnlyProp,
636
+ onClear,
637
+ ref: forwardedRef,
638
+ ...others
639
+ }) => {
640
+ const getElementId = (element) => {
641
+ return element ? element.type.id : "";
642
+ };
643
+ const findElement = (...values) => {
644
+ return children.find((child) => values.includes(getElementId(child) || ""));
645
+ };
646
+ const children = import_react9.Children.toArray(childrenProp).filter(import_react9.isValidElement);
647
+ const input = findElement("Input");
648
+ const props = input?.props || {};
649
+ const inputRef = (0, import_react9.useRef)(null);
650
+ const onClearRef = (0, import_react9.useRef)(onClear);
651
+ const ref = (0, import_use_merge_refs.useMergeRefs)(input?.ref, inputRef);
652
+ const [value, onChange] = (0, import_use_combined_state.useCombinedState)(
653
+ props.value,
654
+ props.defaultValue,
655
+ props.onValueChange
656
+ );
657
+ const field = useFormFieldControl();
658
+ const state = field.state ?? stateProp;
659
+ const disabled = field.disabled || !!disabledProp;
660
+ const readOnly = field.readOnly || !!readOnlyProp;
661
+ const leadingAddon = findElement("LeadingAddon");
662
+ const leadingIcon = findElement("LeadingIcon");
663
+ const clearButton = findElement("ClearButton");
664
+ const trailingIcon = findElement("TrailingIcon");
665
+ const trailingAddon = findElement("TrailingAddon");
666
+ const hasLeadingAddon = !!leadingAddon;
667
+ const hasTrailingAddon = !!trailingAddon;
668
+ const hasLeadingIcon = !!leadingIcon;
669
+ const hasTrailingIcon = !!trailingIcon;
670
+ const hasClearButton = !!value && !!clearButton && !disabled && !readOnly;
671
+ const handleChange = (event) => {
672
+ if (props.onChange) {
673
+ props.onChange(event);
674
+ }
675
+ onChange(event.target.value);
676
+ };
677
+ const handleClear = (0, import_react9.useCallback)(() => {
678
+ if (onClearRef.current) {
679
+ onClearRef.current();
680
+ }
681
+ onChange("");
682
+ inputRef.current.focus();
683
+ }, [onChange]);
684
+ const current = (0, import_react9.useMemo)(() => {
685
+ return {
686
+ state,
687
+ disabled,
688
+ readOnly,
689
+ hasLeadingIcon,
690
+ hasTrailingIcon,
691
+ hasLeadingAddon,
692
+ hasTrailingAddon,
693
+ hasClearButton,
694
+ onClear: handleClear
695
+ };
696
+ }, [
697
+ state,
698
+ disabled,
699
+ readOnly,
700
+ hasLeadingIcon,
701
+ hasTrailingIcon,
702
+ hasLeadingAddon,
703
+ hasTrailingAddon,
704
+ hasClearButton,
705
+ handleClear
706
+ ]);
707
+ (0, import_react9.useEffect)(() => {
708
+ onClearRef.current = onClear;
709
+ }, [onClear]);
710
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(InputGroupContext.Provider, { value: current, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
711
+ "div",
712
+ {
713
+ ref: forwardedRef,
714
+ className: inputGroupStyles({ disabled, readOnly, className }),
715
+ ...others,
716
+ children: [
717
+ hasLeadingAddon && leadingAddon,
718
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "relative inline-flex w-full", children: [
719
+ input && (0, import_react9.cloneElement)(input, {
720
+ ref,
721
+ defaultValue: void 0,
722
+ value: value ?? "",
723
+ onChange: handleChange
724
+ }),
725
+ leadingIcon,
726
+ hasClearButton && clearButton,
727
+ trailingIcon
728
+ ] }),
729
+ hasTrailingAddon && trailingAddon
730
+ ]
731
+ }
732
+ ) });
733
+ };
734
+ InputGroup.displayName = "InputGroup";
735
+
736
+ // src/input/InputLeadingAddon.tsx
737
+ var import_class_variance_authority14 = require("class-variance-authority");
738
+
739
+ // src/input/InputAddon.tsx
740
+ var import_react10 = require("react");
741
+
742
+ // src/input/InputAddon.styles.ts
743
+ var import_class_variance_authority13 = require("class-variance-authority");
744
+ var inputAddonStyles = (0, import_class_variance_authority13.cva)(
745
+ [
746
+ "overflow-hidden",
747
+ "border-sm",
748
+ "shrink-0",
749
+ "h-full",
750
+ "focus-visible:relative focus-visible:z-raised"
751
+ ],
752
+ {
753
+ variants: {
754
+ /**
755
+ * Change the component to the HTML tag or custom component of the only child.
756
+ */
757
+ asChild: { false: ["flex", "items-center", "px-lg"] },
758
+ intent: {
759
+ neutral: "border-outline",
760
+ error: "border-error",
761
+ alert: "border-alert",
762
+ success: "border-success"
763
+ },
764
+ /**
765
+ * Disable the input addon, preventing user interaction and adding opacity.
766
+ */
767
+ disabled: {
768
+ true: ["pointer-events-none border-outline!"]
769
+ },
770
+ /**
771
+ * Changes input addon styles based on the read only status from the input.
772
+ */
773
+ readOnly: {
774
+ true: ["pointer-events-none"]
775
+ },
776
+ /**
777
+ * Main style of the input addon.
778
+ */
779
+ design: {
780
+ text: "",
781
+ solid: "",
782
+ inline: ""
783
+ }
784
+ },
785
+ compoundVariants: [
786
+ {
787
+ disabled: false,
788
+ readOnly: false,
789
+ design: "text",
790
+ class: ["bg-surface", "text-on-surface"]
791
+ },
792
+ {
793
+ disabled: true,
794
+ design: "text",
795
+ class: ["text-on-surface/dim-3"]
796
+ },
797
+ {
798
+ disabled: true,
799
+ design: ["solid", "inline"],
800
+ class: ["opacity-dim-3"]
801
+ }
802
+ ],
803
+ defaultVariants: {
804
+ intent: "neutral"
805
+ }
806
+ }
807
+ );
808
+
809
+ // src/input/InputAddon.tsx
810
+ var import_jsx_runtime20 = require("react/jsx-runtime");
811
+ var InputAddon = ({
812
+ asChild: asChildProp,
813
+ className,
814
+ children,
815
+ ref,
816
+ ...others
817
+ }) => {
818
+ const { state, disabled, readOnly } = useInputGroup();
819
+ const isRawText = typeof children === "string";
820
+ const asChild = !!(isRawText ? false : asChildProp);
821
+ const child = isRawText ? children : import_react10.Children.only(children);
822
+ const Component = asChild && !isRawText ? Slot : "div";
823
+ const getDesign = () => {
824
+ if (isRawText) return "text";
825
+ return asChild ? "solid" : "inline";
826
+ };
827
+ const design = getDesign();
828
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
829
+ Component,
830
+ {
831
+ ref,
832
+ className: inputAddonStyles({
833
+ className,
834
+ intent: state,
835
+ disabled,
836
+ readOnly,
837
+ asChild,
838
+ design
839
+ }),
840
+ ...disabled && { tabIndex: -1 },
841
+ ...others,
842
+ children: child
843
+ }
844
+ );
845
+ };
846
+ InputAddon.displayName = "InputGroup.Addon";
847
+
848
+ // src/input/InputLeadingAddon.tsx
849
+ var import_jsx_runtime21 = require("react/jsx-runtime");
850
+ var Root2 = ({ className, ref, ...others }) => {
851
+ const { disabled, readOnly } = useInputGroup();
852
+ const isInactive = disabled || readOnly;
853
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: (0, import_class_variance_authority14.cx)("rounded-l-lg", isInactive ? "bg-on-surface/dim-5" : null), children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
854
+ InputAddon,
855
+ {
856
+ ref,
857
+ className: (0, import_class_variance_authority14.cx)(className, "rounded-r-0! mr-[-1px] rounded-l-lg"),
858
+ ...others
859
+ }
860
+ ) });
861
+ };
862
+ var InputLeadingAddon = Object.assign(Root2, {
863
+ id: "LeadingAddon"
864
+ });
865
+ Root2.displayName = "InputGroup.LeadingAddon";
866
+
867
+ // src/input/InputLeadingIcon.tsx
868
+ var import_class_variance_authority16 = require("class-variance-authority");
869
+
870
+ // src/input/InputIcon.tsx
871
+ var import_class_variance_authority15 = require("class-variance-authority");
872
+ var import_jsx_runtime22 = require("react/jsx-runtime");
873
+ var InputIcon = ({ className, intent, children, ...others }) => {
874
+ const { disabled, readOnly } = useInputGroup();
875
+ const isInactive = disabled || readOnly;
876
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
877
+ Icon,
878
+ {
879
+ intent,
880
+ className: (0, import_class_variance_authority15.cx)(
881
+ className,
882
+ "pointer-events-none absolute top-[calc(var(--spacing-sz-44)/2)] -translate-y-1/2",
883
+ intent ? void 0 : "text-neutral peer-focus:text-outline-high",
884
+ isInactive ? "opacity-dim-3" : void 0
885
+ ),
886
+ ...others,
887
+ children
888
+ }
889
+ );
890
+ };
891
+ InputIcon.displayName = "InputGroup.Icon";
892
+
893
+ // src/input/InputLeadingIcon.tsx
894
+ var import_jsx_runtime23 = require("react/jsx-runtime");
895
+ var InputLeadingIcon = ({ className, ...others }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(InputIcon, { className: (0, import_class_variance_authority16.cx)(className, "left-lg text-body-1"), ...others });
896
+ InputLeadingIcon.id = "LeadingIcon";
897
+ InputLeadingIcon.displayName = "InputGroup.LeadingIcon";
898
+
899
+ // src/input/InputTrailingAddon.tsx
900
+ var import_class_variance_authority17 = require("class-variance-authority");
901
+ var import_jsx_runtime24 = require("react/jsx-runtime");
902
+ var Root3 = ({ className, ref, ...others }) => {
903
+ const { disabled, readOnly } = useInputGroup();
904
+ const isInactive = disabled || readOnly;
905
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: (0, import_class_variance_authority17.cx)("rounded-r-lg", isInactive ? "bg-on-surface/dim-5" : null), children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
906
+ InputAddon,
907
+ {
908
+ ref,
909
+ className: (0, import_class_variance_authority17.cx)(className, "rounded-l-0! ml-[-1px] rounded-r-lg"),
910
+ ...others
911
+ }
912
+ ) });
913
+ };
914
+ var InputTrailingAddon = Object.assign(Root3, {
915
+ id: "TrailingAddon"
916
+ });
917
+ Root3.displayName = "InputGroup.TrailingAddon";
918
+
919
+ // src/input/InputTrailingIcon.tsx
920
+ var import_class_variance_authority18 = require("class-variance-authority");
921
+ var import_jsx_runtime25 = require("react/jsx-runtime");
922
+ var InputTrailingIcon = ({ className, ...others }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(InputIcon, { className: (0, import_class_variance_authority18.cx)(className, "right-lg text-body-1"), ...others });
923
+ InputTrailingIcon.id = "TrailingIcon";
924
+ InputTrailingIcon.displayName = "InputGroup.TrailingIcon";
925
+
926
+ // src/input/Input.styles.ts
927
+ var import_class_variance_authority19 = require("class-variance-authority");
928
+ var inputStyles = (0, import_class_variance_authority19.cva)(
929
+ [
930
+ "relative",
931
+ "border-sm",
932
+ "peer",
933
+ "w-full",
934
+ "appearance-none outline-hidden",
935
+ "bg-surface",
936
+ "text-ellipsis text-body-1 text-on-surface",
937
+ "caret-neutral",
938
+ "autofill:shadow-surface autofill:shadow-[inset_0_0_0px_1000px]",
939
+ "disabled:cursor-not-allowed disabled:border-outline disabled:bg-on-surface/dim-5 disabled:text-on-surface/dim-3",
940
+ "read-only:cursor-default read-only:pointer-events-none read-only:bg-on-surface/dim-5",
941
+ "focus:ring-1 focus:ring-inset"
942
+ ],
943
+ {
944
+ variants: {
945
+ /**
946
+ * Change the component to the HTML tag or custom component of the only child.
947
+ */
948
+ asChild: {
949
+ true: ["min-h-sz-44"],
950
+ false: ["h-sz-44"]
951
+ },
952
+ /**
953
+ * Color scheme of the button.
954
+ */
955
+ intent: {
956
+ neutral: [
957
+ "border-outline",
958
+ "hover:border-outline-high",
959
+ "focus:ring-outline-high focus:border-outline-high"
960
+ ],
961
+ success: ["border-success", "focus:ring-success"],
962
+ alert: ["border-alert", "focus:ring-alert"],
963
+ error: ["border-error", "focus:ring-error"]
964
+ },
965
+ /**
966
+ * Sets if there is an addon before the input text.
967
+ */
968
+ hasLeadingAddon: {
969
+ true: ["rounded-l-0"],
970
+ false: ["rounded-l-lg"]
971
+ },
972
+ /**
973
+ * Sets if there is an addon after the input text.
974
+ */
975
+ hasTrailingAddon: {
976
+ true: ["rounded-r-0"],
977
+ false: ["rounded-r-lg"]
978
+ },
979
+ /**
980
+ * Sets if there is an icon before the input text.
981
+ */
982
+ hasLeadingIcon: {
983
+ true: ["pl-3xl"],
984
+ false: ["pl-lg"]
985
+ },
986
+ /**
987
+ * Sets if there is an icon after the input text.
988
+ */
989
+ hasTrailingIcon: { true: "" },
990
+ /**
991
+ * Sets if there is a button to clear the input text.
992
+ */
993
+ hasClearButton: { true: "" }
994
+ },
995
+ compoundVariants: [
996
+ {
997
+ hasTrailingIcon: false,
998
+ hasClearButton: false,
999
+ class: "pr-lg"
1000
+ },
1001
+ {
1002
+ hasTrailingIcon: true,
1003
+ hasClearButton: false,
1004
+ class: "pr-3xl"
1005
+ },
1006
+ {
1007
+ hasTrailingIcon: false,
1008
+ hasClearButton: true,
1009
+ class: "pr-3xl"
1010
+ },
1011
+ {
1012
+ hasTrailingIcon: true,
1013
+ hasClearButton: true,
1014
+ class: "pr-[calc(var(--spacing-3xl)*2)]"
1015
+ }
1016
+ ],
1017
+ defaultVariants: {
1018
+ intent: "neutral"
1019
+ }
1020
+ }
1021
+ );
1022
+
1023
+ // src/input/Input.tsx
1024
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1025
+ var Root4 = ({
1026
+ className,
1027
+ asChild = false,
1028
+ onValueChange,
1029
+ onChange,
1030
+ onKeyDown,
1031
+ disabled: disabledProp,
1032
+ readOnly: readOnlyProp,
1033
+ ref,
1034
+ ...others
1035
+ }) => {
1036
+ const field = useFormFieldControl();
1037
+ const group = useInputGroup();
1038
+ const { id, name, isInvalid, isRequired, description } = field;
1039
+ const {
1040
+ hasLeadingAddon,
1041
+ hasTrailingAddon,
1042
+ hasLeadingIcon,
1043
+ hasTrailingIcon,
1044
+ hasClearButton,
1045
+ onClear
1046
+ } = group;
1047
+ const Component = asChild ? Slot : "input";
1048
+ const state = field.state || group.state;
1049
+ const disabled = field.disabled || group.disabled || disabledProp;
1050
+ const readOnly = field.readOnly || group.readOnly || readOnlyProp;
1051
+ const handleChange = (event) => {
1052
+ if (onChange) {
1053
+ onChange(event);
1054
+ }
1055
+ if (onValueChange) {
1056
+ onValueChange(event.target.value);
1057
+ }
1058
+ };
1059
+ const handleKeyDown = (event) => {
1060
+ if (onKeyDown) {
1061
+ onKeyDown(event);
1062
+ }
1063
+ if (hasClearButton && onClear && event.key === "Escape") {
1064
+ onClear();
1065
+ }
1066
+ };
1067
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1068
+ Component,
1069
+ {
1070
+ ref,
1071
+ id,
1072
+ name,
1073
+ className: inputStyles({
1074
+ asChild,
1075
+ className,
1076
+ intent: state,
1077
+ hasLeadingAddon: !!hasLeadingAddon,
1078
+ hasTrailingAddon: !!hasTrailingAddon,
1079
+ hasLeadingIcon: !!hasLeadingIcon,
1080
+ hasTrailingIcon: !!hasTrailingIcon,
1081
+ hasClearButton: !!hasClearButton
1082
+ }),
1083
+ disabled,
1084
+ readOnly,
1085
+ required: isRequired,
1086
+ "aria-describedby": description,
1087
+ "aria-invalid": isInvalid,
1088
+ onChange: handleChange,
1089
+ onKeyDown: handleKeyDown,
1090
+ ...others
1091
+ }
1092
+ );
1093
+ };
1094
+ var Input = Object.assign(Root4, {
1095
+ id: "Input"
1096
+ });
1097
+ Root4.displayName = "Input";
1098
+
1099
+ // src/input/index.ts
1100
+ var InputGroup2 = Object.assign(InputGroup, {
1101
+ LeadingAddon: InputLeadingAddon,
1102
+ TrailingAddon: InputTrailingAddon,
1103
+ LeadingIcon: InputLeadingIcon,
1104
+ TrailingIcon: InputTrailingIcon,
1105
+ ClearButton: InputClearButton
1106
+ });
1107
+ InputGroup2.displayName = "InputGroup";
1108
+ InputLeadingAddon.displayName = "InputGroup.LeadingAddon";
1109
+ InputTrailingAddon.displayName = "InputGroup.TrailingAddon";
1110
+ InputLeadingIcon.displayName = "InputGroup.LeadingIcon";
1111
+ InputTrailingIcon.displayName = "InputGroup.TrailingIcon";
1112
+ InputClearButton.displayName = "InputGroup.ClearButton";
1113
+ // Annotate the CommonJS export names for ESM import in node:
1114
+ 0 && (module.exports = {
1115
+ Input,
1116
+ InputGroup,
1117
+ useInputGroup
1118
+ });
1119
+ //# sourceMappingURL=index.js.map