@nqlib/nqui 0.3.1 → 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/App.d.ts.map +1 -1
- package/dist/components/AppLayout.d.ts.map +1 -1
- package/dist/components/app-sidebar.d.ts.map +1 -1
- package/dist/components/custom/command-palette.d.ts +19 -0
- package/dist/components/custom/command-palette.d.ts.map +1 -0
- package/dist/components/custom/enhanced-badge.d.ts +1 -1
- package/dist/components/custom/enhanced-button.d.ts +1 -1
- package/dist/components/custom/enhanced-checkbox.d.ts +1 -1
- package/dist/components/custom/enhanced-checkbox.d.ts.map +1 -1
- package/dist/components/custom/enhanced-scroll-area.d.ts +11 -13
- package/dist/components/custom/enhanced-scroll-area.d.ts.map +1 -1
- package/dist/components/custom/nqui-logo.d.ts +1 -0
- package/dist/components/custom/nqui-logo.d.ts.map +1 -1
- package/dist/components/custom/segmented-control.d.ts +48 -0
- package/dist/components/custom/segmented-control.d.ts.map +1 -0
- package/dist/components/ui/badge.d.ts +1 -1
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/input-group.d.ts +1 -1
- package/dist/components/ui/sheet.d.ts +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/keyboard.d.ts +1 -0
- package/dist/lib/keyboard.d.ts.map +1 -1
- package/dist/nqui.cjs.js +85 -85
- package/dist/nqui.es.js +13099 -12927
- package/dist/pages/ChartShowcase.d.ts.map +1 -1
- package/dist/pages/ComponentShowcase.d.ts.map +1 -1
- package/dist/pages/DataTableShowcase.d.ts +2 -0
- package/dist/pages/DataTableShowcase.d.ts.map +1 -0
- package/dist/styles.css +5 -13
- 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
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# nqui NavigationMenu
|
|
2
|
+
|
|
3
|
+
> Nav with content panels. NavigationMenuList, NavigationMenuItem, NavigationMenuTrigger, NavigationMenuContent, NavigationMenuLink.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import {
|
|
9
|
+
NavigationMenu, NavigationMenuList, NavigationMenuItem,
|
|
10
|
+
NavigationMenuTrigger, NavigationMenuContent, NavigationMenuLink
|
|
11
|
+
} from "@nqlib/nqui"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Basic
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
<NavigationMenu>
|
|
18
|
+
<NavigationMenuList>
|
|
19
|
+
<NavigationMenuItem>
|
|
20
|
+
<NavigationMenuTrigger>Item</NavigationMenuTrigger>
|
|
21
|
+
<NavigationMenuContent>Panel content</NavigationMenuContent>
|
|
22
|
+
</NavigationMenuItem>
|
|
23
|
+
</NavigationMenuList>
|
|
24
|
+
</NavigationMenu>
|
|
25
|
+
```
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# nqui Pagination
|
|
2
|
+
|
|
3
|
+
> Pagination. PaginationContent, PaginationItem, PaginationLink, PaginationPrevious, PaginationNext, PaginationEllipsis.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import {
|
|
9
|
+
Pagination, PaginationContent, PaginationItem, PaginationLink,
|
|
10
|
+
PaginationPrevious, PaginationNext, PaginationEllipsis
|
|
11
|
+
} from "@nqlib/nqui"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Basic
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
<Pagination>
|
|
18
|
+
<PaginationContent>
|
|
19
|
+
<PaginationItem><PaginationPrevious href="#" /></PaginationItem>
|
|
20
|
+
<PaginationItem><PaginationLink href="#">1</PaginationLink></PaginationItem>
|
|
21
|
+
<PaginationItem><PaginationEllipsis /></PaginationItem>
|
|
22
|
+
<PaginationItem><PaginationNext href="#" /></PaginationItem>
|
|
23
|
+
</PaginationContent>
|
|
24
|
+
</Pagination>
|
|
25
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# nqui Popover
|
|
2
|
+
|
|
3
|
+
> Floating panel. PopoverAnchor decouples trigger from anchor position.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Popover, PopoverTrigger, PopoverContent, PopoverAnchor } from "@nqlib/nqui"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<Popover>
|
|
15
|
+
<PopoverTrigger asChild><Button>Open</Button></PopoverTrigger>
|
|
16
|
+
<PopoverContent>Content</PopoverContent>
|
|
17
|
+
</Popover>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## PopoverAnchor
|
|
21
|
+
|
|
22
|
+
Position relative to anchor, not trigger:
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
<Popover>
|
|
26
|
+
<PopoverAnchor asChild><div ref={anchorRef}>Anchor area</div></PopoverAnchor>
|
|
27
|
+
<PopoverTrigger asChild><Button>Open</Button></PopoverTrigger>
|
|
28
|
+
<PopoverContent>Content</PopoverContent>
|
|
29
|
+
</Popover>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Notes
|
|
33
|
+
|
|
34
|
+
- PopoverAnchor: content positions by anchor, not trigger.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# nqui Progress
|
|
2
|
+
|
|
3
|
+
> Progress bar. Dash and solid variants.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Progress } from "@nqlib/nqui"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<Progress value={60} />
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Variants
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
<Progress value={60} variant="solid" />
|
|
21
|
+
<Progress value={60} variant="dash" />
|
|
22
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# nqui RadioGroup
|
|
2
|
+
|
|
3
|
+
> Radio selection. Variants: animated, sliding, bar-left, bar-right.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { RadioGroup, RadioGroupItem } from "@nqlib/nqui"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<RadioGroup value={value} onValueChange={setValue}>
|
|
15
|
+
<RadioGroupItem value="a" /> A
|
|
16
|
+
<RadioGroupItem value="b" /> B
|
|
17
|
+
</RadioGroup>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Variants
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
<RadioGroup variant="animated" />
|
|
24
|
+
<RadioGroup variant="sliding" />
|
|
25
|
+
<RadioGroup variant="bar-left" />
|
|
26
|
+
<RadioGroup variant="bar-right" />
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Orientation / Disabled
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
<RadioGroup orientation="horizontal" />
|
|
33
|
+
<RadioGroupItem value="a" disabled />
|
|
34
|
+
```
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# nqui Rating
|
|
2
|
+
|
|
3
|
+
> Star rating. Half-star, maxRating, tooltipContent. Injects style.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Rating } from "@nqlib/nqui"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<Rating value={3.5} onChange={setVal} />
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## maxRating / starSize
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
<Rating value={val} onChange={setVal} maxRating={10} starSize={24} />
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## tooltipContent
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
<Rating
|
|
27
|
+
value={val}
|
|
28
|
+
onChange={setVal}
|
|
29
|
+
tooltipContent={(v) => `${v} stars`}
|
|
30
|
+
/>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Notes
|
|
34
|
+
|
|
35
|
+
- Injects inline style for SVG mask. Client-only in SSR.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# nqui Resizable
|
|
2
|
+
|
|
3
|
+
> Resizable panels. Container: ResizablePanelGroup. Peer: react-resizable-panels.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { ResizablePanelGroup, ResizablePanel, ResizableHandle } from "@nqlib/nqui"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<ResizablePanelGroup direction="horizontal">
|
|
15
|
+
<ResizablePanel defaultSize={25}>Panel 1</ResizablePanel>
|
|
16
|
+
<ResizableHandle />
|
|
17
|
+
<ResizablePanel defaultSize={75}>Panel 2</ResizablePanel>
|
|
18
|
+
</ResizablePanelGroup>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Notes
|
|
22
|
+
|
|
23
|
+
- Peer: `react-resizable-panels`.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# nqui Sandbox
|
|
2
|
+
|
|
3
|
+
> Live code playground. SandboxProvider, SandboxLayout, SandboxCodeEditor, SandboxPreview. Peer: @codesandbox/sandpack-react.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import {
|
|
9
|
+
SandboxProvider, SandboxLayout, SandboxCodeEditor,
|
|
10
|
+
SandboxPreview
|
|
11
|
+
} from "@nqlib/nqui"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Basic
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
<SandboxProvider theme="dark" template="react" files={{ "/App.tsx": "..." }}>
|
|
18
|
+
<SandboxLayout>
|
|
19
|
+
<SandboxCodeEditor showTabs />
|
|
20
|
+
<SandboxPreview />
|
|
21
|
+
</SandboxLayout>
|
|
22
|
+
</SandboxProvider>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Notes
|
|
26
|
+
|
|
27
|
+
- Peer: @codesandbox/sandpack-react. Heavy dependency.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# nqui ScrollArea
|
|
2
|
+
|
|
3
|
+
> Custom scrollbar. fadeMask (enhanced), horizontal scroll.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { ScrollArea, ScrollBar } from "@nqlib/nqui"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<ScrollArea className="h-[200px]">
|
|
15
|
+
<div>Content</div>
|
|
16
|
+
<ScrollBar orientation="vertical" />
|
|
17
|
+
</ScrollArea>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Horizontal
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
<ScrollArea orientation="horizontal">
|
|
24
|
+
<div className="flex gap-4 min-w-max">...</div>
|
|
25
|
+
</ScrollArea>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## fadeMask
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
<ScrollArea fadeMask>...</ScrollArea>
|
|
32
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# nqui SegmentedControl
|
|
2
|
+
|
|
3
|
+
> Segmented control. Primary/ghost variants.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { SegmentedControl, SegmentedControlItem } from "@nqlib/nqui"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<SegmentedControl value={v} onValueChange={setV}>
|
|
15
|
+
<SegmentedControlItem value="a">A</SegmentedControlItem>
|
|
16
|
+
<SegmentedControlItem value="b">B</SegmentedControlItem>
|
|
17
|
+
</SegmentedControl>
|
|
18
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# nqui Select
|
|
2
|
+
|
|
3
|
+
> Dropdown select. Enhanced with 3D shadow, frosted glass content.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem, SelectGroup, SelectLabel, SelectSeparator } from "@nqlib/nqui"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<Select>
|
|
15
|
+
<SelectTrigger><SelectValue placeholder="Pick" /></SelectTrigger>
|
|
16
|
+
<SelectContent>
|
|
17
|
+
<SelectItem value="a">A</SelectItem>
|
|
18
|
+
<SelectItem value="b">B</SelectItem>
|
|
19
|
+
</SelectContent>
|
|
20
|
+
</Select>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Grouped
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
<SelectContent>
|
|
27
|
+
<SelectGroup>
|
|
28
|
+
<SelectLabel>Fruits</SelectLabel>
|
|
29
|
+
<SelectItem value="apple">Apple</SelectItem>
|
|
30
|
+
</SelectGroup>
|
|
31
|
+
<SelectSeparator />
|
|
32
|
+
<SelectGroup>
|
|
33
|
+
<SelectLabel>Veggies</SelectLabel>
|
|
34
|
+
<SelectItem value="carrot">Carrot</SelectItem>
|
|
35
|
+
</SelectGroup>
|
|
36
|
+
</SelectContent>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Controlled
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
<Select value={value} onValueChange={setValue}>
|
|
43
|
+
...
|
|
44
|
+
</Select>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Notes
|
|
48
|
+
|
|
49
|
+
- Injects CSS at mount; client-only in SSR.
|
|
50
|
+
- Use `SelectScrollUpButton` / `SelectScrollDownButton` for long lists.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# nqui Sheet
|
|
2
|
+
|
|
3
|
+
> Side panel. SheetTrigger, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetFooter. side: top|right|bottom|left.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import {
|
|
9
|
+
Sheet, SheetTrigger, SheetContent, SheetHeader,
|
|
10
|
+
SheetTitle, SheetDescription, SheetFooter
|
|
11
|
+
} from "@nqlib/nqui"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Basic
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
<Sheet>
|
|
18
|
+
<SheetTrigger asChild><Button>Open</Button></SheetTrigger>
|
|
19
|
+
<SheetContent side="right">
|
|
20
|
+
<SheetHeader>
|
|
21
|
+
<SheetTitle>Title</SheetTitle>
|
|
22
|
+
<SheetDescription>Desc</SheetDescription>
|
|
23
|
+
</SheetHeader>
|
|
24
|
+
...
|
|
25
|
+
</SheetContent>
|
|
26
|
+
</Sheet>
|
|
27
|
+
```
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# nqui Sidebar
|
|
2
|
+
|
|
3
|
+
> App sidebar. Collapsible. SidebarProvider must wrap entire layout.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import {
|
|
9
|
+
SidebarProvider, Sidebar, SidebarTrigger, SidebarInset,
|
|
10
|
+
SidebarHeader, SidebarContent, SidebarGroup, SidebarGroupLabel,
|
|
11
|
+
SidebarGroupContent, SidebarMenu, SidebarMenuItem, SidebarMenuButton,
|
|
12
|
+
SidebarRail, SidebarSeparator
|
|
13
|
+
} from "@nqlib/nqui"
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Layout
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
<SidebarProvider>
|
|
20
|
+
<Sidebar collapsible="icon">
|
|
21
|
+
<SidebarHeader>...</SidebarHeader>
|
|
22
|
+
<SidebarContent>
|
|
23
|
+
<SidebarGroup>
|
|
24
|
+
<SidebarGroupLabel>Label</SidebarGroupLabel>
|
|
25
|
+
<SidebarGroupContent>
|
|
26
|
+
<SidebarMenu>
|
|
27
|
+
<SidebarMenuItem><SidebarMenuButton>Item</SidebarMenuButton></SidebarMenuItem>
|
|
28
|
+
</SidebarMenu>
|
|
29
|
+
</SidebarGroupContent>
|
|
30
|
+
</SidebarGroup>
|
|
31
|
+
</SidebarContent>
|
|
32
|
+
<SidebarRail />
|
|
33
|
+
</Sidebar>
|
|
34
|
+
<SidebarInset>
|
|
35
|
+
<SidebarTrigger />
|
|
36
|
+
{/* Main content */}
|
|
37
|
+
</SidebarInset>
|
|
38
|
+
</SidebarProvider>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Notes
|
|
42
|
+
|
|
43
|
+
- **Critical:** SidebarProvider wraps full layout (sidebar + content), not just Sidebar.
|
|
44
|
+
- collapsible: "offcanvas" | "icon" | "none".
|
|
45
|
+
- Sidebar uses fixed positioning; one per app.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# nqui Slider
|
|
2
|
+
|
|
3
|
+
> Range slider. Supports single and range values.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Slider } from "@nqlib/nqui"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<Slider value={[50]} onValueChange={([v]) => setVal(v)} />
|
|
15
|
+
<Slider value={[20, 80]} onValueChange={setRange} />
|
|
16
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# nqui Snippet
|
|
2
|
+
|
|
3
|
+
> Tabbed code display. SnippetHeader, SnippetTabsList, SnippetTabsTrigger, SnippetTabsContent, SnippetCopyButton.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import {
|
|
9
|
+
Snippet, SnippetHeader, SnippetTabsList, SnippetTabsTrigger,
|
|
10
|
+
SnippetTabsContent, SnippetCopyButton
|
|
11
|
+
} from "@nqlib/nqui"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Basic
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
<Snippet defaultValue="tsx">
|
|
18
|
+
<SnippetHeader>
|
|
19
|
+
<SnippetTabsList>
|
|
20
|
+
<SnippetTabsTrigger value="tsx">TSX</SnippetTabsTrigger>
|
|
21
|
+
<SnippetTabsTrigger value="jsx">JSX</SnippetTabsTrigger>
|
|
22
|
+
</SnippetTabsList>
|
|
23
|
+
<SnippetCopyButton value={code} />
|
|
24
|
+
</SnippetHeader>
|
|
25
|
+
<SnippetTabsContent value="tsx">{code}</SnippetTabsContent>
|
|
26
|
+
<SnippetTabsContent value="jsx">{code}</SnippetTabsContent>
|
|
27
|
+
</Snippet>
|
|
28
|
+
```
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# nqui Sortable
|
|
2
|
+
|
|
3
|
+
> Drag-and-drop reorder. Import from `@nqlib/nqui` or `@/components/ui/sortable`.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import {
|
|
9
|
+
Sortable, SortableContent, SortableItem, SortableItemHandle, SortableOverlay
|
|
10
|
+
} from "@/components/ui/sortable"
|
|
11
|
+
// Or if exported: import { ... } from "@nqlib/nqui"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Basic
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
<Sortable value={items} onValueChange={setItems} orientation="vertical">
|
|
18
|
+
<SortableContent asChild>
|
|
19
|
+
<div>
|
|
20
|
+
{items.map((item) => (
|
|
21
|
+
<SortableItem key={item} value={item} asChild>
|
|
22
|
+
<div>
|
|
23
|
+
<SortableItemHandle asChild><button>⋮⋮</button></SortableItemHandle>
|
|
24
|
+
{item}
|
|
25
|
+
</div>
|
|
26
|
+
</SortableItem>
|
|
27
|
+
))}
|
|
28
|
+
</div>
|
|
29
|
+
</SortableContent>
|
|
30
|
+
<SortableOverlay>
|
|
31
|
+
{({ value }) => <div>Dragging: {value}</div>}
|
|
32
|
+
</SortableOverlay>
|
|
33
|
+
</Sortable>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Object Array
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
<Sortable value={objects} onValueChange={setObjects} getItemValue={(o) => o.id}>
|
|
40
|
+
...
|
|
41
|
+
</Sortable>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## orientation
|
|
45
|
+
|
|
46
|
+
`vertical` | `horizontal` | `mixed`
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# nqui TableOfContents
|
|
2
|
+
|
|
3
|
+
> TOC from headings. Auto-detect or manual items. Scroll spy.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { TableOfContents } from "@nqlib/nqui"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Auto-detect
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<TableOfContents
|
|
15
|
+
autoDetect
|
|
16
|
+
headingSelector="h2"
|
|
17
|
+
enableScrollSpy
|
|
18
|
+
container={contentRef}
|
|
19
|
+
title="Contents"
|
|
20
|
+
/>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Manual Items
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
<TableOfContents
|
|
27
|
+
items={[{ id: "s1", label: "Section 1", level: 1 }]}
|
|
28
|
+
enableScrollSpy
|
|
29
|
+
variant="normal"
|
|
30
|
+
/>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Notes
|
|
34
|
+
|
|
35
|
+
- Headings need `id` for anchor links.
|
|
36
|
+
- container: scoped scroll container. Omit for full page.
|
|
37
|
+
- variant: "normal" | "clerk" | "circuit".
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# nqui Tabs
|
|
2
|
+
|
|
3
|
+
> Tabbed content. Sliding indicator. Enhanced.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@nqlib/nqui"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<Tabs defaultValue="tab1">
|
|
15
|
+
<TabsList>
|
|
16
|
+
<TabsTrigger value="tab1">Tab 1</TabsTrigger>
|
|
17
|
+
<TabsTrigger value="tab2">Tab 2</TabsTrigger>
|
|
18
|
+
</TabsList>
|
|
19
|
+
<TabsContent value="tab1">Content 1</TabsContent>
|
|
20
|
+
<TabsContent value="tab2">Content 2</TabsContent>
|
|
21
|
+
</Tabs>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Controlled
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
<Tabs value={value} onValueChange={setValue}>
|
|
28
|
+
...
|
|
29
|
+
</Tabs>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Notes
|
|
33
|
+
|
|
34
|
+
- Sliding indicator needs `position: relative` on TabsList container.
|
|
35
|
+
- Use `EnhancedTabsList` props for additional customization.
|