@skybin-tech/nebula-ui 0.0.26 → 0.0.28

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 (293) hide show
  1. package/README.md +6 -4
  2. package/dist/cjs/_virtual/_rolldown/runtime.cjs +24 -0
  3. package/dist/cjs/components/Accordion/Accordion.cjs +20 -10
  4. package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -1
  5. package/dist/cjs/components/Alert/Alert.cjs +19 -9
  6. package/dist/cjs/components/Alert/Alert.cjs.map +1 -1
  7. package/dist/cjs/components/Avatar/Avatar.cjs +19 -9
  8. package/dist/cjs/components/Avatar/Avatar.cjs.map +1 -1
  9. package/dist/cjs/components/Badge/Badge.cjs +8 -7
  10. package/dist/cjs/components/Badge/Badge.cjs.map +1 -1
  11. package/dist/cjs/components/Button/Button.cjs +37 -47
  12. package/dist/cjs/components/Button/Button.cjs.map +1 -1
  13. package/dist/cjs/components/Card/Card.cjs +31 -12
  14. package/dist/cjs/components/Card/Card.cjs.map +1 -1
  15. package/dist/cjs/components/Checkbox/Checkbox.cjs +12 -7
  16. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
  17. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +55 -21
  18. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
  19. package/dist/cjs/components/Form/Checkbox.cjs +128 -142
  20. package/dist/cjs/components/Form/Checkbox.cjs.map +1 -1
  21. package/dist/cjs/components/Form/Form.cjs +106 -105
  22. package/dist/cjs/components/Form/Form.cjs.map +1 -1
  23. package/dist/cjs/components/Form/FormSwitch.cjs +126 -0
  24. package/dist/cjs/components/Form/FormSwitch.cjs.map +1 -0
  25. package/dist/cjs/components/Form/Radio.cjs +157 -172
  26. package/dist/cjs/components/Form/Radio.cjs.map +1 -1
  27. package/dist/cjs/components/Form/Select.cjs +131 -0
  28. package/dist/cjs/components/Form/Select.cjs.map +1 -0
  29. package/dist/cjs/components/Form/TextArea.cjs +137 -152
  30. package/dist/cjs/components/Form/TextArea.cjs.map +1 -1
  31. package/dist/cjs/components/Form/TextBox.cjs +184 -206
  32. package/dist/cjs/components/Form/TextBox.cjs.map +1 -1
  33. package/dist/cjs/components/Form/context.cjs +109 -122
  34. package/dist/cjs/components/Form/context.cjs.map +1 -1
  35. package/dist/cjs/components/Form/hooks.cjs +34 -24
  36. package/dist/cjs/components/Form/hooks.cjs.map +1 -1
  37. package/dist/cjs/components/Form/index.cjs +29 -0
  38. package/dist/cjs/components/Form/variants.cjs +14 -14
  39. package/dist/cjs/components/Form/variants.cjs.map +1 -1
  40. package/dist/cjs/components/Input/Input.cjs +11 -7
  41. package/dist/cjs/components/Input/Input.cjs.map +1 -1
  42. package/dist/cjs/components/Label/Label.cjs +11 -7
  43. package/dist/cjs/components/Label/Label.cjs.map +1 -1
  44. package/dist/cjs/components/Pagination/Pagination.cjs +58 -95
  45. package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -1
  46. package/dist/cjs/components/Separator/Separator.cjs +11 -7
  47. package/dist/cjs/components/Separator/Separator.cjs.map +1 -1
  48. package/dist/cjs/components/Skeleton/Skeleton.cjs +7 -6
  49. package/dist/cjs/components/Skeleton/Skeleton.cjs.map +1 -1
  50. package/dist/cjs/components/Switch/Switch.cjs +14 -0
  51. package/dist/cjs/components/Switch/Switch.cjs.map +1 -0
  52. package/dist/cjs/components/Tabs/Tabs.cjs +23 -10
  53. package/dist/cjs/components/Tabs/Tabs.cjs.map +1 -1
  54. package/dist/cjs/components/Textarea/Textarea.cjs +11 -7
  55. package/dist/cjs/components/Textarea/Textarea.cjs.map +1 -1
  56. package/dist/cjs/components/Tooltip/Tooltip.cjs +14 -10
  57. package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
  58. package/dist/cjs/hooks/useDebounce.cjs +22 -14
  59. package/dist/cjs/hooks/useDebounce.cjs.map +1 -1
  60. package/dist/cjs/hooks/useToast.cjs +105 -84
  61. package/dist/cjs/hooks/useToast.cjs.map +1 -1
  62. package/dist/cjs/hooks/useToggle.cjs +15 -9
  63. package/dist/cjs/hooks/useToggle.cjs.map +1 -1
  64. package/dist/cjs/index.cjs +172 -170
  65. package/dist/cjs/primitives/accordion.cjs +38 -61
  66. package/dist/cjs/primitives/accordion.cjs.map +1 -1
  67. package/dist/cjs/primitives/alert.cjs +33 -63
  68. package/dist/cjs/primitives/alert.cjs.map +1 -1
  69. package/dist/cjs/primitives/avatar.cjs +29 -58
  70. package/dist/cjs/primitives/avatar.cjs.map +1 -1
  71. package/dist/cjs/primitives/badge.cjs +26 -27
  72. package/dist/cjs/primitives/badge.cjs.map +1 -1
  73. package/dist/cjs/primitives/button.cjs +44 -63
  74. package/dist/cjs/primitives/button.cjs.map +1 -1
  75. package/dist/cjs/primitives/calendar.cjs +41 -44
  76. package/dist/cjs/primitives/calendar.cjs.map +1 -1
  77. package/dist/cjs/primitives/card.cjs +39 -70
  78. package/dist/cjs/primitives/card.cjs.map +1 -1
  79. package/dist/cjs/primitives/checkbox.cjs +22 -45
  80. package/dist/cjs/primitives/checkbox.cjs.map +1 -1
  81. package/dist/cjs/primitives/command.cjs +65 -73
  82. package/dist/cjs/primitives/command.cjs.map +1 -1
  83. package/dist/cjs/primitives/dialog.cjs +55 -84
  84. package/dist/cjs/primitives/dialog.cjs.map +1 -1
  85. package/dist/cjs/primitives/dropdown-menu.cjs +82 -153
  86. package/dist/cjs/primitives/dropdown-menu.cjs.map +1 -1
  87. package/dist/cjs/primitives/input.cjs +17 -39
  88. package/dist/cjs/primitives/input.cjs.map +1 -1
  89. package/dist/cjs/primitives/label.cjs +19 -38
  90. package/dist/cjs/primitives/label.cjs.map +1 -1
  91. package/dist/cjs/primitives/popover.cjs +22 -42
  92. package/dist/cjs/primitives/popover.cjs.map +1 -1
  93. package/dist/cjs/primitives/radio-group.cjs +31 -50
  94. package/dist/cjs/primitives/radio-group.cjs.map +1 -1
  95. package/dist/cjs/primitives/scroll-area.cjs +33 -55
  96. package/dist/cjs/primitives/scroll-area.cjs.map +1 -1
  97. package/dist/cjs/primitives/select.cjs +76 -133
  98. package/dist/cjs/primitives/select.cjs.map +1 -1
  99. package/dist/cjs/primitives/separator.cjs +20 -42
  100. package/dist/cjs/primitives/separator.cjs.map +1 -1
  101. package/dist/cjs/primitives/skeleton.cjs +10 -12
  102. package/dist/cjs/primitives/skeleton.cjs.map +1 -1
  103. package/dist/cjs/primitives/sonner.cjs +16 -20
  104. package/dist/cjs/primitives/sonner.cjs.map +1 -1
  105. package/dist/cjs/primitives/switch.cjs +19 -45
  106. package/dist/cjs/primitives/switch.cjs.map +1 -1
  107. package/dist/cjs/primitives/table.cjs +52 -61
  108. package/dist/cjs/primitives/table.cjs.map +1 -1
  109. package/dist/cjs/primitives/tabs.cjs +30 -62
  110. package/dist/cjs/primitives/tabs.cjs.map +1 -1
  111. package/dist/cjs/primitives/textarea.cjs +15 -35
  112. package/dist/cjs/primitives/textarea.cjs.map +1 -1
  113. package/dist/cjs/primitives/textbox.cjs +17 -39
  114. package/dist/cjs/primitives/textbox.cjs.map +1 -1
  115. package/dist/cjs/primitives/toast.cjs +59 -107
  116. package/dist/cjs/primitives/toast.cjs.map +1 -1
  117. package/dist/cjs/primitives/toggle.cjs +39 -55
  118. package/dist/cjs/primitives/toggle.cjs.map +1 -1
  119. package/dist/cjs/primitives/tooltip.cjs +21 -41
  120. package/dist/cjs/primitives/tooltip.cjs.map +1 -1
  121. package/dist/cjs/utils/cn.cjs +11 -6
  122. package/dist/cjs/utils/cn.cjs.map +1 -1
  123. package/dist/components/Accordion/Accordion.js +20 -13
  124. package/dist/components/Accordion/Accordion.js.map +1 -1
  125. package/dist/components/Alert/Alert.js +19 -11
  126. package/dist/components/Alert/Alert.js.map +1 -1
  127. package/dist/components/Avatar/Avatar.js +19 -11
  128. package/dist/components/Avatar/Avatar.js.map +1 -1
  129. package/dist/components/Badge/Badge.d.ts +1 -1
  130. package/dist/components/Badge/Badge.d.ts.map +1 -1
  131. package/dist/components/Badge/Badge.js +8 -8
  132. package/dist/components/Badge/Badge.js.map +1 -1
  133. package/dist/components/Button/Button.js +37 -48
  134. package/dist/components/Button/Button.js.map +1 -1
  135. package/dist/components/Card/Card.js +31 -17
  136. package/dist/components/Card/Card.js.map +1 -1
  137. package/dist/components/Checkbox/Checkbox.js +12 -7
  138. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  139. package/dist/components/DropdownMenu/DropdownMenu.d.ts +4 -4
  140. package/dist/components/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  141. package/dist/components/DropdownMenu/DropdownMenu.js +55 -35
  142. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -1
  143. package/dist/components/Form/Checkbox.js +126 -140
  144. package/dist/components/Form/Checkbox.js.map +1 -1
  145. package/dist/components/Form/Form.d.ts +1 -1
  146. package/dist/components/Form/Form.d.ts.map +1 -1
  147. package/dist/components/Form/Form.js +104 -103
  148. package/dist/components/Form/Form.js.map +1 -1
  149. package/dist/components/Form/{Switch.d.ts → FormSwitch.d.ts} +3 -3
  150. package/dist/components/Form/FormSwitch.d.ts.map +1 -0
  151. package/dist/components/Form/FormSwitch.js +126 -0
  152. package/dist/components/Form/FormSwitch.js.map +1 -0
  153. package/dist/components/Form/Radio.d.ts +1 -1
  154. package/dist/components/Form/Radio.d.ts.map +1 -1
  155. package/dist/components/Form/Radio.js +155 -171
  156. package/dist/components/Form/Radio.js.map +1 -1
  157. package/dist/components/Form/Select.d.ts +1 -1
  158. package/dist/components/Form/Select.d.ts.map +1 -1
  159. package/dist/components/Form/Select.js +131 -0
  160. package/dist/components/Form/Select.js.map +1 -0
  161. package/dist/components/Form/TextArea.js +134 -149
  162. package/dist/components/Form/TextArea.js.map +1 -1
  163. package/dist/components/Form/TextBox.js +179 -201
  164. package/dist/components/Form/TextBox.js.map +1 -1
  165. package/dist/components/Form/context.d.ts +3 -5
  166. package/dist/components/Form/context.d.ts.map +1 -1
  167. package/dist/components/Form/context.js +109 -125
  168. package/dist/components/Form/context.js.map +1 -1
  169. package/dist/components/Form/hooks.js +35 -28
  170. package/dist/components/Form/hooks.js.map +1 -1
  171. package/dist/components/Form/index.d.ts +4 -4
  172. package/dist/components/Form/index.d.ts.map +1 -1
  173. package/dist/components/Form/index.js +11 -0
  174. package/dist/components/Form/variants.js +15 -14
  175. package/dist/components/Form/variants.js.map +1 -1
  176. package/dist/components/Input/Input.js +11 -7
  177. package/dist/components/Input/Input.js.map +1 -1
  178. package/dist/components/Label/Label.js +11 -7
  179. package/dist/components/Label/Label.js.map +1 -1
  180. package/dist/components/Pagination/Pagination.d.ts +5 -5
  181. package/dist/components/Pagination/Pagination.js +55 -83
  182. package/dist/components/Pagination/Pagination.js.map +1 -1
  183. package/dist/components/Separator/Separator.js +11 -7
  184. package/dist/components/Separator/Separator.js.map +1 -1
  185. package/dist/components/Skeleton/Skeleton.d.ts +1 -1
  186. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
  187. package/dist/components/Skeleton/Skeleton.js +7 -6
  188. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  189. package/dist/components/Switch/Switch.d.ts +4 -1
  190. package/dist/components/Switch/Switch.d.ts.map +1 -1
  191. package/dist/components/Switch/Switch.js +14 -0
  192. package/dist/components/Switch/Switch.js.map +1 -0
  193. package/dist/components/Switch/index.d.ts +1 -0
  194. package/dist/components/Switch/index.d.ts.map +1 -1
  195. package/dist/components/Tabs/Tabs.js +23 -13
  196. package/dist/components/Tabs/Tabs.js.map +1 -1
  197. package/dist/components/Textarea/Textarea.js +11 -7
  198. package/dist/components/Textarea/Textarea.js.map +1 -1
  199. package/dist/components/Tooltip/Tooltip.js +14 -13
  200. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  201. package/dist/hooks/useDebounce.js +23 -15
  202. package/dist/hooks/useDebounce.js.map +1 -1
  203. package/dist/hooks/useToast.js +103 -69
  204. package/dist/hooks/useToast.js.map +1 -1
  205. package/dist/hooks/useToggle.js +16 -10
  206. package/dist/hooks/useToggle.js.map +1 -1
  207. package/dist/index.d.ts +6 -2
  208. package/dist/index.d.ts.map +1 -1
  209. package/dist/index.js +30 -160
  210. package/dist/primitives/accordion.js +32 -43
  211. package/dist/primitives/accordion.js.map +1 -1
  212. package/dist/primitives/alert.js +30 -47
  213. package/dist/primitives/alert.js.map +1 -1
  214. package/dist/primitives/avatar.js +22 -38
  215. package/dist/primitives/avatar.js.map +1 -1
  216. package/dist/primitives/badge.d.ts +1 -1
  217. package/dist/primitives/badge.d.ts.map +1 -1
  218. package/dist/primitives/badge.js +23 -27
  219. package/dist/primitives/badge.js.map +1 -1
  220. package/dist/primitives/button.js +41 -46
  221. package/dist/primitives/button.js.map +1 -1
  222. package/dist/primitives/calendar.d.ts +1 -1
  223. package/dist/primitives/calendar.d.ts.map +1 -1
  224. package/dist/primitives/calendar.js +37 -42
  225. package/dist/primitives/calendar.js.map +1 -1
  226. package/dist/primitives/card.js +37 -58
  227. package/dist/primitives/card.js.map +1 -1
  228. package/dist/primitives/checkbox.js +17 -25
  229. package/dist/primitives/checkbox.js.map +1 -1
  230. package/dist/primitives/command.d.ts +2 -2
  231. package/dist/primitives/command.d.ts.map +1 -1
  232. package/dist/primitives/command.js +70 -71
  233. package/dist/primitives/command.js.map +1 -1
  234. package/dist/primitives/dialog.d.ts +2 -2
  235. package/dist/primitives/dialog.js +47 -70
  236. package/dist/primitives/dialog.js.map +1 -1
  237. package/dist/primitives/dropdown-menu.d.ts +1 -1
  238. package/dist/primitives/dropdown-menu.js +70 -140
  239. package/dist/primitives/dropdown-menu.js.map +1 -1
  240. package/dist/primitives/input.js +15 -22
  241. package/dist/primitives/input.js.map +1 -1
  242. package/dist/primitives/label.js +14 -18
  243. package/dist/primitives/label.js.map +1 -1
  244. package/dist/primitives/popover.js +17 -25
  245. package/dist/primitives/popover.js.map +1 -1
  246. package/dist/primitives/radio-group.js +25 -30
  247. package/dist/primitives/radio-group.js.map +1 -1
  248. package/dist/primitives/scroll-area.js +27 -35
  249. package/dist/primitives/scroll-area.js.map +1 -1
  250. package/dist/primitives/select.js +65 -116
  251. package/dist/primitives/select.js.map +1 -1
  252. package/dist/primitives/separator.js +15 -22
  253. package/dist/primitives/separator.js.map +1 -1
  254. package/dist/primitives/skeleton.d.ts +1 -1
  255. package/dist/primitives/skeleton.d.ts.map +1 -1
  256. package/dist/primitives/skeleton.js +10 -12
  257. package/dist/primitives/skeleton.js.map +1 -1
  258. package/dist/primitives/sonner.d.ts +1 -1
  259. package/dist/primitives/sonner.d.ts.map +1 -1
  260. package/dist/primitives/sonner.js +17 -21
  261. package/dist/primitives/sonner.js.map +1 -1
  262. package/dist/primitives/switch.js +14 -25
  263. package/dist/primitives/switch.js.map +1 -1
  264. package/dist/primitives/table.js +50 -51
  265. package/dist/primitives/table.js.map +1 -1
  266. package/dist/primitives/tabs.js +23 -43
  267. package/dist/primitives/tabs.js.map +1 -1
  268. package/dist/primitives/textarea.js +13 -18
  269. package/dist/primitives/textarea.js.map +1 -1
  270. package/dist/primitives/textbox.js +15 -22
  271. package/dist/primitives/textbox.js.map +1 -1
  272. package/dist/primitives/toast.js +48 -87
  273. package/dist/primitives/toast.js.map +1 -1
  274. package/dist/primitives/toggle.js +34 -36
  275. package/dist/primitives/toggle.js.map +1 -1
  276. package/dist/primitives/tooltip.js +16 -24
  277. package/dist/primitives/tooltip.js.map +1 -1
  278. package/dist/stories/Button.d.ts +1 -1
  279. package/dist/stories/Button.d.ts.map +1 -1
  280. package/dist/stories/Button.stories.d.ts +1 -1
  281. package/dist/stories/Header.d.ts +1 -1
  282. package/dist/stories/Header.d.ts.map +1 -1
  283. package/dist/stories/Header.stories.d.ts +1 -1
  284. package/dist/utils/cn.js +10 -5
  285. package/dist/utils/cn.js.map +1 -1
  286. package/package.json +503 -497
  287. package/dist/cjs/components/Form/Switch.cjs +0 -126
  288. package/dist/cjs/components/Form/Switch.cjs.map +0 -1
  289. package/dist/cjs/index.cjs.map +0 -1
  290. package/dist/components/Form/Switch.d.ts.map +0 -1
  291. package/dist/components/Form/Switch.js +0 -126
  292. package/dist/components/Form/Switch.js.map +0 -1
  293. package/dist/index.js.map +0 -1
