torch-glare 2.5.6 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/README.md +4 -3
  2. package/dist/bin/index.js +9 -24
  3. package/dist/bin/index.js.map +1 -1
  4. package/dist/src/commands/add.d.ts +2 -2
  5. package/dist/src/commands/add.d.ts.map +1 -1
  6. package/dist/src/commands/add.js +4 -70
  7. package/dist/src/commands/add.js.map +1 -1
  8. package/dist/src/commands/hook.d.ts +5 -4
  9. package/dist/src/commands/hook.d.ts.map +1 -1
  10. package/dist/src/commands/hook.js +7 -75
  11. package/dist/src/commands/hook.js.map +1 -1
  12. package/dist/src/commands/init.js +1 -1
  13. package/dist/src/commands/init.js.map +1 -1
  14. package/dist/src/commands/layout.d.ts +5 -4
  15. package/dist/src/commands/layout.d.ts.map +1 -1
  16. package/dist/src/commands/layout.js +7 -75
  17. package/dist/src/commands/layout.js.map +1 -1
  18. package/dist/src/commands/provider.d.ts +5 -4
  19. package/dist/src/commands/provider.d.ts.map +1 -1
  20. package/dist/src/commands/provider.js +7 -75
  21. package/dist/src/commands/provider.js.map +1 -1
  22. package/dist/src/commands/update.d.ts.map +1 -1
  23. package/dist/src/commands/update.js +78 -43
  24. package/dist/src/commands/update.js.map +1 -1
  25. package/dist/src/commands/utils.d.ts +5 -4
  26. package/dist/src/commands/utils.d.ts.map +1 -1
  27. package/dist/src/commands/utils.js +7 -80
  28. package/dist/src/commands/utils.js.map +1 -1
  29. package/dist/src/shared/addFromRegistry.d.ts +16 -0
  30. package/dist/src/shared/addFromRegistry.d.ts.map +1 -0
  31. package/dist/src/shared/addFromRegistry.js +88 -0
  32. package/dist/src/shared/addFromRegistry.js.map +1 -0
  33. package/dist/src/shared/getInstallCommand.d.ts.map +1 -1
  34. package/dist/src/shared/getInstallCommand.js +5 -0
  35. package/dist/src/shared/getInstallCommand.js.map +1 -1
  36. package/dist/src/shared/installDependencies.d.ts +0 -10
  37. package/dist/src/shared/installDependencies.d.ts.map +1 -1
  38. package/dist/src/shared/installDependencies.js +0 -17
  39. package/dist/src/shared/installDependencies.js.map +1 -1
  40. package/dist/src/shared/installFromPlan.d.ts +7 -5
  41. package/dist/src/shared/installFromPlan.d.ts.map +1 -1
  42. package/dist/src/shared/installFromPlan.js +103 -36
  43. package/dist/src/shared/installFromPlan.js.map +1 -1
  44. package/dist/src/shared/loadRegistry.d.ts +12 -3
  45. package/dist/src/shared/loadRegistry.d.ts.map +1 -1
  46. package/dist/src/shared/loadRegistry.js +19 -20
  47. package/dist/src/shared/loadRegistry.js.map +1 -1
  48. package/dist/src/shared/registryClient.d.ts +19 -0
  49. package/dist/src/shared/registryClient.d.ts.map +1 -0
  50. package/dist/src/shared/registryClient.js +128 -0
  51. package/dist/src/shared/registryClient.js.map +1 -0
  52. package/dist/src/shared/resolveEntry.d.ts +10 -7
  53. package/dist/src/shared/resolveEntry.d.ts.map +1 -1
  54. package/dist/src/shared/resolveEntry.js +18 -13
  55. package/dist/src/shared/resolveEntry.js.map +1 -1
  56. package/dist/src/shared/suggestOtherCommand.d.ts +7 -1
  57. package/dist/src/shared/suggestOtherCommand.d.ts.map +1 -1
  58. package/dist/src/shared/suggestOtherCommand.js +29 -23
  59. package/dist/src/shared/suggestOtherCommand.js.map +1 -1
  60. package/dist/src/types/main.d.ts +31 -2
  61. package/dist/src/types/main.d.ts.map +1 -1
  62. package/package.json +6 -11
  63. package/apps/lib/components/ActionButton.tsx +0 -93
  64. package/apps/lib/components/ActionsGroup.tsx +0 -27
  65. package/apps/lib/components/AlertDialog.tsx +0 -204
  66. package/apps/lib/components/Avatar.tsx +0 -46
  67. package/apps/lib/components/Badge.tsx +0 -250
  68. package/apps/lib/components/BadgeField.tsx +0 -403
  69. package/apps/lib/components/Breadcrumb.tsx +0 -280
  70. package/apps/lib/components/Button.tsx +0 -325
  71. package/apps/lib/components/ButtonGroup.tsx +0 -190
  72. package/apps/lib/components/Calendar.tsx +0 -115
  73. package/apps/lib/components/Card.tsx +0 -95
  74. package/apps/lib/components/Checkbox.tsx +0 -42
  75. package/apps/lib/components/ColorPicker.tsx +0 -441
  76. package/apps/lib/components/ConclusionHeader.tsx +0 -148
  77. package/apps/lib/components/ContextMenu.tsx +0 -571
  78. package/apps/lib/components/CountBadge.tsx +0 -52
  79. package/apps/lib/components/DataTable.tsx +0 -213
  80. package/apps/lib/components/DataViews/badge.ts +0 -49
  81. package/apps/lib/components/DataViews/cell.tsx +0 -324
  82. package/apps/lib/components/DataViews/context.ts +0 -144
  83. package/apps/lib/components/DataViews/data-views.tsx +0 -395
  84. package/apps/lib/components/DataViews/filters/children.tsx +0 -98
  85. package/apps/lib/components/DataViews/filters/custom.tsx +0 -34
  86. package/apps/lib/components/DataViews/filters/filters.tsx +0 -157
  87. package/apps/lib/components/DataViews/filters/index.ts +0 -4
  88. package/apps/lib/components/DataViews/filters/labelled.tsx +0 -20
  89. package/apps/lib/components/DataViews/filters/presets.tsx +0 -65
  90. package/apps/lib/components/DataViews/filters/sync.tsx +0 -35
  91. package/apps/lib/components/DataViews/filters/values.ts +0 -173
  92. package/apps/lib/components/DataViews/header.tsx +0 -220
  93. package/apps/lib/components/DataViews/hooks/index.ts +0 -5
  94. package/apps/lib/components/DataViews/hooks/useActiveRow.ts +0 -22
  95. package/apps/lib/components/DataViews/hooks/useControllable.ts +0 -52
  96. package/apps/lib/components/DataViews/index.ts +0 -88
  97. package/apps/lib/components/DataViews/panel/columns.tsx +0 -153
  98. package/apps/lib/components/DataViews/panel/controls.tsx +0 -106
  99. package/apps/lib/components/DataViews/panel/index.ts +0 -3
  100. package/apps/lib/components/DataViews/panel/panel.tsx +0 -164
  101. package/apps/lib/components/DataViews/panel/saved-views.tsx +0 -67
  102. package/apps/lib/components/DataViews/panel/section.tsx +0 -81
  103. package/apps/lib/components/DataViews/panel/sort.tsx +0 -42
  104. package/apps/lib/components/DataViews/panel/tab.tsx +0 -31
  105. package/apps/lib/components/DataViews/slots.ts +0 -72
  106. package/apps/lib/components/DataViews/states.tsx +0 -73
  107. package/apps/lib/components/DataViews/types.ts +0 -510
  108. package/apps/lib/components/DataViews/views/board-view.tsx +0 -381
  109. package/apps/lib/components/DataViews/views/card-rows.tsx +0 -36
  110. package/apps/lib/components/DataViews/views/inbox-view.tsx +0 -260
  111. package/apps/lib/components/DataViews/views/pane-views.tsx +0 -196
  112. package/apps/lib/components/DataViews/views/table-view.tsx +0 -493
  113. package/apps/lib/components/DataViews/views/tree-view.tsx +0 -367
  114. package/apps/lib/components/DatePicker.tsx +0 -232
  115. package/apps/lib/components/Dialog.tsx +0 -116
  116. package/apps/lib/components/Divider.tsx +0 -28
  117. package/apps/lib/components/Drawer.tsx +0 -451
  118. package/apps/lib/components/DropdownMenu.tsx +0 -554
  119. package/apps/lib/components/FieldHint.tsx +0 -69
  120. package/apps/lib/components/Form.tsx +0 -182
  121. package/apps/lib/components/FormBuilder/context.ts +0 -85
  122. package/apps/lib/components/FormBuilder/field-kind.ts +0 -28
  123. package/apps/lib/components/FormBuilder/fields/ChoiceFields.tsx +0 -60
  124. package/apps/lib/components/FormBuilder/fields/ColorField.tsx +0 -59
  125. package/apps/lib/components/FormBuilder/fields/CustomField.tsx +0 -11
  126. package/apps/lib/components/FormBuilder/fields/DateField.tsx +0 -32
  127. package/apps/lib/components/FormBuilder/fields/FieldArray.tsx +0 -74
  128. package/apps/lib/components/FormBuilder/fields/FieldShell.tsx +0 -168
  129. package/apps/lib/components/FormBuilder/fields/FileField.tsx +0 -39
  130. package/apps/lib/components/FormBuilder/fields/OptionListFields.tsx +0 -132
  131. package/apps/lib/components/FormBuilder/fields/OtpField.tsx +0 -31
  132. package/apps/lib/components/FormBuilder/fields/PhoneField.tsx +0 -109
  133. package/apps/lib/components/FormBuilder/fields/RichTextEditorField.tsx +0 -31
  134. package/apps/lib/components/FormBuilder/fields/SelectField.tsx +0 -114
  135. package/apps/lib/components/FormBuilder/fields/SignatureField.tsx +0 -157
  136. package/apps/lib/components/FormBuilder/fields/SliderField.tsx +0 -67
  137. package/apps/lib/components/FormBuilder/fields/SwitchBoxField.tsx +0 -41
  138. package/apps/lib/components/FormBuilder/fields/TableField.tsx +0 -336
  139. package/apps/lib/components/FormBuilder/fields/TextField.tsx +0 -213
  140. package/apps/lib/components/FormBuilder/fields/TreeSelectField.tsx +0 -43
  141. package/apps/lib/components/FormBuilder/fields/countries.ts +0 -303
  142. package/apps/lib/components/FormBuilder/fields/index.ts +0 -25
  143. package/apps/lib/components/FormBuilder/form-builder.tsx +0 -198
  144. package/apps/lib/components/FormBuilder/index.ts +0 -31
  145. package/apps/lib/components/FormBuilder/numberFormat.ts +0 -16
  146. package/apps/lib/components/FormBuilder/submit.tsx +0 -67
  147. package/apps/lib/components/FormBuilder/types.ts +0 -316
  148. package/apps/lib/components/FormRenderer/FormDrawer.tsx +0 -250
  149. package/apps/lib/components/FormRenderer/detail.tsx +0 -256
  150. package/apps/lib/components/FormRenderer/form-renderer.tsx +0 -358
  151. package/apps/lib/components/FormRenderer/header.tsx +0 -88
  152. package/apps/lib/components/FormRenderer/index.ts +0 -17
  153. package/apps/lib/components/FormRenderer/notch-action.tsx +0 -64
  154. package/apps/lib/components/FormRenderer/section.tsx +0 -39
  155. package/apps/lib/components/FormRenderer/stepper.tsx +0 -393
  156. package/apps/lib/components/FormRenderer/types.ts +0 -115
  157. package/apps/lib/components/FormSummary.tsx +0 -282
  158. package/apps/lib/components/HeaderBar.tsx +0 -117
  159. package/apps/lib/components/ImageAttachment.tsx +0 -209
  160. package/apps/lib/components/InnerLabelField.tsx +0 -154
  161. package/apps/lib/components/Input.tsx +0 -224
  162. package/apps/lib/components/InputField.tsx +0 -147
  163. package/apps/lib/components/InputOTP.tsx +0 -84
  164. package/apps/lib/components/Label.tsx +0 -129
  165. package/apps/lib/components/LabelField.tsx +0 -76
  166. package/apps/lib/components/LabeledCheckBox.tsx +0 -51
  167. package/apps/lib/components/LabeledRadio.tsx +0 -51
  168. package/apps/lib/components/LinkButton.tsx +0 -94
  169. package/apps/lib/components/LoginButton.tsx +0 -51
  170. package/apps/lib/components/PasswordLevel.tsx +0 -58
  171. package/apps/lib/components/Popover.tsx +0 -312
  172. package/apps/lib/components/ProfileMenu.tsx +0 -85
  173. package/apps/lib/components/Radio.tsx +0 -59
  174. package/apps/lib/components/RadioCard.tsx +0 -50
  175. package/apps/lib/components/ScrollArea.tsx +0 -54
  176. package/apps/lib/components/SearchField.tsx +0 -62
  177. package/apps/lib/components/SearchableSelect.tsx +0 -318
  178. package/apps/lib/components/SearchableTable.tsx +0 -344
  179. package/apps/lib/components/SearchableTree.tsx +0 -485
  180. package/apps/lib/components/SearchableTreeDialog.tsx +0 -502
  181. package/apps/lib/components/SectionBlock.tsx +0 -168
  182. package/apps/lib/components/Select.tsx +0 -347
  183. package/apps/lib/components/SimpleSelect.tsx +0 -225
  184. package/apps/lib/components/Skeleton.tsx +0 -12
  185. package/apps/lib/components/SlideDatePicker.tsx +0 -255
  186. package/apps/lib/components/SpinLoading.tsx +0 -174
  187. package/apps/lib/components/Stepper.tsx +0 -480
  188. package/apps/lib/components/Switch.tsx +0 -82
  189. package/apps/lib/components/TabFormItem.tsx +0 -153
  190. package/apps/lib/components/TabSwitch.tsx +0 -172
  191. package/apps/lib/components/Table.tsx +0 -597
  192. package/apps/lib/components/TextEditor/ChartBlockTool.ts +0 -676
  193. package/apps/lib/components/TextEditor/RichTextField.tsx +0 -46
  194. package/apps/lib/components/TextEditor/TableDnDWrapper.ts +0 -462
  195. package/apps/lib/components/TextEditor/TextEditor.tsx +0 -1164
  196. package/apps/lib/components/TextEditor/TextEditorToolbar.tsx +0 -429
  197. package/apps/lib/components/TextEditor/editor-tools/AlignmentTune.ts +0 -70
  198. package/apps/lib/components/TextEditor/editor-tools/ColorInlineTool.ts +0 -50
  199. package/apps/lib/components/TextEditor/editor-tools/StrikethroughInlineTool.ts +0 -48
  200. package/apps/lib/components/TextEditor/editor-tools/inlineFormat.ts +0 -98
  201. package/apps/lib/components/TextEditor/editorjs.d.ts +0 -60
  202. package/apps/lib/components/TextEditor/index.ts +0 -7
  203. package/apps/lib/components/TextEditor/markdownParser.ts +0 -346
  204. package/apps/lib/components/Textarea.tsx +0 -117
  205. package/apps/lib/components/Timeline.tsx +0 -263
  206. package/apps/lib/components/Toast.tsx +0 -87
  207. package/apps/lib/components/Toggle.tsx +0 -125
  208. package/apps/lib/components/ToggleButton.tsx +0 -140
  209. package/apps/lib/components/Tooltip.tsx +0 -116
  210. package/apps/lib/components/TransparentLabel.tsx +0 -71
  211. package/apps/lib/components/TreeDropDown.tsx +0 -115
  212. package/apps/lib/components/TreeFolder/TreeFolder.tsx +0 -380
  213. package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +0 -75
  214. package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +0 -354
  215. package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +0 -60
  216. package/apps/lib/components/TreeFolder/icons.tsx +0 -60
  217. package/apps/lib/components/TreeFolder/index.ts +0 -24
  218. package/apps/lib/components/TreeFolder/treeFolderUtils.ts +0 -109
  219. package/apps/lib/components/TreeFolder/types.ts +0 -77
  220. package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +0 -118
  221. package/apps/lib/hooks/useActiveTreeItem.ts +0 -61
  222. package/apps/lib/hooks/useClickOutside.ts +0 -27
  223. package/apps/lib/hooks/useDragDrop.tsx +0 -365
  224. package/apps/lib/hooks/useHtmlDir.ts +0 -31
  225. package/apps/lib/hooks/useInfiniteScroll.ts +0 -108
  226. package/apps/lib/hooks/useIsMobile.ts +0 -21
  227. package/apps/lib/hooks/useResize.ts +0 -67
  228. package/apps/lib/hooks/useTagSelection.ts +0 -300
  229. package/apps/lib/layouts/CNLayout.tsx +0 -372
  230. package/apps/lib/layouts/DataViewCard.tsx +0 -62
  231. package/apps/lib/layouts/FieldSection.tsx +0 -91
  232. package/apps/lib/layouts/TreeSubLayout.tsx +0 -173
  233. package/apps/lib/providers/ThemeProvider.tsx +0 -84
  234. package/apps/lib/registry.json +0 -1217
  235. package/apps/lib/tsconfig.json +0 -9
  236. package/apps/lib/tsconfig.tsbuildinfo +0 -1
  237. package/apps/lib/utils/cn.ts +0 -6
  238. package/apps/lib/utils/color.ts +0 -175
  239. package/apps/lib/utils/dataViews/path.ts +0 -67
  240. package/apps/lib/utils/dataViews/query.ts +0 -73
  241. package/apps/lib/utils/dataViews/types.ts +0 -187
  242. package/apps/lib/utils/dateFormat.ts +0 -108
  243. package/apps/lib/utils/resize.ts +0 -31
  244. package/apps/lib/utils/scroller.ts +0 -26
  245. package/apps/lib/utils/types.ts +0 -16
  246. package/docs/BLOCKS.md +0 -129
  247. package/docs/CHANGELOG-1.1.16.md +0 -108
  248. package/docs/Cover.png +0 -0
  249. package/docs/README.md +0 -215
  250. package/docs/components/action-button.md +0 -638
  251. package/docs/components/actions-group.md +0 -708
  252. package/docs/components/alert-dialog.md +0 -920
  253. package/docs/components/avatar.md +0 -709
  254. package/docs/components/badge-field.md +0 -738
  255. package/docs/components/badge.md +0 -301
  256. package/docs/components/breadcrumb.md +0 -930
  257. package/docs/components/button-group.md +0 -650
  258. package/docs/components/button.md +0 -639
  259. package/docs/components/calendar.md +0 -555
  260. package/docs/components/card.md +0 -622
  261. package/docs/components/chart-block-tool.md +0 -129
  262. package/docs/components/checkbox.md +0 -699
  263. package/docs/components/cn-layout.md +0 -854
  264. package/docs/components/color-picker.md +0 -101
  265. package/docs/components/conclusion-header.md +0 -80
  266. package/docs/components/context-menu.md +0 -483
  267. package/docs/components/count-badge.md +0 -560
  268. package/docs/components/data-table.md +0 -854
  269. package/docs/components/data-views/backend-response.md +0 -324
  270. package/docs/components/data-views/examples/a11y-rtl.md +0 -250
  271. package/docs/components/data-views/examples/api-orders-route.md +0 -130
  272. package/docs/components/data-views/examples/fields.md +0 -362
  273. package/docs/components/data-views/examples/filters.md +0 -307
  274. package/docs/components/data-views/examples/inbox-routing.md +0 -218
  275. package/docs/components/data-views/examples/index.md +0 -29
  276. package/docs/components/data-views/examples/overview.md +0 -244
  277. package/docs/components/data-views/examples/panel.md +0 -212
  278. package/docs/components/data-views/examples/scale.md +0 -231
  279. package/docs/components/data-views/examples/server-side.md +0 -210
  280. package/docs/components/data-views/examples/state.md +0 -250
  281. package/docs/components/data-views/examples/tree-custom.md +0 -388
  282. package/docs/components/data-views/examples/view-registry.md +0 -313
  283. package/docs/components/data-views/examples/views.md +0 -534
  284. package/docs/components/data-views/guide.md +0 -405
  285. package/docs/components/data-views/index.md +0 -1521
  286. package/docs/components/data-views/migration.md +0 -81
  287. package/docs/components/date-picker.md +0 -857
  288. package/docs/components/dialog.md +0 -929
  289. package/docs/components/divider.md +0 -766
  290. package/docs/components/drawer.md +0 -654
  291. package/docs/components/dropdown-menu.md +0 -668
  292. package/docs/components/field-hint.md +0 -898
  293. package/docs/components/field-section.md +0 -781
  294. package/docs/components/form-builder.md +0 -284
  295. package/docs/components/form-renderer.md +0 -396
  296. package/docs/components/form-summary.md +0 -138
  297. package/docs/components/form.md +0 -785
  298. package/docs/components/header-bar.md +0 -188
  299. package/docs/components/image-attachment.md +0 -906
  300. package/docs/components/inner-label-field.md +0 -819
  301. package/docs/components/input-field.md +0 -623
  302. package/docs/components/input-otp.md +0 -756
  303. package/docs/components/input.md +0 -634
  304. package/docs/components/label-field.md +0 -770
  305. package/docs/components/label.md +0 -761
  306. package/docs/components/labeled-check-box.md +0 -642
  307. package/docs/components/labeled-radio.md +0 -796
  308. package/docs/components/link-button.md +0 -685
  309. package/docs/components/login-button.md +0 -872
  310. package/docs/components/password-level.md +0 -803
  311. package/docs/components/popover.md +0 -649
  312. package/docs/components/profile-menu.md +0 -656
  313. package/docs/components/radio-card.md +0 -801
  314. package/docs/components/radio.md +0 -735
  315. package/docs/components/scroll-area.md +0 -691
  316. package/docs/components/search-field.md +0 -702
  317. package/docs/components/searchable-select.md +0 -368
  318. package/docs/components/searchable-table.md +0 -438
  319. package/docs/components/searchable-tree-dialog.md +0 -190
  320. package/docs/components/searchable-tree.md +0 -200
  321. package/docs/components/section-block.md +0 -483
  322. package/docs/components/select.md +0 -709
  323. package/docs/components/simple-select.md +0 -741
  324. package/docs/components/skeleton.md +0 -706
  325. package/docs/components/slide-date-picker.md +0 -837
  326. package/docs/components/spin-loading.md +0 -696
  327. package/docs/components/stepper.md +0 -316
  328. package/docs/components/switch.md +0 -770
  329. package/docs/components/tab-form-item.md +0 -773
  330. package/docs/components/tab-switch.md +0 -170
  331. package/docs/components/table-dnd-wrapper.md +0 -107
  332. package/docs/components/table.md +0 -1088
  333. package/docs/components/text-editor.md +0 -735
  334. package/docs/components/textarea.md +0 -681
  335. package/docs/components/timeline.md +0 -254
  336. package/docs/components/toast.md +0 -773
  337. package/docs/components/toggle-button.md +0 -643
  338. package/docs/components/toggle.md +0 -882
  339. package/docs/components/tooltip.md +0 -513
  340. package/docs/components/transparent-label.md +0 -721
  341. package/docs/components/tree-drop-down.md +0 -740
  342. package/docs/components/tree-folder.md +0 -110
  343. package/docs/components/tree-sub-layout.md +0 -707
  344. package/docs/explanation/architecture.md +0 -54
  345. package/docs/explanation/design-system.md +0 -52
  346. package/docs/how-to/form-and-list-recipes.md +0 -386
  347. package/docs/how-to/forms-with-form-builder.md +0 -472
  348. package/docs/how-to/guides.md +0 -1027
  349. package/docs/migration/changelog.md +0 -60
  350. package/docs/migration/form-builder-2.5.2.md +0 -113
  351. package/docs/reference/cli.md +0 -112
  352. package/docs/reference/components.md +0 -572
  353. package/docs/reference/hooks.md +0 -1523
  354. package/docs/reference/providers.md +0 -866
  355. package/docs/reference/tailwind-plugins.md +0 -942
  356. package/docs/reference/theme.md +0 -85
  357. package/docs/reference/types.md +0 -1016
  358. package/docs/reference/utilities.md +0 -726
  359. package/docs/tutorials/building-first-form.md +0 -846
  360. package/docs/tutorials/component-composition.md +0 -882
  361. package/docs/tutorials/getting-started.md +0 -302
  362. package/docs/tutorials/theming-basics.md +0 -785
