@kinetixui/ui 0.1.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/index.js +30 -21
  2. package/package.json +12 -4
  3. package/src/components/button.tsx +19 -12
  4. package/src/components/context-menu.tsx +1 -1
  5. package/src/components/dropdown-menu.tsx +1 -1
  6. package/src/components/input-group.tsx +2 -1
  7. package/src/components/list.tsx +3 -1
  8. package/src/components/menubar.tsx +2 -2
  9. package/src/components/navigation-bar.tsx +1 -1
  10. package/src/components/select.tsx +1 -1
  11. package/src/components/toggle.tsx +1 -1
  12. package/src/components-behavior.test.tsx +74 -0
  13. package/src/components-smoke.test.tsx +47 -0
  14. package/src/stories/Accordion.stories.tsx +49 -0
  15. package/src/stories/Alert.stories.tsx +38 -0
  16. package/src/stories/AlertDialog.stories.tsx +35 -0
  17. package/src/stories/AspectRatio.stories.tsx +32 -0
  18. package/src/stories/AudioPlayer.stories.tsx +26 -0
  19. package/src/stories/Avatar.stories.tsx +23 -0
  20. package/src/stories/AvatarGroup.stories.tsx +37 -0
  21. package/src/stories/Badge.stories.tsx +35 -0
  22. package/src/stories/Breadcrumb.stories.tsx +36 -0
  23. package/src/stories/Calendar.stories.tsx +25 -0
  24. package/src/stories/Card.stories.tsx +33 -0
  25. package/src/stories/Carousel.stories.tsx +33 -0
  26. package/src/stories/Chart.stories.tsx +44 -0
  27. package/src/stories/Checkbox.stories.tsx +29 -0
  28. package/src/stories/CircularProgress.stories.tsx +42 -0
  29. package/src/stories/CodeBlock.stories.tsx +25 -0
  30. package/src/stories/Collapsible.stories.tsx +50 -0
  31. package/src/stories/Combobox.stories.tsx +32 -0
  32. package/src/stories/Command.stories.tsx +32 -0
  33. package/src/stories/ContextMenu.stories.tsx +31 -0
  34. package/src/stories/DataTable.stories.tsx +31 -0
  35. package/src/stories/DatePicker.stories.tsx +30 -0
  36. package/src/stories/Dialog.stories.tsx +38 -0
  37. package/src/stories/Drawer.stories.tsx +39 -0
  38. package/src/stories/DropdownMenu.stories.tsx +32 -0
  39. package/src/stories/Fab.stories.tsx +47 -0
  40. package/src/stories/Field.stories.tsx +35 -0
  41. package/src/stories/FileUpload.stories.tsx +36 -0
  42. package/src/stories/Footer.stories.tsx +39 -0
  43. package/src/stories/Form.stories.tsx +28 -0
  44. package/src/stories/HoverCard.stories.tsx +41 -0
  45. package/src/stories/Image.stories.tsx +35 -0
  46. package/src/stories/Inform.stories.tsx +39 -0
  47. package/src/stories/InputGroup.stories.tsx +36 -0
  48. package/src/stories/InputOTP.stories.tsx +27 -0
  49. package/src/stories/Label.stories.tsx +24 -0
  50. package/src/stories/List.stories.tsx +26 -0
  51. package/src/stories/Menubar.stories.tsx +38 -0
  52. package/src/stories/Metric.stories.tsx +32 -0
  53. package/src/stories/Modal.stories.tsx +31 -0
  54. package/src/stories/NavigationBar.stories.tsx +32 -0
  55. package/src/stories/NavigationMenu.stories.tsx +34 -0
  56. package/src/stories/NumberInput.stories.tsx +29 -0
  57. package/src/stories/Pagination.stories.tsx +30 -0
  58. package/src/stories/PasswordInput.stories.tsx +23 -0
  59. package/src/stories/Popover.stories.tsx +47 -0
  60. package/src/stories/Progress.stories.tsx +31 -0
  61. package/src/stories/Quote.stories.tsx +32 -0
  62. package/src/stories/RadioGroup.stories.tsx +45 -0
  63. package/src/stories/Rating.stories.tsx +35 -0
  64. package/src/stories/Resizable.stories.tsx +29 -0
  65. package/src/stories/ScrollArea.stories.tsx +25 -0
  66. package/src/stories/Select.stories.tsx +46 -0
  67. package/src/stories/Separator.stories.tsx +41 -0
  68. package/src/stories/Sheet.stories.tsx +31 -0
  69. package/src/stories/Sidebar.stories.tsx +25 -0
  70. package/src/stories/Skeleton.stories.tsx +27 -0
  71. package/src/stories/Slider.stories.tsx +24 -0
  72. package/src/stories/Sonner.stories.tsx +26 -0
  73. package/src/stories/Spinner.stories.tsx +33 -0
  74. package/src/stories/Stepper.stories.tsx +35 -0
  75. package/src/stories/Switch.stories.tsx +29 -0
  76. package/src/stories/TabBar.stories.tsx +35 -0
  77. package/src/stories/Table.stories.tsx +42 -0
  78. package/src/stories/TableOfContents.stories.tsx +31 -0
  79. package/src/stories/Tabs.stories.tsx +50 -0
  80. package/src/stories/Tag.stories.tsx +42 -0
  81. package/src/stories/Toggle.stories.tsx +34 -0
  82. package/src/stories/ToggleGroup.stories.tsx +37 -0
  83. package/src/stories/Tooltip.stories.tsx +42 -0
