@timeax/form-palette 0.0.2 → 0.0.4

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 (503) hide show
  1. package/dist/adapters/axios.d.ts +21 -0
  2. package/dist/adapters/axios.d.ts.map +1 -0
  3. package/dist/adapters/axios.js +74 -0
  4. package/dist/adapters/axios.js.map +1 -0
  5. package/dist/adapters/index.d.ts +35 -0
  6. package/dist/adapters/index.d.ts.map +1 -0
  7. package/dist/adapters/index.js +74 -0
  8. package/dist/adapters/index.js.map +1 -0
  9. package/dist/adapters/inertia.d.ts +24 -0
  10. package/dist/adapters/inertia.d.ts.map +1 -0
  11. package/dist/adapters/inertia.js +126 -0
  12. package/dist/adapters/inertia.js.map +1 -0
  13. package/dist/core/adapter-registry.d.ts +30 -0
  14. package/dist/core/adapter-registry.d.ts.map +1 -0
  15. package/{src/core/adapter-registry.ts → dist/core/adapter-registry.js} +10 -28
  16. package/dist/core/adapter-registry.js.map +1 -0
  17. package/{src/core/bound/bind-host.ts → dist/core/bound/bind-host.d.ts} +2 -3
  18. package/dist/core/bound/bind-host.d.ts.map +1 -0
  19. package/dist/core/bound/bind-host.js +2 -0
  20. package/dist/core/bound/bind-host.js.map +1 -0
  21. package/dist/core/bound/observe-bound-field.d.ts +21 -0
  22. package/dist/core/bound/observe-bound-field.d.ts.map +1 -0
  23. package/dist/core/bound/observe-bound-field.js +116 -0
  24. package/dist/core/bound/observe-bound-field.js.map +1 -0
  25. package/dist/core/bound/wait-for-bound-field.d.ts +5 -0
  26. package/dist/core/bound/wait-for-bound-field.d.ts.map +1 -0
  27. package/dist/core/bound/wait-for-bound-field.js +35 -0
  28. package/dist/core/bound/wait-for-bound-field.js.map +1 -0
  29. package/{src/core/context.ts → dist/core/context.d.ts} +2 -6
  30. package/dist/core/context.d.ts.map +1 -0
  31. package/dist/core/context.js +11 -0
  32. package/dist/core/context.js.map +1 -0
  33. package/dist/core/core-provider.d.ts +22 -0
  34. package/dist/core/core-provider.d.ts.map +1 -0
  35. package/{src/core/core-provider.tsx → dist/core/core-provider.js} +209 -364
  36. package/dist/core/core-provider.js.map +1 -0
  37. package/dist/core/core-root.d.ts +26 -0
  38. package/dist/core/core-root.d.ts.map +1 -0
  39. package/dist/core/core-root.js +38 -0
  40. package/dist/core/core-root.js.map +1 -0
  41. package/dist/core/core-shell.d.ts +22 -0
  42. package/dist/core/core-shell.d.ts.map +1 -0
  43. package/dist/core/core-shell.js +8 -0
  44. package/dist/core/core-shell.js.map +1 -0
  45. package/{src/core/errors/error-strip.tsx → dist/core/errors/error-strip.d.ts} +2 -39
  46. package/dist/core/errors/error-strip.d.ts.map +1 -0
  47. package/dist/core/errors/error-strip.js +18 -0
  48. package/dist/core/errors/error-strip.js.map +1 -0
  49. package/dist/core/errors/index.d.ts +4 -0
  50. package/dist/core/errors/index.d.ts.map +1 -0
  51. package/dist/core/errors/index.js +4 -0
  52. package/dist/core/errors/index.js.map +1 -0
  53. package/dist/core/errors/map-error-bag.d.ts +24 -0
  54. package/dist/core/errors/map-error-bag.d.ts.map +1 -0
  55. package/{src/core/errors/map-error-bag.ts → dist/core/errors/map-error-bag.js} +10 -22
  56. package/dist/core/errors/map-error-bag.js.map +1 -0
  57. package/dist/core/errors/map-zod.d.ts +18 -0
  58. package/dist/core/errors/map-zod.d.ts.map +1 -0
  59. package/{src/core/errors/map-zod.ts → dist/core/errors/map-zod.js} +7 -19
  60. package/dist/core/errors/map-zod.js.map +1 -0
  61. package/dist/core/hooks/use-button.d.ts +73 -0
  62. package/dist/core/hooks/use-button.d.ts.map +1 -0
  63. package/dist/core/hooks/use-button.js +116 -0
  64. package/dist/core/hooks/use-button.js.map +1 -0
  65. package/dist/core/hooks/use-core-context.d.ts +9 -0
  66. package/dist/core/hooks/use-core-context.d.ts.map +1 -0
  67. package/{src/core/hooks/use-core-context.ts → dist/core/hooks/use-core-context.js} +3 -6
  68. package/dist/core/hooks/use-core-context.js.map +1 -0
  69. package/dist/core/hooks/use-core-utility.d.ts +1 -0
  70. package/dist/core/hooks/use-core-utility.d.ts.map +1 -0
  71. package/dist/core/hooks/use-core-utility.js +2 -0
  72. package/dist/core/hooks/use-core-utility.js.map +1 -0
  73. package/{src/core/hooks/use-core.ts → dist/core/hooks/use-core.d.ts} +9 -13
  74. package/dist/core/hooks/use-core.d.ts.map +1 -0
  75. package/dist/core/hooks/use-core.js +11 -0
  76. package/dist/core/hooks/use-core.js.map +1 -0
  77. package/dist/core/hooks/use-field.d.ts +141 -0
  78. package/dist/core/hooks/use-field.d.ts.map +1 -0
  79. package/dist/core/hooks/use-field.js +256 -0
  80. package/dist/core/hooks/use-field.js.map +1 -0
  81. package/dist/core/hooks/use-optional-field.d.ts +9 -0
  82. package/dist/core/hooks/use-optional-field.d.ts.map +1 -0
  83. package/dist/core/hooks/use-optional-field.js +146 -0
  84. package/dist/core/hooks/use-optional-field.js.map +1 -0
  85. package/dist/core/index.d.ts +11 -0
  86. package/dist/core/index.d.ts.map +1 -0
  87. package/dist/core/index.js +11 -0
  88. package/dist/core/index.js.map +1 -0
  89. package/dist/core/registry/binder-registry.d.ts +38 -0
  90. package/dist/core/registry/binder-registry.d.ts.map +1 -0
  91. package/dist/core/registry/binder-registry.js +52 -0
  92. package/dist/core/registry/binder-registry.js.map +1 -0
  93. package/dist/core/registry/field-registry.d.ts +86 -0
  94. package/dist/core/registry/field-registry.d.ts.map +1 -0
  95. package/{src/core/registry/field-registry.ts → dist/core/registry/field-registry.js} +56 -70
  96. package/dist/core/registry/field-registry.js.map +1 -0
  97. package/dist/core/test.d.ts +2 -0
  98. package/dist/core/test.d.ts.map +1 -0
  99. package/dist/core/test.js +9 -0
  100. package/dist/core/test.js.map +1 -0
  101. package/dist/index.d.ts +15 -0
  102. package/dist/index.d.ts.map +1 -0
  103. package/{src/index.ts → dist/index.js} +5 -47
  104. package/dist/index.js.map +1 -0
  105. package/{src/input/index.ts → dist/input/index.d.ts} +1 -2
  106. package/dist/input/index.d.ts.map +1 -0
  107. package/dist/input/index.js +3 -0
  108. package/dist/input/index.js.map +1 -0
  109. package/dist/input/input-field.d.ts +15 -0
  110. package/dist/input/input-field.d.ts.map +1 -0
  111. package/dist/input/input-field.js +413 -0
  112. package/dist/input/input-field.js.map +1 -0
  113. package/dist/input/input-layout-graph.d.ts +77 -0
  114. package/dist/input/input-layout-graph.d.ts.map +1 -0
  115. package/dist/input/input-layout-graph.js +108 -0
  116. package/dist/input/input-layout-graph.js.map +1 -0
  117. package/{src/input/input-props.ts → dist/input/input-props.d.ts} +22 -84
  118. package/dist/input/input-props.d.ts.map +1 -0
  119. package/dist/input/input-props.js +4 -0
  120. package/dist/input/input-props.js.map +1 -0
  121. package/dist/lib/get-global-countries.d.ts +3 -0
  122. package/dist/lib/get-global-countries.d.ts.map +1 -0
  123. package/dist/lib/get-global-countries.js +70 -0
  124. package/dist/lib/get-global-countries.js.map +1 -0
  125. package/dist/lib/utils.d.ts +3 -0
  126. package/dist/lib/utils.d.ts.map +1 -0
  127. package/dist/lib/utils.js +6 -0
  128. package/dist/lib/utils.js.map +1 -0
  129. package/dist/presets/index.d.ts +1 -0
  130. package/dist/presets/index.d.ts.map +1 -0
  131. package/dist/presets/index.js +2 -0
  132. package/dist/presets/index.js.map +1 -0
  133. package/dist/presets/shadcn-preset.d.ts +1 -0
  134. package/dist/presets/shadcn-preset.d.ts.map +1 -0
  135. package/dist/presets/shadcn-preset.js +2 -0
  136. package/dist/presets/shadcn-preset.js.map +1 -0
  137. package/dist/presets/shadcn-variants/checkbox.d.ts +212 -0
  138. package/dist/presets/shadcn-variants/checkbox.d.ts.map +1 -0
  139. package/dist/presets/shadcn-variants/checkbox.js +315 -0
  140. package/dist/presets/shadcn-variants/checkbox.js.map +1 -0
  141. package/dist/presets/shadcn-variants/chips.d.ts +154 -0
  142. package/dist/presets/shadcn-variants/chips.d.ts.map +1 -0
  143. package/dist/presets/shadcn-variants/chips.js +266 -0
  144. package/dist/presets/shadcn-variants/chips.js.map +1 -0
  145. package/dist/presets/shadcn-variants/color.d.ts +63 -0
  146. package/dist/presets/shadcn-variants/color.d.ts.map +1 -0
  147. package/dist/presets/shadcn-variants/color.js +96 -0
  148. package/dist/presets/shadcn-variants/color.js.map +1 -0
  149. package/dist/presets/shadcn-variants/custom.d.ts +94 -0
  150. package/dist/presets/shadcn-variants/custom.d.ts.map +1 -0
  151. package/dist/presets/shadcn-variants/custom.js +80 -0
  152. package/dist/presets/shadcn-variants/custom.js.map +1 -0
  153. package/dist/presets/shadcn-variants/date.d.ts +114 -0
  154. package/dist/presets/shadcn-variants/date.d.ts.map +1 -0
  155. package/dist/presets/shadcn-variants/date.js +414 -0
  156. package/dist/presets/shadcn-variants/date.js.map +1 -0
  157. package/dist/presets/shadcn-variants/file.d.ts +79 -0
  158. package/dist/presets/shadcn-variants/file.d.ts.map +1 -0
  159. package/dist/presets/shadcn-variants/file.js +289 -0
  160. package/dist/presets/shadcn-variants/file.js.map +1 -0
  161. package/dist/presets/shadcn-variants/keyvalue.d.ts +35 -0
  162. package/dist/presets/shadcn-variants/keyvalue.d.ts.map +1 -0
  163. package/dist/presets/shadcn-variants/keyvalue.js +215 -0
  164. package/dist/presets/shadcn-variants/keyvalue.js.map +1 -0
  165. package/dist/presets/shadcn-variants/multiselect.d.ts +210 -0
  166. package/dist/presets/shadcn-variants/multiselect.d.ts.map +1 -0
  167. package/dist/presets/shadcn-variants/multiselect.js +352 -0
  168. package/dist/presets/shadcn-variants/multiselect.js.map +1 -0
  169. package/dist/presets/shadcn-variants/number.d.ts +31 -0
  170. package/dist/presets/shadcn-variants/number.d.ts.map +1 -0
  171. package/dist/presets/shadcn-variants/number.js +64 -0
  172. package/dist/presets/shadcn-variants/number.js.map +1 -0
  173. package/dist/presets/shadcn-variants/password.d.ts +195 -0
  174. package/dist/presets/shadcn-variants/password.d.ts.map +1 -0
  175. package/dist/presets/shadcn-variants/password.js +296 -0
  176. package/dist/presets/shadcn-variants/password.js.map +1 -0
  177. package/dist/presets/shadcn-variants/phone.d.ts +69 -0
  178. package/dist/presets/shadcn-variants/phone.d.ts.map +1 -0
  179. package/dist/presets/shadcn-variants/phone.js +308 -0
  180. package/dist/presets/shadcn-variants/phone.js.map +1 -0
  181. package/dist/presets/shadcn-variants/radio.d.ts +172 -0
  182. package/dist/presets/shadcn-variants/radio.d.ts.map +1 -0
  183. package/dist/presets/shadcn-variants/radio.js +192 -0
  184. package/dist/presets/shadcn-variants/radio.js.map +1 -0
  185. package/dist/presets/shadcn-variants/select.d.ts +203 -0
  186. package/dist/presets/shadcn-variants/select.d.ts.map +1 -0
  187. package/dist/presets/shadcn-variants/select.js +285 -0
  188. package/dist/presets/shadcn-variants/select.js.map +1 -0
  189. package/dist/presets/shadcn-variants/slider.d.ts +131 -0
  190. package/dist/presets/shadcn-variants/slider.d.ts.map +1 -0
  191. package/dist/presets/shadcn-variants/slider.js +151 -0
  192. package/dist/presets/shadcn-variants/slider.js.map +1 -0
  193. package/dist/presets/shadcn-variants/text.d.ts +155 -0
  194. package/dist/presets/shadcn-variants/text.d.ts.map +1 -0
  195. package/dist/presets/shadcn-variants/text.js +98 -0
  196. package/dist/presets/shadcn-variants/text.js.map +1 -0
  197. package/dist/presets/shadcn-variants/textarea.d.ts +18 -0
  198. package/dist/presets/shadcn-variants/textarea.d.ts.map +1 -0
  199. package/dist/presets/shadcn-variants/textarea.js +24 -0
  200. package/dist/presets/shadcn-variants/textarea.js.map +1 -0
  201. package/dist/presets/shadcn-variants/toggle.d.ts +61 -0
  202. package/dist/presets/shadcn-variants/toggle.d.ts.map +1 -0
  203. package/dist/presets/shadcn-variants/toggle.js +67 -0
  204. package/dist/presets/shadcn-variants/toggle.js.map +1 -0
  205. package/dist/presets/shadcn-variants/treeselect.d.ts +81 -0
  206. package/dist/presets/shadcn-variants/treeselect.d.ts.map +1 -0
  207. package/dist/presets/shadcn-variants/treeselect.js +317 -0
  208. package/dist/presets/shadcn-variants/treeselect.js.map +1 -0
  209. package/dist/presets/ui/badge.d.ts +10 -0
  210. package/dist/presets/ui/badge.d.ts.map +1 -0
  211. package/dist/presets/ui/badge.js +23 -0
  212. package/dist/presets/ui/badge.js.map +1 -0
  213. package/dist/presets/ui/button.d.ts +11 -0
  214. package/dist/presets/ui/button.d.ts.map +1 -0
  215. package/dist/presets/ui/button.js +34 -0
  216. package/dist/presets/ui/button.js.map +1 -0
  217. package/dist/presets/ui/calendar.d.ts +9 -0
  218. package/dist/presets/ui/calendar.d.ts.map +1 -0
  219. package/dist/presets/ui/calendar.js +76 -0
  220. package/dist/presets/ui/calendar.js.map +1 -0
  221. package/dist/presets/ui/checkbox.d.ts +18 -0
  222. package/dist/presets/ui/checkbox.d.ts.map +1 -0
  223. package/dist/presets/ui/checkbox.js +61 -0
  224. package/dist/presets/ui/checkbox.js.map +1 -0
  225. package/dist/presets/ui/custom.d.ts +1 -0
  226. package/dist/presets/ui/custom.d.ts.map +1 -0
  227. package/dist/presets/ui/custom.js +2 -0
  228. package/dist/presets/ui/custom.js.map +1 -0
  229. package/dist/presets/ui/dialog.d.ts +16 -0
  230. package/dist/presets/ui/dialog.d.ts.map +1 -0
  231. package/dist/presets/ui/dialog.js +36 -0
  232. package/dist/presets/ui/dialog.js.map +1 -0
  233. package/dist/presets/ui/field.d.ts +25 -0
  234. package/dist/presets/ui/field.d.ts.map +1 -0
  235. package/dist/presets/ui/field.js +76 -0
  236. package/dist/presets/ui/field.js.map +1 -0
  237. package/dist/presets/ui/input-mask.d.ts +34 -0
  238. package/dist/presets/ui/input-mask.d.ts.map +1 -0
  239. package/dist/presets/ui/input-mask.js +561 -0
  240. package/dist/presets/ui/input-mask.js.map +1 -0
  241. package/dist/presets/ui/input-otp.d.ts +12 -0
  242. package/dist/presets/ui/input-otp.d.ts.map +1 -0
  243. package/dist/presets/ui/input-otp.js +22 -0
  244. package/dist/presets/ui/input-otp.js.map +1 -0
  245. package/dist/presets/ui/input.d.ts +83 -0
  246. package/dist/presets/ui/input.d.ts.map +1 -0
  247. package/dist/presets/ui/input.js +436 -0
  248. package/dist/presets/ui/input.js.map +1 -0
  249. package/dist/presets/ui/label.d.ts +5 -0
  250. package/dist/presets/ui/label.d.ts.map +1 -0
  251. package/dist/presets/ui/label.js +8 -0
  252. package/dist/presets/ui/label.js.map +1 -0
  253. package/dist/presets/ui/number.d.ts +60 -0
  254. package/dist/presets/ui/number.d.ts.map +1 -0
  255. package/dist/presets/ui/number.js +1078 -0
  256. package/dist/presets/ui/number.js.map +1 -0
  257. package/dist/presets/ui/popover.d.ts +8 -0
  258. package/dist/presets/ui/popover.d.ts.map +1 -0
  259. package/dist/presets/ui/popover.js +17 -0
  260. package/dist/presets/ui/popover.js.map +1 -0
  261. package/dist/presets/ui/radio-group.d.ts +6 -0
  262. package/dist/presets/ui/radio-group.d.ts.map +1 -0
  263. package/dist/presets/ui/radio-group.js +12 -0
  264. package/dist/presets/ui/radio-group.js.map +1 -0
  265. package/dist/presets/ui/scroll-area.d.ts +6 -0
  266. package/dist/presets/ui/scroll-area.d.ts.map +1 -0
  267. package/dist/presets/ui/scroll-area.js +13 -0
  268. package/dist/presets/ui/scroll-area.js.map +1 -0
  269. package/dist/presets/ui/select.d.ts +21 -0
  270. package/dist/presets/ui/select.d.ts.map +1 -0
  271. package/dist/presets/ui/select.js +38 -0
  272. package/dist/presets/ui/select.js.map +1 -0
  273. package/dist/presets/ui/separator.d.ts +5 -0
  274. package/dist/presets/ui/separator.d.ts.map +1 -0
  275. package/dist/presets/ui/separator.js +9 -0
  276. package/dist/presets/ui/separator.js.map +1 -0
  277. package/dist/presets/ui/slider.d.ts +5 -0
  278. package/dist/presets/ui/slider.d.ts.map +1 -0
  279. package/dist/presets/ui/slider.js +14 -0
  280. package/dist/presets/ui/slider.js.map +1 -0
  281. package/dist/presets/ui/switch.d.ts +7 -0
  282. package/dist/presets/ui/switch.d.ts.map +1 -0
  283. package/dist/presets/ui/switch.js +9 -0
  284. package/dist/presets/ui/switch.js.map +1 -0
  285. package/dist/presets/ui/textarea.d.ts +76 -0
  286. package/dist/presets/ui/textarea.d.ts.map +1 -0
  287. package/dist/presets/ui/textarea.js +291 -0
  288. package/dist/presets/ui/textarea.js.map +1 -0
  289. package/dist/presets/ui/time-dropdowns.d.ts +58 -0
  290. package/dist/presets/ui/time-dropdowns.d.ts.map +1 -0
  291. package/dist/presets/ui/time-dropdowns.js +133 -0
  292. package/dist/presets/ui/time-dropdowns.js.map +1 -0
  293. package/{src/schema/adapter.ts → dist/schema/adapter.d.ts} +7 -35
  294. package/dist/schema/adapter.d.ts.map +1 -0
  295. package/dist/schema/adapter.js +3 -0
  296. package/dist/schema/adapter.js.map +1 -0
  297. package/{src/schema/core.ts → dist/schema/core.d.ts} +17 -117
  298. package/dist/schema/core.d.ts.map +1 -0
  299. package/dist/schema/core.js +4 -0
  300. package/dist/schema/core.js.map +1 -0
  301. package/dist/schema/field-map.d.ts +1 -0
  302. package/dist/schema/field-map.d.ts.map +1 -0
  303. package/dist/schema/field-map.js +2 -0
  304. package/dist/schema/field-map.js.map +1 -0
  305. package/{src/schema/field.ts → dist/schema/field.d.ts} +1 -34
  306. package/dist/schema/field.d.ts.map +1 -0
  307. package/dist/schema/field.js +4 -0
  308. package/dist/schema/field.js.map +1 -0
  309. package/dist/schema/index.d.ts +1 -0
  310. package/dist/schema/index.d.ts.map +1 -0
  311. package/dist/schema/index.js +2 -0
  312. package/dist/schema/index.js.map +1 -0
  313. package/{src/schema/input-field.ts → dist/schema/input-field.d.ts} +6 -43
  314. package/dist/schema/input-field.d.ts.map +1 -0
  315. package/dist/schema/input-field.js +3 -0
  316. package/dist/schema/input-field.js.map +1 -0
  317. package/dist/schema/presets.d.ts +1 -0
  318. package/dist/schema/presets.d.ts.map +1 -0
  319. package/dist/schema/presets.js +2 -0
  320. package/dist/schema/presets.js.map +1 -0
  321. package/{src/schema/variant.ts → dist/schema/variant.d.ts} +24 -64
  322. package/dist/schema/variant.d.ts.map +1 -0
  323. package/dist/schema/variant.js +3 -0
  324. package/dist/schema/variant.js.map +1 -0
  325. package/dist/variants/core/checkbox.d.ts +15 -0
  326. package/dist/variants/core/checkbox.d.ts.map +1 -0
  327. package/dist/variants/core/checkbox.js +27 -0
  328. package/dist/variants/core/checkbox.js.map +1 -0
  329. package/dist/variants/core/chips.d.ts +3 -0
  330. package/dist/variants/core/chips.d.ts.map +1 -0
  331. package/dist/variants/core/chips.js +20 -0
  332. package/dist/variants/core/chips.js.map +1 -0
  333. package/dist/variants/core/color.d.ts +3 -0
  334. package/dist/variants/core/color.d.ts.map +1 -0
  335. package/dist/variants/core/color.js +14 -0
  336. package/dist/variants/core/color.js.map +1 -0
  337. package/dist/variants/core/custom.d.ts +11 -0
  338. package/dist/variants/core/custom.d.ts.map +1 -0
  339. package/{src/variants/core/custom.tsx → dist/variants/core/custom.js} +15 -18
  340. package/dist/variants/core/custom.js.map +1 -0
  341. package/dist/variants/core/date.d.ts +3 -0
  342. package/dist/variants/core/date.d.ts.map +1 -0
  343. package/dist/variants/core/date.js +20 -0
  344. package/dist/variants/core/date.js.map +1 -0
  345. package/dist/variants/core/file.d.ts +3 -0
  346. package/dist/variants/core/file.d.ts.map +1 -0
  347. package/dist/variants/core/file.js +6 -0
  348. package/dist/variants/core/file.js.map +1 -0
  349. package/dist/variants/core/keyvalue.d.ts +3 -0
  350. package/dist/variants/core/keyvalue.d.ts.map +1 -0
  351. package/dist/variants/core/keyvalue.js +9 -0
  352. package/dist/variants/core/keyvalue.js.map +1 -0
  353. package/dist/variants/core/multiselect.d.ts +11 -0
  354. package/dist/variants/core/multiselect.d.ts.map +1 -0
  355. package/dist/variants/core/multiselect.js +15 -0
  356. package/dist/variants/core/multiselect.js.map +1 -0
  357. package/dist/variants/core/number.d.ts +38 -0
  358. package/dist/variants/core/number.d.ts.map +1 -0
  359. package/dist/variants/core/number.js +62 -0
  360. package/dist/variants/core/number.js.map +1 -0
  361. package/dist/variants/core/password.d.ts +11 -0
  362. package/dist/variants/core/password.d.ts.map +1 -0
  363. package/dist/variants/core/password.js +29 -0
  364. package/dist/variants/core/password.js.map +1 -0
  365. package/dist/variants/core/phone.d.ts +3 -0
  366. package/dist/variants/core/phone.d.ts.map +1 -0
  367. package/dist/variants/core/phone.js +14 -0
  368. package/dist/variants/core/phone.js.map +1 -0
  369. package/dist/variants/core/radio.d.ts +8 -0
  370. package/dist/variants/core/radio.d.ts.map +1 -0
  371. package/dist/variants/core/radio.js +34 -0
  372. package/dist/variants/core/radio.js.map +1 -0
  373. package/dist/variants/core/select.d.ts +5 -0
  374. package/dist/variants/core/select.d.ts.map +1 -0
  375. package/dist/variants/core/select.js +11 -0
  376. package/dist/variants/core/select.js.map +1 -0
  377. package/dist/variants/core/slider.d.ts +19 -0
  378. package/dist/variants/core/slider.d.ts.map +1 -0
  379. package/dist/variants/core/slider.js +36 -0
  380. package/dist/variants/core/slider.js.map +1 -0
  381. package/dist/variants/core/text.d.ts +38 -0
  382. package/dist/variants/core/text.d.ts.map +1 -0
  383. package/{src/variants/core/text.tsx → dist/variants/core/text.js} +4 -56
  384. package/dist/variants/core/text.js.map +1 -0
  385. package/dist/variants/core/textarea.d.ts +3 -0
  386. package/dist/variants/core/textarea.d.ts.map +1 -0
  387. package/dist/variants/core/textarea.js +20 -0
  388. package/dist/variants/core/textarea.js.map +1 -0
  389. package/dist/variants/core/toggle.d.ts +6 -0
  390. package/dist/variants/core/toggle.d.ts.map +1 -0
  391. package/dist/variants/core/toggle.js +41 -0
  392. package/dist/variants/core/toggle.js.map +1 -0
  393. package/dist/variants/core/treeselect.d.ts +4 -0
  394. package/dist/variants/core/treeselect.d.ts.map +1 -0
  395. package/dist/variants/core/treeselect.js +7 -0
  396. package/dist/variants/core/treeselect.js.map +1 -0
  397. package/dist/variants/helpers/selection-summary.d.ts +24 -0
  398. package/dist/variants/helpers/selection-summary.d.ts.map +1 -0
  399. package/dist/variants/helpers/selection-summary.js +105 -0
  400. package/dist/variants/helpers/selection-summary.js.map +1 -0
  401. package/dist/variants/index.d.ts +16 -0
  402. package/dist/variants/index.d.ts.map +1 -0
  403. package/{src/variants/index.ts → dist/variants/index.js} +7 -27
  404. package/dist/variants/index.js.map +1 -0
  405. package/dist/variants/registry.d.ts +19 -0
  406. package/dist/variants/registry.d.ts.map +1 -0
  407. package/dist/variants/registry.js +29 -0
  408. package/dist/variants/registry.js.map +1 -0
  409. package/dist/variants/select-shared.d.ts +1 -0
  410. package/dist/variants/select-shared.d.ts.map +1 -0
  411. package/dist/variants/select-shared.js +2 -0
  412. package/dist/variants/select-shared.js.map +1 -0
  413. package/{src/variants/shared.ts → dist/variants/shared.d.ts} +3 -22
  414. package/dist/variants/shared.d.ts.map +1 -0
  415. package/dist/variants/shared.js +3 -0
  416. package/dist/variants/shared.js.map +1 -0
  417. package/package.json +5 -5
  418. package/.scaffold-cache.json +0 -537
  419. package/src/.scaffold-cache.json +0 -544
  420. package/src/adapters/axios.ts +0 -117
  421. package/src/adapters/index.ts +0 -91
  422. package/src/adapters/inertia.ts +0 -187
  423. package/src/core/bound/observe-bound-field.ts +0 -172
  424. package/src/core/bound/wait-for-bound-field.ts +0 -57
  425. package/src/core/core-root.tsx +0 -72
  426. package/src/core/core-shell.tsx +0 -44
  427. package/src/core/errors/index.ts +0 -2
  428. package/src/core/hooks/use-button.ts +0 -220
  429. package/src/core/hooks/use-core-utility.ts +0 -0
  430. package/src/core/hooks/use-field.ts +0 -497
  431. package/src/core/hooks/use-optional-field.ts +0 -28
  432. package/src/core/index.ts +0 -0
  433. package/src/core/registry/binder-registry.ts +0 -82
  434. package/src/core/test.tsx +0 -17
  435. package/src/global.d.ts +0 -14
  436. package/src/input/input-field.tsx +0 -854
  437. package/src/input/input-layout-graph.ts +0 -230
  438. package/src/lib/get-global-countries.ts +0 -87
  439. package/src/lib/utils.ts +0 -6
  440. package/src/presets/index.ts +0 -0
  441. package/src/presets/shadcn-preset.ts +0 -0
  442. package/src/presets/shadcn-variants/checkbox.tsx +0 -849
  443. package/src/presets/shadcn-variants/chips.tsx +0 -756
  444. package/src/presets/shadcn-variants/color.tsx +0 -284
  445. package/src/presets/shadcn-variants/custom.tsx +0 -227
  446. package/src/presets/shadcn-variants/date.tsx +0 -796
  447. package/src/presets/shadcn-variants/file.tsx +0 -764
  448. package/src/presets/shadcn-variants/keyvalue.tsx +0 -556
  449. package/src/presets/shadcn-variants/multiselect.tsx +0 -1132
  450. package/src/presets/shadcn-variants/number.tsx +0 -176
  451. package/src/presets/shadcn-variants/password.tsx +0 -737
  452. package/src/presets/shadcn-variants/phone.tsx +0 -628
  453. package/src/presets/shadcn-variants/radio.tsx +0 -578
  454. package/src/presets/shadcn-variants/select.tsx +0 -956
  455. package/src/presets/shadcn-variants/slider.tsx +0 -622
  456. package/src/presets/shadcn-variants/text.tsx +0 -343
  457. package/src/presets/shadcn-variants/textarea.tsx +0 -66
  458. package/src/presets/shadcn-variants/toggle.tsx +0 -218
  459. package/src/presets/shadcn-variants/treeselect.tsx +0 -784
  460. package/src/presets/ui/badge.tsx +0 -46
  461. package/src/presets/ui/button.tsx +0 -60
  462. package/src/presets/ui/calendar.tsx +0 -214
  463. package/src/presets/ui/checkbox.tsx +0 -115
  464. package/src/presets/ui/custom.tsx +0 -0
  465. package/src/presets/ui/dialog.tsx +0 -141
  466. package/src/presets/ui/field.tsx +0 -246
  467. package/src/presets/ui/input-mask.tsx +0 -739
  468. package/src/presets/ui/input-otp.tsx +0 -77
  469. package/src/presets/ui/input.tsx +0 -1011
  470. package/src/presets/ui/label.tsx +0 -22
  471. package/src/presets/ui/number.tsx +0 -1370
  472. package/src/presets/ui/popover.tsx +0 -46
  473. package/src/presets/ui/radio-group.tsx +0 -43
  474. package/src/presets/ui/scroll-area.tsx +0 -56
  475. package/src/presets/ui/select.tsx +0 -190
  476. package/src/presets/ui/separator.tsx +0 -28
  477. package/src/presets/ui/slider.tsx +0 -61
  478. package/src/presets/ui/switch.tsx +0 -32
  479. package/src/presets/ui/textarea.tsx +0 -634
  480. package/src/presets/ui/time-dropdowns.tsx +0 -350
  481. package/src/schema/field-map.ts +0 -0
  482. package/src/schema/index.ts +0 -0
  483. package/src/schema/presets.ts +0 -0
  484. package/src/variants/core/checkbox.tsx +0 -54
  485. package/src/variants/core/chips.tsx +0 -22
  486. package/src/variants/core/color.tsx +0 -16
  487. package/src/variants/core/date.tsx +0 -25
  488. package/src/variants/core/file.tsx +0 -9
  489. package/src/variants/core/keyvalue.tsx +0 -12
  490. package/src/variants/core/multiselect.tsx +0 -28
  491. package/src/variants/core/number.tsx +0 -115
  492. package/src/variants/core/password.tsx +0 -35
  493. package/src/variants/core/phone.tsx +0 -16
  494. package/src/variants/core/radio.tsx +0 -38
  495. package/src/variants/core/select.tsx +0 -15
  496. package/src/variants/core/slider.tsx +0 -55
  497. package/src/variants/core/textarea.tsx +0 -22
  498. package/src/variants/core/toggle.tsx +0 -50
  499. package/src/variants/core/treeselect.tsx +0 -11
  500. package/src/variants/helpers/selection-summary.tsx +0 -236
  501. package/src/variants/registry.ts +0 -38
  502. package/src/variants/select-shared.ts +0 -0
  503. package/tsconfig.json +0 -14
