torch-glare 2.4.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 +1 -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 +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 +198 -196
- 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 +131 -171
- 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 +1 -9
- 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 +8 -14
- 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 +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 +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 +8 -33
- 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-stepper.md +6 -0
- package/docs/components/form.md +17 -20
- package/docs/components/header-bar.md +6 -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 +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 +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 +6 -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
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Theme Reference
|
|
3
|
+
description: TORCH Glare theming — data-theme, theme modes, ThemeProvider, and useTheme.
|
|
4
|
+
group: reference
|
|
5
|
+
keywords: [theme, dark mode, data-theme, ThemeProvider, useTheme, tokens]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Theme Reference
|
|
9
|
+
|
|
10
|
+
TORCH Glare is themed through two `data-*` attributes on the document root and a small
|
|
11
|
+
React context. Every component also accepts a `theme` prop that sets `data-theme` locally.
|
|
12
|
+
|
|
13
|
+
## Attributes
|
|
14
|
+
|
|
15
|
+
| Attribute | Values | Meaning |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| `data-theme` | `"light" \| "dark" \| "default"` | The active color theme. |
|
|
18
|
+
| `data-theme-mode` | `"CSS" \| "TORCH"` | Token resolution mode (`TORCH` is the default). |
|
|
19
|
+
|
|
20
|
+
Per-component override:
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { Button } from "@/components/Button";
|
|
24
|
+
|
|
25
|
+
<Button theme="dark" variant="PrimeStyle">Dark button</Button>;
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## ThemeProvider
|
|
29
|
+
|
|
30
|
+
Add the provider once (`npx torch-glare@latest provider ThemeProvider`) and wrap your app.
|
|
31
|
+
It syncs `data-theme` / `data-theme-mode` to `document.documentElement` and persists the
|
|
32
|
+
choice to `localStorage`.
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { ThemeProvider } from "@/providers/ThemeProvider";
|
|
36
|
+
|
|
37
|
+
export function App({ children }: { children: React.ReactNode }) {
|
|
38
|
+
return (
|
|
39
|
+
<ThemeProvider defaultTheme="default" defaultThemeMode="TORCH">
|
|
40
|
+
{children}
|
|
41
|
+
</ThemeProvider>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Props
|
|
47
|
+
|
|
48
|
+
| Prop | Type | Default | Description |
|
|
49
|
+
| --- | --- | --- | --- |
|
|
50
|
+
| `defaultTheme` | `"light" \| "dark" \| "default"` | `"default"` | Initial theme (unless a stored/`data-theme` value exists). |
|
|
51
|
+
| `defaultThemeMode` | `"CSS" \| "TORCH"` | `"TORCH"` | Initial token mode. |
|
|
52
|
+
|
|
53
|
+
## useTheme
|
|
54
|
+
|
|
55
|
+
Read and update the theme from anywhere inside `ThemeProvider`:
|
|
56
|
+
|
|
57
|
+
```tsx
|
|
58
|
+
import { useTheme } from "@/providers/ThemeProvider";
|
|
59
|
+
|
|
60
|
+
export function ThemeToggle() {
|
|
61
|
+
const { theme, updateTheme, themeMode, updateMode } = useTheme();
|
|
62
|
+
|
|
63
|
+
return (
|
|
64
|
+
<button onClick={() => updateTheme(theme === "dark" ? "light" : "dark")}>
|
|
65
|
+
{theme} / {themeMode}
|
|
66
|
+
</button>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Returned value
|
|
72
|
+
|
|
73
|
+
| Field | Type | Description |
|
|
74
|
+
| --- | --- | --- |
|
|
75
|
+
| `theme` | `"light" \| "dark" \| "default"` | Current theme. |
|
|
76
|
+
| `themeMode` | `"CSS" \| "TORCH"` | Current token mode. |
|
|
77
|
+
| `updateTheme` | `(theme) => void` | Set the theme (updates DOM + `localStorage`). |
|
|
78
|
+
| `updateMode` | `(mode) => void` | Set the token mode. |
|
|
79
|
+
|
|
80
|
+
`useTheme` throws if used outside `ThemeProvider`.
|
|
81
|
+
|
|
82
|
+
## See also
|
|
83
|
+
|
|
84
|
+
- [Providers reference](./providers.md)
|
|
85
|
+
- [CLI reference](./cli.md)
|
package/docs/reference/types.md
CHANGED
|
@@ -37,7 +37,7 @@ export type Themes = "dark" | "light" | "default";
|
|
|
37
37
|
|
|
38
38
|
**Usage:**
|
|
39
39
|
```typescript
|
|
40
|
-
import type { Themes } from
|
|
40
|
+
import type { Themes } from "@/utils/types";
|
|
41
41
|
|
|
42
42
|
interface MyComponentProps {
|
|
43
43
|
theme?: Themes;
|
|
@@ -60,12 +60,12 @@ interface MyComponentProps {
|
|
|
60
60
|
```typescript
|
|
61
61
|
export type ButtonVariant =
|
|
62
62
|
| "PrimeStyle" // Primary action
|
|
63
|
-
| "
|
|
63
|
+
| "BluSecStyle" // Blue secondary
|
|
64
64
|
| "YelSecStyle" // Yellow secondary
|
|
65
65
|
| "RedSecStyle" // Red secondary
|
|
66
66
|
| "BorderStyle" // Outlined
|
|
67
67
|
| "PrimeContStyle" // Primary contrast
|
|
68
|
-
| "
|
|
68
|
+
| "BluContStyle" // Blue contrast
|
|
69
69
|
| "RedContStyle"; // Red contrast
|
|
70
70
|
```
|
|
71
71
|
|
|
@@ -878,7 +878,7 @@ Button.displayName = 'Button';
|
|
|
878
878
|
### Extending Button Props
|
|
879
879
|
|
|
880
880
|
```typescript
|
|
881
|
-
import type { ButtonProps } from
|
|
881
|
+
import type { ButtonProps } from "@/components/LoginButton";
|
|
882
882
|
|
|
883
883
|
interface CustomButtonProps extends ButtonProps {
|
|
884
884
|
isLoading?: boolean;
|
|
@@ -29,7 +29,7 @@ Utility function to merge and deduplicate Tailwind CSS classes.
|
|
|
29
29
|
|
|
30
30
|
**Import:**
|
|
31
31
|
```typescript
|
|
32
|
-
import { cn } from
|
|
32
|
+
import { cn } from "@/utils/cn";
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
**Signature:**
|
|
@@ -48,7 +48,7 @@ function cn(...inputs: ClassValue[]): string
|
|
|
48
48
|
#### Basic Usage
|
|
49
49
|
|
|
50
50
|
```typescript
|
|
51
|
-
import { cn } from
|
|
51
|
+
import { cn } from "@/utils/cn";
|
|
52
52
|
|
|
53
53
|
// Merge multiple classes
|
|
54
54
|
cn('px-4 py-2', 'bg-blue-500', 'text-white')
|
|
@@ -110,11 +110,11 @@ cn('hover:text-blue-500', 'hover:text-red-500')
|
|
|
110
110
|
```typescript
|
|
111
111
|
interface ButtonProps {
|
|
112
112
|
variant?: 'primary' | 'secondary';
|
|
113
|
-
size?: '
|
|
113
|
+
size?: 'S' | 'M' | 'L';
|
|
114
114
|
className?: string;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
function Button({ variant = 'primary', size = '
|
|
117
|
+
function Button({ variant = 'primary', size = 'M', className }: ButtonProps) {
|
|
118
118
|
return (
|
|
119
119
|
<button
|
|
120
120
|
className={cn(
|
|
@@ -129,9 +129,9 @@ function Button({ variant = 'primary', size = 'md', className }: ButtonProps) {
|
|
|
129
129
|
|
|
130
130
|
// Size classes
|
|
131
131
|
{
|
|
132
|
-
'px-2 py-1 text-sm': size === '
|
|
133
|
-
'px-4 py-2 text-base': size === '
|
|
134
|
-
'px-6 py-3 text-lg': size === '
|
|
132
|
+
'px-2 py-1 text-sm': size === 'S',
|
|
133
|
+
'px-4 py-2 text-base': size === 'M',
|
|
134
|
+
'px-6 py-3 text-lg': size === 'L',
|
|
135
135
|
},
|
|
136
136
|
|
|
137
137
|
// Custom classes (overrides defaults)
|
|
@@ -166,7 +166,7 @@ Applies time from a picker to a date object.
|
|
|
166
166
|
|
|
167
167
|
**Import:**
|
|
168
168
|
```typescript
|
|
169
|
-
import { applyTimeToDate } from
|
|
169
|
+
import { applyTimeToDate } from "@/utils/dateFormat";
|
|
170
170
|
```
|
|
171
171
|
|
|
172
172
|
**Signature:**
|
|
@@ -206,7 +206,7 @@ Validates if a value is a valid Date object.
|
|
|
206
206
|
|
|
207
207
|
**Import:**
|
|
208
208
|
```typescript
|
|
209
|
-
import { isValidDateObject } from
|
|
209
|
+
import { isValidDateObject } from "@/utils/dateFormat";
|
|
210
210
|
```
|
|
211
211
|
|
|
212
212
|
**Signature:**
|
|
@@ -223,7 +223,7 @@ function isValidDateObject(date: Date): boolean
|
|
|
223
223
|
**Examples:**
|
|
224
224
|
|
|
225
225
|
```typescript
|
|
226
|
-
import { isValidDateObject } from
|
|
226
|
+
import { isValidDateObject } from "@/utils/dateFormat";
|
|
227
227
|
|
|
228
228
|
isValidDateObject(new Date())
|
|
229
229
|
// Returns: true
|
|
@@ -246,7 +246,7 @@ Applies time to various date value types (single, array, or range).
|
|
|
246
246
|
|
|
247
247
|
**Import:**
|
|
248
248
|
```typescript
|
|
249
|
-
import { applyTimeToDateValue } from
|
|
249
|
+
import { applyTimeToDateValue } from "@/utils/dateFormat";
|
|
250
250
|
```
|
|
251
251
|
|
|
252
252
|
**Signature:**
|
|
@@ -310,7 +310,7 @@ Formats date values to strings with time applied.
|
|
|
310
310
|
|
|
311
311
|
**Import:**
|
|
312
312
|
```typescript
|
|
313
|
-
import { formatDateValueToString } from
|
|
313
|
+
import { formatDateValueToString } from "@/utils/dateFormat";
|
|
314
314
|
```
|
|
315
315
|
|
|
316
316
|
**Signature:**
|
|
@@ -398,7 +398,7 @@ Calculates new width based on mouse position with RTL support.
|
|
|
398
398
|
|
|
399
399
|
**Import:**
|
|
400
400
|
```typescript
|
|
401
|
-
import { calculateNewWidthFromMouse } from
|
|
401
|
+
import { calculateNewWidthFromMouse } from "@/utils/resize";
|
|
402
402
|
```
|
|
403
403
|
|
|
404
404
|
**Signature:**
|
|
@@ -422,7 +422,7 @@ function calculateNewWidthFromMouse(
|
|
|
422
422
|
|
|
423
423
|
```typescript
|
|
424
424
|
import { useRef, useState } from 'react';
|
|
425
|
-
import { calculateNewWidthFromMouse } from
|
|
425
|
+
import { calculateNewWidthFromMouse } from "@/utils/resize";
|
|
426
426
|
|
|
427
427
|
function ResizablePanel() {
|
|
428
428
|
const panelRef = useRef<HTMLDivElement>(null);
|
|
@@ -456,7 +456,7 @@ Calculates new width based on touch position with RTL support.
|
|
|
456
456
|
|
|
457
457
|
**Import:**
|
|
458
458
|
```typescript
|
|
459
|
-
import { calculateNewWidthFromTouch } from
|
|
459
|
+
import { calculateNewWidthFromTouch } from "@/utils/resize";
|
|
460
460
|
```
|
|
461
461
|
|
|
462
462
|
**Signature:**
|
|
@@ -480,7 +480,7 @@ function calculateNewWidthFromTouch(
|
|
|
480
480
|
|
|
481
481
|
```typescript
|
|
482
482
|
import { useRef, useState } from 'react';
|
|
483
|
-
import { calculateNewWidthFromTouch } from
|
|
483
|
+
import { calculateNewWidthFromTouch } from "@/utils/resize";
|
|
484
484
|
|
|
485
485
|
function TouchResizablePanel() {
|
|
486
486
|
const panelRef = useRef<HTMLDivElement>(null);
|
|
@@ -541,11 +541,7 @@ const time: TimePickerValue = {
|
|
|
541
541
|
#### Date Formatting with Time
|
|
542
542
|
|
|
543
543
|
```typescript
|
|
544
|
-
import {
|
|
545
|
-
applyTimeToDate,
|
|
546
|
-
formatDateValueToString,
|
|
547
|
-
isValidDateObject
|
|
548
|
-
} from '@torch-ai/torch-glare/utils';
|
|
544
|
+
import { applyTimeToDate, formatDateValueToString, isValidDateObject } from "@/utils/dateFormat";
|
|
549
545
|
|
|
550
546
|
function formatUserSelectedDate(
|
|
551
547
|
date: Date,
|
|
@@ -569,7 +565,7 @@ const formatted = formatUserSelectedDate(date, time, 'MM/dd/yyyy hh:mm a');
|
|
|
569
565
|
#### Class Name Merging with Variants
|
|
570
566
|
|
|
571
567
|
```typescript
|
|
572
|
-
import { cn } from
|
|
568
|
+
import { cn } from "@/utils/cn";
|
|
573
569
|
import { cva, type VariantProps } from 'class-variance-authority';
|
|
574
570
|
|
|
575
571
|
const buttonVariants = cva(
|
|
@@ -609,10 +605,7 @@ function Button({ variant, size, className }: ButtonProps) {
|
|
|
609
605
|
#### Resize with Constraints
|
|
610
606
|
|
|
611
607
|
```typescript
|
|
612
|
-
import {
|
|
613
|
-
calculateNewWidthFromMouse,
|
|
614
|
-
calculateNewWidthFromTouch
|
|
615
|
-
} from '@torch-ai/torch-glare/utils';
|
|
608
|
+
import { calculateNewWidthFromMouse, calculateNewWidthFromTouch } from "@/utils/resize";
|
|
616
609
|
|
|
617
610
|
function ConstrainedResize() {
|
|
618
611
|
const MIN_WIDTH = 200;
|
|
@@ -43,7 +43,7 @@ Let's start with a basic form structure:
|
|
|
43
43
|
'use client';
|
|
44
44
|
|
|
45
45
|
import { useState } from 'react';
|
|
46
|
-
import { Button } from
|
|
46
|
+
import { Button } from "@/components/Button";
|
|
47
47
|
|
|
48
48
|
export default function RegistrationForm() {
|
|
49
49
|
const [formData, setFormData] = useState({
|
|
@@ -84,7 +84,8 @@ export default function RegistrationForm() {
|
|
|
84
84
|
|
|
85
85
|
```tsx
|
|
86
86
|
import { useState } from 'react';
|
|
87
|
-
import {
|
|
87
|
+
import { Button } from "@/components/Button";
|
|
88
|
+
import { LabelField } from "@/components/LabelField";
|
|
88
89
|
|
|
89
90
|
export default function RegistrationForm() {
|
|
90
91
|
const [formData, setFormData] = useState({
|
|
@@ -164,7 +165,9 @@ Let's add comprehensive validation:
|
|
|
164
165
|
'use client';
|
|
165
166
|
|
|
166
167
|
import { useState, FormEvent } from 'react';
|
|
167
|
-
import {
|
|
168
|
+
import { Button } from "@/components/Button";
|
|
169
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
170
|
+
import { LabelField } from "@/components/LabelField";
|
|
168
171
|
|
|
169
172
|
interface FormErrors {
|
|
170
173
|
fullName?: string;
|
|
@@ -360,7 +363,9 @@ export default function RegistrationForm() {
|
|
|
360
363
|
Use the `PasswordLevel` component to show password strength:
|
|
361
364
|
|
|
362
365
|
```tsx
|
|
363
|
-
import {
|
|
366
|
+
import { Button } from "@/components/Button";
|
|
367
|
+
import { LabelField } from "@/components/LabelField";
|
|
368
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
364
369
|
|
|
365
370
|
// Inside your form component, add this after the password field:
|
|
366
371
|
|
|
@@ -393,7 +398,9 @@ import { LabelField, PasswordLevel, Button } from '@torch-ai/torch-glare';
|
|
|
393
398
|
Use `FieldHint` to provide helpful guidance:
|
|
394
399
|
|
|
395
400
|
```tsx
|
|
396
|
-
import {
|
|
401
|
+
import { Button } from "@/components/Button";
|
|
402
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
403
|
+
import { LabelField } from "@/components/LabelField";
|
|
397
404
|
|
|
398
405
|
<div>
|
|
399
406
|
<LabelField
|
|
@@ -468,7 +475,9 @@ const handleSubmit = async (e: FormEvent) => {
|
|
|
468
475
|
Use the `toast` function for success notifications:
|
|
469
476
|
|
|
470
477
|
```tsx
|
|
471
|
-
import {
|
|
478
|
+
import { Button } from "@/components/Button";
|
|
479
|
+
import { LabelField } from "@/components/LabelField";
|
|
480
|
+
import { toast } from "@/components/Toast";
|
|
472
481
|
|
|
473
482
|
const handleSubmit = async (e: FormEvent) => {
|
|
474
483
|
e.preventDefault();
|
|
@@ -513,13 +522,11 @@ Here's the complete, production-ready form:
|
|
|
513
522
|
'use client';
|
|
514
523
|
|
|
515
524
|
import { useState, FormEvent } from 'react';
|
|
516
|
-
import {
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
toast,
|
|
522
|
-
} from '@torch-ai/torch-glare';
|
|
525
|
+
import { Button } from "@/components/Button";
|
|
526
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
527
|
+
import { LabelField } from "@/components/LabelField";
|
|
528
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
529
|
+
import { toast } from "@/components/Toast";
|
|
523
530
|
|
|
524
531
|
interface FormErrors {
|
|
525
532
|
fullName?: string;
|
|
@@ -60,13 +60,11 @@ Composition is combining simple components to create more complex ones. Think of
|
|
|
60
60
|
```tsx
|
|
61
61
|
'use client';
|
|
62
62
|
|
|
63
|
-
import {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
toast,
|
|
69
|
-
} from '@torch-ai/torch-glare';
|
|
63
|
+
import { Button } from "@/components/Button";
|
|
64
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
65
|
+
import { LabelField } from "@/components/LabelField";
|
|
66
|
+
import { TextArea } from "@/components/TextArea";
|
|
67
|
+
import { toast } from "@/components/Toast";
|
|
70
68
|
import { useState } from 'react';
|
|
71
69
|
|
|
72
70
|
export default function ContactForm() {
|
|
@@ -136,7 +134,8 @@ export default function ContactForm() {
|
|
|
136
134
|
### Feature Card Component
|
|
137
135
|
|
|
138
136
|
```tsx
|
|
139
|
-
import {
|
|
137
|
+
import { Badge } from "@/components/Badge";
|
|
138
|
+
import { Button } from "@/components/Button";
|
|
140
139
|
|
|
141
140
|
interface FeatureCardProps {
|
|
142
141
|
title: string;
|
|
@@ -167,7 +166,7 @@ export default function FeatureCard({
|
|
|
167
166
|
{title}
|
|
168
167
|
</h3>
|
|
169
168
|
{badge && (
|
|
170
|
-
<Badge theme="light"
|
|
169
|
+
<Badge theme="light" color="gray">
|
|
171
170
|
{badge}
|
|
172
171
|
</Badge>
|
|
173
172
|
)}
|
|
@@ -227,14 +226,10 @@ export default function FeatureCard({
|
|
|
227
226
|
```tsx
|
|
228
227
|
'use client';
|
|
229
228
|
|
|
230
|
-
import {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
Popover,
|
|
235
|
-
PopoverTrigger,
|
|
236
|
-
PopoverContent,
|
|
237
|
-
} from '@torch-ai/torch-glare';
|
|
229
|
+
import { Avatar } from "@/components/Avatar";
|
|
230
|
+
import { Badge } from "@/components/Badge";
|
|
231
|
+
import { Button } from "@/components/Button";
|
|
232
|
+
import { Popover, PopoverTrigger, PopoverContent } from "@/components/Popover";
|
|
238
233
|
|
|
239
234
|
interface User {
|
|
240
235
|
id: string;
|
|
@@ -337,7 +332,7 @@ export default function UserList({ users, onEdit, onDelete }: UserListProps) {
|
|
|
337
332
|
<PopoverTrigger asChild>
|
|
338
333
|
<Button
|
|
339
334
|
theme="light"
|
|
340
|
-
variant="
|
|
335
|
+
variant="PrimeContStyle"
|
|
341
336
|
buttonType="icon"
|
|
342
337
|
size="S"
|
|
343
338
|
>
|
|
@@ -393,20 +388,13 @@ export default function UserList({ users, onEdit, onDelete }: UserListProps) {
|
|
|
393
388
|
'use client';
|
|
394
389
|
|
|
395
390
|
import { useState } from 'react';
|
|
396
|
-
import {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
LabelField,
|
|
404
|
-
TextArea,
|
|
405
|
-
Select,
|
|
406
|
-
SimpleOption,
|
|
407
|
-
Button,
|
|
408
|
-
toast,
|
|
409
|
-
} from '@torch-ai/torch-glare';
|
|
391
|
+
import { Button } from "@/components/Button";
|
|
392
|
+
import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/Dialog";
|
|
393
|
+
import { LabelField } from "@/components/LabelField";
|
|
394
|
+
import { Select } from "@/components/Select";
|
|
395
|
+
import { SimpleOption } from "@/components/SimpleOption";
|
|
396
|
+
import { TextArea } from "@/components/TextArea";
|
|
397
|
+
import { toast } from "@/components/Toast";
|
|
410
398
|
|
|
411
399
|
export default function CreateProjectModal() {
|
|
412
400
|
const [open, setOpen] = useState(false);
|
|
@@ -509,14 +497,12 @@ export default function CreateProjectModal() {
|
|
|
509
497
|
'use client';
|
|
510
498
|
|
|
511
499
|
import { useState } from 'react';
|
|
512
|
-
import {
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
Button,
|
|
519
|
-
} from '@torch-ai/torch-glare';
|
|
500
|
+
import { Badge } from "@/components/Badge";
|
|
501
|
+
import { Button } from "@/components/Button";
|
|
502
|
+
import { InputField } from "@/components/InputField";
|
|
503
|
+
import { Select } from "@/components/Select";
|
|
504
|
+
import { SimpleOption } from "@/components/SimpleOption";
|
|
505
|
+
import { Table } from "@/components/Table";
|
|
520
506
|
|
|
521
507
|
interface TableRow {
|
|
522
508
|
id: string;
|
|
@@ -630,7 +616,7 @@ export default function DataTableWithFilters() {
|
|
|
630
616
|
${row.revenue.toLocaleString()}
|
|
631
617
|
</td>
|
|
632
618
|
<td className="px-4 py-3 text-right">
|
|
633
|
-
<Button theme="light" variant="
|
|
619
|
+
<Button theme="light" variant="PrimeContStyle" size="S">
|
|
634
620
|
View
|
|
635
621
|
</Button>
|
|
636
622
|
</td>
|
|
@@ -661,12 +647,10 @@ export default function DataTableWithFilters() {
|
|
|
661
647
|
```tsx
|
|
662
648
|
'use client';
|
|
663
649
|
|
|
664
|
-
import {
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
useTheme,
|
|
669
|
-
} from '@torch-ai/torch-glare';
|
|
650
|
+
import { Avatar } from "@/components/Avatar";
|
|
651
|
+
import { Badge } from "@/components/Badge";
|
|
652
|
+
import { Button } from "@/components/Button";
|
|
653
|
+
import { useTheme } from "@/providers/ThemeProvider";
|
|
670
654
|
import { useState } from 'react';
|
|
671
655
|
|
|
672
656
|
export default function Dashboard() {
|
|
@@ -726,7 +710,7 @@ export default function Dashboard() {
|
|
|
726
710
|
<div className="flex items-center gap-4">
|
|
727
711
|
<Button
|
|
728
712
|
theme={theme as any}
|
|
729
|
-
variant="
|
|
713
|
+
variant="PrimeContStyle"
|
|
730
714
|
buttonType="icon"
|
|
731
715
|
onClick={() => setSidebarOpen(!sidebarOpen)}
|
|
732
716
|
>
|
|
@@ -740,7 +724,7 @@ export default function Dashboard() {
|
|
|
740
724
|
<div className="flex items-center gap-4">
|
|
741
725
|
<Button
|
|
742
726
|
theme={theme as any}
|
|
743
|
-
variant="
|
|
727
|
+
variant="PrimeContStyle"
|
|
744
728
|
buttonType="icon"
|
|
745
729
|
onClick={() => updateTheme(theme === 'light' ? 'dark' : 'light')}
|
|
746
730
|
>
|
|
@@ -780,7 +764,7 @@ export default function Dashboard() {
|
|
|
780
764
|
<p className="typography-display-small-bold text-content-presentation-global-primary mb-2">
|
|
781
765
|
{stat.value}
|
|
782
766
|
</p>
|
|
783
|
-
<Badge theme={theme as any}
|
|
767
|
+
<Badge theme={theme as any} color="green">
|
|
784
768
|
{stat.change}
|
|
785
769
|
</Badge>
|
|
786
770
|
</div>
|
|
@@ -202,8 +202,8 @@ export default function ButtonShowcase() {
|
|
|
202
202
|
return (
|
|
203
203
|
<div className="flex gap-2 flex-wrap">
|
|
204
204
|
<Button variant="PrimeStyle">Primary</Button>
|
|
205
|
-
<Button variant="
|
|
206
|
-
<Button variant="
|
|
205
|
+
<Button variant="PrimeContStyle">Contrast</Button>
|
|
206
|
+
<Button variant="BluSecStyle">Secondary</Button>
|
|
207
207
|
<Button variant="BorderStyle">Outline</Button>
|
|
208
208
|
</div>
|
|
209
209
|
);
|
|
@@ -56,7 +56,7 @@ First, ensure `ThemeProvider` wraps your application:
|
|
|
56
56
|
|
|
57
57
|
```tsx
|
|
58
58
|
// app/layout.tsx
|
|
59
|
-
import { ThemeProvider } from
|
|
59
|
+
import { ThemeProvider } from "@/providers/ThemeProvider";
|
|
60
60
|
|
|
61
61
|
export default function RootLayout({
|
|
62
62
|
children,
|
|
@@ -95,7 +95,8 @@ Let users switch between light and dark modes:
|
|
|
95
95
|
// components/ThemeToggle.tsx
|
|
96
96
|
'use client';
|
|
97
97
|
|
|
98
|
-
import {
|
|
98
|
+
import { Button } from "@/components/Button";
|
|
99
|
+
import { useTheme } from "@/providers/ThemeProvider";
|
|
99
100
|
|
|
100
101
|
export default function ThemeToggle() {
|
|
101
102
|
const { theme, updateTheme } = useTheme();
|
|
@@ -103,7 +104,7 @@ export default function ThemeToggle() {
|
|
|
103
104
|
return (
|
|
104
105
|
<Button
|
|
105
106
|
theme={theme as any}
|
|
106
|
-
variant="
|
|
107
|
+
variant="PrimeContStyle"
|
|
107
108
|
buttonType="icon"
|
|
108
109
|
onClick={() => updateTheme(theme === 'light' ? 'dark' : 'light')}
|
|
109
110
|
aria-label="Toggle theme"
|
|
@@ -119,7 +120,7 @@ export default function ThemeToggle() {
|
|
|
119
120
|
```tsx
|
|
120
121
|
'use client';
|
|
121
122
|
|
|
122
|
-
import { useTheme } from
|
|
123
|
+
import { useTheme } from "@/providers/ThemeProvider";
|
|
123
124
|
|
|
124
125
|
export default function ThemeSelector() {
|
|
125
126
|
const { theme, updateTheme } = useTheme();
|
|
@@ -219,7 +220,7 @@ export default function ThemedCard({
|
|
|
219
220
|
### Theme-Aware Button
|
|
220
221
|
|
|
221
222
|
```tsx
|
|
222
|
-
import { useTheme } from
|
|
223
|
+
import { useTheme } from "@/providers/ThemeProvider";
|
|
223
224
|
|
|
224
225
|
export default function CustomButton({
|
|
225
226
|
children,
|
|
@@ -406,7 +407,9 @@ Here's a complete example combining everything:
|
|
|
406
407
|
```tsx
|
|
407
408
|
'use client';
|
|
408
409
|
|
|
409
|
-
import {
|
|
410
|
+
import { Badge } from "@/components/Badge";
|
|
411
|
+
import { Button } from "@/components/Button";
|
|
412
|
+
import { useTheme } from "@/providers/ThemeProvider";
|
|
410
413
|
|
|
411
414
|
export default function ThemedDashboard() {
|
|
412
415
|
const { theme } = useTheme();
|
|
@@ -423,7 +426,7 @@ export default function ThemedDashboard() {
|
|
|
423
426
|
<h1 className="typography-display-medium-bold text-content-presentation-global-primary">
|
|
424
427
|
Dashboard
|
|
425
428
|
</h1>
|
|
426
|
-
<Badge theme={theme as any}
|
|
429
|
+
<Badge theme={theme as any} color="gray">
|
|
427
430
|
{theme} mode
|
|
428
431
|
</Badge>
|
|
429
432
|
</div>
|
|
@@ -503,7 +506,7 @@ export default function ThemedDashboard() {
|
|
|
503
506
|
<Button theme={theme as any} variant="PrimeStyle">
|
|
504
507
|
Create Project
|
|
505
508
|
</Button>
|
|
506
|
-
<Button theme={theme as any} variant="
|
|
509
|
+
<Button theme={theme as any} variant="PrimeContStyle">
|
|
507
510
|
View Reports
|
|
508
511
|
</Button>
|
|
509
512
|
<Button theme={theme as any} variant="BorderStyle">
|
|
@@ -686,7 +689,7 @@ Ensure theme toggle is keyboard accessible:
|
|
|
686
689
|
### Conditional Styling Based on Theme
|
|
687
690
|
|
|
688
691
|
```tsx
|
|
689
|
-
import { useTheme } from
|
|
692
|
+
import { useTheme } from "@/providers/ThemeProvider";
|
|
690
693
|
|
|
691
694
|
function ThemedComponent() {
|
|
692
695
|
const { theme } = useTheme();
|
|
@@ -707,7 +710,7 @@ function ThemedComponent() {
|
|
|
707
710
|
### Theme-Specific Images
|
|
708
711
|
|
|
709
712
|
```tsx
|
|
710
|
-
import { useTheme } from
|
|
713
|
+
import { useTheme } from "@/providers/ThemeProvider";
|
|
711
714
|
|
|
712
715
|
function Logo() {
|
|
713
716
|
const { theme } = useTheme();
|
package/package.json
CHANGED
|
@@ -1,8 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "torch-glare",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"description": "A copy-in React component library (TypeScript + Radix UI + Tailwind CSS). Its CLI copies component source directly into your project — you own the code.",
|
|
7
|
+
"homepage": "https://glare.torchcorp.com",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/torch-corp/torch-glare"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"react",
|
|
14
|
+
"components",
|
|
15
|
+
"ui",
|
|
16
|
+
"component-library",
|
|
17
|
+
"design-system",
|
|
18
|
+
"tailwindcss",
|
|
19
|
+
"radix-ui",
|
|
20
|
+
"typescript",
|
|
21
|
+
"copy-in",
|
|
22
|
+
"cli"
|
|
23
|
+
],
|
|
6
24
|
"files": [
|
|
7
25
|
"dist",
|
|
8
26
|
"apps/lib",
|
|
@@ -18,7 +36,17 @@
|
|
|
18
36
|
},
|
|
19
37
|
"scripts": {
|
|
20
38
|
"build": "tsc -b",
|
|
21
|
-
"
|
|
39
|
+
"registry": "node scripts/bin/generateRegistry/index.js",
|
|
40
|
+
"docs:fix": "node scripts/bin/fixDocs/index.js",
|
|
41
|
+
"check:ai-docs": "node scripts/bin/checkAiDocs/index.js",
|
|
42
|
+
"typecheck": "pnpm -C apps run typecheck",
|
|
43
|
+
"lint": "pnpm -C apps run lint:lib",
|
|
44
|
+
"format": "pnpm -C apps run format",
|
|
45
|
+
"format:check": "pnpm -C apps run format:check",
|
|
46
|
+
"test": "pnpm -C apps run test",
|
|
47
|
+
"mcp:build": "pnpm -C mcp install && pnpm -C mcp run build",
|
|
48
|
+
"prepare": "pnpm -C mcp install && pnpm -C mcp run build",
|
|
49
|
+
"deploy": "pnpm run registry && npx tsc --build --force && npm publish --access public"
|
|
22
50
|
},
|
|
23
51
|
"dependencies": {
|
|
24
52
|
"commander": "^13.1.0",
|
|
@@ -29,4 +57,4 @@
|
|
|
29
57
|
"@types/node": "^22.14.0",
|
|
30
58
|
"typescript": "^5.0.0"
|
|
31
59
|
}
|
|
32
|
-
}
|
|
60
|
+
}
|