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: [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" },
|
|
@@ -11,13 +11,22 @@ keywords: [label-field, form, input, label, required, field]
|
|
|
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 LabelField
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`add` also copies any components, hooks, and utilities that `LabelField` 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 { LabelField } from "@/components/LabelField";
|
|
21
30
|
```
|
|
22
31
|
|
|
23
32
|
## Quick Examples
|
|
@@ -25,7 +34,7 @@ import type { LabelFieldProps } from '@torch-ui/components'
|
|
|
25
34
|
### Basic Usage
|
|
26
35
|
|
|
27
36
|
```typescript
|
|
28
|
-
import { LabelField } from
|
|
37
|
+
import { LabelField } from "@/components/LabelField";
|
|
29
38
|
import { useState } from 'react'
|
|
30
39
|
|
|
31
40
|
function Example() {
|
|
@@ -45,7 +54,7 @@ function Example() {
|
|
|
45
54
|
### With Required Indicator
|
|
46
55
|
|
|
47
56
|
```typescript
|
|
48
|
-
import { LabelField } from
|
|
57
|
+
import { LabelField } from "@/components/LabelField";
|
|
49
58
|
|
|
50
59
|
function RequiredField() {
|
|
51
60
|
return (
|
|
@@ -61,7 +70,7 @@ function RequiredField() {
|
|
|
61
70
|
### With Secondary Label
|
|
62
71
|
|
|
63
72
|
```typescript
|
|
64
|
-
import { LabelField } from
|
|
73
|
+
import { LabelField } from "@/components/LabelField";
|
|
65
74
|
|
|
66
75
|
function WithSecondary() {
|
|
67
76
|
return (
|
|
@@ -77,7 +86,7 @@ function WithSecondary() {
|
|
|
77
86
|
### With Error Message
|
|
78
87
|
|
|
79
88
|
```typescript
|
|
80
|
-
import { LabelField } from
|
|
89
|
+
import { LabelField } from "@/components/LabelField";
|
|
81
90
|
import { useState } from 'react'
|
|
82
91
|
|
|
83
92
|
function WithValidation() {
|
|
@@ -108,7 +117,7 @@ function WithValidation() {
|
|
|
108
117
|
### With Icon
|
|
109
118
|
|
|
110
119
|
```typescript
|
|
111
|
-
import { LabelField } from
|
|
120
|
+
import { LabelField } from "@/components/LabelField";
|
|
112
121
|
|
|
113
122
|
function WithIcon() {
|
|
114
123
|
return (
|
|
@@ -124,8 +133,8 @@ function WithIcon() {
|
|
|
124
133
|
### With Action Button
|
|
125
134
|
|
|
126
135
|
```typescript
|
|
127
|
-
import { LabelField } from
|
|
128
|
-
import { ActionButton } from
|
|
136
|
+
import { LabelField } from "@/components/LabelField";
|
|
137
|
+
import { ActionButton } from "@/components/ActionButton";
|
|
129
138
|
import { useState } from 'react'
|
|
130
139
|
|
|
131
140
|
function WithActionButton() {
|
|
@@ -151,7 +160,7 @@ function WithActionButton() {
|
|
|
151
160
|
### Horizontal Layout
|
|
152
161
|
|
|
153
162
|
```typescript
|
|
154
|
-
import { LabelField } from
|
|
163
|
+
import { LabelField } from "@/components/LabelField";
|
|
155
164
|
|
|
156
165
|
function HorizontalLayout() {
|
|
157
166
|
return (
|
|
@@ -168,7 +177,7 @@ function HorizontalLayout() {
|
|
|
168
177
|
### Different Sizes
|
|
169
178
|
|
|
170
179
|
```typescript
|
|
171
|
-
import { LabelField } from
|
|
180
|
+
import { LabelField } from "@/components/LabelField";
|
|
172
181
|
|
|
173
182
|
function Sizes() {
|
|
174
183
|
return (
|
|
@@ -192,8 +201,9 @@ function Sizes() {
|
|
|
192
201
|
### Registration Form
|
|
193
202
|
|
|
194
203
|
```typescript
|
|
195
|
-
import { LabelField } from
|
|
196
|
-
import { Button
|
|
204
|
+
import { LabelField } from "@/components/LabelField";
|
|
205
|
+
import { Button } from "@/components/Button";
|
|
206
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
197
207
|
import { useState } from 'react'
|
|
198
208
|
|
|
199
209
|
function RegistrationForm() {
|
|
@@ -281,7 +291,7 @@ function RegistrationForm() {
|
|
|
281
291
|
### With Popover Dropdown
|
|
282
292
|
|
|
283
293
|
```typescript
|
|
284
|
-
import { LabelField } from
|
|
294
|
+
import { LabelField } from "@/components/LabelField";
|
|
285
295
|
import { useState } from 'react'
|
|
286
296
|
|
|
287
297
|
function WithPopover() {
|
|
@@ -314,8 +324,8 @@ function WithPopover() {
|
|
|
314
324
|
### Profile Settings Form
|
|
315
325
|
|
|
316
326
|
```typescript
|
|
317
|
-
import { LabelField } from
|
|
318
|
-
import { Button } from
|
|
327
|
+
import { LabelField } from "@/components/LabelField";
|
|
328
|
+
import { Button } from "@/components/Button";
|
|
319
329
|
import { useState } from 'react'
|
|
320
330
|
|
|
321
331
|
function ProfileSettings() {
|
|
@@ -426,7 +436,7 @@ export const LabelField: React.ForwardRefExoticComponent<
|
|
|
426
436
|
### Usage with Types
|
|
427
437
|
|
|
428
438
|
```typescript
|
|
429
|
-
import { LabelField } from
|
|
439
|
+
import { LabelField } from "@/components/LabelField";
|
|
430
440
|
import { useRef, useState } from 'react'
|
|
431
441
|
|
|
432
442
|
function TypedExample() {
|
|
@@ -455,7 +465,7 @@ function TypedExample() {
|
|
|
455
465
|
### Form Field Wrapper Hook
|
|
456
466
|
|
|
457
467
|
```typescript
|
|
458
|
-
import { LabelField } from
|
|
468
|
+
import { LabelField } from "@/components/LabelField";
|
|
459
469
|
import { useState, useCallback } from 'react'
|
|
460
470
|
|
|
461
471
|
function useFormField(initialValue: string = '') {
|
|
@@ -526,7 +536,7 @@ function FormWithHook() {
|
|
|
526
536
|
### Reusable Form Fields
|
|
527
537
|
|
|
528
538
|
```typescript
|
|
529
|
-
import { LabelField } from
|
|
539
|
+
import { LabelField } from "@/components/LabelField";
|
|
530
540
|
import { ComponentProps } from 'react'
|
|
531
541
|
|
|
532
542
|
type FieldConfig = Omit<ComponentProps<typeof LabelField>, 'value' | 'onChange'> & {
|
|
@@ -580,7 +590,7 @@ function DynamicForm() {
|
|
|
580
590
|
|
|
581
591
|
```typescript
|
|
582
592
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
583
|
-
import { LabelField } from
|
|
593
|
+
import { LabelField } from "@/components/LabelField";
|
|
584
594
|
import userEvent from '@testing-library/user-event'
|
|
585
595
|
|
|
586
596
|
describe('LabelField', () => {
|