@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.
- package/README.md +6 -1
- package/dist/nqui.cjs.js +1 -1
- package/dist/nqui.es.js +3 -3
- package/dist/pages/ComponentShowcase.d.ts.map +1 -1
- package/dist/styles.css +0 -8
- package/docs/components/README.md +119 -0
- package/docs/components/nqui-accordion.md +20 -0
- package/docs/components/nqui-alert-dialog.md +31 -0
- package/docs/components/nqui-alert.md +19 -0
- package/docs/components/nqui-aspect-ratio.md +17 -0
- package/docs/components/nqui-avatar.md +18 -0
- package/docs/components/nqui-badge.md +42 -0
- package/docs/components/nqui-breadcrumb.md +24 -0
- package/docs/components/nqui-button-group.md +31 -0
- package/docs/components/nqui-button.md +56 -0
- package/docs/components/nqui-calendar.md +46 -0
- package/docs/components/nqui-card.md +31 -0
- package/docs/components/nqui-carousel.md +22 -0
- package/docs/components/nqui-checkbox.md +34 -0
- package/docs/components/nqui-code-block.md +39 -0
- package/docs/components/nqui-code-editor.md +21 -0
- package/docs/components/nqui-collapsible.md +18 -0
- package/docs/components/nqui-color-picker.md +38 -0
- package/docs/components/nqui-color-slider.md +23 -0
- package/docs/components/nqui-combobox.md +65 -0
- package/docs/components/nqui-command-palette.md +29 -0
- package/docs/components/nqui-command.md +39 -0
- package/docs/components/nqui-context-menu.md +33 -0
- package/docs/components/nqui-dialog.md +36 -0
- package/docs/components/nqui-drawer.md +27 -0
- package/docs/components/nqui-dropdown-menu.md +56 -0
- package/docs/components/nqui-empty.md +22 -0
- package/docs/components/nqui-field.md +42 -0
- package/docs/components/nqui-frosted-glass.md +19 -0
- package/docs/components/nqui-hover-card.md +18 -0
- package/docs/components/nqui-input-group.md +22 -0
- package/docs/components/nqui-input-otp.md +23 -0
- package/docs/components/nqui-input.md +25 -0
- package/docs/components/nqui-item.md +25 -0
- package/docs/components/nqui-kbd.md +25 -0
- package/docs/components/nqui-label.md +16 -0
- package/docs/components/nqui-logo.md +16 -0
- package/docs/components/nqui-menubar.md +22 -0
- package/docs/components/nqui-native-select.md +28 -0
- package/docs/components/nqui-navigation-menu.md +25 -0
- package/docs/components/nqui-pagination.md +25 -0
- package/docs/components/nqui-popover.md +34 -0
- package/docs/components/nqui-progress.md +22 -0
- package/docs/components/nqui-radio-group.md +34 -0
- package/docs/components/nqui-rating.md +35 -0
- package/docs/components/nqui-resizable.md +23 -0
- package/docs/components/nqui-sandbox.md +27 -0
- package/docs/components/nqui-scroll-area.md +32 -0
- package/docs/components/nqui-segmented-control.md +18 -0
- package/docs/components/nqui-select.md +50 -0
- package/docs/components/nqui-separator.md +16 -0
- package/docs/components/nqui-sheet.md +27 -0
- package/docs/components/nqui-sidebar.md +45 -0
- package/docs/components/nqui-skeleton.md +15 -0
- package/docs/components/nqui-slider.md +16 -0
- package/docs/components/nqui-snippet.md +28 -0
- package/docs/components/nqui-sortable.md +46 -0
- package/docs/components/nqui-spinner.md +16 -0
- package/docs/components/nqui-switch.md +15 -0
- package/docs/components/nqui-table-of-contents.md +37 -0
- package/docs/components/nqui-tabs.md +35 -0
- package/docs/components/nqui-textarea.md +15 -0
- package/docs/components/nqui-toaster.md +44 -0
- package/docs/components/nqui-toggle-group.md +21 -0
- package/docs/components/nqui-toggle.md +15 -0
- package/docs/components/nqui-tooltip.md +24 -0
- package/docs/components/nqui-tracker.md +38 -0
- package/docs/internal-notes/BUILD_VERIFICATION.md +174 -0
- package/docs/internal-notes/DASHBOARD_LAYOUT_DESIGN.md +1429 -0
- package/docs/internal-notes/FROSTED_GLASS_FIX.md +50 -0
- package/docs/internal-notes/PUBLISHING.md +339 -0
- package/docs/internal-notes/layoutdesign.md +616 -0
- package/docs/internal-notes/progress.md +348 -0
- package/docs/internal-notes/stacked-avatar-implementation.md +38 -0
- package/package.json +2 -1
- /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":"
|
|
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,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
|
+
```
|