@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
@@ -1,210 +1,188 @@
1
1
  "use client";
2
- import { jsxs, jsx } from "react/jsx-runtime";
3
- import { forwardRef, useId, useContext, useEffect } from "react";
4
- import { useFormContext, useController } from "react-hook-form";
5
- import { cva } from "class-variance-authority";
2
+ "use client";
6
3
  import { cn } from "../../utils/cn.js";
7
4
  import { FormConfigContext } from "./context.js";
8
5
  import { labelVariants } from "./variants.js";
9
6
  import { TextBoxPrimitive } from "../../primitives/textbox.js";
10
7
  import { Label } from "../../primitives/label.js";
8
+ import { forwardRef, useContext, useEffect, useId } from "react";
9
+ import { cva } from "class-variance-authority";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ import { useController, useFormContext } from "react-hook-form";
11
12
  import { X } from "lucide-react";
12
- const textBoxVariants = cva(
13
- "",
14
- {
15
- variants: {
16
- size: {
17
- sm: "h-8 text-xs px-2",
18
- md: "h-10 text-sm px-3",
19
- lg: "h-12 text-base px-4"
20
- },
21
- variant: {
22
- default: "border-input focus-visible:ring-ring",
23
- error: "border-destructive focus-visible:ring-destructive",
24
- success: "border-green-500 focus-visible:ring-green-500"
25
- }
26
- },
27
- defaultVariants: {
28
- size: "md",
29
- variant: "default"
30
- }
31
- }
32
- );
33
- function TextBoxInner({
34
- name,
35
- label,
36
- helperText,
37
- showError = true,
38
- error: customError,
39
- size,
40
- variant,
41
- fullWidth = true,
42
- className,
43
- disabled,
44
- prefix,
45
- suffix,
46
- allowClear,
47
- onClear,
48
- id: providedId,
49
- control: externalControl,
50
- // Validation props
51
- required,
52
- minLength,
53
- maxLength,
54
- minValue,
55
- maxValue,
56
- pattern,
57
- email,
58
- url,
59
- validate,
60
- ...props
61
- }, ref) {
62
- const generatedId = useId();
63
- const inputId = providedId ?? generatedId;
64
- const formConfigContext = useContext(FormConfigContext);
65
- const formConfig = formConfigContext ?? {};
66
- const rhfContext = useFormContext();
67
- const control = externalControl ?? rhfContext?.control;
68
- const registerFieldValidation = formConfigContext?.registerFieldValidation;
69
- const unregisterFieldValidation = formConfigContext?.unregisterFieldValidation;
70
- useEffect(() => {
71
- if (registerFieldValidation) {
72
- const rules = {};
73
- if (required !== void 0) rules.required = required;
74
- if (minLength !== void 0) rules.minLength = minLength;
75
- if (maxLength !== void 0) rules.maxLength = maxLength;
76
- if (minValue !== void 0) rules.min = minValue;
77
- if (maxValue !== void 0) rules.max = maxValue;
78
- if (pattern !== void 0) rules.pattern = pattern;
79
- if (email !== void 0) rules.email = email;
80
- if (url !== void 0) rules.url = url;
81
- if (validate !== void 0) rules.validate = validate;
82
- const inputType = props.type ?? "text";
83
- let fieldType = "string";
84
- if (inputType === "number") {
85
- fieldType = "number";
86
- } else if (inputType === "date") {
87
- fieldType = "date";
88
- } else if (inputType === "email" && rules.email === void 0) {
89
- rules.email = true;
90
- } else if (inputType === "url" && rules.url === void 0) {
91
- rules.url = true;
92
- } else if (inputType === "tel" && rules.pattern === void 0) {
93
- rules.pattern = { value: /^\+?[\d\s\-().]{7,}$/, message: "Invalid phone number" };
94
- }
95
- registerFieldValidation({
96
- name,
97
- type: fieldType,
98
- rules
99
- });
100
- return () => {
101
- unregisterFieldValidation?.(name);
102
- };
103
- }
104
- }, [
105
- registerFieldValidation,
106
- unregisterFieldValidation,
107
- name,
108
- required,
109
- minLength,
110
- maxLength,
111
- minValue,
112
- maxValue,
113
- pattern,
114
- email,
115
- url,
116
- validate,
117
- props.type
118
- ]);
119
- const { field, fieldState } = useController({
120
- name,
121
- control
122
- });
123
- const fieldError = fieldState.error?.message;
124
- const errorMessage = customError ?? fieldError;
125
- const hasError = !!errorMessage;
126
- const effectiveSize = size ?? formConfig.size ?? "md";
127
- const effectiveDisabled = disabled ?? formConfig.disabled;
128
- const effectiveVariant = hasError ? "error" : variant;
129
- const handleClear = () => {
130
- field.onChange("");
131
- onClear?.();
132
- };
133
- return /* @__PURE__ */ jsxs("div", { className: cn("space-y-1.5", fullWidth && "w-full"), children: [
134
- label && /* @__PURE__ */ jsxs(
135
- Label,
136
- {
137
- htmlFor: inputId,
138
- className: labelVariants({ required: !!required }),
139
- children: [
140
- label,
141
- formConfig.colon && ":"
142
- ]
143
- }
144
- ),
145
- /* @__PURE__ */ jsxs("div", { className: "relative", children: [
146
- prefix && /* @__PURE__ */ jsx("div", { className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground", children: prefix }),
147
- /* @__PURE__ */ jsx(
148
- TextBoxPrimitive,
149
- {
150
- ...props,
151
- ...field,
152
- ref: (node) => {
153
- if (typeof ref === "function") {
154
- ref(node);
155
- } else if (ref) {
156
- ref.current = node;
157
- }
158
- field.ref(node);
159
- },
160
- id: inputId,
161
- disabled: effectiveDisabled,
162
- "aria-invalid": hasError,
163
- "aria-describedby": hasError ? `${inputId}-error` : helperText ? `${inputId}-helper` : void 0,
164
- className: cn(
165
- textBoxVariants({ size: effectiveSize, variant: effectiveVariant }),
166
- prefix && "pl-10",
167
- (suffix || allowClear) && "pr-10",
168
- className
169
- )
170
- }
171
- ),
172
- (suffix || allowClear && field.value) && /* @__PURE__ */ jsxs("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1", children: [
173
- allowClear && field.value && /* @__PURE__ */ jsx(
174
- "button",
175
- {
176
- type: "button",
177
- onClick: handleClear,
178
- className: "text-muted-foreground hover:text-foreground transition-colors",
179
- tabIndex: -1,
180
- children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
181
- }
182
- ),
183
- suffix && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: suffix })
184
- ] })
185
- ] }),
186
- showError && hasError && /* @__PURE__ */ jsx(
187
- "p",
188
- {
189
- id: `${inputId}-error`,
190
- className: "text-sm text-destructive",
191
- role: "alert",
192
- children: errorMessage
193
- }
194
- ),
195
- helperText && !hasError && /* @__PURE__ */ jsx(
196
- "p",
197
- {
198
- id: `${inputId}-helper`,
199
- className: "text-sm text-muted-foreground",
200
- children: helperText
201
- }
202
- )
203
- ] });
13
+ //#region src/components/Form/TextBox.tsx
14
+ var textBoxVariants = cva("", {
15
+ variants: {
16
+ size: {
17
+ sm: "h-8 text-xs px-2",
18
+ md: "h-10 text-sm px-3",
19
+ lg: "h-12 text-base px-4"
20
+ },
21
+ variant: {
22
+ default: "border-input focus-visible:ring-ring",
23
+ error: "border-destructive focus-visible:ring-destructive",
24
+ success: "border-green-500 focus-visible:ring-green-500"
25
+ }
26
+ },
27
+ defaultVariants: {
28
+ size: "md",
29
+ variant: "default"
30
+ }
31
+ });
32
+ /**
33
+ * TextBox component with form integration and automatic validation registration
34
+ *
35
+ * This is a wrapper around the shadcn/ui Input primitive that adds:
36
+ * - Form integration with react-hook-form
37
+ * - Automatic validation registration
38
+ * - Label, helper text, and error message support
39
+ * - Prefix/suffix elements
40
+ * - Clear button functionality
41
+ *
42
+ * @example
43
+ * ```tsx
44
+ * // Inside a Form component - validation is automatically registered
45
+ * <Form onSubmit={handleSubmit} defaultValues={{ username: "", email: "" }}>
46
+ * <TextBox name="username" label="Username" required minLength={3} maxLength={50} />
47
+ * <TextBox name="email" label="Email" type="email" required email />
48
+ * <TextBox name="website" label="Website" url />
49
+ * <Button type="submit">Submit</Button>
50
+ * </Form>
51
+ * ```
52
+ */
53
+ function TextBoxInner({ name, label, helperText, showError = true, error: customError, size, variant, fullWidth = true, className, disabled, prefix, suffix, allowClear, onClear, id: providedId, control: externalControl, required, minLength, maxLength, minValue, maxValue, pattern, email, url, validate, ...props }, ref) {
54
+ const generatedId = useId();
55
+ const inputId = providedId ?? generatedId;
56
+ const formConfigContext = useContext(FormConfigContext);
57
+ const formConfig = formConfigContext ?? {};
58
+ const rhfContext = useFormContext();
59
+ const control = externalControl ?? rhfContext?.control;
60
+ const registerFieldValidation = formConfigContext?.registerFieldValidation;
61
+ const unregisterFieldValidation = formConfigContext?.unregisterFieldValidation;
62
+ useEffect(() => {
63
+ if (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 (minValue !== void 0) rules.min = minValue;
69
+ if (maxValue !== void 0) rules.max = maxValue;
70
+ if (pattern !== void 0) rules.pattern = pattern;
71
+ if (email !== void 0) rules.email = email;
72
+ if (url !== void 0) rules.url = url;
73
+ if (validate !== void 0) rules.validate = validate;
74
+ const inputType = props.type ?? "text";
75
+ let fieldType = "string";
76
+ if (inputType === "number") fieldType = "number";
77
+ else if (inputType === "date") fieldType = "date";
78
+ else if (inputType === "email" && rules.email === void 0) rules.email = true;
79
+ else if (inputType === "url" && rules.url === void 0) rules.url = true;
80
+ else if (inputType === "tel" && rules.pattern === void 0) rules.pattern = {
81
+ value: /^\+?[\d\s\-().]{7,}$/,
82
+ message: "Invalid phone number"
83
+ };
84
+ registerFieldValidation({
85
+ name,
86
+ type: fieldType,
87
+ rules
88
+ });
89
+ return () => {
90
+ unregisterFieldValidation?.(name);
91
+ };
92
+ }
93
+ }, [
94
+ registerFieldValidation,
95
+ unregisterFieldValidation,
96
+ name,
97
+ required,
98
+ minLength,
99
+ maxLength,
100
+ minValue,
101
+ maxValue,
102
+ pattern,
103
+ email,
104
+ url,
105
+ validate,
106
+ props.type
107
+ ]);
108
+ const { field, fieldState } = useController({
109
+ name,
110
+ control
111
+ });
112
+ const fieldError = fieldState.error?.message;
113
+ const errorMessage = customError ?? fieldError;
114
+ const hasError = !!errorMessage;
115
+ const effectiveSize = size ?? formConfig.size ?? "md";
116
+ const effectiveDisabled = disabled ?? formConfig.disabled;
117
+ const effectiveVariant = hasError ? "error" : variant;
118
+ const handleClear = () => {
119
+ field.onChange("");
120
+ onClear?.();
121
+ };
122
+ return /* @__PURE__ */ jsxs("div", {
123
+ className: cn("space-y-1.5", fullWidth && "w-full"),
124
+ children: [
125
+ label && /* @__PURE__ */ jsxs(Label, {
126
+ htmlFor: inputId,
127
+ className: labelVariants({ required: !!required }),
128
+ children: [label, formConfig.colon && ":"]
129
+ }),
130
+ /* @__PURE__ */ jsxs("div", {
131
+ className: "relative",
132
+ children: [
133
+ prefix && /* @__PURE__ */ jsx("div", {
134
+ className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground",
135
+ children: prefix
136
+ }),
137
+ /* @__PURE__ */ jsx(TextBoxPrimitive, {
138
+ ...props,
139
+ ...field,
140
+ ref: (node) => {
141
+ if (typeof ref === "function") ref(node);
142
+ else if (ref) ref.current = node;
143
+ field.ref(node);
144
+ },
145
+ id: inputId,
146
+ disabled: effectiveDisabled,
147
+ "aria-invalid": hasError,
148
+ "aria-describedby": hasError ? `${inputId}-error` : helperText ? `${inputId}-helper` : void 0,
149
+ className: cn(textBoxVariants({
150
+ size: effectiveSize,
151
+ variant: effectiveVariant
152
+ }), prefix && "pl-10", (suffix || allowClear) && "pr-10", className)
153
+ }),
154
+ (suffix || allowClear && field.value) && /* @__PURE__ */ jsxs("div", {
155
+ className: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1",
156
+ children: [allowClear && field.value && /* @__PURE__ */ jsx("button", {
157
+ type: "button",
158
+ onClick: handleClear,
159
+ className: "text-muted-foreground hover:text-foreground transition-colors",
160
+ tabIndex: -1,
161
+ children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
162
+ }), suffix && /* @__PURE__ */ jsx("span", {
163
+ className: "text-muted-foreground",
164
+ children: suffix
165
+ })]
166
+ })
167
+ ]
168
+ }),
169
+ showError && hasError && /* @__PURE__ */ jsx("p", {
170
+ id: `${inputId}-error`,
171
+ className: "text-sm text-destructive",
172
+ role: "alert",
173
+ children: errorMessage
174
+ }),
175
+ helperText && !hasError && /* @__PURE__ */ jsx("p", {
176
+ id: `${inputId}-helper`,
177
+ className: "text-sm text-muted-foreground",
178
+ children: helperText
179
+ })
180
+ ]
181
+ });
204
182
  }
