torch-glare 2.4.0 → 2.4.2

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 (318) hide show
  1. package/README.md +8 -0
  2. package/apps/lib/components/ActionButton.tsx +7 -12
  3. package/apps/lib/components/ActionsGroup.tsx +4 -15
  4. package/apps/lib/components/AlertDialog.tsx +173 -191
  5. package/apps/lib/components/Avatar.tsx +13 -16
  6. package/apps/lib/components/Badge.tsx +1 -3
  7. package/apps/lib/components/BadgeField.tsx +76 -71
  8. package/apps/lib/components/Breadcrumb.tsx +49 -85
  9. package/apps/lib/components/Button.tsx +21 -20
  10. package/apps/lib/components/ButtonGroup.tsx +31 -41
  11. package/apps/lib/components/Calendar.tsx +51 -29
  12. package/apps/lib/components/Card.tsx +40 -24
  13. package/apps/lib/components/Checkbox.tsx +9 -16
  14. package/apps/lib/components/ColorPicker.tsx +441 -0
  15. package/apps/lib/components/ConclusionHeader.tsx +148 -0
  16. package/apps/lib/components/ContextMenu.tsx +97 -96
  17. package/apps/lib/components/CountBadge.tsx +4 -6
  18. package/apps/lib/components/DataTable.tsx +196 -216
  19. package/apps/lib/components/DataViews/DataViewRadio.tsx +1 -6
  20. package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +13 -47
  21. package/apps/lib/components/DataViews/DataViewsHeader.tsx +1 -3
  22. package/apps/lib/components/DataViews/DataViewsLayout.tsx +5 -12
  23. package/apps/lib/components/DataViews/FilterPanel.tsx +155 -149
  24. package/apps/lib/components/DataViews/HeaderSearch.tsx +1 -5
  25. package/apps/lib/components/DataViews/InboxView.tsx +22 -68
  26. package/apps/lib/components/DataViews/InboxViewCard.tsx +68 -77
  27. package/apps/lib/components/DataViews/KanbanView.tsx +8 -25
  28. package/apps/lib/components/DataViews/PanelControls.tsx +3 -13
  29. package/apps/lib/components/DataViews/SettingsPanel.tsx +83 -89
  30. package/apps/lib/components/DataViews/TableView.tsx +8 -28
  31. package/apps/lib/components/DataViews/TreeView.tsx +12 -40
  32. package/apps/lib/components/DataViews/badgeAdapter.ts +32 -28
  33. package/apps/lib/components/DataViews/fieldRenderers.tsx +106 -141
  34. package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +30 -23
  35. package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +39 -32
  36. package/apps/lib/components/DataViews/filters/PresetChips.tsx +15 -15
  37. package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +69 -58
  38. package/apps/lib/components/DataViews/index.ts +26 -26
  39. package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +12 -16
  40. package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +28 -31
  41. package/apps/lib/components/DataViews/types.ts +104 -115
  42. package/apps/lib/components/DatePicker.tsx +200 -196
  43. package/apps/lib/components/Dialog.tsx +92 -105
  44. package/apps/lib/components/Divider.tsx +21 -24
  45. package/apps/lib/components/Drawer.tsx +124 -142
  46. package/apps/lib/components/DropdownMenu.tsx +131 -171
  47. package/apps/lib/components/FieldHint.tsx +4 -11
  48. package/apps/lib/components/Form.tsx +146 -155
  49. package/apps/lib/components/FormBuilder/DisplayField.tsx +40 -0
  50. package/apps/lib/components/FormBuilder/context.ts +71 -0
  51. package/apps/lib/components/FormBuilder/fields/ChoiceFields.tsx +65 -0
  52. package/apps/lib/components/FormBuilder/fields/ColorField.tsx +76 -0
  53. package/apps/lib/components/FormBuilder/fields/CustomField.tsx +16 -0
  54. package/apps/lib/components/FormBuilder/fields/DateField.tsx +34 -0
  55. package/apps/lib/components/FormBuilder/fields/FieldArray.tsx +79 -0
  56. package/apps/lib/components/FormBuilder/fields/FieldShell.tsx +174 -0
  57. package/apps/lib/components/FormBuilder/fields/FileField.tsx +40 -0
  58. package/apps/lib/components/FormBuilder/fields/OptionListFields.tsx +139 -0
  59. package/apps/lib/components/FormBuilder/fields/OtpField.tsx +32 -0
  60. package/apps/lib/components/FormBuilder/fields/PhoneField.tsx +82 -0
  61. package/apps/lib/components/FormBuilder/fields/RichTextEditorField.tsx +37 -0
  62. package/apps/lib/components/FormBuilder/fields/SelectField.tsx +101 -0
  63. package/apps/lib/components/FormBuilder/fields/SignatureField.tsx +175 -0
  64. package/apps/lib/components/FormBuilder/fields/SliderField.tsx +72 -0
  65. package/apps/lib/components/FormBuilder/fields/SwitchBoxField.tsx +42 -0
  66. package/apps/lib/components/FormBuilder/fields/TableField.tsx +312 -0
  67. package/apps/lib/components/FormBuilder/fields/TextField.tsx +222 -0
  68. package/apps/lib/components/FormBuilder/fields/TreeSelectField.tsx +49 -0
  69. package/apps/lib/components/FormBuilder/fields/countries.ts +303 -0
  70. package/apps/lib/components/FormBuilder/fields/index.ts +25 -0
  71. package/apps/lib/components/FormBuilder/form-builder.tsx +292 -0
  72. package/apps/lib/components/FormBuilder/header.tsx +105 -0
  73. package/apps/lib/components/FormBuilder/index.ts +37 -0
  74. package/apps/lib/components/FormBuilder/numberFormat.ts +16 -0
  75. package/apps/lib/components/FormBuilder/stepper.tsx +217 -0
  76. package/apps/lib/components/FormBuilder/submit.tsx +41 -0
  77. package/apps/lib/components/FormBuilder/types.ts +264 -0
  78. package/apps/lib/components/FormBuilder/viewFormat.tsx +137 -0
  79. package/apps/lib/components/FormRenderer/FormDrawer.tsx +121 -0
  80. package/apps/lib/components/FormRenderer/form-renderer.tsx +113 -0
  81. package/apps/lib/components/FormRenderer/index.ts +9 -0
  82. package/apps/lib/components/FormRenderer/types.ts +79 -0
  83. package/apps/lib/components/FormStepper.tsx +9 -39
  84. package/apps/lib/components/FormSummary.tsx +282 -0
  85. package/apps/lib/components/HeaderBar.tsx +1 -9
  86. package/apps/lib/components/ImageAttachment.tsx +106 -93
  87. package/apps/lib/components/InnerLabelField.tsx +20 -16
  88. package/apps/lib/components/Input.tsx +171 -172
  89. package/apps/lib/components/InputField.tsx +44 -45
  90. package/apps/lib/components/InputOTP.tsx +68 -69
  91. package/apps/lib/components/Label.tsx +61 -58
  92. package/apps/lib/components/LabelField.tsx +4 -5
  93. package/apps/lib/components/LabeledCheckBox.tsx +8 -12
  94. package/apps/lib/components/LabeledRadio.tsx +7 -5
  95. package/apps/lib/components/LinkButton.tsx +2 -9
  96. package/apps/lib/components/LoginButton.tsx +4 -9
  97. package/apps/lib/components/PasswordLevel.tsx +5 -5
  98. package/apps/lib/components/Popover.tsx +15 -33
  99. package/apps/lib/components/ProfileMenu.tsx +67 -72
  100. package/apps/lib/components/Radio.tsx +1 -5
  101. package/apps/lib/components/RadioCard.tsx +11 -28
  102. package/apps/lib/components/ScrollArea.tsx +45 -43
  103. package/apps/lib/components/SearchField.tsx +49 -39
  104. package/apps/lib/components/SearchableSelect.tsx +16 -16
  105. package/apps/lib/components/SearchableTable.tsx +108 -118
  106. package/apps/lib/components/SearchableTree.tsx +469 -0
  107. package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
  108. package/apps/lib/components/SectionBlock.tsx +19 -23
  109. package/apps/lib/components/Select.tsx +80 -186
  110. package/apps/lib/components/SimpleSelect.tsx +196 -187
  111. package/apps/lib/components/Skeleton.tsx +9 -12
  112. package/apps/lib/components/SlideDatePicker.tsx +215 -166
  113. package/apps/lib/components/SpinLoading.tsx +33 -49
  114. package/apps/lib/components/Stepper.tsx +13 -56
  115. package/apps/lib/components/Switch.tsx +8 -10
  116. package/apps/lib/components/TabFormItem.tsx +3 -12
  117. package/apps/lib/components/TabSwitch.tsx +7 -34
  118. package/apps/lib/components/Table.tsx +60 -75
  119. package/apps/lib/components/{ChartBlockTool.ts → TextEditor/ChartBlockTool.ts} +17 -52
  120. package/apps/lib/components/TextEditor/RichTextField.tsx +46 -0
  121. package/apps/lib/components/{TableDnDWrapper.ts → TextEditor/TableDnDWrapper.ts} +15 -48
  122. package/apps/lib/components/{TextEditor.tsx → TextEditor/TextEditor.tsx} +156 -113
  123. package/apps/lib/components/TextEditor/TextEditorToolbar.tsx +429 -0
  124. package/apps/lib/components/TextEditor/editor-tools/AlignmentTune.ts +70 -0
  125. package/apps/lib/components/TextEditor/editor-tools/ColorInlineTool.ts +50 -0
  126. package/apps/lib/components/TextEditor/editor-tools/StrikethroughInlineTool.ts +48 -0
  127. package/apps/lib/components/TextEditor/editor-tools/inlineFormat.ts +98 -0
  128. package/apps/lib/{types → components/TextEditor}/editorjs.d.ts +19 -0
  129. package/apps/lib/components/TextEditor/index.ts +7 -0
  130. package/apps/lib/{utils → components/TextEditor}/markdownParser.ts +2 -7
  131. package/apps/lib/components/Textarea.tsx +9 -13
  132. package/apps/lib/components/Timeline.tsx +21 -41
  133. package/apps/lib/components/Toast.tsx +83 -83
  134. package/apps/lib/components/Toggle.tsx +112 -114
  135. package/apps/lib/components/ToggleButton.tsx +1 -1
  136. package/apps/lib/components/Tooltip.tsx +24 -19
  137. package/apps/lib/components/TransparentLabel.tsx +61 -62
  138. package/apps/lib/components/TreeDropDown.tsx +86 -52
  139. package/apps/lib/components/TreeFolder/TreeFolder.tsx +15 -48
  140. package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +16 -21
  141. package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +9 -20
  142. package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +3 -3
  143. package/apps/lib/components/TreeFolder/icons.tsx +14 -17
  144. package/apps/lib/components/TreeFolder/index.ts +15 -8
  145. package/apps/lib/components/TreeFolder/treeFolderUtils.ts +47 -52
  146. package/apps/lib/components/TreeFolder/types.ts +32 -32
  147. package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +117 -123
  148. package/apps/lib/hooks/useActiveTreeItem.ts +52 -55
  149. package/apps/lib/hooks/useClickOutside.ts +21 -20
  150. package/apps/lib/hooks/useDataViewsState.ts +86 -80
  151. package/apps/lib/hooks/useIsMobile.ts +12 -12
  152. package/apps/lib/hooks/useResize.ts +54 -65
  153. package/apps/lib/hooks/useTagSelection.ts +201 -201
  154. package/apps/lib/layouts/CNLayout.tsx +181 -140
  155. package/apps/lib/layouts/DataViewCard.tsx +4 -18
  156. package/apps/lib/layouts/FieldSection.tsx +2 -6
  157. package/apps/lib/layouts/TreeSubLayout.tsx +24 -38
  158. package/apps/lib/providers/ThemeProvider.tsx +8 -23
  159. package/apps/lib/registry.json +997 -0
  160. package/apps/lib/tsconfig.json +9 -0
  161. package/apps/lib/tsconfig.tsbuildinfo +1 -0
  162. package/apps/lib/utils/cn.ts +1 -1
  163. package/apps/lib/utils/color.ts +175 -0
  164. package/apps/lib/utils/dataViews/columnUtils.ts +46 -44
  165. package/apps/lib/utils/dataViews/fieldUtils.ts +70 -71
  166. package/apps/lib/utils/dataViews/nestedDataUtils.tsx +129 -122
  167. package/apps/lib/utils/dataViews/pathUtils.ts +74 -67
  168. package/apps/lib/utils/dataViews/rangeUtils.ts +121 -112
  169. package/apps/lib/utils/dataViews/treeUtils.ts +204 -211
  170. package/apps/lib/utils/dateFormat.ts +64 -54
  171. package/apps/lib/utils/resize.ts +21 -25
  172. package/apps/lib/utils/types.ts +13 -13
  173. package/dist/bin/index.js +8 -2
  174. package/dist/bin/index.js.map +1 -1
  175. package/dist/src/shared/getAvailableFiles.d.ts.map +1 -1
  176. package/dist/src/shared/getAvailableFiles.js +6 -1
  177. package/dist/src/shared/getAvailableFiles.js.map +1 -1
  178. package/dist/src/shared/loadRegistry.d.ts +7 -0
  179. package/dist/src/shared/loadRegistry.d.ts.map +1 -0
  180. package/dist/src/shared/loadRegistry.js +31 -0
  181. package/dist/src/shared/loadRegistry.js.map +1 -0
  182. package/dist/src/shared/resolveInstallPlan.d.ts +12 -0
  183. package/dist/src/shared/resolveInstallPlan.d.ts.map +1 -0
  184. package/dist/src/shared/resolveInstallPlan.js +39 -0
  185. package/dist/src/shared/resolveInstallPlan.js.map +1 -0
  186. package/dist/src/types/main.d.ts +24 -0
  187. package/dist/src/types/main.d.ts.map +1 -1
  188. package/docs/README.md +10 -2
  189. package/docs/components/action-button.md +30 -24
  190. package/docs/components/actions-group.md +26 -20
  191. package/docs/components/alert-dialog.md +45 -45
  192. package/docs/components/avatar.md +6 -2
  193. package/docs/components/badge-field.md +6 -2
  194. package/docs/components/badge.md +7 -1
  195. package/docs/components/breadcrumb.md +15 -40
  196. package/docs/components/button-group.md +13 -10
  197. package/docs/components/button.md +58 -33
  198. package/docs/components/calendar.md +26 -19
  199. package/docs/components/card.md +23 -18
  200. package/docs/components/chart-block-tool.md +129 -0
  201. package/docs/components/checkbox.md +16 -8
  202. package/docs/components/cn-layout.md +7 -1
  203. package/docs/components/color-picker.md +101 -0
  204. package/docs/components/conclusion-header.md +80 -0
  205. package/docs/components/context-menu.md +18 -25
  206. package/docs/components/count-badge.md +7 -1
  207. package/docs/components/data-table.md +45 -33
  208. package/docs/components/data-views-config-panel.md +15 -11
  209. package/docs/components/data-views-layout.md +13 -16
  210. package/docs/components/date-picker.md +30 -23
  211. package/docs/components/dialog.md +43 -42
  212. package/docs/components/divider.md +10 -4
  213. package/docs/components/drawer.md +161 -135
  214. package/docs/components/dropdown-menu.md +25 -34
  215. package/docs/components/field-hint.md +37 -25
  216. package/docs/components/field-section.md +9 -3
  217. package/docs/components/form-builder.md +270 -0
  218. package/docs/components/form-renderer.md +228 -0
  219. package/docs/components/form-stepper.md +6 -0
  220. package/docs/components/form-summary.md +123 -0
  221. package/docs/components/form.md +17 -20
  222. package/docs/components/header-bar.md +6 -0
  223. package/docs/components/image-attachment.md +43 -45
  224. package/docs/components/inbox-view.md +16 -5
  225. package/docs/components/inner-label-field.md +34 -24
  226. package/docs/components/input-field.md +18 -10
  227. package/docs/components/input-otp.md +14 -11
  228. package/docs/components/input.md +22 -16
  229. package/docs/components/kanban-view.md +15 -5
  230. package/docs/components/label-field.md +32 -22
  231. package/docs/components/label.md +43 -32
  232. package/docs/components/labeled-check-box.md +16 -8
  233. package/docs/components/labeled-radio.md +18 -11
  234. package/docs/components/link-button.md +7 -1
  235. package/docs/components/login-button.md +8 -2
  236. package/docs/components/password-level.md +37 -24
  237. package/docs/components/popover.md +26 -23
  238. package/docs/components/profile-menu.md +38 -27
  239. package/docs/components/radio-card.md +16 -9
  240. package/docs/components/radio.md +16 -8
  241. package/docs/components/scroll-area.md +6 -2
  242. package/docs/components/search-field.md +14 -6
  243. package/docs/components/searchable-select.md +19 -14
  244. package/docs/components/searchable-table.md +18 -13
  245. package/docs/components/searchable-tree-dialog.md +190 -0
  246. package/docs/components/searchable-tree.md +200 -0
  247. package/docs/components/section-block.md +12 -4
  248. package/docs/components/select.md +23 -18
  249. package/docs/components/simple-select.md +14 -10
  250. package/docs/components/skeleton.md +43 -33
  251. package/docs/components/slide-date-picker.md +37 -29
  252. package/docs/components/spin-loading.md +32 -23
  253. package/docs/components/stepper.md +6 -0
  254. package/docs/components/switch.md +14 -6
  255. package/docs/components/tab-form-item.md +7 -1
  256. package/docs/components/tab-switch.md +13 -6
  257. package/docs/components/table-dnd-wrapper.md +107 -0
  258. package/docs/components/table-view.md +15 -5
  259. package/docs/components/table.md +28 -28
  260. package/docs/components/text-editor.md +37 -13
  261. package/docs/components/textarea.md +15 -7
  262. package/docs/components/timeline.md +6 -0
  263. package/docs/components/toast.md +35 -26
  264. package/docs/components/toggle-button.md +24 -21
  265. package/docs/components/toggle.md +23 -15
  266. package/docs/components/tooltip.md +42 -30
  267. package/docs/components/transparent-label.md +29 -20
  268. package/docs/components/tree-drop-down.md +31 -23
  269. package/docs/components/tree-sub-layout.md +6 -2
  270. package/docs/components/tree-view.md +16 -5
  271. package/docs/explanation/architecture.md +54 -0
  272. package/docs/explanation/design-system.md +52 -0
  273. package/docs/how-to/data-views-from-backend-response.md +6 -4
  274. package/docs/how-to/form-and-list-recipes.md +26 -19
  275. package/docs/how-to/forms-with-form-builder.md +408 -0
  276. package/docs/how-to/guides.md +177 -197
  277. package/docs/migration/changelog.md +38 -0
  278. package/docs/reference/cli.md +87 -0
  279. package/docs/reference/components.md +11 -12
  280. package/docs/reference/hooks.md +8 -8
  281. package/docs/reference/providers.md +22 -22
  282. package/docs/reference/tailwind-plugins.md +2 -2
  283. package/docs/reference/theme.md +85 -0
  284. package/docs/reference/types.md +4 -4
  285. package/docs/reference/utilities.md +19 -26
  286. package/docs/tutorials/building-first-form.md +170 -172
  287. package/docs/tutorials/component-composition.md +34 -50
  288. package/docs/tutorials/getting-started.md +2 -2
  289. package/docs/tutorials/theming-basics.md +13 -10
  290. package/package.json +31 -3
  291. package/dist/src/commands/block.d.ts +0 -5
  292. package/dist/src/commands/block.d.ts.map +0 -1
  293. package/dist/src/commands/block.js +0 -255
  294. package/dist/src/commands/block.js.map +0 -1
  295. package/dist/src/shared/configureFonts.d.ts +0 -6
  296. package/dist/src/shared/configureFonts.d.ts.map +0 -1
  297. package/dist/src/shared/configureFonts.js +0 -106
  298. package/dist/src/shared/configureFonts.js.map +0 -1
  299. package/dist/src/shared/configureGlobalCss.d.ts +0 -6
  300. package/dist/src/shared/configureGlobalCss.d.ts.map +0 -1
  301. package/dist/src/shared/configureGlobalCss.js +0 -154
  302. package/dist/src/shared/configureGlobalCss.js.map +0 -1
  303. package/dist/src/shared/configureTailwind.d.ts +0 -7
  304. package/dist/src/shared/configureTailwind.d.ts.map +0 -1
  305. package/dist/src/shared/configureTailwind.js +0 -163
  306. package/dist/src/shared/configureTailwind.js.map +0 -1
  307. package/dist/src/shared/detectFramework.d.ts +0 -23
  308. package/dist/src/shared/detectFramework.d.ts.map +0 -1
  309. package/dist/src/shared/detectFramework.js +0 -119
  310. package/dist/src/shared/detectFramework.js.map +0 -1
  311. package/dist/src/shared/installBaseUtils.d.ts +0 -5
  312. package/dist/src/shared/installBaseUtils.d.ts.map +0 -1
  313. package/dist/src/shared/installBaseUtils.js +0 -79
  314. package/dist/src/shared/installBaseUtils.js.map +0 -1
  315. package/dist/src/shared/resolveAliases.d.ts +0 -24
  316. package/dist/src/shared/resolveAliases.d.ts.map +0 -1
  317. package/dist/src/shared/resolveAliases.js +0 -98
  318. package/dist/src/shared/resolveAliases.js.map +0 -1
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: Changelog & Upgrading
3
+ description: How to upgrade copied TORCH Glare components and where to find release notes.
4
+ group: migration
5
+ keywords: [changelog, migration, upgrade, update]
6
+ ---
7
+
8
+ # Changelog & Upgrading
9
+
10
+ ## Upgrading in a copy-in library
11
+
12
+ Because components are **copied into your project**, upgrading is not an `npm update`. To pull
13
+ the latest component source, re-run the CLI:
14
+
15
+ ```bash
16
+ # Re-sync everything already installed with the latest templates
17
+ npx torch-glare@latest update
18
+ ```
19
+
20
+ `update` overwrites your local copies, so review the diff and re-apply any local changes you
21
+ made. To upgrade a single component, re-add it:
22
+
23
+ ```bash
24
+ npx torch-glare@latest add Button
25
+ ```
26
+
27
+ ## Release notes
28
+
29
+ - **v1.1.16** — see [CHANGELOG-1.1.16.md](../CHANGELOG-1.1.16.md) (adds `TextEditor`,
30
+ `ChartBlockTool`, and related components).
31
+
32
+ For the authoritative version, check the `version` field in the package's `package.json` or
33
+ run `npx torch-glare --version`.
34
+
35
+ ## See also
36
+
37
+ - [CLI reference](../reference/cli.md)
38
+ - [Architecture](../explanation/architecture.md)
@@ -0,0 +1,87 @@
1
+ ---
2
+ title: CLI Reference
3
+ description: The torch-glare CLI — copy components, hooks, utils, layouts, and providers into your project.
4
+ group: reference
5
+ keywords: [cli, torch-glare, init, add, copy-in, glare.json]
6
+ ---
7
+
8
+ # CLI Reference
9
+
10
+ TORCH Glare is a **copy-in** component library: the `torch-glare` CLI copies source files
11
+ directly into your project (like shadcn/ui). You own the copied code and import it from your
12
+ own local path — you never import components from the npm package.
13
+
14
+ Run any command with `npx` (no global install required):
15
+
16
+ ```bash
17
+ npx torch-glare@latest <command> [name]
18
+ ```
19
+
20
+ Run a command **without** a name to pick from an interactive list.
21
+
22
+ ## Commands
23
+
24
+ | Command | Description |
25
+ | --- | --- |
26
+ | `init` | Create `glare.json` and set up Tailwind. Run once per project. |
27
+ | `add [Component]` | Copy a component **and its dependencies** into your project. |
28
+ | `hook [hook]` | Copy a hook (usually pulled in automatically as a dependency). |
29
+ | `util [util]` | Copy a utility (e.g. `cn`, usually pulled in automatically). |
30
+ | `layout [layout]` | Copy a layout. |
31
+ | `provider [provider]` | Copy a provider (e.g. `ThemeProvider`). |
32
+ | `update` | Re-sync everything already installed with the latest templates. |
33
+
34
+ Component names are **case-sensitive PascalCase** — `add DatePicker`, not `add datepicker`.
35
+
36
+ ## `init`
37
+
38
+ ```bash
39
+ npx torch-glare@latest init
40
+ ```
41
+
42
+ Creates `glare.json` and configures Tailwind. `glare.json` controls where files are copied:
43
+
44
+ ```json
45
+ {
46
+ "path": "@/"
47
+ }
48
+ ```
49
+
50
+ Files are copied into `<path>/components`, `<path>/hooks`, `<path>/utils`,
51
+ `<path>/layouts`, and `<path>/providers`. Import them from that path.
52
+
53
+ ## `add`
54
+
55
+ ```bash
56
+ npx torch-glare@latest add Button
57
+ ```
58
+
59
+ Copies `Button` **plus its full dependency closure** — nested components, hooks, and utils —
60
+ and installs any required npm packages (e.g. `@radix-ui/*`) using your project's package
61
+ manager. After adding, import from your local alias:
62
+
63
+ ```tsx
64
+ import { Button } from "@/components/Button";
65
+
66
+ export function Example() {
67
+ return <Button variant="PrimeStyle">Click me</Button>;
68
+ }
69
+ ```
70
+
71
+ Existing files are never overwritten; use `update` to re-sync.
72
+
73
+ ## `update`
74
+
75
+ ```bash
76
+ npx torch-glare@latest update
77
+ ```
78
+
79
+ Re-copies every installed component, hook, util, layout, and provider from the latest
80
+ templates. Review the diff afterward, since it overwrites your local copies.
81
+
82
+ ## See also
83
+
84
+ - [Theme reference](./theme.md)
85
+ - [Components reference](./components.md)
86
+ - [Hooks reference](./hooks.md)
87
+ - [Providers reference](./providers.md)
@@ -30,7 +30,7 @@ Interactive button component with multiple variants and sizes.
30
30
 