@@ -0,0 +1,131 @@
1
+ "use client";
2
+ "use client";
3
+ const require_cn = require("../../utils/cn.cjs");
4
+ const require_context = require("./context.cjs");
5
+ const require_variants = require("./variants.cjs");
6
+ const require_label = require("../../primitives/label.cjs");
7
+ const require_select = require("../../primitives/select.cjs");
8
+ let react = require("react");
9
+ let class_variance_authority = require("class-variance-authority");
10
+ let react_jsx_runtime = require("react/jsx-runtime");
11
+ let react_hook_form = require("react-hook-form");
12
+ //#region src/components/Form/Select.tsx
13
+ var selectSizeVariants = (0, class_variance_authority.cva)("", {
14
+ variants: { size: {
15
+ sm: "h-8 text-xs",
16
+ md: "h-10 text-sm",
17
+ lg: "h-12 text-base"
18
+ } },
19
+ defaultVariants: { size: "md" }
20
+ });
21
+ /**
22
+ * Select component with form integration
23
+ *
24
+ * This is a wrapper around the shadcn/ui Select primitive that adds:
25
+ * - Form integration with react-hook-form
26
+ * - Automatic validation registration
27
+ * - Label, helper text, and error message support
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * // Inside a Form component
32
+ * <Select
33
+ * name="country"
34
+ * label="Country"
35
+ * required
36
+ * options={[
37
+ * { label: "USA", value: "us" },
38
+ * { label: "Canada", value: "ca" },
39
+ * ]}
40
+ * />
41
+ * ```
42
+ */
43
+ function Select({ name, label, helperText, showError = true, error: customError, size, variant, fullWidth = true, className, disabled, options = [], placeholder, allowClear, id: providedId, control: externalControl, children, required, validate }) {
44
+ const generatedId = (0, react.useId)();
45
+ const inputId = providedId ?? generatedId;
46
+ const formConfigContext = (0, react.useContext)(require_context.FormConfigContext);
47
+ const formConfig = formConfigContext ?? {};
48
+ const rhfContext = (0, react_hook_form.useFormContext)();
49
+ const control = externalControl ?? rhfContext?.control;
50
+ (0, react.useEffect)(() => {
51
+ if (formConfigContext?.registerFieldValidation) {
52
+ const rules = {};
53
+ if (required !== void 0) rules.required = required;
54
+ if (validate !== void 0) rules.validate = validate;
55
+ formConfigContext.registerFieldValidation({
56
+ name,
57
+ type: "string",
58
+ rules
59
+ });
60
+ return () => {
61
+ formConfigContext.unregisterFieldValidation(name);
62
+ };
63
+ }
64
+ }, [
65
+ formConfigContext,
66
+ name,
67
+ required,
68
+ validate
69
+ ]);
70
+ const { field, fieldState } = (0, react_hook_form.useController)({
71
+ name,
72
+ control
73
+ });
74
+ const fieldError = fieldState.error?.message;
75
+ const errorMessage = customError ?? fieldError;
76
+ const hasError = !!errorMessage;
77
+ const effectiveSize = size ?? formConfig.size ?? "md";
78
+ const effectiveDisabled = disabled ?? formConfig.disabled;
79
+ const effectiveVariant = hasError ? "error" : variant;
80
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
81
+ className: require_cn.cn("space-y-1.5", fullWidth && "w-full"),
82
+ children: [
83
+ label && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_label.Label, {
84
+ htmlFor: inputId,
85
+ className: require_variants.labelVariants({ required: !!required }),
86
+ children: [label, formConfig.colon && ":"]
87
+ }),
88
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_select.Select, {
89
+ value: field.value?.toString() ?? "",
90
+ onValueChange: (value) => {
91
+ if (value === "" && allowClear) field.onChange("");
92
+ else field.onChange(value);
93
+ },
94
+ disabled: effectiveDisabled,
95
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_select.SelectTrigger, {
96
+ id: inputId,
97
+ "aria-invalid": hasError,
98
+ "aria-describedby": hasError ? `${inputId}-error` : helperText ? `${inputId}-helper` : void 0,
99
+ className: require_cn.cn(selectSizeVariants({ size: effectiveSize }), effectiveVariant === "error" && "border-destructive focus:ring-destructive", effectiveVariant === "success" && "border-green-500 focus:ring-green-500", className),
100
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_select.SelectValue, { placeholder })
101
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_select.SelectContent, { children: [allowClear && field.value && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_select.SelectItem, {
102
+ value: "",
103
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
104
+ className: "text-muted-foreground",
105
+ children: "Clear selection"
106
+ })
107
+ }), children ?? options.map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_select.SelectItem, {
108
+ value: option.value.toString(),
109
+ disabled: option.disabled,
110
+ children: option.label
111
+ }, option.value))] })]
112
+ }),
113
+ showError && hasError && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
114
+ id: `${inputId}-error`,
115
+ className: "text-sm text-destructive",
116
+ role: "alert",
117
+ children: errorMessage
118
+ }),
119
+ helperText && !hasError && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
120
+ id: `${inputId}-helper`,
121
+ className: "text-sm text-muted-foreground",
122
+ children: helperText
123
+ })
124
+ ]
125
+ });
126
+ }
127
+ Select.displayName = "Select";
128
+ //#endregion
129
+ exports.Select = Select;
130
+
131
+ //# sourceMappingURL=Select.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.cjs","names":[],"sources":["../../../../src/components/Form/Select.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useContext, useEffect } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { useController, useFormContext as useRHFFormContext, type FieldValues, type FieldPath, type Control } from \"react-hook-form\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\nimport { labelVariants } from \"./variants\";\nimport { FormConfigContext, type FormConfig, type FieldValidationRules } from \"../Form/context\";\nimport {\n Select as ShadcnSelect,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../primitives/select\";\nimport { Label } from \"../../primitives/label\";\n\nconst selectSizeVariants = cva(\n \"\",\n {\n variants: {\n size: {\n sm: \"h-8 text-xs\",\n md: \"h-10 text-sm\",\n lg: \"h-12 text-base\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n);\n\nexport interface SelectOption {\n label: string;\n value: string | number;\n disabled?: boolean;\n}\n\nexport interface SelectProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> extends VariantProps<typeof selectSizeVariants> {\n /** Field name - required for form integration */\n name: TName;\n /** Label text for the select */\n label?: string;\n /** Helper text displayed below the select */\n helperText?: string;\n /** Whether to show the error message */\n showError?: boolean;\n /** Custom error message (overrides form error) */\n error?: string;\n /** Whether the select should take full width */\n fullWidth?: boolean;\n /** Options for the select */\n options?: SelectOption[];\n /** Placeholder text */\n placeholder?: string;\n /** Allow clear selection */\n allowClear?: boolean;\n /** External control (for use outside Form) */\n control?: Control<TFieldValues>;\n /** Children (alternative to options prop) */\n children?: ReactNode;\n /** Disabled state */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n /** ID for the select */\n id?: string;\n /** Variant style */\n variant?: \"default\" | \"error\" | \"success\";\n \n // Validation props\n /** Field is required */\n required?: boolean | string;\n /** Custom validation function */\n validate?: (value: unknown) => boolean | string | Promise<boolean | string>;\n}\n\n/**\n * Select component with form integration\n * \n * This is a wrapper around the shadcn/ui Select primitive that adds:\n * - Form integration with react-hook-form\n * - Automatic validation registration\n * - Label, helper text, and error message support\n * \n * @example\n * ```tsx\n * // Inside a Form component\n * <Select \n * name=\"country\" \n * label=\"Country\" \n * required\n * options={[\n * { label: \"USA\", value: \"us\" },\n * { label: \"Canada\", value: \"ca\" },\n * ]} \n * />\n * ```\n */\nexport function Select<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n name,\n label,\n helperText,\n showError = true,\n error: customError,\n size,\n variant,\n fullWidth = true,\n className,\n disabled,\n options = [],\n placeholder,\n allowClear,\n id: providedId,\n control: externalControl,\n children,\n // Validation props\n required,\n validate,\n}: SelectProps<TFieldValues, TName>) {\n const generatedId = useId();\n const inputId = providedId ?? generatedId;\n \n // Try to get form context\n const formConfigContext = useContext(FormConfigContext);\n const formConfig: FormConfig = formConfigContext ?? {};\n \n // Get form context from react-hook-form\n const rhfContext = useRHFFormContext<TFieldValues>();\n const control = externalControl ?? rhfContext?.control;\n\n // Register validation rules with the form\n useEffect(() => {\n if (formConfigContext?.registerFieldValidation) {\n const rules: FieldValidationRules = {};\n \n if (required !== undefined) rules.required = required;\n if (validate !== undefined) rules.validate = validate;\n\n formConfigContext.registerFieldValidation({\n name: name as string,\n type: \"string\",\n rules,\n });\n\n return () => {\n formConfigContext.unregisterFieldValidation(name as string);\n };\n }\n }, [formConfigContext, name, required, validate]);\n\n // Use controller for form integration\n const { field, fieldState } = useController<TFieldValues, TName>({\n name,\n control,\n });\n\n const fieldError = fieldState.error?.message;\n const errorMessage = customError ?? fieldError;\n const hasError = !!errorMessage;\n \n // Merge sizes - prop takes precedence over form config\n const effectiveSize = size ?? formConfig.size ?? \"md\";\n const effectiveDisabled = disabled ?? formConfig.disabled;\n \n // Determine variant based on error state\n const effectiveVariant = hasError ? \"error\" : variant;\n\n return (\n <div className={cn(\"space-y-1.5\", fullWidth && \"w-full\")}>\n {label && (\n <Label\n htmlFor={inputId}\n className={labelVariants({ required: !!required })}\n >\n {label}\n {formConfig.colon && \":\"}\n </Label>\n )}\n \n <ShadcnSelect\n value={field.value?.toString() ?? \"\"}\n onValueChange={(value) => {\n // Handle clear selection\n if (value === \"\" && allowClear) {\n field.onChange(\"\");\n } else {\n field.onChange(value);\n }\n }}\n disabled={effectiveDisabled}\n >\n <SelectTrigger\n id={inputId}\n aria-invalid={hasError}\n aria-describedby={\n hasError\n ? `${inputId}-error`\n : helperText\n ? `${inputId}-helper`\n : undefined\n }\n className={cn(\n selectSizeVariants({ size: effectiveSize }),\n effectiveVariant === \"error\" && \"border-destructive focus:ring-destructive\",\n effectiveVariant === \"success\" && \"border-green-500 focus:ring-green-500\",\n className\n )}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {allowClear && field.value && (\n <SelectItem value=\"\">\n <span className=\"text-muted-foreground\">Clear selection</span>\n </SelectItem>\n )}\n {children ?? options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value.toString()}\n disabled={option.disabled}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </ShadcnSelect>\n\n {showError && hasError && (\n <p\n id={`${inputId}-error`}\n className=\"text-sm text-destructive\"\n role=\"alert\"\n >\n {errorMessage}\n </p>\n )}\n \n {helperText && !hasError && (\n <p\n id={`${inputId}-helper`}\n className=\"text-sm text-muted-foreground\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n}\n\nSelect.displayName = \"Select\";\n"],"mappings":"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"}
@@ -1,156 +1,141 @@
1
1
  "use client";
