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
|
@@ -11,13 +11,22 @@ keywords: [field-hint, alert, validation, message, form, feedback, inline]
|
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
13
13
|
|
|
14
|
-
|
|
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
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx torch-glare@latest init
|
|
19
|
+
npx torch-glare@latest add FieldHint
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`add` also copies any components, hooks, and utilities that `FieldHint` depends on.
|
|
15
23
|
|
|
16
24
|
## Import
|
|
17
25
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
21
30
|
```
|
|
22
31
|
|
|
23
32
|
## Quick Examples
|
|
@@ -25,7 +34,7 @@ import type { FieldHintProps } from '@torch-ui/components'
|
|
|
25
34
|
### Basic Usage
|
|
26
35
|
|
|
27
36
|
```typescript
|
|
28
|
-
import { FieldHint } from
|
|
37
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
29
38
|
|
|
30
39
|
function Example() {
|
|
31
40
|
return (
|
|
@@ -40,7 +49,7 @@ function Example() {
|
|
|
40
49
|
### All States
|
|
41
50
|
|
|
42
51
|
```typescript
|
|
43
|
-
import { FieldHint } from
|
|
52
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
44
53
|
|
|
45
54
|
function AllStates() {
|
|
46
55
|
return (
|
|
@@ -72,8 +81,8 @@ function AllStates() {
|
|
|
72
81
|
### With Form Field
|
|
73
82
|
|
|
74
83
|
```typescript
|
|
75
|
-
import { FieldHint } from
|
|
76
|
-
import { InputField } from
|
|
84
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
85
|
+
import { InputField } from "@/components/InputField";
|
|
77
86
|
import { useState } from 'react'
|
|
78
87
|
|
|
79
88
|
function WithFormField() {
|
|
@@ -115,7 +124,7 @@ function WithFormField() {
|
|
|
115
124
|
### Custom Icon
|
|
116
125
|
|
|
117
126
|
```typescript
|
|
118
|
-
import { FieldHint } from
|
|
127
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
119
128
|
|
|
120
129
|
function CustomIcon() {
|
|
121
130
|
return (
|
|
@@ -145,8 +154,9 @@ function CustomIcon() {
|
|
|
145
154
|
### Password Validation
|
|
146
155
|
|
|
147
156
|
```typescript
|
|
148
|
-
import { FieldHint } from
|
|
149
|
-
import { InputField
|
|
157
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
158
|
+
import { InputField } from "@/components/InputField";
|
|
159
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
150
160
|
import { useState } from 'react'
|
|
151
161
|
|
|
152
162
|
function PasswordValidation() {
|
|
@@ -199,8 +209,9 @@ function PasswordValidation() {
|
|
|
199
209
|
### Form Validation
|
|
200
210
|
|
|
201
211
|
```typescript
|
|
202
|
-
import { FieldHint } from
|
|
203
|
-
import {
|
|
212
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
213
|
+
import { Button } from "@/components/Button";
|
|
214
|
+
import { InputField } from "@/components/InputField";
|
|
204
215
|
import { useState } from 'react'
|
|
205
216
|
|
|
206
217
|
function FormValidation() {
|
|
@@ -289,8 +300,9 @@ function FormValidation() {
|
|
|
289
300
|
### API Response Feedback
|
|
290
301
|
|
|
291
302
|
```typescript
|
|
292
|
-
import { FieldHint } from
|
|
293
|
-
import {
|
|
303
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
304
|
+
import { Button } from "@/components/Button";
|
|
305
|
+
import { InputField } from "@/components/InputField";
|
|
294
306
|
import { useState } from 'react'
|
|
295
307
|
|
|
296
308
|
function APIFeedback() {
|
|
@@ -360,7 +372,7 @@ function APIFeedback() {
|
|
|
360
372
|
### File Upload Feedback
|
|
361
373
|
|
|
362
374
|
```typescript
|
|
363
|
-
import { FieldHint } from
|
|
375
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
364
376
|
import { useState } from 'react'
|
|
365
377
|
|
|
366
378
|
function FileUploadFeedback() {
|
|
@@ -429,7 +441,7 @@ function FileUploadFeedback() {
|
|
|
429
441
|
### Multi-line Message
|
|
430
442
|
|
|
431
443
|
```typescript
|
|
432
|
-
import { FieldHint } from
|
|
444
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
433
445
|
|
|
434
446
|
function MultilineMessage() {
|
|
435
447
|
return (
|
|
@@ -456,7 +468,7 @@ Please save your work before continuing.`}
|
|
|
456
468
|
### Dynamic Theme
|
|
457
469
|
|
|
458
470
|
```typescript
|
|
459
|
-
import { FieldHint } from
|
|
471
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
460
472
|
import { useState } from 'react'
|
|
461
473
|
|
|
462
474
|
function DynamicTheme() {
|
|
@@ -488,8 +500,8 @@ function DynamicTheme() {
|
|
|
488
500
|
### Conditional Rendering
|
|
489
501
|
|
|
490
502
|
```typescript
|
|
491
|
-
import { FieldHint } from
|
|
492
|
-
import { InputField } from
|
|
503
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
504
|
+
import { InputField } from "@/components/InputField";
|
|
493
505
|
import { useState } from 'react'
|
|
494
506
|
|
|
495
507
|
function ConditionalHints() {
|
|
@@ -579,7 +591,7 @@ export const FieldHint: React.FC<FieldHintProps>
|
|
|
579
591
|
### Usage with Types
|
|
580
592
|
|
|
581
593
|
```typescript
|
|
582
|
-
import { FieldHint } from
|
|
594
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
583
595
|
import { useState } from 'react'
|
|
584
596
|
|
|
585
597
|
type ValidationState = {
|
|
@@ -607,7 +619,7 @@ function TypedExample() {
|
|
|
607
619
|
### Validation Hook
|
|
608
620
|
|
|
609
621
|
```typescript
|
|
610
|
-
import { FieldHint } from
|
|
622
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
611
623
|
import { useState, useCallback } from 'react'
|
|
612
624
|
|
|
613
625
|
function useFieldValidation<T>(
|
|
@@ -665,8 +677,8 @@ function ValidatedField() {
|
|
|
665
677
|
### Form Field Wrapper
|
|
666
678
|
|
|
667
679
|
```typescript
|
|
668
|
-
import { FieldHint } from
|
|
669
|
-
import { InputField } from
|
|
680
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
681
|
+
import { InputField } from "@/components/InputField";
|
|
670
682
|
import { ReactNode } from 'react'
|
|
671
683
|
|
|
672
684
|
interface FieldWrapperProps {
|
|
@@ -711,7 +723,7 @@ function FieldWrapper({
|
|
|
711
723
|
|
|
712
724
|
```typescript
|
|
713
725
|
import { render, screen } from '@testing-library/react'
|
|
714
|
-
import { FieldHint } from
|
|
726
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
715
727
|
|
|
716
728
|
describe('FieldHint', () => {
|
|
717
729
|
it('renders label text', () => {
|
|
@@ -12,10 +12,16 @@ A structured form section component that provides consistent layout for form fie
|
|
|
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 FieldSection
|
|
17
21
|
```
|
|
18
22
|
|
|
23
|
+
`add` also copies any components, hooks, and utilities that `FieldSection` depends on.
|
|
24
|
+
|
|
19
25
|
## Imports
|
|
20
26
|
|
|
21
27
|
```typescript
|
|
@@ -346,7 +352,7 @@ export function ProfileSettingsForm() {
|
|
|
346
352
|
>
|
|
347
353
|
<div className="w-full flex items-center gap-4">
|
|
348
354
|
<Avatar size="L" src="/default-avatar.jpg" />
|
|
349
|
-
<Button variant="
|
|
355
|
+
<Button variant="BluSecStyle" size="M">
|
|
350
356
|
Upload New Photo
|
|
351
357
|
</Button>
|
|
352
358
|
</div>
|
|
@@ -490,7 +496,7 @@ export function AccountSettings() {
|
|
|
490
496
|
}
|
|
491
497
|
>
|
|
492
498
|
<div className="w-full space-y-2">
|
|
493
|
-
<Button variant="
|
|
499
|
+
<Button variant="RedSecStyle" size="M">
|
|
494
500
|
Delete Account
|
|
495
501
|
</Button>
|
|
496
502
|
</div>
|
|
@@ -14,10 +14,16 @@ The component is composed of `FormStepper`, `FormStep`, `FormStepIndicator`, and
|
|
|
14
14
|
|
|
15
15
|
## Installation
|
|
16
16
|
|
|
17
|
+
TORCH Glare is a copy-in library: the CLI copies this component's source into your project
|
|
18
|
+
(you do **not** install it from the npm package). Run `init` once, then `add`:
|
|
19
|
+
|
|
17
20
|
```bash
|
|
21
|
+
npx torch-glare@latest init
|
|
18
22
|
npx torch-glare@latest add FormStepper
|
|
19
23
|
```
|
|
20
24
|
|
|
25
|
+
`add` also copies any components, hooks, and utilities that `FormStepper` depends on.
|
|
26
|
+
|
|
21
27
|
## Imports
|
|
22
28
|
|
|
23
29
|
```typescript
|
package/docs/components/form.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Form
|
|
3
|
-
version:
|
|
3
|
+
version: 2.4.0
|
|
4
4
|
status: stable
|
|
5
5
|
category: components/forms
|
|
6
6
|
tags: [form, validation, react-hook-form, accessible, compound]
|
|
@@ -18,25 +18,22 @@ dependencies:
|
|
|
18
18
|
|
|
19
19
|
## Installation
|
|
20
20
|
|
|
21
|
+
TORCH Glare is a copy-in library: the CLI copies this component's source into your project
|
|
22
|
+
(you do **not** install it from the npm package). Run `init` once, then `add`:
|
|
23
|
+
|
|
21
24
|
```bash
|
|
22
|
-
|
|
25
|
+
npx torch-glare@latest init
|
|
26
|
+
npx torch-glare@latest add Form
|
|
23
27
|
```
|
|
24
28
|
|
|
29
|
+
`add` also copies any components, hooks, and utilities that `Form` depends on.
|
|
30
|
+
|
|
25
31
|
## Import
|
|
26
32
|
|
|
27
|
-
|
|
28
|
-
import {
|
|
29
|
-
Form,
|
|
30
|
-
FormField,
|
|
31
|
-
FormItem,
|
|
32
|
-
FormLabel,
|
|
33
|
-
FormControl,
|
|
34
|
-
FormDescription,
|
|
35
|
-
FormMessage
|
|
36
|
-
} from 'torch-glare/lib/components/Form'
|
|
33
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
37
34
|
|
|
38
|
-
|
|
39
|
-
import {
|
|
35
|
+
```tsx
|
|
36
|
+
import { Form } from "@/components/Form";
|
|
40
37
|
```
|
|
41
38
|
|
|
42
39
|
## Quick Examples
|
|
@@ -52,9 +49,9 @@ import {
|
|
|
52
49
|
FormLabel,
|
|
53
50
|
FormControl,
|
|
54
51
|
FormMessage
|
|
55
|
-
} from '
|
|
56
|
-
import { Input } from '
|
|
57
|
-
import { Button } from '
|
|
52
|
+
} from '@/components/Form'
|
|
53
|
+
import { Input } from '@/components/Input'
|
|
54
|
+
import { Button } from '@/components/Button'
|
|
58
55
|
|
|
59
56
|
function BasicForm() {
|
|
60
57
|
const form = useForm({
|
|
@@ -213,9 +210,9 @@ function ValidatedForm() {
|
|
|
213
210
|
### With Multiple Field Types
|
|
214
211
|
|
|
215
212
|
```typescript
|
|
216
|
-
import { Select, SelectTrigger, SelectContent, SelectItem, SelectValue } from '
|
|
217
|
-
import { Checkbox } from '
|
|
218
|
-
import { RadioGroup, RadioGroupItem } from '
|
|
213
|
+
import { Select, SelectTrigger, SelectContent, SelectItem, SelectValue } from '@/components/Select'
|
|
214
|
+
import { Checkbox } from '@/components/Checkbox'
|
|
215
|
+
import { RadioGroup, RadioGroupItem } from '@/components/Radio'
|
|
219
216
|
|
|
220
217
|
function MultiFieldForm() {
|
|
221
218
|
const form = useForm({
|
|
@@ -12,10 +12,16 @@ A presentational header chip used at the top of a form, page, or drawer to commu
|
|
|
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
|
|
19
|
+
npx torch-glare@latest init
|
|
16
20
|
npx torch-glare@latest add HeaderBar
|
|
17
21
|
```
|
|
18
22
|
|
|
23
|
+
`add` also copies any components, hooks, and utilities that `HeaderBar` depends on.
|
|
24
|
+
|
|
19
25
|
## Imports
|
|
20
26
|
|
|
21
27
|
```typescript
|
|
@@ -11,16 +11,22 @@ keywords: [image-attachment, file-upload, drag-drop, preview, modal, expandable]
|
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
13
13
|
|
|
14
|
-
|
|
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
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx torch-glare@latest init
|
|
19
|
+
npx torch-glare@latest add ImageAttachment
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`add` also copies any components, hooks, and utilities that `ImageAttachment` depends on.
|
|
15
23
|
|
|
16
24
|
## Import
|
|
17
25
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
AttachmentImagePreview
|
|
23
|
-
} 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 { ImageAttachment } from "@/components/ImageAttachment";
|
|
24
30
|
```
|
|
25
31
|
|
|
26
32
|
## Component Overview
|
|
@@ -36,7 +42,7 @@ The ImageAttachment suite consists of three components:
|
|
|
36
42
|
### Basic File Upload
|
|
37
43
|
|
|
38
44
|
```typescript
|
|
39
|
-
import { ImageAttachment } from
|
|
45
|
+
import { ImageAttachment } from "@/components/ImageAttachment";
|
|
40
46
|
import { useState } from 'react'
|
|
41
47
|
|
|
42
48
|
function Example() {
|
|
@@ -64,7 +70,7 @@ function Example() {
|
|
|
64
70
|
### With Preview
|
|
65
71
|
|
|
66
72
|
```typescript
|
|
67
|
-
import { ImageAttachment, ExpandableImage } from
|
|
73
|
+
import { ImageAttachment, ExpandableImage } from "@/components/ImageAttachment";
|
|
68
74
|
import { useState } from 'react'
|
|
69
75
|
|
|
70
76
|
function WithPreview() {
|
|
@@ -106,12 +112,8 @@ function WithPreview() {
|
|
|
106
112
|
### Complete Upload Flow
|
|
107
113
|
|
|
108
114
|
```typescript
|
|
109
|
-
import {
|
|
110
|
-
|
|
111
|
-
ExpandableImage,
|
|
112
|
-
AttachmentImagePreview
|
|
113
|
-
} from '@torch-ui/components'
|
|
114
|
-
import { Button } from '@torch-ui/components'
|
|
115
|
+
import { ImageAttachment, ExpandableImage, AttachmentImagePreview } from "@/components/ImageAttachment";
|
|
116
|
+
import { Button } from "@/components/Button";
|
|
115
117
|
import { useState } from 'react'
|
|
116
118
|
|
|
117
119
|
function CompleteFlow() {
|
|
@@ -160,7 +162,7 @@ function CompleteFlow() {
|
|
|
160
162
|
header={file?.name || 'Image Preview'}
|
|
161
163
|
>
|
|
162
164
|
<Button onClick={handleUpload}>Upload</Button>
|
|
163
|
-
<Button variant="
|
|
165
|
+
<Button variant="BluSecStyle" onClick={handleRemove}>
|
|
164
166
|
Remove
|
|
165
167
|
</Button>
|
|
166
168
|
</AttachmentImagePreview>
|
|
@@ -174,7 +176,7 @@ function CompleteFlow() {
|
|
|
174
176
|
### With Drag and Drop (React Dropzone)
|
|
175
177
|
|
|
176
178
|
```typescript
|
|
177
|
-
import { ImageAttachment, ExpandableImage } from
|
|
179
|
+
import { ImageAttachment, ExpandableImage } from "@/components/ImageAttachment";
|
|
178
180
|
import { useDropzone } from 'react-dropzone'
|
|
179
181
|
import { useState } from 'react'
|
|
180
182
|
|
|
@@ -221,7 +223,7 @@ function WithDropzone() {
|
|
|
221
223
|
### Multiple File Upload
|
|
222
224
|
|
|
223
225
|
```typescript
|
|
224
|
-
import { ImageAttachment, ExpandableImage } from
|
|
226
|
+
import { ImageAttachment, ExpandableImage } from "@/components/ImageAttachment";
|
|
225
227
|
import { useState } from 'react'
|
|
226
228
|
|
|
227
229
|
function MultipleFiles() {
|
|
@@ -267,8 +269,9 @@ function MultipleFiles() {
|
|
|
267
269
|
### With Validation
|
|
268
270
|
|
|
269
271
|
```typescript
|
|
270
|
-
import { ImageAttachment } from
|
|
271
|
-
import { FieldHint
|
|
272
|
+
import { ImageAttachment } from "@/components/ImageAttachment";
|
|
273
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
274
|
+
import { toast } from "@/components/Toast";
|
|
272
275
|
import { useState } from 'react'
|
|
273
276
|
|
|
274
277
|
function WithValidation() {
|
|
@@ -327,12 +330,9 @@ function WithValidation() {
|
|
|
327
330
|
### Profile Picture Upload
|
|
328
331
|
|
|
329
332
|
```typescript
|
|
330
|
-
import {
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
AttachmentImagePreview
|
|
334
|
-
} from '@torch-ui/components'
|
|
335
|
-
import { Avatar, Button } from '@torch-ui/components'
|
|
333
|
+
import { ImageAttachment, ExpandableImage, AttachmentImagePreview } from "@/components/ImageAttachment";
|
|
334
|
+
import { Avatar } from "@/components/Avatar";
|
|
335
|
+
import { Button } from "@/components/Button";
|
|
336
336
|
import { useState } from 'react'
|
|
337
337
|
|
|
338
338
|
function ProfilePictureUpload() {
|
|
@@ -400,8 +400,8 @@ function ProfilePictureUpload() {
|
|
|
400
400
|
### Gallery Upload
|
|
401
401
|
|
|
402
402
|
```typescript
|
|
403
|
-
import { ImageAttachment, ExpandableImage } from
|
|
404
|
-
import { Button } from
|
|
403
|
+
import { ImageAttachment, ExpandableImage } from "@/components/ImageAttachment";
|
|
404
|
+
import { Button } from "@/components/Button";
|
|
405
405
|
import { useState } from 'react'
|
|
406
406
|
|
|
407
407
|
function GalleryUpload() {
|
|
@@ -448,7 +448,7 @@ function GalleryUpload() {
|
|
|
448
448
|
<Button
|
|
449
449
|
size="S"
|
|
450
450
|
buttonType="icon"
|
|
451
|
-
variant="
|
|
451
|
+
variant="BluSecStyle"
|
|
452
452
|
className="absolute top-1 right-1 opacity-0 group-hover:opacity-100"
|
|
453
453
|
onClick={() => handleRemove(image.id)}
|
|
454
454
|
>
|
|
@@ -545,11 +545,7 @@ export const AttachmentImagePreview: React.FC<AttachmentImagePreviewProps>
|
|
|
545
545
|
### Usage with Types
|
|
546
546
|
|
|
547
547
|
```typescript
|
|
548
|
-
import {
|
|
549
|
-
ImageAttachment,
|
|
550
|
-
ExpandableImage,
|
|
551
|
-
AttachmentImagePreview
|
|
552
|
-
} from '@torch-ui/components'
|
|
548
|
+
import { ImageAttachment, ExpandableImage, AttachmentImagePreview } from "@/components/ImageAttachment";
|
|
553
549
|
import { useRef, useState } from 'react'
|
|
554
550
|
|
|
555
551
|
function TypedExample() {
|
|
@@ -585,7 +581,7 @@ function TypedExample() {
|
|
|
585
581
|
### Upload with Progress
|
|
586
582
|
|
|
587
583
|
```typescript
|
|
588
|
-
import { ImageAttachment } from
|
|
584
|
+
import { ImageAttachment } from "@/components/ImageAttachment";
|
|
589
585
|
import { useState } from 'react'
|
|
590
586
|
|
|
591
587
|
function UploadWithProgress() {
|
|
@@ -638,7 +634,7 @@ function UploadWithProgress() {
|
|
|
638
634
|
### Image Cropper Integration
|
|
639
635
|
|
|
640
636
|
```typescript
|
|
641
|
-
import { ImageAttachment, ExpandableImage } from
|
|
637
|
+
import { ImageAttachment, ExpandableImage } from "@/components/ImageAttachment";
|
|
642
638
|
import { useState } from 'react'
|
|
643
639
|
import Cropper from 'react-easy-crop'
|
|
644
640
|
|
|
@@ -688,11 +684,7 @@ function ImageCropper() {
|
|
|
688
684
|
|
|
689
685
|
```typescript
|
|
690
686
|
import { render, screen, fireEvent, waitFor } from '@testing-library/react'
|
|
691
|
-
import {
|
|
692
|
-
ImageAttachment,
|
|
693
|
-
ExpandableImage,
|
|
694
|
-
AttachmentImagePreview
|
|
695
|
-
} from '@torch-ui/components'
|
|
687
|
+
import { ImageAttachment, ExpandableImage, AttachmentImagePreview } from "@/components/ImageAttachment";
|
|
696
688
|
|
|
697
689
|
describe('ImageAttachment', () => {
|
|
698
690
|
it('renders labels', () => {
|
|
@@ -11,13 +11,22 @@ keywords: [data-views, inbox-view, inbox, list, master-detail, read, starred, pr
|
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
13
13
|
|
|
14
|
-
|
|
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
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx torch-glare@latest init
|
|
19
|
+
npx torch-glare@latest add InboxView
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`add` also copies any components, hooks, and utilities that `InboxView` depends on.
|
|
15
23
|
|
|
16
24
|
## Import
|
|
17
25
|
|
|
26
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
27
|
+
|
|
18
28
|
```tsx
|
|
19
|
-
import { InboxView
|
|
20
|
-
import type { InboxViewProps, InboxConfig, FieldConfig } from "torch-glare"
|
|
29
|
+
import { InboxView } from "@/components/InboxView";
|
|
21
30
|
```
|
|
22
31
|
|
|
23
32
|
## When to use it directly
|
|
@@ -42,8 +51,10 @@ Override any of them with `inboxConfig`.
|
|
|
42
51
|
## Composable Mode example
|
|
43
52
|
|
|
44
53
|
```tsx
|
|
45
|
-
import { InboxView
|
|
46
|
-
import
|
|
54
|
+
import { InboxView } from "@/components/InboxView";
|
|
55
|
+
import { useDataViewsState } from "@/hooks/useDataViewsState";
|
|
56
|
+
import type { FieldConfig } from "@/components/FieldConfig";
|
|
57
|
+
import type { InboxConfig } from "@/components/InboxConfig";
|
|
47
58
|
|
|
48
59
|
const messages = [
|
|
49
60
|
{ id: 1, subject: "Welcome", from: { name: "Ada" }, isRead: false, isStarred: true, sentAt: "2024-06-01" },
|