31
31
  - **File**: [button.md](../components/button.md)
32
32
  - **Props**: `variant`, `size`, `theme`, `buttonType`, `disabled`
33
- - **Variants**: `PrimeStyle`, `ContStyle`, `SecondStyle`, `BorderStyle`, `ErrorStyle`, `SuccessStyle`, `PrimeContStyle`
33
+ - **Variants**: `PrimeStyle`, `BluSecStyle`, `YelSecStyle`, `RedSecStyle`, `BorderStyle`, `PrimeContStyle`, `BluContStyle`, `RedContStyle`
34
34
  - **Use Cases**: Primary actions, secondary actions, icon buttons, loading states
35
35
 
36
36
  ### Input
@@ -521,12 +521,13 @@ Components with size variants typically support:
521
521
 
522
522
  Button variants:
523
523
  - `PrimeStyle` - Primary action
524
- - `ContStyle` - Contrast style
525
- - `SecondStyle` - Secondary action
524
+ - `BluSecStyle` - Blue secondary action
525
+ - `YelSecStyle` - Yellow secondary action
526
+ - `RedSecStyle` - Red secondary action
526
527
  - `BorderStyle` - Outlined
527
- - `ErrorStyle` - Destructive action
528
- - `SuccessStyle` - Success action
529
- - `PrimeContStyle` - Primary contrast
528
+ - `PrimeContStyle` - Primary container (transparent)
529
+ - `BluContStyle` - Blue container (transparent)
530
+ - `RedContStyle` - Red container (transparent)
530
531
 