2
- "use strict";
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
- const jsxRuntime = require("react/jsx-runtime");
5
- const React = require("react");
6
- const reactHookForm = require("react-hook-form");
7
- const classVarianceAuthority = require("class-variance-authority");
8
- const cn = require("../../utils/cn.cjs");
9
- const context = require("./context.cjs");
10
- const variants = require("./variants.cjs");
11
- const textarea = require("../../primitives/textarea.cjs");
12
- const label = require("../../primitives/label.cjs");
13
- const textAreaSizeVariants = classVarianceAuthority.cva(
14
- "",
15
- {
16
- variants: {
17
- size: {
18
- sm: "text-xs px-2 py-1.5 min-h-[60px]",
19
- md: "text-sm px-3 py-2 min-h-[80px]",
20
- lg: "text-base px-4 py-3 min-h-[100px]"
21
- },
22
- variant: {
23
- default: "border-input focus-visible:ring-ring",
24
- error: "border-destructive focus-visible:ring-destructive",
25
- success: "border-green-500 focus-visible:ring-green-500"
26
- }
27
- },
28
- defaultVariants: {
29
- size: "md",
30
- variant: "default"
31
- }
32
- }
33
- );
34
- function TextAreaInner({
35
- name,
36
- label: label$1,
37
- helperText,
38
- showError = true,
39
- error: customError,
40
- size,
41
- variant,
42
- fullWidth = true,
43
- className,
44
- disabled,
45
- showCount,
46
- maxCount,
47
- id: providedId,
48
- control: externalControl,
49
- // Validation props
50
- required,
51
- minLength,
52
- maxLength,
53
- validate,
54
- ...props
55
- }, ref) {
56
- const generatedId = React.useId();
57
- const inputId = providedId ?? generatedId;
58
- const formConfigContext = React.useContext(context.FormConfigContext);
59
- const formConfig = formConfigContext ?? {};
60
- const rhfContext = reactHookForm.useFormContext();
61
- const control = externalControl ?? rhfContext?.control;
62
- React.useEffect(() => {
63
- if (formConfigContext?.registerFieldValidation) {
64
- const rules = {};
65
- if (required !== void 0) rules.required = required;
66
- if (minLength !== void 0) rules.minLength = minLength;
67
- if (maxLength !== void 0) rules.maxLength = maxLength;
68
- if (validate !== void 0) rules.validate = validate;
69
- formConfigContext.registerFieldValidation({
70
- name,
71
- type: "string",
72
- rules
73
- });
74
- return () => {
75
- formConfigContext.unregisterFieldValidation(name);
76
- };
77
- }
78
- }, [formConfigContext, name, required, minLength, maxLength, validate]);
79
- const { field, fieldState } = reactHookForm.useController({
80
- name,
81
- control
82
- });
83
- const fieldError = fieldState.error?.message;
84
- const errorMessage = customError ?? fieldError;
85
- const hasError = !!errorMessage;
86
- const effectiveSize = size ?? formConfig.size ?? "md";
87
- const effectiveDisabled = disabled ?? formConfig.disabled;
88
- const effectiveVariant = hasError ? "error" : variant;
89
- const currentLength = typeof field.value === "string" ? field.value.length : 0;
90
- const maxLengthValue = maxCount ?? (typeof maxLength === "number" ? maxLength : maxLength?.value);
91
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn.cn("space-y-1.5", fullWidth && "w-full"), children: [
92
- label$1 && /* @__PURE__ */ jsxRuntime.jsxs(
93
- label.Label,
94
- {
95
- htmlFor: inputId,
96
- className: variants.labelVariants({ required: !!required }),
97
- children: [
98
- label$1,
99
- formConfig.colon && ":"
100
- ]
101
- }
102
- ),
103
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
104
- /* @__PURE__ */ jsxRuntime.jsx(
105
- textarea.Textarea,
106
- {
107
- ...props,
108
- ...field,
109
- ref: (node) => {
110
- if (typeof ref === "function") {
111
- ref(node);
112
- } else if (ref) {
113
- ref.current = node;
114
- }
115
- field.ref(node);
116
- },
117
- id: inputId,
118
- disabled: effectiveDisabled,
119
- maxLength: maxLengthValue,
120
- "aria-invalid": hasError,
121
- "aria-describedby": hasError ? `${inputId}-error` : helperText ? `${inputId}-helper` : void 0,
122
- className: cn.cn(
123
- textAreaSizeVariants({ size: effectiveSize, variant: effectiveVariant }),
124
- showCount && "pb-6",
125
- className
126
- )
127
- }
128
- ),
129
- showCount && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute bottom-2 right-2 text-xs text-muted-foreground", children: [
130
- currentLength,
131
- maxCount ? `/${maxCount}` : ""
132
- ] })
133
- ] }),
134
- showError && hasError && /* @__PURE__ */ jsxRuntime.jsx(
135
- "p",
136
- {
137
- id: `${inputId}-error`,
138
- className: "text-sm text-destructive",
139
- role: "alert",
140
- children: errorMessage
141
- }
142
- ),
143
- helperText && !hasError && /* @__PURE__ */ jsxRuntime.jsx(
144
- "p",
145
- {
146
- id: `${inputId}-helper`,
147
- className: "text-sm text-muted-foreground",
148
- children: helperText
149
- }
150
- )
151
- ] });
2
+ "use client";
3
+ const require_cn = require("../../utils/cn.cjs");
4
+ const require_context = require("./context.cjs");
5
+ const require_variants = require("./variants.cjs");
6
+ const require_label = require("../../primitives/label.cjs");
7
+ const require_textarea = require("../../primitives/textarea.cjs");
8
+ let react = require("react");
9
+ let class_variance_authority = require("class-variance-authority");
10
+ let react_jsx_runtime = require("react/jsx-runtime");
11
+ let react_hook_form = require("react-hook-form");
12
+ //#region src/components/Form/TextArea.tsx
13
+ var textAreaSizeVariants = (0, class_variance_authority.cva)("", {
14
+ variants: {
15
+ size: {
16
+ sm: "text-xs px-2 py-1.5 min-h-[60px]",
17
+ md: "text-sm px-3 py-2 min-h-[80px]",
18
+ lg: "text-base px-4 py-3 min-h-[100px]"
19
+ },
20
+ variant: {
21
+ default: "border-input focus-visible:ring-ring",
22
+ error: "border-destructive focus-visible:ring-destructive",
23
+ success: "border-green-500 focus-visible:ring-green-500"
24
+ }
25
+ },
26
+ defaultVariants: {
27
+ size: "md",
28
+ variant: "default"
29
+ }
30
+ });
31
+ /**
32
+ * TextArea component with form integration
33
+ *
34
+ * This is a wrapper around the shadcn/ui Textarea primitive that adds:
35
+ * - Form integration with react-hook-form
36
+ * - Automatic validation registration
37
+ * - Label, helper text, and error message support
38
+ * - Character count display
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * // Inside a Form component
43
+ * <TextArea name="description" label="Description" required minLength={10} />
44
+ * <TextArea name="bio" label="Bio" showCount maxCount={500} maxLength={500} />
45
+ * ```
46
+ */
47
+ function TextAreaInner({ name, label, helperText, showError = true, error: customError, size, variant, fullWidth = true, className, disabled, showCount, maxCount, id: providedId, control: externalControl, required, minLength, maxLength, validate, ...props }, ref) {
48
+ const generatedId = (0, react.useId)();
49
+ const inputId = providedId ?? generatedId;
50
+ const formConfigContext = (0, react.useContext)(require_context.FormConfigContext);
51
+ const formConfig = formConfigContext ?? {};
52
+ const rhfContext = (0, react_hook_form.useFormContext)();
53
+ const control = externalControl ?? rhfContext?.control;
54
+ (0, react.useEffect)(() => {
55
+ if (formConfigContext?.registerFieldValidation) {
56
+ const rules = {};
57
+ if (required !== void 0) rules.required = required;
58
+ if (minLength !== void 0) rules.minLength = minLength;
59
+ if (maxLength !== void 0) rules.maxLength = maxLength;
60
+ if (validate !== void 0) rules.validate = validate;
61
+ formConfigContext.registerFieldValidation({
62
+ name,
63
+ type: "string",
64
+ rules
65
+ });
66
+ return () => {
67
+ formConfigContext.unregisterFieldValidation(name);
68
+ };
69
+ }
70
+ }, [
71
+ formConfigContext,
72
+ name,
73
+ required,
74
+ minLength,
75
+ maxLength,
76
+ validate
77
+ ]);
78
+ const { field, fieldState } = (0, react_hook_form.useController)({
79
+ name,
80
+ control
81
+ });
82
+ const fieldError = fieldState.error?.message;
83
+ const errorMessage = customError ?? fieldError;
84
+ const hasError = !!errorMessage;
85
+ const effectiveSize = size ?? formConfig.size ?? "md";
86
+ const effectiveDisabled = disabled ?? formConfig.disabled;
87
+ const effectiveVariant = hasError ? "error" : variant;
88
+ const currentLength = typeof field.value === "string" ? field.value.length : 0;
89
+ const maxLengthValue = maxCount ?? (typeof maxLength === "number" ? maxLength : maxLength?.value);
90
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
91
+ className: require_cn.cn("space-y-1.5", fullWidth && "w-full"),
92
+ children: [
93
+ label && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_label.Label, {
94
+ htmlFor: inputId,
95
+ className: require_variants.labelVariants({ required: !!required }),
96
+ children: [label, formConfig.colon && ":"]
97
+ }),
98
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
99
+ className: "relative",
100
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_textarea.Textarea, {
101
+ ...props,
102
+ ...field,
103
+ ref: (node) => {
104
+ if (typeof ref === "function") ref(node);
105
+ else if (ref) ref.current = node;
106
+ field.ref(node);
107
+ },
108
+ id: inputId,
109
+ disabled: effectiveDisabled,
110
+ maxLength: maxLengthValue,
111
+ "aria-invalid": hasError,
112
+ "aria-describedby": hasError ? `${inputId}-error` : helperText ? `${inputId}-helper` : void 0,
113
+ className: require_cn.cn(textAreaSizeVariants({
114
+ size: effectiveSize,
115
+ variant: effectiveVariant
116
+ }), showCount && "pb-6", className)
117
+ }), showCount && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
118
+ className: "absolute bottom-2 right-2 text-xs text-muted-foreground",
119
+ children: [currentLength, maxCount ? `/${maxCount}` : ""]
120
+ })]
121
+ }),
122
+ showError && hasError && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
123
+ id: `${inputId}-error`,
124
+ className: "text-sm text-destructive",
125
+ role: "alert",
126
+ children: errorMessage
127
+ }),
128
+ helperText && !hasError && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
129
+ id: `${inputId}-helper`,
130
+ className: "text-sm text-muted-foreground",
131
+ children: helperText
132
+ })
133
+ ]
134
+ });
152
135
  }