@@ -1,220 +0,0 @@
1
- // src/core/hooks/use-button.ts
2
- // noinspection JSUnusedGlobalSymbols
3
-
4
- import * as React from "react";
5
-
6
- import { useCoreContext } from "@/core/hooks/use-core-context";
7
- import type { CoreContext, Dict } from "@/schema/core";
8
- import type { ButtonRef } from "@/schema/field";
9
-
10
- export interface UseButtonOptions {
11
- /**
12
- * Logical name of the button.
13
- *
14
- * Used by the core to:
15
- * - mark this as the "active" button before submit
16
- * - toggle loading/disabled specifically for this button
17
- */
18
- name: string;
19
-
20
- /**
21
- * If true, clicking this button should trigger a submit:
22
- *
23
- * - form.setActiveButton(name)
24
- * - form.go()
25
- */
26
- submit?: boolean;
27
-
28
- /**
29
- * Initial disabled state.
30
- */
31
- disabled?: boolean;
32
-
33
- /**
34
- * Optional click handler.
35
- *
36
- * This runs *in addition to* the submit behavior (if `submit` is true).
37
- * You can call `event.preventDefault()` to prevent the auto-submit.
38
- */
39
- onClick?(
40
- event: React.MouseEvent<HTMLButtonElement>,
41
- form: CoreContext<Dict>
42
- ): void | Promise<void>;
43
- }
44
-
45
- export interface UseButtonReturn {
46
- /**
47
- * Current loading state, controlled by the core (via adapters) and
48
- * optionally by the host via setLoading.
49
- */
50
- loading: boolean;
51
- setLoading(loading: boolean): void;
52
-
53
- /**
54
- * Current disabled state.
55
- */
56
- disabled: boolean;
57
- setDisabled(disabled: boolean): void;
58
-
59
- /**
60
- * Ref for the underlying <button>.
61
- */
62
- ref: React.RefObject<HTMLButtonElement>;
63
-
64
- /**
65
- * Click handler wired to the core.
66
- */
67
- onClick(event: React.MouseEvent<HTMLButtonElement>): void;
68
-
69
- /**
70
- * Convenience bundle for spreading onto a <button>.
71
- *
72
- * Example:
73
- * const btn = useButton({ name: "save", submit: true });
74
- * return <button {...btn.buttonProps}>Save</button>;
75
- */
76
- buttonProps: {
77
- ref: React.RefObject<HTMLButtonElement>;
78
- disabled: boolean;
79
- "data-loading"?: "true" | "false";
80
- onClick(event: React.MouseEvent<HTMLButtonElement>): void;
81
- };
82
- }
83
-
84
- /**
85
- * useButton
86
- *
87
- * - Registers a ButtonRef with the core.
88
- * - Cooperates with setActiveButton + adapter-based submit.
89
- * - Handles loading/disabled toggling via the core's callbacks.
90
- */
91
- export function useButton(options: UseButtonOptions): UseButtonReturn {
92
- const form = useCoreContext<Dict>();
93
-
94
- const { name, submit, disabled: disabledProp = false, onClick } = options;
95
-
96
- const [loading, setLoadingState] = React.useState<boolean>(false);
97
- const [disabled, setDisabledState] = React.useState<boolean>(
98
- Boolean(disabledProp)
99
- );
100
-
101
- const ref = React.useRef<HTMLButtonElement>(null);
102
-
103
- // Keep latest options for callbacks
104
- const optsRef = React.useRef<UseButtonOptions>(options);
105
- React.useEffect(() => {
106
- optsRef.current = options;
107
- }, [options]);
108
-
109
- // Build the ButtonRef once
110
- const buttonRef = React.useRef<ButtonRef | (ButtonRef & any) | null>(null);
111
-
112
- if (!buttonRef.current) {
113
- // @ts-ignore
114
- const btn: ButtonRef & {
115
- loading: boolean;
116
- disabled: boolean;
117
- setLoading?(v: boolean): void;
118
- setDisabled?(v: boolean): void;
119
- ref?: React.RefObject<HTMLButtonElement>;
120
- } = {
121
- name,
122
- // Accessor for "loading" as required by ButtonRef
123
- set loading(v: boolean) {
124
- setLoadingState(v);
125
- },
126
- // Accessor for "disable" (note: interface uses `disable`, not `disabled`)
127
- //@ts-ignore
128
- set disable(v: boolean) {
129
- setDisabledState(v);
130
- },
131
- // Extra properties used by CoreProvider via any-casts
132
- get loading() {
133
- return loading;
134
- },
135
- setDisabled(v: boolean) {
136
- setDisabledState(v);
137
- },
138
- get disabled() {
139
- return disabled;
140
- },
141
- ref,
142
- };
143
-
144
- // Also expose setLoading for CoreProvider's convenience
145
- (btn as any).setLoading = (v: boolean) => {
146
- setLoadingState(v);
147
- };
148
-
149
- buttonRef.current = btn;
150
- }
151
-
152
- // Keep mutable button properties in sync when name changes
153
- React.useEffect(() => {
154
- if (!buttonRef.current) return;
155
- buttonRef.current.name = name;
156
- }, [name]);
157
-
158
- // Register this button with the core
159
- React.useEffect(() => {
160
- if (!buttonRef.current) return;
161
-
162
- // Expose to the core runtime so submitWithAdapter can toggle loading.
163
- (form as any).button = buttonRef.current;
164
-
165
- return () => {
166
- // On unmount, if the core still points to this button,
167
- // we simply clear it.
168
- const anyForm = form as any;
169
- if (anyForm.button === buttonRef.current) {
170
- anyForm.button = null;
171
- }
172
- };
173
- // eslint-disable-next-line react-hooks/exhaustive-deps
174
- }, [form]);
175
-
176
- const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
177
- const currentOpts = optsRef.current;
178
- const shouldSubmit = !!currentOpts.submit;
179
-
180
- // Host-level handler first
181
- if (currentOpts.onClick) {
182
- currentOpts.onClick(event, form);
183
- }
184
-
185
- if (event.defaultPrevented) {
186
- return;
187
- }
188
-
189
- if (shouldSubmit) {
190
- // Mark this as the active button for the submit cycle.
191
- form.setActiveButton(currentOpts.name);
192
-
193
- // Kick off the standard submit pipeline.
194
- form.go();
195
- }
196
- };
197
-
198
- const setLoading = (v: boolean) => {
199
- setLoadingState(v);
200
- };
201
-
202
- const setDisabled = (v: boolean) => {
203
- setDisabledState(v);
204
- };
205
-
206
- return {
207
- loading,
208
- setLoading,
209
- disabled,
210
- setDisabled,
211
- ref,
212
- onClick: handleClick,
213
- buttonProps: {
214
- ref,
215
- disabled: disabled || loading,
216
- "data-loading": loading ? "true" : "false",
217
- onClick: handleClick,
218
- },
219
- };
220
- }
File without changes
@@ -1,497 +0,0 @@
1
- // src/core/hooks/use-field.ts
2
- // noinspection JSUnusedGlobalSymbols
3
-
4
- import * as React from "react";
5
-
6
- import { useCoreContext } from "@/core/hooks/use-core-context";
7
- import type { CoreContext, Dict } from "@/schema/core";
8
- import type { Field } from "@/schema/field";
9
-
10
- export type UseFieldValidate<T> = (
11
- value: T,
12
- report: boolean
13
- ) => boolean | string;
14
-
15
- export interface UseFieldOptions<T = unknown> {
16
- /**
17
- * Primary field name.
18
- *
19
- * This is the key that will show up in the values snapshot and
20
- * error bags (unless mapped via `shared` or `alias`).
21
- */
22
- name?: string;
23
-
24
- /**
25
- * Optional internal binding identifier.
26
- *
27
- * Used by the bound helpers (observeBoundField, waitForBoundField)
28
- * and the binder registry.
29
- */
30
- bindId?: string;
31
-
32
- /**
33
- * Optional external binding key – a semantic identifier for this
34
- * field’s binding group.
35
- *
36
- * Example:
37
- * bind="shipping"
38
- */
39
- bind?: string;
40
-
41
- /**
42
- * Shared key for nested grouping, e.g:
43
- *
44
- * shared="profile", name="first_name"
45
- * → values.profile.first_name
46
- */
47
- shared?: string;
48
-
49
- /**
50
- * Optional grouping identifier used to group related controls
51
- * (e.g. radio groups, segmented inputs).
52
- */
53
- groupId?: string;
54
-
55
- /**
56
- * Optional alias for error / mapping purposes.
57
- *
58
- * Example:
59
- * alias="email" but name="contact.email"
60
- */
61
- alias?: string;
62
-
63
- /**
64
- * Marks this field as the "main" one in a group.
65
- */
66
- main?: boolean;
67
-
68
- /**
69
- * If true, this field is ignored by snapshot / some validation
70
- * flows, but may still exist in the registry.
71
- */
72
- ignore?: boolean;
73
-
74
- /**
75
- * Whether the field is required.
76
- */
77
- required?: boolean;
78
-
79
- /**
80
- * Initial/default value for this field.
81
- */
82
- defaultValue?: T;
83
-
84
- /**
85
- * Initial disabled flag.
86
- */
87
- disabled?: boolean;
88
-
89
- /**
90
- * Initial readOnly flag.
91
- */
92
- readOnly?: boolean;
93
-
94
- /**
95
- * Custom validation hook.
96
- *
97
- * Return:
98
- * - `true` → valid
99
- * - `false` → invalid (no message)
100
- * - `"message"` → invalid with explicit message
101
- */
102
- validate?: UseFieldValidate<T>;
103
-
104
- /**
105
- * Optional projector to derive an "original" value from the
106
- * initial default.
107
- */
108
- getOriginalValue?(value: T | undefined): unknown;
109
-
110
- /**
111
- * Local change hook for the field.
112
- *
113
- * This is in addition to the form-level `onChange`.
114
- */
115
- onValueChange?(next: T, prev: T, variant: string): void;
116
- }
117
-
118
- export interface UseFieldReturn<T = unknown> {
119
- /** Ref to the underlying DOM element */
120
- ref: React.RefObject<HTMLElement>;
121
- key: string;
122
- /** Current value */
123
- value: T | undefined;
124
- setValue(next: T | undefined, variant?: string): void;
125
-
126
- /** Current error message */
127
- error: string;
128
- setError(message: string): void;
129
-
130
- /** Async-loading flag (e.g. remote validation) */
131
- loading: boolean;
132
- setLoading(loading: boolean): void;
133
-
134
- /** Required flag */
135
- required: boolean;
136
- setRequired(required: boolean): void;
137
-
138
- /** Disabled flag */
139
- disabled: boolean;
140
- setDisabled(disabled: boolean): void;
141
-
142
- /** Readonly flag */
143
- readOnly: boolean;
144
- setReadOnly(readOnly: boolean): void;
145
-
146
- /** Metadata / wiring */
147
- name: string;
148
- bindId: string;
149
- bind?: string;
150
- shared?: string;
151
- groupId?: string;
152
- alias?: string;
153
- main?: boolean;
154
- ignore?: boolean;
155
-
156
- /** Snapshots */
157
- readonly defaultValue: T | undefined;
158
- readonly originalValue: unknown;
159
-
160
- /** Owning core context */
161
- form: CoreContext<Dict>;
162
-
163
- /** Run validation (optionally reporting errors) */
164
- validate(report?: boolean): boolean | undefined;
165
- }
166
-
167
- /**
168
- * Strict field hook.
169
- *
170
- * - Registers the field with the core provider / registry.
171
- * - Exposes value/error/loading and lifecycle helpers.
172
- * - Wires into:
173
- * - core-level `onChange`
174
- * - `controlButton()` dirty logic
175
- */
176
- export function useField<T = unknown>(
177
- options: UseFieldOptions<T>
178
- ): UseFieldReturn<T> {
179
- const form = useCoreContext<Dict>();
180
-
181
- const {
182
- name: rawName,
183
- bindId: rawBindId,
184
- bind,
185
- shared,
186
- groupId,
187
- alias,
188
- main,
189
- ignore,
190
- required: requiredProp = false,
191
- defaultValue,
192
- disabled: disabledProp = false,
193
- readOnly: readOnlyProp = false,
194
- validate,
195
- getOriginalValue,
196
- onValueChange,
197
- } = options;
198
-
199
- const ref = React.useRef<HTMLElement>(null);
200
-
201
- // Core state (value, error, loading, original) lives in a ref
202
- const stateRef = React.useRef<{
203
- value: T | undefined;
204
- error: string;
205
- loading: boolean;
206
- original: unknown;
207
- }>({
208
- value: defaultValue,
209
- error: "",
210
- loading: false,
211
- original: getOriginalValue
212
- ? getOriginalValue(defaultValue)
213
- : defaultValue,
214
- });
215
-
216
- // React state mirrors (used for rerenders)
217
- const [value, setValueState] = React.useState<T | undefined>(
218
- stateRef.current.value
219
- );
220
- const [error, setErrorState] = React.useState<string>(
221
- stateRef.current.error
222
- );
223
- const [loading, setLoadingState] = React.useState<boolean>(
224
- stateRef.current.loading
225
- );
226
- const [required, setRequired] = React.useState<boolean>(
227
- Boolean(requiredProp)
228
- );
229
- const [disabled, setDisabled] = React.useState<boolean>(
230
- Boolean(disabledProp)
231
- );
232
- const [readOnly, setReadOnly] = React.useState<boolean>(
233
- Boolean(readOnlyProp)
234
- );
235
-
236
- const id = React.useId();
237
- // Stable wiring keys
238
- // @ts-ignore
239
- const keyRef = React.useRef<string>((() => {
240
- if (rawName && rawName.trim()) return `${rawName.trim()}-${id}`;
241
- if (rawBindId && rawBindId.trim()) return `${rawBindId.trim()}-${id}`;
242
- return `field-${Math.random().toString(36).slice(2)}-${id}`;
243
- })()) as React.MutableRefObject<string>;
244
-
245
- const bindIdRef = React.useRef<string>(
246
- (rawBindId && rawBindId.trim()) || keyRef.current
247
- );
248
-
249
- const fieldRef = React.useRef<Field | null>(null);
250
-
251
- // Build the Field object once
252
- if (!fieldRef.current) {
253
- const key = keyRef.current;
254
- const bindId = bindIdRef.current;
255
- const trimmedName = rawName?.trim() ?? "";
256
-
257
- const validateFn = (report?: boolean): boolean => {
258
- const formDisabled = false; // core-level disable could be added later
259
- const curDisabled = formDisabled || disabled || readOnly;
260
-
261
- if (curDisabled && !report) {
262
- return true;
263
- }
264
-
265
- const current = stateRef.current.value as T;
266
- let ok = true;
267
- let message = "";
268
-
269
- if (
270
- required &&
271
- (current === undefined ||
272
- current === null ||
273
- (typeof current === "string" && current.trim() === "") ||
274
- (Array.isArray(current) && current.length === 0))
275
- ) {
276
- ok = false;
277
- message = "This field is required.";
278
- } else if (validate) {
279
- const result = validate(current, !!report);
280
- if (typeof result === "string") {
281
- ok = false;
282
- message = result;
283
- } else if (result === false) {
284
- ok = false;
285
- }
286
- }
287
-
288
- if (!report) {
289
- return ok;
290
- }
291
-
292
- // Report mode → set/clear error
293
- stateRef.current.error = ok ? "" : message;
294
- setErrorState(ok ? "" : message);
295
- return ok;
296
- };
297
-
298
- const f: Field = {
299
- key,
300
- bindId,
301
- bind,
302
- name: trimmedName,
303
- shared,
304
- groupId,
305
- alias,
306
- main,
307
- ignore,
308
- required,
309
- ref: ref as React.RefObject<HTMLElement>,
310
- get defaultValue() {
311
- return stateRef.current.original;
312
- },
313
- get value() {
314
- return stateRef.current.value;
315
- },
316
- set value(v: unknown) {
317
- stateRef.current.value = v as T | undefined;
318
- setValueState(v as T | undefined);
319
- },
320
- get originalValue() {
321
- return stateRef.current.original;
322
- },
323
- get error() {
324
- return stateRef.current.error;
325
- },
326
- set error(msg: string) {
327
- stateRef.current.error = msg;
328
- setErrorState(msg);
329
- },
330
- get loading() {
331
- return stateRef.current.loading;
332
- },
333
- set loading(v: boolean) {
334
- stateRef.current.loading = v;
335
- setLoadingState(v);
336
- },
337
- validate: validateFn,
338
- onChange(value: unknown, old: unknown, variant: string) {
339
- if (onValueChange) {
340
- onValueChange(value as T, old as T, variant);
341
- }
342
- },
343
- // Flags not directly on the Field interface but used via `as any`
344
- // in core-provider (getValue/setValue/reset).
345
- } as Field & {
346
- getValue(): T | undefined;
347
- setValue(next: T | undefined): void;
348
- reset(): void;
349
- };
350
-
351
- // Imperative helpers used by the core
352
- (f as any).getValue = () => stateRef.current.value;
353
- (f as any).setValue = (next: T | undefined) => {
354
- stateRef.current.value = next;
355
- setValueState(next);
356
- };
357
- (f as any).reset = () => {
358
- stateRef.current.value = defaultValue;
359
- stateRef.current.error = "";
360
- stateRef.current.loading = false;
361
-
362
- setValueState(defaultValue);
363
- setErrorState("");
364
- setLoadingState(false);
365
- };
366
-
367
- fieldRef.current = f;
368
- }
369
-
370
- const field = fieldRef.current;
371
-
372
- // Sync prop-driven flags when they change
373
- React.useEffect(() => {
374
- setRequired(!!requiredProp);
375
- if (field) {
376
- field.required = !!requiredProp;
377
- }
378
- }, [requiredProp, field]);
379
-
380
- React.useEffect(() => {
381
- setDisabled(!!disabledProp);
382
- }, [disabledProp]);
383
-
384
- React.useEffect(() => {
385
- setReadOnly(!!readOnlyProp);
386
- }, [readOnlyProp]);
387
-
388
- // Register field with the core
389
- React.useEffect(() => {
390
- if (!field) return;
391
-
392
- form.addField(field);
393
-
394
- return () => {
395
- // Remove from registry directly
396
- const registry = form.inputs as any;
397
- if (registry && typeof registry.remove === "function") {
398
- registry.remove(field.key);
399
- }
400
- };
401
- // eslint-disable-next-line react-hooks/exhaustive-deps
402
- }, [form, field]);
403
-
404
- // Value setter that wires into form-level change + button control
405
- function setValue(next: T | undefined, variant: string = "direct") {
406
- const prev = stateRef.current.value as T | undefined;
407
- if (Object.is(prev, next)) return;
408
-
409
- const runFormOnChange = () => {
410
- const props: any = form.props ?? {};
411
- const fn = props.onChange as
412
- | ((
413
- form: CoreContext<Dict>,
414
- current: Field,
415
- options: Dict
416
- ) => void)
417
- | undefined;
418
-
419
- if (!fn) return;
420
-
421
- fn(form as any, field, {
422
- variant,
423
- value: next,
424
- previous: prev,
425
- });
426
- };
427
-
428
- const props: any = form.props ?? {};
429
- const changeBefore = !!props.changeBefore;
430
-
431
- if (changeBefore) {
432
- runFormOnChange();
433
- }
434
-
435
- stateRef.current.value = next;
436
- setValueState(next);
437
-
438
- // Local field-level onChange
439
- if (field.onChange) {
440
- field.onChange(next, prev, variant);
441
- }
442
-
443
- if (!changeBefore) {
444
- runFormOnChange();
445
- }
446
-
447
- // Let the core adjust the active button’s disabled state
448
- form.controlButton();
449
- }
450
-
451
- function setError(message: string) {
452
- stateRef.current.error = message;
453
- setErrorState(message);
454
- }
455
-
456
- function setLoading(loading: boolean) {
457
- stateRef.current.loading = loading;
458
- setLoadingState(loading);
459
- }
460
-
461
- return {
462
- ref,
463
- get key() {
464
- return keyRef.current
465
- },
466
- value,
467
- setValue,
468
- error,
469
- setError,
470
- loading,
471
- setLoading,
472
- required,
473
- setRequired,
474
- disabled,
475
- setDisabled,
476
- readOnly,
477
- setReadOnly,
478
- name: field.name!,
479
- bindId: field.bindId!,
480
- bind: field.bind,
481
- shared: field.shared,
482
- groupId: field.groupId,
483
- alias: field.alias,
484
- main: field.main,
485
- ignore: field.ignore,
486
- get defaultValue() {
487
- return stateRef.current.original as T | undefined;
488
- },
489
- get originalValue() {
490
- return stateRef.current.original;
491
- },
492
- form,
493
- validate(report?: boolean) {
494
- return field.validate?.(report);
495
- },
496
- };
497
- }