@kinetixui/ui 0.1.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +30 -21
- package/package.json +12 -4
- package/src/components/button.tsx +19 -12
- package/src/components/context-menu.tsx +1 -1
- package/src/components/dropdown-menu.tsx +1 -1
- package/src/components/input-group.tsx +2 -1
- package/src/components/list.tsx +3 -1
- package/src/components/menubar.tsx +2 -2
- package/src/components/navigation-bar.tsx +1 -1
- package/src/components/select.tsx +1 -1
- package/src/components/toggle.tsx +1 -1
- package/src/components-behavior.test.tsx +74 -0
- package/src/components-smoke.test.tsx +47 -0
- package/src/stories/Accordion.stories.tsx +49 -0
- package/src/stories/Alert.stories.tsx +38 -0
- package/src/stories/AlertDialog.stories.tsx +35 -0
- package/src/stories/AspectRatio.stories.tsx +32 -0
- package/src/stories/AudioPlayer.stories.tsx +26 -0
- package/src/stories/Avatar.stories.tsx +23 -0
- package/src/stories/AvatarGroup.stories.tsx +37 -0
- package/src/stories/Badge.stories.tsx +35 -0
- package/src/stories/Breadcrumb.stories.tsx +36 -0
- package/src/stories/Calendar.stories.tsx +25 -0
- package/src/stories/Card.stories.tsx +33 -0
- package/src/stories/Carousel.stories.tsx +33 -0
- package/src/stories/Chart.stories.tsx +44 -0
- package/src/stories/Checkbox.stories.tsx +29 -0
- package/src/stories/CircularProgress.stories.tsx +42 -0
- package/src/stories/CodeBlock.stories.tsx +25 -0
- package/src/stories/Collapsible.stories.tsx +50 -0
- package/src/stories/Combobox.stories.tsx +32 -0
- package/src/stories/Command.stories.tsx +32 -0
- package/src/stories/ContextMenu.stories.tsx +31 -0
- package/src/stories/DataTable.stories.tsx +31 -0
- package/src/stories/DatePicker.stories.tsx +30 -0
- package/src/stories/Dialog.stories.tsx +38 -0
- package/src/stories/Drawer.stories.tsx +39 -0
- package/src/stories/DropdownMenu.stories.tsx +32 -0
- package/src/stories/Fab.stories.tsx +47 -0
- package/src/stories/Field.stories.tsx +35 -0
- package/src/stories/FileUpload.stories.tsx +36 -0
- package/src/stories/Footer.stories.tsx +39 -0
- package/src/stories/Form.stories.tsx +28 -0
- package/src/stories/HoverCard.stories.tsx +41 -0
- package/src/stories/Image.stories.tsx +35 -0
- package/src/stories/Inform.stories.tsx +39 -0
- package/src/stories/InputGroup.stories.tsx +36 -0
- package/src/stories/InputOTP.stories.tsx +27 -0
- package/src/stories/Label.stories.tsx +24 -0
- package/src/stories/List.stories.tsx +26 -0
- package/src/stories/Menubar.stories.tsx +38 -0
- package/src/stories/Metric.stories.tsx +32 -0
- package/src/stories/Modal.stories.tsx +31 -0
- package/src/stories/NavigationBar.stories.tsx +32 -0
- package/src/stories/NavigationMenu.stories.tsx +34 -0
- package/src/stories/NumberInput.stories.tsx +29 -0
- package/src/stories/Pagination.stories.tsx +30 -0
- package/src/stories/PasswordInput.stories.tsx +23 -0
- package/src/stories/Popover.stories.tsx +47 -0
- package/src/stories/Progress.stories.tsx +31 -0
- package/src/stories/Quote.stories.tsx +32 -0
- package/src/stories/RadioGroup.stories.tsx +45 -0
- package/src/stories/Rating.stories.tsx +35 -0
- package/src/stories/Resizable.stories.tsx +29 -0
- package/src/stories/ScrollArea.stories.tsx +25 -0
- package/src/stories/Select.stories.tsx +46 -0
- package/src/stories/Separator.stories.tsx +41 -0
- package/src/stories/Sheet.stories.tsx +31 -0
- package/src/stories/Sidebar.stories.tsx +25 -0
- package/src/stories/Skeleton.stories.tsx +27 -0
- package/src/stories/Slider.stories.tsx +24 -0
- package/src/stories/Sonner.stories.tsx +26 -0
- package/src/stories/Spinner.stories.tsx +33 -0
- package/src/stories/Stepper.stories.tsx +35 -0
- package/src/stories/Switch.stories.tsx +29 -0
- package/src/stories/TabBar.stories.tsx +35 -0
- package/src/stories/Table.stories.tsx +42 -0
- package/src/stories/TableOfContents.stories.tsx +31 -0
- package/src/stories/Tabs.stories.tsx +50 -0
- package/src/stories/Tag.stories.tsx +42 -0
- package/src/stories/Toggle.stories.tsx +34 -0
- package/src/stories/ToggleGroup.stories.tsx +37 -0
- package/src/stories/Tooltip.stories.tsx +42 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { AudioPlayer } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const SAMPLE_AUDIO = "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3";
|
|
8
|
+
|
|
9
|
+
const Demo = () => (
|
|
10
|
+
<div className="flex w-full max-w-[380px] flex-col gap-6">
|
|
11
|
+
<AudioPlayer src={SAMPLE_AUDIO} title="SoundHelix Song 1" artist="T. Schürger" />
|
|
12
|
+
<AudioPlayer variant="mini" src={SAMPLE_AUDIO} title="SoundHelix Song 1" artist="T. Schürger" />
|
|
13
|
+
</div>
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
const meta = {
|
|
17
|
+
title: "Data Display/AudioPlayer",
|
|
18
|
+
parameters: {
|
|
19
|
+
layout: "centered",
|
|
20
|
+
docs: { source: { code: `<AudioPlayer src="/audio/song.mp3" title="Song 1" artist="Artist" />\n\n<AudioPlayer variant="mini" src="/audio/song.mp3" title="Song 1" artist="Artist" />`, language: "tsx" } },
|
|
21
|
+
},
|
|
22
|
+
} satisfies Meta;
|
|
23
|
+
|
|
24
|
+
export default meta;
|
|
25
|
+
|
|
26
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Avatar, AvatarFallback } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => (
|
|
8
|
+
<Avatar>
|
|
9
|
+
<AvatarFallback>KX</AvatarFallback>
|
|
10
|
+
</Avatar>
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
const meta = {
|
|
14
|
+
title: "Data Display/Avatar",
|
|
15
|
+
parameters: {
|
|
16
|
+
layout: "centered",
|
|
17
|
+
docs: { source: { code: `<Avatar>\n <AvatarImage src="/avatar.png" alt="@kinetixui" />\n <AvatarFallback>KX</AvatarFallback>\n</Avatar>`, language: "tsx" } },
|
|
18
|
+
},
|
|
19
|
+
} satisfies Meta;
|
|
20
|
+
|
|
21
|
+
export default meta;
|
|
22
|
+
|
|
23
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Avatar, AvatarFallback, AvatarGroup } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => (
|
|
8
|
+
<AvatarGroup max={3}>
|
|
9
|
+
<Avatar>
|
|
10
|
+
<AvatarFallback>JD</AvatarFallback>
|
|
11
|
+
</Avatar>
|
|
12
|
+
<Avatar>
|
|
13
|
+
<AvatarFallback>AK</AvatarFallback>
|
|
14
|
+
</Avatar>
|
|
15
|
+
<Avatar>
|
|
16
|
+
<AvatarFallback>MO</AvatarFallback>
|
|
17
|
+
</Avatar>
|
|
18
|
+
<Avatar>
|
|
19
|
+
<AvatarFallback>RS</AvatarFallback>
|
|
20
|
+
</Avatar>
|
|
21
|
+
<Avatar>
|
|
22
|
+
<AvatarFallback>TL</AvatarFallback>
|
|
23
|
+
</Avatar>
|
|
24
|
+
</AvatarGroup>
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
const meta = {
|
|
28
|
+
title: "Data Display/AvatarGroup",
|
|
29
|
+
parameters: {
|
|
30
|
+
layout: "centered",
|
|
31
|
+
docs: { source: { code: `<AvatarGroup max={3}>\n <Avatar><AvatarFallback>JD</AvatarFallback></Avatar>\n <Avatar><AvatarFallback>AK</AvatarFallback></Avatar>\n <Avatar><AvatarFallback>MO</AvatarFallback></Avatar>\n</AvatarGroup>`, language: "tsx" } },
|
|
32
|
+
},
|
|
33
|
+
} satisfies Meta;
|
|
34
|
+
|
|
35
|
+
export default meta;
|
|
36
|
+
|
|
37
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx · controls: scripts/gen-stories.mjs CONTROLS */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Badge } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => (
|
|
8
|
+
<div className="flex flex-wrap gap-2">
|
|
9
|
+
<Badge>Default</Badge>
|
|
10
|
+
<Badge variant="secondary">Secondary</Badge>
|
|
11
|
+
<Badge variant="destructive">Destructive</Badge>
|
|
12
|
+
<Badge variant="outline">Outline</Badge>
|
|
13
|
+
<Badge variant="subtle">Subtle</Badge>
|
|
14
|
+
</div>
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
const meta = {
|
|
18
|
+
title: "Feedback/Badge",
|
|
19
|
+
component: Badge,
|
|
20
|
+
args: { variant: "default", children: "Badge" },
|
|
21
|
+
argTypes: {
|
|
22
|
+
variant: { control: "select", options: ["default", "secondary", "destructive", "outline", "subtle"] },
|
|
23
|
+
children: { control: "text" },
|
|
24
|
+
},
|
|
25
|
+
parameters: {
|
|
26
|
+
layout: "centered",
|
|
27
|
+
docs: { source: { code: `<Badge>Default</Badge>\n<Badge variant="secondary">Secondary</Badge>\n<Badge variant="destructive">Destructive</Badge>\n<Badge variant="outline">Outline</Badge>\n<Badge variant="subtle">Subtle</Badge>`, language: "tsx" } },
|
|
28
|
+
},
|
|
29
|
+
} satisfies Meta;
|
|
30
|
+
|
|
31
|
+
export default meta;
|
|
32
|
+
|
|
33
|
+
export const Playground: StoryObj<typeof meta> = { render: (args) => <Badge {...args} /> };
|
|
34
|
+
|
|
35
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "@kinetixui/ui";
|
|
6
|
+
import { Home } from "lucide-react";
|
|
7
|
+
|
|
8
|
+
const Demo = () => (
|
|
9
|
+
<Breadcrumb>
|
|
10
|
+
<BreadcrumbList>
|
|
11
|
+
<BreadcrumbItem>
|
|
12
|
+
<BreadcrumbLink href="/">Home</BreadcrumbLink>
|
|
13
|
+
</BreadcrumbItem>
|
|
14
|
+
<BreadcrumbSeparator />
|
|
15
|
+
<BreadcrumbItem>
|
|
16
|
+
<BreadcrumbLink href="/docs">Docs</BreadcrumbLink>
|
|
17
|
+
</BreadcrumbItem>
|
|
18
|
+
<BreadcrumbSeparator />
|
|
19
|
+
<BreadcrumbItem>
|
|
20
|
+
<BreadcrumbPage>Breadcrumb</BreadcrumbPage>
|
|
21
|
+
</BreadcrumbItem>
|
|
22
|
+
</BreadcrumbList>
|
|
23
|
+
</Breadcrumb>
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
const meta = {
|
|
27
|
+
title: "Navigation/Breadcrumb",
|
|
28
|
+
parameters: {
|
|
29
|
+
layout: "centered",
|
|
30
|
+
docs: { source: { code: `<Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem><BreadcrumbLink href="/">Home</BreadcrumbLink></BreadcrumbItem>\n <BreadcrumbSeparator />\n <BreadcrumbItem><BreadcrumbPage>Breadcrumb</BreadcrumbPage></BreadcrumbItem>\n </BreadcrumbList>\n</Breadcrumb>`, language: "tsx" } },
|
|
31
|
+
},
|
|
32
|
+
} satisfies Meta;
|
|
33
|
+
|
|
34
|
+
export default meta;
|
|
35
|
+
|
|
36
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Calendar } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => {
|
|
8
|
+
// no initial value: seeding with `new Date()` would bake "today" into the
|
|
9
|
+
// static build's server-rendered HTML, which then mismatches the client's
|
|
10
|
+
// own "today" the moment a day passes without a rebuild.
|
|
11
|
+
const [date, setDate] = React.useState<Date | undefined>();
|
|
12
|
+
return <Calendar mode="single" selected={date} onSelect={setDate} className="rounded-md border" />;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const meta = {
|
|
16
|
+
title: "Form Inputs/Calendar",
|
|
17
|
+
parameters: {
|
|
18
|
+
layout: "padded",
|
|
19
|
+
docs: { source: { code: `const [date, setDate] = React.useState<Date>()\n<Calendar mode="single" selected={date} onSelect={setDate} className="rounded-md border" />`, language: "tsx" } },
|
|
20
|
+
},
|
|
21
|
+
} satisfies Meta;
|
|
22
|
+
|
|
23
|
+
export default meta;
|
|
24
|
+
|
|
25
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Input } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => (
|
|
8
|
+
<Card className="w-[320px]">
|
|
9
|
+
<CardHeader>
|
|
10
|
+
<CardTitle>Create project</CardTitle>
|
|
11
|
+
<CardDescription>Deploy your new project in one click.</CardDescription>
|
|
12
|
+
</CardHeader>
|
|
13
|
+
<CardContent>
|
|
14
|
+
<Input placeholder="Project name" />
|
|
15
|
+
</CardContent>
|
|
16
|
+
<CardFooter className="justify-between">
|
|
17
|
+
<Button variant="Outline" size="sm">Cancel</Button>
|
|
18
|
+
<Button size="sm">Deploy</Button>
|
|
19
|
+
</CardFooter>
|
|
20
|
+
</Card>
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
const meta = {
|
|
24
|
+
title: "Data Display/Card",
|
|
25
|
+
parameters: {
|
|
26
|
+
layout: "centered",
|
|
27
|
+
docs: { source: { code: `<Card>\n <CardHeader>\n <CardTitle>Create project</CardTitle>\n <CardDescription>Deploy your new project in one click.</CardDescription>\n </CardHeader>\n <CardContent>…</CardContent>\n <CardFooter>…</CardFooter>\n</Card>`, language: "tsx" } },
|
|
28
|
+
},
|
|
29
|
+
} satisfies Meta;
|
|
30
|
+
|
|
31
|
+
export default meta;
|
|
32
|
+
|
|
33
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => (
|
|
8
|
+
<Carousel className="w-full max-w-xs">
|
|
9
|
+
<CarouselContent>
|
|
10
|
+
{Array.from({ length: 5 }).map((_, i) => (
|
|
11
|
+
<CarouselItem key={i}>
|
|
12
|
+
<div className="flex aspect-square items-center justify-center rounded-lg border bg-muted text-3xl font-semibold">
|
|
13
|
+
{i + 1}
|
|
14
|
+
</div>
|
|
15
|
+
</CarouselItem>
|
|
16
|
+
))}
|
|
17
|
+
</CarouselContent>
|
|
18
|
+
<CarouselPrevious />
|
|
19
|
+
<CarouselNext />
|
|
20
|
+
</Carousel>
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
const meta = {
|
|
24
|
+
title: "Data Display/Carousel",
|
|
25
|
+
parameters: {
|
|
26
|
+
layout: "padded",
|
|
27
|
+
docs: { source: { code: `<Carousel>\n <CarouselContent>\n {items.map((n) => <CarouselItem key={n}>{n}</CarouselItem>)}\n </CarouselContent>\n <CarouselPrevious />\n <CarouselNext />\n</Carousel>`, language: "tsx" } },
|
|
28
|
+
},
|
|
29
|
+
} satisfies Meta;
|
|
30
|
+
|
|
31
|
+
export default meta;
|
|
32
|
+
|
|
33
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { ChartContainer, ChartTooltip, ChartTooltipContent } from "@kinetixui/ui";
|
|
6
|
+
import { Bar, BarChart, CartesianGrid, XAxis } from "recharts";
|
|
7
|
+
|
|
8
|
+
const Demo = () => {
|
|
9
|
+
const data = [
|
|
10
|
+
{ month: "Jan", desktop: 186, mobile: 80 },
|
|
11
|
+
{ month: "Feb", desktop: 305, mobile: 200 },
|
|
12
|
+
{ month: "Mar", desktop: 237, mobile: 120 },
|
|
13
|
+
{ month: "Apr", desktop: 73, mobile: 190 },
|
|
14
|
+
{ month: "May", desktop: 209, mobile: 130 },
|
|
15
|
+
{ month: "Jun", desktop: 214, mobile: 140 },
|
|
16
|
+
];
|
|
17
|
+
const config = {
|
|
18
|
+
desktop: { label: "Desktop", color: "hsl(var(--chart-1))" },
|
|
19
|
+
mobile: { label: "Mobile", color: "hsl(var(--chart-2))" },
|
|
20
|
+
};
|
|
21
|
+
return (
|
|
22
|
+
<ChartContainer config={config} className="min-h-[240px] w-full">
|
|
23
|
+
<BarChart accessibilityLayer data={data}>
|
|
24
|
+
<CartesianGrid vertical={false} />
|
|
25
|
+
<XAxis dataKey="month" tickLine={false} axisLine={false} tickMargin={8} />
|
|
26
|
+
<ChartTooltip content={<ChartTooltipContent />} />
|
|
27
|
+
<Bar dataKey="desktop" fill="var(--color-desktop)" radius={4} />
|
|
28
|
+
<Bar dataKey="mobile" fill="var(--color-mobile)" radius={4} />
|
|
29
|
+
</BarChart>
|
|
30
|
+
</ChartContainer>
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const meta = {
|
|
35
|
+
title: "Data Display/Chart",
|
|
36
|
+
parameters: {
|
|
37
|
+
layout: "padded",
|
|
38
|
+
docs: { source: { code: `const config = {\n desktop: { label: "Desktop", color: "hsl(var(--chart-1))" },\n mobile: { label: "Mobile", color: "hsl(var(--chart-2))" },\n}\n<ChartContainer config={config}>\n <BarChart data={data}>\n <CartesianGrid vertical={false} />\n <XAxis dataKey="month" />\n <ChartTooltip content={<ChartTooltipContent />} />\n <Bar dataKey="desktop" fill="var(--color-desktop)" radius={4} />\n </BarChart>\n</ChartContainer>`, language: "tsx" } },
|
|
39
|
+
},
|
|
40
|
+
} satisfies Meta;
|
|
41
|
+
|
|
42
|
+
export default meta;
|
|
43
|
+
|
|
44
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx · controls: scripts/gen-stories.mjs CONTROLS */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Checkbox, Label } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => (
|
|
8
|
+
<div className="flex items-center gap-2">
|
|
9
|
+
<Checkbox id="c1" defaultChecked />
|
|
10
|
+
<Label htmlFor="c1">Accept terms and conditions</Label>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
const meta = {
|
|
15
|
+
title: "Form Inputs/Checkbox",
|
|
16
|
+
component: Checkbox,
|
|
17
|
+
args: { disabled: false, defaultChecked: false },
|
|
18
|
+
argTypes: { disabled: { control: "boolean" }, defaultChecked: { control: "boolean" } },
|
|
19
|
+
parameters: {
|
|
20
|
+
layout: "centered",
|
|
21
|
+
docs: { source: { code: `<div className="flex items-center gap-2">\n <Checkbox id="c1" />\n <Label htmlFor="c1">Accept terms and conditions</Label>\n</div>`, language: "tsx" } },
|
|
22
|
+
},
|
|
23
|
+
} satisfies Meta;
|
|
24
|
+
|
|
25
|
+
export default meta;
|
|
26
|
+
|
|
27
|
+
export const Playground: StoryObj<typeof meta> = { render: (args) => <Checkbox {...args} /> };
|
|
28
|
+
|
|
29
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx · controls: scripts/gen-stories.mjs CONTROLS */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { CircularProgress } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => {
|
|
8
|
+
const [v, setV] = React.useState(25);
|
|
9
|
+
React.useEffect(() => {
|
|
10
|
+
const t = setInterval(() => setV((c) => (c >= 100 ? 25 : c + 5)), 400);
|
|
11
|
+
return () => clearInterval(t);
|
|
12
|
+
}, []);
|
|
13
|
+
return (
|
|
14
|
+
<div className="flex items-center gap-6">
|
|
15
|
+
<CircularProgress value={v} showValue />
|
|
16
|
+
<CircularProgress value={v} size={64} strokeWidth={6} showValue />
|
|
17
|
+
<CircularProgress value={v} />
|
|
18
|
+
</div>
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const meta = {
|
|
23
|
+
title: "Feedback/CircularProgress",
|
|
24
|
+
component: CircularProgress,
|
|
25
|
+
args: { value: 66, size: 48, strokeWidth: 4, showValue: true },
|
|
26
|
+
argTypes: {
|
|
27
|
+
value: { control: { type: "range", min: 0, max: 100 } },
|
|
28
|
+
size: { control: { type: "range", min: 24, max: 120 } },
|
|
29
|
+
strokeWidth: { control: { type: "range", min: 2, max: 12 } },
|
|
30
|
+
showValue: { control: "boolean" },
|
|
31
|
+
},
|
|
32
|
+
parameters: {
|
|
33
|
+
layout: "centered",
|
|
34
|
+
docs: { source: { code: `<CircularProgress value={66} showValue />\n<CircularProgress value={66} size={64} strokeWidth={6} showValue />`, language: "tsx" } },
|
|
35
|
+
},
|
|
36
|
+
} satisfies Meta;
|
|
37
|
+
|
|
38
|
+
export default meta;
|
|
39
|
+
|
|
40
|
+
export const Playground: StoryObj<typeof meta> = { render: (args) => <CircularProgress {...args} /> };
|
|
41
|
+
|
|
42
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Button, CodeBlock } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => (
|
|
8
|
+
<CodeBlock
|
|
9
|
+
className="w-full max-w-lg"
|
|
10
|
+
filename="button.tsx"
|
|
11
|
+
code={`export function Button({ children }) {\n return <button className="btn">{children}</button>;\n}`}
|
|
12
|
+
/>
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
const meta = {
|
|
16
|
+
title: "Foundations/CodeBlock",
|
|
17
|
+
parameters: {
|
|
18
|
+
layout: "centered",
|
|
19
|
+
docs: { source: { code: `<CodeBlock filename="button.tsx" code={source} />`, language: "tsx" } },
|
|
20
|
+
},
|
|
21
|
+
} satisfies Meta;
|
|
22
|
+
|
|
23
|
+
export default meta;
|
|
24
|
+
|
|
25
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx · controls: scripts/gen-stories.mjs CONTROLS */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Button, Collapsible, CollapsibleContent, CollapsibleTrigger, Toggle } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => (
|
|
8
|
+
<Collapsible className="w-full max-w-md space-y-2">
|
|
9
|
+
<div className="flex items-center justify-between rounded-md border px-4 py-2 text-sm">
|
|
10
|
+
@kinetixui starred 3 repositories
|
|
11
|
+
<CollapsibleTrigger asChild>
|
|
12
|
+
<Button variant="Ghost" size="sm">Toggle</Button>
|
|
13
|
+
</CollapsibleTrigger>
|
|
14
|
+
</div>
|
|
15
|
+
<CollapsibleContent className="space-y-2">
|
|
16
|
+
<div className="rounded-md border px-4 py-2 text-sm">@radix-ui/primitives</div>
|
|
17
|
+
<div className="rounded-md border px-4 py-2 text-sm">@stitches/react</div>
|
|
18
|
+
</CollapsibleContent>
|
|
19
|
+
</Collapsible>
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const meta = {
|
|
23
|
+
title: "Data Display/Collapsible",
|
|
24
|
+
component: Collapsible,
|
|
25
|
+
args: { defaultOpen: false, disabled: false },
|
|
26
|
+
argTypes: { defaultOpen: { control: "boolean" }, disabled: { control: "boolean" } },
|
|
27
|
+
parameters: {
|
|
28
|
+
layout: "centered",
|
|
29
|
+
docs: { source: { code: `<Collapsible>\n <CollapsibleTrigger>Toggle</CollapsibleTrigger>\n <CollapsibleContent>…</CollapsibleContent>\n</Collapsible>`, language: "tsx" } },
|
|
30
|
+
},
|
|
31
|
+
} satisfies Meta;
|
|
32
|
+
|
|
33
|
+
export default meta;
|
|
34
|
+
|
|
35
|
+
export const Playground: StoryObj<typeof meta> = { render: (args) => (
|
|
36
|
+
<Collapsible {...args} className="w-full max-w-md space-y-2">
|
|
37
|
+
<div className="flex items-center justify-between rounded-md border px-4 py-2 text-sm">
|
|
38
|
+
@kinetixui starred 3 repositories
|
|
39
|
+
<CollapsibleTrigger asChild>
|
|
40
|
+
<Button variant="Ghost" size="sm">Toggle</Button>
|
|
41
|
+
</CollapsibleTrigger>
|
|
42
|
+
</div>
|
|
43
|
+
<CollapsibleContent className="space-y-2">
|
|
44
|
+
<div className="rounded-md border px-4 py-2 text-sm">@radix-ui/primitives</div>
|
|
45
|
+
<div className="rounded-md border px-4 py-2 text-sm">@stitches/react</div>
|
|
46
|
+
</CollapsibleContent>
|
|
47
|
+
</Collapsible>
|
|
48
|
+
) };
|
|
49
|
+
|
|
50
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Command as Cmd, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "@kinetixui/ui";
|
|
6
|
+
import { Search } from "lucide-react";
|
|
7
|
+
|
|
8
|
+
const Demo = () => (
|
|
9
|
+
<Cmd className="w-[240px] rounded-lg border">
|
|
10
|
+
<CommandInput placeholder="Search framework…" />
|
|
11
|
+
<CommandList>
|
|
12
|
+
<CommandEmpty>No framework found.</CommandEmpty>
|
|
13
|
+
<CommandGroup>
|
|
14
|
+
{["Next.js", "SvelteKit", "Nuxt", "Remix", "Astro"].map((f) => (
|
|
15
|
+
<CommandItem key={f}>{f}</CommandItem>
|
|
16
|
+
))}
|
|
17
|
+
</CommandGroup>
|
|
18
|
+
</CommandList>
|
|
19
|
+
</Cmd>
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const meta = {
|
|
23
|
+
title: "Controls & Actions/Combobox",
|
|
24
|
+
parameters: {
|
|
25
|
+
layout: "centered",
|
|
26
|
+
docs: { source: { code: `// Popover + Command\n<Popover>\n <PopoverTrigger asChild><Button variant="Outline">Select framework…</Button></PopoverTrigger>\n <PopoverContent className="p-0">\n <Command>…</Command>\n </PopoverContent>\n</Popover>`, language: "tsx" } },
|
|
27
|
+
},
|
|
28
|
+
} satisfies Meta;
|
|
29
|
+
|
|
30
|
+
export default meta;
|
|
31
|
+
|
|
32
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Calendar, Command as Cmd, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "@kinetixui/ui";
|
|
6
|
+
import { Search } from "lucide-react";
|
|
7
|
+
|
|
8
|
+
const Demo = () => (
|
|
9
|
+
<Cmd className="max-w-[420px] rounded-lg border shadow-md">
|
|
10
|
+
<CommandInput placeholder="Type a command or search…" />
|
|
11
|
+
<CommandList>
|
|
12
|
+
<CommandEmpty>No results found.</CommandEmpty>
|
|
13
|
+
<CommandGroup heading="Suggestions">
|
|
14
|
+
<CommandItem>Calendar</CommandItem>
|
|
15
|
+
<CommandItem>Search Emoji</CommandItem>
|
|
16
|
+
<CommandItem>Launch</CommandItem>
|
|
17
|
+
</CommandGroup>
|
|
18
|
+
</CommandList>
|
|
19
|
+
</Cmd>
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const meta = {
|
|
23
|
+
title: "Controls & Actions/Command",
|
|
24
|
+
parameters: {
|
|
25
|
+
layout: "centered",
|
|
26
|
+
docs: { source: { code: `<Command>\n <CommandInput placeholder="Type a command…" />\n <CommandList>\n <CommandEmpty>No results found.</CommandEmpty>\n <CommandGroup heading="Suggestions">\n <CommandItem>Calendar</CommandItem>\n </CommandGroup>\n </CommandList>\n</Command>`, language: "tsx" } },
|
|
27
|
+
},
|
|
28
|
+
} satisfies Meta;
|
|
29
|
+
|
|
30
|
+
export default meta;
|
|
31
|
+
|
|
32
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => (
|
|
8
|
+
<ContextMenu>
|
|
9
|
+
<ContextMenuTrigger className="flex h-32 w-64 items-center justify-center rounded-md border border-dashed text-sm">
|
|
10
|
+
Right-click here
|
|
11
|
+
</ContextMenuTrigger>
|
|
12
|
+
<ContextMenuContent className="w-52">
|
|
13
|
+
<ContextMenuItem>Back</ContextMenuItem>
|
|
14
|
+
<ContextMenuItem>Forward</ContextMenuItem>
|
|
15
|
+
<ContextMenuSeparator />
|
|
16
|
+
<ContextMenuItem>Reload</ContextMenuItem>
|
|
17
|
+
</ContextMenuContent>
|
|
18
|
+
</ContextMenu>
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
const meta = {
|
|
22
|
+
title: "Overlays/ContextMenu",
|
|
23
|
+
parameters: {
|
|
24
|
+
layout: "centered",
|
|
25
|
+
docs: { source: { code: `<ContextMenu>\n <ContextMenuTrigger>Right-click here</ContextMenuTrigger>\n <ContextMenuContent>\n <ContextMenuItem>Back</ContextMenuItem>\n </ContextMenuContent>\n</ContextMenu>`, language: "tsx" } },
|
|
26
|
+
},
|
|
27
|
+
} satisfies Meta;
|
|
28
|
+
|
|
29
|
+
export default meta;
|
|
30
|
+
|
|
31
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { DataTable } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => {
|
|
8
|
+
const columns = [
|
|
9
|
+
{ accessorKey: "invoice", header: "Invoice" },
|
|
10
|
+
{ accessorKey: "status", header: "Status" },
|
|
11
|
+
{ accessorKey: "amount", header: "Amount" },
|
|
12
|
+
] as never;
|
|
13
|
+
const data = [
|
|
14
|
+
{ invoice: "INV001", status: "Paid", amount: "$250.00" },
|
|
15
|
+
{ invoice: "INV002", status: "Pending", amount: "$150.00" },
|
|
16
|
+
{ invoice: "INV003", status: "Unpaid", amount: "$350.00" },
|
|
17
|
+
];
|
|
18
|
+
return <DataTable columns={columns} data={data} pageSize={5} />;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const meta = {
|
|
22
|
+
title: "Data Display/DataTable",
|
|
23
|
+
parameters: {
|
|
24
|
+
layout: "padded",
|
|
25
|
+
docs: { source: { code: `const columns: ColumnDef<Invoice>[] = [\n { accessorKey: "invoice", header: "Invoice" },\n { accessorKey: "amount", header: "Amount" },\n]\n<DataTable columns={columns} data={data} />`, language: "tsx" } },
|
|
26
|
+
},
|
|
27
|
+
} satisfies Meta;
|
|
28
|
+
|
|
29
|
+
export default meta;
|
|
30
|
+
|
|
31
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { DatePicker } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => {
|
|
8
|
+
const [date, setDate] = React.useState<Date | undefined>();
|
|
9
|
+
return (
|
|
10
|
+
<DatePicker
|
|
11
|
+
label="Appointment date"
|
|
12
|
+
value={date}
|
|
13
|
+
onChange={setDate}
|
|
14
|
+
helperText="Choose a weekday"
|
|
15
|
+
className="w-[280px]"
|
|
16
|
+
/>
|
|
17
|
+
);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const meta = {
|
|
21
|
+
title: "Form Inputs/DatePicker",
|
|
22
|
+
parameters: {
|
|
23
|
+
layout: "centered",
|
|
24
|
+
docs: { source: { code: `<DatePicker\n label="Appointment date"\n value={date}\n onChange={setDate}\n helperText="Choose a weekday"\n/>`, language: "tsx" } },
|
|
25
|
+
},
|
|
26
|
+
} satisfies Meta;
|
|
27
|
+
|
|
28
|
+
export default meta;
|
|
29
|
+
|
|
30
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/gen-stories.mjs — do not edit.
|
|
2
|
+
Source of truth: apps/web/src/registry/demos.tsx */
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
5
|
+
import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Input, Label } from "@kinetixui/ui";
|
|
6
|
+
|
|
7
|
+
const Demo = () => (
|
|
8
|
+
<Dialog>
|
|
9
|
+
<DialogTrigger asChild>
|
|
10
|
+
<Button variant="Outline">Edit profile</Button>
|
|
11
|
+
</DialogTrigger>
|
|
12
|
+
<DialogContent>
|
|
13
|
+
<DialogHeader>
|
|
14
|
+
<DialogTitle>Edit profile</DialogTitle>
|
|
15
|
+
<DialogDescription>Make changes to your profile here.</DialogDescription>
|
|
16
|
+
</DialogHeader>
|
|
17
|
+
<div className="grid gap-3 py-2">
|
|
18
|
+
<Label htmlFor="name">Name</Label>
|
|
19
|
+
<Input id="name" defaultValue="KinetixUI" />
|
|
20
|
+
</div>
|
|
21
|
+
<DialogFooter>
|
|
22
|
+
<Button>Save changes</Button>
|
|
23
|
+
</DialogFooter>
|
|
24
|
+
</DialogContent>
|
|
25
|
+
</Dialog>
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
const meta = {
|
|
29
|
+
title: "Overlays/Dialog",
|
|
30
|
+
parameters: {
|
|
31
|
+
layout: "centered",
|
|
32
|
+
docs: { source: { code: `<Dialog>\n <DialogTrigger asChild><Button variant="Outline">Edit profile</Button></DialogTrigger>\n <DialogContent>…</DialogContent>\n</Dialog>`, language: "tsx" } },
|
|
33
|
+
},
|
|
34
|
+
} satisfies Meta;
|
|
35
|
+
|
|
36
|
+
export default meta;
|
|
37
|
+
|
|
38
|
+
export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
|