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,129 @@
1
+ ---
2
+ title: ChartBlockTool
3
+ description: An Editor.js block tool that renders an editable chart.js chart (bar, line, pie, doughnut, radar, polar area) inside the TORCH Glare TextEditor
4
+ group: Advanced
5
+ keywords: [chart-block-tool, editorjs, chart, chartjs, text-editor, block-tool, advanced]
6
+ ---
7
+
8
+ # ChartBlockTool
9
+
10
+ > An advanced, non-visual module: a custom [Editor.js](https://editorjs.io) **block tool**
11
+ > that renders and edits a [chart.js](https://www.chartjs.org) chart inside the TORCH Glare
12
+ > [TextEditor](./text-editor.md). It is not a React component — it is a block-tool class you
13
+ > register in an Editor.js `tools` config. TextEditor wires it up for you; add it directly only
14
+ > when you build a custom Editor.js instance.
15
+
16
+ ## Installation
17
+
18
+ TORCH Glare is a copy-in library: the CLI copies this module's source into your project
19
+ (you do **not** install it from the npm package). Run `init` once, then `add`:
20
+
21
+ ```bash
22
+ npx torch-glare@latest init
23
+ npx torch-glare@latest add TextEditor
24
+ ```
25
+
26
+ `ChartBlockTool` ships as part of the `TextEditor` folder, so `add TextEditor` copies it in.
27
+ It depends on the `chart.js` npm package (installed automatically by the CLI).
28
+
29
+ ## Import
30
+
31
+ ```typescript
32
+ import { ChartBlockTool, type ChartBlockData } from "@/components/TextEditor";
33
+ ```
34
+
35
+ ## Quick Examples
36
+
37
+ ### Register it in an Editor.js instance
38
+
39
+ ```typescript
40
+ import EditorJS from "@editorjs/editorjs";
41
+ import { ChartBlockTool } from "@/components/TextEditor";
42
+
43
+ const editor = new EditorJS({
44
+ holder: "editor",
45
+ tools: {
46
+ chart: {
47
+ class: ChartBlockTool,
48
+ },
49
+ },
50
+ });
51
+ ```
52
+
53
+ Once registered, the tool appears in the Editor.js toolbox (title "Chart"). Selecting it
54
+ inserts an editable chart block: a title field, a chart-type selector, and label/dataset
55
+ editors. The block persists as `ChartBlockData` in the editor's saved output.
56
+
57
+ ### The saved data shape
58
+
59
+ ```typescript
60
+ import type { ChartBlockData } from "@/components/TextEditor";
61
+
62
+ const block: ChartBlockData = {
63
+ chartType: "bar",
64
+ title: "Quarterly revenue",
65
+ labels: ["Q1", "Q2", "Q3", "Q4"],
66
+ datasets: [
67
+ {
68
+ label: "2024",
69
+ data: [12, 19, 8, 15],
70
+ backgroundColor: "#3b82f6",
71
+ borderColor: "#1d4ed8",
72
+ },
73
+ ],
74
+ };
75
+ ```
76
+
77
+ ## API Reference
78
+
79
+ `ChartBlockTool` implements the Editor.js `BlockTool` interface. You register the **class**;
80
+ Editor.js constructs and calls it. Its public surface:
81
+
82
+ ### Props
83
+
84
+ | Member | Type | Description |
85
+ |--------|------|-------------|
86
+ | `default export` | `class ChartBlockTool` | The block-tool class to pass as `tools.chart.class`. |
87
+ | `static toolbox` | `{ title: string; icon: string }` | Toolbox entry (title "Chart" + icon) shown in the Editor.js block menu. |
88
+ | `static isReadOnlySupported` | `boolean` | `true` — the block renders in read-only editors. |
89
+ | `constructor` | `({ data, api, readOnly }) => ChartBlockTool` | Called by Editor.js with the saved `data` (`Partial<ChartBlockData>`), the editor `api`, and the `readOnly` flag. |
90
+ | `render()` | `() => HTMLElement` | Returns the block's DOM (editor UI or read-only chart). |
91
+ | `save()` | `() => ChartBlockData` | Returns the block's current data for persistence. |
92
+
93
+ ### TypeScript
94
+
95
+ ```typescript
96
+ export interface ChartBlockData {
97
+ chartType: "bar" | "line" | "pie" | "doughnut" | "radar" | "polarArea";
98
+ title: string;
99
+ labels: string[];
100
+ datasets: Array<{
101
+ label: string;
102
+ data: number[];
103
+ backgroundColor: string;
104
+ borderColor: string;
105
+ }>;
106
+ }
107
+
108
+ export default class ChartBlockTool {
109
+ static get isReadOnlySupported(): boolean;
110
+ static get toolbox(): { title: string; icon: string };
111
+ constructor(options: { data: Partial<ChartBlockData>; api: any; readOnly: boolean });
112
+ render(): HTMLElement;
113
+ save(): ChartBlockData;
114
+ }
115
+ ```
116
+
117
+ ## Common Patterns
118
+
119
+ - **Use via TextEditor:** most apps should use [TextEditor](./text-editor.md), which registers
120
+ this tool for you — you rarely construct it directly.
121
+ - **Custom Editor.js:** when building your own Editor.js instance, register the class under a
122
+ `tools` key; Editor.js handles construction and lifecycle.
123
+ - **Supported chart types:** `bar`, `line`, `pie`, `doughnut`, `radar`, `polarArea` (from
124
+ `ChartBlockData["chartType"]`).
125
+
126
+ ## Related Components
127
+
128
+ - [TextEditor](./text-editor.md) — the rich-text editor that hosts this block tool.
129
+ - [TableDnDWrapper](./table-dnd-wrapper.md) — another internal Editor.js tool module.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: Checkbox
3
- version: 1.1.15
3
+ version: 2.4.0
4
4
  status: stable
5
5
  category: components/forms
6
6
  tags: [form, checkbox, selection, radix-ui, accessible, controlled]
@@ -17,14 +17,22 @@ dependencies:
17
17
 
18
18
  ## Installation
19
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
+
20
23
  ```bash
21
- npm install torch-glare
24
+ npx torch-glare@latest init
25
+ npx torch-glare@latest add Checkbox
22
26
  ```
23
27
 
28
+ `add` also copies any components, hooks, and utilities that `Checkbox` depends on.
29
+
24
30
  ## Import
25
31
 
26
- ```typescript
27
- import { Checkbox } from 'torch-glare/lib/components/Checkbox'
32
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
33
+
34
+ ```tsx
35
+ import { Checkbox } from "@/components/Checkbox";
28
36
  ```
29
37
 
30
38
  ## Quick Examples
@@ -32,7 +40,7 @@ import { Checkbox } from 'torch-glare/lib/components/Checkbox'
32
40
  ### Basic Usage
33
41
 
34
42
  ```typescript
35
- import { Checkbox } from 'torch-glare/lib/components/Checkbox'
43
+ import { Checkbox } from '@/components/Checkbox'
36
44
 
37
45
  function Example() {
38
46
  const [checked, setChecked] = useState(false)
@@ -402,7 +410,7 @@ function FilterPanel() {
402
410
 
403
411
  ```typescript
404
412
  import { render, screen, fireEvent } from '@testing-library/react'
405
- import { Checkbox } from 'torch-glare/lib/components/Checkbox'
413
+ import { Checkbox } from '@/components/Checkbox'
406
414
 
407
415
  describe('Checkbox', () => {
408
416
  it('handles checked state changes', () => {
@@ -609,10 +617,10 @@ Radix UI automatically handles ARIA attributes:
609
617
  ```diff
610
618
  // Import path changed
611
619
  - import Checkbox from 'torch-glare/Checkbox'
612
- + import { Checkbox } from 'torch-glare/lib/components/Checkbox'
620
+ + import { Checkbox } from '@/components/Checkbox'
613
621
 
614
622
  // Size prop values changed
615
- - <Checkbox size="small" />
623
+ - <Checkbox size="M" />
616
624
  + <Checkbox size="S" />
617
625
  ```
618
626
 
@@ -12,10 +12,16 @@ A complete layout system for building dashboard and admin panel interfaces. Feat
12
12
 
13
13
  ## Installation
14
14
 
15
+ TORCH Glare is a copy-in library: the CLI copies this component's source into your project
16
+ (you do **not** install it from the npm package). Run `init` once, then `add`:
17
+
15
18
  ```bash
16
- npx torch-cli add cn-layout
19
+ npx torch-glare@latest init
20
+ npx torch-glare@latest add CnLayout
17
21
  ```
18
22
 
23
+ `add` also copies any components, hooks, and utilities that `CnLayout` depends on.
24
+
19
25
  ## Imports
20
26
 
21
27
  ```typescript
@@ -0,0 +1,101 @@
1
+ ---
2
+ title: ColorPicker
3
+ description: A full Figma-style color picker with a saturation/value area, hue and opacity sliders, an eyedropper, switchable HEX/RGB/HSL inputs, and preset swatches
4
+ group: Forms
5
+ keywords: [color-picker, color, palette, hex, rgb, hsl, hsv, opacity, alpha, eyedropper, swatch]
6
+ ---
7
+
8
+ # ColorPicker
9
+
10
+ > A full Figma-style color palette opened from **a trigger you supply**: a draggable
11
+ > saturation/value area, a hue slider, an optional opacity slider, an eyedropper (where the
12
+ > browser supports it), switchable **HEX / RGB / HSL** numeric inputs, and preset swatches.
13
+ > The value is always a hex string.
14
+
15
+ ## Installation
16
+
17
+ ```bash
18
+ npx torch-glare@latest init
19
+ npx torch-glare@latest add ColorPicker
20
+ ```
21
+
22
+ `add` also copies its dependencies — `utils/color` (the pure hex/RGB/HSV/HSL math), plus the
23
+ `Popover` and `Input` components.
24
+
25
+ ## Import
26
+
27
+ ```tsx
28
+ import { ColorPicker } from "@/components/ColorPicker";
29
+ ```
30
+
31
+ ## Usage
32
+
33
+ ColorPicker renders **no trigger of its own** — you pass one as its child (rendered via `asChild`,
34
+ so it must forward ref/props to a DOM node). The current color is handed to that child based on
35
+ what it is:
36
+
37
+ | Child | Receives |
38
+ |---|---|
39
+ | an **input** — native `<input>`/`<textarea>`, or any element already given a `value` prop | the hex as **`value`** (plus an `onChange` that commits a typed hex, if you didn't supply one) |
40
+ | **anything else** | the hex as **`children`** — unless it already has children, which are left untouched |
41
+
42
+ ```tsx
43
+ const [color, setColor] = useState("#3B82F6");
44
+
45
+ // input child → gets `value={color}`
46
+ <ColorPicker value={color} onChange={setColor}>
47
+ <input className="…" />
48
+ </ColorPicker>
49
+
50
+ // non-input child → gets the hex as its content
51
+ <ColorPicker value={color} onChange={setColor}>
52
+ <Button variant="BorderStyle" />
53
+ </ColorPicker>
54
+
55
+ // a child with its own content keeps it — render the value yourself
56
+ <ColorPicker value={color} onChange={setColor}>
57
+ <button type="button">
58
+ <span style={{ backgroundColor: color }} />
59
+ {color}
60
+ </button>
61
+ </ColorPicker>
62
+ ```
63
+
64
+ With presets and opacity disabled (always emits `#rrggbb`):
65
+
66
+ ```tsx
67
+ <ColorPicker
68
+ value={color}
69
+ onChange={setColor}
70
+ alpha={false}
71
+ presets={["#005ECC", "#047854", "#E30C30", "#F5A623"]}
72
+ >
73
+ <Button variant="BorderStyle" />
74
+ </ColorPicker>
75
+ ```
76
+
77
+ ## Props
78
+
79
+ | Prop | Type | Default | Description |
80
+ | ----------- | -------------------------- | ------------- | --------------------------------------------------------------------------- |
81
+ | `children` | `ReactElement` | — (required) | The trigger. Gets the hex as `value` if it's an input, else as `children`. |
82
+ | `value` | `string` | `"#000000"` | Current color as a hex string (`#rrggbb` or `#rrggbbaa`). |
83
+ | `onChange` | `(hex: string) => void` | — | Called on every change. Emits `#rrggbbaa` only when opacity < 100%. |
84
+ | `presets` | `string[]` | — | Quick-pick swatches shown at the bottom of the panel. |
85
+ | `alpha` | `boolean` | `true` | Show the opacity slider + input and allow 8-digit output. |
86
+ | `disabled` | `boolean` | `false` | Disable the trigger and all controls. |
87
+ | `theme` | `"dark" \| "light" \| "default"` | — | Applied as `data-theme`. |
88
+
89
+ ## Value format
90
+
91
+ The value stays `#rrggbb` while fully opaque (backward-compatible with plain hex fields) and is
92
+ promoted to `#rrggbbaa` only when opacity drops below 100%. Feeding a 3-, 6-, or 8-digit hex
93
+ (with or without `#`) back in via `value` is always accepted.
94
+
95
+ ## Notes
96
+
97
+ - The **eyedropper** button appears only where the native [`EyeDropper` API](https://developer.mozilla.org/docs/Web/API/EyeDropper)
98
+ is available (Chromium/Edge); it is hidden on Firefox/Safari.
99
+ - Used by `FormBuilder.Color` — see [form-builder.md](./form-builder.md).
100
+ - Color math lives in `utils/color` (`parseHex`, `formatHex`, `rgbToHsv`, `hsvToRgb`,
101
+ `rgbToHsl`, `hslToRgb`) and is reusable on its own.
@@ -0,0 +1,80 @@
1
+ ---
2
+ title: ConclusionHeader
3
+ description: A clickable section header with a chevron toggle — white-alpha hover surfaces, chevron down when open and sideways when closed, and a "Disabled" badge when disabled. Direction-aware (LTR/RTL). Used for each FormSummary group title.
4
+ component: true
5
+ group: Layout & Containers
6
+ keywords: [conclusion-header, collapsible, header, disclosure, accordion, toggle, chevron, expand, collapse, section]
7
+ ---
8
+
9
+ # ConclusionHeader
10
+
11
+ A clickable **section header** that toggles a collapsible region, per the
12
+ *Conclusion-Header-2.0* design. Its surfaces are **button overlays** (not an input field): at
13
+ rest the label stands alone, and on hover it gains a `Button/ContStyle-Hover` pill while the
14
+ chevron gains a `Button/Secondary` box. The chevron is hidden at rest while open, shows
15
+ **sideways** when closed (left in LTR, right in RTL), and flips to **down** on hover. When
16
+ `disabled` the label greys out, truncates at 120px, and a gray-subtle `Badge` replaces the
17
+ chevron.
18
+
19
+ It renders only the header — you own the collapsible body. It works **uncontrolled**
20
+ (manages its own open state) or **controlled** (pass `open` + `onOpenChange`):
21
+
22
+ ```tsx
23
+ // Uncontrolled — reflect the state with onOpenChange
24
+ const [open, setOpen] = useState(true)
25
+
26
+ <ConclusionHeader label="Invoice" defaultOpen onOpenChange={setOpen} />
27
+ {open && <section>…body…</section>}
28
+
29
+ // Controlled — you drive `open`
30
+ <ConclusionHeader label="Invoice" open={open} onOpenChange={setOpen} />
31
+ ```
32
+
33
+ ## Installation
34
+
35
+ ```bash
36
+ npx torch-glare@latest init
37
+ npx torch-glare@latest add ConclusionHeader
38
+ ```
39
+
40
+ ## Imports
41
+
42
+ ```tsx
43
+ import { ConclusionHeader } from '@/components/ConclusionHeader'
44
+ ```
45
+
46
+ ## Props
47
+
48
+ | Prop | Type | Default | Notes |
49
+ |---|---|---|---|
50
+ | `label` | `ReactNode` | — | The header text. |
51
+ | `open` | `boolean` | — | **Controlled** open state. Omit to let the header manage its own. |
52
+ | `defaultOpen` | `boolean` | `true` | Initial open state when **uncontrolled**. |
53
+ | `onOpenChange` | `(open: boolean) => void` | — | Called with the next open state on click. |
54
+ | `disabled` | `boolean` | `false` | Greys the label and shows a `Badge` instead of the chevron. |
55
+ | `disabledLabel` | `string` | `"Disabled"` | Badge text when `disabled`. |
56
+ | `theme` | `'dark' \| 'light' \| 'default'` | — | Theme override; otherwise inherits the nearest `data-theme`. |
57
+
58
+ Extra props spread to the underlying `<button>`, which is what the header renders — so it is
59
+ focusable, toggles on <kbd>Enter</kbd>/<kbd>Space</kbd>, and exposes `aria-expanded` for
60
+ free. A `ref` is forwarded to that `HTMLButtonElement`.
61
+
62
+ ## Behaviour
63
+
64
+ - **Open** (rest): label only — no surface, no chevron.
65
+ - **Open hover**: `Button/ContStyle-Hover` pill (label inset 4px) + `Button/Secondary`
66
+ chevron box with a **down** chevron.
67
+ - **Closed** (rest): label + a bare **sideways** chevron (`<` LTR / `>` RTL), no box.
68
+ - **Closed hover**: same surfaces as open hover; the chevron flips to down.
69
+ - **Disabled**: greyed label truncated at 120px + a `● Disabled` badge sitting beside it
70
+ (not at the row's end); not clickable.
71
+
72
+ Direction is inherited from the ambient `dir` — the design's RTL variants are the LTR ones
73
+ mirrored, which the component's logical properties produce automatically.
74
+
75
+ ## Composition
76
+
77
+ Uses the design-system tokens directly (`Button/Secondary`, `Button/ContStyle-Hover`) rather
78
+ than the input/button components, and reuses [Badge](./badge.md) for the disabled state.
79
+ [FormSummary](./form-summary.md) uses it as each **group** title, so every group of totals
80
+ collapses independently.
@@ -11,29 +11,22 @@ keywords: [context-menu, right-click, menu, radix-ui, submenu, checkbox, context
11
11
 
12
12
  ## Installation
13
13
 
14
+ TORCH Glare is a copy-in library: the CLI copies this component's source into your project
15
+ (you do **not** install it from the npm package). Run `init` once, then `add`:
16
+
14
17
  ```bash
15
- npm install @radix-ui/react-context-menu
18
+ npx torch-glare@latest init
19
+ npx torch-glare@latest add ContextMenu
16
20
  ```
17
21
 
22
+ `add` also copies any components, hooks, and utilities that `ContextMenu` depends on.
23
+
18
24
  ## Import
19
25
 
20
- ```typescript
21
- import {
22
- ContextMenu,
23
- ContextMenuTrigger,
24
- ContextMenuContent,
25
- ContextMenuItem,
26
- ContextMenuGroup,
27
- ContextMenuRadioGroup,
28
- ContextMenuCheckboxItem,
29
- ContextMenuRadioItem,
30
- ContextMenuLabel,
31
- ContextMenuShortcut,
32
- ContextMenuSub,
33
- ContextMenuSubTrigger,
34
- ContextMenuSubContent,
35
- ContextMenuPortal,
36
- } from '@torch-ui/components'
26
+ Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
27
+
28
+ ```tsx
29
+ import { ContextMenu } from "@/components/ContextMenu";
37
30
  ```
38
31
 
39
32
  ## Quick Examples
@@ -43,7 +36,7 @@ import {
43
36
  Wrap the right-click zone in `ContextMenuTrigger`. The menu opens at the pointer.
44
37
 
45
38
  ```typescript
46
- import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem } from '@torch-ui/components'
39
+ import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem } from "@/components/ContextMenu";
47
40
 
48
41
  function Example() {
49
42
  return (
@@ -66,7 +59,7 @@ function Example() {
66
59
  ### With Icons, Shortcuts, and a Negative Item
67
60
 
68
61
  ```typescript
69
- import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuShortcut } from '@torch-ui/components'
62
+ import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuShortcut } from "@/components/ContextMenu";
70
63
 
71
64
  function ActionsMenu() {
72
65
  return (
@@ -103,7 +96,7 @@ function ActionsMenu() {
103
96
  > Clicking a checkbox item keeps the menu open — `onSelect` calls `preventDefault()` internally so Radix does not auto-close. Toggle several options without the menu dismissing.
104
97
 
105
98
  ```typescript
106
- import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuCheckboxItem } from '@torch-ui/components'
99
+ import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuCheckboxItem } from "@/components/ContextMenu";
107
100
  import { useState } from 'react'
108
101
 
109
102
  function CheckboxMenu() {
@@ -148,7 +141,7 @@ function CheckboxMenu() {
148
141
  > Like checkboxes, selecting a radio item keeps the menu open (`onSelect` `preventDefault` is built in).
149
142
 
150
143
  ```typescript
151
- import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuRadioGroup, ContextMenuRadioItem } from '@torch-ui/components'
144
+ import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuRadioGroup, ContextMenuRadioItem } from "@/components/ContextMenu";
152
145
  import { useState } from 'react'
153
146
 
154
147
  function RadioMenu() {
@@ -176,7 +169,7 @@ function RadioMenu() {
176
169
  ### With Submenu
177
170
 
178
171
  ```typescript
179
- import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent } from '@torch-ui/components'
172
+ import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent } from "@/components/ContextMenu";
180
173
 
181
174
  function SubmenuExample() {
182
175
  return (
@@ -211,7 +204,7 @@ function SubmenuExample() {
211
204
  Set `dir="rtl"` on the Root and the menu, items, and submenu arrows mirror automatically.
212
205
 
213
206
  ```typescript
214
- import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuShortcut } from '@torch-ui/components'
207
+ import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuShortcut } from "@/components/ContextMenu";
215
208
 
216
209
  function RtlMenu() {
217
210
  return (
@@ -238,7 +231,7 @@ function RtlMenu() {
238
231
  Tall menus scroll instead of overflowing off-screen. The surface caps at `maxHeight` (default `320`px) and never exceeds the space available after collision handling. Pass `maxHeight` to change the cap.
239
232
 
240
233
  ```typescript
241
- import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuLabel } from '@torch-ui/components'
234
+ import { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuLabel } from "@/components/ContextMenu";
242
235
 
243
236
  function LongMenu() {
244
237
  return (
@@ -12,10 +12,16 @@ A compact circular badge component designed specifically for displaying numeric
12
12
 
13
13
  ## Installation
14
14
 
15
+ TORCH Glare is a copy-in library: the CLI copies this component's source into your project
16
+ (you do **not** install it from the npm package). Run `init` once, then `add`:
17
+
15
18
  ```bash
16
- npx torch-cli add count-badge
19
+ npx torch-glare@latest init
20
+ npx torch-glare@latest add CountBadge
17
21
  ```
18
22
 
23
+ `add` also copies any components, hooks, and utilities that `CountBadge` depends on.
24
+
19
25
  ## Imports
20
26
 
21
27
  ```typescript