@nqlib/nqui 0.3.2 → 0.3.3

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.
Files changed (81) hide show
  1. package/README.md +6 -1
  2. package/dist/nqui.cjs.js +1 -1
  3. package/dist/nqui.es.js +3 -3
  4. package/dist/pages/ComponentShowcase.d.ts.map +1 -1
  5. package/dist/styles.css +0 -8
  6. package/docs/components/README.md +119 -0
  7. package/docs/components/nqui-accordion.md +20 -0
  8. package/docs/components/nqui-alert-dialog.md +31 -0
  9. package/docs/components/nqui-alert.md +19 -0
  10. package/docs/components/nqui-aspect-ratio.md +17 -0
  11. package/docs/components/nqui-avatar.md +18 -0
  12. package/docs/components/nqui-badge.md +42 -0
  13. package/docs/components/nqui-breadcrumb.md +24 -0
  14. package/docs/components/nqui-button-group.md +31 -0
  15. package/docs/components/nqui-button.md +56 -0
  16. package/docs/components/nqui-calendar.md +46 -0
  17. package/docs/components/nqui-card.md +31 -0
  18. package/docs/components/nqui-carousel.md +22 -0
  19. package/docs/components/nqui-checkbox.md +34 -0
  20. package/docs/components/nqui-code-block.md +39 -0
  21. package/docs/components/nqui-code-editor.md +21 -0
  22. package/docs/components/nqui-collapsible.md +18 -0
  23. package/docs/components/nqui-color-picker.md +38 -0
  24. package/docs/components/nqui-color-slider.md +23 -0
  25. package/docs/components/nqui-combobox.md +65 -0
  26. package/docs/components/nqui-command-palette.md +29 -0
  27. package/docs/components/nqui-command.md +39 -0
  28. package/docs/components/nqui-context-menu.md +33 -0
  29. package/docs/components/nqui-dialog.md +36 -0
  30. package/docs/components/nqui-drawer.md +27 -0
  31. package/docs/components/nqui-dropdown-menu.md +56 -0
  32. package/docs/components/nqui-empty.md +22 -0
  33. package/docs/components/nqui-field.md +42 -0
  34. package/docs/components/nqui-frosted-glass.md +19 -0
  35. package/docs/components/nqui-hover-card.md +18 -0
  36. package/docs/components/nqui-input-group.md +22 -0
  37. package/docs/components/nqui-input-otp.md +23 -0
  38. package/docs/components/nqui-input.md +25 -0
  39. package/docs/components/nqui-item.md +25 -0
  40. package/docs/components/nqui-kbd.md +25 -0
  41. package/docs/components/nqui-label.md +16 -0
  42. package/docs/components/nqui-logo.md +16 -0
  43. package/docs/components/nqui-menubar.md +22 -0
  44. package/docs/components/nqui-native-select.md +28 -0
  45. package/docs/components/nqui-navigation-menu.md +25 -0
  46. package/docs/components/nqui-pagination.md +25 -0
  47. package/docs/components/nqui-popover.md +34 -0
  48. package/docs/components/nqui-progress.md +22 -0
  49. package/docs/components/nqui-radio-group.md +34 -0
  50. package/docs/components/nqui-rating.md +35 -0
  51. package/docs/components/nqui-resizable.md +23 -0
  52. package/docs/components/nqui-sandbox.md +27 -0
  53. package/docs/components/nqui-scroll-area.md +32 -0
  54. package/docs/components/nqui-segmented-control.md +18 -0
  55. package/docs/components/nqui-select.md +50 -0
  56. package/docs/components/nqui-separator.md +16 -0
  57. package/docs/components/nqui-sheet.md +27 -0
  58. package/docs/components/nqui-sidebar.md +45 -0
  59. package/docs/components/nqui-skeleton.md +15 -0
  60. package/docs/components/nqui-slider.md +16 -0
  61. package/docs/components/nqui-snippet.md +28 -0
  62. package/docs/components/nqui-sortable.md +46 -0
  63. package/docs/components/nqui-spinner.md +16 -0
  64. package/docs/components/nqui-switch.md +15 -0
  65. package/docs/components/nqui-table-of-contents.md +37 -0
  66. package/docs/components/nqui-tabs.md +35 -0
  67. package/docs/components/nqui-textarea.md +15 -0
  68. package/docs/components/nqui-toaster.md +44 -0
  69. package/docs/components/nqui-toggle-group.md +21 -0
  70. package/docs/components/nqui-toggle.md +15 -0
  71. package/docs/components/nqui-tooltip.md +24 -0
  72. package/docs/components/nqui-tracker.md +38 -0
  73. package/docs/internal-notes/BUILD_VERIFICATION.md +174 -0
  74. package/docs/internal-notes/DASHBOARD_LAYOUT_DESIGN.md +1429 -0
  75. package/docs/internal-notes/FROSTED_GLASS_FIX.md +50 -0
  76. package/docs/internal-notes/PUBLISHING.md +339 -0
  77. package/docs/internal-notes/layoutdesign.md +616 -0
  78. package/docs/internal-notes/progress.md +348 -0
  79. package/docs/internal-notes/stacked-avatar-implementation.md +38 -0
  80. package/package.json +2 -1
  81. /package/{INSTALLATION.md → docs/internal-notes/INSTALLATION.md} +0 -0
