torch-glare 2.5.6 → 2.6.0
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 +4 -3
- package/dist/bin/index.js +9 -24
- package/dist/bin/index.js.map +1 -1
- package/dist/src/commands/add.d.ts +2 -2
- package/dist/src/commands/add.d.ts.map +1 -1
- package/dist/src/commands/add.js +4 -70
- package/dist/src/commands/add.js.map +1 -1
- package/dist/src/commands/hook.d.ts +5 -4
- package/dist/src/commands/hook.d.ts.map +1 -1
- package/dist/src/commands/hook.js +7 -75
- package/dist/src/commands/hook.js.map +1 -1
- package/dist/src/commands/init.js +1 -1
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/layout.d.ts +5 -4
- package/dist/src/commands/layout.d.ts.map +1 -1
- package/dist/src/commands/layout.js +7 -75
- package/dist/src/commands/layout.js.map +1 -1
- package/dist/src/commands/provider.d.ts +5 -4
- package/dist/src/commands/provider.d.ts.map +1 -1
- package/dist/src/commands/provider.js +7 -75
- package/dist/src/commands/provider.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +78 -43
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/utils.d.ts +5 -4
- package/dist/src/commands/utils.d.ts.map +1 -1
- package/dist/src/commands/utils.js +7 -80
- package/dist/src/commands/utils.js.map +1 -1
- package/dist/src/shared/addFromRegistry.d.ts +16 -0
- package/dist/src/shared/addFromRegistry.d.ts.map +1 -0
- package/dist/src/shared/addFromRegistry.js +88 -0
- package/dist/src/shared/addFromRegistry.js.map +1 -0
- package/dist/src/shared/getInstallCommand.d.ts.map +1 -1
- package/dist/src/shared/getInstallCommand.js +5 -0
- package/dist/src/shared/getInstallCommand.js.map +1 -1
- package/dist/src/shared/installDependencies.d.ts +0 -10
- package/dist/src/shared/installDependencies.d.ts.map +1 -1
- package/dist/src/shared/installDependencies.js +0 -17
- package/dist/src/shared/installDependencies.js.map +1 -1
- package/dist/src/shared/installFromPlan.d.ts +7 -5
- package/dist/src/shared/installFromPlan.d.ts.map +1 -1
- package/dist/src/shared/installFromPlan.js +103 -36
- package/dist/src/shared/installFromPlan.js.map +1 -1
- package/dist/src/shared/loadRegistry.d.ts +12 -3
- package/dist/src/shared/loadRegistry.d.ts.map +1 -1
- package/dist/src/shared/loadRegistry.js +19 -20
- package/dist/src/shared/loadRegistry.js.map +1 -1
- package/dist/src/shared/registryClient.d.ts +19 -0
- package/dist/src/shared/registryClient.d.ts.map +1 -0
- package/dist/src/shared/registryClient.js +128 -0
- package/dist/src/shared/registryClient.js.map +1 -0
- package/dist/src/shared/resolveEntry.d.ts +10 -7
- package/dist/src/shared/resolveEntry.d.ts.map +1 -1
- package/dist/src/shared/resolveEntry.js +18 -13
- package/dist/src/shared/resolveEntry.js.map +1 -1
- package/dist/src/shared/suggestOtherCommand.d.ts +7 -1
- package/dist/src/shared/suggestOtherCommand.d.ts.map +1 -1
- package/dist/src/shared/suggestOtherCommand.js +29 -23
- package/dist/src/shared/suggestOtherCommand.js.map +1 -1
- package/dist/src/types/main.d.ts +31 -2
- package/dist/src/types/main.d.ts.map +1 -1
- package/package.json +6 -11
- package/apps/lib/components/ActionButton.tsx +0 -93
- package/apps/lib/components/ActionsGroup.tsx +0 -27
- package/apps/lib/components/AlertDialog.tsx +0 -204
- package/apps/lib/components/Avatar.tsx +0 -46
- package/apps/lib/components/Badge.tsx +0 -250
- package/apps/lib/components/BadgeField.tsx +0 -403
- package/apps/lib/components/Breadcrumb.tsx +0 -280
- package/apps/lib/components/Button.tsx +0 -325
- package/apps/lib/components/ButtonGroup.tsx +0 -190
- package/apps/lib/components/Calendar.tsx +0 -115
- package/apps/lib/components/Card.tsx +0 -95
- package/apps/lib/components/Checkbox.tsx +0 -42
- package/apps/lib/components/ColorPicker.tsx +0 -441
- package/apps/lib/components/ConclusionHeader.tsx +0 -148
- package/apps/lib/components/ContextMenu.tsx +0 -571
- package/apps/lib/components/CountBadge.tsx +0 -52
- package/apps/lib/components/DataTable.tsx +0 -213
- package/apps/lib/components/DataViews/badge.ts +0 -49
- package/apps/lib/components/DataViews/cell.tsx +0 -324
- package/apps/lib/components/DataViews/context.ts +0 -144
- package/apps/lib/components/DataViews/data-views.tsx +0 -395
- package/apps/lib/components/DataViews/filters/children.tsx +0 -98
- package/apps/lib/components/DataViews/filters/custom.tsx +0 -34
- package/apps/lib/components/DataViews/filters/filters.tsx +0 -157
- package/apps/lib/components/DataViews/filters/index.ts +0 -4
- package/apps/lib/components/DataViews/filters/labelled.tsx +0 -20
- package/apps/lib/components/DataViews/filters/presets.tsx +0 -65
- package/apps/lib/components/DataViews/filters/sync.tsx +0 -35
- package/apps/lib/components/DataViews/filters/values.ts +0 -173
- package/apps/lib/components/DataViews/header.tsx +0 -220
- package/apps/lib/components/DataViews/hooks/index.ts +0 -5
- package/apps/lib/components/DataViews/hooks/useActiveRow.ts +0 -22
- package/apps/lib/components/DataViews/hooks/useControllable.ts +0 -52
- package/apps/lib/components/DataViews/index.ts +0 -88
- package/apps/lib/components/DataViews/panel/columns.tsx +0 -153
- package/apps/lib/components/DataViews/panel/controls.tsx +0 -106
- package/apps/lib/components/DataViews/panel/index.ts +0 -3
- package/apps/lib/components/DataViews/panel/panel.tsx +0 -164
- package/apps/lib/components/DataViews/panel/saved-views.tsx +0 -67
- package/apps/lib/components/DataViews/panel/section.tsx +0 -81
- package/apps/lib/components/DataViews/panel/sort.tsx +0 -42
- package/apps/lib/components/DataViews/panel/tab.tsx +0 -31
- package/apps/lib/components/DataViews/slots.ts +0 -72
- package/apps/lib/components/DataViews/states.tsx +0 -73
- package/apps/lib/components/DataViews/types.ts +0 -510
- package/apps/lib/components/DataViews/views/board-view.tsx +0 -381
- package/apps/lib/components/DataViews/views/card-rows.tsx +0 -36
- package/apps/lib/components/DataViews/views/inbox-view.tsx +0 -260
- package/apps/lib/components/DataViews/views/pane-views.tsx +0 -196
- package/apps/lib/components/DataViews/views/table-view.tsx +0 -493
- package/apps/lib/components/DataViews/views/tree-view.tsx +0 -367
- package/apps/lib/components/DatePicker.tsx +0 -232
- package/apps/lib/components/Dialog.tsx +0 -116
- package/apps/lib/components/Divider.tsx +0 -28
- package/apps/lib/components/Drawer.tsx +0 -451
- package/apps/lib/components/DropdownMenu.tsx +0 -554
- package/apps/lib/components/FieldHint.tsx +0 -69
- package/apps/lib/components/Form.tsx +0 -182
- package/apps/lib/components/FormBuilder/context.ts +0 -85
- package/apps/lib/components/FormBuilder/field-kind.ts +0 -28
- package/apps/lib/components/FormBuilder/fields/ChoiceFields.tsx +0 -60
- package/apps/lib/components/FormBuilder/fields/ColorField.tsx +0 -59
- package/apps/lib/components/FormBuilder/fields/CustomField.tsx +0 -11
- package/apps/lib/components/FormBuilder/fields/DateField.tsx +0 -32
- package/apps/lib/components/FormBuilder/fields/FieldArray.tsx +0 -74
- package/apps/lib/components/FormBuilder/fields/FieldShell.tsx +0 -168
- package/apps/lib/components/FormBuilder/fields/FileField.tsx +0 -39
- package/apps/lib/components/FormBuilder/fields/OptionListFields.tsx +0 -132
- package/apps/lib/components/FormBuilder/fields/OtpField.tsx +0 -31
- package/apps/lib/components/FormBuilder/fields/PhoneField.tsx +0 -109
- package/apps/lib/components/FormBuilder/fields/RichTextEditorField.tsx +0 -31
- package/apps/lib/components/FormBuilder/fields/SelectField.tsx +0 -114
- package/apps/lib/components/FormBuilder/fields/SignatureField.tsx +0 -157
- package/apps/lib/components/FormBuilder/fields/SliderField.tsx +0 -67
- package/apps/lib/components/FormBuilder/fields/SwitchBoxField.tsx +0 -41
- package/apps/lib/components/FormBuilder/fields/TableField.tsx +0 -336
- package/apps/lib/components/FormBuilder/fields/TextField.tsx +0 -213
- package/apps/lib/components/FormBuilder/fields/TreeSelectField.tsx +0 -43
- package/apps/lib/components/FormBuilder/fields/countries.ts +0 -303
- package/apps/lib/components/FormBuilder/fields/index.ts +0 -25
- package/apps/lib/components/FormBuilder/form-builder.tsx +0 -198
- package/apps/lib/components/FormBuilder/index.ts +0 -31
- package/apps/lib/components/FormBuilder/numberFormat.ts +0 -16
- package/apps/lib/components/FormBuilder/submit.tsx +0 -67
- package/apps/lib/components/FormBuilder/types.ts +0 -316
- package/apps/lib/components/FormRenderer/FormDrawer.tsx +0 -250
- package/apps/lib/components/FormRenderer/detail.tsx +0 -256
- package/apps/lib/components/FormRenderer/form-renderer.tsx +0 -358
- package/apps/lib/components/FormRenderer/header.tsx +0 -88
- package/apps/lib/components/FormRenderer/index.ts +0 -17
- package/apps/lib/components/FormRenderer/notch-action.tsx +0 -64
- package/apps/lib/components/FormRenderer/section.tsx +0 -39
- package/apps/lib/components/FormRenderer/stepper.tsx +0 -393
- package/apps/lib/components/FormRenderer/types.ts +0 -115
- package/apps/lib/components/FormSummary.tsx +0 -282
- package/apps/lib/components/HeaderBar.tsx +0 -117
- package/apps/lib/components/ImageAttachment.tsx +0 -209
- package/apps/lib/components/InnerLabelField.tsx +0 -154
- package/apps/lib/components/Input.tsx +0 -224
- package/apps/lib/components/InputField.tsx +0 -147
- package/apps/lib/components/InputOTP.tsx +0 -84
- package/apps/lib/components/Label.tsx +0 -129
- package/apps/lib/components/LabelField.tsx +0 -76
- package/apps/lib/components/LabeledCheckBox.tsx +0 -51
- package/apps/lib/components/LabeledRadio.tsx +0 -51
- package/apps/lib/components/LinkButton.tsx +0 -94
- package/apps/lib/components/LoginButton.tsx +0 -51
- package/apps/lib/components/PasswordLevel.tsx +0 -58
- package/apps/lib/components/Popover.tsx +0 -312
- package/apps/lib/components/ProfileMenu.tsx +0 -85
- package/apps/lib/components/Radio.tsx +0 -59
- package/apps/lib/components/RadioCard.tsx +0 -50
- package/apps/lib/components/ScrollArea.tsx +0 -54
- package/apps/lib/components/SearchField.tsx +0 -62
- package/apps/lib/components/SearchableSelect.tsx +0 -318
- package/apps/lib/components/SearchableTable.tsx +0 -344
- package/apps/lib/components/SearchableTree.tsx +0 -485
- package/apps/lib/components/SearchableTreeDialog.tsx +0 -502
- package/apps/lib/components/SectionBlock.tsx +0 -168
- package/apps/lib/components/Select.tsx +0 -347
- package/apps/lib/components/SimpleSelect.tsx +0 -225
- package/apps/lib/components/Skeleton.tsx +0 -12
- package/apps/lib/components/SlideDatePicker.tsx +0 -255
- package/apps/lib/components/SpinLoading.tsx +0 -174
- package/apps/lib/components/Stepper.tsx +0 -480
- package/apps/lib/components/Switch.tsx +0 -82
- package/apps/lib/components/TabFormItem.tsx +0 -153
- package/apps/lib/components/TabSwitch.tsx +0 -172
- package/apps/lib/components/Table.tsx +0 -597
- package/apps/lib/components/TextEditor/ChartBlockTool.ts +0 -676
- package/apps/lib/components/TextEditor/RichTextField.tsx +0 -46
- package/apps/lib/components/TextEditor/TableDnDWrapper.ts +0 -462
- package/apps/lib/components/TextEditor/TextEditor.tsx +0 -1164
- package/apps/lib/components/TextEditor/TextEditorToolbar.tsx +0 -429
- package/apps/lib/components/TextEditor/editor-tools/AlignmentTune.ts +0 -70
- package/apps/lib/components/TextEditor/editor-tools/ColorInlineTool.ts +0 -50
- package/apps/lib/components/TextEditor/editor-tools/StrikethroughInlineTool.ts +0 -48
- package/apps/lib/components/TextEditor/editor-tools/inlineFormat.ts +0 -98
- package/apps/lib/components/TextEditor/editorjs.d.ts +0 -60
- package/apps/lib/components/TextEditor/index.ts +0 -7
- package/apps/lib/components/TextEditor/markdownParser.ts +0 -346
- package/apps/lib/components/Textarea.tsx +0 -117
- package/apps/lib/components/Timeline.tsx +0 -263
- package/apps/lib/components/Toast.tsx +0 -87
- package/apps/lib/components/Toggle.tsx +0 -125
- package/apps/lib/components/ToggleButton.tsx +0 -140
- package/apps/lib/components/Tooltip.tsx +0 -116
- package/apps/lib/components/TransparentLabel.tsx +0 -71
- package/apps/lib/components/TreeDropDown.tsx +0 -115
- package/apps/lib/components/TreeFolder/TreeFolder.tsx +0 -380
- package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +0 -75
- package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +0 -354
- package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +0 -60
- package/apps/lib/components/TreeFolder/icons.tsx +0 -60
- package/apps/lib/components/TreeFolder/index.ts +0 -24
- package/apps/lib/components/TreeFolder/treeFolderUtils.ts +0 -109
- package/apps/lib/components/TreeFolder/types.ts +0 -77
- package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +0 -118
- package/apps/lib/hooks/useActiveTreeItem.ts +0 -61
- package/apps/lib/hooks/useClickOutside.ts +0 -27
- package/apps/lib/hooks/useDragDrop.tsx +0 -365
- package/apps/lib/hooks/useHtmlDir.ts +0 -31
- package/apps/lib/hooks/useInfiniteScroll.ts +0 -108
- package/apps/lib/hooks/useIsMobile.ts +0 -21
- package/apps/lib/hooks/useResize.ts +0 -67
- package/apps/lib/hooks/useTagSelection.ts +0 -300
- package/apps/lib/layouts/CNLayout.tsx +0 -372
- package/apps/lib/layouts/DataViewCard.tsx +0 -62
- package/apps/lib/layouts/FieldSection.tsx +0 -91
- package/apps/lib/layouts/TreeSubLayout.tsx +0 -173
- package/apps/lib/providers/ThemeProvider.tsx +0 -84
- package/apps/lib/registry.json +0 -1217
- package/apps/lib/tsconfig.json +0 -9
- package/apps/lib/tsconfig.tsbuildinfo +0 -1
- package/apps/lib/utils/cn.ts +0 -6
- package/apps/lib/utils/color.ts +0 -175
- package/apps/lib/utils/dataViews/path.ts +0 -67
- package/apps/lib/utils/dataViews/query.ts +0 -73
- package/apps/lib/utils/dataViews/types.ts +0 -187
- package/apps/lib/utils/dateFormat.ts +0 -108
- package/apps/lib/utils/resize.ts +0 -31
- package/apps/lib/utils/scroller.ts +0 -26
- package/apps/lib/utils/types.ts +0 -16
- package/docs/BLOCKS.md +0 -129
- package/docs/CHANGELOG-1.1.16.md +0 -108
- package/docs/Cover.png +0 -0
- package/docs/README.md +0 -215
- package/docs/components/action-button.md +0 -638
- package/docs/components/actions-group.md +0 -708
- package/docs/components/alert-dialog.md +0 -920
- package/docs/components/avatar.md +0 -709
- package/docs/components/badge-field.md +0 -738
- package/docs/components/badge.md +0 -301
- package/docs/components/breadcrumb.md +0 -930
- package/docs/components/button-group.md +0 -650
- package/docs/components/button.md +0 -639
- package/docs/components/calendar.md +0 -555
- package/docs/components/card.md +0 -622
- package/docs/components/chart-block-tool.md +0 -129
- package/docs/components/checkbox.md +0 -699
- package/docs/components/cn-layout.md +0 -854
- package/docs/components/color-picker.md +0 -101
- package/docs/components/conclusion-header.md +0 -80
- package/docs/components/context-menu.md +0 -483
- package/docs/components/count-badge.md +0 -560
- package/docs/components/data-table.md +0 -854
- package/docs/components/data-views/backend-response.md +0 -324
- package/docs/components/data-views/examples/a11y-rtl.md +0 -250
- package/docs/components/data-views/examples/api-orders-route.md +0 -130
- package/docs/components/data-views/examples/fields.md +0 -362
- package/docs/components/data-views/examples/filters.md +0 -307
- package/docs/components/data-views/examples/inbox-routing.md +0 -218
- package/docs/components/data-views/examples/index.md +0 -29
- package/docs/components/data-views/examples/overview.md +0 -244
- package/docs/components/data-views/examples/panel.md +0 -212
- package/docs/components/data-views/examples/scale.md +0 -231
- package/docs/components/data-views/examples/server-side.md +0 -210
- package/docs/components/data-views/examples/state.md +0 -250
- package/docs/components/data-views/examples/tree-custom.md +0 -388
- package/docs/components/data-views/examples/view-registry.md +0 -313
- package/docs/components/data-views/examples/views.md +0 -534
- package/docs/components/data-views/guide.md +0 -405
- package/docs/components/data-views/index.md +0 -1521
- package/docs/components/data-views/migration.md +0 -81
- package/docs/components/date-picker.md +0 -857
- package/docs/components/dialog.md +0 -929
- package/docs/components/divider.md +0 -766
- package/docs/components/drawer.md +0 -654
- package/docs/components/dropdown-menu.md +0 -668
- package/docs/components/field-hint.md +0 -898
- package/docs/components/field-section.md +0 -781
- package/docs/components/form-builder.md +0 -284
- package/docs/components/form-renderer.md +0 -396
- package/docs/components/form-summary.md +0 -138
- package/docs/components/form.md +0 -785
- package/docs/components/header-bar.md +0 -188
- package/docs/components/image-attachment.md +0 -906
- package/docs/components/inner-label-field.md +0 -819
- package/docs/components/input-field.md +0 -623
- package/docs/components/input-otp.md +0 -756
- package/docs/components/input.md +0 -634
- package/docs/components/label-field.md +0 -770
- package/docs/components/label.md +0 -761
- package/docs/components/labeled-check-box.md +0 -642
- package/docs/components/labeled-radio.md +0 -796
- package/docs/components/link-button.md +0 -685
- package/docs/components/login-button.md +0 -872
- package/docs/components/password-level.md +0 -803
- package/docs/components/popover.md +0 -649
- package/docs/components/profile-menu.md +0 -656
- package/docs/components/radio-card.md +0 -801
- package/docs/components/radio.md +0 -735
- package/docs/components/scroll-area.md +0 -691
- package/docs/components/search-field.md +0 -702
- package/docs/components/searchable-select.md +0 -368
- package/docs/components/searchable-table.md +0 -438
- package/docs/components/searchable-tree-dialog.md +0 -190
- package/docs/components/searchable-tree.md +0 -200
- package/docs/components/section-block.md +0 -483
- package/docs/components/select.md +0 -709
- package/docs/components/simple-select.md +0 -741
- package/docs/components/skeleton.md +0 -706
- package/docs/components/slide-date-picker.md +0 -837
- package/docs/components/spin-loading.md +0 -696
- package/docs/components/stepper.md +0 -316
- package/docs/components/switch.md +0 -770
- package/docs/components/tab-form-item.md +0 -773
- package/docs/components/tab-switch.md +0 -170
- package/docs/components/table-dnd-wrapper.md +0 -107
- package/docs/components/table.md +0 -1088
- package/docs/components/text-editor.md +0 -735
- package/docs/components/textarea.md +0 -681
- package/docs/components/timeline.md +0 -254
- package/docs/components/toast.md +0 -773
- package/docs/components/toggle-button.md +0 -643
- package/docs/components/toggle.md +0 -882
- package/docs/components/tooltip.md +0 -513
- package/docs/components/transparent-label.md +0 -721
- package/docs/components/tree-drop-down.md +0 -740
- package/docs/components/tree-folder.md +0 -110
- package/docs/components/tree-sub-layout.md +0 -707
- package/docs/explanation/architecture.md +0 -54
- package/docs/explanation/design-system.md +0 -52
- package/docs/how-to/form-and-list-recipes.md +0 -386
- package/docs/how-to/forms-with-form-builder.md +0 -472
- package/docs/how-to/guides.md +0 -1027
- package/docs/migration/changelog.md +0 -60
- package/docs/migration/form-builder-2.5.2.md +0 -113
- package/docs/reference/cli.md +0 -112
- package/docs/reference/components.md +0 -572
- package/docs/reference/hooks.md +0 -1523
- package/docs/reference/providers.md +0 -866
- package/docs/reference/tailwind-plugins.md +0 -942
- package/docs/reference/theme.md +0 -85
- package/docs/reference/types.md +0 -1016
- package/docs/reference/utilities.md +0 -726
- package/docs/tutorials/building-first-form.md +0 -846
- package/docs/tutorials/component-composition.md +0 -882
- package/docs/tutorials/getting-started.md +0 -302
- package/docs/tutorials/theming-basics.md +0 -785
package/docs/components/input.md
DELETED
|
@@ -1,634 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Input
|
|
3
|
-
version: 2.4.5
|
|
4
|
-
status: stable
|
|
5
|
-
category: components/forms
|
|
6
|
-
tags: [form, input, text, field, accessible, compound]
|
|
7
|
-
last-reviewed: 2024-11-05
|
|
8
|
-
bundle-size: 2.8kb
|
|
9
|
-
dependencies:
|
|
10
|
-
- "class-variance-authority": "^0.7.0"
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Input
|
|
14
|
-
|
|
15
|
-
> A versatile text input component with compound architecture, supporting icons, trailing elements, and multiple style variants. Built with accessibility and flexibility in mind.
|
|
16
|
-
|
|
17
|
-
## Installation
|
|
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
|
-
|
|
22
|
-
```bash
|
|
23
|
-
npx torch-glare@latest init
|
|
24
|
-
npx torch-glare@latest add Input
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
`add` also copies any components, hooks, and utilities that `Input` depends on.
|
|
28
|
-
|
|
29
|
-
## Import
|
|
30
|
-
|
|
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";
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Quick Examples
|
|
38
|
-
|
|
39
|
-
### Basic Usage
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
import { Input } from '@/components/Input'
|
|
43
|
-
|
|
44
|
-
function Example() {
|
|
45
|
-
const [value, setValue] = useState('')
|
|
46
|
-
|
|
47
|
-
return (
|
|
48
|
-
<Input.Group>
|
|
49
|
-
<Input
|
|
50
|
-
value={value}
|
|
51
|
-
onChange={(e) => setValue(e.target.value)}
|
|
52
|
-
placeholder="Enter text..."
|
|
53
|
-
/>
|
|
54
|
-
</Input.Group>
|
|
55
|
-
)
|
|
56
|
-
}
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### With Icon
|
|
60
|
-
|
|
61
|
-
```typescript
|
|
62
|
-
import { Input } from '@/components/Input'
|
|
63
|
-
import { SearchIcon } from '@heroicons/react/24/outline'
|
|
64
|
-
|
|
65
|
-
function SearchInput() {
|
|
66
|
-
return (
|
|
67
|
-
<Input.Group>
|
|
68
|
-
<Input.Icon>
|
|
69
|
-
<SearchIcon className="w-5 h-5" />
|
|
70
|
-
</Input.Icon>
|
|
71
|
-
<Input placeholder="Search..." />
|
|
72
|
-
</Input.Group>
|
|
73
|
-
)
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### With Trailing Element
|
|
78
|
-
|
|
79
|
-
```typescript
|
|
80
|
-
import { Input } from '@/components/Input'
|
|
81
|
-
import { Button } from '@/components/Button'
|
|
82
|
-
|
|
83
|
-
function InputWithButton() {
|
|
84
|
-
return (
|
|
85
|
-
<Input.Group>
|
|
86
|
-
<Input placeholder="Enter email..." />
|
|
87
|
-
<Input.Trilling>
|
|
88
|
-
<Button size="S" variant="PrimeStyle">
|
|
89
|
-
Subscribe
|
|
90
|
-
</Button>
|
|
91
|
-
</Input.Trilling>
|
|
92
|
-
</Input.Group>
|
|
93
|
-
)
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### Error State
|
|
98
|
-
|
|
99
|
-
```typescript
|
|
100
|
-
function ErrorInput() {
|
|
101
|
-
const [error, setError] = useState(true)
|
|
102
|
-
|
|
103
|
-
return (
|
|
104
|
-
<Input.Group error={error}>
|
|
105
|
-
<Input
|
|
106
|
-
placeholder="Email address"
|
|
107
|
-
aria-invalid={error}
|
|
108
|
-
/>
|
|
109
|
-
</Input.Group>
|
|
110
|
-
)
|
|
111
|
-
}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
### Different Sizes
|
|
115
|
-
|
|
116
|
-
```typescript
|
|
117
|
-
// Small size
|
|
118
|
-
<Input.Group size="S">
|
|
119
|
-
<Input placeholder="Small input" />
|
|
120
|
-
</Input.Group>
|
|
121
|
-
|
|
122
|
-
// Medium size (default)
|
|
123
|
-
<Input.Group size="M">
|
|
124
|
-
<Input placeholder="Medium input" />
|
|
125
|
-
</Input.Group>
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### Different Variants
|
|
129
|
-
|
|
130
|
-
```typescript
|
|
131
|
-
// Presentation style (default)
|
|
132
|
-
<Input.Group variant="PresentationStyle">
|
|
133
|
-
<Input placeholder="Presentation style" />
|
|
134
|
-
</Input.Group>
|
|
135
|
-
|
|
136
|
-
// System style
|
|
137
|
-
<Input.Group variant="SystemStyle">
|
|
138
|
-
<Input placeholder="System style" />
|
|
139
|
-
</Input.Group>
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### Password Input
|
|
143
|
-
|
|
144
|
-
```typescript
|
|
145
|
-
import { useState } from 'react'
|
|
146
|
-
import { EyeIcon, EyeSlashIcon } from '@heroicons/react/24/outline'
|
|
147
|
-
|
|
148
|
-
function PasswordInput() {
|
|
149
|
-
const [showPassword, setShowPassword] = useState(false)
|
|
150
|
-
|
|
151
|
-
return (
|
|
152
|
-
<Input.Group>
|
|
153
|
-
<Input
|
|
154
|
-
type={showPassword ? 'text' : 'password'}
|
|
155
|
-
placeholder="Enter password..."
|
|
156
|
-
/>
|
|
157
|
-
<Input.Trilling>
|
|
158
|
-
<button
|
|
159
|
-
onClick={() => setShowPassword(!showPassword)}
|
|
160
|
-
className="p-2"
|
|
161
|
-
>
|
|
162
|
-
{showPassword ? (
|
|
163
|
-
<EyeSlashIcon className="w-4 h-4" />
|
|
164
|
-
) : (
|
|
165
|
-
<EyeIcon className="w-4 h-4" />
|
|
166
|
-
)}
|
|
167
|
-
</button>
|
|
168
|
-
</Input.Trilling>
|
|
169
|
-
</Input.Group>
|
|
170
|
-
)
|
|
171
|
-
}
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
## API Reference
|
|
175
|
-
|
|
176
|
-
### Input.Group Props
|
|
177
|
-
|
|
178
|
-
| Prop | Type | Default | Description |
|
|
179
|
-
|------|------|---------|-------------|
|
|
180
|
-
| `size` | `'S' \| 'M'` | `'M'` | Size of the input group |
|
|
181
|
-
| `variant` | `'PresentationStyle' \| 'SystemStyle'` | `'PresentationStyle'` | Visual style variant |
|
|
182
|
-
| `error` | `boolean` | `false` | Shows error state styling |
|
|
183
|
-
| `onTable` | `boolean` | `false` | Optimized styling for table context |
|
|
184
|
-
| `className` | `string` | - | Additional CSS classes |
|
|
185
|
-
| `children` | `React.ReactNode` | - | Input and related elements |
|
|
186
|
-
|
|
187
|
-
### Input Props
|
|
188
|
-
|
|
189
|
-
| Prop | Type | Default | Description |
|
|
190
|
-
|------|------|---------|-------------|
|
|
191
|
-
| `type` | `string` | `'text'` | HTML input type |
|
|
192
|
-
| `value` | `string \| number` | - | Input value |
|
|
193
|
-
| `onChange` | `(e: ChangeEvent) => void` | - | Change event handler |
|
|
194
|
-
| `placeholder` | `string` | - | Placeholder text |
|
|
195
|
-
| `disabled` | `boolean` | `false` | Disables the input |
|
|
196
|
-
| `required` | `boolean` | `false` | Makes field required |
|
|
197
|
-
| `pattern` | `string` | - | Validation pattern |
|
|
198
|
-
| `maxLength` | `number` | - | Maximum character length |
|
|
199
|
-
| `minLength` | `number` | - | Minimum character length |
|
|
200
|
-
| `className` | `string` | - | Additional CSS classes |
|
|
201
|
-
| `autoComplete` | `string` | `'off'` | Autocomplete behavior |
|
|
202
|
-
|
|
203
|
-
### Input.Icon Props
|
|
204
|
-
|
|
205
|
-
| Prop | Type | Default | Description |
|
|
206
|
-
|------|------|---------|-------------|
|
|
207
|
-
| `children` | `React.ReactNode` | - | Icon element |
|
|
208
|
-
| `className` | `string` | - | Additional CSS classes |
|
|
209
|
-
|
|
210
|
-
### Input.Trilling Props
|
|
211
|
-
|
|
212
|
-
| Prop | Type | Default | Description |
|
|
213
|
-
|------|------|---------|-------------|
|
|
214
|
-
| `children` | `React.ReactNode` | - | Trailing elements |
|
|
215
|
-
| `className` | `string` | - | Additional CSS classes |
|
|
216
|
-
|
|
217
|
-
### TypeScript
|
|
218
|
-
|
|
219
|
-
```typescript
|
|
220
|
-
// Group component types
|
|
221
|
-
interface InputGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, "size"> {
|
|
222
|
-
size?: 'S' | 'M'
|
|
223
|
-
variant?: 'PresentationStyle' | 'SystemStyle'
|
|
224
|
-
error?: boolean
|
|
225
|
-
onTable?: boolean
|
|
226
|
-
className?: string
|
|
227
|
-
children?: React.ReactNode
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// Input component types
|
|
231
|
-
interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
232
|
-
className?: string
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// Icon component types
|
|
236
|
-
interface IconProps {
|
|
237
|
-
children: React.ReactNode
|
|
238
|
-
className?: string
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
// Trilling component types
|
|
242
|
-
interface TrillingProps extends HTMLAttributes<HTMLDivElement> {
|
|
243
|
-
children: React.ReactNode
|
|
244
|
-
className?: string
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// Compound component exports
|
|
248
|
-
export const Input: React.ForwardRefExoticComponent<InputProps> & {
|
|
249
|
-
Group: React.ForwardRefExoticComponent<InputGroupProps>
|
|
250
|
-
Icon: React.FC<IconProps>
|
|
251
|
-
Trilling: React.FC<TrillingProps>
|
|
252
|
-
}
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
## Common Patterns
|
|
256
|
-
|
|
257
|
-
### Form Field with Label
|
|
258
|
-
|
|
259
|
-
```typescript
|
|
260
|
-
import { Input } from '@/components/Input'
|
|
261
|
-
import { Label } from '@/components/Label'
|
|
262
|
-
|
|
263
|
-
function FormField() {
|
|
264
|
-
const [value, setValue] = useState('')
|
|
265
|
-
|
|
266
|
-
return (
|
|
267
|
-
<div className="space-y-2">
|
|
268
|
-
<Label htmlFor="email">Email Address</Label>
|
|
269
|
-
<Input.Group>
|
|
270
|
-
<Input
|
|
271
|
-
id="email"
|
|
272
|
-
type="email"
|
|
273
|
-
value={value}
|
|
274
|
-
onChange={(e) => setValue(e.target.value)}
|
|
275
|
-
placeholder="john@example.com"
|
|
276
|
-
required
|
|
277
|
-
/>
|
|
278
|
-
</Input.Group>
|
|
279
|
-
</div>
|
|
280
|
-
)
|
|
281
|
-
}
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
### Search Field
|
|
285
|
-
|
|
286
|
-
```typescript
|
|
287
|
-
import { Input } from '@/components/Input'
|
|
288
|
-
import { SearchIcon, XMarkIcon } from '@heroicons/react/24/outline'
|
|
289
|
-
|
|
290
|
-
function SearchField() {
|
|
291
|
-
const [search, setSearch] = useState('')
|
|
292
|
-
|
|
293
|
-
const handleClear = () => setSearch('')
|
|
294
|
-
|
|
295
|
-
return (
|
|
296
|
-
<Input.Group>
|
|
297
|
-
<Input.Icon>
|
|
298
|
-
<SearchIcon className="w-5 h-5" />
|
|
299
|
-
</Input.Icon>
|
|
300
|
-
<Input
|
|
301
|
-
value={search}
|
|
302
|
-
onChange={(e) => setSearch(e.target.value)}
|
|
303
|
-
placeholder="Search..."
|
|
304
|
-
/>
|
|
305
|
-
{search && (
|
|
306
|
-
<Input.Trilling>
|
|
307
|
-
<button onClick={handleClear} className="p-1">
|
|
308
|
-
<XMarkIcon className="w-4 h-4" />
|
|
309
|
-
</button>
|
|
310
|
-
</Input.Trilling>
|
|
311
|
-
)}
|
|
312
|
-
</Input.Group>
|
|
313
|
-
)
|
|
314
|
-
}
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
### Input with Validation
|
|
318
|
-
|
|
319
|
-
```typescript
|
|
320
|
-
function ValidatedInput() {
|
|
321
|
-
const [value, setValue] = useState('')
|
|
322
|
-
const [error, setError] = useState('')
|
|
323
|
-
|
|
324
|
-
const validate = (val: string) => {
|
|
325
|
-
if (!val) {
|
|
326
|
-
setError('Field is required')
|
|
327
|
-
return false
|
|
328
|
-
}
|
|
329
|
-
if (val.length < 3) {
|
|
330
|
-
setError('Minimum 3 characters required')
|
|
331
|
-
return false
|
|
332
|
-
}
|
|
333
|
-
setError('')
|
|
334
|
-
return true
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
338
|
-
const newValue = e.target.value
|
|
339
|
-
setValue(newValue)
|
|
340
|
-
validate(newValue)
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
return (
|
|
344
|
-
<div className="space-y-1">
|
|
345
|
-
<Input.Group error={!!error}>
|
|
346
|
-
<Input
|
|
347
|
-
value={value}
|
|
348
|
-
onChange={handleChange}
|
|
349
|
-
placeholder="Enter username..."
|
|
350
|
-
aria-invalid={!!error}
|
|
351
|
-
aria-describedby={error ? "error-message" : undefined}
|
|
352
|
-
/>
|
|
353
|
-
</Input.Group>
|
|
354
|
-
{error && (
|
|
355
|
-
<p id="error-message" className="text-sm text-red-500">
|
|
356
|
-
{error}
|
|
357
|
-
</p>
|
|
358
|
-
)}
|
|
359
|
-
</div>
|
|
360
|
-
)
|
|
361
|
-
}
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
### Currency Input
|
|
365
|
-
|
|
366
|
-
```typescript
|
|
367
|
-
function CurrencyInput() {
|
|
368
|
-
const [amount, setAmount] = useState('')
|
|
369
|
-
|
|
370
|
-
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
371
|
-
const value = e.target.value.replace(/[^0-9.]/g, '')
|
|
372
|
-
setAmount(value)
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
return (
|
|
376
|
-
<Input.Group>
|
|
377
|
-
<Input.Icon>
|
|
378
|
-
<span className="text-sm font-medium">$</span>
|
|
379
|
-
</Input.Icon>
|
|
380
|
-
<Input
|
|
381
|
-
value={amount}
|
|
382
|
-
onChange={handleChange}
|
|
383
|
-
placeholder="0.00"
|
|
384
|
-
inputMode="decimal"
|
|
385
|
-
/>
|
|
386
|
-
<Input.Trilling>
|
|
387
|
-
<span className="text-sm text-gray-500">USD</span>
|
|
388
|
-
</Input.Trilling>
|
|
389
|
-
</Input.Group>
|
|
390
|
-
)
|
|
391
|
-
}
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
## Testing
|
|
395
|
-
|
|
396
|
-
### Unit Test Example
|
|
397
|
-
|
|
398
|
-
```typescript
|
|
399
|
-
import { render, screen, fireEvent } from '@testing-library/react'
|
|
400
|
-
import { Input } from '@/components/Input'
|
|
401
|
-
|
|
402
|
-
describe('Input', () => {
|
|
403
|
-
it('handles user input', () => {
|
|
404
|
-
const handleChange = jest.fn()
|
|
405
|
-
render(
|
|
406
|
-
<Input.Group>
|
|
407
|
-
<Input
|
|
408
|
-
onChange={handleChange}
|
|
409
|
-
placeholder="Type here..."
|
|
410
|
-
/>
|
|
411
|
-
</Input.Group>
|
|
412
|
-
)
|
|
413
|
-
|
|
414
|
-
const input = screen.getByPlaceholderText('Type here...')
|
|
415
|
-
fireEvent.change(input, { target: { value: 'Hello' } })
|
|
416
|
-
|
|
417
|
-
expect(handleChange).toHaveBeenCalled()
|
|
418
|
-
expect(input).toHaveValue('Hello')
|
|
419
|
-
})
|
|
420
|
-
|
|
421
|
-
it('shows error state', () => {
|
|
422
|
-
const { container } = render(
|
|
423
|
-
<Input.Group error>
|
|
424
|
-
<Input placeholder="Error input" />
|
|
425
|
-
</Input.Group>
|
|
426
|
-
)
|
|
427
|
-
|
|
428
|
-
const group = container.firstChild
|
|
429
|
-
expect(group).toHaveClass('error')
|
|
430
|
-
})
|
|
431
|
-
|
|
432
|
-
it('disables input when disabled prop is passed', () => {
|
|
433
|
-
render(
|
|
434
|
-
<Input.Group>
|
|
435
|
-
<Input disabled placeholder="Disabled" />
|
|
436
|
-
</Input.Group>
|
|
437
|
-
)
|
|
438
|
-
|
|
439
|
-
const input = screen.getByPlaceholderText('Disabled')
|
|
440
|
-
expect(input).toBeDisabled()
|
|
441
|
-
})
|
|
442
|
-
})
|
|
443
|
-
```
|
|
444
|
-
|
|
445
|
-
### Accessibility Test
|
|
446
|
-
|
|
447
|
-
```typescript
|
|
448
|
-
import { axe } from '@axe-core/react'
|
|
449
|
-
|
|
450
|
-
test('Input meets WCAG standards', async () => {
|
|
451
|
-
const { container } = render(
|
|
452
|
-
<div>
|
|
453
|
-
<label htmlFor="test-input">Name</label>
|
|
454
|
-
<Input.Group>
|
|
455
|
-
<Input
|
|
456
|
-
id="test-input"
|
|
457
|
-
placeholder="Enter name..."
|
|
458
|
-
/>
|
|
459
|
-
</Input.Group>
|
|
460
|
-
</div>
|
|
461
|
-
)
|
|
462
|
-
|
|
463
|
-
const results = await axe(container)
|
|
464
|
-
expect(results).toHaveNoViolations()
|
|
465
|
-
})
|
|
466
|
-
```
|
|
467
|
-
|
|
468
|
-
## Accessibility
|
|
469
|
-
|
|
470
|
-
### Keyboard Support
|
|
471
|
-
|
|
472
|
-
- **Tab**: Move focus to/from input
|
|
473
|
-
- **Arrow Keys**: Navigate text cursor
|
|
474
|
-
- **Home/End**: Jump to start/end of text
|
|
475
|
-
- **Backspace/Delete**: Remove characters
|
|
476
|
-
|
|
477
|
-
### ARIA Attributes
|
|
478
|
-
|
|
479
|
-
```typescript
|
|
480
|
-
// Error state
|
|
481
|
-
<Input
|
|
482
|
-
aria-invalid={hasError}
|
|
483
|
-
aria-describedby="error-message"
|
|
484
|
-
/>
|
|
485
|
-
|
|
486
|
-
// Required field
|
|
487
|
-
<Input
|
|
488
|
-
aria-required="true"
|
|
489
|
-
required
|
|
490
|
-
/>
|
|
491
|
-
|
|
492
|
-
// With label
|
|
493
|
-
<label htmlFor="email">Email</label>
|
|
494
|
-
<Input id="email" />
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
### Screen Reader Support
|
|
498
|
-
|
|
499
|
-
- Announces input type and state
|
|
500
|
-
- Reads placeholder text
|
|
501
|
-
- Announces error messages when linked with aria-describedby
|
|
502
|
-
- Supports label association
|
|
503
|
-
|
|
504
|
-
### Focus Management
|
|
505
|
-
|
|
506
|
-
- Visible focus ring on keyboard navigation
|
|
507
|
-
- Auto-scrolls to end of text on focus
|
|
508
|
-
- Maintains focus during value changes
|
|
509
|
-
|
|
510
|
-
## Styling
|
|
511
|
-
|
|
512
|
-
### Custom Styles with className
|
|
513
|
-
|
|
514
|
-
```typescript
|
|
515
|
-
<Input.Group className="border-2 border-blue-500">
|
|
516
|
-
<Input className="font-mono text-lg" />
|
|
517
|
-
</Input.Group>
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
### CSS Variables
|
|
521
|
-
|
|
522
|
-
```css
|
|
523
|
-
/* Custom theme variables */
|
|
524
|
-
[data-theme="custom"] {
|
|
525
|
-
--input-bg: #your-background;
|
|
526
|
-
--input-border: #your-border;
|
|
527
|
-
--input-text: #your-text;
|
|
528
|
-
--input-placeholder: #your-placeholder;
|
|
529
|
-
--input-focus: #your-focus-color;
|
|
530
|
-
}
|
|
531
|
-
```
|
|
532
|
-
|
|
533
|
-
## Performance
|
|
534
|
-
|
|
535
|
-
| Metric | Value |
|
|
536
|
-
|--------|-------|
|
|
537
|
-
| Bundle size (gzip) | 2.8kb |
|
|
538
|
-
| First render | <8ms |
|
|
539
|
-
| Re-render | <3ms |
|
|
540
|
-
| Tree-shakeable | ✅ |
|
|
541
|
-
|
|
542
|
-
### Optimization Tips
|
|
543
|
-
|
|
544
|
-
1. Use `React.memo()` for parent components
|
|
545
|
-
2. Debounce onChange handlers for expensive operations
|
|
546
|
-
3. Use `useCallback` for event handlers
|
|
547
|
-
4. Consider virtual scrolling for long lists of inputs
|
|
548
|
-
|
|
549
|
-
## Migration
|
|
550
|
-
|
|
551
|
-
### From v1.0.x
|
|
552
|
-
|
|
553
|
-
```diff
|
|
554
|
-
// Import path changed
|
|
555
|
-
- import Input from 'torch-glare/Input'
|
|
556
|
-
+ import { Input } from '@/components/Input'
|
|
557
|
-
|
|
558
|
-
// Compound component structure
|
|
559
|
-
- <Input icon={<SearchIcon />} />
|
|
560
|
-
+ <Input.Group>
|
|
561
|
-
+ <Input.Icon><SearchIcon /></Input.Icon>
|
|
562
|
-
+ <Input />
|
|
563
|
-
+ </Input.Group>
|
|
564
|
-
```
|
|
565
|
-
|
|
566
|
-
## Troubleshooting
|
|
567
|
-
|
|
568
|
-
### Common Issues
|
|
569
|
-
|
|
570
|
-
#### Input doesn't update value
|
|
571
|
-
|
|
572
|
-
**Solution:** Ensure you're controlling the value properly
|
|
573
|
-
|
|
574
|
-
```typescript
|
|
575
|
-
// ❌ Wrong
|
|
576
|
-
<Input value="static" />
|
|
577
|
-
|
|
578
|
-
// ✅ Correct
|
|
579
|
-
const [value, setValue] = useState('')
|
|
580
|
-
<Input value={value} onChange={(e) => setValue(e.target.value)} />
|
|
581
|
-
```
|
|
582
|
-
|
|
583
|
-
#### Autocomplete not working
|
|
584
|
-
|
|
585
|
-
**Solution:** Set autoComplete prop appropriately
|
|
586
|
-
|
|
587
|
-
```typescript
|
|
588
|
-
<Input
|
|
589
|
-
type="email"
|
|
590
|
-
autoComplete="email"
|
|
591
|
-
name="email"
|
|
592
|
-
/>
|
|
593
|
-
```
|
|
594
|
-
|
|
595
|
-
#### Focus styles not showing
|
|
596
|
-
|
|
597
|
-
**Solution:** Check if parent styles are overriding focus styles
|
|
598
|
-
|
|
599
|
-
```typescript
|
|
600
|
-
<Input.Group className="focus-within:ring-2 focus-within:ring-blue-500">
|
|
601
|
-
<Input />
|
|
602
|
-
</Input.Group>
|
|
603
|
-
```
|
|
604
|
-
|
|
605
|
-
## Related Components
|
|
606
|
-
|
|
607
|
-
- [InputField](/docs/components/input-field.md) - Input with integrated label
|
|
608
|
-
- [SearchField](/docs/components/search-field.md) - Specialized search input
|
|
609
|
-
- [Textarea](/docs/components/textarea.md) - Multi-line text input
|
|
610
|
-
- [Select](/docs/components/select.md) - Dropdown selection
|
|
611
|
-
- [Form](/docs/components/form.md) - Form wrapper with validation
|
|
612
|
-
|
|
613
|
-
## Browser Support
|
|
614
|
-
|
|
615
|
-
- Chrome 90+ ✅
|
|
616
|
-
- Firefox 88+ ✅
|
|
617
|
-
- Safari 14+ ✅
|
|
618
|
-
- Edge 90+ ✅
|
|
619
|
-
- Mobile browsers ✅
|
|
620
|
-
|
|
621
|
-
## Changelog
|
|
622
|
-
|
|
623
|
-
### v1.1.15
|
|
624
|
-
- Added compound component architecture
|
|
625
|
-
- Improved auto-scroll behavior
|
|
626
|
-
- Enhanced TypeScript types
|
|
627
|
-
|
|
628
|
-
### v1.1.14
|
|
629
|
-
- Added error state styling
|
|
630
|
-
- Fixed focus management
|
|
631
|
-
- Performance optimizations
|
|
632
|
-
|
|
633
|
-
### v1.1.0
|
|
634
|
-
- Initial stable release
|