@neynar/ui 0.1.2 → 0.2.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/dist/components/ui/stack.d.ts +2 -1
- package/dist/components/ui/stack.d.ts.map +1 -1
- package/dist/components/ui/stories/stack.stories.d.ts +1 -1
- package/dist/components/ui/stories/typography.stories.d.ts.map +1 -1
- package/dist/components/ui/typography.d.ts +41 -40
- package/dist/components/ui/typography.d.ts.map +1 -1
- package/dist/index.js +26807 -18714
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/llm/components/typography.md +92 -88
- package/llm-docs/a.llm.md +145 -0
- package/llm-docs/accordion-content.llm.md +67 -0
- package/llm-docs/accordion-item.llm.md +61 -0
- package/llm-docs/accordion-trigger.llm.md +69 -0
- package/llm-docs/accordion.llm.md +88 -0
- package/llm-docs/alert-description.llm.md +78 -0
- package/llm-docs/alert-dialog-action.llm.md +51 -0
- package/llm-docs/alert-dialog-cancel.llm.md +48 -0
- package/llm-docs/alert-dialog-content.llm.md +88 -0
- package/llm-docs/alert-dialog-description.llm.md +53 -0
- package/llm-docs/alert-dialog-footer.llm.md +41 -0
- package/llm-docs/alert-dialog-header.llm.md +39 -0
- package/llm-docs/alert-dialog-overlay.llm.md +44 -0
- package/llm-docs/alert-dialog-portal.llm.md +41 -0
- package/llm-docs/alert-dialog-title.llm.md +46 -0
- package/llm-docs/alert-dialog-trigger.llm.md +40 -0
- package/llm-docs/alert-dialog.llm.md +80 -0
- package/llm-docs/alert-title.llm.md +48 -0
- package/llm-docs/alert.llm.md +92 -0
- package/llm-docs/aspect-ratio.llm.md +41 -0
- package/llm-docs/avatar-fallback.llm.md +41 -0
- package/llm-docs/avatar-image.llm.md +48 -0
- package/llm-docs/avatar.llm.md +35 -0
- package/llm-docs/badge.llm.md +108 -0
- package/llm-docs/blockquote.llm.md +122 -0
- package/llm-docs/breadcrumb-ellipsis.llm.md +73 -0
- package/llm-docs/breadcrumb-item.llm.md +53 -0
- package/llm-docs/breadcrumb-link.llm.md +84 -0
- package/llm-docs/breadcrumb-list.llm.md +54 -0
- package/llm-docs/breadcrumb-page.llm.md +52 -0
- package/llm-docs/breadcrumb-separator.llm.md +60 -0
- package/llm-docs/breadcrumb.llm.md +110 -0
- package/llm-docs/button.llm.md +281 -0
- package/llm-docs/calendar-day-button.llm.md +57 -0
- package/llm-docs/calendar.llm.md +340 -0
- package/llm-docs/card-action.llm.md +64 -0
- package/llm-docs/card-content.llm.md +48 -0
- package/llm-docs/card-description.llm.md +46 -0
- package/llm-docs/card-footer.llm.md +56 -0
- package/llm-docs/card-header.llm.md +53 -0
- package/llm-docs/card-title.llm.md +43 -0
- package/llm-docs/card.llm.md +100 -0
- package/llm-docs/carousel-content.llm.md +77 -0
- package/llm-docs/carousel-item.llm.md +96 -0
- package/llm-docs/carousel-next.llm.md +95 -0
- package/llm-docs/carousel-previous.llm.md +95 -0
- package/llm-docs/carousel.llm.md +211 -0
- package/llm-docs/chart-config.llm.md +71 -0
- package/llm-docs/chart-container.llm.md +148 -0
- package/llm-docs/chart-legend-content.llm.md +85 -0
- package/llm-docs/chart-legend.llm.md +144 -0
- package/llm-docs/chart-style.llm.md +28 -0
- package/llm-docs/chart-tooltip-content.llm.md +149 -0
- package/llm-docs/chart-tooltip.llm.md +184 -0
- package/llm-docs/checkbox.llm.md +100 -0
- package/llm-docs/cn.llm.md +46 -0
- package/llm-docs/code.llm.md +108 -0
- package/llm-docs/collapsible-content.llm.md +109 -0
- package/llm-docs/collapsible-trigger.llm.md +75 -0
- package/llm-docs/collapsible.llm.md +109 -0
- package/llm-docs/combobox-option.llm.md +53 -0
- package/llm-docs/combobox.llm.md +208 -0
- package/llm-docs/command-dialog.llm.md +112 -0
- package/llm-docs/command-empty.llm.md +63 -0
- package/llm-docs/command-group.llm.md +83 -0
- package/llm-docs/command-input.llm.md +82 -0
- package/llm-docs/command-item.llm.md +97 -0
- package/llm-docs/command-list.llm.md +53 -0
- package/llm-docs/command-loading.llm.md +48 -0
- package/llm-docs/command-separator.llm.md +44 -0
- package/llm-docs/command-shortcut.llm.md +63 -0
- package/llm-docs/command.llm.md +147 -0
- package/llm-docs/container.llm.md +236 -0
- package/llm-docs/context-menu-checkbox-item.llm.md +97 -0
- package/llm-docs/context-menu-content.llm.md +91 -0
- package/llm-docs/context-menu-group.llm.md +61 -0
- package/llm-docs/context-menu-item.llm.md +94 -0
- package/llm-docs/context-menu-label.llm.md +60 -0
- package/llm-docs/context-menu-portal.llm.md +49 -0
- package/llm-docs/context-menu-radio-group.llm.md +66 -0
- package/llm-docs/context-menu-radio-item.llm.md +76 -0
- package/llm-docs/context-menu-separator.llm.md +51 -0
- package/llm-docs/context-menu-shortcut.llm.md +57 -0
- package/llm-docs/context-menu-sub-content.llm.md +90 -0
- package/llm-docs/context-menu-sub-trigger.llm.md +73 -0
- package/llm-docs/context-menu-sub.llm.md +61 -0
- package/llm-docs/context-menu-trigger.llm.md +53 -0
- package/llm-docs/context-menu.llm.md +103 -0
- package/llm-docs/date-picker.llm.md +90 -0
- package/llm-docs/dialog-close.llm.md +61 -0
- package/llm-docs/dialog-content.llm.md +128 -0
- package/llm-docs/dialog-description.llm.md +44 -0
- package/llm-docs/dialog-footer.llm.md +38 -0
- package/llm-docs/dialog-header.llm.md +40 -0
- package/llm-docs/dialog-overlay.llm.md +57 -0
- package/llm-docs/dialog-portal.llm.md +47 -0
- package/llm-docs/dialog-title.llm.md +41 -0
- package/llm-docs/dialog-trigger.llm.md +51 -0
- package/llm-docs/dialog.llm.md +113 -0
- package/llm-docs/drawer-close.llm.md +53 -0
- package/llm-docs/drawer-content.llm.md +58 -0
- package/llm-docs/drawer-description.llm.md +54 -0
- package/llm-docs/drawer-footer.llm.md +67 -0
- package/llm-docs/drawer-header.llm.md +60 -0
- package/llm-docs/drawer-overlay.llm.md +40 -0
- package/llm-docs/drawer-portal.llm.md +42 -0
- package/llm-docs/drawer-title.llm.md +51 -0
- package/llm-docs/drawer-trigger.llm.md +44 -0
- package/llm-docs/drawer.llm.md +194 -0
- package/llm-docs/dropdown-menu-checkbox-item.llm.md +111 -0
- package/llm-docs/dropdown-menu-content.llm.md +109 -0
- package/llm-docs/dropdown-menu-group.llm.md +38 -0
- package/llm-docs/dropdown-menu-item.llm.md +94 -0
- package/llm-docs/dropdown-menu-label.llm.md +66 -0
- package/llm-docs/dropdown-menu-portal.llm.md +32 -0
- package/llm-docs/dropdown-menu-radio-group.llm.md +73 -0
- package/llm-docs/dropdown-menu-radio-item.llm.md +92 -0
- package/llm-docs/dropdown-menu-separator.llm.md +55 -0
- package/llm-docs/dropdown-menu-shortcut.llm.md +74 -0
- package/llm-docs/dropdown-menu-sub-content.llm.md +80 -0
- package/llm-docs/dropdown-menu-sub-trigger.llm.md +84 -0
- package/llm-docs/dropdown-menu-sub.llm.md +74 -0
- package/llm-docs/dropdown-menu-trigger.llm.md +48 -0
- package/llm-docs/dropdown-menu.llm.md +120 -0
- package/llm-docs/empty-state.llm.md +174 -0
- package/llm-docs/h1.llm.md +113 -0
- package/llm-docs/h2.llm.md +113 -0
- package/llm-docs/h3.llm.md +111 -0
- package/llm-docs/h4.llm.md +109 -0
- package/llm-docs/h5.llm.md +110 -0
- package/llm-docs/h6.llm.md +110 -0
- package/llm-docs/hover-card-content.llm.md +167 -0
- package/llm-docs/hover-card-trigger.llm.md +65 -0
- package/llm-docs/hover-card.llm.md +121 -0
- package/llm-docs/input.llm.md +319 -0
- package/llm-docs/label.llm.md +145 -0
- package/llm-docs/lead.llm.md +119 -0
- package/llm-docs/menubar-checkbox-item.llm.md +66 -0
- package/llm-docs/menubar-content.llm.md +128 -0
- package/llm-docs/menubar-group.llm.md +40 -0
- package/llm-docs/menubar-item.llm.md +62 -0
- package/llm-docs/menubar-label.llm.md +40 -0
- package/llm-docs/menubar-menu.llm.md +32 -0
- package/llm-docs/menubar-portal.llm.md +38 -0
- package/llm-docs/menubar-radio-group.llm.md +39 -0
- package/llm-docs/menubar-radio-item.llm.md +59 -0
- package/llm-docs/menubar-separator.llm.md +35 -0
- package/llm-docs/menubar-shortcut.llm.md +37 -0
- package/llm-docs/menubar-sub-content.llm.md +127 -0
- package/llm-docs/menubar-sub-trigger.llm.md +51 -0
- package/llm-docs/menubar-sub.llm.md +53 -0
- package/llm-docs/menubar-trigger.llm.md +37 -0
- package/llm-docs/menubar.llm.md +115 -0
- package/llm-docs/navigation-menu-content.llm.md +116 -0
- package/llm-docs/navigation-menu-indicator.llm.md +68 -0
- package/llm-docs/navigation-menu-item.llm.md +62 -0
- package/llm-docs/navigation-menu-link.llm.md +109 -0
- package/llm-docs/navigation-menu-list.llm.md +52 -0
- package/llm-docs/navigation-menu-trigger-style.llm.md +22 -0
- package/llm-docs/navigation-menu-trigger.llm.md +57 -0
- package/llm-docs/navigation-menu-viewport.llm.md +51 -0
- package/llm-docs/navigation-menu.llm.md +184 -0
- package/llm-docs/p.llm.md +115 -0
- package/llm-docs/pagination-content.llm.md +60 -0
- package/llm-docs/pagination-ellipsis.llm.md +107 -0
- package/llm-docs/pagination-item.llm.md +59 -0
- package/llm-docs/pagination-link.llm.md +150 -0
- package/llm-docs/pagination-next.llm.md +115 -0
- package/llm-docs/pagination-previous.llm.md +115 -0
- package/llm-docs/pagination.llm.md +190 -0
- package/llm-docs/popover-anchor.llm.md +53 -0
- package/llm-docs/popover-content.llm.md +109 -0
- package/llm-docs/popover-trigger.llm.md +54 -0
- package/llm-docs/popover.llm.md +116 -0
- package/llm-docs/progress.llm.md +76 -0
- package/llm-docs/radio-group-indicator.llm.md +28 -0
- package/llm-docs/radio-group-item.llm.md +40 -0
- package/llm-docs/radio-group.llm.md +76 -0
- package/llm-docs/resizable-handle.llm.md +156 -0
- package/llm-docs/resizable-panel-group.llm.md +149 -0
- package/llm-docs/resizable-panel.llm.md +157 -0
- package/llm-docs/scroll-area-corner.llm.md +41 -0
- package/llm-docs/scroll-area-thumb.llm.md +39 -0
- package/llm-docs/scroll-area-viewport.llm.md +60 -0
- package/llm-docs/scroll-area.llm.md +125 -0
- package/llm-docs/scroll-bar.llm.md +78 -0
- package/llm-docs/sdk-items-registry.json +2638 -0
- package/llm-docs/select-content.llm.md +139 -0
- package/llm-docs/select-group.llm.md +60 -0
- package/llm-docs/select-item.llm.md +75 -0
- package/llm-docs/select-label.llm.md +62 -0
- package/llm-docs/select-scroll-down-button.llm.md +45 -0
- package/llm-docs/select-scroll-up-button.llm.md +45 -0
- package/llm-docs/select-separator.llm.md +59 -0
- package/llm-docs/select-trigger.llm.md +66 -0
- package/llm-docs/select-value.llm.md +67 -0
- package/llm-docs/select.llm.md +159 -0
- package/llm-docs/separator.llm.md +129 -0
- package/llm-docs/sheet-close.llm.md +49 -0
- package/llm-docs/sheet-content.llm.md +115 -0
- package/llm-docs/sheet-description.llm.md +62 -0
- package/llm-docs/sheet-footer.llm.md +64 -0
- package/llm-docs/sheet-header.llm.md +52 -0
- package/llm-docs/sheet-title.llm.md +53 -0
- package/llm-docs/sheet-trigger.llm.md +46 -0
- package/llm-docs/sheet.llm.md +126 -0
- package/llm-docs/sidebar-content.llm.md +63 -0
- package/llm-docs/sidebar-footer.llm.md +50 -0
- package/llm-docs/sidebar-group-action.llm.md +60 -0
- package/llm-docs/sidebar-group-content.llm.md +64 -0
- package/llm-docs/sidebar-group-label.llm.md +53 -0
- package/llm-docs/sidebar-group.llm.md +56 -0
- package/llm-docs/sidebar-header.llm.md +67 -0
- package/llm-docs/sidebar-input.llm.md +50 -0
- package/llm-docs/sidebar-inset.llm.md +52 -0
- package/llm-docs/sidebar-menu-action.llm.md +84 -0
- package/llm-docs/sidebar-menu-badge.llm.md +60 -0
- package/llm-docs/sidebar-menu-button.llm.md +103 -0
- package/llm-docs/sidebar-menu-item.llm.md +75 -0
- package/llm-docs/sidebar-menu-skeleton.llm.md +76 -0
- package/llm-docs/sidebar-menu-sub-button.llm.md +85 -0
- package/llm-docs/sidebar-menu-sub-item.llm.md +54 -0
- package/llm-docs/sidebar-menu-sub.llm.md +74 -0
- package/llm-docs/sidebar-menu.llm.md +65 -0
- package/llm-docs/sidebar-provider.llm.md +79 -0
- package/llm-docs/sidebar-rail.llm.md +34 -0
- package/llm-docs/sidebar-separator.llm.md +57 -0
- package/llm-docs/sidebar-trigger.llm.md +49 -0
- package/llm-docs/sidebar.llm.md +129 -0
- package/llm-docs/skeleton.llm.md +134 -0
- package/llm-docs/slider.llm.md +173 -0
- package/llm-docs/small.llm.md +115 -0
- package/llm-docs/span.llm.md +132 -0
- package/llm-docs/stack.llm.md +28 -0
- package/llm-docs/strong.llm.md +115 -0
- package/llm-docs/switch.llm.md +76 -0
- package/llm-docs/table-body.llm.md +36 -0
- package/llm-docs/table-caption.llm.md +48 -0
- package/llm-docs/table-cell.llm.md +53 -0
- package/llm-docs/table-footer.llm.md +41 -0
- package/llm-docs/table-head.llm.md +69 -0
- package/llm-docs/table-header.llm.md +41 -0
- package/llm-docs/table-row.llm.md +42 -0
- package/llm-docs/table.llm.md +123 -0
- package/llm-docs/tabs-content.llm.md +47 -0
- package/llm-docs/tabs-list.llm.md +41 -0
- package/llm-docs/tabs-trigger.llm.md +47 -0
- package/llm-docs/tabs.llm.md +71 -0
- package/llm-docs/text-field.llm.md +327 -0
- package/llm-docs/textarea.llm.md +311 -0
- package/llm-docs/theme-preference.llm.md +25 -0
- package/llm-docs/theme-toggle.llm.md +57 -0
- package/llm-docs/theme.llm.md +14 -0
- package/llm-docs/toast.llm.md +32 -0
- package/llm-docs/toaster.llm.md +193 -0
- package/llm-docs/toggle-group-item.llm.md +59 -0
- package/llm-docs/toggle-group.llm.md +101 -0
- package/llm-docs/toggle.llm.md +40 -0
- package/llm-docs/tooltip-content.llm.md +185 -0
- package/llm-docs/tooltip-provider.llm.md +68 -0
- package/llm-docs/tooltip-trigger.llm.md +70 -0
- package/llm-docs/tooltip.llm.md +129 -0
- package/llm-docs/typography.llm.md +175 -0
- package/llm-docs/use-carousel.llm.md +55 -0
- package/llm-docs/use-command-state.llm.md +32 -0
- package/llm-docs/use-is-mobile.llm.md +73 -0
- package/llm-docs/use-sidebar.llm.md +61 -0
- package/package.json +3 -2
- package/src/components/ui/stack.tsx +5 -1
- package/src/components/ui/stories/typography.stories.tsx +248 -205
- package/src/components/ui/typography.tsx +90 -79
- package/src/styles/globals.css +33 -10
|
@@ -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
|
+
```
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Label
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Label component for form controls with full accessibility support A fundamental form component that provides accessible text labels for form controls. Built on Radix UI Label primitive, it automatically associates with form elements and expands their clickable area for improved usability and accessibility. Essential for creating accessible forms that meet WCAG guidelines.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { Label } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<Label
|
|
13
|
+
className="value"
|
|
14
|
+
htmlFor="value"
|
|
15
|
+
asChild={true}
|
|
16
|
+
onClick={handleClick}
|
|
17
|
+
onKeyDown={handleKeyDown}
|
|
18
|
+
id="value"
|
|
19
|
+
style={value}
|
|
20
|
+
tabIndex={0}
|
|
21
|
+
"aria-label"="value"
|
|
22
|
+
"aria-describedby"="value"
|
|
23
|
+
"aria-invalid"={true}
|
|
24
|
+
"aria-required"={true}
|
|
25
|
+
>
|
|
26
|
+
{/* Your content here */}
|
|
27
|
+
</Label>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Component Props
|
|
31
|
+
|
|
32
|
+
### className
|
|
33
|
+
- **Type**: `string`
|
|
34
|
+
- **Required**: No
|
|
35
|
+
- **Description**: No description available
|
|
36
|
+
|
|
37
|
+
### htmlFor
|
|
38
|
+
- **Type**: `string`
|
|
39
|
+
- **Required**: No
|
|
40
|
+
- **Description**: No description available
|
|
41
|
+
|
|
42
|
+
### children
|
|
43
|
+
- **Type**: `React.ReactNode`
|
|
44
|
+
- **Required**: No
|
|
45
|
+
- **Description**: No description available
|
|
46
|
+
|
|
47
|
+
### asChild
|
|
48
|
+
- **Type**: `boolean`
|
|
49
|
+
- **Required**: No
|
|
50
|
+
- **Description**: No description available
|
|
51
|
+
|
|
52
|
+
### onClick
|
|
53
|
+
- **Type**: `React.MouseEventHandler<HTMLLabelElement>`
|
|
54
|
+
- **Required**: No
|
|
55
|
+
- **Description**: No description available
|
|
56
|
+
|
|
57
|
+
### onKeyDown
|
|
58
|
+
- **Type**: `React.KeyboardEventHandler<HTMLLabelElement>`
|
|
59
|
+
- **Required**: No
|
|
60
|
+
- **Description**: No description available
|
|
61
|
+
|
|
62
|
+
### id
|
|
63
|
+
- **Type**: `string`
|
|
64
|
+
- **Required**: No
|
|
65
|
+
- **Description**: No description available
|
|
66
|
+
|
|
67
|
+
### style
|
|
68
|
+
- **Type**: `React.CSSProperties`
|
|
69
|
+
- **Required**: No
|
|
70
|
+
- **Description**: No description available
|
|
71
|
+
|
|
72
|
+
### tabIndex
|
|
73
|
+
- **Type**: `number`
|
|
74
|
+
- **Required**: No
|
|
75
|
+
- **Description**: No description available
|
|
76
|
+
|
|
77
|
+
### "aria-label"
|
|
78
|
+
- **Type**: `string`
|
|
79
|
+
- **Required**: No
|
|
80
|
+
- **Description**: No description available
|
|
81
|
+
|
|
82
|
+
### "aria-describedby"
|
|
83
|
+
- **Type**: `string`
|
|
84
|
+
- **Required**: No
|
|
85
|
+
- **Description**: No description available
|
|
86
|
+
|
|
87
|
+
### "aria-invalid"
|
|
88
|
+
- **Type**: `boolean`
|
|
89
|
+
- **Required**: No
|
|
90
|
+
- **Description**: No description available
|
|
91
|
+
|
|
92
|
+
### "aria-required"
|
|
93
|
+
- **Type**: `boolean`
|
|
94
|
+
- **Required**: No
|
|
95
|
+
- **Description**: No description available
|
|
96
|
+
|
|
97
|
+
## Examples
|
|
98
|
+
|
|
99
|
+
### Example 1
|
|
100
|
+
```tsx
|
|
101
|
+
// Basic label with input
|
|
102
|
+
<div className="space-y-2">
|
|
103
|
+
<Label htmlFor="email">Email address</Label>
|
|
104
|
+
<Input id="email" type="email" placeholder="Enter your email" />
|
|
105
|
+
</div>
|
|
106
|
+
```
|
|
107
|
+
### Example 2
|
|
108
|
+
```tsx
|
|
109
|
+
// Required field with indicator
|
|
110
|
+
<Label htmlFor="username">
|
|
111
|
+
Username <span className="text-destructive">*</span>
|
|
112
|
+
</Label>
|
|
113
|
+
<Input id="username" required />
|
|
114
|
+
```
|
|
115
|
+
### Example 3
|
|
116
|
+
```tsx
|
|
117
|
+
// Checkbox with label
|
|
118
|
+
<div className="flex items-center space-x-2">
|
|
119
|
+
<Checkbox id="terms" />
|
|
120
|
+
<Label htmlFor="terms" className="text-sm font-normal">
|
|
121
|
+
I agree to the terms and conditions
|
|
122
|
+
</Label>
|
|
123
|
+
</div>
|
|
124
|
+
```
|
|
125
|
+
### Example 4
|
|
126
|
+
```tsx
|
|
127
|
+
// Label with helper text
|
|
128
|
+
<div className="space-y-1">
|
|
129
|
+
<Label htmlFor="password">Password</Label>
|
|
130
|
+
<Input id="password" type="password" />
|
|
131
|
+
<p className="text-sm text-muted-foreground">
|
|
132
|
+
Must be at least 8 characters long
|
|
133
|
+
</p>
|
|
134
|
+
</div>
|
|
135
|
+
```
|
|
136
|
+
### Example 5
|
|
137
|
+
```tsx
|
|
138
|
+
// Complex label with nested content
|
|
139
|
+
<Label htmlFor="plan" className="flex flex-col space-y-1 cursor-pointer">
|
|
140
|
+
<span className="font-semibold">Choose your plan</span>
|
|
141
|
+
<span className="text-sm text-muted-foreground">
|
|
142
|
+
You can upgrade or downgrade anytime
|
|
143
|
+
</span>
|
|
144
|
+
</Label>
|
|
145
|
+
```
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Lead
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Lead - Introductory paragraph component for article openings Lead paragraph for article introductions, page descriptions, and summary content. Uses "subheading" variant with muted color for visual hierarchy.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { Lead } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<Lead
|
|
13
|
+
color={value}
|
|
14
|
+
align={value}
|
|
15
|
+
transform={value}
|
|
16
|
+
weight={value}
|
|
17
|
+
htmlFor="value"
|
|
18
|
+
asChild={true}
|
|
19
|
+
italic={true}
|
|
20
|
+
underline={true}
|
|
21
|
+
strikethrough={true}
|
|
22
|
+
truncate={true}
|
|
23
|
+
srOnly={true}
|
|
24
|
+
className="value"
|
|
25
|
+
>
|
|
26
|
+
{/* Your content here */}
|
|
27
|
+
</Lead>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Component Props
|
|
31
|
+
|
|
32
|
+
### color
|
|
33
|
+
- **Type**: `| "default"
|
|
34
|
+
| "muted"
|
|
35
|
+
| "accent"
|
|
36
|
+
| "destructive"
|
|
37
|
+
| "success"
|
|
38
|
+
| "warning"`
|
|
39
|
+
- **Required**: No
|
|
40
|
+
- **Description**: No description available
|
|
41
|
+
|
|
42
|
+
### align
|
|
43
|
+
- **Type**: `"left" | "center" | "right" | "justify"`
|
|
44
|
+
- **Required**: No
|
|
45
|
+
- **Description**: No description available
|
|
46
|
+
|
|
47
|
+
### transform
|
|
48
|
+
- **Type**: `"uppercase" | "lowercase" | "capitalize"`
|
|
49
|
+
- **Required**: No
|
|
50
|
+
- **Description**: No description available
|
|
51
|
+
|
|
52
|
+
### weight
|
|
53
|
+
- **Type**: `"normal" | "medium" | "semibold" | "bold"`
|
|
54
|
+
- **Required**: No
|
|
55
|
+
- **Description**: No description available
|
|
56
|
+
|
|
57
|
+
### htmlFor
|
|
58
|
+
- **Type**: `string`
|
|
59
|
+
- **Required**: No
|
|
60
|
+
- **Description**: No description available
|
|
61
|
+
|
|
62
|
+
### asChild
|
|
63
|
+
- **Type**: `boolean`
|
|
64
|
+
- **Required**: No
|
|
65
|
+
- **Description**: No description available
|
|
66
|
+
|
|
67
|
+
### italic
|
|
68
|
+
- **Type**: `boolean`
|
|
69
|
+
- **Required**: No
|
|
70
|
+
- **Description**: No description available
|
|
71
|
+
|
|
72
|
+
### underline
|
|
73
|
+
- **Type**: `boolean`
|
|
74
|
+
- **Required**: No
|
|
75
|
+
- **Description**: No description available
|
|
76
|
+
|
|
77
|
+
### strikethrough
|
|
78
|
+
- **Type**: `boolean`
|
|
79
|
+
- **Required**: No
|
|
80
|
+
- **Description**: No description available
|
|
81
|
+
|
|
82
|
+
### truncate
|
|
83
|
+
- **Type**: `boolean`
|
|
84
|
+
- **Required**: No
|
|
85
|
+
- **Description**: No description available
|
|
86
|
+
|
|
87
|
+
### srOnly
|
|
88
|
+
- **Type**: `boolean`
|
|
89
|
+
- **Required**: No
|
|
90
|
+
- **Description**: No description available
|
|
91
|
+
|
|
92
|
+
### className
|
|
93
|
+
- **Type**: `string`
|
|
94
|
+
- **Required**: No
|
|
95
|
+
- **Description**: No description available
|
|
96
|
+
|
|
97
|
+
### children
|
|
98
|
+
- **Type**: `React.ReactNode`
|
|
99
|
+
- **Required**: No
|
|
100
|
+
- **Description**: No description available
|
|
101
|
+
|
|
102
|
+
## Examples
|
|
103
|
+
|
|
104
|
+
```tsx
|
|
105
|
+
// Article introduction
|
|
106
|
+
<Lead>
|
|
107
|
+
This comprehensive guide covers everything you need to know about
|
|
108
|
+
building modern web applications with React and TypeScript.
|
|
109
|
+
</Lead>
|
|
110
|
+
// Page description
|
|
111
|
+
<Lead className="mb-8">
|
|
112
|
+
Discover powerful APIs and tools to build the next generation
|
|
113
|
+
of social applications on Farcaster.
|
|
114
|
+
</Lead>
|
|
115
|
+
// With custom color
|
|
116
|
+
<Lead color="default">
|
|
117
|
+
This lead paragraph uses the default text color for more prominence.
|
|
118
|
+
</Lead>
|
|
119
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# MenubarCheckboxItem
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
A menu item that can be checked/unchecked. Perfect for toggle options like "Show Toolbar", "Enable Feature", or any binary setting that can be turned on/off. Displays a checkmark icon when checked.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { MenubarCheckboxItem } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<MenubarCheckboxItem
|
|
13
|
+
className="value"
|
|
14
|
+
checked={value}
|
|
15
|
+
onCheckedChange={handleCheckedChange}
|
|
16
|
+
disabled={true}
|
|
17
|
+
onSelect={handleSelect}
|
|
18
|
+
textValue="value"
|
|
19
|
+
>
|
|
20
|
+
{/* Your content here */}
|
|
21
|
+
</MenubarCheckboxItem>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Component Props
|
|
25
|
+
|
|
26
|
+
### className
|
|
27
|
+
- **Type**: `string`
|
|
28
|
+
- **Required**: No
|
|
29
|
+
- **Description**: Additional CSS classes to apply to the checkbox item
|
|
30
|
+
|
|
31
|
+
### checked
|
|
32
|
+
- **Type**: `boolean | "indeterminate"`
|
|
33
|
+
- **Required**: No
|
|
34
|
+
- **Description**: The controlled checked state of the item. Must be used in conjunction with onCheckedChange
|
|
35
|
+
|
|
36
|
+
### onCheckedChange
|
|
37
|
+
- **Type**: `(checked: boolean) => void`
|
|
38
|
+
- **Required**: No
|
|
39
|
+
- **Description**: Event handler called when the checked state changes
|
|
40
|
+
|
|
41
|
+
### disabled
|
|
42
|
+
- **Type**: `boolean`
|
|
43
|
+
- **Required**: No
|
|
44
|
+
- **Description**: When true, prevents the user from interacting with the item
|
|
45
|
+
|
|
46
|
+
### onSelect
|
|
47
|
+
- **Type**: `(event: Event) => void`
|
|
48
|
+
- **Required**: No
|
|
49
|
+
- **Description**: Event handler called when the user selects an item (via mouse or keyboard)
|
|
50
|
+
|
|
51
|
+
### textValue
|
|
52
|
+
- **Type**: `string`
|
|
53
|
+
- **Required**: No
|
|
54
|
+
- **Description**: Optional text used for typeahead purposes when content is complex
|
|
55
|
+
|
|
56
|
+
## Examples
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
<MenubarCheckboxItem
|
|
60
|
+
checked={showLineNumbers}
|
|
61
|
+
onCheckedChange={setShowLineNumbers}
|
|
62
|
+
>
|
|
63
|
+
Show Line Numbers
|
|
64
|
+
</MenubarCheckboxItem>
|
|
65
|
+
```
|
|
66
|
+
/
|