@neynar/ui 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.llm/a.llm.md +131 -0
- 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 +117 -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/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 +103 -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/h1.llm.md +108 -0
- package/.llm/h2.llm.md +108 -0
- package/.llm/h3.llm.md +106 -0
- package/.llm/h4.llm.md +104 -0
- package/.llm/h5.llm.md +105 -0
- package/.llm/h6.llm.md +105 -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/lead.llm.md +114 -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/p.llm.md +110 -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 +3022 -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/small.llm.md +110 -0
- package/.llm/span.llm.md +118 -0
- package/.llm/spinner.llm.md +182 -0
- package/.llm/stack.llm.md +28 -0
- package/.llm/strong.llm.md +110 -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/toast.llm.md +32 -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/typography.llm.md +161 -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/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/index.js +4972 -9636
- 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/theme-toggle.tsx +1 -3
- package/src/components/ui/theme.tsx +6 -1
- package/src/styles/globals.css +57 -85
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# CommandInput
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
CommandInput - Search input for command menu filtering Provides a search input with search icon for filtering command menu items. Automatically filters items as the user types and triggers live region announcements for screen readers. Supports both controlled and uncontrolled usage patterns. The input integrates with the Command context to provide real-time filtering, search highlighting, and result announcements. Includes built-in search icon and proper focus management.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { CommandInput } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<CommandInput
|
|
13
|
+
value="value"
|
|
14
|
+
onValueChange={handleValueChange}
|
|
15
|
+
placeholder="value"
|
|
16
|
+
disabled={true}
|
|
17
|
+
autoFocus={true}
|
|
18
|
+
className="value"
|
|
19
|
+
/>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Component Props
|
|
23
|
+
|
|
24
|
+
### value
|
|
25
|
+
- **Type**: `string`
|
|
26
|
+
- **Required**: No
|
|
27
|
+
- **Description**: Controlled input value for managing search state externally
|
|
28
|
+
|
|
29
|
+
### onValueChange
|
|
30
|
+
- **Type**: `(search: string) => void`
|
|
31
|
+
- **Required**: No
|
|
32
|
+
- **Description**: Callback fired when input value changes
|
|
33
|
+
|
|
34
|
+
### placeholder
|
|
35
|
+
- **Type**: `string`
|
|
36
|
+
- **Required**: No
|
|
37
|
+
- **Description**: Placeholder text displayed when input is empty
|
|
38
|
+
|
|
39
|
+
### disabled
|
|
40
|
+
- **Type**: `boolean`
|
|
41
|
+
- **Required**: No
|
|
42
|
+
- **Description**: Disables the input and prevents interaction
|
|
43
|
+
|
|
44
|
+
### autoFocus
|
|
45
|
+
- **Type**: `boolean`
|
|
46
|
+
- **Required**: No
|
|
47
|
+
- **Description**: Auto-focus the input when rendered
|
|
48
|
+
|
|
49
|
+
### className
|
|
50
|
+
- **Type**: `string`
|
|
51
|
+
- **Required**: No
|
|
52
|
+
- **Description**: Additional CSS classes
|
|
53
|
+
|
|
54
|
+
## Examples
|
|
55
|
+
|
|
56
|
+
### Example 1
|
|
57
|
+
```tsx
|
|
58
|
+
// Basic uncontrolled input
|
|
59
|
+
<Command>
|
|
60
|
+
<CommandInput placeholder="Search commands..." />
|
|
61
|
+
<CommandList>...</CommandList>
|
|
62
|
+
</Command>
|
|
63
|
+
```
|
|
64
|
+
### Example 2
|
|
65
|
+
```tsx
|
|
66
|
+
// Controlled input with external state
|
|
67
|
+
const [search, setSearch] = useState('');
|
|
68
|
+
<CommandInput
|
|
69
|
+
value={search}
|
|
70
|
+
onValueChange={setSearch}
|
|
71
|
+
placeholder="Type a command or search..."
|
|
72
|
+
autoFocus
|
|
73
|
+
/>
|
|
74
|
+
```
|
|
75
|
+
### Example 3
|
|
76
|
+
```tsx
|
|
77
|
+
// With disabled state
|
|
78
|
+
<CommandInput
|
|
79
|
+
placeholder="Loading..."
|
|
80
|
+
disabled={isLoading}
|
|
81
|
+
/>
|
|
82
|
+
```
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# CommandItem
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
CommandItem - Individual selectable command item Represents a single command or action that can be selected via keyboard or mouse interaction. Supports icons, text, shortcuts, and advanced filtering with keywords. Items can be disabled, have custom values for filtering, and trigger callbacks on selection. The item's value is used for filtering - if not provided, it defaults to the text content. Keywords can be added to improve search matching without affecting the display.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { CommandItem } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<CommandItem
|
|
13
|
+
value="value"
|
|
14
|
+
keywords={[]}
|
|
15
|
+
disabled={true}
|
|
16
|
+
onSelect={handleSelect}
|
|
17
|
+
forceMount={true}
|
|
18
|
+
className="value"
|
|
19
|
+
>
|
|
20
|
+
{/* Your content here */}
|
|
21
|
+
</CommandItem>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Component Props
|
|
25
|
+
|
|
26
|
+
### value
|
|
27
|
+
- **Type**: `string`
|
|
28
|
+
- **Required**: No
|
|
29
|
+
- **Description**: Unique identifier for filtering and selection (defaults to text content)
|
|
30
|
+
|
|
31
|
+
### keywords
|
|
32
|
+
- **Type**: `string[]`
|
|
33
|
+
- **Required**: No
|
|
34
|
+
- **Description**: Additional search terms for improved filtering
|
|
35
|
+
|
|
36
|
+
### disabled
|
|
37
|
+
- **Type**: `boolean`
|
|
38
|
+
- **Required**: No
|
|
39
|
+
- **Description**: Disables interaction and selection
|
|
40
|
+
|
|
41
|
+
### onSelect
|
|
42
|
+
- **Type**: `(value: string) => void`
|
|
43
|
+
- **Required**: No
|
|
44
|
+
- **Description**: Callback fired when item is selected with Enter or click
|
|
45
|
+
|
|
46
|
+
### forceMount
|
|
47
|
+
- **Type**: `boolean`
|
|
48
|
+
- **Required**: No
|
|
49
|
+
- **Description**: Always render even when filtered out
|
|
50
|
+
|
|
51
|
+
### className
|
|
52
|
+
- **Type**: `string`
|
|
53
|
+
- **Required**: No
|
|
54
|
+
- **Description**: Additional CSS classes
|
|
55
|
+
|
|
56
|
+
### children
|
|
57
|
+
- **Type**: `React.ReactNode`
|
|
58
|
+
- **Required**: No
|
|
59
|
+
- **Description**: No description available
|
|
60
|
+
|
|
61
|
+
## Examples
|
|
62
|
+
|
|
63
|
+
### Example 1
|
|
64
|
+
```tsx
|
|
65
|
+
// Basic command item
|
|
66
|
+
<CommandItem onSelect={() => console.log("File opened")}>
|
|
67
|
+
Open File
|
|
68
|
+
</CommandItem>
|
|
69
|
+
```
|
|
70
|
+
### Example 2
|
|
71
|
+
```tsx
|
|
72
|
+
// Command item with icon and shortcut
|
|
73
|
+
<CommandItem value="new-document" onSelect={handleCreateDocument}>
|
|
74
|
+
<FileIcon className="mr-2 h-4 w-4" />
|
|
75
|
+
New Document
|
|
76
|
+
<CommandShortcut>⌘N</CommandShortcut>
|
|
77
|
+
</CommandItem>
|
|
78
|
+
```
|
|
79
|
+
### Example 3
|
|
80
|
+
```tsx
|
|
81
|
+
// Item with keywords for better search
|
|
82
|
+
<CommandItem
|
|
83
|
+
value="apple"
|
|
84
|
+
keywords={['fruit', 'red', 'healthy']}
|
|
85
|
+
onSelect={() => selectFruit('apple')}
|
|
86
|
+
>
|
|
87
|
+
🍎 Apple
|
|
88
|
+
</CommandItem>
|
|
89
|
+
```
|
|
90
|
+
### Example 4
|
|
91
|
+
```tsx
|
|
92
|
+
// Disabled item that shows but cannot be selected
|
|
93
|
+
<CommandItem disabled>
|
|
94
|
+
<LockIcon className="mr-2 h-4 w-4" />
|
|
95
|
+
Premium Feature
|
|
96
|
+
</CommandItem>
|
|
97
|
+
```
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# CommandList
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
CommandList - Scrollable container for command items Contains and manages the list of command items with automatic scrolling, overflow handling, and dynamic height calculation. Provides the scrollable viewport for command items and groups with proper keyboard navigation. Uses CSS custom property `--cmdk-list-height` for smooth height transitions when items are filtered. Supports scroll padding for better item visibility.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { CommandList } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<CommandList
|
|
13
|
+
className="value"
|
|
14
|
+
>
|
|
15
|
+
{/* Your content here */}
|
|
16
|
+
</CommandList>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Component Props
|
|
20
|
+
|
|
21
|
+
### className
|
|
22
|
+
- **Type**: `string`
|
|
23
|
+
- **Required**: No
|
|
24
|
+
- **Description**: Additional CSS classes
|
|
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
|
+
<CommandList>
|
|
36
|
+
<CommandEmpty>No results found</CommandEmpty>
|
|
37
|
+
<CommandGroup heading="Actions">
|
|
38
|
+
<CommandItem>New File</CommandItem>
|
|
39
|
+
<CommandItem>Open File</CommandItem>
|
|
40
|
+
</CommandGroup>
|
|
41
|
+
</CommandList>
|
|
42
|
+
```
|
|
43
|
+
### Example 2
|
|
44
|
+
```tsx
|
|
45
|
+
// With custom height and scroll behavior
|
|
46
|
+
<CommandList className="max-h-[400px] scroll-py-2">
|
|
47
|
+
{items.map((item) => (
|
|
48
|
+
<CommandItem key={item.id} value={item.id}>
|
|
49
|
+
{item.name}
|
|
50
|
+
</CommandItem>
|
|
51
|
+
))}
|
|
52
|
+
</CommandList>
|
|
53
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# CommandLoading
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
CommandLoading - Loading state indicator for command menu Displays a loading message while command items are being fetched asynchronously. Should be conditionally rendered based on loading state. Shares the same styling and behavior as CommandEmpty but indicates active loading rather than empty state.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { CommandLoading } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<CommandLoading
|
|
13
|
+
...props={value}
|
|
14
|
+
/>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Component Props
|
|
18
|
+
|
|
19
|
+
### ...props
|
|
20
|
+
- **Type**: `unknown`
|
|
21
|
+
- **Required**: Yes
|
|
22
|
+
- **Description**: No description available
|
|
23
|
+
|
|
24
|
+
## Examples
|
|
25
|
+
|
|
26
|
+
### Example 1
|
|
27
|
+
```tsx
|
|
28
|
+
const [loading, setLoading] = useState(false);
|
|
29
|
+
const [items, setItems] = useState([]);
|
|
30
|
+
<CommandList>
|
|
31
|
+
{loading && <CommandLoading>Fetching commands...</CommandLoading>}
|
|
32
|
+
{items.map(item => (
|
|
33
|
+
<CommandItem key={item.id} value={item.id}>
|
|
34
|
+
{item.name}
|
|
35
|
+
</CommandItem>
|
|
36
|
+
))}
|
|
37
|
+
</CommandList>
|
|
38
|
+
```
|
|
39
|
+
### Example 2
|
|
40
|
+
```tsx
|
|
41
|
+
// With custom loading indicator
|
|
42
|
+
<CommandLoading>
|
|
43
|
+
<div className="flex items-center justify-center py-6">
|
|
44
|
+
<Spinner className="mr-2 h-4 w-4" />
|
|
45
|
+
<span>Loading commands...</span>
|
|
46
|
+
</div>
|
|
47
|
+
</CommandLoading>
|
|
48
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# CommandSeparator
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
CommandSeparator - Visual separator between command groups Provides visual separation between different sections of commands. Purely decorative element that improves visual organization and hierarchy. Automatically hides when adjacent groups are filtered out. The separator will only render when it has visible content before and after it, unless `alwaysRender` is true.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { CommandSeparator } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<CommandSeparator
|
|
13
|
+
alwaysRender={true}
|
|
14
|
+
className="value"
|
|
15
|
+
/>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Component Props
|
|
19
|
+
|
|
20
|
+
### alwaysRender
|
|
21
|
+
- **Type**: `boolean`
|
|
22
|
+
- **Required**: No
|
|
23
|
+
- **Description**: Whether to always show separator regardless of context
|
|
24
|
+
|
|
25
|
+
### className
|
|
26
|
+
- **Type**: `string`
|
|
27
|
+
- **Required**: No
|
|
28
|
+
- **Description**: Additional CSS classes
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
|
|
32
|
+
### Example 1
|
|
33
|
+
```tsx
|
|
34
|
+
<CommandGroup heading="Recent">...</CommandGroup>
|
|
35
|
+
<CommandSeparator />
|
|
36
|
+
<CommandGroup heading="Actions">...</CommandGroup>
|
|
37
|
+
```
|
|
38
|
+
### Example 2
|
|
39
|
+
```tsx
|
|
40
|
+
// Separator that always renders
|
|
41
|
+
<CommandGroup heading="Primary">...</CommandGroup>
|
|
42
|
+
<CommandSeparator alwaysRender />
|
|
43
|
+
<CommandGroup heading="Secondary">...</CommandGroup>
|
|
44
|
+
```
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# CommandShortcut
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
CommandShortcut - Displays keyboard shortcut for command items Shows the keyboard shortcut associated with a command item, typically displayed on the right side with proper spacing. Supports platform-specific shortcuts and complex key combinations with consistent formatting. The component uses monospace-style formatting with appropriate opacity and spacing to clearly indicate keyboard shortcuts without overwhelming the item content.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { CommandShortcut } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<CommandShortcut
|
|
13
|
+
className="value"
|
|
14
|
+
>
|
|
15
|
+
{/* Your content here */}
|
|
16
|
+
</CommandShortcut>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Component Props
|
|
20
|
+
|
|
21
|
+
### className
|
|
22
|
+
- **Type**: `string`
|
|
23
|
+
- **Required**: No
|
|
24
|
+
- **Description**: Additional CSS classes
|
|
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
|
+
<CommandItem>
|
|
36
|
+
Save File
|
|
37
|
+
<CommandShortcut>⌘S</CommandShortcut>
|
|
38
|
+
</CommandItem>
|
|
39
|
+
```
|
|
40
|
+
### Example 2
|
|
41
|
+
```tsx
|
|
42
|
+
// Multi-key shortcuts
|
|
43
|
+
<CommandItem>
|
|
44
|
+
Redo
|
|
45
|
+
<CommandShortcut>⇧⌘Z</CommandShortcut>
|
|
46
|
+
</CommandItem>
|
|
47
|
+
```
|
|
48
|
+
### Example 3
|
|
49
|
+
```tsx
|
|
50
|
+
// Platform-specific shortcuts
|
|
51
|
+
<CommandItem>
|
|
52
|
+
Copy
|
|
53
|
+
<CommandShortcut>{isMac ? '⌘C' : 'Ctrl+C'}</CommandShortcut>
|
|
54
|
+
</CommandItem>
|
|
55
|
+
```
|
|
56
|
+
### Example 4
|
|
57
|
+
```tsx
|
|
58
|
+
// Complex shortcuts with modifiers
|
|
59
|
+
<CommandItem>
|
|
60
|
+
Open Command Palette
|
|
61
|
+
<CommandShortcut>⌘⇧P</CommandShortcut>
|
|
62
|
+
</CommandItem>
|
|
63
|
+
```
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Command
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Command - A fast, composable command menu for search and navigation Built on the cmdk primitive, this component provides a powerful command palette interface with search, filtering, and keyboard navigation. Perfect for creating search interfaces, command palettes, and action menus with full accessibility support. Features advanced filtering with fuzzy search, keyboard shortcuts, nested navigation, asynchronous loading states, and comprehensive accessibility patterns.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { Command } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<Command
|
|
13
|
+
label="value"
|
|
14
|
+
shouldFilter={true}
|
|
15
|
+
filter={[]}
|
|
16
|
+
value="value"
|
|
17
|
+
onValueChange={handleValueChange}
|
|
18
|
+
loop={true}
|
|
19
|
+
disablePointerSelection={true}
|
|
20
|
+
vimBindings={true}
|
|
21
|
+
className="value"
|
|
22
|
+
>
|
|
23
|
+
{/* Your content here */}
|
|
24
|
+
</Command>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Component Props
|
|
28
|
+
|
|
29
|
+
### label
|
|
30
|
+
- **Type**: `string`
|
|
31
|
+
- **Required**: No
|
|
32
|
+
- **Description**: Accessibility label for screen readers and assistive technology
|
|
33
|
+
|
|
34
|
+
### shouldFilter
|
|
35
|
+
- **Type**: `boolean`
|
|
36
|
+
- **Required**: No
|
|
37
|
+
- **Description**: Controls automatic filtering and sorting
|
|
38
|
+
|
|
39
|
+
### filter
|
|
40
|
+
- **Type**: `(value: string, search: string, keywords?: string[]) => number`
|
|
41
|
+
- **Required**: No
|
|
42
|
+
- **Description**: Custom filter function for ranking items based on search
|
|
43
|
+
|
|
44
|
+
### value
|
|
45
|
+
- **Type**: `string`
|
|
46
|
+
- **Required**: No
|
|
47
|
+
- **Description**: Currently selected item value for controlled usage
|
|
48
|
+
|
|
49
|
+
### onValueChange
|
|
50
|
+
- **Type**: `(value: string) => void`
|
|
51
|
+
- **Required**: No
|
|
52
|
+
- **Description**: Callback fired when selected item changes
|
|
53
|
+
|
|
54
|
+
### loop
|
|
55
|
+
- **Type**: `boolean`
|
|
56
|
+
- **Required**: No
|
|
57
|
+
- **Description**: Enables circular navigation through items
|
|
58
|
+
|
|
59
|
+
### disablePointerSelection
|
|
60
|
+
- **Type**: `boolean`
|
|
61
|
+
- **Required**: No
|
|
62
|
+
- **Description**: Prevents mouse selection behavior
|
|
63
|
+
|
|
64
|
+
### vimBindings
|
|
65
|
+
- **Type**: `boolean`
|
|
66
|
+
- **Required**: No
|
|
67
|
+
- **Description**: Enables Vim-style navigation keybindings
|
|
68
|
+
|
|
69
|
+
### className
|
|
70
|
+
- **Type**: `string`
|
|
71
|
+
- **Required**: No
|
|
72
|
+
- **Description**: Additional CSS classes
|
|
73
|
+
|
|
74
|
+
### children
|
|
75
|
+
- **Type**: `React.ReactNode`
|
|
76
|
+
- **Required**: No
|
|
77
|
+
- **Description**: No description available
|
|
78
|
+
|
|
79
|
+
## Examples
|
|
80
|
+
|
|
81
|
+
### Example 1
|
|
82
|
+
```tsx
|
|
83
|
+
// Basic command menu
|
|
84
|
+
<Command label="Main Menu">
|
|
85
|
+
<CommandInput placeholder="Type a command or search..." />
|
|
86
|
+
<CommandList>
|
|
87
|
+
<CommandEmpty>No results found.</CommandEmpty>
|
|
88
|
+
<CommandGroup heading="Suggestions">
|
|
89
|
+
<CommandItem>Calendar</CommandItem>
|
|
90
|
+
<CommandItem>Search Emoji</CommandItem>
|
|
91
|
+
<CommandItem>Calculator</CommandItem>
|
|
92
|
+
</CommandGroup>
|
|
93
|
+
</CommandList>
|
|
94
|
+
</Command>
|
|
95
|
+
```
|
|
96
|
+
### Example 2
|
|
97
|
+
```tsx
|
|
98
|
+
// Controlled command menu with custom filtering
|
|
99
|
+
const [value, setValue] = useState('');
|
|
100
|
+
const [search, setSearch] = useState('');
|
|
101
|
+
<Command
|
|
102
|
+
value={value}
|
|
103
|
+
onValueChange={setValue}
|
|
104
|
+
filter={(value, search, keywords) => {
|
|
105
|
+
const extended = value + ' ' + (keywords?.join(' ') || '');
|
|
106
|
+
return extended.toLowerCase().includes(search.toLowerCase()) ? 1 : 0;
|
|
107
|
+
}}
|
|
108
|
+
loop
|
|
109
|
+
>
|
|
110
|
+
<CommandInput
|
|
111
|
+
value={search}
|
|
112
|
+
onValueChange={setSearch}
|
|
113
|
+
placeholder="Search..."
|
|
114
|
+
/>
|
|
115
|
+
<CommandList>
|
|
116
|
+
<CommandItem value="apple" keywords={['fruit', 'red']}>
|
|
117
|
+
Apple
|
|
118
|
+
</CommandItem>
|
|
119
|
+
</CommandList>
|
|
120
|
+
</Command>
|
|
121
|
+
```
|
|
122
|
+
### Example 3
|
|
123
|
+
```tsx
|
|
124
|
+
// Command dialog with keyboard shortcut
|
|
125
|
+
const [open, setOpen] = useState(false);
|
|
126
|
+
useEffect(() => {
|
|
127
|
+
const down = (e: KeyboardEvent) => {
|
|
128
|
+
if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
|
|
129
|
+
e.preventDefault();
|
|
130
|
+
setOpen((open) => !open);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
document.addEventListener("keydown", down);
|
|
134
|
+
return () => document.removeEventListener("keydown", down);
|
|
135
|
+
}, []);
|
|
136
|
+
<CommandDialog open={open} onOpenChange={setOpen}>
|
|
137
|
+
<CommandInput placeholder="Type a command..." />
|
|
138
|
+
<CommandList>
|
|
139
|
+
<CommandGroup heading="Actions">
|
|
140
|
+
<CommandItem onSelect={() => console.log("New file")}>
|
|
141
|
+
New File
|
|
142
|
+
<CommandShortcut>⌘N</CommandShortcut>
|
|
143
|
+
</CommandItem>
|
|
144
|
+
</CommandGroup>
|
|
145
|
+
</CommandList>
|
|
146
|
+
</CommandDialog>
|
|
147
|
+
```
|