531
532
  ---
532
533
 
@@ -535,12 +536,10 @@ Button variants:
535
536
  All components are fully typed with TypeScript. Import types from the library:
536
537
 
537
538
  ```typescript
538
- import type {
539
- ButtonProps,
540
- InputProps,
541
- SelectProps,
542
- // ... other types
543
- } from '@torch-ai/torch-glare';
539
+ import type { ButtonProps } from "@/components/Button";
540
+ import type { InputProps } from "@/components/InputProps";
541
+ import type { ButtonProps } from "@/components/LoginButton";
542
+ import type { SelectProps } from "@/components/SelectProps";
544
543
  ```
545
544
 
546
545
  ---
@@ -30,7 +30,7 @@ Tracks which tree item is most visible in the viewport using the IntersectionObs
30
30
  ### Basic Usage
31
31
 
32
32
  ```tsx
33
- import { useActiveTreeItem } from '@torch-ai/torch-glare';
33
+ import { useActiveTreeItem } from "@/hooks/useActiveTreeItem";
34
34
 
35
35
  function TableOfContents() {
36
36
  const sectionIds = ['intro', 'features', 'api', 'examples'];
@@ -210,7 +210,7 @@ Detects clicks outside a referenced element and executes a callback. Perfect for
210
210
  ### Basic Usage
211
211
 
212
212
  ```tsx
