torch-glare 2.5.5 → 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 (359) 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 -338
  69. package/apps/lib/components/Breadcrumb.tsx +0 -280
  70. package/apps/lib/components/Button.tsx +0 -317
  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 -383
  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 -84
  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 -63
  106. package/apps/lib/components/DataViews/states.tsx +0 -38
  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 -420
  118. package/apps/lib/components/DropdownMenu.tsx +0 -540
  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 -73
  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 -163
  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 -91
  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 -47
  147. package/apps/lib/components/FormBuilder/types.ts +0 -311
  148. package/apps/lib/components/FormRenderer/FormDrawer.tsx +0 -128
  149. package/apps/lib/components/FormRenderer/detail.tsx +0 -207
  150. package/apps/lib/components/FormRenderer/form-renderer.tsx +0 -297
  151. package/apps/lib/components/FormRenderer/header.tsx +0 -88
  152. package/apps/lib/components/FormRenderer/index.ts +0 -15
  153. package/apps/lib/components/FormRenderer/section.tsx +0 -39
  154. package/apps/lib/components/FormRenderer/stepper.tsx +0 -339
  155. package/apps/lib/components/FormRenderer/types.ts +0 -78
  156. package/apps/lib/components/FormSummary.tsx +0 -282
  157. package/apps/lib/components/HeaderBar.tsx +0 -117
  158. package/apps/lib/components/ImageAttachment.tsx +0 -209
  159. package/apps/lib/components/InnerLabelField.tsx +0 -154
  160. package/apps/lib/components/Input.tsx +0 -224
  161. package/apps/lib/components/InputField.tsx +0 -147
  162. package/apps/lib/components/InputOTP.tsx +0 -84
  163. package/apps/lib/components/Label.tsx +0 -129
  164. package/apps/lib/components/LabelField.tsx +0 -76
  165. package/apps/lib/components/LabeledCheckBox.tsx +0 -51
  166. package/apps/lib/components/LabeledRadio.tsx +0 -51
  167. package/apps/lib/components/LinkButton.tsx +0 -94
  168. package/apps/lib/components/LoginButton.tsx +0 -51
  169. package/apps/lib/components/PasswordLevel.tsx +0 -58
  170. package/apps/lib/components/Popover.tsx +0 -312
  171. package/apps/lib/components/ProfileMenu.tsx +0 -85
  172. package/apps/lib/components/Radio.tsx +0 -59
  173. package/apps/lib/components/RadioCard.tsx +0 -50
  174. package/apps/lib/components/ScrollArea.tsx +0 -54
  175. package/apps/lib/components/SearchField.tsx +0 -62
  176. package/apps/lib/components/SearchableSelect.tsx +0 -318
  177. package/apps/lib/components/SearchableTable.tsx +0 -344
  178. package/apps/lib/components/SearchableTree.tsx +0 -485
  179. package/apps/lib/components/SearchableTreeDialog.tsx +0 -502
  180. package/apps/lib/components/SectionBlock.tsx +0 -147
  181. package/apps/lib/components/Select.tsx +0 -347
  182. package/apps/lib/components/SimpleSelect.tsx +0 -225
  183. package/apps/lib/components/Skeleton.tsx +0 -12
  184. package/apps/lib/components/SlideDatePicker.tsx +0 -253
  185. package/apps/lib/components/SpinLoading.tsx +0 -174
  186. package/apps/lib/components/Stepper.tsx +0 -480
  187. package/apps/lib/components/Switch.tsx +0 -82
  188. package/apps/lib/components/TabFormItem.tsx +0 -153
  189. package/apps/lib/components/TabSwitch.tsx +0 -172
  190. package/apps/lib/components/Table.tsx +0 -610
  191. package/apps/lib/components/TextEditor/ChartBlockTool.ts +0 -676
  192. package/apps/lib/components/TextEditor/RichTextField.tsx +0 -46
  193. package/apps/lib/components/TextEditor/TableDnDWrapper.ts +0 -462
  194. package/apps/lib/components/TextEditor/TextEditor.tsx +0 -1164
  195. package/apps/lib/components/TextEditor/TextEditorToolbar.tsx +0 -429
  196. package/apps/lib/components/TextEditor/editor-tools/AlignmentTune.ts +0 -70
  197. package/apps/lib/components/TextEditor/editor-tools/ColorInlineTool.ts +0 -50
  198. package/apps/lib/components/TextEditor/editor-tools/StrikethroughInlineTool.ts +0 -48
  199. package/apps/lib/components/TextEditor/editor-tools/inlineFormat.ts +0 -98
  200. package/apps/lib/components/TextEditor/editorjs.d.ts +0 -60
  201. package/apps/lib/components/TextEditor/index.ts +0 -7
  202. package/apps/lib/components/TextEditor/markdownParser.ts +0 -346
  203. package/apps/lib/components/Textarea.tsx +0 -117
  204. package/apps/lib/components/Timeline.tsx +0 -263
  205. package/apps/lib/components/Toast.tsx +0 -87
  206. package/apps/lib/components/Toggle.tsx +0 -125
  207. package/apps/lib/components/ToggleButton.tsx +0 -140
  208. package/apps/lib/components/Tooltip.tsx +0 -116
  209. package/apps/lib/components/TransparentLabel.tsx +0 -71
  210. package/apps/lib/components/TreeDropDown.tsx +0 -115
  211. package/apps/lib/components/TreeFolder/TreeFolder.tsx +0 -380
  212. package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +0 -75
  213. package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +0 -354
  214. package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +0 -60
  215. package/apps/lib/components/TreeFolder/icons.tsx +0 -60
  216. package/apps/lib/components/TreeFolder/index.ts +0 -24
  217. package/apps/lib/components/TreeFolder/treeFolderUtils.ts +0 -109
  218. package/apps/lib/components/TreeFolder/types.ts +0 -77
  219. package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +0 -118
  220. package/apps/lib/hooks/useActiveTreeItem.ts +0 -58
  221. package/apps/lib/hooks/useClickOutside.ts +0 -27
  222. package/apps/lib/hooks/useDragDrop.tsx +0 -365
  223. package/apps/lib/hooks/useInfiniteScroll.ts +0 -108
  224. package/apps/lib/hooks/useIsMobile.ts +0 -21
  225. package/apps/lib/hooks/useResize.ts +0 -67
  226. package/apps/lib/hooks/useTagSelection.ts +0 -214
  227. package/apps/lib/layouts/CNLayout.tsx +0 -372
  228. package/apps/lib/layouts/DataViewCard.tsx +0 -62
  229. package/apps/lib/layouts/FieldSection.tsx +0 -91
  230. package/apps/lib/layouts/TreeSubLayout.tsx +0 -173
  231. package/apps/lib/providers/ThemeProvider.tsx +0 -84
  232. package/apps/lib/registry.json +0 -1201
  233. package/apps/lib/tsconfig.json +0 -9
  234. package/apps/lib/tsconfig.tsbuildinfo +0 -1
  235. package/apps/lib/utils/cn.ts +0 -6
  236. package/apps/lib/utils/color.ts +0 -175
  237. package/apps/lib/utils/dataViews/path.ts +0 -67
  238. package/apps/lib/utils/dataViews/query.ts +0 -73
  239. package/apps/lib/utils/dataViews/types.ts +0 -187
  240. package/apps/lib/utils/dateFormat.ts +0 -108
  241. package/apps/lib/utils/resize.ts +0 -31
  242. package/apps/lib/utils/types.ts +0 -16
  243. package/docs/BLOCKS.md +0 -129
  244. package/docs/CHANGELOG-1.1.16.md +0 -108
  245. package/docs/Cover.png +0 -0
  246. package/docs/README.md +0 -215
  247. package/docs/components/action-button.md +0 -638
  248. package/docs/components/actions-group.md +0 -708
  249. package/docs/components/alert-dialog.md +0 -920
  250. package/docs/components/avatar.md +0 -709
  251. package/docs/components/badge-field.md +0 -712
  252. package/docs/components/badge.md +0 -301
  253. package/docs/components/breadcrumb.md +0 -930
  254. package/docs/components/button-group.md +0 -650
  255. package/docs/components/button.md +0 -639
  256. package/docs/components/calendar.md +0 -555
  257. package/docs/components/card.md +0 -622
  258. package/docs/components/chart-block-tool.md +0 -129
  259. package/docs/components/checkbox.md +0 -699
  260. package/docs/components/cn-layout.md +0 -854
  261. package/docs/components/color-picker.md +0 -101
  262. package/docs/components/conclusion-header.md +0 -80
  263. package/docs/components/context-menu.md +0 -483
  264. package/docs/components/count-badge.md +0 -560
  265. package/docs/components/data-table.md +0 -854
  266. package/docs/components/data-views/backend-response.md +0 -324
  267. package/docs/components/data-views/examples/a11y-rtl.md +0 -250
  268. package/docs/components/data-views/examples/api-orders-route.md +0 -130
  269. package/docs/components/data-views/examples/fields.md +0 -362
  270. package/docs/components/data-views/examples/filters.md +0 -307
  271. package/docs/components/data-views/examples/inbox-routing.md +0 -218
  272. package/docs/components/data-views/examples/index.md +0 -29
  273. package/docs/components/data-views/examples/overview.md +0 -244
  274. package/docs/components/data-views/examples/panel.md +0 -212
  275. package/docs/components/data-views/examples/scale.md +0 -231
  276. package/docs/components/data-views/examples/server-side.md +0 -210
  277. package/docs/components/data-views/examples/state.md +0 -250
  278. package/docs/components/data-views/examples/tree-custom.md +0 -388
  279. package/docs/components/data-views/examples/view-registry.md +0 -313
  280. package/docs/components/data-views/examples/views.md +0 -534
  281. package/docs/components/data-views/guide.md +0 -405
  282. package/docs/components/data-views/index.md +0 -1495
  283. package/docs/components/data-views/migration.md +0 -79
  284. package/docs/components/date-picker.md +0 -857
  285. package/docs/components/dialog.md +0 -929
  286. package/docs/components/divider.md +0 -766
  287. package/docs/components/drawer.md +0 -654
  288. package/docs/components/dropdown-menu.md +0 -668
  289. package/docs/components/field-hint.md +0 -898
  290. package/docs/components/field-section.md +0 -781
  291. package/docs/components/form-builder.md +0 -276
  292. package/docs/components/form-renderer.md +0 -326
  293. package/docs/components/form-summary.md +0 -138
  294. package/docs/components/form.md +0 -785
  295. package/docs/components/header-bar.md +0 -188
  296. package/docs/components/image-attachment.md +0 -906
  297. package/docs/components/inner-label-field.md +0 -819
  298. package/docs/components/input-field.md +0 -623
  299. package/docs/components/input-otp.md +0 -756
  300. package/docs/components/input.md +0 -634
  301. package/docs/components/label-field.md +0 -770
  302. package/docs/components/label.md +0 -761
  303. package/docs/components/labeled-check-box.md +0 -642
  304. package/docs/components/labeled-radio.md +0 -796
  305. package/docs/components/link-button.md +0 -685
  306. package/docs/components/login-button.md +0 -872
  307. package/docs/components/password-level.md +0 -803
  308. package/docs/components/popover.md +0 -649
  309. package/docs/components/profile-menu.md +0 -656
  310. package/docs/components/radio-card.md +0 -801
  311. package/docs/components/radio.md +0 -735
  312. package/docs/components/scroll-area.md +0 -691
  313. package/docs/components/search-field.md +0 -702
  314. package/docs/components/searchable-select.md +0 -368
  315. package/docs/components/searchable-table.md +0 -438
  316. package/docs/components/searchable-tree-dialog.md +0 -190
  317. package/docs/components/searchable-tree.md +0 -200
  318. package/docs/components/section-block.md +0 -477
  319. package/docs/components/select.md +0 -709
  320. package/docs/components/simple-select.md +0 -741
  321. package/docs/components/skeleton.md +0 -706
  322. package/docs/components/slide-date-picker.md +0 -837
  323. package/docs/components/spin-loading.md +0 -696
  324. package/docs/components/stepper.md +0 -316
  325. package/docs/components/switch.md +0 -770
  326. package/docs/components/tab-form-item.md +0 -773
  327. package/docs/components/tab-switch.md +0 -170
  328. package/docs/components/table-dnd-wrapper.md +0 -107
  329. package/docs/components/table.md +0 -1088
  330. package/docs/components/text-editor.md +0 -735
  331. package/docs/components/textarea.md +0 -681
  332. package/docs/components/timeline.md +0 -254
  333. package/docs/components/toast.md +0 -773
  334. package/docs/components/toggle-button.md +0 -643
  335. package/docs/components/toggle.md +0 -882
  336. package/docs/components/tooltip.md +0 -513
  337. package/docs/components/transparent-label.md +0 -721
  338. package/docs/components/tree-drop-down.md +0 -740
  339. package/docs/components/tree-folder.md +0 -110
  340. package/docs/components/tree-sub-layout.md +0 -707
  341. package/docs/explanation/architecture.md +0 -54
  342. package/docs/explanation/design-system.md +0 -52
  343. package/docs/how-to/form-and-list-recipes.md +0 -386
  344. package/docs/how-to/forms-with-form-builder.md +0 -472
  345. package/docs/how-to/guides.md +0 -1027
  346. package/docs/migration/changelog.md +0 -54
  347. package/docs/migration/form-builder-2.5.2.md +0 -113
  348. package/docs/reference/cli.md +0 -112
  349. package/docs/reference/components.md +0 -572
  350. package/docs/reference/hooks.md +0 -1500
  351. package/docs/reference/providers.md +0 -866
  352. package/docs/reference/tailwind-plugins.md +0 -942
  353. package/docs/reference/theme.md +0 -85
  354. package/docs/reference/types.md +0 -1016
  355. package/docs/reference/utilities.md +0 -704
  356. package/docs/tutorials/building-first-form.md +0 -846
  357. package/docs/tutorials/component-composition.md +0 -882
  358. package/docs/tutorials/getting-started.md +0 -302
  359. package/docs/tutorials/theming-basics.md +0 -785
