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.
- package/README.md +8 -0
- package/apps/lib/components/ActionButton.tsx +7 -12
- package/apps/lib/components/ActionsGroup.tsx +4 -15
- package/apps/lib/components/AlertDialog.tsx +173 -191
- package/apps/lib/components/Avatar.tsx +13 -16
- package/apps/lib/components/Badge.tsx +1 -3
- package/apps/lib/components/BadgeField.tsx +76 -71
- package/apps/lib/components/Breadcrumb.tsx +49 -85
- package/apps/lib/components/Button.tsx +21 -20
- package/apps/lib/components/ButtonGroup.tsx +31 -41
- package/apps/lib/components/Calendar.tsx +51 -29
- package/apps/lib/components/Card.tsx +40 -24
- package/apps/lib/components/Checkbox.tsx +9 -16
- package/apps/lib/components/ColorPicker.tsx +441 -0
- package/apps/lib/components/ConclusionHeader.tsx +148 -0
- package/apps/lib/components/ContextMenu.tsx +97 -96
- package/apps/lib/components/CountBadge.tsx +4 -6
- package/apps/lib/components/DataTable.tsx +196 -216
- package/apps/lib/components/DataViews/DataViewRadio.tsx +1 -6
- package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +13 -47
- package/apps/lib/components/DataViews/DataViewsHeader.tsx +1 -3
- package/apps/lib/components/DataViews/DataViewsLayout.tsx +5 -12
- package/apps/lib/components/DataViews/FilterPanel.tsx +155 -149
- package/apps/lib/components/DataViews/HeaderSearch.tsx +1 -5
- package/apps/lib/components/DataViews/InboxView.tsx +22 -68
- package/apps/lib/components/DataViews/InboxViewCard.tsx +68 -77
- package/apps/lib/components/DataViews/KanbanView.tsx +8 -25
- package/apps/lib/components/DataViews/PanelControls.tsx +3 -13
- package/apps/lib/components/DataViews/SettingsPanel.tsx +83 -89
- package/apps/lib/components/DataViews/TableView.tsx +8 -28
- package/apps/lib/components/DataViews/TreeView.tsx +12 -40
- package/apps/lib/components/DataViews/badgeAdapter.ts +32 -28
- package/apps/lib/components/DataViews/fieldRenderers.tsx +106 -141
- package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +30 -23
- package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +39 -32
- package/apps/lib/components/DataViews/filters/PresetChips.tsx +15 -15
- package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +69 -58
- package/apps/lib/components/DataViews/index.ts +26 -26
- package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +12 -16
- package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +28 -31
- package/apps/lib/components/DataViews/types.ts +104 -115
- package/apps/lib/components/DatePicker.tsx +200 -196
- package/apps/lib/components/Dialog.tsx +92 -105
- package/apps/lib/components/Divider.tsx +21 -24
- package/apps/lib/components/Drawer.tsx +124 -142
- package/apps/lib/components/DropdownMenu.tsx +131 -171
- package/apps/lib/components/FieldHint.tsx +4 -11
- package/apps/lib/components/Form.tsx +146 -155
- package/apps/lib/components/FormBuilder/DisplayField.tsx +40 -0
- package/apps/lib/components/FormBuilder/context.ts +71 -0
- package/apps/lib/components/FormBuilder/fields/ChoiceFields.tsx +65 -0
- package/apps/lib/components/FormBuilder/fields/ColorField.tsx +76 -0
- package/apps/lib/components/FormBuilder/fields/CustomField.tsx +16 -0
- package/apps/lib/components/FormBuilder/fields/DateField.tsx +34 -0
- package/apps/lib/components/FormBuilder/fields/FieldArray.tsx +79 -0
- package/apps/lib/components/FormBuilder/fields/FieldShell.tsx +174 -0
- package/apps/lib/components/FormBuilder/fields/FileField.tsx +40 -0
- package/apps/lib/components/FormBuilder/fields/OptionListFields.tsx +139 -0
- package/apps/lib/components/FormBuilder/fields/OtpField.tsx +32 -0
- package/apps/lib/components/FormBuilder/fields/PhoneField.tsx +82 -0
- package/apps/lib/components/FormBuilder/fields/RichTextEditorField.tsx +37 -0
- package/apps/lib/components/FormBuilder/fields/SelectField.tsx +101 -0
- package/apps/lib/components/FormBuilder/fields/SignatureField.tsx +175 -0
- package/apps/lib/components/FormBuilder/fields/SliderField.tsx +72 -0
- package/apps/lib/components/FormBuilder/fields/SwitchBoxField.tsx +42 -0
- package/apps/lib/components/FormBuilder/fields/TableField.tsx +312 -0
- package/apps/lib/components/FormBuilder/fields/TextField.tsx +222 -0
- package/apps/lib/components/FormBuilder/fields/TreeSelectField.tsx +49 -0
- package/apps/lib/components/FormBuilder/fields/countries.ts +303 -0
- package/apps/lib/components/FormBuilder/fields/index.ts +25 -0
- package/apps/lib/components/FormBuilder/form-builder.tsx +292 -0
- package/apps/lib/components/FormBuilder/header.tsx +105 -0
- package/apps/lib/components/FormBuilder/index.ts +37 -0
- package/apps/lib/components/FormBuilder/numberFormat.ts +16 -0
- package/apps/lib/components/FormBuilder/stepper.tsx +217 -0
- package/apps/lib/components/FormBuilder/submit.tsx +41 -0
- package/apps/lib/components/FormBuilder/types.ts +264 -0
- package/apps/lib/components/FormBuilder/viewFormat.tsx +137 -0
- package/apps/lib/components/FormRenderer/FormDrawer.tsx +121 -0
- package/apps/lib/components/FormRenderer/form-renderer.tsx +113 -0
- package/apps/lib/components/FormRenderer/index.ts +9 -0
- package/apps/lib/components/FormRenderer/types.ts +79 -0
- package/apps/lib/components/FormStepper.tsx +9 -39
- package/apps/lib/components/FormSummary.tsx +282 -0
- package/apps/lib/components/HeaderBar.tsx +1 -9
- package/apps/lib/components/ImageAttachment.tsx +106 -93
- package/apps/lib/components/InnerLabelField.tsx +20 -16
- package/apps/lib/components/Input.tsx +171 -172
- package/apps/lib/components/InputField.tsx +44 -45
- package/apps/lib/components/InputOTP.tsx +68 -69
- package/apps/lib/components/Label.tsx +61 -58
- package/apps/lib/components/LabelField.tsx +4 -5
- package/apps/lib/components/LabeledCheckBox.tsx +8 -12
- package/apps/lib/components/LabeledRadio.tsx +7 -5
- package/apps/lib/components/LinkButton.tsx +2 -9
- package/apps/lib/components/LoginButton.tsx +4 -9
- package/apps/lib/components/PasswordLevel.tsx +5 -5
- package/apps/lib/components/Popover.tsx +15 -33
- package/apps/lib/components/ProfileMenu.tsx +67 -72
- package/apps/lib/components/Radio.tsx +1 -5
- package/apps/lib/components/RadioCard.tsx +11 -28
- package/apps/lib/components/ScrollArea.tsx +45 -43
- package/apps/lib/components/SearchField.tsx +49 -39
- package/apps/lib/components/SearchableSelect.tsx +16 -16
- package/apps/lib/components/SearchableTable.tsx +108 -118
- package/apps/lib/components/SearchableTree.tsx +469 -0
- package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
- package/apps/lib/components/SectionBlock.tsx +19 -23
- package/apps/lib/components/Select.tsx +80 -186
- package/apps/lib/components/SimpleSelect.tsx +196 -187
- package/apps/lib/components/Skeleton.tsx +9 -12
- package/apps/lib/components/SlideDatePicker.tsx +215 -166
- package/apps/lib/components/SpinLoading.tsx +33 -49
- package/apps/lib/components/Stepper.tsx +13 -56
- package/apps/lib/components/Switch.tsx +8 -10
- package/apps/lib/components/TabFormItem.tsx +3 -12
- package/apps/lib/components/TabSwitch.tsx +7 -34
- package/apps/lib/components/Table.tsx +60 -75
- package/apps/lib/components/{ChartBlockTool.ts → TextEditor/ChartBlockTool.ts} +17 -52
- package/apps/lib/components/TextEditor/RichTextField.tsx +46 -0
- package/apps/lib/components/{TableDnDWrapper.ts → TextEditor/TableDnDWrapper.ts} +15 -48
- package/apps/lib/components/{TextEditor.tsx → TextEditor/TextEditor.tsx} +156 -113
- package/apps/lib/components/TextEditor/TextEditorToolbar.tsx +429 -0
- package/apps/lib/components/TextEditor/editor-tools/AlignmentTune.ts +70 -0
- package/apps/lib/components/TextEditor/editor-tools/ColorInlineTool.ts +50 -0
- package/apps/lib/components/TextEditor/editor-tools/StrikethroughInlineTool.ts +48 -0
- package/apps/lib/components/TextEditor/editor-tools/inlineFormat.ts +98 -0
- package/apps/lib/{types → components/TextEditor}/editorjs.d.ts +19 -0
- package/apps/lib/components/TextEditor/index.ts +7 -0
- package/apps/lib/{utils → components/TextEditor}/markdownParser.ts +2 -7
- package/apps/lib/components/Textarea.tsx +9 -13
- package/apps/lib/components/Timeline.tsx +21 -41
- package/apps/lib/components/Toast.tsx +83 -83
- package/apps/lib/components/Toggle.tsx +112 -114
- package/apps/lib/components/ToggleButton.tsx +1 -1
- package/apps/lib/components/Tooltip.tsx +24 -19
- package/apps/lib/components/TransparentLabel.tsx +61 -62
- package/apps/lib/components/TreeDropDown.tsx +86 -52
- package/apps/lib/components/TreeFolder/TreeFolder.tsx +15 -48
- package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +16 -21
- package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +9 -20
- package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +3 -3
- package/apps/lib/components/TreeFolder/icons.tsx +14 -17
- package/apps/lib/components/TreeFolder/index.ts +15 -8
- package/apps/lib/components/TreeFolder/treeFolderUtils.ts +47 -52
- package/apps/lib/components/TreeFolder/types.ts +32 -32
- package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +117 -123
- package/apps/lib/hooks/useActiveTreeItem.ts +52 -55
- package/apps/lib/hooks/useClickOutside.ts +21 -20
- package/apps/lib/hooks/useDataViewsState.ts +86 -80
- package/apps/lib/hooks/useIsMobile.ts +12 -12
- package/apps/lib/hooks/useResize.ts +54 -65
- package/apps/lib/hooks/useTagSelection.ts +201 -201
- package/apps/lib/layouts/CNLayout.tsx +181 -140
- package/apps/lib/layouts/DataViewCard.tsx +4 -18
- package/apps/lib/layouts/FieldSection.tsx +2 -6
- package/apps/lib/layouts/TreeSubLayout.tsx +24 -38
- package/apps/lib/providers/ThemeProvider.tsx +8 -23
- package/apps/lib/registry.json +997 -0
- package/apps/lib/tsconfig.json +9 -0
- package/apps/lib/tsconfig.tsbuildinfo +1 -0
- package/apps/lib/utils/cn.ts +1 -1
- package/apps/lib/utils/color.ts +175 -0
- package/apps/lib/utils/dataViews/columnUtils.ts +46 -44
- package/apps/lib/utils/dataViews/fieldUtils.ts +70 -71
- package/apps/lib/utils/dataViews/nestedDataUtils.tsx +129 -122
- package/apps/lib/utils/dataViews/pathUtils.ts +74 -67
- package/apps/lib/utils/dataViews/rangeUtils.ts +121 -112
- package/apps/lib/utils/dataViews/treeUtils.ts +204 -211
- package/apps/lib/utils/dateFormat.ts +64 -54
- package/apps/lib/utils/resize.ts +21 -25
- package/apps/lib/utils/types.ts +13 -13
- package/dist/bin/index.js +8 -2
- package/dist/bin/index.js.map +1 -1
- package/dist/src/shared/getAvailableFiles.d.ts.map +1 -1
- package/dist/src/shared/getAvailableFiles.js +6 -1
- package/dist/src/shared/getAvailableFiles.js.map +1 -1
- package/dist/src/shared/loadRegistry.d.ts +7 -0
- package/dist/src/shared/loadRegistry.d.ts.map +1 -0
- package/dist/src/shared/loadRegistry.js +31 -0
- package/dist/src/shared/loadRegistry.js.map +1 -0
- package/dist/src/shared/resolveInstallPlan.d.ts +12 -0
- package/dist/src/shared/resolveInstallPlan.d.ts.map +1 -0
- package/dist/src/shared/resolveInstallPlan.js +39 -0
- package/dist/src/shared/resolveInstallPlan.js.map +1 -0
- package/dist/src/types/main.d.ts +24 -0
- package/dist/src/types/main.d.ts.map +1 -1
- package/docs/README.md +10 -2
- package/docs/components/action-button.md +30 -24
- package/docs/components/actions-group.md +26 -20
- package/docs/components/alert-dialog.md +45 -45
- package/docs/components/avatar.md +6 -2
- package/docs/components/badge-field.md +6 -2
- package/docs/components/badge.md +7 -1
- package/docs/components/breadcrumb.md +15 -40
- package/docs/components/button-group.md +13 -10
- package/docs/components/button.md +58 -33
- package/docs/components/calendar.md +26 -19
- package/docs/components/card.md +23 -18
- package/docs/components/chart-block-tool.md +129 -0
- package/docs/components/checkbox.md +16 -8
- package/docs/components/cn-layout.md +7 -1
- package/docs/components/color-picker.md +101 -0
- package/docs/components/conclusion-header.md +80 -0
- package/docs/components/context-menu.md +18 -25
- package/docs/components/count-badge.md +7 -1
- package/docs/components/data-table.md +45 -33
- package/docs/components/data-views-config-panel.md +15 -11
- package/docs/components/data-views-layout.md +13 -16
- package/docs/components/date-picker.md +30 -23
- package/docs/components/dialog.md +43 -42
- package/docs/components/divider.md +10 -4
- package/docs/components/drawer.md +161 -135
- package/docs/components/dropdown-menu.md +25 -34
- package/docs/components/field-hint.md +37 -25
- package/docs/components/field-section.md +9 -3
- package/docs/components/form-builder.md +270 -0
- package/docs/components/form-renderer.md +228 -0
- package/docs/components/form-stepper.md +6 -0
- package/docs/components/form-summary.md +123 -0
- package/docs/components/form.md +17 -20
- package/docs/components/header-bar.md +6 -0
- package/docs/components/image-attachment.md +43 -45
- package/docs/components/inbox-view.md +16 -5
- package/docs/components/inner-label-field.md +34 -24
- package/docs/components/input-field.md +18 -10
- package/docs/components/input-otp.md +14 -11
- package/docs/components/input.md +22 -16
- package/docs/components/kanban-view.md +15 -5
- package/docs/components/label-field.md +32 -22
- package/docs/components/label.md +43 -32
- package/docs/components/labeled-check-box.md +16 -8
- package/docs/components/labeled-radio.md +18 -11
- package/docs/components/link-button.md +7 -1
- package/docs/components/login-button.md +8 -2
- package/docs/components/password-level.md +37 -24
- package/docs/components/popover.md +26 -23
- package/docs/components/profile-menu.md +38 -27
- package/docs/components/radio-card.md +16 -9
- package/docs/components/radio.md +16 -8
- package/docs/components/scroll-area.md +6 -2
- package/docs/components/search-field.md +14 -6
- package/docs/components/searchable-select.md +19 -14
- package/docs/components/searchable-table.md +18 -13
- package/docs/components/searchable-tree-dialog.md +190 -0
- package/docs/components/searchable-tree.md +200 -0
- package/docs/components/section-block.md +12 -4
- package/docs/components/select.md +23 -18
- package/docs/components/simple-select.md +14 -10
- package/docs/components/skeleton.md +43 -33
- package/docs/components/slide-date-picker.md +37 -29
- package/docs/components/spin-loading.md +32 -23
- package/docs/components/stepper.md +6 -0
- package/docs/components/switch.md +14 -6
- package/docs/components/tab-form-item.md +7 -1
- package/docs/components/tab-switch.md +13 -6
- package/docs/components/table-dnd-wrapper.md +107 -0
- package/docs/components/table-view.md +15 -5
- package/docs/components/table.md +28 -28
- package/docs/components/text-editor.md +37 -13
- package/docs/components/textarea.md +15 -7
- package/docs/components/timeline.md +6 -0
- package/docs/components/toast.md +35 -26
- package/docs/components/toggle-button.md +24 -21
- package/docs/components/toggle.md +23 -15
- package/docs/components/tooltip.md +42 -30
- package/docs/components/transparent-label.md +29 -20
- package/docs/components/tree-drop-down.md +31 -23
- package/docs/components/tree-sub-layout.md +6 -2
- package/docs/components/tree-view.md +16 -5
- package/docs/explanation/architecture.md +54 -0
- package/docs/explanation/design-system.md +52 -0
- package/docs/how-to/data-views-from-backend-response.md +6 -4
- package/docs/how-to/form-and-list-recipes.md +26 -19
- package/docs/how-to/forms-with-form-builder.md +408 -0
- package/docs/how-to/guides.md +177 -197
- package/docs/migration/changelog.md +38 -0
- package/docs/reference/cli.md +87 -0
- package/docs/reference/components.md +11 -12
- package/docs/reference/hooks.md +8 -8
- package/docs/reference/providers.md +22 -22
- package/docs/reference/tailwind-plugins.md +2 -2
- package/docs/reference/theme.md +85 -0
- package/docs/reference/types.md +4 -4
- package/docs/reference/utilities.md +19 -26
- package/docs/tutorials/building-first-form.md +170 -172
- package/docs/tutorials/component-composition.md +34 -50
- package/docs/tutorials/getting-started.md +2 -2
- package/docs/tutorials/theming-basics.md +13 -10
- package/package.json +31 -3
- package/dist/src/commands/block.d.ts +0 -5
- package/dist/src/commands/block.d.ts.map +0 -1
- package/dist/src/commands/block.js +0 -255
- package/dist/src/commands/block.js.map +0 -1
- package/dist/src/shared/configureFonts.d.ts +0 -6
- package/dist/src/shared/configureFonts.d.ts.map +0 -1
- package/dist/src/shared/configureFonts.js +0 -106
- package/dist/src/shared/configureFonts.js.map +0 -1
- package/dist/src/shared/configureGlobalCss.d.ts +0 -6
- package/dist/src/shared/configureGlobalCss.d.ts.map +0 -1
- package/dist/src/shared/configureGlobalCss.js +0 -154
- package/dist/src/shared/configureGlobalCss.js.map +0 -1
- package/dist/src/shared/configureTailwind.d.ts +0 -7
- package/dist/src/shared/configureTailwind.d.ts.map +0 -1
- package/dist/src/shared/configureTailwind.js +0 -163
- package/dist/src/shared/configureTailwind.js.map +0 -1
- package/dist/src/shared/detectFramework.d.ts +0 -23
- package/dist/src/shared/detectFramework.d.ts.map +0 -1
- package/dist/src/shared/detectFramework.js +0 -119
- package/dist/src/shared/detectFramework.js.map +0 -1
- package/dist/src/shared/installBaseUtils.d.ts +0 -5
- package/dist/src/shared/installBaseUtils.d.ts.map +0 -1
- package/dist/src/shared/installBaseUtils.js +0 -79
- package/dist/src/shared/installBaseUtils.js.map +0 -1
- package/dist/src/shared/resolveAliases.d.ts +0 -24
- package/dist/src/shared/resolveAliases.d.ts.map +0 -1
- package/dist/src/shared/resolveAliases.js +0 -98
- 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:
|
|
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
|
-
|
|
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
|
-
|
|
27
|
-
|
|
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 '
|
|
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 '
|
|
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 '
|
|
620
|
+
+ import { Checkbox } from '@/components/Checkbox'
|
|
613
621
|
|
|
614
622
|
// Size prop values changed
|
|
615
|
-
- <Checkbox size="
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
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
|