@@ -0,0 +1,34 @@
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 { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <NavigationMenu>
9
+ <NavigationMenuList>
10
+ <NavigationMenuItem>
11
+ <NavigationMenuTrigger>Getting started</NavigationMenuTrigger>
12
+ <NavigationMenuContent>
13
+ <div className="grid w-[320px] gap-2 p-4 text-sm">
14
+ <NavigationMenuLink className="rounded-md p-2 hover:bg-accent">Introduction</NavigationMenuLink>
15
+ <NavigationMenuLink className="rounded-md p-2 hover:bg-accent">Installation</NavigationMenuLink>
16
+ <NavigationMenuLink className="rounded-md p-2 hover:bg-accent">Theming</NavigationMenuLink>
17
+ </div>
18
+ </NavigationMenuContent>
19
+ </NavigationMenuItem>
20
+ </NavigationMenuList>
21
+ </NavigationMenu>
22
+ );
23
+
24
+ const meta = {
25
+ title: "Navigation/NavigationMenu",
26
+ parameters: {
27
+ layout: "padded",
28
+ docs: { source: { code: `<NavigationMenu>\n <NavigationMenuList>\n <NavigationMenuItem>\n <NavigationMenuTrigger>Getting started</NavigationMenuTrigger>\n <NavigationMenuContent>…</NavigationMenuContent>\n </NavigationMenuItem>\n </NavigationMenuList>\n</NavigationMenu>`, language: "tsx" } },
29
+ },
30
+ } satisfies Meta;
31
+
32
+ export default meta;
33
+
34
+ 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 { NumberInput } from "@kinetixui/ui";
6
+
7
+ const Demo = () => {
8
+ const [v, setV] = React.useState(2);
9
+ return <NumberInput value={v} onChange={setV} min={0} max={10} className="w-32" />;
10
+ };
11
+
12
+ const meta = {
13
+ title: "Form Inputs/NumberInput",
14
+ component: NumberInput,
15
+ args: { defaultValue: 2, min: 0, max: 10, step: 1 },
16
+ argTypes: {
17
+ min: { control: "number" }, max: { control: "number" }, step: { control: "number" },
18
+ },
19
+ parameters: {
20
+ layout: "centered",
21
+ docs: { source: { code: `<NumberInput value={qty} onChange={setQty} min={0} max={10} />`, language: "tsx" } },
22
+ },
23
+ } satisfies Meta;
24
+
25
+ export default meta;
26
+
27
+ export const Playground: StoryObj<typeof meta> = { render: (args) => <NumberInput {...args} className="w-32" /> };
28
+
29
+ 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 { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <Pagination>
9
+ <PaginationContent>
10
+ <PaginationItem><PaginationPrevious href="#" /></PaginationItem>
11
+ <PaginationItem><PaginationLink href="#">1</PaginationLink></PaginationItem>
12
+ <PaginationItem><PaginationLink href="#" isActive>2</PaginationLink></PaginationItem>
13
+ <PaginationItem><PaginationLink href="#">3</PaginationLink></PaginationItem>
14
+ <PaginationItem><PaginationEllipsis /></PaginationItem>
15
+ <PaginationItem><PaginationNext href="#" /></PaginationItem>
16
+ </PaginationContent>
17
+ </Pagination>
18
+ );
19
+
20
+ const meta = {
21
+ title: "Controls & Actions/Pagination",
22
+ parameters: {
23
+ layout: "centered",
24
+ docs: { source: { code: `<Pagination>\n <PaginationContent>\n <PaginationItem><PaginationPrevious href="#" /></PaginationItem>\n <PaginationItem><PaginationLink href="#" isActive>2</PaginationLink></PaginationItem>\n <PaginationItem><PaginationNext href="#" /></PaginationItem>\n </PaginationContent>\n</Pagination>`, language: "tsx" } },
25
+ },
26
+ } satisfies Meta;
27
+
28
+ export default meta;
29
+
30
+ 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 { PasswordInput } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <div className="w-full max-w-sm">
9
+ <PasswordInput placeholder="••••••••" defaultValue="hunter2" />
10
+ </div>
11
+ );
12
+
13
+ const meta = {
14
+ title: "Form Inputs/PasswordInput",
15
+ parameters: {
16
+ layout: "centered",
17
+ docs: { source: { code: `<PasswordInput placeholder="••••••••" />`, language: "tsx" } },
18
+ },
19
+ } satisfies Meta;
20
+
21
+ export default meta;
22
+
23
+ export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
@@ -0,0 +1,47 @@
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, Popover, PopoverContent, PopoverTrigger } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <Popover>
9
+ <PopoverTrigger asChild>
10
+ <Button variant="Outline">Open popover</Button>
11
+ </PopoverTrigger>
12
+ <PopoverContent>
13
+ <p className="text-sm font-medium">Dimensions</p>
14
+ <p className="mt-1 text-sm text-muted-foreground">Set the dimensions for the layer.</p>
15
+ </PopoverContent>
16
+ </Popover>
17
+ );
18
+
19
+ const meta = {
20
+ title: "Overlays/Popover",
21
+ component: Popover,
22
+ args: { side: "bottom", align: "center" },
23
+ argTypes: {
24
+ side: { control: "inline-radio", options: ["top", "right", "bottom", "left"] },
25
+ align: { control: "inline-radio", options: ["start", "center", "end"] },
26
+ },
27
+ parameters: {
28
+ layout: "centered",
29
+ docs: { source: { code: `<Popover>\n <PopoverTrigger asChild><Button variant="Outline">Open popover</Button></PopoverTrigger>\n <PopoverContent>…</PopoverContent>\n</Popover>`, language: "tsx" } },
30
+ },
31
+ } satisfies Meta;
32
+
33
+ export default meta;
34
+
35
+ export const Playground: StoryObj<typeof meta> = { render: (args) => (
36
+ <Popover>
37
+ <PopoverTrigger asChild>
38
+ <Button variant="Outline">Open popover</Button>
39
+ </PopoverTrigger>
40
+ <PopoverContent {...args}>
41
+ <p className="text-sm font-medium">Dimensions</p>
42
+ <p className="mt-1 text-sm text-muted-foreground">Set the dimensions for the layer.</p>
43
+ </PopoverContent>
44
+ </Popover>
45
+ ) };
46
+
47
+ 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 · controls: scripts/gen-stories.mjs CONTROLS */
3
+ import * as React from "react";
4
+ import type { Meta, StoryObj } from "@storybook/react";
5
+ import { Progress } from "@kinetixui/ui";
6
+
7
+ const Demo = () => {
8
+ const [v, setV] = React.useState(13);
9
+ React.useEffect(() => {
10
+ const t = setTimeout(() => setV(66), 600);
11
+ return () => clearTimeout(t);
12
+ }, []);
13
+ return <Progress value={v} className="w-[60%]" />;
14
+ };
15
+
16
+ const meta = {
17
+ title: "Feedback/Progress",
18
+ component: Progress,
19
+ args: { value: 66 },
20
+ argTypes: { value: { control: { type: "range", min: 0, max: 100 } } },
21
+ parameters: {
22
+ layout: "centered",
23
+ docs: { source: { code: `const [value, setValue] = React.useState(13)\n// ...\n<Progress value={value} />`, language: "tsx" } },
24
+ },
25
+ } satisfies Meta;
26
+
27
+ export default meta;
28
+
29
+ export const Playground: StoryObj<typeof meta> = { render: (args) => <Progress {...args} className="w-60" /> };
30
+
31
+ 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 { Avatar, AvatarFallback, Quote } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <Quote
9
+ className="max-w-md"
10
+ author="Amira K."
11
+ authorTitle="Product Designer"
12
+ avatar={
13
+ <Avatar>
14
+ <AvatarFallback>AK</AvatarFallback>
15
+ </Avatar>
16
+ }
17
+ >
18
+ This is exactly the token workflow our team needed.
19
+ </Quote>
20
+ );
21
+
22
+ const meta = {
23
+ title: "Data Display/Quote",
24
+ parameters: {
25
+ layout: "centered",
26
+ docs: { source: { code: `<Quote author="Amira K." authorTitle="Product Designer" avatar={<Avatar>...</Avatar>}>\n This is exactly the token workflow our team needed.\n</Quote>`, language: "tsx" } },
27
+ },
28
+ } satisfies Meta;
29
+
30
+ export default meta;
31
+
32
+ export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
@@ -0,0 +1,45 @@
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 { Label, RadioGroup, RadioGroupItem } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <RadioGroup defaultValue="comfortable">
9
+ {["default", "comfortable", "compact"].map((v) => (
10
+ <div key={v} className="flex items-center gap-2">
11
+ <RadioGroupItem value={v} id={v} />
12
+ <Label htmlFor={v} className="capitalize">{v}</Label>
13
+ </div>
14
+ ))}
15
+ </RadioGroup>
16
+ );
17
+
18
+ const meta = {
19
+ title: "Form Inputs/RadioGroup",
20
+ component: RadioGroup,
21
+ args: { defaultValue: "comfortable", disabled: false },
22
+ argTypes: {
23
+ defaultValue: { control: "inline-radio", options: ["default", "comfortable", "compact"] },
24
+ disabled: { control: "boolean" },
25
+ },
26
+ parameters: {
27
+ layout: "centered",
28
+ docs: { source: { code: `<RadioGroup defaultValue="comfortable">\n <div className="flex items-center gap-2">\n <RadioGroupItem value="default" id="r1" />\n <Label htmlFor="r1">Default</Label>\n </div>\n</RadioGroup>`, language: "tsx" } },
29
+ },
30
+ } satisfies Meta;
31
+
32
+ export default meta;
33
+
34
+ export const Playground: StoryObj<typeof meta> = { render: (args) => (
35
+ <RadioGroup {...args}>
36
+ {["default", "comfortable", "compact"].map((v) => (
37
+ <div key={v} className="flex items-center gap-2">
38
+ <RadioGroupItem value={v} id={v} />
39
+ <Label htmlFor={v} className="capitalize">{v}</Label>
40
+ </div>
41
+ ))}
42
+ </RadioGroup>
43
+ ) };
44
+
45
+ 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 { Rating } from "@kinetixui/ui";
6
+
7
+ const Demo = () => {
8
+ const [v, setV] = React.useState(3);
9
+ return (
10
+ <div className="flex flex-col gap-3">
11
+ <Rating value={v} onChange={setV} />
12
+ <Rating value={4} readOnly size="sm" />
13
+ </div>
14
+ );
15
+ };
16
+
17
+ const meta = {
18
+ title: "Form Inputs/Rating",
19
+ component: Rating,
20
+ args: { size: "md", readOnly: false, defaultValue: 3 },
21
+ argTypes: {
22
+ size: { control: "inline-radio", options: ["sm", "md", "lg"] },
23
+ readOnly: { control: "boolean" },
24
+ },
25
+ parameters: {
26
+ layout: "centered",
27
+ docs: { source: { code: `<Rating value={value} onChange={setValue} />\n<Rating value={4} readOnly size="sm" />`, language: "tsx" } },
28
+ },
29
+ } satisfies Meta;
30
+
31
+ export default meta;
32
+
33
+ export const Playground: StoryObj<typeof meta> = { render: (args) => <Rating {...args} /> };
34
+
35
+ 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 */
3
+ import * as React from "react";
4
+ import type { Meta, StoryObj } from "@storybook/react";
5
+ import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <ResizablePanelGroup direction="horizontal" className="max-w-md rounded-lg border">
9
+ <ResizablePanel defaultSize={50}>
10
+ <div className="flex h-32 items-center justify-center p-6 text-sm">One</div>
11
+ </ResizablePanel>
12
+ <ResizableHandle withHandle />
13
+ <ResizablePanel defaultSize={50}>
14
+ <div className="flex h-32 items-center justify-center p-6 text-sm">Two</div>
15
+ </ResizablePanel>
16
+ </ResizablePanelGroup>
17
+ );
18
+
19
+ const meta = {
20
+ title: "Data Display/Resizable",
21
+ parameters: {
22
+ layout: "padded",
23
+ docs: { source: { code: `<ResizablePanelGroup direction="horizontal">\n <ResizablePanel defaultSize={50}>One</ResizablePanel>\n <ResizableHandle withHandle />\n <ResizablePanel defaultSize={50}>Two</ResizablePanel>\n</ResizablePanelGroup>`, language: "tsx" } },
24
+ },
25
+ } satisfies Meta;
26
+
27
+ export default meta;
28
+
29
+ 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 { ScrollArea, Tag } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <ScrollArea className="h-40 w-56 rounded-md border p-4 text-sm">
9
+ {Array.from({ length: 20 }).map((_, i) => (
10
+ <div key={i} className="py-1">Tag {i + 1}</div>
11
+ ))}
12
+ </ScrollArea>
13
+ );
14
+
15
+ const meta = {
16
+ title: "Data Display/ScrollArea",
17
+ parameters: {
18
+ layout: "centered",
19
+ docs: { source: { code: `<ScrollArea className="h-40 w-56 rounded-md border p-4">\n {tags.map((t) => <div key={t}>{t}</div>)}\n</ScrollArea>`, language: "tsx" } },
20
+ },
21
+ } satisfies Meta;
22
+
23
+ export default meta;
24
+
25
+ export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
@@ -0,0 +1,46 @@
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 { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <Select>
9
+ <SelectTrigger className="w-[220px]">
10
+ <SelectValue placeholder="Select a fruit" />
11
+ </SelectTrigger>
12
+ <SelectContent>
13
+ <SelectItem value="apple">Apple</SelectItem>
14
+ <SelectItem value="banana">Banana</SelectItem>
15
+ <SelectItem value="blueberry">Blueberry</SelectItem>
16
+ </SelectContent>
17
+ </Select>
18
+ );
19
+
20
+ const meta = {
21
+ title: "Form Inputs/Select",
22
+ component: Select,
23
+ args: { disabled: false },
24
+ argTypes: { disabled: { control: "boolean" } },
25
+ parameters: {
26
+ layout: "centered",
27
+ docs: { source: { code: `<Select>\n <SelectTrigger><SelectValue placeholder="Select a fruit" /></SelectTrigger>\n <SelectContent>\n <SelectItem value="apple">Apple</SelectItem>\n </SelectContent>\n</Select>`, language: "tsx" } },
28
+ },
29
+ } satisfies Meta;
30
+
31
+ export default meta;
32
+
33
+ export const Playground: StoryObj<typeof meta> = { render: (args) => (
34
+ <Select {...args}>
35
+ <SelectTrigger className="w-[220px]">
36
+ <SelectValue placeholder="Select a fruit" />
37
+ </SelectTrigger>
38
+ <SelectContent>
39
+ <SelectItem value="apple">Apple</SelectItem>
40
+ <SelectItem value="banana">Banana</SelectItem>
41
+ <SelectItem value="blueberry">Blueberry</SelectItem>
42
+ </SelectContent>
43
+ </Select>
44
+ ) };
45
+
46
+ export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
@@ -0,0 +1,41 @@
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 { Separator } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <div className="text-sm">
9
+ <div className="font-medium">KinetixUI</div>
10
+ <div className="text-muted-foreground">One token architecture.</div>
11
+ <Separator className="my-3" />
12
+ <div className="flex h-5 items-center gap-3">
13
+ <span>Docs</span>
14
+ <Separator orientation="vertical" />
15
+ <span>Components</span>
16
+ <Separator orientation="vertical" />
17
+ <span>Themes</span>
18
+ </div>
19
+ </div>
20
+ );
21
+
22
+ const meta = {
23
+ title: "Foundations/Separator",
24
+ component: Separator,
25
+ args: { orientation: "horizontal" },
26
+ argTypes: { orientation: { control: "inline-radio", options: ["horizontal", "vertical"] } },
27
+ parameters: {
28
+ layout: "centered",
29
+ docs: { source: { code: `<Separator />\n<Separator orientation="vertical" />`, language: "tsx" } },
30
+ },
31
+ } satisfies Meta;
32
+
33
+ export default meta;
34
+
35
+ export const Playground: StoryObj<typeof meta> = { render: (args) => (
36
+ <div className="flex h-16 w-48 items-center justify-center">
37
+ <Separator {...args} />
38
+ </div>
39
+ ) };
40
+
41
+ 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 { Button, Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <Sheet>
9
+ <SheetTrigger asChild>
10
+ <Button variant="Outline">Open</Button>
11
+ </SheetTrigger>
12
+ <SheetContent>
13
+ <SheetHeader>
14
+ <SheetTitle>Edit profile</SheetTitle>
15
+ <SheetDescription>Make changes to your profile here.</SheetDescription>
16
+ </SheetHeader>
17
+ </SheetContent>
18
+ </Sheet>
19
+ );
20
+
21
+ const meta = {
22
+ title: "Overlays/Sheet",
23
+ parameters: {
24
+ layout: "centered",
25
+ docs: { source: { code: `<Sheet>\n <SheetTrigger asChild><Button variant="Outline">Open</Button></SheetTrigger>\n <SheetContent side="right">…</SheetContent>\n</Sheet>`, language: "tsx" } },
26
+ },
27
+ } satisfies Meta;
28
+
29
+ export default meta;
30
+
31
+ 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
+
6
+
7
+ const Demo = () => (
8
+ <div className="w-full rounded-lg border p-4 text-sm text-muted-foreground">
9
+ The <code className="text-foreground">Sidebar</code> is a full-page layout primitive
10
+ (<code className="text-foreground">SidebarProvider</code> + <code className="text-foreground">SidebarInset</code>).
11
+ See the code tab for a minimal shell; it themes from the <code className="text-foreground">--sidebar-*</code> tokens.
12
+ </div>
13
+ );
14
+
15
+ const meta = {
16
+ title: "Navigation/Sidebar",
17
+ parameters: {
18
+ layout: "padded",
19
+ docs: { source: { code: `<SidebarProvider>\n <Sidebar>\n <SidebarHeader>…</SidebarHeader>\n <SidebarContent>\n <SidebarGroup>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton isActive>Home</SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarGroup>\n </SidebarContent>\n </Sidebar>\n <SidebarInset>\n <SidebarTrigger />\n {/* page content */}\n </SidebarInset>\n</SidebarProvider>`, language: "tsx" } },
20
+ },
21
+ } satisfies Meta;
22
+
23
+ export default meta;
24
+
25
+ export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
@@ -0,0 +1,27 @@
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 { Skeleton } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <div className="flex items-center gap-3">
9
+ <Skeleton className="size-12 rounded-full" />
10
+ <div className="space-y-2">
11
+ <Skeleton className="h-4 w-[200px]" />
12
+ <Skeleton className="h-4 w-[160px]" />
13
+ </div>
14
+ </div>
15
+ );
16
+
17
+ const meta = {
18
+ title: "Foundations/Skeleton",
19
+ parameters: {
20
+ layout: "centered",
21
+ docs: { source: { code: `<Skeleton className="size-12 rounded-full" />\n<Skeleton className="h-4 w-[200px]" />`, language: "tsx" } },
22
+ },
23
+ } satisfies Meta;
24
+
25
+ export default meta;
26
+
27
+ export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
@@ -0,0 +1,24 @@
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 { Slider } from "@kinetixui/ui";
6
+
7
+ const Demo = () => <Slider defaultValue={[50]} max={100} step={1} className="w-[60%]" />;
8
+
9
+ const meta = {
10
+ title: "Form Inputs/Slider",
11
+ component: Slider,
12
+ args: { disabled: false },
13
+ argTypes: { disabled: { control: "boolean" } },
14
+ parameters: {
15
+ layout: "centered",
16
+ docs: { source: { code: `<Slider defaultValue={[50]} max={100} step={1} />`, language: "tsx" } },
17
+ },
18
+ } satisfies Meta;
19
+
20
+ export default meta;
21
+
22
+ export const Playground: StoryObj<typeof meta> = { render: (args) => <Slider {...args} defaultValue={[50]} max={100} step={1} className="w-60" /> };
23
+
24
+ export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };
@@ -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 { Button, Toaster, toast } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <>
9
+ <Toaster />
10
+ <Button variant="Outline" onClick={() => toast("Event created", { description: "Sunday, December 03 at 9:00 AM" })}>
11
+ Show toast
12
+ </Button>
13
+ </>
14
+ );
15
+
16
+ const meta = {
17
+ title: "Feedback/Sonner",
18
+ parameters: {
19
+ layout: "centered",
20
+ docs: { source: { code: `// app/layout.tsx\n<Toaster />\n\n// anywhere\ntoast("Event created", { description: "Sunday, December 03" })`, language: "tsx" } },
21
+ },
22
+ } satisfies Meta;
23
+
24
+ export default meta;
25
+
26
+ 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 · controls: scripts/gen-stories.mjs CONTROLS */
3
+ import * as React from "react";
4
+ import type { Meta, StoryObj } from "@storybook/react";
5
+ import { Spinner } from "@kinetixui/ui";
6
+
7
+ const Demo = () => (
8
+ <div className="flex items-center gap-4">
9
+ <Spinner size="sm" />
10
+ <Spinner />
11
+ <Spinner size="lg" />
12
+ </div>
13
+ );
14
+
15
+ const meta = {
16
+ title: "Foundations/Spinner",
17
+ component: Spinner,
18
+ args: { size: "md", variant: "default" },
19
+ argTypes: {
20
+ size: { control: "inline-radio", options: ["sm", "md", "lg"] },
21
+ variant: { control: "inline-radio", options: ["default", "muted", "onColor"] },
22
+ },
23
+ parameters: {
24
+ layout: "centered",
25
+ docs: { source: { code: `<Spinner size="sm" />\n<Spinner />\n<Spinner size="lg" />`, language: "tsx" } },
26
+ },
27
+ } satisfies Meta;
28
+
29
+ export default meta;
30
+
31
+ export const Playground: StoryObj<typeof meta> = { render: (args) => <Spinner {...args} /> };
32
+
33
+ export const Default: StoryObj<typeof meta> = { render: () => <Demo /> };