153
- const TextArea = React.forwardRef(TextAreaInner);
136
+ var TextArea = (0, react.forwardRef)(TextAreaInner);
154
137
  TextArea.displayName = "TextArea";
138
+ //#endregion
155
139
  exports.TextArea = TextArea;
156
- //# sourceMappingURL=TextArea.cjs.map
140
+
141
+ //# sourceMappingURL=TextArea.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextArea.cjs","sources":["../../../../src/components/Form/TextArea.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, useId, useContext, useEffect } from \"react\";\nimport type { TextareaHTMLAttributes } from \"react\";\nimport { useController, useFormContext as useRHFFormContext, type FieldValues, type FieldPath, type Control } from \"react-hook-form\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\nimport { FormConfigContext, type FormConfig, type FieldValidationRules } from \"../Form/context\";\nimport { labelVariants } from \"./variants\";\nimport { Textarea } from \"../../primitives/textarea\";\nimport { Label } from \"../../primitives/label\";\n\nconst textAreaSizeVariants = cva(\n \"\",\n {\n variants: {\n size: {\n sm: \"text-xs px-2 py-1.5 min-h-[60px]\",\n md: \"text-sm px-3 py-2 min-h-[80px]\",\n lg: \"text-base px-4 py-3 min-h-[100px]\",\n },\n variant: {\n default: \"border-input focus-visible:ring-ring\",\n error: \"border-destructive focus-visible:ring-destructive\",\n success: \"border-green-500 focus-visible:ring-green-500\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n);\n\n/**\n * Validation rule with optional custom message\n */\ntype ValidationRule<T> = T | { value: T; message: string };\n\nexport interface TextAreaProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"name\" | \"required\" | \"minLength\" | \"maxLength\">,\n VariantProps<typeof textAreaSizeVariants> {\n /** Field name - required for form integration */\n name: TName;\n /** Label text for the textarea */\n label?: string;\n /** Helper text displayed below the textarea */\n helperText?: string;\n /** Whether to show the error message */\n showError?: boolean;\n /** Custom error message (overrides form error) */\n error?: string;\n /** Whether the textarea should take full width */\n fullWidth?: boolean;\n /** Show character count */\n showCount?: boolean;\n /** Maximum character count (for display) */\n maxCount?: number;\n /** External control (for use outside Form) */\n control?: Control<TFieldValues>;\n \n // Validation props\n /** Field is required */\n required?: boolean | string;\n /** Minimum length */\n minLength?: ValidationRule<number>;\n /** Maximum length */\n maxLength?: ValidationRule<number>;\n /** Custom validation function */\n validate?: (value: unknown) => boolean | string | Promise<boolean | string>;\n}\n\n/**\n * TextArea component with form integration\n * \n * This is a wrapper around the shadcn/ui Textarea primitive that adds:\n * - Form integration with react-hook-form\n * - Automatic validation registration\n * - Label, helper text, and error message support\n * - Character count display\n * \n * @example\n * ```tsx\n * // Inside a Form component\n * <TextArea name=\"description\" label=\"Description\" required minLength={10} />\n * <TextArea name=\"bio\" label=\"Bio\" showCount maxCount={500} maxLength={500} />\n * ```\n */\nfunction TextAreaInner<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>(\n {\n name,\n label,\n helperText,\n showError = true,\n error: customError,\n size,\n variant,\n fullWidth = true,\n className,\n disabled,\n showCount,\n maxCount,\n id: providedId,\n control: externalControl,\n // Validation props\n required,\n minLength,\n maxLength,\n validate,\n ...props\n }: TextAreaProps<TFieldValues, TName>,\n ref: React.ForwardedRef<HTMLTextAreaElement>\n) {\n const generatedId = useId();\n const inputId = providedId ?? generatedId;\n \n // Try to get form context\n const formConfigContext = useContext(FormConfigContext);\n const formConfig: FormConfig = formConfigContext ?? {};\n \n // Get form context from react-hook-form\n const rhfContext = useRHFFormContext<TFieldValues>();\n const control = externalControl ?? rhfContext?.control;\n\n // Register validation rules with the form\n useEffect(() => {\n if (formConfigContext?.registerFieldValidation) {\n const rules: FieldValidationRules = {};\n \n if (required !== undefined) rules.required = required;\n if (minLength !== undefined) rules.minLength = minLength;\n if (maxLength !== undefined) rules.maxLength = maxLength;\n if (validate !== undefined) rules.validate = validate;\n\n formConfigContext.registerFieldValidation({\n name: name as string,\n type: \"string\",\n rules,\n });\n\n return () => {\n formConfigContext.unregisterFieldValidation(name as string);\n };\n }\n }, [formConfigContext, name, required, minLength, maxLength, validate]);\n\n // Use controller for form integration\n const { field, fieldState } = useController<TFieldValues, TName>({\n name,\n control,\n });\n\n const fieldError = fieldState.error?.message;\n const errorMessage = customError ?? fieldError;\n const hasError = !!errorMessage;\n \n // Merge sizes - prop takes precedence over form config\n const effectiveSize = size ?? formConfig.size ?? \"md\";\n const effectiveDisabled = disabled ?? formConfig.disabled;\n \n // Determine variant based on error state\n const effectiveVariant = hasError ? \"error\" : variant;\n\n const currentLength = typeof field.value === \"string\" ? field.value.length : 0;\n \n // Get maxLength value for HTML attribute\n const maxLengthValue = maxCount ?? (typeof maxLength === \"number\" ? maxLength : (maxLength as { value: number })?.value);\n\n return (\n <div className={cn(\"space-y-1.5\", fullWidth && \"w-full\")}>\n {label && (\n <Label\n htmlFor={inputId}\n className={labelVariants({ required: !!required })}\n >\n {label}\n {formConfig.colon && \":\"}\n </Label>\n )}\n \n <div className=\"relative\">\n <Textarea\n {...props}\n {...field}\n ref={(node) => {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n field.ref(node);\n }}\n id={inputId}\n disabled={effectiveDisabled}\n maxLength={maxLengthValue}\n aria-invalid={hasError}\n aria-describedby={\n hasError\n ? `${inputId}-error`\n : helperText\n ? `${inputId}-helper`\n : undefined\n }\n className={cn(\n textAreaSizeVariants({ size: effectiveSize, variant: effectiveVariant }),\n showCount && \"pb-6\",\n className\n )}\n />\n \n {showCount && (\n <div className=\"absolute bottom-2 right-2 text-xs text-muted-foreground\">\n {currentLength}{maxCount ? `/${maxCount}` : \"\"}\n </div>\n )}\n </div>\n\n {showError && hasError && (\n <p\n id={`${inputId}-error`}\n className=\"text-sm text-destructive\"\n role=\"alert\"\n >\n {errorMessage}\n </p>\n )}\n \n {helperText && !hasError && (\n <p\n id={`${inputId}-helper`}\n className=\"text-sm text-muted-foreground\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n}\n\n// Use forwardRef with generic support\nexport const TextArea = forwardRef(TextAreaInner) as <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>(\n props: TextAreaProps<TFieldValues, TName> & { ref?: React.ForwardedRef<HTMLTextAreaElement> }\n) => React.ReactElement;\n\n(TextArea as React.FC).displayName = \"TextArea\";\n"],"names":["cva","label","useId","useContext","FormConfigContext","useRHFFormContext","useEffect","useController","cn","jsxs","Label","labelVariants","jsx","Textarea","forwardRef"],"mappings":"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"}
1
+ {"version":3,"file":"TextArea.cjs","names":[],"sources":["../../../../src/components/Form/TextArea.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, useId, useContext, useEffect } from \"react\";\nimport type { TextareaHTMLAttributes } from \"react\";\nimport { useController, useFormContext as useRHFFormContext, type FieldValues, type FieldPath, type Control } from \"react-hook-form\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../utils/cn\";\nimport { FormConfigContext, type FormConfig, type FieldValidationRules } from \"../Form/context\";\nimport { labelVariants } from \"./variants\";\nimport { Textarea } from \"../../primitives/textarea\";\nimport { Label } from \"../../primitives/label\";\n\nconst textAreaSizeVariants = cva(\n \"\",\n {\n variants: {\n size: {\n sm: \"text-xs px-2 py-1.5 min-h-[60px]\",\n md: \"text-sm px-3 py-2 min-h-[80px]\",\n lg: \"text-base px-4 py-3 min-h-[100px]\",\n },\n variant: {\n default: \"border-input focus-visible:ring-ring\",\n error: \"border-destructive focus-visible:ring-destructive\",\n success: \"border-green-500 focus-visible:ring-green-500\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"default\",\n },\n }\n);\n\n/**\n * Validation rule with optional custom message\n */\ntype ValidationRule<T> = T | { value: T; message: string };\n\nexport interface TextAreaProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"name\" | \"required\" | \"minLength\" | \"maxLength\">,\n VariantProps<typeof textAreaSizeVariants> {\n /** Field name - required for form integration */\n name: TName;\n /** Label text for the textarea */\n label?: string;\n /** Helper text displayed below the textarea */\n helperText?: string;\n /** Whether to show the error message */\n showError?: boolean;\n /** Custom error message (overrides form error) */\n error?: string;\n /** Whether the textarea should take full width */\n fullWidth?: boolean;\n /** Show character count */\n showCount?: boolean;\n /** Maximum character count (for display) */\n maxCount?: number;\n /** External control (for use outside Form) */\n control?: Control<TFieldValues>;\n \n // Validation props\n /** Field is required */\n required?: boolean | string;\n /** Minimum length */\n minLength?: ValidationRule<number>;\n /** Maximum length */\n maxLength?: ValidationRule<number>;\n /** Custom validation function */\n validate?: (value: unknown) => boolean | string | Promise<boolean | string>;\n}\n\n/**\n * TextArea component with form integration\n * \n * This is a wrapper around the shadcn/ui Textarea primitive that adds:\n * - Form integration with react-hook-form\n * - Automatic validation registration\n * - Label, helper text, and error message support\n * - Character count display\n * \n * @example\n * ```tsx\n * // Inside a Form component\n * <TextArea name=\"description\" label=\"Description\" required minLength={10} />\n * <TextArea name=\"bio\" label=\"Bio\" showCount maxCount={500} maxLength={500} />\n * ```\n */\nfunction TextAreaInner<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>(\n {\n name,\n label,\n helperText,\n showError = true,\n error: customError,\n size,\n variant,\n fullWidth = true,\n className,\n disabled,\n showCount,\n maxCount,\n id: providedId,\n control: externalControl,\n // Validation props\n required,\n minLength,\n maxLength,\n validate,\n ...props\n }: TextAreaProps<TFieldValues, TName>,\n ref: React.ForwardedRef<HTMLTextAreaElement>\n) {\n const generatedId = useId();\n const inputId = providedId ?? generatedId;\n \n // Try to get form context\n const formConfigContext = useContext(FormConfigContext);\n const formConfig: FormConfig = formConfigContext ?? {};\n \n // Get form context from react-hook-form\n const rhfContext = useRHFFormContext<TFieldValues>();\n const control = externalControl ?? rhfContext?.control;\n\n // Register validation rules with the form\n useEffect(() => {\n if (formConfigContext?.registerFieldValidation) {\n const rules: FieldValidationRules = {};\n \n if (required !== undefined) rules.required = required;\n if (minLength !== undefined) rules.minLength = minLength;\n if (maxLength !== undefined) rules.maxLength = maxLength;\n if (validate !== undefined) rules.validate = validate;\n\n formConfigContext.registerFieldValidation({\n name: name as string,\n type: \"string\",\n rules,\n });\n\n return () => {\n formConfigContext.unregisterFieldValidation(name as string);\n };\n }\n }, [formConfigContext, name, required, minLength, maxLength, validate]);\n\n // Use controller for form integration\n const { field, fieldState } = useController<TFieldValues, TName>({\n name,\n control,\n });\n\n const fieldError = fieldState.error?.message;\n const errorMessage = customError ?? fieldError;\n const hasError = !!errorMessage;\n \n // Merge sizes - prop takes precedence over form config\n const effectiveSize = size ?? formConfig.size ?? \"md\";\n const effectiveDisabled = disabled ?? formConfig.disabled;\n \n // Determine variant based on error state\n const effectiveVariant = hasError ? \"error\" : variant;\n\n const currentLength = typeof field.value === \"string\" ? field.value.length : 0;\n \n // Get maxLength value for HTML attribute\n const maxLengthValue = maxCount ?? (typeof maxLength === \"number\" ? maxLength : (maxLength as { value: number })?.value);\n\n return (\n <div className={cn(\"space-y-1.5\", fullWidth && \"w-full\")}>\n {label && (\n <Label\n htmlFor={inputId}\n className={labelVariants({ required: !!required })}\n >\n {label}\n {formConfig.colon && \":\"}\n </Label>\n )}\n \n <div className=\"relative\">\n <Textarea\n {...props}\n {...field}\n ref={(node) => {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n field.ref(node);\n }}\n id={inputId}\n disabled={effectiveDisabled}\n maxLength={maxLengthValue}\n aria-invalid={hasError}\n aria-describedby={\n hasError\n ? `${inputId}-error`\n : helperText\n ? `${inputId}-helper`\n : undefined\n }\n className={cn(\n textAreaSizeVariants({ size: effectiveSize, variant: effectiveVariant }),\n showCount && \"pb-6\",\n className\n )}\n />\n \n {showCount && (\n <div className=\"absolute bottom-2 right-2 text-xs text-muted-foreground\">\n {currentLength}{maxCount ? `/${maxCount}` : \"\"}\n </div>\n )}\n </div>\n\n {showError && hasError && (\n <p\n id={`${inputId}-error`}\n className=\"text-sm text-destructive\"\n role=\"alert\"\n >\n {errorMessage}\n </p>\n )}\n \n {helperText && !hasError && (\n <p\n id={`${inputId}-helper`}\n className=\"text-sm text-muted-foreground\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n}\n\n// Use forwardRef with generic support\nexport const TextArea = forwardRef(TextAreaInner) as <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>(\n props: TextAreaProps<TFieldValues, TName> & { ref?: React.ForwardedRef<HTMLTextAreaElement> }\n) => React.ReactElement;\n\n(TextArea as React.FC).displayName = \"TextArea\";\n"],"mappings":"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"}