@neynar/ui 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.llm/accordion-content.llm.md +67 -0
- package/.llm/accordion-item.llm.md +61 -0
- package/.llm/accordion-trigger.llm.md +69 -0
- package/.llm/accordion.llm.md +88 -0
- package/.llm/alert-description.llm.md +78 -0
- package/.llm/alert-dialog-action.llm.md +51 -0
- package/.llm/alert-dialog-cancel.llm.md +48 -0
- package/.llm/alert-dialog-content.llm.md +88 -0
- package/.llm/alert-dialog-description.llm.md +53 -0
- package/.llm/alert-dialog-footer.llm.md +41 -0
- package/.llm/alert-dialog-header.llm.md +39 -0
- package/.llm/alert-dialog-overlay.llm.md +44 -0
- package/.llm/alert-dialog-portal.llm.md +41 -0
- package/.llm/alert-dialog-title.llm.md +46 -0
- package/.llm/alert-dialog-trigger.llm.md +40 -0
- package/.llm/alert-dialog.llm.md +80 -0
- package/.llm/alert-title.llm.md +48 -0
- package/.llm/alert.llm.md +92 -0
- package/.llm/aspect-ratio.llm.md +41 -0
- package/.llm/avatar-fallback.llm.md +41 -0
- package/.llm/avatar-image.llm.md +48 -0
- package/.llm/avatar.llm.md +35 -0
- package/.llm/badge.llm.md +117 -0
- package/.llm/blockquote.llm.md +55 -0
- package/.llm/body-text-large.llm.md +49 -0
- package/.llm/body-text-small.llm.md +49 -0
- package/.llm/body-text.llm.md +52 -0
- package/.llm/breadcrumb-ellipsis.llm.md +73 -0
- package/.llm/breadcrumb-item.llm.md +53 -0
- package/.llm/breadcrumb-link.llm.md +84 -0
- package/.llm/breadcrumb-list.llm.md +54 -0
- package/.llm/breadcrumb-page.llm.md +52 -0
- package/.llm/breadcrumb-separator.llm.md +60 -0
- package/.llm/breadcrumb.llm.md +110 -0
- package/.llm/button-group-separator.llm.md +53 -0
- package/.llm/button-group-text.llm.md +56 -0
- package/.llm/button-group.llm.md +81 -0
- package/.llm/button.llm.md +281 -0
- package/.llm/calendar-day-button.llm.md +57 -0
- package/.llm/calendar.llm.md +340 -0
- package/.llm/caption.llm.md +48 -0
- package/.llm/card-action.llm.md +64 -0
- package/.llm/card-content.llm.md +48 -0
- package/.llm/card-description.llm.md +46 -0
- package/.llm/card-footer.llm.md +56 -0
- package/.llm/card-header.llm.md +53 -0
- package/.llm/card-title.llm.md +43 -0
- package/.llm/card.llm.md +100 -0
- package/.llm/carousel-content.llm.md +77 -0
- package/.llm/carousel-item.llm.md +96 -0
- package/.llm/carousel-next.llm.md +95 -0
- package/.llm/carousel-previous.llm.md +95 -0
- package/.llm/carousel.llm.md +211 -0
- package/.llm/chart-config.llm.md +71 -0
- package/.llm/chart-container.llm.md +148 -0
- package/.llm/chart-legend-content.llm.md +85 -0
- package/.llm/chart-legend.llm.md +144 -0
- package/.llm/chart-style.llm.md +28 -0
- package/.llm/chart-tooltip-content.llm.md +149 -0
- package/.llm/chart-tooltip.llm.md +184 -0
- package/.llm/checkbox.llm.md +100 -0
- package/.llm/cn.llm.md +46 -0
- package/.llm/code.llm.md +45 -0
- package/.llm/collapsible-content.llm.md +109 -0
- package/.llm/collapsible-trigger.llm.md +75 -0
- package/.llm/collapsible.llm.md +109 -0
- package/.llm/combobox-option.llm.md +53 -0
- package/.llm/combobox.llm.md +208 -0
- package/.llm/command-dialog.llm.md +112 -0
- package/.llm/command-empty.llm.md +63 -0
- package/.llm/command-group.llm.md +83 -0
- package/.llm/command-input.llm.md +82 -0
- package/.llm/command-item.llm.md +97 -0
- package/.llm/command-list.llm.md +53 -0
- package/.llm/command-loading.llm.md +48 -0
- package/.llm/command-separator.llm.md +44 -0
- package/.llm/command-shortcut.llm.md +63 -0
- package/.llm/command.llm.md +147 -0
- package/.llm/container.llm.md +236 -0
- package/.llm/context-menu-checkbox-item.llm.md +97 -0
- package/.llm/context-menu-content.llm.md +91 -0
- package/.llm/context-menu-group.llm.md +61 -0
- package/.llm/context-menu-item.llm.md +94 -0
- package/.llm/context-menu-label.llm.md +60 -0
- package/.llm/context-menu-portal.llm.md +49 -0
- package/.llm/context-menu-radio-group.llm.md +66 -0
- package/.llm/context-menu-radio-item.llm.md +76 -0
- package/.llm/context-menu-separator.llm.md +51 -0
- package/.llm/context-menu-shortcut.llm.md +57 -0
- package/.llm/context-menu-sub-content.llm.md +90 -0
- package/.llm/context-menu-sub-trigger.llm.md +73 -0
- package/.llm/context-menu-sub.llm.md +61 -0
- package/.llm/context-menu-trigger.llm.md +53 -0
- package/.llm/context-menu.llm.md +103 -0
- package/.llm/date-picker.llm.md +90 -0
- package/.llm/dialog-close.llm.md +61 -0
- package/.llm/dialog-content.llm.md +128 -0
- package/.llm/dialog-description.llm.md +44 -0
- package/.llm/dialog-footer.llm.md +38 -0
- package/.llm/dialog-header.llm.md +40 -0
- package/.llm/dialog-overlay.llm.md +57 -0
- package/.llm/dialog-portal.llm.md +47 -0
- package/.llm/dialog-title.llm.md +41 -0
- package/.llm/dialog-trigger.llm.md +51 -0
- package/.llm/dialog.llm.md +113 -0
- package/.llm/drawer-close.llm.md +53 -0
- package/.llm/drawer-content.llm.md +58 -0
- package/.llm/drawer-description.llm.md +54 -0
- package/.llm/drawer-footer.llm.md +67 -0
- package/.llm/drawer-header.llm.md +60 -0
- package/.llm/drawer-overlay.llm.md +40 -0
- package/.llm/drawer-portal.llm.md +42 -0
- package/.llm/drawer-title.llm.md +51 -0
- package/.llm/drawer-trigger.llm.md +44 -0
- package/.llm/drawer.llm.md +194 -0
- package/.llm/dropdown-menu-checkbox-item.llm.md +111 -0
- package/.llm/dropdown-menu-content.llm.md +109 -0
- package/.llm/dropdown-menu-group.llm.md +38 -0
- package/.llm/dropdown-menu-item.llm.md +94 -0
- package/.llm/dropdown-menu-label.llm.md +66 -0
- package/.llm/dropdown-menu-portal.llm.md +32 -0
- package/.llm/dropdown-menu-radio-group.llm.md +73 -0
- package/.llm/dropdown-menu-radio-item.llm.md +92 -0
- package/.llm/dropdown-menu-separator.llm.md +55 -0
- package/.llm/dropdown-menu-shortcut.llm.md +74 -0
- package/.llm/dropdown-menu-sub-content.llm.md +80 -0
- package/.llm/dropdown-menu-sub-trigger.llm.md +84 -0
- package/.llm/dropdown-menu-sub.llm.md +74 -0
- package/.llm/dropdown-menu-trigger.llm.md +48 -0
- package/.llm/dropdown-menu.llm.md +120 -0
- package/.llm/empty-content.llm.md +103 -0
- package/.llm/empty-description.llm.md +70 -0
- package/.llm/empty-header.llm.md +64 -0
- package/.llm/empty-media.llm.md +81 -0
- package/.llm/empty-state.llm.md +174 -0
- package/.llm/empty-title.llm.md +54 -0
- package/.llm/empty.llm.md +158 -0
- package/.llm/field-content.llm.md +28 -0
- package/.llm/field-description.llm.md +28 -0
- package/.llm/field-error.llm.md +41 -0
- package/.llm/field-group.llm.md +84 -0
- package/.llm/field-label.llm.md +28 -0
- package/.llm/field-legend.llm.md +77 -0
- package/.llm/field-separator.llm.md +35 -0
- package/.llm/field-set.llm.md +80 -0
- package/.llm/field-title.llm.md +28 -0
- package/.llm/field.llm.md +35 -0
- package/.llm/hover-card-content.llm.md +167 -0
- package/.llm/hover-card-trigger.llm.md +65 -0
- package/.llm/hover-card.llm.md +121 -0
- package/.llm/input-group-addon.llm.md +91 -0
- package/.llm/input-group-button.llm.md +120 -0
- package/.llm/input-group-input.llm.md +145 -0
- package/.llm/input-group-text.llm.md +75 -0
- package/.llm/input-group-textarea.llm.md +157 -0
- package/.llm/input-group.llm.md +108 -0
- package/.llm/input.llm.md +319 -0
- package/.llm/item-actions.llm.md +77 -0
- package/.llm/item-content.llm.md +73 -0
- package/.llm/item-description.llm.md +61 -0
- package/.llm/item-footer.llm.md +68 -0
- package/.llm/item-group.llm.md +73 -0
- package/.llm/item-header.llm.md +66 -0
- package/.llm/item-media.llm.md +75 -0
- package/.llm/item-separator.llm.md +80 -0
- package/.llm/item-title.llm.md +59 -0
- package/.llm/item.llm.md +115 -0
- package/.llm/kbd-group.llm.md +71 -0
- package/.llm/kbd.llm.md +71 -0
- package/.llm/label.llm.md +145 -0
- package/.llm/menubar-checkbox-item.llm.md +66 -0
- package/.llm/menubar-content.llm.md +128 -0
- package/.llm/menubar-group.llm.md +40 -0
- package/.llm/menubar-item.llm.md +62 -0
- package/.llm/menubar-label.llm.md +40 -0
- package/.llm/menubar-menu.llm.md +32 -0
- package/.llm/menubar-portal.llm.md +38 -0
- package/.llm/menubar-radio-group.llm.md +39 -0
- package/.llm/menubar-radio-item.llm.md +59 -0
- package/.llm/menubar-separator.llm.md +35 -0
- package/.llm/menubar-shortcut.llm.md +37 -0
- package/.llm/menubar-sub-content.llm.md +127 -0
- package/.llm/menubar-sub-trigger.llm.md +51 -0
- package/.llm/menubar-sub.llm.md +53 -0
- package/.llm/menubar-trigger.llm.md +37 -0
- package/.llm/menubar.llm.md +115 -0
- package/.llm/navigation-menu-content.llm.md +116 -0
- package/.llm/navigation-menu-indicator.llm.md +68 -0
- package/.llm/navigation-menu-item.llm.md +62 -0
- package/.llm/navigation-menu-link.llm.md +109 -0
- package/.llm/navigation-menu-list.llm.md +52 -0
- package/.llm/navigation-menu-trigger-style.llm.md +22 -0
- package/.llm/navigation-menu-trigger.llm.md +57 -0
- package/.llm/navigation-menu-viewport.llm.md +51 -0
- package/.llm/navigation-menu.llm.md +184 -0
- package/.llm/overline.llm.md +51 -0
- package/.llm/page-title.llm.md +52 -0
- package/.llm/pagination-content.llm.md +60 -0
- package/.llm/pagination-ellipsis.llm.md +107 -0
- package/.llm/pagination-item.llm.md +59 -0
- package/.llm/pagination-link.llm.md +150 -0
- package/.llm/pagination-next.llm.md +115 -0
- package/.llm/pagination-previous.llm.md +115 -0
- package/.llm/pagination.llm.md +190 -0
- package/.llm/popover-anchor.llm.md +53 -0
- package/.llm/popover-content.llm.md +109 -0
- package/.llm/popover-trigger.llm.md +54 -0
- package/.llm/popover.llm.md +116 -0
- package/.llm/progress.llm.md +76 -0
- package/.llm/radio-group-indicator.llm.md +28 -0
- package/.llm/radio-group-item.llm.md +40 -0
- package/.llm/radio-group.llm.md +76 -0
- package/.llm/resizable-handle.llm.md +156 -0
- package/.llm/resizable-panel-group.llm.md +149 -0
- package/.llm/resizable-panel.llm.md +157 -0
- package/.llm/scroll-area-corner.llm.md +41 -0
- package/.llm/scroll-area-thumb.llm.md +39 -0
- package/.llm/scroll-area-viewport.llm.md +60 -0
- package/.llm/scroll-area.llm.md +125 -0
- package/.llm/scroll-bar.llm.md +78 -0
- package/.llm/sdk-items-registry.json +2984 -0
- package/.llm/section-title.llm.md +48 -0
- package/.llm/select-content.llm.md +139 -0
- package/.llm/select-group.llm.md +60 -0
- package/.llm/select-item.llm.md +75 -0
- package/.llm/select-label.llm.md +62 -0
- package/.llm/select-scroll-down-button.llm.md +45 -0
- package/.llm/select-scroll-up-button.llm.md +45 -0
- package/.llm/select-separator.llm.md +59 -0
- package/.llm/select-trigger.llm.md +66 -0
- package/.llm/select-value.llm.md +67 -0
- package/.llm/select.llm.md +159 -0
- package/.llm/separator.llm.md +129 -0
- package/.llm/sheet-close.llm.md +49 -0
- package/.llm/sheet-content.llm.md +115 -0
- package/.llm/sheet-description.llm.md +62 -0
- package/.llm/sheet-footer.llm.md +64 -0
- package/.llm/sheet-header.llm.md +52 -0
- package/.llm/sheet-title.llm.md +53 -0
- package/.llm/sheet-trigger.llm.md +46 -0
- package/.llm/sheet.llm.md +126 -0
- package/.llm/sidebar-content.llm.md +63 -0
- package/.llm/sidebar-footer.llm.md +50 -0
- package/.llm/sidebar-group-action.llm.md +60 -0
- package/.llm/sidebar-group-content.llm.md +64 -0
- package/.llm/sidebar-group-label.llm.md +53 -0
- package/.llm/sidebar-group.llm.md +56 -0
- package/.llm/sidebar-header.llm.md +67 -0
- package/.llm/sidebar-input.llm.md +50 -0
- package/.llm/sidebar-inset.llm.md +52 -0
- package/.llm/sidebar-menu-action.llm.md +84 -0
- package/.llm/sidebar-menu-badge.llm.md +60 -0
- package/.llm/sidebar-menu-button.llm.md +103 -0
- package/.llm/sidebar-menu-item.llm.md +75 -0
- package/.llm/sidebar-menu-skeleton.llm.md +76 -0
- package/.llm/sidebar-menu-sub-button.llm.md +85 -0
- package/.llm/sidebar-menu-sub-item.llm.md +54 -0
- package/.llm/sidebar-menu-sub.llm.md +74 -0
- package/.llm/sidebar-menu.llm.md +65 -0
- package/.llm/sidebar-provider.llm.md +79 -0
- package/.llm/sidebar-rail.llm.md +34 -0
- package/.llm/sidebar-separator.llm.md +57 -0
- package/.llm/sidebar-trigger.llm.md +49 -0
- package/.llm/sidebar.llm.md +129 -0
- package/.llm/skeleton.llm.md +134 -0
- package/.llm/slider.llm.md +173 -0
- package/.llm/spinner.llm.md +182 -0
- package/.llm/stack.llm.md +28 -0
- package/.llm/subsection-title.llm.md +46 -0
- package/.llm/switch.llm.md +76 -0
- package/.llm/table-body.llm.md +36 -0
- package/.llm/table-caption.llm.md +48 -0
- package/.llm/table-cell.llm.md +53 -0
- package/.llm/table-footer.llm.md +41 -0
- package/.llm/table-head.llm.md +69 -0
- package/.llm/table-header.llm.md +41 -0
- package/.llm/table-row.llm.md +42 -0
- package/.llm/table.llm.md +123 -0
- package/.llm/tabs-content.llm.md +47 -0
- package/.llm/tabs-list.llm.md +41 -0
- package/.llm/tabs-trigger.llm.md +47 -0
- package/.llm/tabs.llm.md +71 -0
- package/.llm/text-field.llm.md +327 -0
- package/.llm/textarea.llm.md +311 -0
- package/.llm/theme-preference.llm.md +25 -0
- package/.llm/theme-toggle.llm.md +57 -0
- package/.llm/theme.llm.md +14 -0
- package/.llm/toaster.llm.md +193 -0
- package/.llm/toggle-group-item.llm.md +59 -0
- package/.llm/toggle-group.llm.md +101 -0
- package/.llm/toggle.llm.md +40 -0
- package/.llm/tooltip-content.llm.md +185 -0
- package/.llm/tooltip-provider.llm.md +68 -0
- package/.llm/tooltip-trigger.llm.md +70 -0
- package/.llm/tooltip.llm.md +129 -0
- package/.llm/use-carousel.llm.md +55 -0
- package/.llm/use-command-state.llm.md +32 -0
- package/.llm/use-is-mobile.llm.md +73 -0
- package/.llm/use-sidebar.llm.md +61 -0
- package/dist/components/ui/scroll-area.d.ts +5 -5
- package/dist/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/components/ui/stack.d.ts.map +1 -1
- package/dist/components/ui/stories/scroll-area.stories.d.ts +1 -1
- package/dist/components/ui/stories/typography.stories.d.ts +8 -108
- package/dist/components/ui/stories/typography.stories.d.ts.map +1 -1
- package/dist/components/ui/theme-toggle.d.ts +0 -3
- package/dist/components/ui/theme-toggle.d.ts.map +1 -1
- package/dist/components/ui/theme.d.ts.map +1 -1
- package/dist/components/ui/typography.d.ts +211 -474
- package/dist/components/ui/typography.d.ts.map +1 -1
- package/dist/index.js +5160 -9875
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/components/ui/stack.tsx +3 -1
- package/src/components/ui/stories/typography.stories.tsx +261 -1512
- package/src/components/ui/theme-toggle.tsx +1 -3
- package/src/components/ui/theme.tsx +6 -1
- package/src/components/ui/typography.tsx +416 -1136
- package/src/styles/globals.css +57 -106
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# PaginationNext
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Next page navigation button Navigates to the next page in the pagination sequence. Built on PaginationLink with fixed "default" size and includes a chevron-right icon for visual direction. Features responsive design that shows only an icon on mobile devices and "Next" text with icon on larger screens for optimal user experience. Uses buttonVariants with "ghost" variant by default, inheriting all focus management, hover states, and accessibility features from the Button component.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { PaginationNext } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<PaginationNext
|
|
13
|
+
href="value"
|
|
14
|
+
className="value"
|
|
15
|
+
onClick={handleClick}
|
|
16
|
+
"aria-label"="value"
|
|
17
|
+
"aria-disabled"={true}
|
|
18
|
+
tabIndex={0}
|
|
19
|
+
id="value"
|
|
20
|
+
title="value"
|
|
21
|
+
target={value}
|
|
22
|
+
rel="value"
|
|
23
|
+
/>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Component Props
|
|
27
|
+
|
|
28
|
+
### href
|
|
29
|
+
- **Type**: `string`
|
|
30
|
+
- **Required**: No
|
|
31
|
+
- **Description**: No description available
|
|
32
|
+
|
|
33
|
+
### className
|
|
34
|
+
- **Type**: `string`
|
|
35
|
+
- **Required**: No
|
|
36
|
+
- **Description**: No description available
|
|
37
|
+
|
|
38
|
+
### onClick
|
|
39
|
+
- **Type**: `React.MouseEventHandler<HTMLAnchorElement>`
|
|
40
|
+
- **Required**: No
|
|
41
|
+
- **Description**: No description available
|
|
42
|
+
|
|
43
|
+
### "aria-label"
|
|
44
|
+
- **Type**: `string`
|
|
45
|
+
- **Required**: No
|
|
46
|
+
- **Description**: No description available
|
|
47
|
+
|
|
48
|
+
### "aria-disabled"
|
|
49
|
+
- **Type**: `boolean`
|
|
50
|
+
- **Required**: No
|
|
51
|
+
- **Description**: No description available
|
|
52
|
+
|
|
53
|
+
### tabIndex
|
|
54
|
+
- **Type**: `number`
|
|
55
|
+
- **Required**: No
|
|
56
|
+
- **Description**: No description available
|
|
57
|
+
|
|
58
|
+
### id
|
|
59
|
+
- **Type**: `string`
|
|
60
|
+
- **Required**: No
|
|
61
|
+
- **Description**: No description available
|
|
62
|
+
|
|
63
|
+
### title
|
|
64
|
+
- **Type**: `string`
|
|
65
|
+
- **Required**: No
|
|
66
|
+
- **Description**: No description available
|
|
67
|
+
|
|
68
|
+
### target
|
|
69
|
+
- **Type**: `"_self" | "_blank" | "_parent" | "_top"`
|
|
70
|
+
- **Required**: No
|
|
71
|
+
- **Description**: No description available
|
|
72
|
+
|
|
73
|
+
### rel
|
|
74
|
+
- **Type**: `string`
|
|
75
|
+
- **Required**: No
|
|
76
|
+
- **Description**: No description available
|
|
77
|
+
|
|
78
|
+
## Examples
|
|
79
|
+
|
|
80
|
+
### Example 1
|
|
81
|
+
```tsx
|
|
82
|
+
// Basic next button
|
|
83
|
+
<PaginationNext href="/products?page=3" />
|
|
84
|
+
```
|
|
85
|
+
### Example 2
|
|
86
|
+
```tsx
|
|
87
|
+
// With disabled state (typically for last page)
|
|
88
|
+
<PaginationNext
|
|
89
|
+
href="#"
|
|
90
|
+
className="pointer-events-none opacity-50"
|
|
91
|
+
aria-disabled="true"
|
|
92
|
+
tabIndex={-1}
|
|
93
|
+
/>
|
|
94
|
+
```
|
|
95
|
+
### Example 3
|
|
96
|
+
```tsx
|
|
97
|
+
// With click handler for client-side navigation
|
|
98
|
+
<PaginationNext
|
|
99
|
+
href="#"
|
|
100
|
+
onClick={(e) => {
|
|
101
|
+
e.preventDefault();
|
|
102
|
+
if (currentPage < totalPages) {
|
|
103
|
+
onPageChange(currentPage + 1);
|
|
104
|
+
}
|
|
105
|
+
}}
|
|
106
|
+
/>
|
|
107
|
+
```
|
|
108
|
+
### Example 4
|
|
109
|
+
```tsx
|
|
110
|
+
// With custom aria-label for internationalization
|
|
111
|
+
<PaginationNext
|
|
112
|
+
href="/page/6"
|
|
113
|
+
aria-label="Ir a la página siguiente"
|
|
114
|
+
/>
|
|
115
|
+
```
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# PaginationPrevious
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Previous page navigation button Navigates to the previous page in the pagination sequence. Built on PaginationLink with fixed "default" size and includes a chevron-left icon for visual direction. Features responsive design that shows only an icon on mobile devices and icon with "Previous" text on larger screens for optimal user experience. Uses buttonVariants with "ghost" variant by default, inheriting all focus management, hover states, and accessibility features from the Button component.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { PaginationPrevious } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<PaginationPrevious
|
|
13
|
+
href="value"
|
|
14
|
+
className="value"
|
|
15
|
+
onClick={handleClick}
|
|
16
|
+
"aria-label"="value"
|
|
17
|
+
"aria-disabled"={true}
|
|
18
|
+
tabIndex={0}
|
|
19
|
+
id="value"
|
|
20
|
+
title="value"
|
|
21
|
+
target={value}
|
|
22
|
+
rel="value"
|
|
23
|
+
/>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Component Props
|
|
27
|
+
|
|
28
|
+
### href
|
|
29
|
+
- **Type**: `string`
|
|
30
|
+
- **Required**: No
|
|
31
|
+
- **Description**: No description available
|
|
32
|
+
|
|
33
|
+
### className
|
|
34
|
+
- **Type**: `string`
|
|
35
|
+
- **Required**: No
|
|
36
|
+
- **Description**: No description available
|
|
37
|
+
|
|
38
|
+
### onClick
|
|
39
|
+
- **Type**: `React.MouseEventHandler<HTMLAnchorElement>`
|
|
40
|
+
- **Required**: No
|
|
41
|
+
- **Description**: No description available
|
|
42
|
+
|
|
43
|
+
### "aria-label"
|
|
44
|
+
- **Type**: `string`
|
|
45
|
+
- **Required**: No
|
|
46
|
+
- **Description**: No description available
|
|
47
|
+
|
|
48
|
+
### "aria-disabled"
|
|
49
|
+
- **Type**: `boolean`
|
|
50
|
+
- **Required**: No
|
|
51
|
+
- **Description**: No description available
|
|
52
|
+
|
|
53
|
+
### tabIndex
|
|
54
|
+
- **Type**: `number`
|
|
55
|
+
- **Required**: No
|
|
56
|
+
- **Description**: No description available
|
|
57
|
+
|
|
58
|
+
### id
|
|
59
|
+
- **Type**: `string`
|
|
60
|
+
- **Required**: No
|
|
61
|
+
- **Description**: No description available
|
|
62
|
+
|
|
63
|
+
### title
|
|
64
|
+
- **Type**: `string`
|
|
65
|
+
- **Required**: No
|
|
66
|
+
- **Description**: No description available
|
|
67
|
+
|
|
68
|
+
### target
|
|
69
|
+
- **Type**: `"_self" | "_blank" | "_parent" | "_top"`
|
|
70
|
+
- **Required**: No
|
|
71
|
+
- **Description**: No description available
|
|
72
|
+
|
|
73
|
+
### rel
|
|
74
|
+
- **Type**: `string`
|
|
75
|
+
- **Required**: No
|
|
76
|
+
- **Description**: No description available
|
|
77
|
+
|
|
78
|
+
## Examples
|
|
79
|
+
|
|
80
|
+
### Example 1
|
|
81
|
+
```tsx
|
|
82
|
+
// Basic previous button
|
|
83
|
+
<PaginationPrevious href="/products?page=1" />
|
|
84
|
+
```
|
|
85
|
+
### Example 2
|
|
86
|
+
```tsx
|
|
87
|
+
// With disabled state (typically for first page)
|
|
88
|
+
<PaginationPrevious
|
|
89
|
+
href="#"
|
|
90
|
+
className="pointer-events-none opacity-50"
|
|
91
|
+
aria-disabled="true"
|
|
92
|
+
tabIndex={-1}
|
|
93
|
+
/>
|
|
94
|
+
```
|
|
95
|
+
### Example 3
|
|
96
|
+
```tsx
|
|
97
|
+
// With click handler for client-side navigation
|
|
98
|
+
<PaginationPrevious
|
|
99
|
+
href="#"
|
|
100
|
+
onClick={(e) => {
|
|
101
|
+
e.preventDefault();
|
|
102
|
+
if (currentPage > 1) {
|
|
103
|
+
onPageChange(currentPage - 1);
|
|
104
|
+
}
|
|
105
|
+
}}
|
|
106
|
+
/>
|
|
107
|
+
```
|
|
108
|
+
### Example 4
|
|
109
|
+
```tsx
|
|
110
|
+
// With custom aria-label for internationalization
|
|
111
|
+
<PaginationPrevious
|
|
112
|
+
href="/page/4"
|
|
113
|
+
aria-label="Ir a la página anterior"
|
|
114
|
+
/>
|
|
115
|
+
```
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Pagination
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Pagination navigation component for large datasets A comprehensive pagination component built on shadcn/ui standards that provides intuitive navigation through pages of content. All interactive elements use buttonVariants from the Button component for consistent styling and behavior: - PaginationLink uses "outline" variant when active, "ghost" when inactive - PaginationPrevious/PaginationNext use "ghost" variant by default - All components inherit Button's focus management, hover states, and accessibility Features responsive design, full accessibility compliance, and flexible composition patterns for different use cases. Ideal for data tables, search results, product listings, and any paginated content that needs professional navigation controls.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { Pagination } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<Pagination
|
|
13
|
+
className="value"
|
|
14
|
+
role="value"
|
|
15
|
+
"aria-label"="value"
|
|
16
|
+
id="value"
|
|
17
|
+
tabIndex={0}
|
|
18
|
+
>
|
|
19
|
+
{/* Your content here */}
|
|
20
|
+
</Pagination>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Component Props
|
|
24
|
+
|
|
25
|
+
### className
|
|
26
|
+
- **Type**: `string`
|
|
27
|
+
- **Required**: No
|
|
28
|
+
- **Description**: No description available
|
|
29
|
+
|
|
30
|
+
### children
|
|
31
|
+
- **Type**: `React.ReactNode`
|
|
32
|
+
- **Required**: No
|
|
33
|
+
- **Description**: No description available
|
|
34
|
+
|
|
35
|
+
### role
|
|
36
|
+
- **Type**: `string`
|
|
37
|
+
- **Required**: No
|
|
38
|
+
- **Description**: No description available
|
|
39
|
+
|
|
40
|
+
### "aria-label"
|
|
41
|
+
- **Type**: `string`
|
|
42
|
+
- **Required**: No
|
|
43
|
+
- **Description**: No description available
|
|
44
|
+
|
|
45
|
+
### id
|
|
46
|
+
- **Type**: `string`
|
|
47
|
+
- **Required**: No
|
|
48
|
+
- **Description**: No description available
|
|
49
|
+
|
|
50
|
+
### tabIndex
|
|
51
|
+
- **Type**: `number`
|
|
52
|
+
- **Required**: No
|
|
53
|
+
- **Description**: No description available
|
|
54
|
+
|
|
55
|
+
## Examples
|
|
56
|
+
|
|
57
|
+
### Example 1
|
|
58
|
+
```tsx
|
|
59
|
+
// Basic pagination with numbered pages
|
|
60
|
+
<Pagination>
|
|
61
|
+
<PaginationContent>
|
|
62
|
+
<PaginationItem>
|
|
63
|
+
<PaginationPrevious href="/products?page=1" />
|
|
64
|
+
</PaginationItem>
|
|
65
|
+
<PaginationItem>
|
|
66
|
+
<PaginationLink href="/products?page=1">1</PaginationLink>
|
|
67
|
+
</PaginationItem>
|
|
68
|
+
<PaginationItem>
|
|
69
|
+
<PaginationLink href="/products?page=2" isActive>2</PaginationLink>
|
|
70
|
+
</PaginationItem>
|
|
71
|
+
<PaginationItem>
|
|
72
|
+
<PaginationLink href="/products?page=3">3</PaginationLink>
|
|
73
|
+
</PaginationItem>
|
|
74
|
+
<PaginationItem>
|
|
75
|
+
<PaginationNext href="/products?page=3" />
|
|
76
|
+
</PaginationItem>
|
|
77
|
+
</PaginationContent>
|
|
78
|
+
</Pagination>
|
|
79
|
+
```
|
|
80
|
+
### Example 2
|
|
81
|
+
```tsx
|
|
82
|
+
// Complete pagination with ellipsis for large datasets
|
|
83
|
+
<Pagination>
|
|
84
|
+
<PaginationContent>
|
|
85
|
+
<PaginationItem>
|
|
86
|
+
<PaginationPrevious href="/search?q=react&page=4" />
|
|
87
|
+
</PaginationItem>
|
|
88
|
+
<PaginationItem>
|
|
89
|
+
<PaginationLink href="/search?q=react&page=1">1</PaginationLink>
|
|
90
|
+
</PaginationItem>
|
|
91
|
+
<PaginationItem>
|
|
92
|
+
<PaginationEllipsis />
|
|
93
|
+
</PaginationItem>
|
|
94
|
+
<PaginationItem>
|
|
95
|
+
<PaginationLink href="/search?q=react&page=4">4</PaginationLink>
|
|
96
|
+
</PaginationItem>
|
|
97
|
+
<PaginationItem>
|
|
98
|
+
<PaginationLink href="/search?q=react&page=5" isActive>5</PaginationLink>
|
|
99
|
+
</PaginationItem>
|
|
100
|
+
<PaginationItem>
|
|
101
|
+
<PaginationLink href="/search?q=react&page=6">6</PaginationLink>
|
|
102
|
+
</PaginationItem>
|
|
103
|
+
<PaginationItem>
|
|
104
|
+
<PaginationEllipsis />
|
|
105
|
+
</PaginationItem>
|
|
106
|
+
<PaginationItem>
|
|
107
|
+
<PaginationLink href="/search?q=react&page=50">50</PaginationLink>
|
|
108
|
+
</PaginationItem>
|
|
109
|
+
<PaginationItem>
|
|
110
|
+
<PaginationNext href="/search?q=react&page=6" />
|
|
111
|
+
</PaginationItem>
|
|
112
|
+
</PaginationContent>
|
|
113
|
+
</Pagination>
|
|
114
|
+
```
|
|
115
|
+
### Example 3
|
|
116
|
+
```tsx
|
|
117
|
+
// Client-side pagination with state management
|
|
118
|
+
function PaginatedResults() {
|
|
119
|
+
const [currentPage, setCurrentPage] = useState(1);
|
|
120
|
+
const totalPages = 25;
|
|
121
|
+
return (
|
|
122
|
+
<Pagination>
|
|
123
|
+
<PaginationContent>
|
|
124
|
+
<PaginationItem>
|
|
125
|
+
<PaginationPrevious
|
|
126
|
+
href="#"
|
|
127
|
+
onClick={(e) => {
|
|
128
|
+
e.preventDefault();
|
|
129
|
+
if (currentPage > 1) setCurrentPage(currentPage - 1);
|
|
130
|
+
}}
|
|
131
|
+
className={currentPage === 1 ? "pointer-events-none opacity-50" : ""}
|
|
132
|
+
aria-disabled={currentPage === 1}
|
|
133
|
+
/>
|
|
134
|
+
</PaginationItem>
|
|
135
|
+
{[1, 2, 3].map((page) => (
|
|
136
|
+
<PaginationItem key={page}>
|
|
137
|
+
<PaginationLink
|
|
138
|
+
href="#"
|
|
139
|
+
isActive={currentPage === page}
|
|
140
|
+
onClick={(e) => {
|
|
141
|
+
e.preventDefault();
|
|
142
|
+
setCurrentPage(page);
|
|
143
|
+
}}
|
|
144
|
+
>
|
|
145
|
+
{page}
|
|
146
|
+
</PaginationLink>
|
|
147
|
+
</PaginationItem>
|
|
148
|
+
))}
|
|
149
|
+
<PaginationItem>
|
|
150
|
+
<PaginationNext
|
|
151
|
+
href="#"
|
|
152
|
+
onClick={(e) => {
|
|
153
|
+
e.preventDefault();
|
|
154
|
+
if (currentPage < totalPages) setCurrentPage(currentPage + 1);
|
|
155
|
+
}}
|
|
156
|
+
className={currentPage === totalPages ? "pointer-events-none opacity-50" : ""}
|
|
157
|
+
aria-disabled={currentPage === totalPages}
|
|
158
|
+
/>
|
|
159
|
+
</PaginationItem>
|
|
160
|
+
</PaginationContent>
|
|
161
|
+
</Pagination>
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
### Example 4
|
|
166
|
+
```tsx
|
|
167
|
+
// Different sizes for various use cases
|
|
168
|
+
// Compact pagination for data tables
|
|
169
|
+
<Pagination>
|
|
170
|
+
<PaginationContent>
|
|
171
|
+
<PaginationItem>
|
|
172
|
+
<PaginationLink href="/data?page=1" size="sm">1</PaginationLink>
|
|
173
|
+
</PaginationItem>
|
|
174
|
+
<PaginationItem>
|
|
175
|
+
<PaginationLink href="/data?page=2" size="sm" isActive>2</PaginationLink>
|
|
176
|
+
</PaginationItem>
|
|
177
|
+
</PaginationContent>
|
|
178
|
+
</Pagination>
|
|
179
|
+
// Large pagination for primary content
|
|
180
|
+
<Pagination>
|
|
181
|
+
<PaginationContent>
|
|
182
|
+
<PaginationItem>
|
|
183
|
+
<PaginationLink href="/articles?page=1" size="lg">1</PaginationLink>
|
|
184
|
+
</PaginationItem>
|
|
185
|
+
<PaginationItem>
|
|
186
|
+
<PaginationLink href="/articles?page=2" size="lg" isActive>2</PaginationLink>
|
|
187
|
+
</PaginationItem>
|
|
188
|
+
</PaginationContent>
|
|
189
|
+
</Pagination>
|
|
190
|
+
```
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# PopoverAnchor
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
PopoverAnchor - Optional anchor element for custom positioning Use PopoverAnchor when you need the popover to position relative to an element other than the trigger. This is useful for complex layouts where the visual trigger and positioning reference should be different elements.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { PopoverAnchor } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<PopoverAnchor
|
|
13
|
+
asChild={true}
|
|
14
|
+
className="value"
|
|
15
|
+
>
|
|
16
|
+
{/* Your content here */}
|
|
17
|
+
</PopoverAnchor>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Component Props
|
|
21
|
+
|
|
22
|
+
### asChild
|
|
23
|
+
- **Type**: `boolean`
|
|
24
|
+
- **Required**: No
|
|
25
|
+
- **Description**: No description available
|
|
26
|
+
|
|
27
|
+
### children
|
|
28
|
+
- **Type**: `React.ReactNode`
|
|
29
|
+
- **Required**: No
|
|
30
|
+
- **Description**: No description available
|
|
31
|
+
|
|
32
|
+
### className
|
|
33
|
+
- **Type**: `string`
|
|
34
|
+
- **Required**: No
|
|
35
|
+
- **Description**: No description available
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
<Popover>
|
|
41
|
+
<PopoverAnchor asChild>
|
|
42
|
+
<div className="relative">
|
|
43
|
+
<span>Reference element for positioning</span>
|
|
44
|
+
</div>
|
|
45
|
+
</PopoverAnchor>
|
|
46
|
+
<PopoverTrigger asChild>
|
|
47
|
+
<Button>Open (positioned relative to anchor)</Button>
|
|
48
|
+
</PopoverTrigger>
|
|
49
|
+
<PopoverContent>
|
|
50
|
+
<p>This popover positions relative to the anchor, not the trigger</p>
|
|
51
|
+
</PopoverContent>
|
|
52
|
+
</Popover>
|
|
53
|
+
```
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# PopoverContent
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
PopoverContent - The content container for the popover
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { PopoverContent } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<PopoverContent
|
|
13
|
+
side={value}
|
|
14
|
+
align={value}
|
|
15
|
+
sideOffset={0}
|
|
16
|
+
alignOffset={0}
|
|
17
|
+
avoidCollisions={true}
|
|
18
|
+
collisionBoundary={[]}
|
|
19
|
+
collisionPadding={value}
|
|
20
|
+
sticky={value}
|
|
21
|
+
hideWhenDetached={true}
|
|
22
|
+
className="value"
|
|
23
|
+
style={value}
|
|
24
|
+
>
|
|
25
|
+
{/* Your content here */}
|
|
26
|
+
</PopoverContent>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Component Props
|
|
30
|
+
|
|
31
|
+
### side
|
|
32
|
+
- **Type**: `"top" | "right" | "bottom" | "left"`
|
|
33
|
+
- **Required**: No
|
|
34
|
+
- **Description**: The preferred side of the trigger to render against ("top" | "right" | "bottom" | "left")
|
|
35
|
+
|
|
36
|
+
### align
|
|
37
|
+
- **Type**: `"start" | "center" | "end"`
|
|
38
|
+
- **Required**: No
|
|
39
|
+
- **Description**: How to align the popover relative to the trigger ("start" | "center" | "end")
|
|
40
|
+
|
|
41
|
+
### sideOffset
|
|
42
|
+
- **Type**: `number`
|
|
43
|
+
- **Required**: No
|
|
44
|
+
- **Description**: Distance in pixels from the trigger (default: 4)
|
|
45
|
+
|
|
46
|
+
### alignOffset
|
|
47
|
+
- **Type**: `number`
|
|
48
|
+
- **Required**: No
|
|
49
|
+
- **Description**: Offset in pixels along the align axis
|
|
50
|
+
|
|
51
|
+
### avoidCollisions
|
|
52
|
+
- **Type**: `boolean`
|
|
53
|
+
- **Required**: No
|
|
54
|
+
- **Description**: Whether to automatically avoid collisions with viewport edges (default: true)
|
|
55
|
+
|
|
56
|
+
### collisionBoundary
|
|
57
|
+
- **Type**: `Element | Element[] | null`
|
|
58
|
+
- **Required**: No
|
|
59
|
+
- **Description**: Boundary element(s) to consider for collision detection
|
|
60
|
+
|
|
61
|
+
### collisionPadding
|
|
62
|
+
- **Type**: `| number
|
|
63
|
+
| Partial<Record<"top" | "right" | "bottom" | "left", number>>`
|
|
64
|
+
- **Required**: No
|
|
65
|
+
- **Description**: No description available
|
|
66
|
+
|
|
67
|
+
### sticky
|
|
68
|
+
- **Type**: `"partial" | "always"`
|
|
69
|
+
- **Required**: No
|
|
70
|
+
- **Description**: Whether to stick to the boundary edges when colliding ("partial" | "always")
|
|
71
|
+
|
|
72
|
+
### hideWhenDetached
|
|
73
|
+
- **Type**: `boolean`
|
|
74
|
+
- **Required**: No
|
|
75
|
+
- **Description**: No description available
|
|
76
|
+
|
|
77
|
+
### children
|
|
78
|
+
- **Type**: `React.ReactNode`
|
|
79
|
+
- **Required**: No
|
|
80
|
+
- **Description**: No description available
|
|
81
|
+
|
|
82
|
+
### className
|
|
83
|
+
- **Type**: `string`
|
|
84
|
+
- **Required**: No
|
|
85
|
+
- **Description**: No description available
|
|
86
|
+
|
|
87
|
+
### style
|
|
88
|
+
- **Type**: `React.CSSProperties`
|
|
89
|
+
- **Required**: No
|
|
90
|
+
- **Description**: No description available
|
|
91
|
+
|
|
92
|
+
## Examples
|
|
93
|
+
|
|
94
|
+
```tsx
|
|
95
|
+
// Basic content with default positioning
|
|
96
|
+
<PopoverContent>
|
|
97
|
+
<div className="grid gap-4">
|
|
98
|
+
<h4 className="font-medium">Title</h4>
|
|
99
|
+
<p className="text-sm text-muted-foreground">Description</p>
|
|
100
|
+
</div>
|
|
101
|
+
</PopoverContent>
|
|
102
|
+
// Positioned content with custom width
|
|
103
|
+
<PopoverContent side="top" align="start" className="w-80">
|
|
104
|
+
<form className="grid gap-4">
|
|
105
|
+
<Input placeholder="Enter value" />
|
|
106
|
+
<Button type="submit">Save</Button>
|
|
107
|
+
</form>
|
|
108
|
+
</PopoverContent>
|
|
109
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# PopoverTrigger
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
PopoverTrigger - The element that triggers the popover
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { PopoverTrigger } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<PopoverTrigger
|
|
13
|
+
asChild={true}
|
|
14
|
+
className="value"
|
|
15
|
+
disabled={true}
|
|
16
|
+
>
|
|
17
|
+
{/* Your content here */}
|
|
18
|
+
</PopoverTrigger>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Component Props
|
|
22
|
+
|
|
23
|
+
### asChild
|
|
24
|
+
- **Type**: `boolean`
|
|
25
|
+
- **Required**: No
|
|
26
|
+
- **Description**: Changes the default rendered element to the one passed as a child,
|
|
27
|
+
|
|
28
|
+
### children
|
|
29
|
+
- **Type**: `React.ReactNode`
|
|
30
|
+
- **Required**: No
|
|
31
|
+
- **Description**: No description available
|
|
32
|
+
|
|
33
|
+
### className
|
|
34
|
+
- **Type**: `string`
|
|
35
|
+
- **Required**: No
|
|
36
|
+
- **Description**: No description available
|
|
37
|
+
|
|
38
|
+
### disabled
|
|
39
|
+
- **Type**: `boolean`
|
|
40
|
+
- **Required**: No
|
|
41
|
+
- **Description**: No description available
|
|
42
|
+
|
|
43
|
+
## Examples
|
|
44
|
+
|
|
45
|
+
```tsx
|
|
46
|
+
// Using asChild with custom button
|
|
47
|
+
<PopoverTrigger asChild>
|
|
48
|
+
<Button variant="outline">Open Settings</Button>
|
|
49
|
+
</PopoverTrigger>
|
|
50
|
+
// Direct usage (renders as button)
|
|
51
|
+
<PopoverTrigger className="custom-trigger">
|
|
52
|
+
Click me
|
|
53
|
+
</PopoverTrigger>
|
|
54
|
+
```
|