@neynar/ui 0.3.0 → 0.4.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/.llm/accordion-content.llm.md +67 -0
- package/.llm/accordion-item.llm.md +61 -0
- package/.llm/accordion-trigger.llm.md +69 -0
- package/.llm/accordion.llm.md +88 -0
- package/.llm/alert-description.llm.md +78 -0
- package/.llm/alert-dialog-action.llm.md +51 -0
- package/.llm/alert-dialog-cancel.llm.md +48 -0
- package/.llm/alert-dialog-content.llm.md +88 -0
- package/.llm/alert-dialog-description.llm.md +53 -0
- package/.llm/alert-dialog-footer.llm.md +41 -0
- package/.llm/alert-dialog-header.llm.md +39 -0
- package/.llm/alert-dialog-overlay.llm.md +44 -0
- package/.llm/alert-dialog-portal.llm.md +41 -0
- package/.llm/alert-dialog-title.llm.md +46 -0
- package/.llm/alert-dialog-trigger.llm.md +40 -0
- package/.llm/alert-dialog.llm.md +80 -0
- package/.llm/alert-title.llm.md +48 -0
- package/.llm/alert.llm.md +92 -0
- package/.llm/aspect-ratio.llm.md +41 -0
- package/.llm/avatar-fallback.llm.md +41 -0
- package/.llm/avatar-image.llm.md +48 -0
- package/.llm/avatar.llm.md +35 -0
- package/.llm/badge.llm.md +117 -0
- package/.llm/blockquote.llm.md +55 -0
- package/.llm/body-text-large.llm.md +49 -0
- package/.llm/body-text-small.llm.md +49 -0
- package/.llm/body-text.llm.md +52 -0
- package/.llm/breadcrumb-ellipsis.llm.md +73 -0
- package/.llm/breadcrumb-item.llm.md +53 -0
- package/.llm/breadcrumb-link.llm.md +84 -0
- package/.llm/breadcrumb-list.llm.md +54 -0
- package/.llm/breadcrumb-page.llm.md +52 -0
- package/.llm/breadcrumb-separator.llm.md +60 -0
- package/.llm/breadcrumb.llm.md +110 -0
- package/.llm/button-group-separator.llm.md +53 -0
- package/.llm/button-group-text.llm.md +56 -0
- package/.llm/button-group.llm.md +81 -0
- package/.llm/button.llm.md +281 -0
- package/.llm/calendar-day-button.llm.md +57 -0
- package/.llm/calendar.llm.md +340 -0
- package/.llm/caption.llm.md +48 -0
- package/.llm/card-action.llm.md +64 -0
- package/.llm/card-content.llm.md +48 -0
- package/.llm/card-description.llm.md +46 -0
- package/.llm/card-footer.llm.md +56 -0
- package/.llm/card-header.llm.md +53 -0
- package/.llm/card-title.llm.md +43 -0
- package/.llm/card.llm.md +100 -0
- package/.llm/carousel-content.llm.md +77 -0
- package/.llm/carousel-item.llm.md +96 -0
- package/.llm/carousel-next.llm.md +95 -0
- package/.llm/carousel-previous.llm.md +95 -0
- package/.llm/carousel.llm.md +211 -0
- package/.llm/chart-config.llm.md +71 -0
- package/.llm/chart-container.llm.md +148 -0
- package/.llm/chart-legend-content.llm.md +85 -0
- package/.llm/chart-legend.llm.md +144 -0
- package/.llm/chart-style.llm.md +28 -0
- package/.llm/chart-tooltip-content.llm.md +149 -0
- package/.llm/chart-tooltip.llm.md +184 -0
- package/.llm/checkbox.llm.md +100 -0
- package/.llm/cn.llm.md +46 -0
- package/.llm/code.llm.md +45 -0
- package/.llm/collapsible-content.llm.md +109 -0
- package/.llm/collapsible-trigger.llm.md +75 -0
- package/.llm/collapsible.llm.md +109 -0
- package/.llm/combobox-option.llm.md +53 -0
- package/.llm/combobox.llm.md +208 -0
- package/.llm/command-dialog.llm.md +112 -0
- package/.llm/command-empty.llm.md +63 -0
- package/.llm/command-group.llm.md +83 -0
- package/.llm/command-input.llm.md +82 -0
- package/.llm/command-item.llm.md +97 -0
- package/.llm/command-list.llm.md +53 -0
- package/.llm/command-loading.llm.md +48 -0
- package/.llm/command-separator.llm.md +44 -0
- package/.llm/command-shortcut.llm.md +63 -0
- package/.llm/command.llm.md +147 -0
- package/.llm/container.llm.md +236 -0
- package/.llm/context-menu-checkbox-item.llm.md +97 -0
- package/.llm/context-menu-content.llm.md +91 -0
- package/.llm/context-menu-group.llm.md +61 -0
- package/.llm/context-menu-item.llm.md +94 -0
- package/.llm/context-menu-label.llm.md +60 -0
- package/.llm/context-menu-portal.llm.md +49 -0
- package/.llm/context-menu-radio-group.llm.md +66 -0
- package/.llm/context-menu-radio-item.llm.md +76 -0
- package/.llm/context-menu-separator.llm.md +51 -0
- package/.llm/context-menu-shortcut.llm.md +57 -0
- package/.llm/context-menu-sub-content.llm.md +90 -0
- package/.llm/context-menu-sub-trigger.llm.md +73 -0
- package/.llm/context-menu-sub.llm.md +61 -0
- package/.llm/context-menu-trigger.llm.md +53 -0
- package/.llm/context-menu.llm.md +103 -0
- package/.llm/date-picker.llm.md +90 -0
- package/.llm/dialog-close.llm.md +61 -0
- package/.llm/dialog-content.llm.md +128 -0
- package/.llm/dialog-description.llm.md +44 -0
- package/.llm/dialog-footer.llm.md +38 -0
- package/.llm/dialog-header.llm.md +40 -0
- package/.llm/dialog-overlay.llm.md +57 -0
- package/.llm/dialog-portal.llm.md +47 -0
- package/.llm/dialog-title.llm.md +41 -0
- package/.llm/dialog-trigger.llm.md +51 -0
- package/.llm/dialog.llm.md +113 -0
- package/.llm/drawer-close.llm.md +53 -0
- package/.llm/drawer-content.llm.md +58 -0
- package/.llm/drawer-description.llm.md +54 -0
- package/.llm/drawer-footer.llm.md +67 -0
- package/.llm/drawer-header.llm.md +60 -0
- package/.llm/drawer-overlay.llm.md +40 -0
- package/.llm/drawer-portal.llm.md +42 -0
- package/.llm/drawer-title.llm.md +51 -0
- package/.llm/drawer-trigger.llm.md +44 -0
- package/.llm/drawer.llm.md +194 -0
- package/.llm/dropdown-menu-checkbox-item.llm.md +111 -0
- package/.llm/dropdown-menu-content.llm.md +109 -0
- package/.llm/dropdown-menu-group.llm.md +38 -0
- package/.llm/dropdown-menu-item.llm.md +94 -0
- package/.llm/dropdown-menu-label.llm.md +66 -0
- package/.llm/dropdown-menu-portal.llm.md +32 -0
- package/.llm/dropdown-menu-radio-group.llm.md +73 -0
- package/.llm/dropdown-menu-radio-item.llm.md +92 -0
- package/.llm/dropdown-menu-separator.llm.md +55 -0
- package/.llm/dropdown-menu-shortcut.llm.md +74 -0
- package/.llm/dropdown-menu-sub-content.llm.md +80 -0
- package/.llm/dropdown-menu-sub-trigger.llm.md +84 -0
- package/.llm/dropdown-menu-sub.llm.md +74 -0
- package/.llm/dropdown-menu-trigger.llm.md +48 -0
- package/.llm/dropdown-menu.llm.md +120 -0
- package/.llm/empty-content.llm.md +103 -0
- package/.llm/empty-description.llm.md +70 -0
- package/.llm/empty-header.llm.md +64 -0
- package/.llm/empty-media.llm.md +81 -0
- package/.llm/empty-state.llm.md +174 -0
- package/.llm/empty-title.llm.md +54 -0
- package/.llm/empty.llm.md +158 -0
- package/.llm/field-content.llm.md +28 -0
- package/.llm/field-description.llm.md +28 -0
- package/.llm/field-error.llm.md +41 -0
- package/.llm/field-group.llm.md +84 -0
- package/.llm/field-label.llm.md +28 -0
- package/.llm/field-legend.llm.md +77 -0
- package/.llm/field-separator.llm.md +35 -0
- package/.llm/field-set.llm.md +80 -0
- package/.llm/field-title.llm.md +28 -0
- package/.llm/field.llm.md +35 -0
- package/.llm/hover-card-content.llm.md +167 -0
- package/.llm/hover-card-trigger.llm.md +65 -0
- package/.llm/hover-card.llm.md +121 -0
- package/.llm/input-group-addon.llm.md +91 -0
- package/.llm/input-group-button.llm.md +120 -0
- package/.llm/input-group-input.llm.md +145 -0
- package/.llm/input-group-text.llm.md +75 -0
- package/.llm/input-group-textarea.llm.md +157 -0
- package/.llm/input-group.llm.md +108 -0
- package/.llm/input.llm.md +319 -0
- package/.llm/item-actions.llm.md +77 -0
- package/.llm/item-content.llm.md +73 -0
- package/.llm/item-description.llm.md +61 -0
- package/.llm/item-footer.llm.md +68 -0
- package/.llm/item-group.llm.md +73 -0
- package/.llm/item-header.llm.md +66 -0
- package/.llm/item-media.llm.md +75 -0
- package/.llm/item-separator.llm.md +80 -0
- package/.llm/item-title.llm.md +59 -0
- package/.llm/item.llm.md +115 -0
- package/.llm/kbd-group.llm.md +71 -0
- package/.llm/kbd.llm.md +71 -0
- package/.llm/label.llm.md +145 -0
- package/.llm/menubar-checkbox-item.llm.md +66 -0
- package/.llm/menubar-content.llm.md +128 -0
- package/.llm/menubar-group.llm.md +40 -0
- package/.llm/menubar-item.llm.md +62 -0
- package/.llm/menubar-label.llm.md +40 -0
- package/.llm/menubar-menu.llm.md +32 -0
- package/.llm/menubar-portal.llm.md +38 -0
- package/.llm/menubar-radio-group.llm.md +39 -0
- package/.llm/menubar-radio-item.llm.md +59 -0
- package/.llm/menubar-separator.llm.md +35 -0
- package/.llm/menubar-shortcut.llm.md +37 -0
- package/.llm/menubar-sub-content.llm.md +127 -0
- package/.llm/menubar-sub-trigger.llm.md +51 -0
- package/.llm/menubar-sub.llm.md +53 -0
- package/.llm/menubar-trigger.llm.md +37 -0
- package/.llm/menubar.llm.md +115 -0
- package/.llm/navigation-menu-content.llm.md +116 -0
- package/.llm/navigation-menu-indicator.llm.md +68 -0
- package/.llm/navigation-menu-item.llm.md +62 -0
- package/.llm/navigation-menu-link.llm.md +109 -0
- package/.llm/navigation-menu-list.llm.md +52 -0
- package/.llm/navigation-menu-trigger-style.llm.md +22 -0
- package/.llm/navigation-menu-trigger.llm.md +57 -0
- package/.llm/navigation-menu-viewport.llm.md +51 -0
- package/.llm/navigation-menu.llm.md +184 -0
- package/.llm/overline.llm.md +51 -0
- package/.llm/page-title.llm.md +52 -0
- package/.llm/pagination-content.llm.md +60 -0
- package/.llm/pagination-ellipsis.llm.md +107 -0
- package/.llm/pagination-item.llm.md +59 -0
- package/.llm/pagination-link.llm.md +150 -0
- package/.llm/pagination-next.llm.md +115 -0
- package/.llm/pagination-previous.llm.md +115 -0
- package/.llm/pagination.llm.md +190 -0
- package/.llm/popover-anchor.llm.md +53 -0
- package/.llm/popover-content.llm.md +109 -0
- package/.llm/popover-trigger.llm.md +54 -0
- package/.llm/popover.llm.md +116 -0
- package/.llm/progress.llm.md +76 -0
- package/.llm/radio-group-indicator.llm.md +28 -0
- package/.llm/radio-group-item.llm.md +40 -0
- package/.llm/radio-group.llm.md +76 -0
- package/.llm/resizable-handle.llm.md +156 -0
- package/.llm/resizable-panel-group.llm.md +149 -0
- package/.llm/resizable-panel.llm.md +157 -0
- package/.llm/scroll-area-corner.llm.md +41 -0
- package/.llm/scroll-area-thumb.llm.md +39 -0
- package/.llm/scroll-area-viewport.llm.md +60 -0
- package/.llm/scroll-area.llm.md +125 -0
- package/.llm/scroll-bar.llm.md +78 -0
- package/.llm/sdk-items-registry.json +2984 -0
- package/.llm/section-title.llm.md +48 -0
- package/.llm/select-content.llm.md +139 -0
- package/.llm/select-group.llm.md +60 -0
- package/.llm/select-item.llm.md +75 -0
- package/.llm/select-label.llm.md +62 -0
- package/.llm/select-scroll-down-button.llm.md +45 -0
- package/.llm/select-scroll-up-button.llm.md +45 -0
- package/.llm/select-separator.llm.md +59 -0
- package/.llm/select-trigger.llm.md +66 -0
- package/.llm/select-value.llm.md +67 -0
- package/.llm/select.llm.md +159 -0
- package/.llm/separator.llm.md +129 -0
- package/.llm/sheet-close.llm.md +49 -0
- package/.llm/sheet-content.llm.md +115 -0
- package/.llm/sheet-description.llm.md +62 -0
- package/.llm/sheet-footer.llm.md +64 -0
- package/.llm/sheet-header.llm.md +52 -0
- package/.llm/sheet-title.llm.md +53 -0
- package/.llm/sheet-trigger.llm.md +46 -0
- package/.llm/sheet.llm.md +126 -0
- package/.llm/sidebar-content.llm.md +63 -0
- package/.llm/sidebar-footer.llm.md +50 -0
- package/.llm/sidebar-group-action.llm.md +60 -0
- package/.llm/sidebar-group-content.llm.md +64 -0
- package/.llm/sidebar-group-label.llm.md +53 -0
- package/.llm/sidebar-group.llm.md +56 -0
- package/.llm/sidebar-header.llm.md +67 -0
- package/.llm/sidebar-input.llm.md +50 -0
- package/.llm/sidebar-inset.llm.md +52 -0
- package/.llm/sidebar-menu-action.llm.md +84 -0
- package/.llm/sidebar-menu-badge.llm.md +60 -0
- package/.llm/sidebar-menu-button.llm.md +103 -0
- package/.llm/sidebar-menu-item.llm.md +75 -0
- package/.llm/sidebar-menu-skeleton.llm.md +76 -0
- package/.llm/sidebar-menu-sub-button.llm.md +85 -0
- package/.llm/sidebar-menu-sub-item.llm.md +54 -0
- package/.llm/sidebar-menu-sub.llm.md +74 -0
- package/.llm/sidebar-menu.llm.md +65 -0
- package/.llm/sidebar-provider.llm.md +79 -0
- package/.llm/sidebar-rail.llm.md +34 -0
- package/.llm/sidebar-separator.llm.md +57 -0
- package/.llm/sidebar-trigger.llm.md +49 -0
- package/.llm/sidebar.llm.md +129 -0
- package/.llm/skeleton.llm.md +134 -0
- package/.llm/slider.llm.md +173 -0
- package/.llm/spinner.llm.md +182 -0
- package/.llm/stack.llm.md +28 -0
- package/.llm/subsection-title.llm.md +46 -0
- package/.llm/switch.llm.md +76 -0
- package/.llm/table-body.llm.md +36 -0
- package/.llm/table-caption.llm.md +48 -0
- package/.llm/table-cell.llm.md +53 -0
- package/.llm/table-footer.llm.md +41 -0
- package/.llm/table-head.llm.md +69 -0
- package/.llm/table-header.llm.md +41 -0
- package/.llm/table-row.llm.md +42 -0
- package/.llm/table.llm.md +123 -0
- package/.llm/tabs-content.llm.md +47 -0
- package/.llm/tabs-list.llm.md +41 -0
- package/.llm/tabs-trigger.llm.md +47 -0
- package/.llm/tabs.llm.md +71 -0
- package/.llm/text-field.llm.md +327 -0
- package/.llm/textarea.llm.md +311 -0
- package/.llm/theme-preference.llm.md +25 -0
- package/.llm/theme-toggle.llm.md +57 -0
- package/.llm/theme.llm.md +14 -0
- package/.llm/toaster.llm.md +193 -0
- package/.llm/toggle-group-item.llm.md +59 -0
- package/.llm/toggle-group.llm.md +101 -0
- package/.llm/toggle.llm.md +40 -0
- package/.llm/tooltip-content.llm.md +185 -0
- package/.llm/tooltip-provider.llm.md +68 -0
- package/.llm/tooltip-trigger.llm.md +70 -0
- package/.llm/tooltip.llm.md +129 -0
- package/.llm/use-carousel.llm.md +55 -0
- package/.llm/use-command-state.llm.md +32 -0
- package/.llm/use-is-mobile.llm.md +73 -0
- package/.llm/use-sidebar.llm.md +61 -0
- package/dist/components/ui/scroll-area.d.ts +5 -5
- package/dist/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/components/ui/stack.d.ts.map +1 -1
- package/dist/components/ui/stories/scroll-area.stories.d.ts +1 -1
- package/dist/components/ui/stories/typography.stories.d.ts +8 -108
- package/dist/components/ui/stories/typography.stories.d.ts.map +1 -1
- package/dist/components/ui/theme-toggle.d.ts +0 -3
- package/dist/components/ui/theme-toggle.d.ts.map +1 -1
- package/dist/components/ui/theme.d.ts.map +1 -1
- package/dist/components/ui/typography.d.ts +211 -474
- package/dist/components/ui/typography.d.ts.map +1 -1
- package/dist/index.js +5160 -9875
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/components/ui/stack.tsx +3 -1
- package/src/components/ui/stories/typography.stories.tsx +261 -1512
- package/src/components/ui/theme-toggle.tsx +1 -3
- package/src/components/ui/theme.tsx +6 -1
- package/src/components/ui/typography.tsx +416 -1136
- package/src/styles/globals.css +57 -106
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# InputGroupText
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
InputGroupText - Static text or label content within an InputGroupAddon A span element for displaying non-interactive text, labels, prefixes, suffixes, or icons within an input group addon. Styled with muted foreground colors and optimized spacing. Commonly used for currency symbols, units of measurement, URL protocols, or descriptive labels.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { InputGroupText } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<InputGroupText
|
|
13
|
+
className="value"
|
|
14
|
+
>
|
|
15
|
+
{/* Your content here */}
|
|
16
|
+
</InputGroupText>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Component Props
|
|
20
|
+
|
|
21
|
+
### className
|
|
22
|
+
- **Type**: `string`
|
|
23
|
+
- **Required**: No
|
|
24
|
+
- **Description**: No description available
|
|
25
|
+
|
|
26
|
+
### children
|
|
27
|
+
- **Type**: `React.ReactNode`
|
|
28
|
+
- **Required**: No
|
|
29
|
+
- **Description**: No description available
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
### Example 1
|
|
34
|
+
```tsx
|
|
35
|
+
// Currency symbol prefix
|
|
36
|
+
<InputGroup>
|
|
37
|
+
<InputGroupAddon align="inline-start">
|
|
38
|
+
<DollarSign className="size-4" />
|
|
39
|
+
</InputGroupAddon>
|
|
40
|
+
<InputGroupInput type="number" placeholder="0.00" />
|
|
41
|
+
<InputGroupAddon align="inline-end">
|
|
42
|
+
<InputGroupText>USD</InputGroupText>
|
|
43
|
+
</InputGroupAddon>
|
|
44
|
+
</InputGroup>
|
|
45
|
+
```
|
|
46
|
+
### Example 2
|
|
47
|
+
```tsx
|
|
48
|
+
// URL protocol prefix
|
|
49
|
+
<InputGroup>
|
|
50
|
+
<InputGroupAddon align="inline-start">
|
|
51
|
+
<InputGroupText>https://</InputGroupText>
|
|
52
|
+
</InputGroupAddon>
|
|
53
|
+
<InputGroupInput placeholder="example.com" />
|
|
54
|
+
</InputGroup>
|
|
55
|
+
```
|
|
56
|
+
### Example 3
|
|
57
|
+
```tsx
|
|
58
|
+
// Label for textarea
|
|
59
|
+
<InputGroup>
|
|
60
|
+
<InputGroupAddon align="block-start">
|
|
61
|
+
<InputGroupText>Message</InputGroupText>
|
|
62
|
+
</InputGroupAddon>
|
|
63
|
+
<InputGroupTextarea placeholder="Type your message..." />
|
|
64
|
+
</InputGroup>
|
|
65
|
+
```
|
|
66
|
+
### Example 4
|
|
67
|
+
```tsx
|
|
68
|
+
// Character counter
|
|
69
|
+
<InputGroup>
|
|
70
|
+
<InputGroupTextarea placeholder="Comment..." />
|
|
71
|
+
<InputGroupAddon align="block-end">
|
|
72
|
+
<InputGroupText className="text-xs">250 characters</InputGroupText>
|
|
73
|
+
</InputGroupAddon>
|
|
74
|
+
</InputGroup>
|
|
75
|
+
```
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# InputGroupTextarea
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
InputGroupTextarea - Multi-line textarea element within an InputGroup A styled textarea component designed to work with InputGroup, especially with block-aligned addons (top/bottom positioning). Removes default borders and shadows as the parent InputGroup handles visual states. Resizing is disabled by default to maintain consistent layout with the container. Automatically flexes to fill available space.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { InputGroupTextarea } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<InputGroupTextarea
|
|
13
|
+
className="value"
|
|
14
|
+
placeholder="value"
|
|
15
|
+
rows={0}
|
|
16
|
+
value="value"
|
|
17
|
+
defaultValue="value"
|
|
18
|
+
onChange={handleChange}
|
|
19
|
+
disabled={true}
|
|
20
|
+
readOnly={true}
|
|
21
|
+
"aria-invalid"={value}
|
|
22
|
+
name="value"
|
|
23
|
+
id="value"
|
|
24
|
+
required={true}
|
|
25
|
+
maxLength={0}
|
|
26
|
+
/>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Component Props
|
|
30
|
+
|
|
31
|
+
### className
|
|
32
|
+
- **Type**: `string`
|
|
33
|
+
- **Required**: No
|
|
34
|
+
- **Description**: No description available
|
|
35
|
+
|
|
36
|
+
### placeholder
|
|
37
|
+
- **Type**: `string`
|
|
38
|
+
- **Required**: No
|
|
39
|
+
- **Description**: No description available
|
|
40
|
+
|
|
41
|
+
### rows
|
|
42
|
+
- **Type**: `number`
|
|
43
|
+
- **Required**: No
|
|
44
|
+
- **Description**: No description available
|
|
45
|
+
|
|
46
|
+
### value
|
|
47
|
+
- **Type**: `string`
|
|
48
|
+
- **Required**: No
|
|
49
|
+
- **Description**: No description available
|
|
50
|
+
|
|
51
|
+
### defaultValue
|
|
52
|
+
- **Type**: `string`
|
|
53
|
+
- **Required**: No
|
|
54
|
+
- **Description**: No description available
|
|
55
|
+
|
|
56
|
+
### onChange
|
|
57
|
+
- **Type**: `React.ChangeEventHandler<HTMLTextAreaElement>`
|
|
58
|
+
- **Required**: No
|
|
59
|
+
- **Description**: No description available
|
|
60
|
+
|
|
61
|
+
### disabled
|
|
62
|
+
- **Type**: `boolean`
|
|
63
|
+
- **Required**: No
|
|
64
|
+
- **Description**: No description available
|
|
65
|
+
|
|
66
|
+
### readOnly
|
|
67
|
+
- **Type**: `boolean`
|
|
68
|
+
- **Required**: No
|
|
69
|
+
- **Description**: No description available
|
|
70
|
+
|
|
71
|
+
### "aria-invalid"
|
|
72
|
+
- **Type**: `boolean | "true" | "false"`
|
|
73
|
+
- **Required**: No
|
|
74
|
+
- **Description**: No description available
|
|
75
|
+
|
|
76
|
+
### name
|
|
77
|
+
- **Type**: `string`
|
|
78
|
+
- **Required**: No
|
|
79
|
+
- **Description**: No description available
|
|
80
|
+
|
|
81
|
+
### id
|
|
82
|
+
- **Type**: `string`
|
|
83
|
+
- **Required**: No
|
|
84
|
+
- **Description**: No description available
|
|
85
|
+
|
|
86
|
+
### required
|
|
87
|
+
- **Type**: `boolean`
|
|
88
|
+
- **Required**: No
|
|
89
|
+
- **Description**: No description available
|
|
90
|
+
|
|
91
|
+
### maxLength
|
|
92
|
+
- **Type**: `number`
|
|
93
|
+
- **Required**: No
|
|
94
|
+
- **Description**: No description available
|
|
95
|
+
|
|
96
|
+
## Examples
|
|
97
|
+
|
|
98
|
+
### Example 1
|
|
99
|
+
```tsx
|
|
100
|
+
// Basic textarea with label addon
|
|
101
|
+
<InputGroup>
|
|
102
|
+
<InputGroupAddon align="block-start">
|
|
103
|
+
<InputGroupText>Message</InputGroupText>
|
|
104
|
+
</InputGroupAddon>
|
|
105
|
+
<InputGroupTextarea placeholder="Type your message here..." />
|
|
106
|
+
</InputGroup>
|
|
107
|
+
```
|
|
108
|
+
### Example 2
|
|
109
|
+
```tsx
|
|
110
|
+
// Textarea with submit button below
|
|
111
|
+
<InputGroup>
|
|
112
|
+
<InputGroupTextarea placeholder="Write your comment..." rows={4} />
|
|
113
|
+
<InputGroupAddon align="block-end">
|
|
114
|
+
<InputGroupButton size="sm">
|
|
115
|
+
<Send className="size-4" />
|
|
116
|
+
Post
|
|
117
|
+
</InputGroupButton>
|
|
118
|
+
</InputGroupAddon>
|
|
119
|
+
</InputGroup>
|
|
120
|
+
```
|
|
121
|
+
### Example 3
|
|
122
|
+
```tsx
|
|
123
|
+
// Complete comment form with top and bottom addons
|
|
124
|
+
<InputGroup>
|
|
125
|
+
<InputGroupAddon align="block-start">
|
|
126
|
+
<InputGroupText>Your Comment</InputGroupText>
|
|
127
|
+
<InputGroupButton size="icon-xs">
|
|
128
|
+
<X className="size-4" />
|
|
129
|
+
</InputGroupButton>
|
|
130
|
+
</InputGroupAddon>
|
|
131
|
+
<InputGroupTextarea placeholder="Add a comment..." rows={3} />
|
|
132
|
+
<InputGroupAddon align="block-end">
|
|
133
|
+
<InputGroupButton size="sm" variant="default">
|
|
134
|
+
Post Comment
|
|
135
|
+
</InputGroupButton>
|
|
136
|
+
</InputGroupAddon>
|
|
137
|
+
</InputGroup>
|
|
138
|
+
```
|
|
139
|
+
### Example 4
|
|
140
|
+
```tsx
|
|
141
|
+
// Textarea with character counter
|
|
142
|
+
const [message, setMessage] = useState("");
|
|
143
|
+
<InputGroup>
|
|
144
|
+
<InputGroupTextarea
|
|
145
|
+
placeholder="Compose your message..."
|
|
146
|
+
value={message}
|
|
147
|
+
onChange={(e) => setMessage(e.target.value)}
|
|
148
|
+
rows={5}
|
|
149
|
+
/>
|
|
150
|
+
<InputGroupAddon align="block-end">
|
|
151
|
+
<InputGroupText className="text-xs">
|
|
152
|
+
{message.length} characters
|
|
153
|
+
</InputGroupText>
|
|
154
|
+
<InputGroupButton size="sm">Send</InputGroupButton>
|
|
155
|
+
</InputGroupAddon>
|
|
156
|
+
</InputGroup>
|
|
157
|
+
```
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# InputGroup
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
InputGroup - Container for inputs with integrated addons, buttons, and text A flexible container component that combines text inputs or textareas with decorative or functional elements like icons, buttons, labels, and keyboard shortcuts. Supports both inline (left/right) and block (top/bottom) addon positioning for diverse layout needs. Provides unified focus states, error handling, and disabled states across all child elements.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { InputGroup } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<InputGroup
|
|
13
|
+
className="value"
|
|
14
|
+
"data-disabled"={value}
|
|
15
|
+
>
|
|
16
|
+
{/* Your content here */}
|
|
17
|
+
</InputGroup>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Component Props
|
|
21
|
+
|
|
22
|
+
### className
|
|
23
|
+
- **Type**: `string`
|
|
24
|
+
- **Required**: No
|
|
25
|
+
- **Description**: No description available
|
|
26
|
+
|
|
27
|
+
### children
|
|
28
|
+
- **Type**: `React.ReactNode`
|
|
29
|
+
- **Required**: No
|
|
30
|
+
- **Description**: No description available
|
|
31
|
+
|
|
32
|
+
### "data-disabled"
|
|
33
|
+
- **Type**: `"true" | "false"`
|
|
34
|
+
- **Required**: No
|
|
35
|
+
- **Description**: No description available
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
|
|
39
|
+
### Example 1
|
|
40
|
+
```tsx
|
|
41
|
+
// Search input with icon and keyboard shortcut
|
|
42
|
+
<InputGroup>
|
|
43
|
+
<InputGroupAddon align="inline-start">
|
|
44
|
+
<Search className="size-4" />
|
|
45
|
+
</InputGroupAddon>
|
|
46
|
+
<InputGroupInput placeholder="Search..." />
|
|
47
|
+
<InputGroupAddon align="inline-end">
|
|
48
|
+
<Kbd>⌘K</Kbd>
|
|
49
|
+
</InputGroupAddon>
|
|
50
|
+
</InputGroup>
|
|
51
|
+
```
|
|
52
|
+
### Example 2
|
|
53
|
+
```tsx
|
|
54
|
+
// Email subscription form with submit button
|
|
55
|
+
<InputGroup>
|
|
56
|
+
<InputGroupAddon align="inline-start">
|
|
57
|
+
<Mail className="size-4" />
|
|
58
|
+
</InputGroupAddon>
|
|
59
|
+
<InputGroupInput type="email" placeholder="Enter your email" />
|
|
60
|
+
<InputGroupAddon align="inline-end">
|
|
61
|
+
<InputGroupButton size="sm">Subscribe</InputGroupButton>
|
|
62
|
+
</InputGroupAddon>
|
|
63
|
+
</InputGroup>
|
|
64
|
+
```
|
|
65
|
+
### Example 3
|
|
66
|
+
```tsx
|
|
67
|
+
// Price input with currency indicators
|
|
68
|
+
<InputGroup>
|
|
69
|
+
<InputGroupAddon align="inline-start">
|
|
70
|
+
<DollarSign className="size-4" />
|
|
71
|
+
</InputGroupAddon>
|
|
72
|
+
<InputGroupInput type="number" placeholder="0.00" />
|
|
73
|
+
<InputGroupAddon align="inline-end">
|
|
74
|
+
<InputGroupText>USD</InputGroupText>
|
|
75
|
+
</InputGroupAddon>
|
|
76
|
+
</InputGroup>
|
|
77
|
+
```
|
|
78
|
+
### Example 4
|
|
79
|
+
```tsx
|
|
80
|
+
// Comment textarea with block addons
|
|
81
|
+
<InputGroup>
|
|
82
|
+
<InputGroupAddon align="block-start">
|
|
83
|
+
<InputGroupText>Your Comment</InputGroupText>
|
|
84
|
+
</InputGroupAddon>
|
|
85
|
+
<InputGroupTextarea placeholder="Write your comment..." rows={4} />
|
|
86
|
+
<InputGroupAddon align="block-end">
|
|
87
|
+
<InputGroupButton size="sm">
|
|
88
|
+
<Send className="size-4" />
|
|
89
|
+
Post
|
|
90
|
+
</InputGroupButton>
|
|
91
|
+
</InputGroupAddon>
|
|
92
|
+
</InputGroup>
|
|
93
|
+
```
|
|
94
|
+
### Example 5
|
|
95
|
+
```tsx
|
|
96
|
+
// Error state with aria-invalid
|
|
97
|
+
<InputGroup>
|
|
98
|
+
<InputGroupAddon align="inline-start">
|
|
99
|
+
<Mail className="size-4" />
|
|
100
|
+
</InputGroupAddon>
|
|
101
|
+
<InputGroupInput
|
|
102
|
+
type="email"
|
|
103
|
+
placeholder="Email"
|
|
104
|
+
aria-invalid="true"
|
|
105
|
+
defaultValue="invalid-email"
|
|
106
|
+
/>
|
|
107
|
+
</InputGroup>
|
|
108
|
+
```
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
# Input
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Input - Versatile form input component for text, email, password, and other input types A flexible and accessible input component built on native HTML input elements with enhanced styling and form integration capabilities. Supports all HTML input types including text, email, password, number, file, date, and more. Features consistent design tokens, error states, focus management, and seamless integration with form libraries like React Hook Form.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { Input } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<Input
|
|
13
|
+
type={value}
|
|
14
|
+
placeholder="value"
|
|
15
|
+
value={value}
|
|
16
|
+
defaultValue={value}
|
|
17
|
+
disabled={true}
|
|
18
|
+
required={true}
|
|
19
|
+
readOnly={true}
|
|
20
|
+
id="value"
|
|
21
|
+
name="value"
|
|
22
|
+
autoComplete="value"
|
|
23
|
+
autoFocus={true}
|
|
24
|
+
maxLength={0}
|
|
25
|
+
minLength={0}
|
|
26
|
+
pattern="value"
|
|
27
|
+
min={value}
|
|
28
|
+
max={value}
|
|
29
|
+
step={value}
|
|
30
|
+
onChange={handleChange}
|
|
31
|
+
onFocus={handleFocus}
|
|
32
|
+
onBlur={handleBlur}
|
|
33
|
+
onKeyDown={handleKeyDown}
|
|
34
|
+
onKeyUp={handleKeyUp}
|
|
35
|
+
"aria-invalid"={value}
|
|
36
|
+
"aria-describedby"="value"
|
|
37
|
+
"aria-labelledby"="value"
|
|
38
|
+
"aria-label"="value"
|
|
39
|
+
"aria-required"={value}
|
|
40
|
+
className="value"
|
|
41
|
+
/>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Component Props
|
|
45
|
+
|
|
46
|
+
### type
|
|
47
|
+
- **Type**: `React.HTMLInputTypeAttribute`
|
|
48
|
+
- **Required**: No
|
|
49
|
+
- **Description**: No description available
|
|
50
|
+
|
|
51
|
+
### placeholder
|
|
52
|
+
- **Type**: `string`
|
|
53
|
+
- **Required**: No
|
|
54
|
+
- **Description**: No description available
|
|
55
|
+
|
|
56
|
+
### value
|
|
57
|
+
- **Type**: `string | ReadonlyArray<string> | number`
|
|
58
|
+
- **Required**: No
|
|
59
|
+
- **Description**: No description available
|
|
60
|
+
|
|
61
|
+
### defaultValue
|
|
62
|
+
- **Type**: `string | ReadonlyArray<string> | number`
|
|
63
|
+
- **Required**: No
|
|
64
|
+
- **Description**: No description available
|
|
65
|
+
|
|
66
|
+
### disabled
|
|
67
|
+
- **Type**: `boolean`
|
|
68
|
+
- **Required**: No
|
|
69
|
+
- **Description**: No description available
|
|
70
|
+
|
|
71
|
+
### required
|
|
72
|
+
- **Type**: `boolean`
|
|
73
|
+
- **Required**: No
|
|
74
|
+
- **Description**: No description available
|
|
75
|
+
|
|
76
|
+
### readOnly
|
|
77
|
+
- **Type**: `boolean`
|
|
78
|
+
- **Required**: No
|
|
79
|
+
- **Description**: No description available
|
|
80
|
+
|
|
81
|
+
### id
|
|
82
|
+
- **Type**: `string`
|
|
83
|
+
- **Required**: No
|
|
84
|
+
- **Description**: No description available
|
|
85
|
+
|
|
86
|
+
### name
|
|
87
|
+
- **Type**: `string`
|
|
88
|
+
- **Required**: No
|
|
89
|
+
- **Description**: No description available
|
|
90
|
+
|
|
91
|
+
### autoComplete
|
|
92
|
+
- **Type**: `string`
|
|
93
|
+
- **Required**: No
|
|
94
|
+
- **Description**: No description available
|
|
95
|
+
|
|
96
|
+
### autoFocus
|
|
97
|
+
- **Type**: `boolean`
|
|
98
|
+
- **Required**: No
|
|
99
|
+
- **Description**: No description available
|
|
100
|
+
|
|
101
|
+
### maxLength
|
|
102
|
+
- **Type**: `number`
|
|
103
|
+
- **Required**: No
|
|
104
|
+
- **Description**: No description available
|
|
105
|
+
|
|
106
|
+
### minLength
|
|
107
|
+
- **Type**: `number`
|
|
108
|
+
- **Required**: No
|
|
109
|
+
- **Description**: No description available
|
|
110
|
+
|
|
111
|
+
### pattern
|
|
112
|
+
- **Type**: `string`
|
|
113
|
+
- **Required**: No
|
|
114
|
+
- **Description**: No description available
|
|
115
|
+
|
|
116
|
+
### min
|
|
117
|
+
- **Type**: `string | number`
|
|
118
|
+
- **Required**: No
|
|
119
|
+
- **Description**: No description available
|
|
120
|
+
|
|
121
|
+
### max
|
|
122
|
+
- **Type**: `string | number`
|
|
123
|
+
- **Required**: No
|
|
124
|
+
- **Description**: No description available
|
|
125
|
+
|
|
126
|
+
### step
|
|
127
|
+
- **Type**: `string | number`
|
|
128
|
+
- **Required**: No
|
|
129
|
+
- **Description**: No description available
|
|
130
|
+
|
|
131
|
+
### onChange
|
|
132
|
+
- **Type**: `(event: React.ChangeEvent<HTMLInputElement>) => void`
|
|
133
|
+
- **Required**: No
|
|
134
|
+
- **Description**: No description available
|
|
135
|
+
|
|
136
|
+
### onFocus
|
|
137
|
+
- **Type**: `(event: React.FocusEvent<HTMLInputElement>) => void`
|
|
138
|
+
- **Required**: No
|
|
139
|
+
- **Description**: No description available
|
|
140
|
+
|
|
141
|
+
### onBlur
|
|
142
|
+
- **Type**: `(event: React.FocusEvent<HTMLInputElement>) => void`
|
|
143
|
+
- **Required**: No
|
|
144
|
+
- **Description**: No description available
|
|
145
|
+
|
|
146
|
+
### onKeyDown
|
|
147
|
+
- **Type**: `(event: React.KeyboardEvent<HTMLInputElement>) => void`
|
|
148
|
+
- **Required**: No
|
|
149
|
+
- **Description**: No description available
|
|
150
|
+
|
|
151
|
+
### onKeyUp
|
|
152
|
+
- **Type**: `(event: React.KeyboardEvent<HTMLInputElement>) => void`
|
|
153
|
+
- **Required**: No
|
|
154
|
+
- **Description**: No description available
|
|
155
|
+
|
|
156
|
+
### "aria-invalid"
|
|
157
|
+
- **Type**: `boolean | "false" | "true" | "grammar" | "spelling"`
|
|
158
|
+
- **Required**: No
|
|
159
|
+
- **Description**: No description available
|
|
160
|
+
|
|
161
|
+
### "aria-describedby"
|
|
162
|
+
- **Type**: `string`
|
|
163
|
+
- **Required**: No
|
|
164
|
+
- **Description**: No description available
|
|
165
|
+
|
|
166
|
+
### "aria-labelledby"
|
|
167
|
+
- **Type**: `string`
|
|
168
|
+
- **Required**: No
|
|
169
|
+
- **Description**: No description available
|
|
170
|
+
|
|
171
|
+
### "aria-label"
|
|
172
|
+
- **Type**: `string`
|
|
173
|
+
- **Required**: No
|
|
174
|
+
- **Description**: No description available
|
|
175
|
+
|
|
176
|
+
### "aria-required"
|
|
177
|
+
- **Type**: `boolean | "false" | "true"`
|
|
178
|
+
- **Required**: No
|
|
179
|
+
- **Description**: No description available
|
|
180
|
+
|
|
181
|
+
### className
|
|
182
|
+
- **Type**: `string`
|
|
183
|
+
- **Required**: No
|
|
184
|
+
- **Description**: No description available
|
|
185
|
+
|
|
186
|
+
## Examples
|
|
187
|
+
|
|
188
|
+
### Example 1
|
|
189
|
+
```tsx
|
|
190
|
+
// Basic text input
|
|
191
|
+
<Input type="text" placeholder="Enter your name" />
|
|
192
|
+
```
|
|
193
|
+
### Example 2
|
|
194
|
+
```tsx
|
|
195
|
+
// Email input with validation
|
|
196
|
+
<Input
|
|
197
|
+
type="email"
|
|
198
|
+
placeholder="your
|
|
199
|
+
### Example 3
|
|
200
|
+
```tsx
|
|
201
|
+
// Password input with toggle visibility
|
|
202
|
+
<div className="relative">
|
|
203
|
+
<Input
|
|
204
|
+
type="password"
|
|
205
|
+
placeholder="Enter password"
|
|
206
|
+
autoComplete="current-password"
|
|
207
|
+
/>
|
|
208
|
+
<Button
|
|
209
|
+
type="button"
|
|
210
|
+
variant="ghost"
|
|
211
|
+
size="sm"
|
|
212
|
+
className="absolute right-0 top-0 h-full px-3"
|
|
213
|
+
>
|
|
214
|
+
<Eye className="h-4 w-4" />
|
|
215
|
+
</Button>
|
|
216
|
+
</div>
|
|
217
|
+
```
|
|
218
|
+
### Example 4
|
|
219
|
+
```tsx
|
|
220
|
+
// Number input with min/max constraints
|
|
221
|
+
<Input
|
|
222
|
+
type="number"
|
|
223
|
+
placeholder="Age"
|
|
224
|
+
min={0}
|
|
225
|
+
max={120}
|
|
226
|
+
step={1}
|
|
227
|
+
/>
|
|
228
|
+
```
|
|
229
|
+
### Example 5
|
|
230
|
+
```tsx
|
|
231
|
+
// File input with proper labeling
|
|
232
|
+
<div className="grid w-full max-w-sm items-center gap-1.5">
|
|
233
|
+
<Label htmlFor="picture">Profile Picture</Label>
|
|
234
|
+
<Input
|
|
235
|
+
id="picture"
|
|
236
|
+
type="file"
|
|
237
|
+
accept="image/*"
|
|
238
|
+
aria-describedby="file-help"
|
|
239
|
+
/>
|
|
240
|
+
<p id="file-help" className="text-sm text-muted-foreground">
|
|
241
|
+
Upload a PNG, JPG or GIF (max 5MB)
|
|
242
|
+
</p>
|
|
243
|
+
</div>
|
|
244
|
+
```
|
|
245
|
+
### Example 6
|
|
246
|
+
```tsx
|
|
247
|
+
// Search input with icon
|
|
248
|
+
<div className="relative">
|
|
249
|
+
<Search className="absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 transform text-muted-foreground" />
|
|
250
|
+
<Input
|
|
251
|
+
type="search"
|
|
252
|
+
placeholder="Search..."
|
|
253
|
+
className="pl-8"
|
|
254
|
+
/>
|
|
255
|
+
</div>
|
|
256
|
+
```
|
|
257
|
+
### Example 7
|
|
258
|
+
```tsx
|
|
259
|
+
// Input with error state
|
|
260
|
+
<div className="space-y-2">
|
|
261
|
+
<Label htmlFor="email">Email</Label>
|
|
262
|
+
<Input
|
|
263
|
+
id="email"
|
|
264
|
+
type="email"
|
|
265
|
+
aria-invalid={true}
|
|
266
|
+
aria-describedby="email-error"
|
|
267
|
+
/>
|
|
268
|
+
<p id="email-error" className="text-sm text-destructive">
|
|
269
|
+
Please enter a valid email address
|
|
270
|
+
</p>
|
|
271
|
+
</div>
|
|
272
|
+
```
|
|
273
|
+
### Example 8
|
|
274
|
+
```tsx
|
|
275
|
+
// Form integration with React Hook Form
|
|
276
|
+
const { register, formState: { errors } } = useForm();
|
|
277
|
+
<div className="space-y-2">
|
|
278
|
+
<Label htmlFor="username">Username</Label>
|
|
279
|
+
<Input
|
|
280
|
+
id="username"
|
|
281
|
+
{...register("username", { required: "Username is required" })}
|
|
282
|
+
aria-invalid={!!errors.username}
|
|
283
|
+
aria-describedby={errors.username ? "username-error" : undefined}
|
|
284
|
+
/>
|
|
285
|
+
{errors.username && (
|
|
286
|
+
<p id="username-error" className="text-sm text-destructive">
|
|
287
|
+
{errors.username.message}
|
|
288
|
+
</p>
|
|
289
|
+
)}
|
|
290
|
+
</div>
|
|
291
|
+
```
|
|
292
|
+
### Example 9
|
|
293
|
+
```tsx
|
|
294
|
+
// Input with button (subscription form)
|
|
295
|
+
<div className="flex w-full max-w-sm items-center space-x-2">
|
|
296
|
+
<Input
|
|
297
|
+
type="email"
|
|
298
|
+
placeholder="Enter your email"
|
|
299
|
+
aria-label="Email for newsletter"
|
|
300
|
+
/>
|
|
301
|
+
<Button type="submit">Subscribe</Button>
|
|
302
|
+
</div>
|
|
303
|
+
```
|
|
304
|
+
### Example 10
|
|
305
|
+
```tsx
|
|
306
|
+
// Disabled input with explanation
|
|
307
|
+
<div className="space-y-2">
|
|
308
|
+
<Label htmlFor="readonly-field">System Generated ID</Label>
|
|
309
|
+
<Input
|
|
310
|
+
id="readonly-field"
|
|
311
|
+
value="SYS-12345"
|
|
312
|
+
disabled
|
|
313
|
+
aria-describedby="readonly-help"
|
|
314
|
+
/>
|
|
315
|
+
<p id="readonly-help" className="text-sm text-muted-foreground">
|
|
316
|
+
This value is automatically generated and cannot be edited
|
|
317
|
+
</p>
|
|
318
|
+
</div>
|
|
319
|
+
```
|