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
|
@@ -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" },
|
|
@@ -11,13 +11,22 @@ keywords: [inner-label, floating-label, input, animated, material-design]
|
|
|
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 InnerLabelField
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`add` also copies any components, hooks, and utilities that `InnerLabelField` 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 { InnerLabelField } from "@/components/InnerLabelField";
|
|
21
30
|
```
|
|
22
31
|
|
|
23
32
|
## Quick Examples
|
|
@@ -25,7 +34,7 @@ import type { InnerLabelFieldProps } from '@torch-ui/components'
|
|
|
25
34
|
### Basic Usage
|
|
26
35
|
|
|
27
36
|
```typescript
|
|
28
|
-
import { InnerLabelField } from
|
|
37
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
29
38
|
import { useState } from 'react'
|
|
30
39
|
|
|
31
40
|
function Example() {
|
|
@@ -44,7 +53,7 @@ function Example() {
|
|
|
44
53
|
### With Required Indicator
|
|
45
54
|
|
|
46
55
|
```typescript
|
|
47
|
-
import { InnerLabelField } from
|
|
56
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
48
57
|
|
|
49
58
|
function RequiredField() {
|
|
50
59
|
return (
|
|
@@ -59,7 +68,7 @@ function RequiredField() {
|
|
|
59
68
|
### Different Input Types
|
|
60
69
|
|
|
61
70
|
```typescript
|
|
62
|
-
import { InnerLabelField } from
|
|
71
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
63
72
|
import { useState } from 'react'
|
|
64
73
|
|
|
65
74
|
function InputTypes() {
|
|
@@ -92,7 +101,7 @@ function InputTypes() {
|
|
|
92
101
|
### With Error Message
|
|
93
102
|
|
|
94
103
|
```typescript
|
|
95
|
-
import { InnerLabelField } from
|
|
104
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
96
105
|
import { useState } from 'react'
|
|
97
106
|
|
|
98
107
|
function WithValidation() {
|
|
@@ -123,8 +132,8 @@ function WithValidation() {
|
|
|
123
132
|
### With Action Button
|
|
124
133
|
|
|
125
134
|
```typescript
|
|
126
|
-
import { InnerLabelField } from
|
|
127
|
-
import { ActionButton } from
|
|
135
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
136
|
+
import { ActionButton } from "@/components/ActionButton";
|
|
128
137
|
import { useState } from 'react'
|
|
129
138
|
|
|
130
139
|
function WithActionButton() {
|
|
@@ -150,8 +159,9 @@ function WithActionButton() {
|
|
|
150
159
|
### Login Form
|
|
151
160
|
|
|
152
161
|
```typescript
|
|
153
|
-
import { InnerLabelField } from
|
|
154
|
-
import { Button
|
|
162
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
163
|
+
import { Button } from "@/components/Button";
|
|
164
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
155
165
|
import { useState } from 'react'
|
|
156
166
|
|
|
157
167
|
function LoginForm() {
|
|
@@ -224,8 +234,8 @@ function LoginForm() {
|
|
|
224
234
|
### Contact Form
|
|
225
235
|
|
|
226
236
|
```typescript
|
|
227
|
-
import { InnerLabelField } from
|
|
228
|
-
import { Button } from
|
|
237
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
238
|
+
import { Button } from "@/components/Button";
|
|
229
239
|
import { useState } from 'react'
|
|
230
240
|
|
|
231
241
|
function ContactForm() {
|
|
@@ -278,7 +288,7 @@ function ContactForm() {
|
|
|
278
288
|
### Different Sizes
|
|
279
289
|
|
|
280
290
|
```typescript
|
|
281
|
-
import { InnerLabelField } from
|
|
291
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
282
292
|
|
|
283
293
|
function Sizes() {
|
|
284
294
|
return (
|
|
@@ -300,7 +310,7 @@ function Sizes() {
|
|
|
300
310
|
### Style Variants
|
|
301
311
|
|
|
302
312
|
```typescript
|
|
303
|
-
import { InnerLabelField } from
|
|
313
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
304
314
|
|
|
305
315
|
function Variants() {
|
|
306
316
|
return (
|
|
@@ -325,7 +335,7 @@ function Variants() {
|
|
|
325
335
|
### With Popover Autocomplete
|
|
326
336
|
|
|
327
337
|
```typescript
|
|
328
|
-
import { InnerLabelField } from
|
|
338
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
329
339
|
import { useState } from 'react'
|
|
330
340
|
|
|
331
341
|
function AutocompleteField() {
|
|
@@ -370,7 +380,7 @@ function AutocompleteField() {
|
|
|
370
380
|
### Disabled State
|
|
371
381
|
|
|
372
382
|
```typescript
|
|
373
|
-
import { InnerLabelField } from
|
|
383
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
374
384
|
|
|
375
385
|
function DisabledField() {
|
|
376
386
|
return (
|
|
@@ -448,7 +458,7 @@ export const InnerLabelField: React.ForwardRefExoticComponent<
|
|
|
448
458
|
### Usage with Types
|
|
449
459
|
|
|
450
460
|
```typescript
|
|
451
|
-
import { InnerLabelField } from
|
|
461
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
452
462
|
import { useRef, useState } from 'react'
|
|
453
463
|
|
|
454
464
|
function TypedExample() {
|
|
@@ -478,8 +488,8 @@ function TypedExample() {
|
|
|
478
488
|
### Controlled Form with Validation
|
|
479
489
|
|
|
480
490
|
```typescript
|
|
481
|
-
import { InnerLabelField } from
|
|
482
|
-
import { Button } from
|
|
491
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
492
|
+
import { Button } from "@/components/Button";
|
|
483
493
|
import { useState } from 'react'
|
|
484
494
|
|
|
485
495
|
function ValidatedForm() {
|
|
@@ -567,8 +577,8 @@ function ValidatedForm() {
|
|
|
567
577
|
### Real-time Search
|
|
568
578
|
|
|
569
579
|
```typescript
|
|
570
|
-
import { InnerLabelField } from
|
|
571
|
-
import { ActionButton } from
|
|
580
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
581
|
+
import { ActionButton } from "@/components/ActionButton";
|
|
572
582
|
import { useState, useEffect } from 'react'
|
|
573
583
|
|
|
574
584
|
function SearchField() {
|
|
@@ -629,7 +639,7 @@ function SearchField() {
|
|
|
629
639
|
|
|
630
640
|
```typescript
|
|
631
641
|
import { render, screen, fireEvent, waitFor } from '@testing-library/react'
|
|
632
|
-
import { InnerLabelField } from
|
|
642
|
+
import { InnerLabelField } from "@/components/InnerLabelField";
|
|
633
643
|
import userEvent from '@testing-library/user-event'
|
|
634
644
|
|
|
635
645
|
describe('InnerLabelField', () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: InputField
|
|
3
|
-
version:
|
|
3
|
+
version: 2.4.0
|
|
4
4
|
status: stable
|
|
5
5
|
category: components/forms
|
|
6
6
|
tags: [form, input, field, popover, tooltip, compound, accessible]
|
|
@@ -19,14 +19,22 @@ dependencies:
|
|
|
19
19
|
|
|
20
20
|
## Installation
|
|
21
21
|
|
|
22
|
+
TORCH Glare is a copy-in library: the CLI copies this component's source into your project
|
|
23
|
+
(you do **not** install it from the npm package). Run `init` once, then `add`:
|
|
24
|
+
|
|
22
25
|
```bash
|
|
23
|
-
|
|
26
|
+
npx torch-glare@latest init
|
|
27
|
+
npx torch-glare@latest add InputField
|
|
24
28
|
```
|
|
25
29
|
|
|
30
|
+
`add` also copies any components, hooks, and utilities that `InputField` depends on.
|
|
31
|
+
|
|
26
32
|
## Import
|
|
27
33
|
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
import { InputField } from "@/components/InputField";
|
|
30
38
|
```
|
|
31
39
|
|
|
32
40
|
## Quick Examples
|
|
@@ -34,7 +42,7 @@ import { InputField } from 'torch-glare/lib/components/InputField'
|
|
|
34
42
|
### Basic Usage
|
|
35
43
|
|
|
36
44
|
```typescript
|
|
37
|
-
import { InputField } from '
|
|
45
|
+
import { InputField } from '@/components/InputField'
|
|
38
46
|
|
|
39
47
|
function Example() {
|
|
40
48
|
const [value, setValue] = useState('')
|
|
@@ -133,7 +141,7 @@ function AutocompleteField() {
|
|
|
133
141
|
### With Trailing Actions
|
|
134
142
|
|
|
135
143
|
```typescript
|
|
136
|
-
import { Button } from '
|
|
144
|
+
import { Button } from '@/components/Button'
|
|
137
145
|
|
|
138
146
|
function PasswordField() {
|
|
139
147
|
const [showPassword, setShowPassword] = useState(false)
|
|
@@ -324,7 +332,7 @@ function EmailField() {
|
|
|
324
332
|
### Date Input with Calendar
|
|
325
333
|
|
|
326
334
|
```typescript
|
|
327
|
-
import { Calendar } from '
|
|
335
|
+
import { Calendar } from '@/components/Calendar'
|
|
328
336
|
|
|
329
337
|
function DateField() {
|
|
330
338
|
const [date, setDate] = useState('')
|
|
@@ -362,7 +370,7 @@ function DateField() {
|
|
|
362
370
|
|
|
363
371
|
```typescript
|
|
364
372
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
365
|
-
import { InputField } from '
|
|
373
|
+
import { InputField } from '@/components/InputField'
|
|
366
374
|
|
|
367
375
|
describe('InputField', () => {
|
|
368
376
|
it('displays error message in tooltip', () => {
|
|
@@ -541,8 +549,8 @@ Wrap each labeled field in `flex flex-col gap-1.5` (not `space-y-1.5`) so labels
|
|
|
541
549
|
|
|
542
550
|
```diff
|
|
543
551
|
// Migrating from Input to InputField
|
|
544
|
-
- import { Input } from '
|
|
545
|
-
+ import { InputField } from '
|
|
552
|
+
- import { Input } from '@/components/Input'
|
|
553
|
+
+ import { InputField } from '@/components/InputField'
|
|
546
554
|
|
|
547
555
|
- <Input.Group error={!!error}>
|
|
548
556
|
- <Input.Icon>{icon}</Input.Icon>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: InputOTP
|
|
3
|
-
version:
|
|
3
|
+
version: 2.4.0
|
|
4
4
|
status: stable
|
|
5
5
|
category: components/forms
|
|
6
6
|
tags: [form, otp, input, verification, authentication, accessible]
|
|
@@ -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 InputOTP
|
|
21
25
|
```
|
|
22
26
|
|
|
27
|
+
`add` also copies any components, hooks, and utilities that `InputOTP` depends on.
|
|
28
|
+
|
|
23
29
|
## Import
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
InputOTPSlot,
|
|
30
|
-
InputOTPSeparator
|
|
31
|
-
} from 'torch-glare/lib/components/InputOTP'
|
|
31
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { InputOTP } from "@/components/InputOTP";
|
|
32
35
|
```
|
|
33
36
|
|
|
34
37
|
## Quick Examples
|
|
@@ -36,7 +39,7 @@ import {
|
|
|
36
39
|
### Basic 6-Digit OTP
|
|
37
40
|
|
|
38
41
|
```typescript
|
|
39
|
-
import { InputOTP, InputOTPGroup, InputOTPSlot } from '
|
|
42
|
+
import { InputOTP, InputOTPGroup, InputOTPSlot } from '@/components/InputOTP'
|
|
40
43
|
|
|
41
44
|
function Example() {
|
|
42
45
|
const [otp, setOtp] = useState('')
|
|
@@ -508,7 +511,7 @@ function MultiStepVerification() {
|
|
|
508
511
|
|
|
509
512
|
```typescript
|
|
510
513
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
511
|
-
import { InputOTP, InputOTPGroup, InputOTPSlot } from '
|
|
514
|
+
import { InputOTP, InputOTPGroup, InputOTPSlot } from '@/components/InputOTP'
|
|
512
515
|
|
|
513
516
|
describe('InputOTP', () => {
|
|
514
517
|
it('handles input correctly', () => {
|
package/docs/components/input.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Input
|
|
3
|
-
version:
|
|
3
|
+
version: 2.4.0
|
|
4
4
|
status: stable
|
|
5
5
|
category: components/forms
|
|
6
6
|
tags: [form, input, text, field, accessible, compound]
|
|
@@ -16,16 +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 Input
|
|
21
25
|
```
|
|
22
26
|
|
|
27
|
+
`add` also copies any components, hooks, and utilities that `Input` depends on.
|
|
28
|
+
|
|
23
29
|
## Import
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
import {
|
|
31
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { Input } from "@/components/Input";
|
|
29
35
|
```
|
|
30
36
|
|
|
31
37
|
## Quick Examples
|
|
@@ -33,7 +39,7 @@ import { Group, Icon, Trilling } from 'torch-glare/lib/components/Input'
|
|
|
33
39
|
### Basic Usage
|
|
34
40
|
|
|
35
41
|
```typescript
|
|
36
|
-
import { Input } from '
|
|
42
|
+
import { Input } from '@/components/Input'
|
|
37
43
|
|
|
38
44
|
function Example() {
|
|
39
45
|
const [value, setValue] = useState('')
|
|
@@ -53,7 +59,7 @@ function Example() {
|
|
|
53
59
|
### With Icon
|
|
54
60
|
|
|
55
61
|
```typescript
|
|
56
|
-
import { Input } from '
|
|
62
|
+
import { Input } from '@/components/Input'
|
|
57
63
|
import { SearchIcon } from '@heroicons/react/24/outline'
|
|
58
64
|
|
|
59
65
|
function SearchInput() {
|
|
@@ -71,15 +77,15 @@ function SearchInput() {
|
|
|
71
77
|
### With Trailing Element
|
|
72
78
|
|
|
73
79
|
```typescript
|
|
74
|
-
import { Input } from '
|
|
75
|
-
import { Button } from '
|
|
80
|
+
import { Input } from '@/components/Input'
|
|
81
|
+
import { Button } from '@/components/Button'
|
|
76
82
|
|
|
77
83
|
function InputWithButton() {
|
|
78
84
|
return (
|
|
79
85
|
<Input.Group>
|
|
80
86
|
<Input placeholder="Enter email..." />
|
|
81
87
|
<Input.Trilling>
|
|
82
|
-
<Button size="
|
|
88
|
+
<Button size="S" variant="PrimeStyle">
|
|
83
89
|
Subscribe
|
|
84
90
|
</Button>
|
|
85
91
|
</Input.Trilling>
|
|
@@ -251,8 +257,8 @@ export const Input: React.ForwardRefExoticComponent<InputProps> & {
|
|
|
251
257
|
### Form Field with Label
|
|
252
258
|
|
|
253
259
|
```typescript
|
|
254
|
-
import { Input } from '
|
|
255
|
-
import { Label } from '
|
|
260
|
+
import { Input } from '@/components/Input'
|
|
261
|
+
import { Label } from '@/components/Label'
|
|
256
262
|
|
|
257
263
|
function FormField() {
|
|
258
264
|
const [value, setValue] = useState('')
|
|
@@ -278,7 +284,7 @@ function FormField() {
|
|
|
278
284
|
### Search Field
|
|
279
285
|
|
|
280
286
|
```typescript
|
|
281
|
-
import { Input } from '
|
|
287
|
+
import { Input } from '@/components/Input'
|
|
282
288
|
import { SearchIcon, XMarkIcon } from '@heroicons/react/24/outline'
|
|
283
289
|
|
|
284
290
|
function SearchField() {
|
|
@@ -391,7 +397,7 @@ function CurrencyInput() {
|
|
|
391
397
|
|
|
392
398
|
```typescript
|
|
393
399
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
394
|
-
import { Input } from '
|
|
400
|
+
import { Input } from '@/components/Input'
|
|
395
401
|
|
|
396
402
|
describe('Input', () => {
|
|
397
403
|
it('handles user input', () => {
|
|
@@ -547,7 +553,7 @@ test('Input meets WCAG standards', async () => {
|
|
|
547
553
|
```diff
|
|
548
554
|
// Import path changed
|
|
549
555
|
- import Input from 'torch-glare/Input'
|
|
550
|
-
+ import { Input } from '
|
|
556
|
+
+ import { Input } from '@/components/Input'
|
|
551
557
|
|
|
552
558
|
// Compound component structure
|
|
553
559
|
- <Input icon={<SearchIcon />} />
|
|
@@ -11,13 +11,22 @@ keywords: [data-views, kanban-view, kanban, board, columns, group-by, cards, com
|
|
|
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 KanbanView
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`add` also copies any components, hooks, and utilities that `KanbanView` 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 { KanbanView
|
|
20
|
-
import type { KanbanViewProps, FieldConfig } from "torch-glare"
|
|
29
|
+
import { KanbanView } from "@/components/KanbanView";
|
|
21
30
|
```
|
|
22
31
|
|
|
23
32
|
## When to use it directly
|
|
@@ -34,8 +43,9 @@ column. Column colors are assigned deterministically, or per-value via the
|
|
|
34
43
|
field's `kanbanVariants`.
|
|
35
44
|
|
|
36
45
|
```tsx
|
|
37
|
-
import { KanbanView
|
|
38
|
-
import
|
|
46
|
+
import { KanbanView } from "@/components/KanbanView";
|
|
47
|
+
import { useDataViewsState } from "@/hooks/useDataViewsState";
|
|
48
|
+
import type { FieldConfig } from "@/components/FieldConfig";
|
|
39
49
|
|
|
40
50
|
const tasks = [
|
|
41
51
|
{ id: 1, title: "Spec API", status: "Todo", assignee: "Ada" },
|