@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,157 @@
|
|
|
1
|
+
# ResizablePanel
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Individual resizable panel within a panel group with size constraints and callbacks ResizablePanel represents a single resizable section within a ResizablePanelGroup. Supports flexible sizing constraints, collapse/expand behavior, and programmatic control through imperative API. Each panel automatically handles content overflow and maintains accessibility during resize operations with proper focus and scroll management.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { ResizablePanel } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<ResizablePanel
|
|
13
|
+
id="value"
|
|
14
|
+
order={0}
|
|
15
|
+
defaultSize={0}
|
|
16
|
+
minSize={0}
|
|
17
|
+
maxSize={0}
|
|
18
|
+
collapsible={true}
|
|
19
|
+
collapsedSize={0}
|
|
20
|
+
onCollapse={handleCollapse}
|
|
21
|
+
onExpand={handleExpand}
|
|
22
|
+
onResize={handleResize}
|
|
23
|
+
tagName={value}
|
|
24
|
+
className="value"
|
|
25
|
+
style={value}
|
|
26
|
+
>
|
|
27
|
+
{/* Your content here */}
|
|
28
|
+
</ResizablePanel>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Component Props
|
|
32
|
+
|
|
33
|
+
### id
|
|
34
|
+
- **Type**: `string`
|
|
35
|
+
- **Required**: No
|
|
36
|
+
- **Description**: Unique identifier for programmatic control and conditional rendering
|
|
37
|
+
|
|
38
|
+
### order
|
|
39
|
+
- **Type**: `number`
|
|
40
|
+
- **Required**: No
|
|
41
|
+
- **Description**: Display order within group, important when panels are conditionally rendered
|
|
42
|
+
|
|
43
|
+
### defaultSize
|
|
44
|
+
- **Type**: `number`
|
|
45
|
+
- **Required**: No
|
|
46
|
+
- **Description**: Initial size as percentage (0-100) when panel first mounts
|
|
47
|
+
|
|
48
|
+
### minSize
|
|
49
|
+
- **Type**: `number`
|
|
50
|
+
- **Required**: No
|
|
51
|
+
- **Description**: Minimum size constraint as percentage (0-100)
|
|
52
|
+
|
|
53
|
+
### maxSize
|
|
54
|
+
- **Type**: `number`
|
|
55
|
+
- **Required**: No
|
|
56
|
+
- **Description**: Maximum size constraint as percentage (0-100)
|
|
57
|
+
|
|
58
|
+
### collapsible
|
|
59
|
+
- **Type**: `boolean`
|
|
60
|
+
- **Required**: No
|
|
61
|
+
- **Description**: Whether panel can collapse beyond minSize to collapsedSize
|
|
62
|
+
|
|
63
|
+
### collapsedSize
|
|
64
|
+
- **Type**: `number`
|
|
65
|
+
- **Required**: No
|
|
66
|
+
- **Description**: Size when fully collapsed, must be between 0 and minSize
|
|
67
|
+
|
|
68
|
+
### onCollapse
|
|
69
|
+
- **Type**: `() => void`
|
|
70
|
+
- **Required**: No
|
|
71
|
+
- **Description**: Callback fired when panel collapses to minimum size
|
|
72
|
+
|
|
73
|
+
### onExpand
|
|
74
|
+
- **Type**: `() => void`
|
|
75
|
+
- **Required**: No
|
|
76
|
+
- **Description**: Callback fired when panel expands from collapsed state
|
|
77
|
+
|
|
78
|
+
### onResize
|
|
79
|
+
- **Type**: `(size: number, prevSize: number | undefined) => void`
|
|
80
|
+
- **Required**: No
|
|
81
|
+
- **Description**: Callback fired during resize with current and previous sizes
|
|
82
|
+
|
|
83
|
+
### tagName
|
|
84
|
+
- **Type**: `keyof React.JSX.IntrinsicElements`
|
|
85
|
+
- **Required**: No
|
|
86
|
+
- **Description**: No description available
|
|
87
|
+
|
|
88
|
+
### className
|
|
89
|
+
- **Type**: `string`
|
|
90
|
+
- **Required**: No
|
|
91
|
+
- **Description**: Additional CSS classes for custom styling
|
|
92
|
+
|
|
93
|
+
### style
|
|
94
|
+
- **Type**: `React.CSSProperties`
|
|
95
|
+
- **Required**: No
|
|
96
|
+
- **Description**: No description available
|
|
97
|
+
|
|
98
|
+
### children
|
|
99
|
+
- **Type**: `React.ReactNode`
|
|
100
|
+
- **Required**: No
|
|
101
|
+
- **Description**: Panel content elements
|
|
102
|
+
|
|
103
|
+
## Examples
|
|
104
|
+
|
|
105
|
+
### Example 1
|
|
106
|
+
```tsx
|
|
107
|
+
// Basic panel with default size
|
|
108
|
+
<ResizablePanel defaultSize={50}>
|
|
109
|
+
<div className="p-4">Panel content</div>
|
|
110
|
+
</ResizablePanel>
|
|
111
|
+
```
|
|
112
|
+
### Example 2
|
|
113
|
+
```tsx
|
|
114
|
+
// Panel with size constraints and callbacks
|
|
115
|
+
<ResizablePanel
|
|
116
|
+
id="sidebar"
|
|
117
|
+
defaultSize={30}
|
|
118
|
+
minSize={20}
|
|
119
|
+
maxSize={60}
|
|
120
|
+
collapsible
|
|
121
|
+
onCollapse={() => console.log('Sidebar collapsed')}
|
|
122
|
+
onExpand={() => console.log('Sidebar expanded')}
|
|
123
|
+
onResize={(size, prevSize) => console.log(`Resized from ${prevSize}% to ${size}%`)}
|
|
124
|
+
>
|
|
125
|
+
<aside className="p-4">Collapsible sidebar content</aside>
|
|
126
|
+
</ResizablePanel>
|
|
127
|
+
```
|
|
128
|
+
### Example 3
|
|
129
|
+
```tsx
|
|
130
|
+
// Panel with conditional rendering support
|
|
131
|
+
<ResizablePanel
|
|
132
|
+
id="dynamic-panel"
|
|
133
|
+
order={1}
|
|
134
|
+
defaultSize={40}
|
|
135
|
+
collapsible
|
|
136
|
+
collapsedSize={5}
|
|
137
|
+
>
|
|
138
|
+
{isExpanded ? <FullContent /> : <CollapsedView />}
|
|
139
|
+
</ResizablePanel>
|
|
140
|
+
```
|
|
141
|
+
### Example 4
|
|
142
|
+
```tsx
|
|
143
|
+
// Panel with imperative control via ref
|
|
144
|
+
function PanelWithControl() {
|
|
145
|
+
const panelRef = useRef<ImperativePanelHandle>(null);
|
|
146
|
+
return (
|
|
147
|
+
<>
|
|
148
|
+
<button onClick={() => panelRef.current?.collapse()}>
|
|
149
|
+
Collapse Panel
|
|
150
|
+
</button>
|
|
151
|
+
<ResizablePanel ref={panelRef} defaultSize={50} collapsible>
|
|
152
|
+
<div>Controlled panel content</div>
|
|
153
|
+
</ResizablePanel>
|
|
154
|
+
</>
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# ScrollAreaCorner
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
ScrollAreaCorner - The corner element where horizontal and vertical scrollbars meet Appears when both horizontal and vertical scrollbars are present. Usually handled automatically by the ScrollArea component but can be customized for specific layout requirements.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { ScrollAreaCorner } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<ScrollAreaCorner
|
|
13
|
+
asChild={true}
|
|
14
|
+
className="value"
|
|
15
|
+
/>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Component Props
|
|
19
|
+
|
|
20
|
+
### asChild
|
|
21
|
+
- **Type**: `boolean`
|
|
22
|
+
- **Required**: No
|
|
23
|
+
- **Description**: No description available
|
|
24
|
+
|
|
25
|
+
### className
|
|
26
|
+
- **Type**: `string`
|
|
27
|
+
- **Required**: No
|
|
28
|
+
- **Description**: No description available
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
// Custom corner styling
|
|
34
|
+
<ScrollArea className="h-64 w-64">
|
|
35
|
+
<div className="w-96 h-96 p-4">
|
|
36
|
+
Content that overflows both axes
|
|
37
|
+
</div>
|
|
38
|
+
<ScrollBar orientation="horizontal" />
|
|
39
|
+
<ScrollAreaCorner className="bg-gray-100" />
|
|
40
|
+
</ScrollArea>
|
|
41
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# ScrollAreaThumb
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
ScrollAreaThumb - The draggable thumb element within the scrollbar Represents the current scroll position and can be dragged to scroll content. Usually styled automatically as part of the ScrollBar component, but can be customized for specific design requirements.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { ScrollAreaThumb } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<ScrollAreaThumb
|
|
13
|
+
asChild={true}
|
|
14
|
+
className="value"
|
|
15
|
+
/>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Component Props
|
|
19
|
+
|
|
20
|
+
### asChild
|
|
21
|
+
- **Type**: `boolean`
|
|
22
|
+
- **Required**: No
|
|
23
|
+
- **Description**: No description available
|
|
24
|
+
|
|
25
|
+
### className
|
|
26
|
+
- **Type**: `string`
|
|
27
|
+
- **Required**: No
|
|
28
|
+
- **Description**: No description available
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
// Custom scrollbar with styled thumb
|
|
34
|
+
const CustomScrollbar = ({ orientation = "vertical" }) => (
|
|
35
|
+
<ScrollAreaPrimitive.ScrollAreaScrollbar orientation={orientation}>
|
|
36
|
+
<ScrollAreaThumb className="bg-blue-500 hover:bg-blue-600 active:bg-blue-700" />
|
|
37
|
+
</ScrollAreaPrimitive.ScrollAreaScrollbar>
|
|
38
|
+
);
|
|
39
|
+
```
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# ScrollAreaViewport
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
ScrollAreaViewport - The viewport area of the scroll area Contains the scrollable content and handles the actual scrolling behavior. This is the element that receives focus and handles keyboard navigation. Use refs on this component for programmatic scrolling control.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { ScrollAreaViewport } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<ScrollAreaViewport
|
|
13
|
+
asChild={true}
|
|
14
|
+
className="value"
|
|
15
|
+
>
|
|
16
|
+
{/* Your content here */}
|
|
17
|
+
</ScrollAreaViewport>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Component Props
|
|
21
|
+
|
|
22
|
+
### asChild
|
|
23
|
+
- **Type**: `boolean`
|
|
24
|
+
- **Required**: No
|
|
25
|
+
- **Description**: No description available
|
|
26
|
+
|
|
27
|
+
### className
|
|
28
|
+
- **Type**: `string`
|
|
29
|
+
- **Required**: No
|
|
30
|
+
- **Description**: No description available
|
|
31
|
+
|
|
32
|
+
### children
|
|
33
|
+
- **Type**: `React.ReactNode`
|
|
34
|
+
- **Required**: No
|
|
35
|
+
- **Description**: No description available
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
// Accessing viewport for programmatic scrolling
|
|
41
|
+
const ScrollWithButton = () => {
|
|
42
|
+
const viewportRef = useRef<HTMLDivElement>(null);
|
|
43
|
+
const scrollToBottom = () => {
|
|
44
|
+
const viewport = viewportRef.current;
|
|
45
|
+
if (viewport) {
|
|
46
|
+
viewport.scrollTop = viewport.scrollHeight;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
return (
|
|
50
|
+
<ScrollArea className="h-64 w-96">
|
|
51
|
+
<ScrollAreaViewport ref={viewportRef}>
|
|
52
|
+
<div className="p-4">
|
|
53
|
+
// Content here
|
|
54
|
+
<button onClick={scrollToBottom}>Scroll to bottom</button>
|
|
55
|
+
</div>
|
|
56
|
+
</ScrollAreaViewport>
|
|
57
|
+
</ScrollArea>
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
```
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# ScrollArea
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
ScrollArea - Custom scrollable area with cross-browser styling Augments native scroll functionality for custom, cross-browser styling with enhanced scrolling experience. Built on Radix UI's ScrollArea primitive for accessibility and keyboard navigation support. Provides consistent scrollbar appearance across different browsers while maintaining native scroll behavior and performance. The component automatically handles vertical scrolling and can be extended with horizontal scrolling using the ScrollBar component. Supports programmatic control via refs and maintains all native scrolling behaviors including touch gestures.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { ScrollArea } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<ScrollArea
|
|
13
|
+
className="value"
|
|
14
|
+
type={value}
|
|
15
|
+
scrollHideDelay={0}
|
|
16
|
+
dir={value}
|
|
17
|
+
nonce="value"
|
|
18
|
+
asChild={true}
|
|
19
|
+
>
|
|
20
|
+
{/* Your content here */}
|
|
21
|
+
</ScrollArea>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Component Props
|
|
25
|
+
|
|
26
|
+
### className
|
|
27
|
+
- **Type**: `string`
|
|
28
|
+
- **Required**: No
|
|
29
|
+
- **Description**: No description available
|
|
30
|
+
|
|
31
|
+
### children
|
|
32
|
+
- **Type**: `React.ReactNode`
|
|
33
|
+
- **Required**: No
|
|
34
|
+
- **Description**: No description available
|
|
35
|
+
|
|
36
|
+
### type
|
|
37
|
+
- **Type**: `"auto" | "always" | "scroll" | "hover"`
|
|
38
|
+
- **Required**: No
|
|
39
|
+
- **Description**: No description available
|
|
40
|
+
|
|
41
|
+
### scrollHideDelay
|
|
42
|
+
- **Type**: `number`
|
|
43
|
+
- **Required**: No
|
|
44
|
+
- **Description**: No description available
|
|
45
|
+
|
|
46
|
+
### dir
|
|
47
|
+
- **Type**: `"ltr" | "rtl"`
|
|
48
|
+
- **Required**: No
|
|
49
|
+
- **Description**: No description available
|
|
50
|
+
|
|
51
|
+
### nonce
|
|
52
|
+
- **Type**: `string`
|
|
53
|
+
- **Required**: No
|
|
54
|
+
- **Description**: No description available
|
|
55
|
+
|
|
56
|
+
### asChild
|
|
57
|
+
- **Type**: `boolean`
|
|
58
|
+
- **Required**: No
|
|
59
|
+
- **Description**: No description available
|
|
60
|
+
|
|
61
|
+
## Examples
|
|
62
|
+
|
|
63
|
+
### Example 1
|
|
64
|
+
```tsx
|
|
65
|
+
// Basic vertical scrollable area
|
|
66
|
+
<ScrollArea className="h-72 w-48 rounded-md border">
|
|
67
|
+
<div className="p-4">
|
|
68
|
+
{items.map((item) => (
|
|
69
|
+
<div key={item.id} className="mb-4">
|
|
70
|
+
{item.content}
|
|
71
|
+
</div>
|
|
72
|
+
))}
|
|
73
|
+
</div>
|
|
74
|
+
</ScrollArea>
|
|
75
|
+
```
|
|
76
|
+
### Example 2
|
|
77
|
+
```tsx
|
|
78
|
+
// Horizontal scrolling with custom scrollbar
|
|
79
|
+
<ScrollArea className="w-full whitespace-nowrap rounded-md border">
|
|
80
|
+
<div className="flex gap-4 p-4">
|
|
81
|
+
{cards.map((card) => (
|
|
82
|
+
<div key={card.id} className="w-64 flex-none">
|
|
83
|
+
{card.content}
|
|
84
|
+
</div>
|
|
85
|
+
))}
|
|
86
|
+
</div>
|
|
87
|
+
<ScrollBar orientation="horizontal" />
|
|
88
|
+
</ScrollArea>
|
|
89
|
+
```
|
|
90
|
+
### Example 3
|
|
91
|
+
```tsx
|
|
92
|
+
// Both scrollbars for large content with always-visible scrollbars
|
|
93
|
+
<ScrollArea className="h-96 w-80 rounded-md border" type="always">
|
|
94
|
+
<div className="w-[600px] p-4">
|
|
95
|
+
<div className="space-y-4">
|
|
96
|
+
{largeDataSet.map((item) => (
|
|
97
|
+
<div key={item.id} className="min-w-max">
|
|
98
|
+
{item.wideContent}
|
|
99
|
+
</div>
|
|
100
|
+
))}
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
<ScrollBar orientation="horizontal" />
|
|
104
|
+
</ScrollArea>
|
|
105
|
+
```
|
|
106
|
+
### Example 4
|
|
107
|
+
```tsx
|
|
108
|
+
// Programmatic scrolling with ref
|
|
109
|
+
function ProgrammaticScroll() {
|
|
110
|
+
const viewportRef = useRef<HTMLDivElement>(null);
|
|
111
|
+
const scrollToTop = () => {
|
|
112
|
+
viewportRef.current?.scrollTo({ top: 0, behavior: 'smooth' });
|
|
113
|
+
};
|
|
114
|
+
return (
|
|
115
|
+
<ScrollArea className="h-72 w-96">
|
|
116
|
+
<ScrollAreaViewport ref={viewportRef}>
|
|
117
|
+
<div className="p-4">
|
|
118
|
+
// Long content here
|
|
119
|
+
<button onClick={scrollToTop}>Scroll to top</button>
|
|
120
|
+
</div>
|
|
121
|
+
</ScrollAreaViewport>
|
|
122
|
+
</ScrollArea>
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
```
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# ScrollBar
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
ScrollBar - Custom styled scrollbar for ScrollArea Companion component to ScrollArea that renders styled scrollbars with support for both vertical and horizontal orientations. The vertical scrollbar is automatically included in ScrollArea, but horizontal scrollbars must be explicitly added when needed. The scrollbar automatically shows/hides based on content overflow and user interaction. Supports touch interactions and provides visual feedback during scroll operations.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { ScrollBar } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<ScrollBar
|
|
13
|
+
orientation={value}
|
|
14
|
+
forceMount={value}
|
|
15
|
+
asChild={true}
|
|
16
|
+
className="value"
|
|
17
|
+
/>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Component Props
|
|
21
|
+
|
|
22
|
+
### orientation
|
|
23
|
+
- **Type**: `"vertical" | "horizontal"`
|
|
24
|
+
- **Required**: No
|
|
25
|
+
- **Description**: No description available
|
|
26
|
+
|
|
27
|
+
### forceMount
|
|
28
|
+
- **Type**: `true`
|
|
29
|
+
- **Required**: No
|
|
30
|
+
- **Description**: No description available
|
|
31
|
+
|
|
32
|
+
### asChild
|
|
33
|
+
- **Type**: `boolean`
|
|
34
|
+
- **Required**: No
|
|
35
|
+
- **Description**: No description available
|
|
36
|
+
|
|
37
|
+
### className
|
|
38
|
+
- **Type**: `string`
|
|
39
|
+
- **Required**: No
|
|
40
|
+
- **Description**: No description available
|
|
41
|
+
|
|
42
|
+
## Examples
|
|
43
|
+
|
|
44
|
+
### Example 1
|
|
45
|
+
```tsx
|
|
46
|
+
// Explicit horizontal scrollbar for wide content
|
|
47
|
+
<ScrollArea className="w-full max-w-md">
|
|
48
|
+
<div className="flex gap-4 p-4 min-w-max">
|
|
49
|
+
{items.map((item) => (
|
|
50
|
+
<div key={item.id} className="w-48 flex-none">
|
|
51
|
+
{item.content}
|
|
52
|
+
</div>
|
|
53
|
+
))}
|
|
54
|
+
</div>
|
|
55
|
+
<ScrollBar orientation="horizontal" />
|
|
56
|
+
</ScrollArea>
|
|
57
|
+
```
|
|
58
|
+
### Example 2
|
|
59
|
+
```tsx
|
|
60
|
+
// Both scrollbars with custom styling
|
|
61
|
+
<ScrollArea className="h-64 w-64 border">
|
|
62
|
+
<div className="w-96 h-96 p-4">
|
|
63
|
+
Large content that overflows both axes
|
|
64
|
+
</div>
|
|
65
|
+
<ScrollBar orientation="vertical" className="bg-slate-100" />
|
|
66
|
+
<ScrollBar orientation="horizontal" className="bg-slate-100" />
|
|
67
|
+
</ScrollArea>
|
|
68
|
+
```
|
|
69
|
+
### Example 3
|
|
70
|
+
```tsx
|
|
71
|
+
// Force-mounted scrollbar that always shows
|
|
72
|
+
<ScrollArea className="h-48 w-full">
|
|
73
|
+
<div className="p-4">
|
|
74
|
+
Content that may or may not overflow
|
|
75
|
+
</div>
|
|
76
|
+
<ScrollBar orientation="horizontal" forceMount />
|
|
77
|
+
</ScrollArea>
|
|
78
|
+
```
|