@neynar/ui 0.2.1 → 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-docs → .llm}/a.llm.md +2 -16
- package/{llm-docs → .llm}/badge.llm.md +16 -21
- package/{llm-docs → .llm}/blockquote.llm.md +1 -6
- 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-docs → .llm}/button.llm.md +1 -1
- package/{llm-docs → .llm}/code.llm.md +1 -6
- 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-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-docs → .llm}/h1.llm.md +2 -7
- package/{llm-docs → .llm}/h2.llm.md +2 -7
- package/{llm-docs → .llm}/h3.llm.md +2 -7
- package/{llm-docs → .llm}/h4.llm.md +2 -7
- package/{llm-docs → .llm}/h5.llm.md +2 -7
- package/{llm-docs → .llm}/h6.llm.md +1 -6
- 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/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-docs → .llm}/lead.llm.md +1 -6
- package/{llm-docs → .llm}/p.llm.md +1 -6
- package/{llm-docs → .llm}/sdk-items-registry.json +390 -6
- package/{llm-docs → .llm}/small.llm.md +1 -6
- package/{llm-docs → .llm}/span.llm.md +2 -16
- package/.llm/spinner.llm.md +182 -0
- package/{llm-docs → .llm}/strong.llm.md +1 -6
- package/{llm-docs → .llm}/typography.llm.md +2 -16
- package/dist/components/ui/button-group.d.ts +448 -0
- package/dist/components/ui/button-group.d.ts.map +1 -0
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/button.d.ts.map +1 -1
- package/dist/components/ui/empty-state.d.ts +1 -0
- package/dist/components/ui/empty-state.d.ts.map +1 -1
- package/dist/components/ui/empty.d.ts +630 -0
- package/dist/components/ui/empty.d.ts.map +1 -0
- package/dist/components/ui/field.d.ts +238 -0
- package/dist/components/ui/field.d.ts.map +1 -0
- package/dist/components/ui/input-group.d.ts +636 -0
- package/dist/components/ui/input-group.d.ts.map +1 -0
- package/dist/components/ui/item.d.ts +766 -0
- package/dist/components/ui/item.d.ts.map +1 -0
- package/dist/components/ui/kbd.d.ts +149 -0
- package/dist/components/ui/kbd.d.ts.map +1 -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/spinner.d.ts +194 -0
- package/dist/components/ui/spinner.d.ts.map +1 -0
- package/dist/components/ui/stack.d.ts.map +1 -1
- package/dist/components/ui/stories/accordion.stories.d.ts +0 -1
- package/dist/components/ui/stories/accordion.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/alert-dialog.stories.d.ts +0 -1
- package/dist/components/ui/stories/alert-dialog.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/alert.stories.d.ts +0 -1
- package/dist/components/ui/stories/alert.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/aspect-ratio.stories.d.ts +0 -1
- package/dist/components/ui/stories/aspect-ratio.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/avatar.stories.d.ts +0 -1
- package/dist/components/ui/stories/avatar.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/badge.stories.d.ts +0 -1
- package/dist/components/ui/stories/badge.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/breadcrumb.stories.d.ts +0 -1
- package/dist/components/ui/stories/breadcrumb.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/button-group.stories.d.ts +48 -0
- package/dist/components/ui/stories/button-group.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/button.stories.d.ts +0 -1
- package/dist/components/ui/stories/button.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/calendar.stories.d.ts +0 -1
- package/dist/components/ui/stories/calendar.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/card.stories.d.ts +0 -1
- package/dist/components/ui/stories/card.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/carousel.stories.d.ts +0 -1
- package/dist/components/ui/stories/carousel.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/chart.stories.d.ts +0 -1
- package/dist/components/ui/stories/chart.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/checkbox.stories.d.ts +0 -1
- package/dist/components/ui/stories/checkbox.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/cn.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/collapsible.stories.d.ts +0 -1
- package/dist/components/ui/stories/collapsible.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/colors.stories.d.ts +0 -1
- package/dist/components/ui/stories/colors.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/combobox.stories.d.ts +0 -1
- package/dist/components/ui/stories/combobox.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/command.stories.d.ts +0 -1
- package/dist/components/ui/stories/command.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/container.stories.d.ts +0 -1
- package/dist/components/ui/stories/container.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/context-menu.stories.d.ts +0 -1
- package/dist/components/ui/stories/context-menu.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/date-picker.stories.d.ts +0 -1
- package/dist/components/ui/stories/date-picker.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/dialog.stories.d.ts +0 -1
- package/dist/components/ui/stories/dialog.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/drawer.stories.d.ts +0 -1
- package/dist/components/ui/stories/drawer.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/dropdown-menu.stories.d.ts +0 -1
- package/dist/components/ui/stories/dropdown-menu.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/empty-state.stories.d.ts +0 -1
- package/dist/components/ui/stories/empty-state.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/empty.stories.d.ts +38 -0
- package/dist/components/ui/stories/empty.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/field.stories.d.ts +48 -0
- package/dist/components/ui/stories/field.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/hover-card.stories.d.ts +0 -1
- package/dist/components/ui/stories/hover-card.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/input-group.stories.d.ts +37 -0
- package/dist/components/ui/stories/input-group.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/input.stories.d.ts +0 -1
- package/dist/components/ui/stories/input.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/item.stories.d.ts +61 -0
- package/dist/components/ui/stories/item.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/kbd.stories.d.ts +37 -0
- package/dist/components/ui/stories/kbd.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/label.stories.d.ts +0 -1
- package/dist/components/ui/stories/label.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/menubar.stories.d.ts +0 -1
- package/dist/components/ui/stories/menubar.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/navigation-menu.stories.d.ts +0 -1
- package/dist/components/ui/stories/navigation-menu.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/pagination.stories.d.ts +0 -1
- package/dist/components/ui/stories/pagination.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/popover.stories.d.ts +0 -1
- package/dist/components/ui/stories/popover.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/progress.stories.d.ts +0 -1
- package/dist/components/ui/stories/progress.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/radio-group.stories.d.ts +0 -1
- package/dist/components/ui/stories/radio-group.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/resizable.stories.d.ts +0 -1
- package/dist/components/ui/stories/resizable.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/scroll-area.stories.d.ts +1 -2
- package/dist/components/ui/stories/scroll-area.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/select.stories.d.ts +0 -1
- package/dist/components/ui/stories/select.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/separator.stories.d.ts +0 -1
- package/dist/components/ui/stories/separator.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/sheet.stories.d.ts +0 -1
- package/dist/components/ui/stories/sheet.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/sidebar.stories.d.ts +0 -1
- package/dist/components/ui/stories/sidebar.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/skeleton.stories.d.ts +0 -1
- package/dist/components/ui/stories/skeleton.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/slider.stories.d.ts +0 -1
- package/dist/components/ui/stories/slider.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/sonner.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/spinner.stories.d.ts +37 -0
- package/dist/components/ui/stories/spinner.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/stack.stories.d.ts +0 -1
- package/dist/components/ui/stories/stack.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/switch.stories.d.ts +0 -1
- package/dist/components/ui/stories/switch.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/table.stories.d.ts +0 -1
- package/dist/components/ui/stories/table.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/tabs.stories.d.ts +0 -1
- package/dist/components/ui/stories/tabs.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/text-field.stories.d.ts +0 -1
- package/dist/components/ui/stories/text-field.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/textarea.stories.d.ts +0 -1
- package/dist/components/ui/stories/textarea.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/theme-toggle.stories.d.ts +0 -1
- package/dist/components/ui/stories/theme-toggle.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/theme.stories.d.ts +0 -1
- package/dist/components/ui/stories/theme.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/toggle-group.stories.d.ts +0 -1
- package/dist/components/ui/stories/toggle-group.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/toggle.stories.d.ts +0 -1
- package/dist/components/ui/stories/toggle.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/tooltip.stories.d.ts +0 -1
- package/dist/components/ui/stories/tooltip.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/typography.stories.d.ts +0 -1
- package/dist/components/ui/stories/typography.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/use-mobile.stories.d.ts.map +1 -1
- package/dist/components/ui/stories/use-theme.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 +12 -11
- package/dist/components/ui/typography.d.ts.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4973 -2353
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/llm/components/display.md +125 -0
- package/docs/llm/components/feedback.md +0 -14
- package/docs/llm/components/forms.md +94 -0
- package/docs/llm/components/layout.md +169 -0
- package/llms.txt +18 -12
- package/package.json +7 -6
- package/src/components/ui/button-group.tsx +525 -0
- package/src/components/ui/button.tsx +9 -12
- package/src/components/ui/empty-state.tsx +1 -0
- package/src/components/ui/empty.tsx +793 -0
- package/src/components/ui/field.tsx +494 -0
- package/src/components/ui/input-group.tsx +801 -0
- package/src/components/ui/item.tsx +955 -0
- package/src/components/ui/kbd.tsx +175 -0
- package/src/components/ui/skeleton.tsx +1 -1
- package/src/components/ui/spinner.tsx +211 -0
- package/src/components/ui/stack.tsx +3 -1
- package/src/components/ui/stories/accordion.stories.tsx +0 -1
- package/src/components/ui/stories/alert-dialog.stories.tsx +0 -1
- package/src/components/ui/stories/alert.stories.tsx +0 -1
- package/src/components/ui/stories/aspect-ratio.stories.tsx +0 -1
- package/src/components/ui/stories/avatar.stories.tsx +0 -1
- package/src/components/ui/stories/badge.stories.tsx +0 -1
- package/src/components/ui/stories/breadcrumb.stories.tsx +0 -1
- package/src/components/ui/stories/button-group.stories.tsx +300 -0
- package/src/components/ui/stories/button.stories.tsx +0 -1
- package/src/components/ui/stories/calendar.stories.tsx +0 -1
- package/src/components/ui/stories/card.stories.tsx +0 -1
- package/src/components/ui/stories/carousel.stories.tsx +0 -1
- package/src/components/ui/stories/chart.stories.tsx +0 -1
- package/src/components/ui/stories/checkbox.stories.tsx +0 -1
- package/src/components/ui/stories/cn.stories.tsx +0 -1
- package/src/components/ui/stories/collapsible.stories.tsx +0 -1
- package/src/components/ui/stories/colors.stories.tsx +0 -1
- package/src/components/ui/stories/combobox.stories.tsx +0 -1
- package/src/components/ui/stories/command.stories.tsx +0 -1
- package/src/components/ui/stories/container.stories.tsx +0 -1
- package/src/components/ui/stories/context-menu.stories.tsx +0 -1
- package/src/components/ui/stories/date-picker.stories.tsx +0 -1
- package/src/components/ui/stories/dialog.stories.tsx +0 -1
- package/src/components/ui/stories/drawer.stories.tsx +0 -1
- package/src/components/ui/stories/dropdown-menu.stories.tsx +0 -1
- package/src/components/ui/stories/empty-state.stories.tsx +0 -1
- package/src/components/ui/stories/empty.stories.tsx +293 -0
- package/src/components/ui/stories/field.stories.tsx +470 -0
- package/src/components/ui/stories/hover-card.stories.tsx +0 -1
- package/src/components/ui/stories/input-group.stories.tsx +444 -0
- package/src/components/ui/stories/input.stories.tsx +0 -1
- package/src/components/ui/stories/item.stories.tsx +601 -0
- package/src/components/ui/stories/kbd.stories.tsx +462 -0
- package/src/components/ui/stories/label.stories.tsx +0 -1
- package/src/components/ui/stories/menubar.stories.tsx +0 -1
- package/src/components/ui/stories/navigation-menu.stories.tsx +0 -1
- package/src/components/ui/stories/pagination.stories.tsx +0 -1
- package/src/components/ui/stories/popover.stories.tsx +0 -1
- package/src/components/ui/stories/progress.stories.tsx +0 -1
- package/src/components/ui/stories/radio-group.stories.tsx +0 -1
- package/src/components/ui/stories/resizable.stories.tsx +0 -1
- package/src/components/ui/stories/scroll-area.stories.tsx +0 -1
- package/src/components/ui/stories/select.stories.tsx +0 -1
- package/src/components/ui/stories/separator.stories.tsx +0 -1
- package/src/components/ui/stories/sheet.stories.tsx +0 -1
- package/src/components/ui/stories/sidebar.stories.tsx +0 -1
- package/src/components/ui/stories/skeleton.stories.tsx +0 -1
- package/src/components/ui/stories/slider.stories.tsx +0 -1
- package/src/components/ui/stories/sonner.stories.tsx +0 -1
- package/src/components/ui/stories/spinner.stories.tsx +356 -0
- package/src/components/ui/stories/stack.stories.tsx +0 -1
- package/src/components/ui/stories/switch.stories.tsx +0 -1
- package/src/components/ui/stories/table.stories.tsx +0 -1
- package/src/components/ui/stories/tabs.stories.tsx +0 -1
- package/src/components/ui/stories/text-field.stories.tsx +0 -1
- package/src/components/ui/stories/textarea.stories.tsx +0 -1
- package/src/components/ui/stories/theme-toggle.stories.tsx +0 -1
- package/src/components/ui/stories/theme.stories.tsx +0 -1
- package/src/components/ui/stories/toggle-group.stories.tsx +0 -1
- package/src/components/ui/stories/toggle.stories.tsx +0 -1
- package/src/components/ui/stories/tooltip.stories.tsx +0 -1
- package/src/components/ui/stories/typography.stories.tsx +5 -2
- package/src/components/ui/stories/use-mobile.stories.tsx +0 -1
- package/src/components/ui/stories/use-theme.stories.tsx +0 -1
- package/src/components/ui/tabs.tsx +1 -1
- package/src/components/ui/theme-toggle.tsx +1 -3
- package/src/components/ui/theme.tsx +6 -1
- package/src/components/ui/typography.tsx +29 -129
- package/src/index.ts +7 -0
- package/src/styles/globals.css +82 -94
- /package/{llm-docs → .llm}/accordion-content.llm.md +0 -0
- /package/{llm-docs → .llm}/accordion-item.llm.md +0 -0
- /package/{llm-docs → .llm}/accordion-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/accordion.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-description.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-dialog-action.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-dialog-cancel.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-dialog-content.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-dialog-description.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-dialog-footer.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-dialog-header.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-dialog-overlay.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-dialog-portal.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-dialog-title.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-dialog-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-dialog.llm.md +0 -0
- /package/{llm-docs → .llm}/alert-title.llm.md +0 -0
- /package/{llm-docs → .llm}/alert.llm.md +0 -0
- /package/{llm-docs → .llm}/aspect-ratio.llm.md +0 -0
- /package/{llm-docs → .llm}/avatar-fallback.llm.md +0 -0
- /package/{llm-docs → .llm}/avatar-image.llm.md +0 -0
- /package/{llm-docs → .llm}/avatar.llm.md +0 -0
- /package/{llm-docs → .llm}/breadcrumb-ellipsis.llm.md +0 -0
- /package/{llm-docs → .llm}/breadcrumb-item.llm.md +0 -0
- /package/{llm-docs → .llm}/breadcrumb-link.llm.md +0 -0
- /package/{llm-docs → .llm}/breadcrumb-list.llm.md +0 -0
- /package/{llm-docs → .llm}/breadcrumb-page.llm.md +0 -0
- /package/{llm-docs → .llm}/breadcrumb-separator.llm.md +0 -0
- /package/{llm-docs → .llm}/breadcrumb.llm.md +0 -0
- /package/{llm-docs → .llm}/calendar-day-button.llm.md +0 -0
- /package/{llm-docs → .llm}/calendar.llm.md +0 -0
- /package/{llm-docs → .llm}/card-action.llm.md +0 -0
- /package/{llm-docs → .llm}/card-content.llm.md +0 -0
- /package/{llm-docs → .llm}/card-description.llm.md +0 -0
- /package/{llm-docs → .llm}/card-footer.llm.md +0 -0
- /package/{llm-docs → .llm}/card-header.llm.md +0 -0
- /package/{llm-docs → .llm}/card-title.llm.md +0 -0
- /package/{llm-docs → .llm}/card.llm.md +0 -0
- /package/{llm-docs → .llm}/carousel-content.llm.md +0 -0
- /package/{llm-docs → .llm}/carousel-item.llm.md +0 -0
- /package/{llm-docs → .llm}/carousel-next.llm.md +0 -0
- /package/{llm-docs → .llm}/carousel-previous.llm.md +0 -0
- /package/{llm-docs → .llm}/carousel.llm.md +0 -0
- /package/{llm-docs → .llm}/chart-config.llm.md +0 -0
- /package/{llm-docs → .llm}/chart-container.llm.md +0 -0
- /package/{llm-docs → .llm}/chart-legend-content.llm.md +0 -0
- /package/{llm-docs → .llm}/chart-legend.llm.md +0 -0
- /package/{llm-docs → .llm}/chart-style.llm.md +0 -0
- /package/{llm-docs → .llm}/chart-tooltip-content.llm.md +0 -0
- /package/{llm-docs → .llm}/chart-tooltip.llm.md +0 -0
- /package/{llm-docs → .llm}/checkbox.llm.md +0 -0
- /package/{llm-docs → .llm}/cn.llm.md +0 -0
- /package/{llm-docs → .llm}/collapsible-content.llm.md +0 -0
- /package/{llm-docs → .llm}/collapsible-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/collapsible.llm.md +0 -0
- /package/{llm-docs → .llm}/combobox-option.llm.md +0 -0
- /package/{llm-docs → .llm}/combobox.llm.md +0 -0
- /package/{llm-docs → .llm}/command-dialog.llm.md +0 -0
- /package/{llm-docs → .llm}/command-empty.llm.md +0 -0
- /package/{llm-docs → .llm}/command-group.llm.md +0 -0
- /package/{llm-docs → .llm}/command-input.llm.md +0 -0
- /package/{llm-docs → .llm}/command-item.llm.md +0 -0
- /package/{llm-docs → .llm}/command-list.llm.md +0 -0
- /package/{llm-docs → .llm}/command-loading.llm.md +0 -0
- /package/{llm-docs → .llm}/command-separator.llm.md +0 -0
- /package/{llm-docs → .llm}/command-shortcut.llm.md +0 -0
- /package/{llm-docs → .llm}/command.llm.md +0 -0
- /package/{llm-docs → .llm}/container.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-checkbox-item.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-content.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-group.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-item.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-label.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-portal.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-radio-group.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-radio-item.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-separator.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-shortcut.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-sub-content.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-sub-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-sub.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/context-menu.llm.md +0 -0
- /package/{llm-docs → .llm}/date-picker.llm.md +0 -0
- /package/{llm-docs → .llm}/dialog-close.llm.md +0 -0
- /package/{llm-docs → .llm}/dialog-content.llm.md +0 -0
- /package/{llm-docs → .llm}/dialog-description.llm.md +0 -0
- /package/{llm-docs → .llm}/dialog-footer.llm.md +0 -0
- /package/{llm-docs → .llm}/dialog-header.llm.md +0 -0
- /package/{llm-docs → .llm}/dialog-overlay.llm.md +0 -0
- /package/{llm-docs → .llm}/dialog-portal.llm.md +0 -0
- /package/{llm-docs → .llm}/dialog-title.llm.md +0 -0
- /package/{llm-docs → .llm}/dialog-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/dialog.llm.md +0 -0
- /package/{llm-docs → .llm}/drawer-close.llm.md +0 -0
- /package/{llm-docs → .llm}/drawer-content.llm.md +0 -0
- /package/{llm-docs → .llm}/drawer-description.llm.md +0 -0
- /package/{llm-docs → .llm}/drawer-footer.llm.md +0 -0
- /package/{llm-docs → .llm}/drawer-header.llm.md +0 -0
- /package/{llm-docs → .llm}/drawer-overlay.llm.md +0 -0
- /package/{llm-docs → .llm}/drawer-portal.llm.md +0 -0
- /package/{llm-docs → .llm}/drawer-title.llm.md +0 -0
- /package/{llm-docs → .llm}/drawer-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/drawer.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-checkbox-item.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-content.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-group.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-item.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-label.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-portal.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-radio-group.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-radio-item.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-separator.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-shortcut.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-sub-content.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-sub-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-sub.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/dropdown-menu.llm.md +0 -0
- /package/{llm-docs → .llm}/empty-state.llm.md +0 -0
- /package/{llm-docs → .llm}/hover-card-content.llm.md +0 -0
- /package/{llm-docs → .llm}/hover-card-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/hover-card.llm.md +0 -0
- /package/{llm-docs → .llm}/input.llm.md +0 -0
- /package/{llm-docs → .llm}/label.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-checkbox-item.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-content.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-group.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-item.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-label.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-menu.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-portal.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-radio-group.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-radio-item.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-separator.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-shortcut.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-sub-content.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-sub-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-sub.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/menubar.llm.md +0 -0
- /package/{llm-docs → .llm}/navigation-menu-content.llm.md +0 -0
- /package/{llm-docs → .llm}/navigation-menu-indicator.llm.md +0 -0
- /package/{llm-docs → .llm}/navigation-menu-item.llm.md +0 -0
- /package/{llm-docs → .llm}/navigation-menu-link.llm.md +0 -0
- /package/{llm-docs → .llm}/navigation-menu-list.llm.md +0 -0
- /package/{llm-docs → .llm}/navigation-menu-trigger-style.llm.md +0 -0
- /package/{llm-docs → .llm}/navigation-menu-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/navigation-menu-viewport.llm.md +0 -0
- /package/{llm-docs → .llm}/navigation-menu.llm.md +0 -0
- /package/{llm-docs → .llm}/pagination-content.llm.md +0 -0
- /package/{llm-docs → .llm}/pagination-ellipsis.llm.md +0 -0
- /package/{llm-docs → .llm}/pagination-item.llm.md +0 -0
- /package/{llm-docs → .llm}/pagination-link.llm.md +0 -0
- /package/{llm-docs → .llm}/pagination-next.llm.md +0 -0
- /package/{llm-docs → .llm}/pagination-previous.llm.md +0 -0
- /package/{llm-docs → .llm}/pagination.llm.md +0 -0
- /package/{llm-docs → .llm}/popover-anchor.llm.md +0 -0
- /package/{llm-docs → .llm}/popover-content.llm.md +0 -0
- /package/{llm-docs → .llm}/popover-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/popover.llm.md +0 -0
- /package/{llm-docs → .llm}/progress.llm.md +0 -0
- /package/{llm-docs → .llm}/radio-group-indicator.llm.md +0 -0
- /package/{llm-docs → .llm}/radio-group-item.llm.md +0 -0
- /package/{llm-docs → .llm}/radio-group.llm.md +0 -0
- /package/{llm-docs → .llm}/resizable-handle.llm.md +0 -0
- /package/{llm-docs → .llm}/resizable-panel-group.llm.md +0 -0
- /package/{llm-docs → .llm}/resizable-panel.llm.md +0 -0
- /package/{llm-docs → .llm}/scroll-area-corner.llm.md +0 -0
- /package/{llm-docs → .llm}/scroll-area-thumb.llm.md +0 -0
- /package/{llm-docs → .llm}/scroll-area-viewport.llm.md +0 -0
- /package/{llm-docs → .llm}/scroll-area.llm.md +0 -0
- /package/{llm-docs → .llm}/scroll-bar.llm.md +0 -0
- /package/{llm-docs → .llm}/select-content.llm.md +0 -0
- /package/{llm-docs → .llm}/select-group.llm.md +0 -0
- /package/{llm-docs → .llm}/select-item.llm.md +0 -0
- /package/{llm-docs → .llm}/select-label.llm.md +0 -0
- /package/{llm-docs → .llm}/select-scroll-down-button.llm.md +0 -0
- /package/{llm-docs → .llm}/select-scroll-up-button.llm.md +0 -0
- /package/{llm-docs → .llm}/select-separator.llm.md +0 -0
- /package/{llm-docs → .llm}/select-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/select-value.llm.md +0 -0
- /package/{llm-docs → .llm}/select.llm.md +0 -0
- /package/{llm-docs → .llm}/separator.llm.md +0 -0
- /package/{llm-docs → .llm}/sheet-close.llm.md +0 -0
- /package/{llm-docs → .llm}/sheet-content.llm.md +0 -0
- /package/{llm-docs → .llm}/sheet-description.llm.md +0 -0
- /package/{llm-docs → .llm}/sheet-footer.llm.md +0 -0
- /package/{llm-docs → .llm}/sheet-header.llm.md +0 -0
- /package/{llm-docs → .llm}/sheet-title.llm.md +0 -0
- /package/{llm-docs → .llm}/sheet-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/sheet.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-content.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-footer.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-group-action.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-group-content.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-group-label.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-group.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-header.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-input.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-inset.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-menu-action.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-menu-badge.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-menu-button.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-menu-item.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-menu-skeleton.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-menu-sub-button.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-menu-sub-item.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-menu-sub.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-menu.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-provider.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-rail.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-separator.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/sidebar.llm.md +0 -0
- /package/{llm-docs → .llm}/skeleton.llm.md +0 -0
- /package/{llm-docs → .llm}/slider.llm.md +0 -0
- /package/{llm-docs → .llm}/stack.llm.md +0 -0
- /package/{llm-docs → .llm}/switch.llm.md +0 -0
- /package/{llm-docs → .llm}/table-body.llm.md +0 -0
- /package/{llm-docs → .llm}/table-caption.llm.md +0 -0
- /package/{llm-docs → .llm}/table-cell.llm.md +0 -0
- /package/{llm-docs → .llm}/table-footer.llm.md +0 -0
- /package/{llm-docs → .llm}/table-head.llm.md +0 -0
- /package/{llm-docs → .llm}/table-header.llm.md +0 -0
- /package/{llm-docs → .llm}/table-row.llm.md +0 -0
- /package/{llm-docs → .llm}/table.llm.md +0 -0
- /package/{llm-docs → .llm}/tabs-content.llm.md +0 -0
- /package/{llm-docs → .llm}/tabs-list.llm.md +0 -0
- /package/{llm-docs → .llm}/tabs-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/tabs.llm.md +0 -0
- /package/{llm-docs → .llm}/text-field.llm.md +0 -0
- /package/{llm-docs → .llm}/textarea.llm.md +0 -0
- /package/{llm-docs → .llm}/theme-preference.llm.md +0 -0
- /package/{llm-docs → .llm}/theme-toggle.llm.md +0 -0
- /package/{llm-docs → .llm}/theme.llm.md +0 -0
- /package/{llm-docs → .llm}/toast.llm.md +0 -0
- /package/{llm-docs → .llm}/toaster.llm.md +0 -0
- /package/{llm-docs → .llm}/toggle-group-item.llm.md +0 -0
- /package/{llm-docs → .llm}/toggle-group.llm.md +0 -0
- /package/{llm-docs → .llm}/toggle.llm.md +0 -0
- /package/{llm-docs → .llm}/tooltip-content.llm.md +0 -0
- /package/{llm-docs → .llm}/tooltip-provider.llm.md +0 -0
- /package/{llm-docs → .llm}/tooltip-trigger.llm.md +0 -0
- /package/{llm-docs → .llm}/tooltip.llm.md +0 -0
- /package/{llm-docs → .llm}/use-carousel.llm.md +0 -0
- /package/{llm-docs → .llm}/use-command-state.llm.md +0 -0
- /package/{llm-docs → .llm}/use-is-mobile.llm.md +0 -0
- /package/{llm-docs → .llm}/use-sidebar.llm.md +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# EmptyMedia
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
EmptyMedia - Icon or illustration display component with styling variants Displays icons, illustrations, or other visual elements in an empty state. Offers two variants: a transparent default for custom-sized graphics and an "icon" variant with consistent sizing and background styling. Automatically handles SVG pointer events and shrinking behavior. ## Variants ### default - Transparent background (bg-transparent) - No size constraints - use for custom-sized illustrations - Full control over icon/illustration dimensions - Best for large decorative graphics (48px+) ### icon - Muted background (bg-muted) with rounded corners (rounded-lg) - Fixed 40px × 40px container (size-10) - Automatically sizes child SVGs to 24px (size-6) unless explicitly sized - Text color set to foreground for proper contrast - Best for standard icon sizes (16-24px) - Provides visual emphasis through background contrast ## Features - SVG pointer events disabled to prevent interaction issues - Shrink prevention for consistent sizing - Bottom margin (mb-2 / 8px) for spacing from subsequent elements - Flex layout with centered content - Compatible with all icon libraries (lucide-react, heroicons, etc.)
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { EmptyMedia } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<EmptyMedia
|
|
13
|
+
variant={value}
|
|
14
|
+
className="value"
|
|
15
|
+
>
|
|
16
|
+
{/* Your content here */}
|
|
17
|
+
</EmptyMedia>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Component Props
|
|
21
|
+
|
|
22
|
+
### variant
|
|
23
|
+
- **Type**: `"default" | "icon"`
|
|
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
|
+
### Example 1
|
|
40
|
+
```tsx
|
|
41
|
+
// Standard icon variant with auto-sizing
|
|
42
|
+
import { Inbox } from 'lucide-react';
|
|
43
|
+
<EmptyMedia variant="icon">
|
|
44
|
+
<Inbox />
|
|
45
|
+
</EmptyMedia>
|
|
46
|
+
```
|
|
47
|
+
### Example 2
|
|
48
|
+
```tsx
|
|
49
|
+
// Default variant with custom-sized illustration
|
|
50
|
+
import { Package } from 'lucide-react';
|
|
51
|
+
<EmptyMedia>
|
|
52
|
+
<Package className="w-16 h-16 text-primary" />
|
|
53
|
+
</EmptyMedia>
|
|
54
|
+
```
|
|
55
|
+
### Example 3
|
|
56
|
+
```tsx
|
|
57
|
+
// Icon variant with explicitly sized SVG (overrides auto-sizing)
|
|
58
|
+
import { Search } from 'lucide-react';
|
|
59
|
+
<EmptyMedia variant="icon">
|
|
60
|
+
<Search className="size-5" />
|
|
61
|
+
</EmptyMedia>
|
|
62
|
+
```
|
|
63
|
+
### Example 4
|
|
64
|
+
```tsx
|
|
65
|
+
// Custom styled media container
|
|
66
|
+
import { Sparkles } from 'lucide-react';
|
|
67
|
+
<EmptyMedia className="bg-primary/10 rounded-full p-4">
|
|
68
|
+
<Sparkles className="w-8 h-8 text-primary" />
|
|
69
|
+
</EmptyMedia>
|
|
70
|
+
```
|
|
71
|
+
### Example 5
|
|
72
|
+
```tsx
|
|
73
|
+
// Multiple icons or complex graphics
|
|
74
|
+
import { Users, Plus } from 'lucide-react';
|
|
75
|
+
<EmptyMedia>
|
|
76
|
+
<div className="relative">
|
|
77
|
+
<Users className="w-12 h-12 text-muted-foreground" />
|
|
78
|
+
<Plus className="w-6 h-6 text-primary absolute -bottom-1 -right-1" />
|
|
79
|
+
</div>
|
|
80
|
+
</EmptyMedia>
|
|
81
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# EmptyTitle
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
EmptyTitle - Prominent heading text for empty state messages Displays the primary heading or title for an empty state, styled with medium font weight and tight character spacing for visual hierarchy. Typically describes what is missing or the current state in a concise, user-friendly way. ## Features - Large text size (text-lg / 1.125rem / 18px) - Medium font weight (font-medium / 500) for emphasis - Tight character spacing (tracking-tight / -0.025em) for readability - Foreground color for maximum contrast - Center-aligned within empty state layout ## Best Practices - Keep titles short and descriptive (2-6 words) - Focus on the current state rather than what's wrong - Use positive language when possible - Be specific rather than generic ("No projects" vs "Empty") - Avoid technical jargon or error codes
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { EmptyTitle } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<EmptyTitle
|
|
13
|
+
className="value"
|
|
14
|
+
>
|
|
15
|
+
{/* Your content here */}
|
|
16
|
+
</EmptyTitle>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Component Props
|
|
20
|
+
|
|
21
|
+
### className
|
|
22
|
+
- **Type**: `string`
|
|
23
|
+
- **Required**: No
|
|
24
|
+
- **Description**: No description available
|
|
25
|
+
|
|
26
|
+
### children
|
|
27
|
+
- **Type**: `React.ReactNode`
|
|
28
|
+
- **Required**: No
|
|
29
|
+
- **Description**: No description available
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
### Example 1
|
|
34
|
+
```tsx
|
|
35
|
+
// Simple descriptive title
|
|
36
|
+
<EmptyTitle>No results found</EmptyTitle>
|
|
37
|
+
```
|
|
38
|
+
### Example 2
|
|
39
|
+
```tsx
|
|
40
|
+
// Positive framing for empty inbox
|
|
41
|
+
<EmptyTitle>You're all caught up!</EmptyTitle>
|
|
42
|
+
```
|
|
43
|
+
### Example 3
|
|
44
|
+
```tsx
|
|
45
|
+
// Specific empty list title
|
|
46
|
+
<EmptyTitle>No team members yet</EmptyTitle>
|
|
47
|
+
```
|
|
48
|
+
### Example 4
|
|
49
|
+
```tsx
|
|
50
|
+
// Custom styled title
|
|
51
|
+
<EmptyTitle className="text-xl font-semibold text-primary">
|
|
52
|
+
Welcome to your dashboard
|
|
53
|
+
</EmptyTitle>
|
|
54
|
+
```
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Empty
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Empty - Flexible container for displaying empty states with consistent layout A foundational empty state component that provides a centered, vertically-aligned container optimized for displaying empty or no-data states. Uses a composable architecture similar to Alert and Card components, allowing fine-grained control over layout and content through sub-components. ## Key Features - Composable sub-components for flexible layouts (header, media, title, description, content) - Responsive padding that adapts from mobile to desktop (p-6 to md:p-12) - Built-in flex layout with automatic centering and gap spacing - Border-dashed styling hint for visual differentiation - Maximum content width constraints for optimal readability - Text balance for improved typography on multi-line content - Fully accessible with semantic HTML structure ## When to Use - Search results with no matches - Empty data tables, lists, or dashboards - Onboarding states for new users - File uploads or content creation areas - Inbox or notification centers with no items - Error recovery or loading failure scenarios ## Component Architecture - **Empty**: Root container with flex layout, padding, and centering - **EmptyHeader**: Groups media and title with constrained width (max-w-sm) - **EmptyMedia**: Icon or illustration display with two variants - **EmptyTitle**: Prominent heading text with medium font weight - **EmptyDescription**: Muted description text with link styling - **EmptyContent**: Additional content area for buttons or secondary info
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { Empty } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<Empty
|
|
13
|
+
className="value"
|
|
14
|
+
>
|
|
15
|
+
{/* Your content here */}
|
|
16
|
+
</Empty>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Component Props
|
|
20
|
+
|
|
21
|
+
### className
|
|
22
|
+
- **Type**: `string`
|
|
23
|
+
- **Required**: No
|
|
24
|
+
- **Description**: No description available
|
|
25
|
+
|
|
26
|
+
### children
|
|
27
|
+
- **Type**: `React.ReactNode`
|
|
28
|
+
- **Required**: No
|
|
29
|
+
- **Description**: No description available
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
### Example 1
|
|
34
|
+
```tsx
|
|
35
|
+
// Basic empty state with icon, title, and description
|
|
36
|
+
import { Inbox } from 'lucide-react';
|
|
37
|
+
<Empty>
|
|
38
|
+
<EmptyHeader>
|
|
39
|
+
<EmptyMedia variant="icon">
|
|
40
|
+
<Inbox />
|
|
41
|
+
</EmptyMedia>
|
|
42
|
+
<EmptyTitle>No messages yet</EmptyTitle>
|
|
43
|
+
</EmptyHeader>
|
|
44
|
+
<EmptyDescription>
|
|
45
|
+
New messages will appear here when you receive them.
|
|
46
|
+
</EmptyDescription>
|
|
47
|
+
</Empty>
|
|
48
|
+
```
|
|
49
|
+
### Example 2
|
|
50
|
+
```tsx
|
|
51
|
+
// Search results empty state with action button
|
|
52
|
+
import { Search } from 'lucide-react';
|
|
53
|
+
import { Button } from './button';
|
|
54
|
+
<Empty>
|
|
55
|
+
<EmptyHeader>
|
|
56
|
+
<EmptyMedia variant="icon">
|
|
57
|
+
<Search />
|
|
58
|
+
</EmptyMedia>
|
|
59
|
+
<EmptyTitle>No results found</EmptyTitle>
|
|
60
|
+
</EmptyHeader>
|
|
61
|
+
<EmptyDescription>
|
|
62
|
+
Try adjusting your search or filters to find what you're looking for.
|
|
63
|
+
</EmptyDescription>
|
|
64
|
+
<EmptyContent>
|
|
65
|
+
<Button variant="outline" onClick={clearFilters}>
|
|
66
|
+
Clear filters
|
|
67
|
+
</Button>
|
|
68
|
+
</EmptyContent>
|
|
69
|
+
</Empty>
|
|
70
|
+
```
|
|
71
|
+
### Example 3
|
|
72
|
+
```tsx
|
|
73
|
+
// File upload empty state with custom illustration
|
|
74
|
+
import { Upload } from 'lucide-react';
|
|
75
|
+
import { Button } from './button';
|
|
76
|
+
<Empty className="min-h-[400px] border-2 border-dashed">
|
|
77
|
+
<EmptyHeader>
|
|
78
|
+
<EmptyMedia>
|
|
79
|
+
<Upload className="w-16 h-16 text-muted-foreground" />
|
|
80
|
+
</EmptyMedia>
|
|
81
|
+
<EmptyTitle>Drop files here</EmptyTitle>
|
|
82
|
+
</EmptyHeader>
|
|
83
|
+
<EmptyDescription>
|
|
84
|
+
Drag and drop files to upload, or click the button below.
|
|
85
|
+
</EmptyDescription>
|
|
86
|
+
<EmptyContent>
|
|
87
|
+
<Button onClick={openFilePicker}>
|
|
88
|
+
Choose files
|
|
89
|
+
</Button>
|
|
90
|
+
</EmptyContent>
|
|
91
|
+
</Empty>
|
|
92
|
+
```
|
|
93
|
+
### Example 4
|
|
94
|
+
```tsx
|
|
95
|
+
// Complex empty state with multiple actions
|
|
96
|
+
import { Users, UserPlus, Upload } from 'lucide-react';
|
|
97
|
+
import { Button } from './button';
|
|
98
|
+
<Empty>
|
|
99
|
+
<EmptyHeader>
|
|
100
|
+
<EmptyMedia variant="icon">
|
|
101
|
+
<Users />
|
|
102
|
+
</EmptyMedia>
|
|
103
|
+
<EmptyTitle>No team members</EmptyTitle>
|
|
104
|
+
</EmptyHeader>
|
|
105
|
+
<EmptyDescription>
|
|
106
|
+
Get started by <a href="/invite">inviting your first team member</a> or
|
|
107
|
+
importing from a CSV file.
|
|
108
|
+
</EmptyDescription>
|
|
109
|
+
<EmptyContent>
|
|
110
|
+
<div className="flex gap-2">
|
|
111
|
+
<Button onClick={openInviteModal}>
|
|
112
|
+
<UserPlus className="w-4 h-4 mr-2" />
|
|
113
|
+
Invite member
|
|
114
|
+
</Button>
|
|
115
|
+
<Button variant="outline" onClick={importFromCsv}>
|
|
116
|
+
<Upload className="w-4 h-4 mr-2" />
|
|
117
|
+
Import CSV
|
|
118
|
+
</Button>
|
|
119
|
+
</div>
|
|
120
|
+
</EmptyContent>
|
|
121
|
+
</Empty>
|
|
122
|
+
```
|
|
123
|
+
### Example 5
|
|
124
|
+
```tsx
|
|
125
|
+
// Minimal empty state without header grouping
|
|
126
|
+
import { Sparkles } from 'lucide-react';
|
|
127
|
+
<Empty>
|
|
128
|
+
<EmptyMedia>
|
|
129
|
+
<Sparkles className="w-12 h-12 text-primary" />
|
|
130
|
+
</EmptyMedia>
|
|
131
|
+
<EmptyTitle>All caught up!</EmptyTitle>
|
|
132
|
+
<EmptyDescription>
|
|
133
|
+
You've reviewed all pending items.
|
|
134
|
+
</EmptyDescription>
|
|
135
|
+
</Empty>
|
|
136
|
+
```
|
|
137
|
+
### Example 6
|
|
138
|
+
```tsx
|
|
139
|
+
// Error state with custom styling
|
|
140
|
+
import { AlertCircle } from 'lucide-react';
|
|
141
|
+
import { Button } from './button';
|
|
142
|
+
<Empty className="border-destructive/50 bg-destructive/5">
|
|
143
|
+
<EmptyHeader>
|
|
144
|
+
<EmptyMedia>
|
|
145
|
+
<AlertCircle className="w-12 h-12 text-destructive" />
|
|
146
|
+
</EmptyMedia>
|
|
147
|
+
<EmptyTitle>Failed to load data</EmptyTitle>
|
|
148
|
+
</EmptyHeader>
|
|
149
|
+
<EmptyDescription className="text-destructive/90">
|
|
150
|
+
There was an error loading your content. Please try again.
|
|
151
|
+
</EmptyDescription>
|
|
152
|
+
<EmptyContent>
|
|
153
|
+
<Button variant="destructive" onClick={retry}>
|
|
154
|
+
Retry
|
|
155
|
+
</Button>
|
|
156
|
+
</EmptyContent>
|
|
157
|
+
</Empty>
|
|
158
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# FieldContent
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
FieldContent component
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { FieldContent } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<FieldContent
|
|
13
|
+
className={value}
|
|
14
|
+
...props={value}
|
|
15
|
+
/>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Component Props
|
|
19
|
+
|
|
20
|
+
### className
|
|
21
|
+
- **Type**: `unknown`
|
|
22
|
+
- **Required**: Yes
|
|
23
|
+
- **Description**: No description available
|
|
24
|
+
|
|
25
|
+
### ...props
|
|
26
|
+
- **Type**: `unknown`
|
|
27
|
+
- **Required**: Yes
|
|
28
|
+
- **Description**: No description available
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# FieldDescription
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
FieldDescription component
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { FieldDescription } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<FieldDescription
|
|
13
|
+
className={value}
|
|
14
|
+
...props={value}
|
|
15
|
+
/>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Component Props
|
|
19
|
+
|
|
20
|
+
### className
|
|
21
|
+
- **Type**: `unknown`
|
|
22
|
+
- **Required**: Yes
|
|
23
|
+
- **Description**: No description available
|
|
24
|
+
|
|
25
|
+
### ...props
|
|
26
|
+
- **Type**: `unknown`
|
|
27
|
+
- **Required**: Yes
|
|
28
|
+
- **Description**: No description available
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# FieldError
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
FieldError component
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { FieldError } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<FieldError
|
|
13
|
+
className={value}
|
|
14
|
+
errors={value}
|
|
15
|
+
...props={value}
|
|
16
|
+
>
|
|
17
|
+
{/* Your content here */}
|
|
18
|
+
</FieldError>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Component Props
|
|
22
|
+
|
|
23
|
+
### className
|
|
24
|
+
- **Type**: `unknown`
|
|
25
|
+
- **Required**: Yes
|
|
26
|
+
- **Description**: No description available
|
|
27
|
+
|
|
28
|
+
### children
|
|
29
|
+
- **Type**: `unknown`
|
|
30
|
+
- **Required**: Yes
|
|
31
|
+
- **Description**: No description available
|
|
32
|
+
|
|
33
|
+
### errors
|
|
34
|
+
- **Type**: `unknown`
|
|
35
|
+
- **Required**: Yes
|
|
36
|
+
- **Description**: No description available
|
|
37
|
+
|
|
38
|
+
### ...props
|
|
39
|
+
- **Type**: `unknown`
|
|
40
|
+
- **Required**: Yes
|
|
41
|
+
- **Description**: No description available
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# FieldGroup
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
FieldGroup - Container for organizing multiple form fields A layout wrapper that vertically stacks Field components with optimized spacing. It provides container query support for responsive field orientations and automatically adjusts spacing for different control types (standard fields vs. checkbox/radio groups). The component uses CSS container queries (@container) which allows child Field components with `orientation="responsive"` to adapt their layout based on the FieldGroup's width rather than the viewport width.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { FieldGroup } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<FieldGroup
|
|
13
|
+
className="value"
|
|
14
|
+
>
|
|
15
|
+
{/* Your content here */}
|
|
16
|
+
</FieldGroup>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Component Props
|
|
20
|
+
|
|
21
|
+
### className
|
|
22
|
+
- **Type**: `string`
|
|
23
|
+
- **Required**: No
|
|
24
|
+
- **Description**: No description available
|
|
25
|
+
|
|
26
|
+
### children
|
|
27
|
+
- **Type**: `React.ReactNode`
|
|
28
|
+
- **Required**: No
|
|
29
|
+
- **Description**: No description available
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
### Example 1
|
|
34
|
+
Basic field grouping
|
|
35
|
+
```tsx
|
|
36
|
+
<FieldSet>
|
|
37
|
+
<FieldLegend>Contact Information</FieldLegend>
|
|
38
|
+
<FieldGroup>
|
|
39
|
+
<Field>
|
|
40
|
+
<FieldLabel htmlFor="email">Email</FieldLabel>
|
|
41
|
+
<Input id="email" type="email" />
|
|
42
|
+
</Field>
|
|
43
|
+
<Field>
|
|
44
|
+
<FieldLabel htmlFor="phone">Phone</FieldLabel>
|
|
45
|
+
<Input id="phone" type="tel" />
|
|
46
|
+
</Field>
|
|
47
|
+
</FieldGroup>
|
|
48
|
+
</FieldSet>
|
|
49
|
+
```
|
|
50
|
+
### Example 2
|
|
51
|
+
Responsive field orientations with container queries
|
|
52
|
+
```tsx
|
|
53
|
+
<FieldGroup>
|
|
54
|
+
<Field orientation="responsive">
|
|
55
|
+
<FieldLabel htmlFor="name">Full Name</FieldLabel>
|
|
56
|
+
<Input id="name" />
|
|
57
|
+
<FieldDescription>As it appears on your ID</FieldDescription>
|
|
58
|
+
</Field>
|
|
59
|
+
<Field orientation="responsive">
|
|
60
|
+
<FieldLabel htmlFor="company">Company</FieldLabel>
|
|
61
|
+
<Input id="company" />
|
|
62
|
+
</Field>
|
|
63
|
+
</FieldGroup>
|
|
64
|
+
```
|
|
65
|
+
### Example 3
|
|
66
|
+
Nested field groups for complex layouts
|
|
67
|
+
```tsx
|
|
68
|
+
<FieldGroup>
|
|
69
|
+
<Field>
|
|
70
|
+
<FieldLabel htmlFor="street">Street Address</FieldLabel>
|
|
71
|
+
<Input id="street" />
|
|
72
|
+
</Field>
|
|
73
|
+
<FieldGroup>
|
|
74
|
+
<Field>
|
|
75
|
+
<FieldLabel htmlFor="city">City</FieldLabel>
|
|
76
|
+
<Input id="city" />
|
|
77
|
+
</Field>
|
|
78
|
+
<Field>
|
|
79
|
+
<FieldLabel htmlFor="zip">Zip Code</FieldLabel>
|
|
80
|
+
<Input id="zip" />
|
|
81
|
+
</Field>
|
|
82
|
+
</FieldGroup>
|
|
83
|
+
</FieldGroup>
|
|
84
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# FieldLabel
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
FieldLabel component
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { FieldLabel } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<FieldLabel
|
|
13
|
+
className={value}
|
|
14
|
+
...props={value}
|
|
15
|
+
/>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Component Props
|
|
19
|
+
|
|
20
|
+
### className
|
|
21
|
+
- **Type**: `unknown`
|
|
22
|
+
- **Required**: Yes
|
|
23
|
+
- **Description**: No description available
|
|
24
|
+
|
|
25
|
+
### ...props
|
|
26
|
+
- **Type**: `unknown`
|
|
27
|
+
- **Required**: Yes
|
|
28
|
+
- **Description**: No description available
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# FieldLegend
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
FieldLegend - Fieldset caption with size variants A caption element that provides a title or description for a group of related form fields within a FieldSet. Renders as a native HTML `<legend>` element with size variants to match different design contexts. The "legend" variant (default) uses standard text sizing for top-level fieldsets, while the "label" variant provides smaller text suitable for nested fieldsets or when you need the legend to visually match form labels.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { FieldLegend } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<FieldLegend
|
|
13
|
+
className="value"
|
|
14
|
+
variant={value}
|
|
15
|
+
>
|
|
16
|
+
{/* Your content here */}
|
|
17
|
+
</FieldLegend>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Component Props
|
|
21
|
+
|
|
22
|
+
### className
|
|
23
|
+
- **Type**: `string`
|
|
24
|
+
- **Required**: No
|
|
25
|
+
- **Description**: No description available
|
|
26
|
+
|
|
27
|
+
### variant
|
|
28
|
+
- **Type**: `"legend" | "label"`
|
|
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
|
+
### Example 1
|
|
40
|
+
Standard legend for top-level fieldset
|
|
41
|
+
```tsx
|
|
42
|
+
<FieldSet>
|
|
43
|
+
<FieldLegend>Personal Information</FieldLegend>
|
|
44
|
+
<FieldGroup>
|
|
45
|
+
<Field>
|
|
46
|
+
<FieldLabel htmlFor="name">Full Name</FieldLabel>
|
|
47
|
+
<Input id="name" />
|
|
48
|
+
</Field>
|
|
49
|
+
</FieldGroup>
|
|
50
|
+
</FieldSet>
|
|
51
|
+
```
|
|
52
|
+
### Example 2
|
|
53
|
+
Label-sized legend for nested fieldset
|
|
54
|
+
```tsx
|
|
55
|
+
<FieldSet>
|
|
56
|
+
<FieldLegend variant="label">Notification Preferences</FieldLegend>
|
|
57
|
+
<FieldGroup>
|
|
58
|
+
<Field orientation="horizontal">
|
|
59
|
+
<Switch id="email" />
|
|
60
|
+
<FieldLabel htmlFor="email">Email notifications</FieldLabel>
|
|
61
|
+
</Field>
|
|
62
|
+
</FieldGroup>
|
|
63
|
+
</FieldSet>
|
|
64
|
+
```
|
|
65
|
+
### Example 3
|
|
66
|
+
Legend with description
|
|
67
|
+
```tsx
|
|
68
|
+
<FieldSet>
|
|
69
|
+
<FieldLegend>Billing Address</FieldLegend>
|
|
70
|
+
<FieldDescription>
|
|
71
|
+
This address will appear on your invoices and receipts.
|
|
72
|
+
</FieldDescription>
|
|
73
|
+
<FieldGroup>
|
|
74
|
+
// fields go here
|
|
75
|
+
</FieldGroup>
|
|
76
|
+
</FieldSet>
|
|
77
|
+
```
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# FieldSeparator
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
FieldSeparator component
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { FieldSeparator } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<FieldSeparator
|
|
13
|
+
className={value}
|
|
14
|
+
...props={value}
|
|
15
|
+
>
|
|
16
|
+
{/* Your content here */}
|
|
17
|
+
</FieldSeparator>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Component Props
|
|
21
|
+
|
|
22
|
+
### children
|
|
23
|
+
- **Type**: `unknown`
|
|
24
|
+
- **Required**: Yes
|
|
25
|
+
- **Description**: No description available
|
|
26
|
+
|
|
27
|
+
### className
|
|
28
|
+
- **Type**: `unknown`
|
|
29
|
+
- **Required**: Yes
|
|
30
|
+
- **Description**: No description available
|
|
31
|
+
|
|
32
|
+
### ...props
|
|
33
|
+
- **Type**: `unknown`
|
|
34
|
+
- **Required**: Yes
|
|
35
|
+
- **Description**: No description available
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# FieldSet
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
FieldSet - Semantic form control grouping container A container that renders a native HTML `<fieldset>` element with optimized spacing and layout presets. It provides semantic grouping for related form controls, which improves accessibility by allowing assistive technologies to understand the relationship between form fields. The component automatically adjusts gap spacing when containing checkbox or radio groups, providing tighter spacing for these control types.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { FieldSet } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<FieldSet
|
|
13
|
+
className="value"
|
|
14
|
+
>
|
|
15
|
+
{/* Your content here */}
|
|
16
|
+
</FieldSet>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Component Props
|
|
20
|
+
|
|
21
|
+
### className
|
|
22
|
+
- **Type**: `string`
|
|
23
|
+
- **Required**: No
|
|
24
|
+
- **Description**: No description available
|
|
25
|
+
|
|
26
|
+
### children
|
|
27
|
+
- **Type**: `React.ReactNode`
|
|
28
|
+
- **Required**: No
|
|
29
|
+
- **Description**: No description available
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
### Example 1
|
|
34
|
+
Basic fieldset with legend and fields
|
|
35
|
+
```tsx
|
|
36
|
+
<FieldSet>
|
|
37
|
+
<FieldLegend>Delivery Information</FieldLegend>
|
|
38
|
+
<FieldGroup>
|
|
39
|
+
<Field>
|
|
40
|
+
<FieldLabel htmlFor="address">Address</FieldLabel>
|
|
41
|
+
<Input id="address" />
|
|
42
|
+
</Field>
|
|
43
|
+
</FieldGroup>
|
|
44
|
+
</FieldSet>
|
|
45
|
+
```
|
|
46
|
+
### Example 2
|
|
47
|
+
Fieldset with radio group
|
|
48
|
+
```tsx
|
|
49
|
+
<FieldSet>
|
|
50
|
+
<FieldLegend>Shipping Method</FieldLegend>
|
|
51
|
+
<FieldGroup data-slot="radio-group">
|
|
52
|
+
<Field orientation="horizontal">
|
|
53
|
+
<Radio id="standard" />
|
|
54
|
+
<FieldLabel htmlFor="standard">Standard</FieldLabel>
|
|
55
|
+
</Field>
|
|
56
|
+
<Field orientation="horizontal">
|
|
57
|
+
<Radio id="express" />
|
|
58
|
+
<FieldLabel htmlFor="express">Express</FieldLabel>
|
|
59
|
+
</Field>
|
|
60
|
+
</FieldGroup>
|
|
61
|
+
</FieldSet>
|
|
62
|
+
```
|
|
63
|
+
### Example 3
|
|
64
|
+
Nested fieldsets for complex forms
|
|
65
|
+
```tsx
|
|
66
|
+
<FieldSet>
|
|
67
|
+
<FieldLegend>Account Settings</FieldLegend>
|
|
68
|
+
<FieldGroup>
|
|
69
|
+
<FieldSet>
|
|
70
|
+
<FieldLegend variant="label">Profile</FieldLegend>
|
|
71
|
+
<FieldGroup>
|
|
72
|
+
<Field>
|
|
73
|
+
<FieldLabel htmlFor="username">Username</FieldLabel>
|
|
74
|
+
<Input id="username" />
|
|
75
|
+
</Field>
|
|
76
|
+
</FieldGroup>
|
|
77
|
+
</FieldSet>
|
|
78
|
+
</FieldGroup>
|
|
79
|
+
</FieldSet>
|
|
80
|
+
```
|