torch-glare 2.3.0 → 2.4.1
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 +7 -3
- package/apps/lib/components/BadgeField.tsx +76 -71
- package/apps/lib/components/Breadcrumb.tsx +49 -85
- package/apps/lib/components/Button.tsx +20 -19
- package/apps/lib/components/ButtonGroup.tsx +31 -41
- package/apps/lib/components/Calendar.tsx +51 -29
- package/apps/lib/components/Card.tsx +2 -13
- package/apps/lib/components/ChartBlockTool.ts +17 -52
- package/apps/lib/components/Checkbox.tsx +9 -16
- package/apps/lib/components/ContextMenu.tsx +110 -106
- package/apps/lib/components/CountBadge.tsx +4 -6
- package/apps/lib/components/DataTable.tsx +196 -216
- package/apps/lib/components/DataViews/DataViewRadio.tsx +10 -8
- package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +21 -55
- 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 +173 -150
- 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 +87 -0
- 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 +111 -114
- package/apps/lib/components/DatePicker.tsx +198 -191
- package/apps/lib/components/Dialog.tsx +92 -105
- package/apps/lib/components/Divider.tsx +21 -24
- package/apps/lib/components/Drawer.tsx +79 -139
- package/apps/lib/components/DropdownMenu.tsx +144 -181
- package/apps/lib/components/FieldHint.tsx +4 -11
- package/apps/lib/components/Form.tsx +146 -155
- package/apps/lib/components/FormStepper.tsx +9 -39
- package/apps/lib/components/HeaderBar.tsx +119 -0
- package/apps/lib/components/ImageAttachment.tsx +111 -73
- 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 +31 -35
- 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 +9 -28
- package/apps/lib/components/ScrollArea.tsx +45 -43
- package/apps/lib/components/SearchField.tsx +49 -39
- package/apps/lib/components/SearchableSelect.tsx +46 -52
- package/apps/lib/components/SearchableTable.tsx +199 -219
- package/apps/lib/components/SearchableTree.tsx +469 -0
- package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
- package/apps/lib/components/SectionBlock.tsx +4 -16
- package/apps/lib/components/Select.tsx +53 -80
- 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/TableDnDWrapper.ts +15 -48
- package/apps/lib/components/TextEditor.tsx +93 -104
- package/apps/lib/components/Textarea.tsx +8 -12
- 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 +1004 -0
- package/apps/lib/tsconfig.json +9 -0
- package/apps/lib/utils/cn.ts +1 -1
- 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/markdownParser.ts +2 -7
- 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 +19 -16
- package/docs/components/chart-block-tool.md +128 -0
- package/docs/components/checkbox.md +16 -8
- package/docs/components/cn-layout.md +7 -1
- package/docs/components/context-menu.md +47 -24
- package/docs/components/count-badge.md +7 -1
- package/docs/components/data-table.md +45 -33
- package/docs/components/data-views-config-panel.md +18 -14
- package/docs/components/data-views-layout.md +20 -17
- 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 +8 -33
- package/docs/components/dropdown-menu.md +51 -32
- package/docs/components/field-hint.md +37 -25
- package/docs/components/field-section.md +9 -3
- package/docs/components/form-stepper.md +6 -0
- package/docs/components/form.md +17 -20
- package/docs/components/header-bar.md +187 -0
- package/docs/components/image-attachment.md +33 -41
- 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 +60 -41
- package/docs/components/searchable-tree-dialog.md +190 -0
- package/docs/components/searchable-tree.md +200 -0
- package/docs/components/section-block.md +130 -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 +105 -0
- package/docs/components/table-view.md +15 -5
- package/docs/components/table.md +28 -28
- package/docs/components/text-editor.md +19 -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 +7 -4
- package/docs/how-to/guides.md +24 -18
- 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 +20 -13
- 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
package/docs/components/badge.md
CHANGED
|
@@ -12,10 +12,16 @@ Compact label for status, categories, and tags. Two visual styles (`solid`, `sub
|
|
|
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 Badge
|
|
17
21
|
```
|
|
18
22
|
|
|
23
|
+
`add` also copies any components, hooks, and utilities that `Badge` depends on.
|
|
24
|
+
|
|
19
25
|
## Imports
|
|
20
26
|
|
|
21
27
|
```typescript
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Breadcrumb
|
|
3
|
-
version:
|
|
3
|
+
version: 2.4.0
|
|
4
4
|
status: stable
|
|
5
5
|
category: components/navigation
|
|
6
6
|
tags: [navigation, breadcrumb, wayfinding, compound, accessible, rtl]
|
|
@@ -17,32 +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 Breadcrumb
|
|
22
26
|
```
|
|
23
27
|
|
|
28
|
+
`add` also copies any components, hooks, and utilities that `Breadcrumb` depends on.
|
|
29
|
+
|
|
24
30
|
## Import
|
|
25
31
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
BreadcrumbItem,
|
|
31
|
-
BreadcrumbLink,
|
|
32
|
-
BreadcrumbPage,
|
|
33
|
-
BreadcrumbSeparator,
|
|
34
|
-
BreadcrumbEllipsis,
|
|
35
|
-
} from 'torch-glare/lib/components/Breadcrumb'
|
|
36
|
-
// or
|
|
37
|
-
import {
|
|
38
|
-
Breadcrumb,
|
|
39
|
-
BreadcrumbList,
|
|
40
|
-
BreadcrumbItem,
|
|
41
|
-
BreadcrumbLink,
|
|
42
|
-
BreadcrumbPage,
|
|
43
|
-
BreadcrumbSeparator,
|
|
44
|
-
BreadcrumbEllipsis,
|
|
45
|
-
} from 'torch-glare/lib/components'
|
|
32
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { Breadcrumb } from "@/components/Breadcrumb";
|
|
46
36
|
```
|
|
47
37
|
|
|
48
38
|
## Quick Examples
|
|
@@ -50,14 +40,7 @@ import {
|
|
|
50
40
|
### Basic Usage
|
|
51
41
|
|
|
52
42
|
```typescript
|
|
53
|
-
import {
|
|
54
|
-
Breadcrumb,
|
|
55
|
-
BreadcrumbList,
|
|
56
|
-
BreadcrumbItem,
|
|
57
|
-
BreadcrumbLink,
|
|
58
|
-
BreadcrumbPage,
|
|
59
|
-
BreadcrumbSeparator,
|
|
60
|
-
} from 'torch-glare/lib/components/Breadcrumb'
|
|
43
|
+
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator } from "@/components/Breadcrumb";
|
|
61
44
|
|
|
62
45
|
function Example() {
|
|
63
46
|
return (
|
|
@@ -463,7 +446,7 @@ function DynamicBreadcrumb({ segments }: { segments: { label: string; href: stri
|
|
|
463
446
|
### Collapsible Breadcrumb with Dropdown
|
|
464
447
|
|
|
465
448
|
```typescript
|
|
466
|
-
import { DropdownMenu } from
|
|
449
|
+
import { DropdownMenu } from "@/components/DropdownMenu";
|
|
467
450
|
|
|
468
451
|
function CollapsibleBreadcrumb({
|
|
469
452
|
items,
|
|
@@ -639,15 +622,7 @@ function FileExplorerBreadcrumb({
|
|
|
639
622
|
|
|
640
623
|
```typescript
|
|
641
624
|
import { render, screen } from '@testing-library/react'
|
|
642
|
-
import {
|
|
643
|
-
Breadcrumb,
|
|
644
|
-
BreadcrumbList,
|
|
645
|
-
BreadcrumbItem,
|
|
646
|
-
BreadcrumbLink,
|
|
647
|
-
BreadcrumbPage,
|
|
648
|
-
BreadcrumbSeparator,
|
|
649
|
-
BreadcrumbEllipsis,
|
|
650
|
-
} from 'torch-glare/lib/components/Breadcrumb'
|
|
625
|
+
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis } from "@/components/Breadcrumb";
|
|
651
626
|
|
|
652
627
|
describe('Breadcrumb', () => {
|
|
653
628
|
it('renders navigation landmark', () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ButtonGroup
|
|
3
|
-
version:
|
|
3
|
+
version: 2.4.0
|
|
4
4
|
status: stable
|
|
5
5
|
category: components/buttons
|
|
6
6
|
tags: [toggle-group, button-group, selection, radix-ui, accessible, compound]
|
|
@@ -17,19 +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 ButtonGroup
|
|
22
26
|
```
|
|
23
27
|
|
|
28
|
+
`add` also copies any components, hooks, and utilities that `ButtonGroup` depends on.
|
|
29
|
+
|
|
24
30
|
## Import
|
|
25
31
|
|
|
26
|
-
|
|
27
|
-
import { ButtonGroup, ButtonGroupItem } from 'torch-glare/lib/components/ButtonGroup'
|
|
28
|
-
// or
|
|
29
|
-
import { ButtonGroup, ButtonGroupItem } from 'torch-glare/lib/components'
|
|
32
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
import {
|
|
34
|
+
```tsx
|
|
35
|
+
import { ButtonGroup } from "@/components/ButtonGroup";
|
|
33
36
|
```
|
|
34
37
|
|
|
35
38
|
## Quick Examples
|
|
@@ -37,7 +40,7 @@ import { ToggleButton } from 'torch-glare/lib/components/ButtonGroup'
|
|
|
37
40
|
### Basic Usage (Single Selection)
|
|
38
41
|
|
|
39
42
|
```typescript
|
|
40
|
-
import { ButtonGroup, ButtonGroupItem } from
|
|
43
|
+
import { ButtonGroup, ButtonGroupItem } from "@/components/ButtonGroup";
|
|
41
44
|
|
|
42
45
|
function Example() {
|
|
43
46
|
const [value, setValue] = useState('left')
|
|
@@ -420,7 +423,7 @@ function DarkToolbar() {
|
|
|
420
423
|
|
|
421
424
|
```typescript
|
|
422
425
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
423
|
-
import { ButtonGroup, ButtonGroupItem } from
|
|
426
|
+
import { ButtonGroup, ButtonGroupItem } from "@/components/ButtonGroup";
|
|
424
427
|
|
|
425
428
|
describe('ButtonGroup', () => {
|
|
426
429
|
it('selects a single value', () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Button
|
|
3
|
-
version:
|
|
3
|
+
version: 2.4.0
|
|
4
4
|
status: stable
|
|
5
5
|
category: components/buttons
|
|
6
6
|
tags: [interactive, form, action, accessible, polymorphic]
|
|
@@ -17,16 +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 Button
|
|
22
26
|
```
|
|
23
27
|
|
|
28
|
+
`add` also copies any components, hooks, and utilities that `Button` depends on.
|
|
29
|
+
|
|
24
30
|
## Import
|
|
25
31
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
import { Button } from
|
|
32
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { Button } from "@/components/Button";
|
|
30
36
|
```
|
|
31
37
|
|
|
32
38
|
## Quick Examples
|
|
@@ -34,7 +40,7 @@ import { Button } from 'torch-glare/lib/components'
|
|
|
34
40
|
### Basic Usage
|
|
35
41
|
|
|
36
42
|
```typescript
|
|
37
|
-
import { Button } from '
|
|
43
|
+
import { Button } from '@/components/Button'
|
|
38
44
|
|
|
39
45
|
function Example() {
|
|
40
46
|
return (
|
|
@@ -53,14 +59,21 @@ function Example() {
|
|
|
53
59
|
<Button variant="PrimeContStyle">Primary Container</Button>
|
|
54
60
|
|
|
55
61
|
// Secondary styles
|
|
56
|
-
<Button variant="
|
|
62
|
+
<Button variant="BluSecStyle">Blue Secondary</Button>
|
|
57
63
|
<Button variant="YelSecStyle">Yellow Secondary</Button>
|
|
58
64
|
<Button variant="RedSecStyle">Red Secondary</Button>
|
|
59
65
|
|
|
60
66
|
// Container styles
|
|
61
|
-
<Button variant="
|
|
67
|
+
<Button variant="BluContStyle">Blue Container</Button>
|
|
62
68
|
<Button variant="RedContStyle">Red Container</Button>
|
|
63
69
|
|
|
70
|
+
// Color (solid) styles
|
|
71
|
+
<Button variant="PrimeColStyle">Primary Color</Button>
|
|
72
|
+
<Button variant="BluColStyle">Blue Color</Button>
|
|
73
|
+
<Button variant="RedColStyle">Red Color</Button>
|
|
74
|
+
<Button variant="GreenColStyle">Green Color</Button>
|
|
75
|
+
<Button variant="YelColStyle">Yellow Color</Button>
|
|
76
|
+
|
|
64
77
|
// Border style
|
|
65
78
|
<Button variant="BorderStyle">Border Only</Button>
|
|
66
79
|
```
|
|
@@ -68,11 +81,11 @@ function Example() {
|
|
|
68
81
|
### With Sizes
|
|
69
82
|
|
|
70
83
|
```typescript
|
|
71
|
-
<Button size="
|
|
72
|
-
<Button size="
|
|
73
|
-
<Button size="
|
|
74
|
-
<Button size="
|
|
75
|
-
<Button
|
|
84
|
+
<Button size="S">Small</Button>
|
|
85
|
+
<Button size="M">Medium (Default)</Button>
|
|
86
|
+
<Button size="L">Large</Button>
|
|
87
|
+
<Button size="XL">Extra Large</Button>
|
|
88
|
+
<Button buttonType="icon">Icon Only</Button>
|
|
76
89
|
```
|
|
77
90
|
|
|
78
91
|
### Loading State
|
|
@@ -117,7 +130,7 @@ import { PlusIcon, TrashIcon } from '@heroicons/react/24/outline'
|
|
|
117
130
|
</Button>
|
|
118
131
|
|
|
119
132
|
// Icon only
|
|
120
|
-
<Button
|
|
133
|
+
<Button buttonType="icon" aria-label="Add new item">
|
|
121
134
|
<PlusIcon className="w-5 h-5" />
|
|
122
135
|
</Button>
|
|
123
136
|
```
|
|
@@ -143,7 +156,7 @@ import { PlusIcon, TrashIcon } from '@heroicons/react/24/outline'
|
|
|
143
156
|
Dark Theme Button
|
|
144
157
|
</Button>
|
|
145
158
|
|
|
146
|
-
<Button theme="light" variant="
|
|
159
|
+
<Button theme="light" variant="BluSecStyle">
|
|
147
160
|
Light Theme Button
|
|
148
161
|
</Button>
|
|
149
162
|
```
|
|
@@ -155,7 +168,8 @@ import { PlusIcon, TrashIcon } from '@heroicons/react/24/outline'
|
|
|
155
168
|
| Prop | Type | Default | Description |
|
|
156
169
|
|------|------|---------|-------------|
|
|
157
170
|
| `variant` | `ButtonVariant` | `'PrimeStyle'` | Visual style variant of the button |
|
|
158
|
-
| `size` | `'
|
|
171
|
+
| `size` | `'S' \| 'M' \| 'L' \| 'XL'` | `'M'` | Size of the button |
|
|
172
|
+
| `buttonType` | `'button' \| 'icon'` | `'button'` | Layout type; `'icon'` renders a square icon-only button |
|
|
159
173
|
| `is_loading` | `boolean` | `false` | Shows loading state and disables interaction |
|
|
160
174
|
| `disabled` | `boolean` | `false` | Disables the button |
|
|
161
175
|
| `asChild` | `boolean` | `false` | Merges props onto child element |
|
|
@@ -175,13 +189,18 @@ import { VariantProps } from 'class-variance-authority'
|
|
|
175
189
|
|
|
176
190
|
type ButtonVariant =
|
|
177
191
|
| 'PrimeStyle'
|
|
178
|
-
| '
|
|
192
|
+
| 'BluSecStyle'
|
|
179
193
|
| 'YelSecStyle'
|
|
180
194
|
| 'RedSecStyle'
|
|
181
195
|
| 'BorderStyle'
|
|
182
196
|
| 'PrimeContStyle'
|
|
183
|
-
| '
|
|
197
|
+
| 'BluContStyle'
|
|
184
198
|
| 'RedContStyle'
|
|
199
|
+
| 'PrimeColStyle'
|
|
200
|
+
| 'BluColStyle'
|
|
201
|
+
| 'RedColStyle'
|
|
202
|
+
| 'GreenColStyle'
|
|
203
|
+
| 'YelColStyle'
|
|
185
204
|
|
|
186
205
|
type Themes = 'light' | 'dark' | 'default'
|
|
187
206
|
|
|
@@ -192,6 +211,7 @@ interface ButtonProps extends
|
|
|
192
211
|
disabled?: boolean
|
|
193
212
|
asChild?: boolean
|
|
194
213
|
variant?: ButtonVariant
|
|
214
|
+
buttonType?: 'button' | 'icon'
|
|
195
215
|
as?: React.ElementType
|
|
196
216
|
theme?: Themes
|
|
197
217
|
containerClassName?: string
|
|
@@ -207,8 +227,8 @@ export const Button: React.ForwardRefExoticComponent<
|
|
|
207
227
|
### Form Submit Button
|
|
208
228
|
|
|
209
229
|
```typescript
|
|
210
|
-
import { Button } from '
|
|
211
|
-
import { Form } from '
|
|
230
|
+
import { Button } from '@/components/Button'
|
|
231
|
+
import { Form } from '@/components/Form'
|
|
212
232
|
|
|
213
233
|
function ContactForm() {
|
|
214
234
|
const [isSubmitting, setIsSubmitting] = useState(false)
|
|
@@ -247,8 +267,8 @@ function ContactForm() {
|
|
|
247
267
|
### Button Group
|
|
248
268
|
|
|
249
269
|
```typescript
|
|
250
|
-
import { Button } from '
|
|
251
|
-
import { ActionsGroup } from '
|
|
270
|
+
import { Button } from '@/components/Button'
|
|
271
|
+
import { ActionsGroup } from '@/components/ActionsGroup'
|
|
252
272
|
|
|
253
273
|
function ButtonGroup() {
|
|
254
274
|
return (
|
|
@@ -271,7 +291,7 @@ function DeleteButton({ onDelete }: { onDelete: () => void }) {
|
|
|
271
291
|
return (
|
|
272
292
|
<div className="flex gap-2">
|
|
273
293
|
<Button
|
|
274
|
-
size="
|
|
294
|
+
size="S"
|
|
275
295
|
variant="RedSecStyle"
|
|
276
296
|
onClick={() => {
|
|
277
297
|
onDelete()
|
|
@@ -281,7 +301,7 @@ function DeleteButton({ onDelete }: { onDelete: () => void }) {
|
|
|
281
301
|
Confirm Delete
|
|
282
302
|
</Button>
|
|
283
303
|
<Button
|
|
284
|
-
size="
|
|
304
|
+
size="S"
|
|
285
305
|
variant="BorderStyle"
|
|
286
306
|
onClick={() => setNeedsConfirm(false)}
|
|
287
307
|
>
|
|
@@ -305,8 +325,8 @@ function DeleteButton({ onDelete }: { onDelete: () => void }) {
|
|
|
305
325
|
### With Tooltip
|
|
306
326
|
|
|
307
327
|
```typescript
|
|
308
|
-
import { Button } from '
|
|
309
|
-
import { Tooltip } from '
|
|
328
|
+
import { Button } from '@/components/Button'
|
|
329
|
+
import { Tooltip } from '@/components/Tooltip'
|
|
310
330
|
|
|
311
331
|
function SaveButton() {
|
|
312
332
|
return (
|
|
@@ -325,7 +345,7 @@ function SaveButton() {
|
|
|
325
345
|
|
|
326
346
|
```typescript
|
|
327
347
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
328
|
-
import { Button } from '
|
|
348
|
+
import { Button } from '@/components/Button'
|
|
329
349
|
|
|
330
350
|
describe('Button', () => {
|
|
331
351
|
it('handles click events', () => {
|
|
@@ -397,20 +417,25 @@ The Button component automatically includes:
|
|
|
397
417
|
```typescript
|
|
398
418
|
<button
|
|
399
419
|
type="button"
|
|
400
|
-
role="button"
|
|
401
|
-
aria-busy={is_loading}
|
|
402
|
-
aria-disabled={disabled || is_loading}
|
|
403
420
|
disabled={disabled || is_loading}
|
|
421
|
+
aria-busy={is_loading || undefined}
|
|
404
422
|
>
|
|
405
423
|
{children}
|
|
424
|
+
{/* While loading, the spinner is rendered with role="status" and aria-label="Loading" */}
|
|
406
425
|
</button>
|
|
407
426
|
```
|
|
408
427
|
|
|
428
|
+
Notes:
|
|
429
|
+
- The component renders a native `<button>` (or the element passed via `as`), so it does **not** add an explicit `role="button"`.
|
|
430
|
+
- It sets the native `disabled` attribute (never `aria-disabled`) when `disabled` or `is_loading` is true.
|
|
431
|
+
- `aria-busy` is set only while loading; it is omitted otherwise.
|
|
432
|
+
- The loading spinner itself carries `role="status"` and `aria-label="Loading"`.
|
|
433
|
+
|
|
409
434
|
### Screen Reader Support
|
|
410
435
|
|
|
411
436
|
```typescript
|
|
412
437
|
// Always provide aria-label for icon-only buttons
|
|
413
|
-
<Button
|
|
438
|
+
<Button buttonType="icon" aria-label="Add new item">
|
|
414
439
|
<PlusIcon className="w-5 h-5" />
|
|
415
440
|
</Button>
|
|
416
441
|
|
|
@@ -496,7 +521,7 @@ The Button component automatically includes:
|
|
|
496
521
|
```diff
|
|
497
522
|
// Import path changed
|
|
498
523
|
- import Button from 'torch-glare/Button'
|
|
499
|
-
+ import { Button } from '
|
|
524
|
+
+ import { Button } from '@/components/Button'
|
|
500
525
|
|
|
501
526
|
// Loading prop renamed
|
|
502
527
|
- <Button loading={true}>
|
|
@@ -11,15 +11,22 @@ keywords: [calendar, date, day-picker, month, year, react-day-picker]
|
|
|
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 Calendar
|
|
16
20
|
```
|
|
17
21
|
|
|
22
|
+
`add` also copies any components, hooks, and utilities that `Calendar` depends on.
|
|
23
|
+
|
|
18
24
|
## Import
|
|
19
25
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import { Calendar } from "@/components/Calendar";
|
|
23
30
|
```
|
|
24
31
|
|
|
25
32
|
## Quick Examples
|
|
@@ -27,7 +34,7 @@ import type { CalendarProps } from '@torch-ui/components'
|
|
|
27
34
|
### Basic Usage
|
|
28
35
|
|
|
29
36
|
```typescript
|
|
30
|
-
import { Calendar } from
|
|
37
|
+
import { Calendar } from "@/components/Calendar";
|
|
31
38
|
import { useState } from 'react'
|
|
32
39
|
|
|
33
40
|
function Example() {
|
|
@@ -46,7 +53,7 @@ function Example() {
|
|
|
46
53
|
### Range Selection
|
|
47
54
|
|
|
48
55
|
```typescript
|
|
49
|
-
import { Calendar } from
|
|
56
|
+
import { Calendar } from "@/components/Calendar";
|
|
50
57
|
import { useState } from 'react'
|
|
51
58
|
import { DateRange } from 'react-day-picker'
|
|
52
59
|
|
|
@@ -69,7 +76,7 @@ function RangePicker() {
|
|
|
69
76
|
### Multiple Date Selection
|
|
70
77
|
|
|
71
78
|
```typescript
|
|
72
|
-
import { Calendar } from
|
|
79
|
+
import { Calendar } from "@/components/Calendar";
|
|
73
80
|
import { useState } from 'react'
|
|
74
81
|
|
|
75
82
|
function MultiplePicker() {
|
|
@@ -89,7 +96,7 @@ function MultiplePicker() {
|
|
|
89
96
|
### With Week Numbers
|
|
90
97
|
|
|
91
98
|
```typescript
|
|
92
|
-
import { Calendar } from
|
|
99
|
+
import { Calendar } from "@/components/Calendar";
|
|
93
100
|
|
|
94
101
|
function WeekNumbers() {
|
|
95
102
|
return (
|
|
@@ -104,7 +111,7 @@ function WeekNumbers() {
|
|
|
104
111
|
### Date Restrictions
|
|
105
112
|
|
|
106
113
|
```typescript
|
|
107
|
-
import { Calendar } from
|
|
114
|
+
import { Calendar } from "@/components/Calendar";
|
|
108
115
|
|
|
109
116
|
function RestrictedCalendar() {
|
|
110
117
|
const today = new Date()
|
|
@@ -127,7 +134,7 @@ function RestrictedCalendar() {
|
|
|
127
134
|
### Custom Caption Layout
|
|
128
135
|
|
|
129
136
|
```typescript
|
|
130
|
-
import { Calendar } from
|
|
137
|
+
import { Calendar } from "@/components/Calendar";
|
|
131
138
|
|
|
132
139
|
function LabelOnly() {
|
|
133
140
|
return (
|
|
@@ -151,8 +158,8 @@ function DropdownMonthsOnly() {
|
|
|
151
158
|
### With Footer
|
|
152
159
|
|
|
153
160
|
```typescript
|
|
154
|
-
import { Calendar } from
|
|
155
|
-
import { Button } from
|
|
161
|
+
import { Calendar } from "@/components/Calendar";
|
|
162
|
+
import { Button } from "@/components/Button";
|
|
156
163
|
|
|
157
164
|
function CalendarWithFooter() {
|
|
158
165
|
const [selected, setSelected] = useState<Date>()
|
|
@@ -180,7 +187,7 @@ function CalendarWithFooter() {
|
|
|
180
187
|
### Multiple Months
|
|
181
188
|
|
|
182
189
|
```typescript
|
|
183
|
-
import { Calendar } from
|
|
190
|
+
import { Calendar } from "@/components/Calendar";
|
|
184
191
|
|
|
185
192
|
function MultipleMonths() {
|
|
186
193
|
return (
|
|
@@ -195,7 +202,7 @@ function MultipleMonths() {
|
|
|
195
202
|
### With Min/Max Date Range
|
|
196
203
|
|
|
197
204
|
```typescript
|
|
198
|
-
import { Calendar } from
|
|
205
|
+
import { Calendar } from "@/components/Calendar";
|
|
199
206
|
import { DateRange } from 'react-day-picker'
|
|
200
207
|
import { useState } from 'react'
|
|
201
208
|
|
|
@@ -217,7 +224,7 @@ function RangeWithLimits() {
|
|
|
217
224
|
### Custom Styling
|
|
218
225
|
|
|
219
226
|
```typescript
|
|
220
|
-
import { Calendar } from
|
|
227
|
+
import { Calendar } from "@/components/Calendar";
|
|
221
228
|
|
|
222
229
|
function StyledCalendar() {
|
|
223
230
|
return (
|
|
@@ -308,7 +315,7 @@ export const Calendar: React.FC<CalendarProps>
|
|
|
308
315
|
### Booking Calendar
|
|
309
316
|
|
|
310
317
|
```typescript
|
|
311
|
-
import { Calendar } from
|
|
318
|
+
import { Calendar } from "@/components/Calendar";
|
|
312
319
|
import { useState } from 'react'
|
|
313
320
|
import { DateRange } from 'react-day-picker'
|
|
314
321
|
|
|
@@ -346,7 +353,7 @@ function BookingCalendar() {
|
|
|
346
353
|
### Event Calendar
|
|
347
354
|
|
|
348
355
|
```typescript
|
|
349
|
-
import { Calendar } from
|
|
356
|
+
import { Calendar } from "@/components/Calendar";
|
|
350
357
|
|
|
351
358
|
function EventCalendar({ events }: { events: Event[] }) {
|
|
352
359
|
const eventDates = events.map(e => e.date)
|
|
@@ -371,7 +378,7 @@ function EventCalendar({ events }: { events: Event[] }) {
|
|
|
371
378
|
|
|
372
379
|
```typescript
|
|
373
380
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
374
|
-
import { Calendar } from
|
|
381
|
+
import { Calendar } from "@/components/Calendar";
|
|
375
382
|
|
|
376
383
|
describe('Calendar', () => {
|
|
377
384
|
it('renders current month', () => {
|
|
@@ -504,7 +511,7 @@ The Calendar component uses CSS variables and can be fully customized:
|
|
|
504
511
|
|
|
505
512
|
```diff
|
|
506
513
|
- import { DayPicker } from 'react-day-picker'
|
|
507
|
-
+ import { Calendar } from
|
|
514
|
+
+ import { Calendar } from "@/components/Calendar";
|
|
508
515
|
|
|
509
516
|
- <DayPicker
|
|
510
517
|
+ <Calendar
|
package/docs/components/card.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Card
|
|
3
|
-
version:
|
|
3
|
+
version: 2.4.0
|
|
4
4
|
status: stable
|
|
5
5
|
category: components/layout
|
|
6
6
|
tags: [container, layout, card, content, polymorphic]
|
|
@@ -16,19 +16,22 @@ dependencies:
|
|
|
16
16
|
|
|
17
17
|
## Installation
|
|
18
18
|
|
|
19
|
+
TORCH Glare is a copy-in library: the CLI copies this component's source into your project
|
|
20
|
+
(you do **not** install it from the npm package). Run `init` once, then `add`:
|
|
21
|
+
|
|
19
22
|
```bash
|
|
20
|
-
|
|
23
|
+
npx torch-glare@latest init
|
|
24
|
+
npx torch-glare@latest add Card
|
|
21
25
|
```
|
|
22
26
|
|
|
27
|
+
`add` also copies any components, hooks, and utilities that `Card` depends on.
|
|
28
|
+
|
|
23
29
|
## Import
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
CardDescription,
|
|
30
|
-
CardContent
|
|
31
|
-
} from 'torch-glare/lib/components/Card'
|
|
31
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { Card } from "@/components/Card";
|
|
32
35
|
```
|
|
33
36
|
|
|
34
37
|
## Quick Examples
|
|
@@ -36,7 +39,7 @@ import {
|
|
|
36
39
|
### Basic Usage
|
|
37
40
|
|
|
38
41
|
```typescript
|
|
39
|
-
import { Card, CardHeader, CardContent } from '
|
|
42
|
+
import { Card, CardHeader, CardContent } from '@/components/Card'
|
|
40
43
|
|
|
41
44
|
function Example() {
|
|
42
45
|
return (
|
|
@@ -139,8 +142,8 @@ function CardGrid() {
|
|
|
139
142
|
### Card with Form
|
|
140
143
|
|
|
141
144
|
```typescript
|
|
142
|
-
import { Input } from '
|
|
143
|
-
import { Button } from '
|
|
145
|
+
import { Input } from '@/components/Input'
|
|
146
|
+
import { Button } from '@/components/Button'
|
|
144
147
|
|
|
145
148
|
function LoginCard() {
|
|
146
149
|
return (
|
|
@@ -305,8 +308,8 @@ function StatsCard({ title, value, change, icon }) {
|
|
|
305
308
|
### Profile Card
|
|
306
309
|
|
|
307
310
|
```typescript
|
|
308
|
-
import { Avatar } from '
|
|
309
|
-
import { Badge } from '
|
|
311
|
+
import { Avatar } from '@/components/Avatar'
|
|
312
|
+
import { Badge } from '@/components/Badge'
|
|
310
313
|
|
|
311
314
|
function ProfileCard({ user }) {
|
|
312
315
|
return (
|
|
@@ -388,7 +391,7 @@ function ProductCard({ product }) {
|
|
|
388
391
|
|
|
389
392
|
```typescript
|
|
390
393
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
391
|
-
import { Card, CardHeader, CardContent } from '
|
|
394
|
+
import { Card, CardHeader, CardContent } from '@/components/Card'
|
|
392
395
|
|
|
393
396
|
describe('Card', () => {
|
|
394
397
|
it('renders card content', () => {
|
|
@@ -550,7 +553,7 @@ test('Card meets WCAG standards', async () => {
|
|
|
550
553
|
```diff
|
|
551
554
|
// Import path changed
|
|
552
555
|
- import Card from 'torch-glare/Card'
|
|
553
|
-
+ import { Card, CardHeader, CardContent } from '
|
|
556
|
+
+ import { Card, CardHeader, CardContent } from '@/components/Card'
|
|
554
557
|
|
|
555
558
|
// Structure changed to compound
|
|
556
559
|
- <Card title="Title" description="Description">
|