205
- const TextBox = forwardRef(TextBoxInner);
183
+ var TextBox = forwardRef(TextBoxInner);
206
184
  TextBox.displayName = "TextBox";
207
- export {
208
- TextBox
209
- };
210
- //# sourceMappingURL=TextBox.js.map
185
+ //#endregion
186
+ export { TextBox };
187
+
188
+ //# sourceMappingURL=TextBox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextBox.js","sources":["../../../src/components/Form/TextBox.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, useId, useContext, useEffect } from \"react\";\nimport type { InputHTMLAttributes, 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 { FormConfigContext, type FormConfig, type FieldValidationRules } from \"../Form/context\";\nimport { labelVariants } from \"./variants\";\nimport { TextBoxPrimitive } from \"../../primitives/textbox\";\nimport { Label } from \"../../primitives/label\";\nimport { X } from \"lucide-react\";\n\nconst textBoxVariants = cva(\n \"\",\n {\n variants: {\n size: {\n sm: \"h-8 text-xs px-2\",\n md: \"h-10 text-sm px-3\",\n lg: \"h-12 text-base px-4\",\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 TextBoxProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"name\" | \"prefix\" | \"pattern\" | \"required\" | \"minLength\" | \"maxLength\">,\n VariantProps<typeof textBoxVariants> {\n /** Field name - required for form integration */\n name: TName;\n /** Label text for the input */\n label?: string;\n /** Helper text displayed below the input */\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 input should take full width */\n fullWidth?: boolean;\n /** Prefix element */\n prefix?: ReactNode;\n /** Suffix element */\n suffix?: ReactNode;\n /** Allow clear button */\n allowClear?: boolean;\n /** Callback when clear is clicked */\n onClear?: () => void;\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 for strings */\n minLength?: ValidationRule<number>;\n /** Maximum length for strings */\n maxLength?: ValidationRule<number>;\n /** Minimum value for numbers */\n minValue?: ValidationRule<number>;\n /** Maximum value for numbers */\n maxValue?: ValidationRule<number>;\n /** Regex pattern for validation */\n pattern?: ValidationRule<RegExp>;\n /** Email validation */\n email?: boolean | string;\n /** URL validation */\n url?: boolean | string;\n /** Custom validation function */\n validate?: (value: unknown) => boolean | string | Promise<boolean | string>;\n}\n\n/**\n * TextBox component with form integration and automatic validation registration\n * \n * This is a wrapper around the shadcn/ui Input primitive that adds:\n * - Form integration with react-hook-form\n * - Automatic validation registration\n * - Label, helper text, and error message support\n * - Prefix/suffix elements\n * - Clear button functionality\n * \n * @example\n * ```tsx\n * // Inside a Form component - validation is automatically registered\n * <Form onSubmit={handleSubmit} defaultValues={{ username: \"\", email: \"\" }}>\n * <TextBox name=\"username\" label=\"Username\" required minLength={3} maxLength={50} />\n * <TextBox name=\"email\" label=\"Email\" type=\"email\" required email />\n * <TextBox name=\"website\" label=\"Website\" url />\n * <Button type=\"submit\">Submit</Button>\n * </Form>\n * ```\n */\nfunction TextBoxInner<\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 prefix,\n suffix,\n allowClear,\n onClear,\n id: providedId,\n control: externalControl,\n // Validation props\n required,\n minLength,\n maxLength,\n minValue,\n maxValue,\n pattern,\n email,\n url,\n validate,\n ...props\n }: TextBoxProps<TFieldValues, TName>,\n ref: React.ForwardedRef<HTMLInputElement>\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 // Destructure stable function references so the effect doesn't depend on the\n // context object identity (which changes every render due to inline construction).\n const registerFieldValidation = formConfigContext?.registerFieldValidation;\n const unregisterFieldValidation = formConfigContext?.unregisterFieldValidation;\n\n // Register validation rules with the form\n useEffect(() => {\n if (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 (minValue !== undefined) rules.min = minValue;\n if (maxValue !== undefined) rules.max = maxValue;\n if (pattern !== undefined) rules.pattern = pattern;\n if (email !== undefined) rules.email = email;\n if (url !== undefined) rules.url = url;\n if (validate !== undefined) rules.validate = validate;\n\n // Determine field type and auto-infer rules from input type\n const inputType = props.type ?? \"text\";\n let fieldType: \"string\" | \"number\" | \"date\" = \"string\";\n\n if (inputType === \"number\") {\n fieldType = \"number\";\n } else if (inputType === \"date\") {\n fieldType = \"date\";\n } else if (inputType === \"email\" && rules.email === undefined) {\n rules.email = true;\n } else if (inputType === \"url\" && rules.url === undefined) {\n rules.url = true;\n } else if (inputType === \"tel\" && rules.pattern === undefined) {\n rules.pattern = { value: /^\\+?[\\d\\s\\-().]{7,}$/, message: \"Invalid phone number\" };\n }\n\n registerFieldValidation({\n name: name as string,\n type: fieldType,\n rules,\n });\n\n return () => {\n unregisterFieldValidation?.(name as string);\n };\n }\n }, [\n registerFieldValidation,\n unregisterFieldValidation,\n name,\n required,\n minLength,\n maxLength,\n minValue,\n maxValue,\n pattern,\n email,\n url,\n validate,\n props.type,\n ]);\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 handleClear = () => {\n field.onChange(\"\");\n onClear?.();\n };\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 {prefix && (\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n {prefix}\n </div>\n )}\n \n <TextBoxPrimitive\n {...props}\n {...field}\n ref={(node) => {\n // Handle both refs\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 aria-invalid={hasError}\n aria-describedby={\n hasError\n ? `${inputId}-error`\n : helperText\n ? `${inputId}-helper`\n : undefined\n }\n className={cn(\n textBoxVariants({ size: effectiveSize, variant: effectiveVariant }),\n prefix && \"pl-10\",\n (suffix || allowClear) && \"pr-10\",\n className\n )}\n />\n\n {(suffix || (allowClear && field.value)) && (\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1\">\n {allowClear && field.value && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-foreground transition-colors\"\n tabIndex={-1}\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n {suffix && (\n <span className=\"text-muted-foreground\">{suffix}</span>\n )}\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 TextBox = forwardRef(TextBoxInner) as <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>(\n props: TextBoxProps<TFieldValues, TName> & { ref?: React.ForwardedRef<HTMLInputElement> }\n) => React.ReactElement;\n\n(TextBox as React.FC).displayName = \"TextBox\";\n"],"names":["useRHFFormContext"],"mappings":"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"}
1
+ {"version":3,"file":"TextBox.js","names":[],"sources":["../../../src/components/Form/TextBox.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, useId, useContext, useEffect } from \"react\";\nimport type { InputHTMLAttributes, 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 { FormConfigContext, type FormConfig, type FieldValidationRules } from \"../Form/context\";\nimport { labelVariants } from \"./variants\";\nimport { TextBoxPrimitive } from \"../../primitives/textbox\";\nimport { Label } from \"../../primitives/label\";\nimport { X } from \"lucide-react\";\n\nconst textBoxVariants = cva(\n \"\",\n {\n variants: {\n size: {\n sm: \"h-8 text-xs px-2\",\n md: \"h-10 text-sm px-3\",\n lg: \"h-12 text-base px-4\",\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 TextBoxProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"name\" | \"prefix\" | \"pattern\" | \"required\" | \"minLength\" | \"maxLength\">,\n VariantProps<typeof textBoxVariants> {\n /** Field name - required for form integration */\n name: TName;\n /** Label text for the input */\n label?: string;\n /** Helper text displayed below the input */\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 input should take full width */\n fullWidth?: boolean;\n /** Prefix element */\n prefix?: ReactNode;\n /** Suffix element */\n suffix?: ReactNode;\n /** Allow clear button */\n allowClear?: boolean;\n /** Callback when clear is clicked */\n onClear?: () => void;\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 for strings */\n minLength?: ValidationRule<number>;\n /** Maximum length for strings */\n maxLength?: ValidationRule<number>;\n /** Minimum value for numbers */\n minValue?: ValidationRule<number>;\n /** Maximum value for numbers */\n maxValue?: ValidationRule<number>;\n /** Regex pattern for validation */\n pattern?: ValidationRule<RegExp>;\n /** Email validation */\n email?: boolean | string;\n /** URL validation */\n url?: boolean | string;\n /** Custom validation function */\n validate?: (value: unknown) => boolean | string | Promise<boolean | string>;\n}\n\n/**\n * TextBox component with form integration and automatic validation registration\n * \n * This is a wrapper around the shadcn/ui Input primitive that adds:\n * - Form integration with react-hook-form\n * - Automatic validation registration\n * - Label, helper text, and error message support\n * - Prefix/suffix elements\n * - Clear button functionality\n * \n * @example\n * ```tsx\n * // Inside a Form component - validation is automatically registered\n * <Form onSubmit={handleSubmit} defaultValues={{ username: \"\", email: \"\" }}>\n * <TextBox name=\"username\" label=\"Username\" required minLength={3} maxLength={50} />\n * <TextBox name=\"email\" label=\"Email\" type=\"email\" required email />\n * <TextBox name=\"website\" label=\"Website\" url />\n * <Button type=\"submit\">Submit</Button>\n * </Form>\n * ```\n */\nfunction TextBoxInner<\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 prefix,\n suffix,\n allowClear,\n onClear,\n id: providedId,\n control: externalControl,\n // Validation props\n required,\n minLength,\n maxLength,\n minValue,\n maxValue,\n pattern,\n email,\n url,\n validate,\n ...props\n }: TextBoxProps<TFieldValues, TName>,\n ref: React.ForwardedRef<HTMLInputElement>\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 // Destructure stable function references so the effect doesn't depend on the\n // context object identity (which changes every render due to inline construction).\n const registerFieldValidation = formConfigContext?.registerFieldValidation;\n const unregisterFieldValidation = formConfigContext?.unregisterFieldValidation;\n\n // Register validation rules with the form\n useEffect(() => {\n if (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 (minValue !== undefined) rules.min = minValue;\n if (maxValue !== undefined) rules.max = maxValue;\n if (pattern !== undefined) rules.pattern = pattern;\n if (email !== undefined) rules.email = email;\n if (url !== undefined) rules.url = url;\n if (validate !== undefined) rules.validate = validate;\n\n // Determine field type and auto-infer rules from input type\n const inputType = props.type ?? \"text\";\n let fieldType: \"string\" | \"number\" | \"date\" = \"string\";\n\n if (inputType === \"number\") {\n fieldType = \"number\";\n } else if (inputType === \"date\") {\n fieldType = \"date\";\n } else if (inputType === \"email\" && rules.email === undefined) {\n rules.email = true;\n } else if (inputType === \"url\" && rules.url === undefined) {\n rules.url = true;\n } else if (inputType === \"tel\" && rules.pattern === undefined) {\n rules.pattern = { value: /^\\+?[\\d\\s\\-().]{7,}$/, message: \"Invalid phone number\" };\n }\n\n registerFieldValidation({\n name: name as string,\n type: fieldType,\n rules,\n });\n\n return () => {\n unregisterFieldValidation?.(name as string);\n };\n }\n }, [\n registerFieldValidation,\n unregisterFieldValidation,\n name,\n required,\n minLength,\n maxLength,\n minValue,\n maxValue,\n pattern,\n email,\n url,\n validate,\n props.type,\n ]);\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 handleClear = () => {\n field.onChange(\"\");\n onClear?.();\n };\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 {prefix && (\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n {prefix}\n </div>\n )}\n \n <TextBoxPrimitive\n {...props}\n {...field}\n ref={(node) => {\n // Handle both refs\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 aria-invalid={hasError}\n aria-describedby={\n hasError\n ? `${inputId}-error`\n : helperText\n ? `${inputId}-helper`\n : undefined\n }\n className={cn(\n textBoxVariants({ size: effectiveSize, variant: effectiveVariant }),\n prefix && \"pl-10\",\n (suffix || allowClear) && \"pr-10\",\n className\n )}\n />\n\n {(suffix || (allowClear && field.value)) && (\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1\">\n {allowClear && field.value && (\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"text-muted-foreground hover:text-foreground transition-colors\"\n tabIndex={-1}\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n {suffix && (\n <span className=\"text-muted-foreground\">{suffix}</span>\n )}\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 TextBox = forwardRef(TextBoxInner) as <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>(\n props: TextBoxProps<TFieldValues, TName> & { ref?: React.ForwardedRef<HTMLInputElement> }\n) => React.ReactElement;\n\n(TextBox as React.FC).displayName = \"TextBox\";\n"],"mappings":"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"}
@@ -99,11 +99,9 @@ export declare function buildZodSchemaFromRules(type: FieldRegistration["type"],
99
99
  export declare function useFieldValidationRegistry(): {
100
100
  registerFieldValidation: (field: FieldRegistration) => void;
101
101
  unregisterFieldValidation: (name: string) => void;
102
- getValidationSchema: () => z.ZodObject<Record<string, z.ZodTypeAny>, "strip", z.ZodTypeAny, {
103
- [x: string]: any;
104
- }, {
105
- [x: string]: any;
106
- }>;
102
+ getValidationSchema: () => z.ZodObject<{
103
+ [x: string]: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
104
+ }, z.core.$strip>;
107
105
  fieldsRef: import('react').RefObject<Map<string, FieldRegistration>>;
108
106
  };
109
107
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/components/Form/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/components/Form/context.ts"],"names":[],"mappings":"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"}