@@ -1,639 +0,0 @@
1
- ---
2
- name: Button
3
- version: 2.4.5
4
- status: stable
5
- category: components/buttons
6
- tags: [interactive, form, action, accessible, polymorphic]
7
- last-reviewed: 2024-11-05
8
- bundle-size: 3.2kb
9
- dependencies:
10
- - "@radix-ui/react-slot": "^1.0.0"
11
- - "class-variance-authority": "^0.7.0"
12
- ---
13
-
14
- # Button
15
-
16
- > A versatile, accessible button component with multiple variants, sizes, and states. Supports icons, loading states, and polymorphic rendering through the `as` prop.
17
-
18
- ## Installation
19
-
20
- TORCH Glare is a copy-in library: the CLI copies this component's source into your project
21
- (you do **not** install it from the npm package). Run `init` once, then `add`:
22
-
23
- ```bash
24
- npx torch-glare@latest init
25
- npx torch-glare@latest add Button
26
- ```
27
-
28
- `add` also copies any components, hooks, and utilities that `Button` depends on.
29
-
30
- ## Import
31
-
32
- Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
33
-
34
- ```tsx
35
- import { Button } from "@/components/Button";
36
- ```
37
-
38
- ## Quick Examples
39
-
40
- ### Basic Usage
41
-
42
- ```typescript
43
- import { Button } from '@/components/Button'
44
-
45
- function Example() {
46
- return (
47
- <Button variant="PrimeStyle" onClick={() => console.log('clicked')}>
48
- Click me
49
- </Button>
50
- )
51
- }
52
- ```
53
-
54
- ### All Variants
55
-
56
- ```typescript
57
- // Primary styles
58
- <Button variant="PrimeStyle">Primary</Button>
59
- <Button variant="PrimeContStyle">Primary Container</Button>
60
-
61
- // Secondary styles
62
- <Button variant="BluSecStyle">Blue Secondary</Button>
63
- <Button variant="YelSecStyle">Yellow Secondary</Button>
64
- <Button variant="RedSecStyle">Red Secondary</Button>
65
-
66
- // Container styles
67
- <Button variant="BluContStyle">Blue Container</Button>
68
- <Button variant="RedContStyle">Red Container</Button>
69
-
70
- // Color (solid) styles
71
- <Button variant="PrimeColStyle">Primary Color</Button>
72
- <Button variant="BluColStyle">Blue Color</Button>
73
- <Button variant="RedColStyle">Red Color</Button>
74
- <Button variant="GreenColStyle">Green Color</Button>
75
- <Button variant="YelColStyle">Yellow Color</Button>
76
-
77
- // Border style
78
- <Button variant="BorderStyle">Border Only</Button>
79
- ```
80
-
81
- ### With Sizes
82
-
83
- ```typescript
84
- <Button size="S">Small</Button>
85
- <Button size="M">Medium (Default)</Button>
86
- <Button size="L">Large</Button>
87
- <Button size="XL">Extra Large</Button>
88
- <Button buttonType="icon">Icon Only</Button>
89
- ```
90
-
91
- ### Loading State
92
-
93
- ```typescript
94
- function SaveButton() {
95
- const [loading, setLoading] = useState(false)
96
-
97
- const handleSave = async () => {
98
- setLoading(true)
99
- await saveData()
100
- setLoading(false)
101
- }
102
-
103
- return (
104
- <Button
105
- variant="PrimeStyle"
106
- is_loading={loading}
107
- onClick={handleSave}
108
- >
109
- {loading ? 'Saving...' : 'Save'}
110
- </Button>
111
- )
112
- }
113
- ```
114
-
115
- ### With Icons
116
-
117
- ```typescript
118
- import { PlusIcon, TrashIcon } from '@heroicons/react/24/outline'
119
-
120
- // Icon before text
121
- <Button variant="PrimeStyle">
122
- <PlusIcon className="w-4 h-4 mr-2" />
123
- Add Item
124
- </Button>
125
-
126
- // Icon after text
127
- <Button variant="RedSecStyle">
128
- Delete
129
- <TrashIcon className="w-4 h-4 ml-2" />
130
- </Button>
131
-
132
- // Icon only
133
- <Button buttonType="icon" aria-label="Add new item">
134
- <PlusIcon className="w-5 h-5" />
135
- </Button>
136
- ```
137
-
138
- ### Polymorphic Component
139
-
140
- ```typescript
141
- // Render as anchor tag
142
- <Button as="a" href="/about" variant="BorderStyle">
143
- Learn More
144
- </Button>
145
-
146
- // Using asChild for complete control
147
- <Button asChild variant="PrimeStyle">
148
- <Link href="/dashboard">Go to Dashboard</Link>
149
- </Button>
150
- ```
151
-
152
- ### With Theme Override
153
-
154
- ```typescript
155
- <Button theme="dark" variant="PrimeStyle">
156
- Dark Theme Button
157
- </Button>
158
-
159
- <Button theme="light" variant="BluSecStyle">
160
- Light Theme Button
161
- </Button>
162
- ```
163
-
164
- ## API Reference
165
-
166
- ### Props
167
-
168
- | Prop | Type | Default | Description |
169
- |------|------|---------|-------------|
170
- | `variant` | `ButtonVariant` | `'PrimeStyle'` | Visual style variant of the button |
171
- | `size` | `'S' \| 'M' \| 'L' \| 'XL'` | `'M'` | Size of the button |
172
- | `buttonType` | `'button' \| 'icon'` | `'button'` | Layout type; `'icon'` renders a square icon-only button |
173
- | `is_loading` | `boolean` | `false` | Shows loading state and disables interaction |
174
- | `disabled` | `boolean` | `false` | Disables the button |
175
- | `asChild` | `boolean` | `false` | Merges props onto child element |
176
- | `as` | `React.ElementType` | `'button'` | Element type to render as |
177
- | `theme` | `'light' \| 'dark' \| 'default'` | - | Override theme for this component |
178
- | `containerClassName` | `string` | - | Additional classes for wrapper |
179
- | `className` | `string` | - | Additional CSS classes |
180
- | `type` | `'button' \| 'submit' \| 'reset'` | `'button'` | HTML button type |
181
- | `onClick` | `(event: MouseEvent) => void` | - | Click event handler |
182
- | `children` | `React.ReactNode` | - | Button content |
183
-
184
- ### TypeScript
185
-
186
- ```typescript
187
- import { ButtonHTMLAttributes } from 'react'
188
- import { VariantProps } from 'class-variance-authority'
189
-
190
- type ButtonVariant =
191
- | 'PrimeStyle'
192
- | 'BluSecStyle'
193
- | 'YelSecStyle'
194
- | 'RedSecStyle'
195
- | 'BorderStyle'
196
- | 'PrimeContStyle'
197
- | 'BluContStyle'
198
- | 'RedContStyle'
199
- | 'PrimeColStyle'
200
- | 'BluColStyle'
201
- | 'RedColStyle'
202
- | 'GreenColStyle'
203
- | 'YelColStyle'
204
-
205
- type Themes = 'light' | 'dark' | 'default'
206
-
207
- interface ButtonProps extends
208
- ButtonHTMLAttributes<HTMLButtonElement>,
209
- VariantProps<typeof buttonVariants> {
210
- is_loading?: boolean
211
- disabled?: boolean
212
- asChild?: boolean
213
- variant?: ButtonVariant
214
- buttonType?: 'button' | 'icon'
215
- as?: React.ElementType
216
- theme?: Themes
217
- containerClassName?: string
218
- }
219
-
220
- export const Button: React.ForwardRefExoticComponent<
221
- ButtonProps & React.RefAttributes<HTMLButtonElement>
222
- >
223
- ```
224
-
225
- ## Common Patterns
226
-
227
- ### Form Submit Button
228
-
229
- ```typescript
230
- import { Button } from '@/components/Button'
231
- import { Form } from '@/components/Form'
232
-
233
- function ContactForm() {
234
- const [isSubmitting, setIsSubmitting] = useState(false)
235
-
236
- const handleSubmit = async (e: FormEvent) => {
237
- e.preventDefault()
238
- setIsSubmitting(true)
239
-
240
- try {
241
- await submitForm(data)
242
- // Handle success
243
- } catch (error) {
244
- // Handle error
245
- } finally {
246
- setIsSubmitting(false)
247
- }
248
- }
249
-
250
- return (
251
- <Form onSubmit={handleSubmit}>
252
- {/* Form fields */}
253
-
254
- <Button
255
- type="submit"
256
- variant="PrimeStyle"
257
- is_loading={isSubmitting}
258
- disabled={isSubmitting}
259
- >
260
- Submit
261
- </Button>
262
- </Form>
263
- )
264
- }
265
- ```
266
-
267
- ### Button Group
268
-
269
- ```typescript
270
- import { Button } from '@/components/Button'
271
- import { ActionsGroup } from '@/components/ActionsGroup'
272
-
273
- function ButtonGroup() {
274
- return (
275
- <ActionsGroup>
276
- <Button variant="BorderStyle">Cancel</Button>
277
- <Button variant="PrimeStyle">Save</Button>
278
- <Button variant="RedSecStyle">Delete</Button>
279
- </ActionsGroup>
280
- )
281
- }
282
- ```
283
-
284
- ### Confirmation Pattern
285
-
286
- ```typescript
287
- function DeleteButton({ onDelete }: { onDelete: () => void }) {
288
- const [needsConfirm, setNeedsConfirm] = useState(false)
289
-
290
- if (needsConfirm) {
291
- return (
292
- <div className="flex gap-2">
293
- <Button
294
- size="S"
295
- variant="RedSecStyle"
296
- onClick={() => {
297
- onDelete()
298
- setNeedsConfirm(false)
299
- }}
300
- >
301
- Confirm Delete
302
- </Button>
303
- <Button
304
- size="S"
305
- variant="BorderStyle"
306
- onClick={() => setNeedsConfirm(false)}
307
- >
308
- Cancel
309
- </Button>
310
- </div>
311
- )
312
- }
313
-
314
- return (
315
- <Button
316
- variant="RedContStyle"
317
- onClick={() => setNeedsConfirm(true)}
318
- >
319
- Delete
320
- </Button>
321
- )
322
- }
323
- ```
324
-
325
- ### With Tooltip
326
-
327
- ```typescript
328
- import { Button } from '@/components/Button'
329
- import { Tooltip } from '@/components/Tooltip'
330
-
331
- function SaveButton() {
332
- return (
333
- <Tooltip content="Save your changes">
334
- <Button variant="PrimeStyle">
335
- Save
336
- </Button>
337
- </Tooltip>
338
- )
339
- }
340
- ```
341
-
342
- ## Testing
343
-
344
- ### Unit Test Example
345
-
346
- ```typescript
347
- import { render, screen, fireEvent } from '@testing-library/react'
348
- import { Button } from '@/components/Button'
349
-
350
- describe('Button', () => {
351
- it('handles click events', () => {
352
- const handleClick = jest.fn()
353
- render(
354
- <Button onClick={handleClick}>
355
- Click me
356
- </Button>
357
- )
358
-
359
- fireEvent.click(screen.getByText('Click me'))
360
- expect(handleClick).toHaveBeenCalledTimes(1)
361
- })
362
-
363
- it('shows loading state', () => {
364
- render(
365
- <Button is_loading={true}>
366
- Save
367
- </Button>
368
- )
369
-
370
- const button = screen.getByRole('button')
371
- expect(button).toBeDisabled()
372
- expect(button).toHaveAttribute('aria-busy', 'true')
373
- })
374
-
375
- it('applies variant classes', () => {
376
- render(
377
- <Button variant="RedSecStyle">
378
- Delete
379
- </Button>
380
- )
381
-
382
- const button = screen.getByRole('button')
383
- expect(button).toHaveClass('bg-red-500')
384
- })
385
- })
386
- ```
387
-
388
- ### Accessibility Test
389
-
390
- ```typescript
391
- import { axe } from '@axe-core/react'
392
-
393
- test('Button meets WCAG standards', async () => {
394
- const { container } = render(
395
- <Button variant="PrimeStyle">
396
- Accessible Button
397
- </Button>
398
- )
399
-
400
- const results = await axe(container)
401
- expect(results).toHaveNoViolations()
402
- })
403
- ```
404
-
405
- ## Accessibility
406
-
407
- ### Keyboard Support
408
-
409
- - **Space**: Activates the button
410
- - **Enter**: Activates the button
411
- - **Tab**: Moves focus to/from the button
412
-
413
- ### ARIA Attributes
414
-
415
- The Button component automatically includes:
416
-
417
- ```typescript
418
- <button
419
- type="button"
420
- disabled={disabled || is_loading}
421
- aria-busy={is_loading || undefined}
422
- >
423
- {children}
424
- {/* While loading, the spinner is rendered with role="status" and aria-label="Loading" */}
425
- </button>
426
- ```
427
-
428
- Notes:
429
- - The component renders a native `<button>` (or the element passed via `as`), so it does **not** add an explicit `role="button"`.
430
- - It sets the native `disabled` attribute (never `aria-disabled`) when `disabled` or `is_loading` is true.
431
- - `aria-busy` is set only while loading; it is omitted otherwise.
432
- - The loading spinner itself carries `role="status"` and `aria-label="Loading"`.
433
-
434
- ### Screen Reader Support
435
-
436
- ```typescript
437
- // Always provide aria-label for icon-only buttons
438
- <Button buttonType="icon" aria-label="Add new item">
439
- <PlusIcon className="w-5 h-5" />
440
- </Button>
441
-
442
- // Use aria-describedby for additional context
443
- <Button
444
- aria-describedby="delete-warning"
445
- variant="RedSecStyle"
446
- >
447
- Delete Account
448
- </Button>
449
- <span id="delete-warning" className="sr-only">
450
- This action cannot be undone
451
- </span>
452
- ```
453
-
454
- ### Focus Management
455
-
456
- - Visible focus ring on keyboard navigation
457
- - Proper focus trap when in loading state
458
- - Focus restoration after modal/dialog interactions
459
-
460
- ## Styling
461
-
462
- ### Custom Styles with className
463
-
464
- ```typescript
465
- <Button
466
- variant="PrimeStyle"
467
- className="rounded-full shadow-lg hover:shadow-xl"
468
- >
469
- Custom Styled Button
470
- </Button>
471
- ```
472
-
473
- ### Using with Tailwind CSS
474
-
475
- ```typescript
476
- <Button
477
- variant="BorderStyle"
478
- className="
479
- border-2 border-dashed
480
- hover:border-solid
481
- transition-all
482
- duration-200
483
- "
484
- >
485
- Tailwind Enhanced
486
- </Button>
487
- ```
488
-
489
- ### Theme Customization
490
-
491
- ```css
492
- /* Custom theme variables */
493
- [data-theme="custom"] {
494
- --button-primary-bg: #your-color;
495
- --button-primary-hover: #your-hover-color;
496
- --button-primary-text: #your-text-color;
497
- }
498
- ```
499
-
500
- ## Performance
501
-
502
- | Metric | Value |
503
- |--------|-------|
504
- | Bundle size (gzip) | 3.2kb |
505
- | First render | <10ms |
506
- | Re-render | <5ms |
507
- | Tree-shakeable | ✅ |
508
- | Memoized | ✅ |
509
-
510
- ### Optimization Tips
511
-
512
- 1. Use `React.memo()` for parent components
513
- 2. Memoize onClick handlers with `useCallback`
514
- 3. Lazy load icon libraries
515
- 4. Use dynamic imports for large button groups
516
-
517
- ## Migration
518
-
519
- ### From v1.0.x
520
-
521
- ```diff
522
- // Import path changed
523
- - import Button from 'torch-glare/Button'
524
- + import { Button } from '@/components/Button'
525
-
526
- // Loading prop renamed
527
- - <Button loading={true}>
528
- + <Button is_loading={true}>
529
-
530
- // Theme prop standardized
531
- - <Button colorScheme="dark">
532
- + <Button theme="dark">
533
- ```
534
-
535
- ## Troubleshooting
536
-
537
- ### Common Issues
538
-
539
- #### Button doesn't submit form
540
-
541
- **Solution:** Set `type="submit"`
542
-
543
- ```typescript
544
- <Button type="submit" variant="PrimeStyle">
545
- Submit Form
546
- </Button>
547
- ```
548
-
549
- #### Click handler fires twice
550
-
551
- **Solution:** Check for event bubbling
552
-
553
- ```typescript
554
- <Button onClick={(e) => {
555
- e.stopPropagation()
556
- handleClick()
557
- }}>
558
- Click Once
559
- </Button>
560
- ```
561
-
562
- #### Loading state doesn't show
563
-
564
- **Solution:** Check state management
565
-
566
- ```typescript
567
- const [loading, setLoading] = useState(false)
568
-
569
- // Make sure to set loading to true before async operation
570
- const handleClick = async () => {
571
- setLoading(true) // Set before await
572
- await someAsyncOperation()
573
- setLoading(false)
574
- }
575
- ```
576
-
577
- ## Related Components
578
-
579
- - [ActionButton](/docs/components/action-button.md) - Icon-only action buttons
580
- - [LinkButton](/docs/components/link-button.md) - Button styled as link
581
- - [LoginButton](/docs/components/login-button.md) - Specialized login button
582
- - [ActionsGroup](/docs/components/actions-group.md) - Group multiple buttons
583
-
584
- ## FAQ
585
-
586
- **Q: How do I make a button full width?**
587
-
588
- ```typescript
589
- <Button className="w-full" variant="PrimeStyle">
590
- Full Width Button
591
- </Button>
592
- ```
593
-
594
- **Q: Can I use custom icons?**
595
-
596
- Yes, any React component can be used as an icon:
597
-
598
- ```typescript
599
- <Button variant="PrimeStyle">
600
- <CustomIcon className="w-4 h-4 mr-2" />
601
- Custom Icon
602
- </Button>
603
- ```
604
-
605
- **Q: How do I disable a button conditionally?**
606
-
607
- ```typescript
608
- <Button
609
- disabled={!isFormValid}
610
- variant="PrimeStyle"
611
- >
612
- Submit
613
- </Button>
614
- ```
615
-
616
- ## Browser Support
617
-
618
- - Chrome 90+ ✅
619
- - Firefox 88+ ✅
620
- - Safari 14+ ✅
621
- - Edge 90+ ✅
622
- - Mobile browsers ✅
623
-
624
- ## Changelog
625
-
626
- ### v1.1.15
627
- - Added `containerClassName` prop
628
- - Improved loading state animations
629
- - Fixed focus ring in dark mode
630
-
631
- ### v1.1.14
632
- - Added polymorphic `as` prop
633
- - Enhanced TypeScript types
634
- - Performance optimizations
635
-
636
- ### v1.1.0
637
- - Initial stable release
638
- - 8 button variants
639
- - 5 size options