@@ -1,284 +0,0 @@
1
- ---
2
- title: FormBuilder
3
- description: The fields. A compound, composition-based form — author fields as JSX children (FormBuilder.Text, FormBuilder.Select, …) wired to any react-hook-form resolver. All chrome around the fields lives in FormRenderer.
4
- component: true
5
- group: Forms
6
- keywords:
7
- [
8
- form-builder,
9
- form,
10
- compound,
11
- composition,
12
- react-hook-form,
13
- resolver,
14
- fields,
15
- validation,
16
- table,
17
- field-array,
18
- submit,
19
- ]
20
- ---
21
-
22
- # FormBuilder
23
-
24
- A **compound, composition-based** form. You author a form as JSX children — each
25
- field is a `FormBuilder.*` component wired to [react-hook-form](https://react-hook-form.com/)
26
- for you.
27
-
28
- ```tsx
29
- <FormBuilder onSubmit={save} resolver={zodResolver(schema)} defaultValues={d}>
30
- <FormBuilder.Text name="name" label="Name" required />
31
- <FormBuilder.Currency name="price" label="Price" currencySymbol="$" />
32
- </FormBuilder>
33
- ```
34
-
35
- ## FormBuilder is the fields — nothing else
36
-
37
- FormBuilder renders a `<form>`, its react-hook-form context, and your fields. Each field draws
38
- its own row (label, required marker, hint). Beyond that it draws **no frame at all**: no titled
39
- section cards, no page gutters, no scroll shell, no title header, no stepper rail, no summary
40
- column. Rendered bare it simply fills its container — which is what an embedded form wants (a
41
- settings rail, a `DataViews` filter panel).
42
-
43
- Everything drawn *around* the fields lives in **[FormRenderer](./form-renderer.md)**:
44
-
45
- | You want | Use |
46
- | ------------------------------------- | ---------------------------------------------------- |
47
- | A titled card grouping fields | `FormRenderer.Section` |
48
- | A page title header + Save action bar | `FormRenderer`'s `header` and `actions` props |
49
- | A wizard | `FormRenderer.Stepper` + `FormRenderer.Step` |
50
- | A drawer | `FormRenderer` with `display="drawer"` |
51
- | Live totals beside the form | `FormRenderer`'s `summary` prop + [FormSummary](./form-summary.md) |
52
- | A read-only detail page | `FormRenderer.Sidebar` + `FormRenderer.Tab` |
53
-
54
- > **For real forms, reach for [FormRenderer](./form-renderer.md), not raw FormBuilder.** You still
55
- > author the fields as `FormBuilder.*` children — FormRenderer just wraps them.
56
-
57
- `FormBuilder.Submit` is the one non-field part that stays here — see
58
- [Field components](#field-components) for what it does. It renders the **primary action**: the blue
59
- filled button. There is deliberately no `variant` prop — a form has one primary action, and letting
60
- each call site pick a style is how that stops being true.
61
-
62
- ## Installation
63
-
64
- TORCH Glare is a copy-in library: the CLI copies this component's source into your project.
65
-
66
- ```bash
67
- npx torch-glare@latest init
68
- npx torch-glare@latest add FormBuilder
69
- ```
70
-
71
- ## Imports
72
-
73
- ```tsx
74
- import { FormBuilder } from "@/components/FormBuilder";
75
- ```
76
-
77
- ## Root props
78
-
79
- | Prop | Type | Notes |
80
- | ---------------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
81
- | `onSubmit` | `(values) => void \| Promise<void>` | Called on a valid submit. |
82
- | `onInvalid` | `(errors) => void` | Called when validation fails. |
83
- | `resolver` | `Resolver` | Any react-hook-form resolver, e.g. `zodResolver(schema)`. |
84
- | `defaultValues` | `DefaultValues` | Initial values (create). |
85
- | `values` | `T` | Controlled values (edit) — the form re-syncs when this changes. |
86
- | `loading` | `boolean` | Submit shows a spinner; inputs disable. |
87
- | `fieldDirection` | `'horizontal' \| 'vertical' \| 'flexible'` | Row layout. Unset is responsive; a `FormRenderer` drawer pins `'vertical'`, and `'flexible'` asks for the responsive layout back. |
88
- | `resetOnSuccess` | `boolean` | Reset to defaults after a successful submit. |
89
- | `form` | `UseFormReturn` | A hoisted `useForm` to bind to — pass when something outside the form must read the same values. |
90
- | `id` | `string` | Sets the underlying `<form id>`, so a button outside the form can submit it via `form={id}` (e.g. a drawer header's Save). |
91
- | `className` | `string` | Lands on the `<form>` element itself — e.g. `"min-w-0 flex-1"` to fill a flex parent. |
92
-
93
- There is no `layout` prop and no `conclusion` prop: the fields always fill their container, and a
94
- panel beside the form is `FormRenderer`'s `summary`.
95
-
96
- ## Field components
97
-
98
- Each is a JSX child taking at least `name`, plus `label`, `placeholder`,
99
- `description`, `required`, `disabled`, `hidden`, `fullWidth`, `hints`.
100
-
101
- ### Hints
102
-
103
- `hints` stacks alerts under a field — helper text, a caveat, a confirmation. Each entry mirrors
104
- `FieldHint`: `label`, an optional `state` of `info` (default) / `warning` / `error` / `success`, and
105
- an optional `icon`.
106
-
107
- ```tsx
108
- <FormBuilder.Text
109
- name="sku"
110
- label="SKU"
111
- required
112
- hints={[
113
- { state: "info", label: "Must be unique across the catalogue." },
114
- { state: "warning", label: "Changing this breaks existing links." },
115
- ]}
116
- />
117
- ```
118
-
119
- The validation error is not one of these — it is rendered automatically and always comes **first**,
120
- because it is the actionable message; your hints follow in the order given. A field with no `hints`
121
- renders exactly as before.
122
-
123
- Hints are ignored inside a `FormBuilder.Table` cell (and any other `bare` context): there errors
124
- surface as a tooltip on the control so a row stays one line tall, and stacking alerts would defeat
125
- that.
126
-
127
- | Component | Input | Value |
128
- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
129
- | `FormBuilder.Text` / `.Email` / `.Password` | `InputField` | `string` |
130
- | `FormBuilder.Number` | numeric `InputField` | `number` |
131
- | `FormBuilder.Currency` (`currencySymbol`) | `InputField` + symbol | `number` |
132
- | `FormBuilder.Textarea` | `Textarea` | `string` |
133
- | `FormBuilder.Slider` (`min,max,step,range`) | `@radix-ui/react-slider` | `number` / `[number,number]` |
134
- | `FormBuilder.Color` (`presets`, `alpha`) | `ColorPicker` (full palette: SV area, hue, opacity, eyedropper, HEX/RGB/HSL, presets) | hex `string` (`#rrggbb`, or `#rrggbbaa` when opacity < 100%) |
135
- | `FormBuilder.Phone` (`defaultCountry`) | `SearchableSelect` + `InputField` | `string` |
136
- | `FormBuilder.Select` (`options`) | `Select` | `string` |
137
- | `FormBuilder.SearchableSelect` (`options`, async: `onSearchChange`/`onLoadMore`/`hasMore`) | `SearchableSelect` | `string` |
138
- | `FormBuilder.MultiSelect` / `.Tags` (`options`) | `BadgeField` | `string[]` |
139
- | `FormBuilder.MultiSelect` / `.Tags` (`creatable`) | `BadgeField` with free text | `string[]` — values not in `options` survive |
140
- | `FormBuilder.RadioList` (`options`, each with optional `description`) | boxed radio list | `string` |
141
- | `FormBuilder.CheckboxGroup` (`options`, each with optional `description`) | boxed checkbox list | `string[]` |
142
- | `FormBuilder.RadioCards` (`options` with `description`) | `RadioCard` | `string` |
143
- | `FormBuilder.Checkbox` (`subLabel`) | `Checkbox` + inline label | `boolean` |
144
- | `FormBuilder.SwitchBox` (`subLabel`) | `Switch` in a `#f9f9f9` box | `boolean` |
145
- | `FormBuilder.Otp` (`length`) | `InputOTP` | `string` |
146
- | `FormBuilder.Date` | `DatePicker` | `Date` |
147
- | `FormBuilder.DateRange` | `DatePicker` (range) | `{from,to}` |
148
- | `FormBuilder.DateMultiple` | `DatePicker` (multiple) | `Date[]` |
149
- | `FormBuilder.DateTime` | `DatePicker` (timePicker) | `Date` |
150
- | `FormBuilder.TreeSelect` (`nodes`, `getNodeId`, `getNodeLabel`, …) | `SearchableTree` | node id (`string`) |
151
- | `FormBuilder.File` / `.Image` (`accept`, `multiple`) | `ImageAttachment` | `File \| File[]` |
152
- | `FormBuilder.RichText` | `TextEditor` (EditorJS) | `OutputData` |
153
- | `FormBuilder.Signature` (`penColor`) | canvas pad | PNG data-URL `string` |
154
- | `FormBuilder.FieldArray` (`children` render fn, `defaultItem`) | RHF `useFieldArray` | `object[]` |
155
- | `FormBuilder.Table` (`columns`, `selectable`, `reorderable`, `defaultItem`) | editable grid in a `SectionBlock` | `object[]` |
156
- | `FormBuilder.Custom` (`render`) | your control | anything |
157
-
158
- `FormBuilder.Password` accepts `strengthMeter` (shows a `PasswordLevel` meter). `FormBuilder.FieldArray`
159
- renders a repeating list — its `children` is a render fn `(rowName, index, remove) => …` and sub-fields
160
- are named `${rowName}.field`.
161
-
162
- `FormBuilder.Table` is the **table-shaped** counterpart of `FieldArray` (value `object[]`): an editable
163
- grid where each row is a record and each column cell is any `FormBuilder.*` field. It renders its own
164
- `SectionBlock` (`variant="Table"` — the full-bleed table shell), so place it as a **top-level child** of
165
- the form, **not** inside a `FormRenderer.Section` — nesting produces a card inside a card. When you need a
166
- table that isn't a form field, compose the shell yourself with `SectionBlock variant="Table"` (see
167
- [SectionBlock → Table Variant](./section-block.md#table-variant)).
168
-
169
- Each column pairs a `header` with a `cell(rowName, index)` renderer — name the cell's field
170
- `${rowName}.<key>`. Set `width` to size a column; it is applied to both the header and the body cells.
171
- The section header carries the actions: an **Add New** button and a **Delete Row** button that's disabled
172
- until rows are checkbox-selected. A second **+ Add New** sits below the grid. Both live *outside* the
173
- horizontal scroll container, so they stay put when a wide table is scrolled sideways. Rows support
174
- **checkbox selection** (+ select-all), **drag-drop reordering**, and — per column, via `sortKey` — a
175
- sort toggle in the header. Cells render
176
- "bare" (control only) with validation errors shown as a tooltip on the control, so a row stays one line
177
- tall, and each field passes `onTable` so it's borderless and blends into the grid. Practical cell fields
178
- are the compact ones — `Text`, `Number`, `Currency`, `Select`, `SearchableSelect`, `Date`, `Phone`,
179
- `Checkbox`, `SwitchBox`; wide fields (`RichText`, `Signature`, `File`) work but aren't suited to a cell.
180
- `FormBuilder.Phone` collapses to a **plain number input** in a cell — two controls in one cell is not a
181
- table column, so add a separate column (e.g. a `FormBuilder.Select` of dial codes) if you need the
182
- country code.
183
-
184
- ```tsx
185
- <FormBuilder.Table
186
- name="items"
187
- title="Items"
188
- color="Green"
189
- addLabel="Add item"
190
- defaultItem={{ item: "", category: "hardware", qty: 1, price: 0 }}
191
- columns={[
192
- {
193
- header: "Item",
194
- width: 200,
195
- cell: (row) => <FormBuilder.Text name={`${row}.item`} required />,
196
- },
197
- {
198
- header: "Category",
199
- cell: (row) => <FormBuilder.Select name={`${row}.category`} options={CATEGORY} required />,
200
- },
201
- {
202
- header: "Qty",
203
- width: 110,
204
- cell: (row) => <FormBuilder.Number name={`${row}.qty`} required />,
205
- },
206
- {
207
- header: "Price",
208
- width: 140,
209
- cell: (row) => <FormBuilder.Currency name={`${row}.price`} currencySymbol="$" required />,
210
- },
211
- ]}
212
- />
213
- ```
214
-
215
- `FormBuilder.RadioList` (single-select, `string`) and `FormBuilder.CheckboxGroup` (multi-select,
216
- `string[]`) render their `options` as a boxed, divided list — control on the left, primary
217
- label, and an optional per-option `description` shown as a secondary label. The whole row is
218
- clickable. Multi-select is also available as `.MultiSelect` / `.Tags` (a tag-chip picker). Add
219
- `creatable` to either and the user can type a value that is not in `options` and commit it with
220
- Enter or comma; pass `options={[]}` for a pure free-text list. (`createLabel` is a `BadgeField`
221
- prop — it is not forwarded, so the create row keeps its default label inside a form.)
222
-
223
- `FormBuilder.SwitchBox` (value `boolean`) is a switch wrapped in a `#f9f9f9` field box. It
224
- renders like any other field — the `label` sits in the normal label column — and the box holds
225
- an optional inline `subLabel`, a vertical divider, and the switch.
226
-
227
- To group fields into a titled card, use [`FormRenderer.Section`](./form-renderer.md) — it is
228
- presentation, so it lives there.
229
-
230
- `FormBuilder.Submit` is a loading-aware submit button. It **auto-associates with the enclosing
231
- form** (via context), so it submits even when placed in a header / action bar that renders
232
- _outside_ the `<form>` — no manual `form={id}` wiring.
233
-
234
- It also takes `disabled`, for permission gating: someone with read access should still *see* a
235
- record, so a Save they may not use is disabled rather than removed — a missing button looks broken,
236
- a disabled one says "not yours to change". The server refuses the write either way.
237
-
238
- ## Moved to FormRenderer
239
-
240
- These all used to live here. They are chrome, so they now live on
241
- [FormRenderer](./form-renderer.md):
242
-
243
- | Was | Now |
244
- | --- | --- |
245
- | `FormBuilder.Section` | `FormRenderer.Section` |
246
- | `FormBuilder.Stepper` / `.Step` / `.Back` / `.Next` | `FormRenderer.Stepper` / `.Step` / `.Back` / `.Next` |
247
- | `FormBuilder.Header` | `FormRenderer`'s `header` prop |
248
- | the `layout` prop | gone — the fields always fill their container |
249
- | the `conclusion` prop | `FormRenderer`'s `summary` prop |
250
-
251
- See [the migration note](../migration/form-builder-2.5.2.md) for the full upgrade path.
252
-
253
- ## Calculation panel
254
-
255
- To show computed totals **beside** the form, render a [FormSummary](./form-summary.md)
256
- next to it (not inside it) and share one hoisted form via the `form` prop:
257
-
258
- ```tsx
259
- const form = useForm({ resolver: r, defaultValues: d })
260
-
261
- <div className="flex items-start gap-4">
262
- <FormBuilder form={form} onSubmit={save} className="min-w-0 flex-1">…fields…</FormBuilder>
263
- <FormSummary form={form} title="Invoice">…rows…</FormSummary>
264
- </div>
265
- ```
266
-
267
- `form` makes FormBuilder use an existing react-hook-form instance instead of creating its
268
- own — that's what lets something outside the form read the same live values.
269
-
270
- ## Editing a record
271
-
272
- Pass `values` (not just `defaultValues`); the form repopulates when the data loads. Use a
273
- remount `key` so initial-only inputs (date, rich text) re-seed.
274
-
275
- ```tsx
276
- <FormBuilder key={entity.id} values={entity} onSubmit={save} resolver={r} defaultValues={d}>
277
- …the same fields…
278
- </FormBuilder>
279
- ```
280
-
281
- ## Validation
282
-
283
- Resolver-agnostic — pass any react-hook-form `resolver` (`zodResolver`, a plain
284
- resolver function, etc.). The library never depends on zod.