package/dist/nqui.es.js CHANGED
@@ -56588,7 +56588,7 @@ function jDe({
56588
56588
  {
56589
56589
  "data-slot": "navigation-menu-content",
56590
56590
  className: T(
56591
- "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/10 p-1.5 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-xl group-data-[viewport=false]/navigation-menu:shadow-md group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300 top-0 left-0 w-full group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none md:absolute md:w-auto",
56591
+ "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/10 p-1.5 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-xl group-data-[viewport=false]/navigation-menu:shadow-md group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300 top-0 left-0 w-full min-w-[200px] group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none md:absolute md:w-auto",
56592
56592
  e
56593
56593
  ),
56594
56594
  ...t
@@ -56610,7 +56610,7 @@ function sEe({
56610
56610
  {
56611
56611
  "data-slot": "navigation-menu-viewport",
56612
56612
  className: T(
56613
- "bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:zoom-out-95 data-open:zoom-in-90 ring-foreground/10 rounded-xl shadow-md ring-1 duration-100 origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden md:w-[var(--radix-navigation-menu-viewport-width)]",
56613
+ "bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:zoom-out-95 data-open:zoom-in-90 ring-foreground/10 rounded-xl shadow-md ring-1 duration-100 origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full min-w-[200px] overflow-hidden md:w-[var(--radix-navigation-menu-viewport-width)]",
56614
56614
  e
56615
56615
  ),
56616
56616
  ...t
@@ -56627,7 +56627,7 @@ function BDe({
56627
56627
  MQ,
56628
56628
  {
56629
56629
  "data-slot": "navigation-menu-link",
56630
- className: T("data-[active=true]:focus:bg-muted data-[active=true]:hover:bg-muted data-[active=true]:bg-muted/50 focus-visible:ring-ring/30 hover:bg-muted focus:bg-muted flex items-center gap-1.5 rounded-lg p-2 text-xs/relaxed transition-all outline-none focus-visible:ring-[2px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4", e),
56630
+ className: T("data-[active=true]:focus:bg-muted data-[active=true]:hover:bg-muted data-[active=true]:bg-muted/50 focus-visible:ring-ring/30 hover:bg-muted focus:bg-muted flex items-center gap-1.5 rounded-lg p-2 text-xs/relaxed whitespace-nowrap transition-all outline-none focus-visible:ring-[2px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4", e),
56631
56631
  ...t
56632
56632
  }
56633
56633
  );
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentShowcase.d.ts","sourceRoot":"","sources":["../../src/pages/ComponentShowcase.tsx"],"names":[],"mappings":"AAscA,MAAM,CAAC,OAAO,UAAU,SAAS,4CAiiFhC"}
1
+ {"version":3,"file":"ComponentShowcase.d.ts","sourceRoot":"","sources":["../../src/pages/ComponentShowcase.tsx"],"names":[],"mappings":"AAkdA,MAAM,CAAC,OAAO,UAAU,SAAS,4CA+tFhC"}
package/dist/styles.css CHANGED
@@ -179,14 +179,6 @@
179
179
  @apply border-border outline-ring/50;
180
180
  }
181
181
 
182
- /* Viewport lock - all scroll managed by individual containers, not body */
183
- html,
184
- body,
185
- #root {
186
- height: 100%;
187
- overflow: hidden;
188
- }
189
-
190
182
  body {
191
183
  @apply font-sans bg-background text-foreground;
192
184
  }
@@ -0,0 +1,119 @@
1
+ # nqui Component Instructions
2
+
3
+ Implementation guides for each component. Optimized for AI/LLM consumption.
4
+
5
+ **Import:** `import { X } from "@nqlib/nqui"`
6
+ **CSS:** `@import "@nqlib/nqui/styles"` (via `npx @nqlib/nqui init-css`)
7
+
8
+ ## Prerequisites (must-have)
9
+
10
+ | Dependency | Version | Notes |
11
+ |------------|---------|-------|
12
+ | **Tailwind CSS** | ^4.x | Required. Vite: add `@tailwindcss/vite` plugin. Next.js: use `@source` directives in CSS. |
13
+ | **React** | 18+ | Peer dependency. |
14
+ | **tw-animate-css** | — | `@import "tw-animate-css"` in your CSS (added by init-css). |
15
+ | **Radix UI** | — | Bundled with nqui (Dialog, Select, etc.). |
16
+
17
+ Optional peer deps (for specific components): `react-day-picker` (Calendar), `sonner` (Toaster), `react-resizable-panels` (Resizable), `shiki` (CodeBlock), `@codesandbox/sandpack-react` (Sandbox).
18
+
19
+ ## Shared Notes
20
+
21
+ - **CSS vars required:** nqui components use `--primary`, `--background`, `--foreground`, etc. Run `npx @nqlib/nqui init-css`.
22
+ - **Enhanced vs Core:** Button, Badge, Checkbox, Select, etc. default to enhanced (3D, animations). Use `CoreButton`, `CoreBadge`, etc. for base shadcn.
23
+ - **Style injection:** Checkbox, Rating, Combobox inject `<style>` at mount. Use client-only guard for SSR.
24
+ - **OKLCH:** ColorPicker uses OKLCH strings (`oklch(0.5 0.15 240)`), not hex.
25
+ - **SidebarProvider:** Must wrap entire layout (sidebar + content), not just Sidebar.
26
+
27
+ ## Buttons & Actions
28
+ | Component | File |
29
+ |-----------|------|
30
+ | Button | [nqui-button.md](./nqui-button.md) |
31
+ | ButtonGroup | [nqui-button-group.md](./nqui-button-group.md) |
32
+ | Toggle | [nqui-toggle.md](./nqui-toggle.md) |
33
+ | ToggleGroup | [nqui-toggle-group.md](./nqui-toggle-group.md) |
34
+ | SegmentedControl | [nqui-segmented-control.md](./nqui-segmented-control.md) |
35
+
36
+ ## Forms
37
+ | Component | File |
38
+ |-----------|------|
39
+ | Input | [nqui-input.md](./nqui-input.md) |
40
+ | InputGroup | [nqui-input-group.md](./nqui-input-group.md) |
41
+ | Textarea | [nqui-textarea.md](./nqui-textarea.md) |
42
+ | Select | [nqui-select.md](./nqui-select.md) |
43
+ | NativeSelect | [nqui-native-select.md](./nqui-native-select.md) |
44
+ | Checkbox | [nqui-checkbox.md](./nqui-checkbox.md) |
45
+ | RadioGroup | [nqui-radio-group.md](./nqui-radio-group.md) |
46
+ | Switch | [nqui-switch.md](./nqui-switch.md) |
47
+ | Slider | [nqui-slider.md](./nqui-slider.md) |
48
+ | Rating | [nqui-rating.md](./nqui-rating.md) |
49
+ | InputOTP | [nqui-input-otp.md](./nqui-input-otp.md) |
50
+ | Field | [nqui-field.md](./nqui-field.md) |
51
+ | Combobox | [nqui-combobox.md](./nqui-combobox.md) |
52
+ | ColorPicker | [nqui-color-picker.md](./nqui-color-picker.md) |
53
+ | ColorSlider | [nqui-color-slider.md](./nqui-color-slider.md) |
54
+ | Label | [nqui-label.md](./nqui-label.md) |
55
+
56
+ ## Display
57
+ | Component | File |
58
+ |-----------|------|
59
+ | Badge | [nqui-badge.md](./nqui-badge.md) |
60
+ | Avatar | [nqui-avatar.md](./nqui-avatar.md) |
61
+ | Alert | [nqui-alert.md](./nqui-alert.md) |
62
+ | Empty | [nqui-empty.md](./nqui-empty.md) |
63
+ | Skeleton | [nqui-skeleton.md](./nqui-skeleton.md) |
64
+ | Spinner | [nqui-spinner.md](./nqui-spinner.md) |
65
+ | Progress | [nqui-progress.md](./nqui-progress.md) |
66
+ | Separator | [nqui-separator.md](./nqui-separator.md) |
67
+ | Card | [nqui-card.md](./nqui-card.md) |
68
+ | Item | [nqui-item.md](./nqui-item.md) |
69
+ | Kbd | [nqui-kbd.md](./nqui-kbd.md) |
70
+ | Tracker | [nqui-tracker.md](./nqui-tracker.md) |
71
+ | FrostedGlass | [nqui-frosted-glass.md](./nqui-frosted-glass.md) |
72
+ | NquiLogo | [nqui-logo.md](./nqui-logo.md) |
73
+
74
+ ## Navigation & Menus
75
+ | Component | File |
76
+ |-----------|------|
77
+ | Breadcrumb | [nqui-breadcrumb.md](./nqui-breadcrumb.md) |
78
+ | Tabs | [nqui-tabs.md](./nqui-tabs.md) |
79
+ | DropdownMenu | [nqui-dropdown-menu.md](./nqui-dropdown-menu.md) |
80
+ | ContextMenu | [nqui-context-menu.md](./nqui-context-menu.md) |
81
+ | Menubar | [nqui-menubar.md](./nqui-menubar.md) |
82
+ | NavigationMenu | [nqui-navigation-menu.md](./nqui-navigation-menu.md) |
83
+ | Pagination | [nqui-pagination.md](./nqui-pagination.md) |
84
+ | Command | [nqui-command.md](./nqui-command.md) |
85
+ | CommandPalette | [nqui-command-palette.md](./nqui-command-palette.md) |
86
+ | TableOfContents | [nqui-table-of-contents.md](./nqui-table-of-contents.md) |
87
+
88
+ ## Overlays & Dialogs
89
+ | Component | File |
90
+ |-----------|------|
91
+ | Dialog | [nqui-dialog.md](./nqui-dialog.md) |
92
+ | AlertDialog | [nqui-alert-dialog.md](./nqui-alert-dialog.md) |
93
+ | Drawer | [nqui-drawer.md](./nqui-drawer.md) |
94
+ | Sheet | [nqui-sheet.md](./nqui-sheet.md) |
95
+ | Popover | [nqui-popover.md](./nqui-popover.md) |
96
+ | HoverCard | [nqui-hover-card.md](./nqui-hover-card.md) |
97
+ | Tooltip | [nqui-tooltip.md](./nqui-tooltip.md) |
98
+ | Toaster | [nqui-toaster.md](./nqui-toaster.md) |
99
+
100
+ ## Layout
101
+ | Component | File |
102
+ |-----------|------|
103
+ | Accordion | [nqui-accordion.md](./nqui-accordion.md) |
104
+ | Collapsible | [nqui-collapsible.md](./nqui-collapsible.md) |
105
+ | ScrollArea | [nqui-scroll-area.md](./nqui-scroll-area.md) |
106
+ | AspectRatio | [nqui-aspect-ratio.md](./nqui-aspect-ratio.md) |
107
+ | Carousel | [nqui-carousel.md](./nqui-carousel.md) |
108
+ | Resizable | [nqui-resizable.md](./nqui-resizable.md) |
109
+ | Sidebar | [nqui-sidebar.md](./nqui-sidebar.md) |
110
+ | Sortable | [nqui-sortable.md](./nqui-sortable.md) |
111
+
112
+ ## Advanced
113
+ | Component | File |
114
+ |-----------|------|
115
+ | Calendar | [nqui-calendar.md](./nqui-calendar.md) |
116
+ | CodeBlock | [nqui-code-block.md](./nqui-code-block.md) |
117
+ | CodeEditor | [nqui-code-editor.md](./nqui-code-editor.md) |
118
+ | Sandbox | [nqui-sandbox.md](./nqui-sandbox.md) |
119
+ | Snippet | [nqui-snippet.md](./nqui-snippet.md) |
@@ -0,0 +1,20 @@
1
+ # nqui Accordion
2
+
3
+ > Collapsible accordion. type: single|multiple, collapsible.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from "@nqlib/nqui"
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ ```tsx
14
+ <Accordion type="single" collapsible>
15
+ <AccordionItem value="1">
16
+ <AccordionTrigger>Header</AccordionTrigger>
17
+ <AccordionContent>Content</AccordionContent>
18
+ </AccordionItem>
19
+ </Accordion>
20
+ ```
@@ -0,0 +1,31 @@
1
+ # nqui AlertDialog
2
+
3
+ > Confirmation dialog. AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogAction, AlertDialogCancel.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import {
9
+ AlertDialog, AlertDialogTrigger, AlertDialogContent,
10
+ AlertDialogHeader, AlertDialogFooter, AlertDialogTitle,
11
+ AlertDialogDescription, AlertDialogAction, AlertDialogCancel
12
+ } from "@nqlib/nqui"
13
+ ```
14
+
15
+ ## Basic
16
+
17
+ ```tsx
18
+ <AlertDialog>
19
+ <AlertDialogTrigger asChild><Button>Delete</Button></AlertDialogTrigger>
20
+ <AlertDialogContent>
21
+ <AlertDialogHeader>
22
+ <AlertDialogTitle>Confirm</AlertDialogTitle>
23
+ <AlertDialogDescription>Are you sure?</AlertDialogDescription>
24
+ </AlertDialogHeader>
25
+ <AlertDialogFooter>
26
+ <AlertDialogCancel>Cancel</AlertDialogCancel>
27
+ <AlertDialogAction>Confirm</AlertDialogAction>
28
+ </AlertDialogFooter>
29
+ </AlertDialogContent>
30
+ </AlertDialog>
31
+ ```
@@ -0,0 +1,19 @@
1
+ # nqui Alert
2
+
3
+ > Alert banner. Title, description, action.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Alert, AlertTitle, AlertDescription, AlertAction } from "@nqlib/nqui"
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ ```tsx
14
+ <Alert>
15
+ <AlertTitle>Title</AlertTitle>
16
+ <AlertDescription>Description</AlertDescription>
17
+ <AlertAction asChild><Button>Action</Button></AlertAction>
18
+ </Alert>
19
+ ```
@@ -0,0 +1,17 @@
1
+ # nqui AspectRatio
2
+
3
+ > Fixed aspect ratio container.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { AspectRatio } from "@nqlib/nqui"
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ ```tsx
14
+ <AspectRatio ratio={16/9}>
15
+ <img src="..." alt="..." />
16
+ </AspectRatio>
17
+ ```
@@ -0,0 +1,18 @@
1
+ # nqui Avatar
2
+
3
+ > User avatar. Image + fallback.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Avatar, AvatarImage, AvatarFallback } from "@nqlib/nqui"
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ ```tsx
14
+ <Avatar>
15
+ <AvatarImage src="/url" alt="Name" />
16
+ <AvatarFallback>AB</AvatarFallback>
17
+ </Avatar>
18
+ ```
@@ -0,0 +1,42 @@
1
+ # nqui Badge
2
+
3
+ > Status labels. 9 variants; ghost/link use CoreBadge.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Badge } from "@nqlib/nqui"
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ ```tsx
14
+ <Badge>New</Badge>
15
+ <Badge variant="destructive">Error</Badge>
16
+ <Badge variant="secondary">Draft</Badge>
17
+ ```
18
+
19
+ ## All Variants
20
+
21
+ ```tsx
22
+ <Badge variant="default" />
23
+ <Badge variant="secondary" />
24
+ <Badge variant="destructive" />
25
+ <Badge variant="success" />
26
+ <Badge variant="warning" />
27
+ <Badge variant="info" />
28
+ <Badge variant="outline" />
29
+ <Badge variant="ghost" />
30
+ <Badge variant="link" />
31
+ ```
32
+
33
+ ## asChild
34
+
35
+ ```tsx
36
+ <Badge asChild><a href="#">Link badge</a></Badge>
37
+ ```
38
+
39
+ ## Notes
40
+
41
+ - ghost/link route to CoreBadge (different styling).
42
+ - Use `CoreBadge` for plain shadcn badge.
@@ -0,0 +1,24 @@
1
+ # nqui Breadcrumb
2
+
3
+ > Breadcrumb nav. List, item, link, page, separator, ellipsis.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import {
9
+ Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink,
10
+ BreadcrumbPage, BreadcrumbSeparator, BreadcrumbEllipsis
11
+ } from "@nqlib/nqui"
12
+ ```
13
+
14
+ ## Basic
15
+
16
+ ```tsx
17
+ <Breadcrumb>
18
+ <BreadcrumbList>
19
+ <BreadcrumbItem><BreadcrumbLink href="/">Home</BreadcrumbLink></BreadcrumbItem>
20
+ <BreadcrumbSeparator />
21
+ <BreadcrumbItem><BreadcrumbPage>Current</BreadcrumbPage></BreadcrumbItem>
22
+ </BreadcrumbList>
23
+ </Breadcrumb>
24
+ ```
@@ -0,0 +1,31 @@
1
+ # nqui ButtonGroup
2
+
3
+ > Grouped buttons with separators.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { ButtonGroup, ButtonGroupSeparator, ButtonGroupText } from "@nqlib/nqui"
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ ```tsx
14
+ <ButtonGroup>
15
+ <Button variant="outline">Left</Button>
16
+ <ButtonGroupSeparator />
17
+ <Button variant="outline">Right</Button>
18
+ </ButtonGroup>
19
+ ```
20
+
21
+ ## ButtonGroupText
22
+
23
+ ```tsx
24
+ <ButtonGroup>
25
+ <Button variant="outline"><Icon /></Button>
26
+ <ButtonGroupSeparator />
27
+ <ButtonGroupText>Label</ButtonGroupText>
28
+ <ButtonGroupSeparator />
29
+ <Button variant="outline"><Icon /></Button>
30
+ </ButtonGroup>
31
+ ```
@@ -0,0 +1,56 @@
1
+ # nqui Button
2
+
3
+ > Enhanced button with 9 variants, gradients, active scale. Default import is EnhancedButton.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Button } from "@nqlib/nqui"
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ ```tsx
14
+ <Button>Click</Button>
15
+ <Button variant="destructive">Delete</Button>
16
+ ```
17
+
18
+ ## Variants
19
+
20
+ | variant | Notes |
21
+ |---------|-------|
22
+ | default, destructive, secondary | Enhanced 3D |
23
+ | success, warning, info | Semantic |
24
+ | outline, ghost, link | Core fallback |
25
+ | sm, default, lg, icon | size |
26
+
27
+ ```tsx
28
+ <Button variant="success">Save</Button>
29
+ <Button variant="warning">Caution</Button>
30
+ <Button variant="info">Info</Button>
31
+ <Button size="icon"><Icon /></Button>
32
+ ```
33
+
34
+ ## asChild
35
+
36
+ Render as `<a>` or custom element:
37
+
38
+ ```tsx
39
+ <Button asChild>
40
+ <a href="/page">Link</a>
41
+ </Button>
42
+ ```
43
+
44
+ ## Loading
45
+
46
+ ```tsx
47
+ <Button disabled>
48
+ <Spinner className="mr-2 size-4" />
49
+ Loading...
50
+ </Button>
51
+ ```
52
+
53
+ ## Notes
54
+
55
+ - Active state uses `scale-95`; avoid parent `transform` overrides.
56
+ - Use `CoreButton` from `@nqlib/nqui` for base shadcn style.
@@ -0,0 +1,46 @@
1
+ # nqui Calendar
2
+
3
+ > Date picker. Single, range, multiple. Touch drag, hover preview (enhanced).
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Calendar } from "@nqlib/nqui"
9
+ import type { DateRange } from "react-day-picker"
10
+ ```
11
+
12
+ ## Basic
13
+
14
+ ```tsx
15
+ <Calendar mode="single" selected={date} onSelect={setDate} />
16
+ ```
17
+
18
+ ## Range
19
+
20
+ ```tsx
21
+ <Calendar mode="range" selected={range} onSelect={setRange} />
22
+ ```
23
+
24
+ ## Multiple
25
+
26
+ ```tsx
27
+ <Calendar mode="multiple" selected={dates} onSelect={setDates} />
28
+ ```
29
+
30
+ ## numberOfMonths
31
+
32
+ ```tsx
33
+ <Calendar numberOfMonths={2} />
34
+ ```
35
+
36
+ ## Disabled
37
+
38
+ ```tsx
39
+ <Calendar disabled={(d) => d < new Date()} />
40
+ ```
41
+
42
+ ## Notes
43
+
44
+ - Peer: `react-day-picker` v9+.
45
+ - Enhanced: touch drag selection, hover preview on drag.
46
+ - Footer slot for custom footer.
@@ -0,0 +1,31 @@
1
+ # nqui Card
2
+
3
+ > Container. Header, content, footer. Optional stickyHeader.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "@nqlib/nqui"
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ ```tsx
14
+ <Card>
15
+ <CardHeader>
16
+ <CardTitle>Title</CardTitle>
17
+ <CardDescription>Description</CardDescription>
18
+ </CardHeader>
19
+ <CardContent>Body</CardContent>
20
+ <CardFooter>Footer</CardFooter>
21
+ </Card>
22
+ ```
23
+
24
+ ## Sticky Header
25
+
26
+ ```tsx
27
+ <Card stickyHeader className="h-[400px]">
28
+ <CardHeader>...</CardHeader>
29
+ <CardContent>Scrollable content</CardContent>
30
+ </Card>
31
+ ```
@@ -0,0 +1,22 @@
1
+ # nqui Carousel
2
+
3
+ > Carousel. CarouselContent, CarouselItem, CarouselPrevious, CarouselNext.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext } from "@nqlib/nqui"
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ ```tsx
14
+ <Carousel>
15
+ <CarouselContent>
16
+ <CarouselItem>Slide 1</CarouselItem>
17
+ <CarouselItem>Slide 2</CarouselItem>
18
+ </CarouselContent>
19
+ <CarouselPrevious />
20
+ <CarouselNext />
21
+ </Carousel>
22
+ ```
@@ -0,0 +1,34 @@
1
+ # nqui Checkbox
2
+
3
+ > Enhanced checkbox. Variants: square (default), round (gooey animation).
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Checkbox } from "@nqlib/nqui"
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ ```tsx
14
+ <Checkbox checked={checked} onCheckedChange={setChecked} />
15
+ ```
16
+
17
+ ## Variants
18
+
19
+ ```tsx
20
+ <Checkbox variant="square" />
21
+ <Checkbox variant="round" />
22
+ ```
23
+
24
+ ## Indeterminate
25
+
26
+ ```tsx
27
+ <Checkbox checked="indeterminate" onCheckedChange={...} />
28
+ ```
29
+
30
+ ## Notes
31
+
32
+ - Injects `<style>` at mount. Use client-only guard for SSR.
33
+ - Round variant uses SVG filter; requires no parent `filter` override.
34
+ - Use `CoreCheckbox` for plain Radix checkbox.
@@ -0,0 +1,39 @@
1
+ # nqui CodeBlock
2
+
3
+ > Syntax-highlighted code. Multi-file tabs, copy button. Peer: shiki.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import {
9
+ CodeBlock, CodeBlockHeader, CodeBlockFiles, CodeBlockFilename,
10
+ CodeBlockCopyButton, CodeBlockBody, CodeBlockItem, CodeBlockContent
11
+ } from "@nqlib/nqui"
12
+ ```
13
+
14
+ ## Basic
15
+
16
+ ```tsx
17
+ <CodeBlock defaultValue="ts" data={[{ language: "ts", filename: "x.ts", code: "..." }]}>
18
+ <CodeBlockHeader>
19
+ <CodeBlockFiles>
20
+ {(item) => <CodeBlockFilename value={item.language}>{item.filename}</CodeBlockFilename>}
21
+ </CodeBlockFiles>
22
+ <CodeBlockCopyButton />
23
+ </CodeBlockHeader>
24
+ <CodeBlockBody>
25
+ {(item) => (
26
+ <CodeBlockItem value={item.language}>
27
+ <CodeBlockContent language={item.language} syntaxHighlighting>
28
+ {item.code}
29
+ </CodeBlockContent>
30
+ </CodeBlockItem>
31
+ )}
32
+ </CodeBlockBody>
33
+ </CodeBlock>
34
+ ```
35
+
36
+ ## Notes
37
+
38
+ - Peer: shiki. Optional for syntax highlighting.
39
+ - CodeBlockContentServer for SSR.
@@ -0,0 +1,21 @@
1
+ # nqui CodeEditor
2
+
3
+ > Animated code editor. Client-side only.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { CodeEditor } from "@nqlib/nqui"
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ ```tsx
14
+ <CodeEditor lang="typescript" header dots title="file.ts" copyButton>
15
+ {`const x = 1`}
16
+ </CodeEditor>
17
+ ```
18
+
19
+ ## Notes
20
+
21
+ - Client-only. Use dynamic import with ssr: false in Next.js.
@@ -0,0 +1,18 @@
1
+ # nqui Collapsible
2
+
3
+ > Toggle content visibility. CollapsibleTrigger, CollapsibleContent.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Collapsible, CollapsibleTrigger, CollapsibleContent } from "@nqlib/nqui"
9
+ ```
10
+
11
+ ## Basic
12
+
13
+ ```tsx
14
+ <Collapsible open={open} onOpenChange={setOpen}>
15
+ <CollapsibleTrigger asChild><Button>Toggle</Button></CollapsibleTrigger>
16
+ <CollapsibleContent>Content</CollapsibleContent>
17
+ </Collapsible>
18
+ ```