213
- import { useClickOutside } from '@torch-ai/torch-glare';
213
+ import { useClickOutside } from "@/hooks/useClickOutside";
214
214
  import { useState } from 'react';
215
215
 
216
216
  function Dropdown() {
@@ -383,7 +383,7 @@ Handles element resizing with support for both mouse and touch events, including
383
383
  ### Basic Usage
384
384
 
385
385
  ```tsx
386
- import { useResize } from '@torch-ai/torch-glare';
386
+ import { useResize } from "@/hooks/useResize";
387
387
  import { useRef } from 'react';
388
388
 
389
389
  function ResizablePanel() {
@@ -630,7 +630,7 @@ Manages tag selection state with comprehensive keyboard navigation support. Supp
630
630
  ### Basic Multi-Select
631
631
 
632
632
  ```tsx
633
- import { useTagSelection } from '@torch-ai/torch-glare';
633
+ import { useTagSelection } from "@/hooks/useTagSelection";
634
634
  import { useRef } from 'react';
635
635
 
636
636
  function TagSelector() {
@@ -1177,7 +1177,7 @@ const result = useTagSelection({
1177
1177
 
1178
1178
  ```tsx
1179
1179
  import { renderHook } from '@testing-library/react';
1180
- import { useActiveTreeItem } from '@torch-ai/torch-glare';
1180
+ import { useActiveTreeItem } from "@/hooks/useActiveTreeItem";
1181
1181
 
1182
1182
  describe('useActiveTreeItem', () => {
1183
1183
  it('should track active item', () => {
@@ -1208,7 +1208,7 @@ describe('useActiveTreeItem', () => {
1208
1208
 
1209
1209
  ```tsx
1210
1210
  import { render, fireEvent } from '@testing-library/react';
1211
- import { useClickOutside } from '@torch-ai/torch-glare';
1211
+ import { useClickOutside } from "@/hooks/useClickOutside";
1212
1212
 
1213
1213
  describe('useClickOutside', () => {
1214
1214
  it('should call callback on outside click', () => {
@@ -1245,7 +1245,7 @@ describe('useClickOutside', () => {
1245
1245
 
1246
1246
  ```tsx
1247
1247
  import { renderHook, act } from '@testing-library/react';
1248
- import { useResize } from '@torch-ai/torch-glare';
1248
+ import { useResize } from "@/hooks/useResize";
1249
1249
 
1250
1250
  describe('useResize', () => {
1251
1251
  it('should handle resize', () => {
@@ -1279,7 +1279,7 @@ describe('useResize', () => {
1279
1279
 
1280
1280
  ```tsx
1281
1281
  import { renderHook, act } from '@testing-library/react';
1282
- import { useTagSelection } from '@torch-ai/torch-glare';
1282
+ import { useTagSelection } from "@/hooks/useTagSelection";
1283
1283
 
1284
1284
  describe('useTagSelection', () => {
1285
1285
  const mockTags = [
@@ -34,7 +34,7 @@ Manages application theme state with support for light, dark, and system default
34
34
  ### Basic Setup
35
35
 
36
36
  ```tsx
37
- import { ThemeProvider } from '@torch-ai/torch-glare';
37
+ import { ThemeProvider } from "@/providers/ThemeProvider";
38
38
 
39
39
  function App() {
40
40
  return (
@@ -48,7 +48,7 @@ function App() {
48
48
  ### With Default Theme
49
49
 
50
50
  ```tsx
51
- import { ThemeProvider } from '@torch-ai/torch-glare';
51
+ import { ThemeProvider } from "@/providers/ThemeProvider";
52
52
 
53
53
  function App() {
54
54
  return (
@@ -62,7 +62,7 @@ function App() {
62
62
  ### Consuming Theme with useTheme Hook
63
63
 
64
64
  ```tsx
65
- import { useTheme } from '@torch-ai/torch-glare';
65
+ import { useTheme } from "@/providers/ThemeProvider";
66
66
 
67
67
  function ThemeToggle() {
68
68
  const { theme, updateTheme } = useTheme();
@@ -83,7 +83,7 @@ function ThemeToggle() {
83
83
  ### Theme Mode Switcher
84
84
 
85
85
  ```tsx
86
- import { useTheme } from '@torch-ai/torch-glare';
86
+ import { useTheme } from "@/providers/ThemeProvider";
87
87
 
88
88
  function ThemeModeSwitcher() {
89
89
  const { themeMode, updateMode } = useTheme();
@@ -105,7 +105,7 @@ function ThemeModeSwitcher() {
105
105
  ### Complete Theme Control Panel
106
106
 
107
107
  ```tsx
108
- import { useTheme } from '@torch-ai/torch-glare';
108
+ import { useTheme } from "@/providers/ThemeProvider";
109
109
 
110
110
  function ThemeControlPanel() {
111
111
  const { theme, themeMode, updateTheme, updateMode } = useTheme();
@@ -166,7 +166,7 @@ function ThemeControlPanel() {
166
166
  ### Theme-Aware Component
167
167
 
168
168
  ```tsx
169
- import { useTheme } from '@torch-ai/torch-glare';
169
+ import { useTheme } from "@/providers/ThemeProvider";
170
170
 
171
171
  function ThemedCard({ children }: { children: React.ReactNode }) {
172
172
  const { theme } = useTheme();
@@ -188,7 +188,7 @@ function ThemedCard({ children }: { children: React.ReactNode }) {
188
188
  ### System Theme Detection
189
189
 
190
190
  ```tsx
191
- import { useTheme } from '@torch-ai/torch-glare';
191
+ import { useTheme } from "@/providers/ThemeProvider";
192
192
  import { useEffect, useState } from 'react';
193
193
 
194
194
  function SystemThemeSync() {
@@ -229,7 +229,7 @@ function SystemThemeSync() {
229
229
  ### Header with Theme Toggle
230
230
 
231
231
  ```tsx
232
- import { useTheme } from '@torch-ai/torch-glare';
232
+ import { useTheme } from "@/providers/ThemeProvider";
233
233
 
234
234
  function Header() {
235
235
  const { theme, updateTheme } = useTheme();
@@ -253,7 +253,7 @@ function Header() {
253
253
  ### Settings Page
254
254
 
255
255
  ```tsx
256
- import { useTheme } from '@torch-ai/torch-glare';
256
+ import { useTheme } from "@/providers/ThemeProvider";
257
257
  import { useState } from 'react';
258
258
 
259
259
  function SettingsPage() {
@@ -310,7 +310,7 @@ function SettingsPage() {
310
310
 
311
311
  ```tsx
312
312
  // app/layout.tsx
313
- import { ThemeProvider } from '@torch-ai/torch-glare';
313
+ import { ThemeProvider } from "@/providers/ThemeProvider";
314
314
 
315
315
  export default function RootLayout({
316
316
  children,
@@ -333,7 +333,7 @@ export default function RootLayout({
333
333
 
334
334
  ```tsx
335
335
  // pages/_app.tsx
336
- import { ThemeProvider } from '@torch-ai/torch-glare';
336
+ import { ThemeProvider } from "@/providers/ThemeProvider";
337
337
  import type { AppProps } from 'next/app';
338
338
 
339
339
  export default function App({ Component, pageProps }: AppProps) {
@@ -351,7 +351,7 @@ export default function App({ Component, pageProps }: AppProps) {
351
351
  // main.tsx
352
352
  import React from 'react';
353
353
  import ReactDOM from 'react-dom/client';
354
- import { ThemeProvider } from '@torch-ai/torch-glare';
354
+ import { ThemeProvider } from "@/providers/ThemeProvider";
355
355
  import App from './App';
356
356
 
357
357
  ReactDOM.createRoot(document.getElementById('root')!).render(
@@ -478,7 +478,7 @@ The ThemeProvider stores values in localStorage:
478
478
  Full TypeScript support with type inference:
479
479
 
480
480
  ```typescript
481
- import { useTheme } from '@torch-ai/torch-glare';
481
+ import { useTheme } from "@/providers/ThemeProvider";
482
482
 
483
483
  function MyComponent() {
484
484
  const { theme, themeMode, updateTheme, updateMode } = useTheme();
@@ -506,7 +506,7 @@ function MyComponent() {
506
506
 
507
507
  ```tsx
508
508
  import { render } from '@testing-library/react';
509
- import { ThemeProvider } from '@torch-ai/torch-glare';
509
+ import { ThemeProvider } from "@/providers/ThemeProvider";
510
510
 
511
511
  describe('ThemedComponent', () => {
512
512
  it('should render with light theme', () => {
@@ -535,7 +535,7 @@ describe('ThemedComponent', () => {
535
535
 
536
536
  ```tsx
537
537
  import { renderHook, act } from '@testing-library/react';
538
- import { ThemeProvider, useTheme } from '@torch-ai/torch-glare';
538
+ import { ThemeProvider, useTheme } from "@/providers/ThemeProvider";
539
539
 
540
540
  describe('useTheme', () => {
541
541
  it('should update theme', () => {
@@ -630,7 +630,7 @@ The ThemeProvider uses React context, which can cause re-renders. To optimize:
630
630
 
631
631
  ```tsx
632
632
  import { memo } from 'react';
633
- import { useTheme } from '@torch-ai/torch-glare';
633
+ import { useTheme } from "@/providers/ThemeProvider";
634
634
 
635
635
  // Memoize components that don't need theme updates
636
636
  const ExpensiveComponent = memo(() => {
@@ -647,7 +647,7 @@ function ThemedButton() {
647
647
  ### Selective Theme Consumption
648
648
 
649
649
  ```tsx
650
- import { useTheme } from '@torch-ai/torch-glare';
650
+ import { useTheme } from "@/providers/ThemeProvider";
651
651
 
652
652
  // Only consume what you need
653
653
  function ThemeToggle() {
@@ -727,7 +727,7 @@ Avoid hydration mismatches:
727
727
 
728
728
  ```tsx
729
729
  import { useEffect, useState } from 'react';
730
- import { useTheme } from '@torch-ai/torch-glare';
730
+ import { useTheme } from "@/providers/ThemeProvider";
731
731
 
732
732
  function ClientOnlyThemeButton() {
733
733
  const [mounted, setMounted] = useState(false);
@@ -754,7 +754,7 @@ function ClientOnlyThemeButton() {
754
754
  Show visual feedback when theme changes:
755
755
 
756
756
  ```tsx
757
- import { useTheme } from '@torch-ai/torch-glare';
757
+ import { useTheme } from "@/providers/ThemeProvider";
758
758
  import { useState, useEffect } from 'react';
759
759
 
760
760
  function ThemeToggleWithFeedback() {
@@ -783,7 +783,7 @@ function ThemeToggleWithFeedback() {
783
783
  Ensure theme values are valid before updating:
784
784
 
785
785
  ```tsx
786
- import { useTheme } from '@torch-ai/torch-glare';
786
+ import { useTheme } from "@/providers/ThemeProvider";
787
787
 
788
788
  function SafeThemeUpdater({ theme }: { theme: string }) {
789
789
  const { updateTheme } = useTheme();
@@ -849,7 +849,7 @@ import { Theme } from 'old-library';
849
849
  <Theme mode="dark">
850
850
 
851
851
  // v2.x (new)
852
- import { ThemeProvider } from '@torch-ai/torch-glare';
852
+ import { ThemeProvider } from "@/providers/ThemeProvider";
853
853
  <ThemeProvider defaultTheme="dark">
854
854
  ```
855
855
 
@@ -860,7 +860,7 @@ import { ThemeProvider } from '@torch-ai/torch-glare';
860
860
  import { ThemeProvider as NextThemeProvider } from 'next-themes';
861
861
 
862
862
  // TORCH Glare
863
- import { ThemeProvider } from '@torch-ai/torch-glare';
863
+ import { ThemeProvider } from "@/providers/ThemeProvider";
864
864
 
865
865
  // Both can coexist if needed, but use TORCH Glare for consistency
866
866
  ```
@@ -352,7 +352,7 @@ The TORCH mode plugin defines the actual color values for:
352
352
  ### Integration with ThemeProvider
353
353
 
354
354
  ```tsx
355
- import { ThemeProvider } from '@torch-ai/torch-glare';
355
+ import { ThemeProvider } from "@/providers/ThemeProvider";
356
356
 
357
357
  function App() {
358
358
  return (
@@ -622,7 +622,7 @@ export default {
622
622
 
623
623
  ```tsx
624
624
  // app/layout.tsx (Next.js App Router)
625
- import { ThemeProvider } from '@torch-ai/torch-glare';
625
+ import { ThemeProvider } from "@/providers/ThemeProvider";
626
626
  import './globals.css';
627
627
 
628
628
  export default function RootLayout({
@@ -0,0 +1,85 @@
1
+ ---
2
+ title: Theme Reference
3
+ description: TORCH Glare theming — data-theme, theme modes, ThemeProvider, and useTheme.
4
+ group: reference
5
+ keywords: [theme, dark mode, data-theme, ThemeProvider, useTheme, tokens]
6
+ ---
7
+
8
+ # Theme Reference
9
+
10
+ TORCH Glare is themed through two `data-*` attributes on the document root and a small
11
+ React context. Every component also accepts a `theme` prop that sets `data-theme` locally.
12
+
13
+ ## Attributes
14
+
15
+ | Attribute | Values | Meaning |
16
+ | --- | --- | --- |
17
+ | `data-theme` | `"light" \| "dark" \| "default"` | The active color theme. |
18
+ | `data-theme-mode` | `"CSS" \| "TORCH"` | Token resolution mode (`TORCH` is the default). |
19
+
20
+ Per-component override:
21
+
22
+ ```tsx
23
+ import { Button } from "@/components/Button";
24
+
25
+ <Button theme="dark" variant="PrimeStyle">Dark button</Button>;
26
+ ```
27
+
28
+ ## ThemeProvider
29
+
30
+ Add the provider once (`npx torch-glare@latest provider ThemeProvider`) and wrap your app.
31
+ It syncs `data-theme` / `data-theme-mode` to `document.documentElement` and persists the
32
+ choice to `localStorage`.
33
+
34
+ ```tsx
35
+ import { ThemeProvider } from "@/providers/ThemeProvider";
36
+
37
+ export function App({ children }: { children: React.ReactNode }) {
38
+ return (
39
+ <ThemeProvider defaultTheme="default" defaultThemeMode="TORCH">
40
+ {children}
41
+ </ThemeProvider>
42
+ );
43
+ }
44
+ ```
45
+
46
+ ### Props
47
+
48
+ | Prop | Type | Default | Description |
49
+ | --- | --- | --- | --- |
50
+ | `defaultTheme` | `"light" \| "dark" \| "default"` | `"default"` | Initial theme (unless a stored/`data-theme` value exists). |
51
+ | `defaultThemeMode` | `"CSS" \| "TORCH"` | `"TORCH"` | Initial token mode. |
52
+
53
+ ## useTheme
54
+
55
+ Read and update the theme from anywhere inside `ThemeProvider`:
56
+
57
+ ```tsx
58
+ import { useTheme } from "@/providers/ThemeProvider";
59
+
60
+ export function ThemeToggle() {
61
+ const { theme, updateTheme, themeMode, updateMode } = useTheme();
62
+
63
+ return (
64
+ <button onClick={() => updateTheme(theme === "dark" ? "light" : "dark")}>
65
+ {theme} / {themeMode}
66
+ </button>
67
+ );
68
+ }
69
+ ```
70
+
71
+ ### Returned value
72
+
73
+ | Field | Type | Description |
74
+ | --- | --- | --- |
75
+ | `theme` | `"light" \| "dark" \| "default"` | Current theme. |
76
+ | `themeMode` | `"CSS" \| "TORCH"` | Current token mode. |
77
+ | `updateTheme` | `(theme) => void` | Set the theme (updates DOM + `localStorage`). |
78
+ | `updateMode` | `(mode) => void` | Set the token mode. |
79
+
80
+ `useTheme` throws if used outside `ThemeProvider`.
81
+
82
+ ## See also
83
+
84
+ - [Providers reference](./providers.md)
85
+ - [CLI reference](./cli.md)
@@ -37,7 +37,7 @@ export type Themes = "dark" | "light" | "default";
37
37
 
38
38
  **Usage:**
39
39
  ```typescript
40
- import type { Themes } from '@torch-ai/torch-glare';
40
+ import type { Themes } from "@/utils/types";
41
41
 
42
42
  interface MyComponentProps {
43
43
  theme?: Themes;
@@ -60,12 +60,12 @@ interface MyComponentProps {
60
60
  ```typescript
61
61
  export type ButtonVariant =
62
62
  | "PrimeStyle" // Primary action
63
- | "BlueSecStyle" // Blue secondary
63
+ | "BluSecStyle" // Blue secondary
64
64
  | "YelSecStyle" // Yellow secondary
65
65
  | "RedSecStyle" // Red secondary
66
66
  | "BorderStyle" // Outlined
67
67
  | "PrimeContStyle" // Primary contrast
68
- | "BlueContStyle" // Blue contrast
68
+ | "BluContStyle" // Blue contrast
69
69
  | "RedContStyle"; // Red contrast
70
70
  ```
71
71
 
@@ -878,7 +878,7 @@ Button.displayName = 'Button';
878
878
  ### Extending Button Props
879
879
 
880
880
  ```typescript
881
- import type { ButtonProps } from '@torch-ai/torch-glare';
881
+ import type { ButtonProps } from "@/components/LoginButton";
882
882
 
883
883
  interface CustomButtonProps extends ButtonProps {
884
884
  isLoading?: boolean;