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,13 +11,22 @@ keywords: [password, strength, security, validation, indicator, level]
|
|
|
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 PasswordLevel
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`add` also copies any components, hooks, and utilities that `PasswordLevel` 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 { PasswordLevel } from "@/components/PasswordLevel";
|
|
21
30
|
```
|
|
22
31
|
|
|
23
32
|
## Quick Examples
|
|
@@ -25,8 +34,8 @@ import type { PasswordLevelProps } from '@torch-ui/components'
|
|
|
25
34
|
### Basic Usage
|
|
26
35
|
|
|
27
36
|
```typescript
|
|
28
|
-
import { PasswordLevel } from
|
|
29
|
-
import { InputField } from
|
|
37
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
38
|
+
import { InputField } from "@/components/InputField";
|
|
30
39
|
import { useState } from 'react'
|
|
31
40
|
|
|
32
41
|
function Example() {
|
|
@@ -49,8 +58,8 @@ function Example() {
|
|
|
49
58
|
### With Labels
|
|
50
59
|
|
|
51
60
|
```typescript
|
|
52
|
-
import { PasswordLevel } from
|
|
53
|
-
import { InputField } from
|
|
61
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
62
|
+
import { InputField } from "@/components/InputField";
|
|
54
63
|
import { useState } from 'react'
|
|
55
64
|
|
|
56
65
|
function WithLabels() {
|
|
@@ -96,8 +105,10 @@ function WithLabels() {
|
|
|
96
105
|
### Registration Form
|
|
97
106
|
|
|
98
107
|
```typescript
|
|
99
|
-
import { PasswordLevel } from
|
|
100
|
-
import {
|
|
108
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
109
|
+
import { Button } from "@/components/Button";
|
|
110
|
+
import { FieldHint } from "@/components/FieldHint";
|
|
111
|
+
import { InputField } from "@/components/InputField";
|
|
101
112
|
import { useState } from 'react'
|
|
102
113
|
|
|
103
114
|
function RegistrationForm() {
|
|
@@ -157,8 +168,8 @@ function RegistrationForm() {
|
|
|
157
168
|
### With Requirements Checklist
|
|
158
169
|
|
|
159
170
|
```typescript
|
|
160
|
-
import { PasswordLevel } from
|
|
161
|
-
import { InputField } from
|
|
171
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
172
|
+
import { InputField } from "@/components/InputField";
|
|
162
173
|
import { useState } from 'react'
|
|
163
174
|
|
|
164
175
|
function PasswordWithChecklist() {
|
|
@@ -217,8 +228,9 @@ function PasswordWithChecklist() {
|
|
|
217
228
|
### Password Change Form
|
|
218
229
|
|
|
219
230
|
```typescript
|
|
220
|
-
import { PasswordLevel } from
|
|
221
|
-
import {
|
|
231
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
232
|
+
import { Button } from "@/components/Button";
|
|
233
|
+
import { InputField } from "@/components/InputField";
|
|
222
234
|
import { useState } from 'react'
|
|
223
235
|
|
|
224
236
|
function PasswordChangeForm() {
|
|
@@ -269,8 +281,8 @@ function PasswordChangeForm() {
|
|
|
269
281
|
### Real-time Feedback
|
|
270
282
|
|
|
271
283
|
```typescript
|
|
272
|
-
import { PasswordLevel } from
|
|
273
|
-
import { InputField } from
|
|
284
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
285
|
+
import { InputField } from "@/components/InputField";
|
|
274
286
|
import { useState, useEffect } from 'react'
|
|
275
287
|
|
|
276
288
|
function RealTimeFeedback() {
|
|
@@ -327,7 +339,7 @@ function RealTimeFeedback() {
|
|
|
327
339
|
### Different Themes
|
|
328
340
|
|
|
329
341
|
```typescript
|
|
330
|
-
import { PasswordLevel } from
|
|
342
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
331
343
|
import { useState } from 'react'
|
|
332
344
|
|
|
333
345
|
function ThemeExample() {
|
|
@@ -360,7 +372,7 @@ function ThemeExample() {
|
|
|
360
372
|
### Custom Styling
|
|
361
373
|
|
|
362
374
|
```typescript
|
|
363
|
-
import { PasswordLevel } from
|
|
375
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
364
376
|
import { useState } from 'react'
|
|
365
377
|
|
|
366
378
|
function CustomStyling() {
|
|
@@ -387,8 +399,8 @@ function CustomStyling() {
|
|
|
387
399
|
### Animated Feedback
|
|
388
400
|
|
|
389
401
|
```typescript
|
|
390
|
-
import { PasswordLevel } from
|
|
391
|
-
import { InputField } from
|
|
402
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
403
|
+
import { InputField } from "@/components/InputField";
|
|
392
404
|
import { useState } from 'react'
|
|
393
405
|
|
|
394
406
|
function AnimatedFeedback() {
|
|
@@ -524,7 +536,7 @@ function isPasswordAcceptable(password: string, minLevel: number = 2): boolean {
|
|
|
524
536
|
### Validation Hook
|
|
525
537
|
|
|
526
538
|
```typescript
|
|
527
|
-
import { PasswordLevel } from
|
|
539
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
528
540
|
import { useState, useMemo } from 'react'
|
|
529
541
|
|
|
530
542
|
function usePasswordValidation(password: string) {
|
|
@@ -584,8 +596,9 @@ function ValidatedPasswordField() {
|
|
|
584
596
|
### Password Generator
|
|
585
597
|
|
|
586
598
|
```typescript
|
|
587
|
-
import { PasswordLevel } from
|
|
588
|
-
import {
|
|
599
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
600
|
+
import { Button } from "@/components/Button";
|
|
601
|
+
import { InputField } from "@/components/InputField";
|
|
589
602
|
import { useState } from 'react'
|
|
590
603
|
|
|
591
604
|
function PasswordGenerator() {
|
|
@@ -638,7 +651,7 @@ function PasswordGenerator() {
|
|
|
638
651
|
|
|
639
652
|
```typescript
|
|
640
653
|
import { render, screen } from '@testing-library/react'
|
|
641
|
-
import { PasswordLevel } from
|
|
654
|
+
import { PasswordLevel } from "@/components/PasswordLevel";
|
|
642
655
|
|
|
643
656
|
describe('PasswordLevel', () => {
|
|
644
657
|
it('renders three bars', () => {
|
|
@@ -11,19 +11,22 @@ keywords: [popover, overlay, dropdown, radix-ui, menu, non-modal]
|
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
13
13
|
|
|
14
|
+
TORCH Glare is a copy-in library: the CLI copies this component's source into your project
|
|
15
|
+
(you do **not** install it from the npm package). Run `init` once, then `add`:
|
|
16
|
+
|
|
14
17
|
```bash
|
|
15
|
-
|
|
18
|
+
npx torch-glare@latest init
|
|
19
|
+
npx torch-glare@latest add Popover
|
|
16
20
|
```
|
|
17
21
|
|
|
22
|
+
`add` also copies any components, hooks, and utilities that `Popover` depends on.
|
|
23
|
+
|
|
18
24
|
## Import
|
|
19
25
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
PopoverContent,
|
|
25
|
-
PopoverItem,
|
|
26
|
-
} 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 { Popover } from "@/components/Popover";
|
|
27
30
|
```
|
|
28
31
|
|
|
29
32
|
## Quick Examples
|
|
@@ -31,8 +34,8 @@ import {
|
|
|
31
34
|
### Basic Usage
|
|
32
35
|
|
|
33
36
|
```typescript
|
|
34
|
-
import { Popover, PopoverTrigger, PopoverContent } from
|
|
35
|
-
import { Button } from
|
|
37
|
+
import { Popover, PopoverTrigger, PopoverContent } from "@/components/Popover";
|
|
38
|
+
import { Button } from "@/components/Button";
|
|
36
39
|
|
|
37
40
|
function Example() {
|
|
38
41
|
return (
|
|
@@ -53,7 +56,7 @@ function Example() {
|
|
|
53
56
|
### With PopoverItem List
|
|
54
57
|
|
|
55
58
|
```typescript
|
|
56
|
-
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from
|
|
59
|
+
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from "@/components/Popover";
|
|
57
60
|
|
|
58
61
|
function SelectPopover() {
|
|
59
62
|
const items = ['Option 1', 'Option 2', 'Option 3']
|
|
@@ -81,7 +84,7 @@ function SelectPopover() {
|
|
|
81
84
|
### SystemStyle Variant
|
|
82
85
|
|
|
83
86
|
```typescript
|
|
84
|
-
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from
|
|
87
|
+
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from "@/components/Popover";
|
|
85
88
|
|
|
86
89
|
function SystemStylePopover() {
|
|
87
90
|
return (
|
|
@@ -102,7 +105,7 @@ function SystemStylePopover() {
|
|
|
102
105
|
### With Icons
|
|
103
106
|
|
|
104
107
|
```typescript
|
|
105
|
-
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from
|
|
108
|
+
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from "@/components/Popover";
|
|
106
109
|
|
|
107
110
|
function IconPopover() {
|
|
108
111
|
return (
|
|
@@ -132,7 +135,7 @@ function IconPopover() {
|
|
|
132
135
|
### With Active State
|
|
133
136
|
|
|
134
137
|
```typescript
|
|
135
|
-
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from
|
|
138
|
+
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from "@/components/Popover";
|
|
136
139
|
import { useState } from 'react'
|
|
137
140
|
|
|
138
141
|
function SelectablePopover() {
|
|
@@ -171,7 +174,7 @@ function SelectablePopover() {
|
|
|
171
174
|
### With Overlay Blur
|
|
172
175
|
|
|
173
176
|
```typescript
|
|
174
|
-
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from
|
|
177
|
+
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from "@/components/Popover";
|
|
175
178
|
|
|
176
179
|
function BlurredPopover() {
|
|
177
180
|
return (
|
|
@@ -191,7 +194,7 @@ function BlurredPopover() {
|
|
|
191
194
|
### Warning Items
|
|
192
195
|
|
|
193
196
|
```typescript
|
|
194
|
-
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from
|
|
197
|
+
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from "@/components/Popover";
|
|
195
198
|
|
|
196
199
|
function WarningPopover() {
|
|
197
200
|
return (
|
|
@@ -217,7 +220,7 @@ function WarningPopover() {
|
|
|
217
220
|
### Size Variants
|
|
218
221
|
|
|
219
222
|
```typescript
|
|
220
|
-
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from
|
|
223
|
+
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from "@/components/Popover";
|
|
221
224
|
|
|
222
225
|
function SizedPopover() {
|
|
223
226
|
return (
|
|
@@ -237,7 +240,7 @@ function SizedPopover() {
|
|
|
237
240
|
### Controlled Popover
|
|
238
241
|
|
|
239
242
|
```typescript
|
|
240
|
-
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from
|
|
243
|
+
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from "@/components/Popover";
|
|
241
244
|
import { useState } from 'react'
|
|
242
245
|
|
|
243
246
|
function ControlledPopover() {
|
|
@@ -265,7 +268,7 @@ function ControlledPopover() {
|
|
|
265
268
|
### Positioning
|
|
266
269
|
|
|
267
270
|
```typescript
|
|
268
|
-
import { Popover, PopoverTrigger, PopoverContent } from
|
|
271
|
+
import { Popover, PopoverTrigger, PopoverContent } from "@/components/Popover";
|
|
269
272
|
|
|
270
273
|
function PositionedPopover() {
|
|
271
274
|
return (
|
|
@@ -420,7 +423,7 @@ export const PopoverItem: <T extends React.ElementType = 'button'>(
|
|
|
420
423
|
### Select Pattern
|
|
421
424
|
|
|
422
425
|
```typescript
|
|
423
|
-
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from
|
|
426
|
+
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from "@/components/Popover";
|
|
424
427
|
import { useState } from 'react'
|
|
425
428
|
|
|
426
429
|
function SelectField() {
|
|
@@ -481,7 +484,7 @@ function ContextMenu({ onEdit, onDelete }) {
|
|
|
481
484
|
|
|
482
485
|
```typescript
|
|
483
486
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
484
|
-
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from
|
|
487
|
+
import { Popover, PopoverTrigger, PopoverContent, PopoverItem } from "@/components/Popover";
|
|
485
488
|
|
|
486
489
|
describe('Popover', () => {
|
|
487
490
|
it('opens on trigger click', () => {
|
|
@@ -590,8 +593,8 @@ describe('Popover', () => {
|
|
|
590
593
|
## Migration from DropdownMenu
|
|
591
594
|
|
|
592
595
|
```diff
|
|
593
|
-
- import { DropdownMenu } from
|
|
594
|
-
+ import { Popover } from
|
|
596
|
+
- import { DropdownMenu } from "@/components/DropdownMenu";
|
|
597
|
+
+ import { Popover } from "@/components/Popover";
|
|
595
598
|
|
|
596
599
|
- <DropdownMenu>
|
|
597
600
|
- <DropdownMenuTrigger>Open</DropdownMenuTrigger>
|
|
@@ -11,12 +11,22 @@ keywords: [profile-menu, user-menu, avatar-menu, account-menu, popover]
|
|
|
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 ProfileMenu
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`add` also copies any components, hooks, and utilities that `ProfileMenu` depends on.
|
|
15
23
|
|
|
16
24
|
## Import
|
|
17
25
|
|
|
18
|
-
|
|
19
|
-
|
|
26
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
20
30
|
```
|
|
21
31
|
|
|
22
32
|
## Quick Examples
|
|
@@ -24,7 +34,7 @@ import { ProfileMenu } from '@torch-ui/components'
|
|
|
24
34
|
### Basic Usage
|
|
25
35
|
|
|
26
36
|
```typescript
|
|
27
|
-
import { ProfileMenu } from
|
|
37
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
28
38
|
|
|
29
39
|
function Example() {
|
|
30
40
|
return (
|
|
@@ -39,8 +49,8 @@ function Example() {
|
|
|
39
49
|
### With Dropdown Content
|
|
40
50
|
|
|
41
51
|
```typescript
|
|
42
|
-
import { ProfileMenu } from
|
|
43
|
-
import { PopoverItem } from
|
|
52
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
53
|
+
import { PopoverItem } from "@/components/Popover";
|
|
44
54
|
|
|
45
55
|
function ProfileDropdown() {
|
|
46
56
|
return (
|
|
@@ -62,7 +72,7 @@ function ProfileDropdown() {
|
|
|
62
72
|
### Selected State
|
|
63
73
|
|
|
64
74
|
```typescript
|
|
65
|
-
import { ProfileMenu } from
|
|
75
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
66
76
|
import { useState } from 'react'
|
|
67
77
|
|
|
68
78
|
function SelectedProfile() {
|
|
@@ -81,8 +91,8 @@ function SelectedProfile() {
|
|
|
81
91
|
### With Overlay Blur
|
|
82
92
|
|
|
83
93
|
```typescript
|
|
84
|
-
import { ProfileMenu } from
|
|
85
|
-
import { PopoverItem } from
|
|
94
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
95
|
+
import { PopoverItem } from "@/components/Popover";
|
|
86
96
|
|
|
87
97
|
function BlurredProfileMenu() {
|
|
88
98
|
return (
|
|
@@ -105,8 +115,8 @@ function BlurredProfileMenu() {
|
|
|
105
115
|
### Complete User Menu
|
|
106
116
|
|
|
107
117
|
```typescript
|
|
108
|
-
import { ProfileMenu } from
|
|
109
|
-
import { PopoverItem } from
|
|
118
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
119
|
+
import { PopoverItem } from "@/components/Popover";
|
|
110
120
|
import { useRouter } from 'next/navigation'
|
|
111
121
|
|
|
112
122
|
function UserMenu({ user }: { user: User }) {
|
|
@@ -162,8 +172,8 @@ function UserMenu({ user }: { user: User }) {
|
|
|
162
172
|
### With Status Indicator
|
|
163
173
|
|
|
164
174
|
```typescript
|
|
165
|
-
import { ProfileMenu } from
|
|
166
|
-
import { PopoverItem } from
|
|
175
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
176
|
+
import { PopoverItem } from "@/components/Popover";
|
|
167
177
|
|
|
168
178
|
function OnlineProfileMenu() {
|
|
169
179
|
return (
|
|
@@ -190,8 +200,9 @@ function OnlineProfileMenu() {
|
|
|
190
200
|
### With Role Badge
|
|
191
201
|
|
|
192
202
|
```typescript
|
|
193
|
-
import { ProfileMenu } from
|
|
194
|
-
import {
|
|
203
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
204
|
+
import { Badge } from "@/components/Badge";
|
|
205
|
+
import { PopoverItem } from "@/components/Popover";
|
|
195
206
|
|
|
196
207
|
function AdminProfileMenu({ user }: { user: User }) {
|
|
197
208
|
return (
|
|
@@ -199,7 +210,7 @@ function AdminProfileMenu({ user }: { user: User }) {
|
|
|
199
210
|
label={
|
|
200
211
|
<div className="flex flex-col items-start">
|
|
201
212
|
<span>{user.name}</span>
|
|
202
|
-
<Badge
|
|
213
|
+
<Badge color="purple" size="XS" label={user.role} />
|
|
203
214
|
</div>
|
|
204
215
|
}
|
|
205
216
|
icon={user.avatar}
|
|
@@ -218,8 +229,8 @@ function AdminProfileMenu({ user }: { user: User }) {
|
|
|
218
229
|
### Dark Theme
|
|
219
230
|
|
|
220
231
|
```typescript
|
|
221
|
-
import { ProfileMenu } from
|
|
222
|
-
import { PopoverItem } from
|
|
232
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
233
|
+
import { PopoverItem } from "@/components/Popover";
|
|
223
234
|
|
|
224
235
|
function DarkProfileMenu() {
|
|
225
236
|
return (
|
|
@@ -241,8 +252,8 @@ function DarkProfileMenu() {
|
|
|
241
252
|
### Multiple Profile Switcher
|
|
242
253
|
|
|
243
254
|
```typescript
|
|
244
|
-
import { ProfileMenu } from
|
|
245
|
-
import { PopoverItem } from
|
|
255
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
256
|
+
import { PopoverItem } from "@/components/Popover";
|
|
246
257
|
import { useState } from 'react'
|
|
247
258
|
|
|
248
259
|
function ProfileSwitcher() {
|
|
@@ -290,8 +301,8 @@ function ProfileSwitcher() {
|
|
|
290
301
|
### With Custom Actions
|
|
291
302
|
|
|
292
303
|
```typescript
|
|
293
|
-
import { ProfileMenu } from
|
|
294
|
-
import { PopoverItem } from
|
|
304
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
305
|
+
import { PopoverItem } from "@/components/Popover";
|
|
295
306
|
|
|
296
307
|
function ActionsProfileMenu() {
|
|
297
308
|
return (
|
|
@@ -322,8 +333,8 @@ function ActionsProfileMenu() {
|
|
|
322
333
|
### With Keyboard Shortcuts
|
|
323
334
|
|
|
324
335
|
```typescript
|
|
325
|
-
import { ProfileMenu } from
|
|
326
|
-
import { PopoverItem } from
|
|
336
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
337
|
+
import { PopoverItem } from "@/components/Popover";
|
|
327
338
|
|
|
328
339
|
function ShortcutProfileMenu() {
|
|
329
340
|
return (
|
|
@@ -390,7 +401,7 @@ export const ProfileMenu: React.FC<ProfileMenuProps>
|
|
|
390
401
|
### Usage with TypeScript
|
|
391
402
|
|
|
392
403
|
```typescript
|
|
393
|
-
import { ProfileMenu } from
|
|
404
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
394
405
|
|
|
395
406
|
interface User {
|
|
396
407
|
name: string
|
|
@@ -514,8 +525,8 @@ function SidebarProfile({ user }: { user: User }) {
|
|
|
514
525
|
|
|
515
526
|
```typescript
|
|
516
527
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
517
|
-
import { ProfileMenu } from
|
|
518
|
-
import { PopoverItem } from
|
|
528
|
+
import { ProfileMenu } from "@/components/ProfileMenu";
|
|
529
|
+
import { PopoverItem } from "@/components/Popover";
|
|
519
530
|
|
|
520
531
|
describe('ProfileMenu', () => {
|
|
521
532
|
it('renders user name and avatar', () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: RadioCard
|
|
3
|
-
version:
|
|
3
|
+
version: 2.4.0
|
|
4
4
|
status: stable
|
|
5
5
|
category: components/forms
|
|
6
6
|
tags: [form, radio, card, selection, compound, accessible]
|
|
@@ -17,15 +17,22 @@ dependencies:
|
|
|
17
17
|
|
|
18
18
|
## Installation
|
|
19
19
|
|
|
20
|
+
TORCH Glare is a copy-in library: the CLI copies this component's source into your project
|
|
21
|
+
(you do **not** install it from the npm package). Run `init` once, then `add`:
|
|
22
|
+
|
|
20
23
|
```bash
|
|
21
|
-
|
|
24
|
+
npx torch-glare@latest init
|
|
25
|
+
npx torch-glare@latest add RadioCard
|
|
22
26
|
```
|
|
23
27
|
|
|
28
|
+
`add` also copies any components, hooks, and utilities that `RadioCard` depends on.
|
|
29
|
+
|
|
24
30
|
## Import
|
|
25
31
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { RadioCard } from "@/components/RadioCard";
|
|
29
36
|
```
|
|
30
37
|
|
|
31
38
|
## Quick Examples
|
|
@@ -33,8 +40,8 @@ import { RadioGroup } from 'torch-glare/lib/components/Radio'
|
|
|
33
40
|
### Basic Usage
|
|
34
41
|
|
|
35
42
|
```typescript
|
|
36
|
-
import { RadioCard } from '
|
|
37
|
-
import { RadioGroup } from '
|
|
43
|
+
import { RadioCard } from '@/components/RadioCard'
|
|
44
|
+
import { RadioGroup } from '@/components/Radio'
|
|
38
45
|
|
|
39
46
|
function Example() {
|
|
40
47
|
const [selected, setSelected] = useState('option1')
|
|
@@ -534,8 +541,8 @@ function DeploymentOptions() {
|
|
|
534
541
|
|
|
535
542
|
```typescript
|
|
536
543
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
537
|
-
import { RadioCard } from '
|
|
538
|
-
import { RadioGroup } from '
|
|
544
|
+
import { RadioCard } from '@/components/RadioCard'
|
|
545
|
+
import { RadioGroup } from '@/components/Radio'
|
|
539
546
|
|
|
540
547
|
describe('RadioCard', () => {
|
|
541
548
|
it('renders card with header and description', () => {
|
package/docs/components/radio.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Radio
|
|
3
|
-
version:
|
|
3
|
+
version: 2.4.0
|
|
4
4
|
status: stable
|
|
5
5
|
category: components/forms
|
|
6
6
|
tags: [form, radio, selection, radix-ui, accessible, group, controlled]
|
|
@@ -17,14 +17,22 @@ dependencies:
|
|
|
17
17
|
|
|
18
18
|
## Installation
|
|
19
19
|
|
|
20
|
+
TORCH Glare is a copy-in library: the CLI copies this component's source into your project
|
|
21
|
+
(you do **not** install it from the npm package). Run `init` once, then `add`:
|
|
22
|
+
|
|
20
23
|
```bash
|
|
21
|
-
|
|
24
|
+
npx torch-glare@latest init
|
|
25
|
+
npx torch-glare@latest add Radio
|
|
22
26
|
```
|
|
23
27
|
|
|
28
|
+
`add` also copies any components, hooks, and utilities that `Radio` depends on.
|
|
29
|
+
|
|
24
30
|
## Import
|
|
25
31
|
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { Radio } from "@/components/Radio";
|
|
28
36
|
```
|
|
29
37
|
|
|
30
38
|
## Quick Examples
|
|
@@ -32,7 +40,7 @@ import { Radio, RadioGroup } from 'torch-glare/lib/components/Radio'
|
|
|
32
40
|
### Basic Radio Group
|
|
33
41
|
|
|
34
42
|
```typescript
|
|
35
|
-
import { Radio, RadioGroup } from '
|
|
43
|
+
import { Radio, RadioGroup } from '@/components/Radio'
|
|
36
44
|
|
|
37
45
|
function Example() {
|
|
38
46
|
const [value, setValue] = useState('option1')
|
|
@@ -442,7 +450,7 @@ function ConditionalForm() {
|
|
|
442
450
|
|
|
443
451
|
```typescript
|
|
444
452
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
445
|
-
import { Radio, RadioGroup } from '
|
|
453
|
+
import { Radio, RadioGroup } from '@/components/Radio'
|
|
446
454
|
|
|
447
455
|
describe('Radio', () => {
|
|
448
456
|
it('handles selection changes', () => {
|
|
@@ -659,10 +667,10 @@ Radix UI automatically handles:
|
|
|
659
667
|
```diff
|
|
660
668
|
// Import path
|
|
661
669
|
- import Radio from 'torch-glare/Radio'
|
|
662
|
-
+ import { Radio, RadioGroup } from '
|
|
670
|
+
+ import { Radio, RadioGroup } from '@/components/Radio'
|
|
663
671
|
|
|
664
672
|
// Size prop values
|
|
665
|
-
- <Radio size="
|
|
673
|
+
- <Radio size="M" />
|
|
666
674
|
+ <Radio size="S" />
|
|
667
675
|
```
|
|
668
676
|
|
|
@@ -12,11 +12,15 @@ A customizable scrollable container component with styled scrollbars. Built on R
|
|
|
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 ScrollArea
|
|
17
21
|
```
|
|
18
22
|
|
|
19
|
-
|
|
23
|
+
`add` also copies any components, hooks, and utilities that `ScrollArea` depends on.
|
|
20
24
|
|
|
21
25
|
## Imports
|
|
22
26
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: SearchField
|
|
3
|
-
version:
|
|
3
|
+
version: 2.4.0
|
|
4
4
|
status: stable
|
|
5
5
|
category: components/forms
|
|
6
6
|
tags: [form, search, input, field, system-style, glassmorphism]
|
|
@@ -16,14 +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 SearchField
|
|
21
25
|
```
|
|
22
26
|
|
|
27
|
+
`add` also copies any components, hooks, and utilities that `SearchField` depends on.
|
|
28
|
+
|
|
23
29
|
## Import
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
Import from your project's local path — the alias configured in `glare.json` (e.g. `@/*`):
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { SearchField } from "@/components/SearchField";
|
|
27
35
|
```
|
|
28
36
|
|
|
29
37
|
## Quick Examples
|
|
@@ -31,7 +39,7 @@ import { SearchField } from 'torch-glare/lib/components/SearchField'
|
|
|
31
39
|
### Basic Usage
|
|
32
40
|
|
|
33
41
|
```typescript
|
|
34
|
-
import { SearchField } from '
|
|
42
|
+
import { SearchField } from '@/components/SearchField'
|
|
35
43
|
|
|
36
44
|
function Example() {
|
|
37
45
|
const [search, setSearch] = useState('')
|
|
@@ -471,7 +479,7 @@ function NavigationSearch() {
|
|
|
471
479
|
|
|
472
480
|
```typescript
|
|
473
481
|
import { render, screen, fireEvent } from '@testing-library/react'
|
|
474
|
-
import { SearchField } from '
|
|
482
|
+
import { SearchField } from '@/components/SearchField'
|
|
475
483
|
|
|
476
484
|
describe('SearchField', () => {
|
|
477
485
|
it('displays placeholder text when empty', () => {
|