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,634 +0,0 @@
1
- ---
2
- name: Input
3
- version: 2.4.5
4
- status: stable
5
- category: components/forms
6
- tags: [form, input, text, field, accessible, compound]
7
- last-reviewed: 2024-11-05
8
- bundle-size: 2.8kb
9
- dependencies:
10
- - "class-variance-authority": "^0.7.0"
11
- ---
12
-
13
- # Input
14
-
15
- > A versatile text input component with compound architecture, supporting icons, trailing elements, and multiple style variants. Built with accessibility and flexibility in mind.
16
-
17
- ## Installation
18
-
19
- TORCH Glare is a copy-in library: the CLI copies this component's source into your project
20
- (you do **not** install it from the npm package). Run `init` once, then `add`:
21
-
22
- ```bash
23
- npx torch-glare@latest init
24
- npx torch-glare@latest add Input
25
- ```
26
-
27
- `add` also copies any components, hooks, and utilities that `Input` depends on.
28
-
29
- ## Import
30
-
31
- Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
32
-
33
- ```tsx
34
- import { Input } from "@/components/Input";
35
- ```
36
-
37
- ## Quick Examples
38
-
39
- ### Basic Usage
40
-
41
- ```typescript
42
- import { Input } from '@/components/Input'
43
-
44
- function Example() {
45
- const [value, setValue] = useState('')
46
-
47
- return (
48
- <Input.Group>
49
- <Input
50
- value={value}
51
- onChange={(e) => setValue(e.target.value)}
52
- placeholder="Enter text..."
53
- />
54
- </Input.Group>
55
- )
56
- }
57
- ```
58
-
59
- ### With Icon
60
-
61
- ```typescript
62
- import { Input } from '@/components/Input'
63
- import { SearchIcon } from '@heroicons/react/24/outline'
64
-
65
- function SearchInput() {
66
- return (
67
- <Input.Group>
68
- <Input.Icon>
69
- <SearchIcon className="w-5 h-5" />
70
- </Input.Icon>
71
- <Input placeholder="Search..." />
72
- </Input.Group>
73
- )
74
- }
75
- ```
76
-
77
- ### With Trailing Element
78
-
79
- ```typescript
80
- import { Input } from '@/components/Input'
81
- import { Button } from '@/components/Button'
82
-
83
- function InputWithButton() {
84
- return (
85
- <Input.Group>
86
- <Input placeholder="Enter email..." />
87
- <Input.Trilling>
88
- <Button size="S" variant="PrimeStyle">
89
- Subscribe
90
- </Button>
91
- </Input.Trilling>
92
- </Input.Group>
93
- )
94
- }
95
- ```
96
-
97
- ### Error State
98
-
99
- ```typescript
100
- function ErrorInput() {
101
- const [error, setError] = useState(true)
102
-
103
- return (
104
- <Input.Group error={error}>
105
- <Input
106
- placeholder="Email address"
107
- aria-invalid={error}
108
- />
109
- </Input.Group>
110
- )
111
- }
112
- ```
113
-
114
- ### Different Sizes
115
-
116
- ```typescript
117
- // Small size
118
- <Input.Group size="S">
119
- <Input placeholder="Small input" />
120
- </Input.Group>
121
-
122
- // Medium size (default)
123
- <Input.Group size="M">
124
- <Input placeholder="Medium input" />
125
- </Input.Group>
126
- ```
127
-
128
- ### Different Variants
129
-
130
- ```typescript
131
- // Presentation style (default)
132
- <Input.Group variant="PresentationStyle">
133
- <Input placeholder="Presentation style" />
134
- </Input.Group>
135
-
136
- // System style
137
- <Input.Group variant="SystemStyle">
138
- <Input placeholder="System style" />
139
- </Input.Group>
140
- ```
141
-
142
- ### Password Input
143
-
144
- ```typescript
145
- import { useState } from 'react'
146
- import { EyeIcon, EyeSlashIcon } from '@heroicons/react/24/outline'
147
-
148
- function PasswordInput() {
149
- const [showPassword, setShowPassword] = useState(false)
150
-
151
- return (
152
- <Input.Group>
153
- <Input
154
- type={showPassword ? 'text' : 'password'}
155
- placeholder="Enter password..."
156
- />
157
- <Input.Trilling>
158
- <button
159
- onClick={() => setShowPassword(!showPassword)}
160
- className="p-2"
161
- >
162
- {showPassword ? (
163
- <EyeSlashIcon className="w-4 h-4" />
164
- ) : (
165
- <EyeIcon className="w-4 h-4" />
166
- )}
167
- </button>
168
- </Input.Trilling>
169
- </Input.Group>
170
- )
171
- }
172
- ```
173
-
174
- ## API Reference
175
-
176
- ### Input.Group Props
177
-
178
- | Prop | Type | Default | Description |
179
- |------|------|---------|-------------|
180
- | `size` | `'S' \| 'M'` | `'M'` | Size of the input group |
181
- | `variant` | `'PresentationStyle' \| 'SystemStyle'` | `'PresentationStyle'` | Visual style variant |
182
- | `error` | `boolean` | `false` | Shows error state styling |
183
- | `onTable` | `boolean` | `false` | Optimized styling for table context |
184
- | `className` | `string` | - | Additional CSS classes |
185
- | `children` | `React.ReactNode` | - | Input and related elements |
186
-
187
- ### Input Props
188
-
189
- | Prop | Type | Default | Description |
190
- |------|------|---------|-------------|
191
- | `type` | `string` | `'text'` | HTML input type |
192
- | `value` | `string \| number` | - | Input value |
193
- | `onChange` | `(e: ChangeEvent) => void` | - | Change event handler |
194
- | `placeholder` | `string` | - | Placeholder text |
195
- | `disabled` | `boolean` | `false` | Disables the input |
196
- | `required` | `boolean` | `false` | Makes field required |
197
- | `pattern` | `string` | - | Validation pattern |
198
- | `maxLength` | `number` | - | Maximum character length |
199
- | `minLength` | `number` | - | Minimum character length |
200
- | `className` | `string` | - | Additional CSS classes |
201
- | `autoComplete` | `string` | `'off'` | Autocomplete behavior |
202
-
203
- ### Input.Icon Props
204
-
205
- | Prop | Type | Default | Description |
206
- |------|------|---------|-------------|
207
- | `children` | `React.ReactNode` | - | Icon element |
208
- | `className` | `string` | - | Additional CSS classes |
209
-
210
- ### Input.Trilling Props
211
-
212
- | Prop | Type | Default | Description |
213
- |------|------|---------|-------------|
214
- | `children` | `React.ReactNode` | - | Trailing elements |
215
- | `className` | `string` | - | Additional CSS classes |
216
-
217
- ### TypeScript
218
-
219
- ```typescript
220
- // Group component types
221
- interface InputGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, "size"> {
222
- size?: 'S' | 'M'
223
- variant?: 'PresentationStyle' | 'SystemStyle'
224
- error?: boolean
225
- onTable?: boolean
226
- className?: string
227
- children?: React.ReactNode
228
- }
229
-
230
- // Input component types
231
- interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"> {
232
- className?: string
233
- }
234
-
235
- // Icon component types
236
- interface IconProps {
237
- children: React.ReactNode
238
- className?: string
239
- }
240
-
241
- // Trilling component types
242
- interface TrillingProps extends HTMLAttributes<HTMLDivElement> {
243
- children: React.ReactNode
244
- className?: string
245
- }
246
-
247
- // Compound component exports
248
- export const Input: React.ForwardRefExoticComponent<InputProps> & {
249
- Group: React.ForwardRefExoticComponent<InputGroupProps>
250
- Icon: React.FC<IconProps>
251
- Trilling: React.FC<TrillingProps>
252
- }
253
- ```
254
-
255
- ## Common Patterns
256
-
257
- ### Form Field with Label
258
-
259
- ```typescript
260
- import { Input } from '@/components/Input'
261
- import { Label } from '@/components/Label'
262
-
263
- function FormField() {
264
- const [value, setValue] = useState('')
265
-
266
- return (
267
- <div className="space-y-2">
268
- <Label htmlFor="email">Email Address</Label>
269
- <Input.Group>
270
- <Input
271
- id="email"
272
- type="email"
273
- value={value}
274
- onChange={(e) => setValue(e.target.value)}
275
- placeholder="john@example.com"
276
- required
277
- />
278
- </Input.Group>
279
- </div>
280
- )
281
- }
282
- ```
283
-
284
- ### Search Field
285
-
286
- ```typescript
287
- import { Input } from '@/components/Input'
288
- import { SearchIcon, XMarkIcon } from '@heroicons/react/24/outline'
289
-
290
- function SearchField() {
291
- const [search, setSearch] = useState('')
292
-
293
- const handleClear = () => setSearch('')
294
-
295
- return (
296
- <Input.Group>
297
- <Input.Icon>
298
- <SearchIcon className="w-5 h-5" />
299
- </Input.Icon>
300
- <Input
301
- value={search}
302
- onChange={(e) => setSearch(e.target.value)}
303
- placeholder="Search..."
304
- />
305
- {search && (
306
- <Input.Trilling>
307
- <button onClick={handleClear} className="p-1">
308
- <XMarkIcon className="w-4 h-4" />
309
- </button>
310
- </Input.Trilling>
311
- )}
312
- </Input.Group>
313
- )
314
- }
315
- ```
316
-
317
- ### Input with Validation
318
-
319
- ```typescript
320
- function ValidatedInput() {
321
- const [value, setValue] = useState('')
322
- const [error, setError] = useState('')
323
-
324
- const validate = (val: string) => {
325
- if (!val) {
326
- setError('Field is required')
327
- return false
328
- }
329
- if (val.length < 3) {
330
- setError('Minimum 3 characters required')
331
- return false
332
- }
333
- setError('')
334
- return true
335
- }
336
-
337
- const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
338
- const newValue = e.target.value
339
- setValue(newValue)
340
- validate(newValue)
341
- }
342
-
343
- return (
344
- <div className="space-y-1">
345
- <Input.Group error={!!error}>
346
- <Input
347
- value={value}
348
- onChange={handleChange}
349
- placeholder="Enter username..."
350
- aria-invalid={!!error}
351
- aria-describedby={error ? "error-message" : undefined}
352
- />
353
- </Input.Group>
354
- {error && (
355
- <p id="error-message" className="text-sm text-red-500">
356
- {error}
357
- </p>
358
- )}
359
- </div>
360
- )
361
- }
362
- ```
363
-
364
- ### Currency Input
365
-
366
- ```typescript
367
- function CurrencyInput() {
368
- const [amount, setAmount] = useState('')
369
-
370
- const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
371
- const value = e.target.value.replace(/[^0-9.]/g, '')
372
- setAmount(value)
373
- }
374
-
375
- return (
376
- <Input.Group>
377
- <Input.Icon>
378
- <span className="text-sm font-medium">$</span>
379
- </Input.Icon>
380
- <Input
381
- value={amount}
382
- onChange={handleChange}
383
- placeholder="0.00"
384
- inputMode="decimal"
385
- />
386
- <Input.Trilling>
387
- <span className="text-sm text-gray-500">USD</span>
388
- </Input.Trilling>
389
- </Input.Group>
390
- )
391
- }
392
- ```
393
-
394
- ## Testing
395
-
396
- ### Unit Test Example
397
-
398
- ```typescript
399
- import { render, screen, fireEvent } from '@testing-library/react'
400
- import { Input } from '@/components/Input'
401
-
402
- describe('Input', () => {
403
- it('handles user input', () => {
404
- const handleChange = jest.fn()
405
- render(
406
- <Input.Group>
407
- <Input
408
- onChange={handleChange}
409
- placeholder="Type here..."
410
- />
411
- </Input.Group>
412
- )
413
-
414
- const input = screen.getByPlaceholderText('Type here...')
415
- fireEvent.change(input, { target: { value: 'Hello' } })
416
-
417
- expect(handleChange).toHaveBeenCalled()
418
- expect(input).toHaveValue('Hello')
419
- })
420
-
421
- it('shows error state', () => {
422
- const { container } = render(
423
- <Input.Group error>
424
- <Input placeholder="Error input" />
425
- </Input.Group>
426
- )
427
-
428
- const group = container.firstChild
429
- expect(group).toHaveClass('error')
430
- })
431
-
432
- it('disables input when disabled prop is passed', () => {
433
- render(
434
- <Input.Group>
435
- <Input disabled placeholder="Disabled" />
436
- </Input.Group>
437
- )
438
-
439
- const input = screen.getByPlaceholderText('Disabled')
440
- expect(input).toBeDisabled()
441
- })
442
- })
443
- ```
444
-
445
- ### Accessibility Test
446
-
447
- ```typescript
448
- import { axe } from '@axe-core/react'
449
-
450
- test('Input meets WCAG standards', async () => {
451
- const { container } = render(
452
- <div>
453
- <label htmlFor="test-input">Name</label>
454
- <Input.Group>
455
- <Input
456
- id="test-input"
457
- placeholder="Enter name..."
458
- />
459
- </Input.Group>
460
- </div>
461
- )
462
-
463
- const results = await axe(container)
464
- expect(results).toHaveNoViolations()
465
- })
466
- ```
467
-
468
- ## Accessibility
469
-
470
- ### Keyboard Support
471
-
472
- - **Tab**: Move focus to/from input
473
- - **Arrow Keys**: Navigate text cursor
474
- - **Home/End**: Jump to start/end of text
475
- - **Backspace/Delete**: Remove characters
476
-
477
- ### ARIA Attributes
478
-
479
- ```typescript
480
- // Error state
481
- <Input
482
- aria-invalid={hasError}
483
- aria-describedby="error-message"
484
- />
485
-
486
- // Required field
487
- <Input
488
- aria-required="true"
489
- required
490
- />
491
-
492
- // With label
493
- <label htmlFor="email">Email</label>
494
- <Input id="email" />
495
- ```
496
-
497
- ### Screen Reader Support
498
-
499
- - Announces input type and state
500
- - Reads placeholder text
501
- - Announces error messages when linked with aria-describedby
502
- - Supports label association
503
-
504
- ### Focus Management
505
-
506
- - Visible focus ring on keyboard navigation
507
- - Auto-scrolls to end of text on focus
508
- - Maintains focus during value changes
509
-
510
- ## Styling
511
-
512
- ### Custom Styles with className
513
-
514
- ```typescript
515
- <Input.Group className="border-2 border-blue-500">
516
- <Input className="font-mono text-lg" />
517
- </Input.Group>
518
- ```
519
-
520
- ### CSS Variables
521
-
522
- ```css
523
- /* Custom theme variables */
524
- [data-theme="custom"] {
525
- --input-bg: #your-background;
526
- --input-border: #your-border;
527
- --input-text: #your-text;
528
- --input-placeholder: #your-placeholder;
529
- --input-focus: #your-focus-color;
530
- }
531
- ```
532
-
533
- ## Performance
534
-
535
- | Metric | Value |
536
- |--------|-------|
537
- | Bundle size (gzip) | 2.8kb |
538
- | First render | <8ms |
539
- | Re-render | <3ms |
540
- | Tree-shakeable | ✅ |
541
-
542
- ### Optimization Tips
543
-
544
- 1. Use `React.memo()` for parent components
545
- 2. Debounce onChange handlers for expensive operations
546
- 3. Use `useCallback` for event handlers
547
- 4. Consider virtual scrolling for long lists of inputs
548
-
549
- ## Migration
550
-
551
- ### From v1.0.x
552
-
553
- ```diff
554
- // Import path changed
555
- - import Input from 'torch-glare/Input'
556
- + import { Input } from '@/components/Input'
557
-
558
- // Compound component structure
559
- - <Input icon={<SearchIcon />} />
560
- + <Input.Group>
561
- + <Input.Icon><SearchIcon /></Input.Icon>
562
- + <Input />
563
- + </Input.Group>
564
- ```
565
-
566
- ## Troubleshooting
567
-
568
- ### Common Issues
569
-
570
- #### Input doesn't update value
571
-
572
- **Solution:** Ensure you're controlling the value properly
573
-
574
- ```typescript
575
- // ❌ Wrong
576
- <Input value="static" />
577
-
578
- // ✅ Correct
579
- const [value, setValue] = useState('')
580
- <Input value={value} onChange={(e) => setValue(e.target.value)} />
581
- ```
582
-
583
- #### Autocomplete not working
584
-
585
- **Solution:** Set autoComplete prop appropriately
586
-
587
- ```typescript
588
- <Input
589
- type="email"
590
- autoComplete="email"
591
- name="email"
592
- />
593
- ```
594
-
595
- #### Focus styles not showing
596
-
597
- **Solution:** Check if parent styles are overriding focus styles
598
-
599
- ```typescript
600
- <Input.Group className="focus-within:ring-2 focus-within:ring-blue-500">
601
- <Input />
602
- </Input.Group>
603
- ```
604
-
605
- ## Related Components
606
-
607
- - [InputField](/docs/components/input-field.md) - Input with integrated label
608
- - [SearchField](/docs/components/search-field.md) - Specialized search input
609
- - [Textarea](/docs/components/textarea.md) - Multi-line text input
610
- - [Select](/docs/components/select.md) - Dropdown selection
611
- - [Form](/docs/components/form.md) - Form wrapper with validation
612
-
613
- ## Browser Support
614
-
615
- - Chrome 90+ ✅
616
- - Firefox 88+ ✅
617
- - Safari 14+ ✅
618
- - Edge 90+ ✅
619
- - Mobile browsers ✅
620
-
621
- ## Changelog
622
-
623
- ### v1.1.15
624
- - Added compound component architecture
625
- - Improved auto-scroll behavior
626
- - Enhanced TypeScript types
627
-
628
- ### v1.1.14
629
- - Added error state styling
630
- - Fixed focus management
631
- - Performance optimizations
632
-
633
- ### v1.1.0
634
- - Initial stable release