@bearmenu/ui 0.1.1 → 0.5.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 (118) hide show
  1. package/dist/{chunk-2CUFS5LF.js → chunk-2BMJRXQX.js} +1 -1
  2. package/dist/chunk-HLQ2IRE7.js +279 -0
  3. package/dist/chunk-IQASCH2V.js +25 -0
  4. package/dist/{chunk-UXAYXRFN.js → chunk-QJ54Z7TC.js} +15 -1
  5. package/dist/{chunk-X6GATUI2.js → chunk-UISA4CIG.js} +1 -0
  6. package/dist/components/alert-dialog.js +1 -1
  7. package/dist/components/alert.d.ts +1 -1
  8. package/dist/components/badge.d.ts +1 -1
  9. package/dist/components/button.d.ts +1 -1
  10. package/dist/components/button.js +1 -1
  11. package/dist/components/calendar.d.ts +9 -7
  12. package/dist/components/calendar.js +153 -39
  13. package/dist/components/card.d.ts +2 -1
  14. package/dist/components/card.js +1 -1
  15. package/dist/components/carousel.js +1 -1
  16. package/dist/components/checkbox.js +3 -25
  17. package/dist/components/command.d.ts +13 -13
  18. package/dist/components/dropdown-menu.js +1 -1
  19. package/dist/components/empty-state.js +1 -1
  20. package/dist/components/haptic-button.js +1 -1
  21. package/dist/components/link-button.js +1 -1
  22. package/dist/components/multi-select-combobox.js +1 -1
  23. package/dist/components/multi-select-menu.d.ts +26 -0
  24. package/dist/components/multi-select-menu.js +71 -0
  25. package/dist/components/pagination.js +1 -1
  26. package/dist/components/phone-frame.d.ts +17 -0
  27. package/dist/components/phone-frame.js +41 -0
  28. package/dist/components/place-about-tab.d.ts +17 -0
  29. package/dist/components/place-about-tab.js +6 -0
  30. package/dist/components/place-card.d.ts +17 -0
  31. package/dist/components/place-card.js +145 -0
  32. package/dist/components/place-details-mobile.d.ts +18 -0
  33. package/dist/components/place-details-mobile.js +187 -0
  34. package/dist/components/place-types.d.ts +145 -0
  35. package/dist/components/place-types.js +1 -0
  36. package/dist/components/search-bar.js +1 -1
  37. package/dist/components/searchable-select.js +1 -1
  38. package/dist/components/skeleton-card.js +1 -1
  39. package/dist/components/skeleton.js +1 -1
  40. package/dist/components/sliding-panels.js +1 -1
  41. package/dist/components/sonner.js +11 -2
  42. package/dist/components/tabs.js +1 -1
  43. package/dist/components/text.d.ts +3 -3
  44. package/dist/components/toaster.js +1 -1
  45. package/package.json +28 -9
  46. package/src/components/accordion.stories.tsx +51 -0
  47. package/src/components/alert-dialog.stories.tsx +45 -0
  48. package/src/components/alert.stories.tsx +85 -0
  49. package/src/components/aspect-ratio.stories.tsx +47 -0
  50. package/src/components/avatar.stories.tsx +66 -0
  51. package/src/components/badge.stories.tsx +60 -0
  52. package/src/components/breadcrumb.stories.tsx +63 -0
  53. package/src/components/button.stories.tsx +115 -0
  54. package/src/components/button.tsx +1 -1
  55. package/src/components/calendar.stories.tsx +47 -0
  56. package/src/components/calendar.tsx +160 -40
  57. package/src/components/card.stories.tsx +72 -0
  58. package/src/components/card.tsx +13 -1
  59. package/src/components/carousel.stories.tsx +62 -0
  60. package/src/components/checkbox.stories.tsx +54 -0
  61. package/src/components/checkbox.tsx +1 -1
  62. package/src/components/collapsible.stories.tsx +34 -0
  63. package/src/components/command.stories.tsx +64 -0
  64. package/src/components/currency-input.stories.tsx +50 -0
  65. package/src/components/dialog.stories.tsx +75 -0
  66. package/src/components/drawer.stories.tsx +47 -0
  67. package/src/components/dropdown-menu.stories.tsx +64 -0
  68. package/src/components/dropdown-menu.tsx +1 -1
  69. package/src/components/empty-state.stories.tsx +67 -0
  70. package/src/components/form.stories.tsx +73 -0
  71. package/src/components/haptic-button.stories.tsx +41 -0
  72. package/src/components/input-otp.stories.tsx +42 -0
  73. package/src/components/input.stories.tsx +41 -0
  74. package/src/components/label.stories.tsx +35 -0
  75. package/src/components/markdown-renderer.stories.tsx +45 -0
  76. package/src/components/multi-select-combobox.stories.tsx +78 -0
  77. package/src/components/multi-select-menu.tsx +96 -0
  78. package/src/components/pagination.stories.tsx +48 -0
  79. package/src/components/phone-frame.stories.tsx +51 -0
  80. package/src/components/phone-frame.test.tsx +82 -0
  81. package/src/components/phone-frame.tsx +59 -0
  82. package/src/components/place-about-tab.stories.tsx +164 -0
  83. package/src/components/place-about-tab.test.tsx +325 -0
  84. package/src/components/place-about-tab.tsx +474 -0
  85. package/src/components/place-card.stories.tsx +120 -0
  86. package/src/components/place-card.test.tsx +187 -0
  87. package/src/components/place-card.tsx +187 -0
  88. package/src/components/place-details-mobile.tsx +251 -0
  89. package/src/components/place-types.ts +127 -0
  90. package/src/components/popover.stories.tsx +42 -0
  91. package/src/components/progress.stories.tsx +35 -0
  92. package/src/components/radio-group.stories.tsx +46 -0
  93. package/src/components/rating.stories.tsx +45 -0
  94. package/src/components/scroll-area.stories.tsx +48 -0
  95. package/src/components/search-bar.stories.tsx +92 -0
  96. package/src/components/searchable-select.stories.tsx +55 -0
  97. package/src/components/select.stories.tsx +92 -0
  98. package/src/components/separator.stories.tsx +33 -0
  99. package/src/components/sheet.stories.tsx +95 -0
  100. package/src/components/skeleton-card.stories.tsx +53 -0
  101. package/src/components/skeleton.stories.tsx +42 -0
  102. package/src/components/skeleton.tsx +1 -0
  103. package/src/components/slider.stories.tsx +27 -0
  104. package/src/components/sliding-panels.stories.tsx +68 -0
  105. package/src/components/sonner.tsx +17 -2
  106. package/src/components/sticky-container.stories.tsx +33 -0
  107. package/src/components/switch.stories.tsx +35 -0
  108. package/src/components/table.stories.tsx +60 -0
  109. package/src/components/tabs.stories.tsx +53 -0
  110. package/src/components/tabs.tsx +1 -1
  111. package/src/components/text.stories.tsx +82 -0
  112. package/src/components/textarea.stories.tsx +35 -0
  113. package/src/components/toast.stories.tsx +63 -0
  114. package/src/components/toggle-group.stories.tsx +60 -0
  115. package/src/components/toggle.stories.tsx +48 -0
  116. package/src/components/tooltip.stories.tsx +71 -0
  117. package/src/globals.css +21 -2
  118. package/src/test/setup.ts +9 -0
@@ -0,0 +1,85 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { Alert, AlertTitle, AlertDescription } from "./alert";
3
+ import { AlertCircle, CheckCircle, Info, AlertTriangle } from "lucide-react";
4
+
5
+ const meta = {
6
+ title: "Components/Alert",
7
+ component: Alert,
8
+ tags: ["autodocs"],
9
+ argTypes: {
10
+ variant: {
11
+ control: "select",
12
+ options: ["default", "destructive", "warning", "success"],
13
+ },
14
+ },
15
+ } satisfies Meta<typeof Alert>;
16
+
17
+ export default meta;
18
+ type Story = StoryObj<typeof meta>;
19
+
20
+ export const Default: Story = {
21
+ render: () => (
22
+ <Alert>
23
+ <Info className="h-4 w-4" />
24
+ <AlertTitle>Information</AlertTitle>
25
+ <AlertDescription>This is a default informational alert.</AlertDescription>
26
+ </Alert>
27
+ ),
28
+ };
29
+
30
+ export const Destructive: Story = {
31
+ render: () => (
32
+ <Alert variant="destructive">
33
+ <AlertCircle className="h-4 w-4" />
34
+ <AlertTitle>Error</AlertTitle>
35
+ <AlertDescription>Something went wrong. Please try again.</AlertDescription>
36
+ </Alert>
37
+ ),
38
+ };
39
+
40
+ export const Warning: Story = {
41
+ render: () => (
42
+ <Alert variant="warning">
43
+ <AlertTriangle className="h-4 w-4" />
44
+ <AlertTitle>Warning</AlertTitle>
45
+ <AlertDescription>Your session is about to expire.</AlertDescription>
46
+ </Alert>
47
+ ),
48
+ };
49
+
50
+ export const Success: Story = {
51
+ render: () => (
52
+ <Alert variant="success">
53
+ <CheckCircle className="h-4 w-4" />
54
+ <AlertTitle>Success</AlertTitle>
55
+ <AlertDescription>Your changes have been saved.</AlertDescription>
56
+ </Alert>
57
+ ),
58
+ };
59
+
60
+ export const AllVariants: Story = {
61
+ render: () => (
62
+ <div className="flex flex-col gap-4 w-[450px]">
63
+ <Alert>
64
+ <Info className="h-4 w-4" />
65
+ <AlertTitle>Default</AlertTitle>
66
+ <AlertDescription>Informational message.</AlertDescription>
67
+ </Alert>
68
+ <Alert variant="destructive">
69
+ <AlertCircle className="h-4 w-4" />
70
+ <AlertTitle>Destructive</AlertTitle>
71
+ <AlertDescription>Error message.</AlertDescription>
72
+ </Alert>
73
+ <Alert variant="warning">
74
+ <AlertTriangle className="h-4 w-4" />
75
+ <AlertTitle>Warning</AlertTitle>
76
+ <AlertDescription>Warning message.</AlertDescription>
77
+ </Alert>
78
+ <Alert variant="success">
79
+ <CheckCircle className="h-4 w-4" />
80
+ <AlertTitle>Success</AlertTitle>
81
+ <AlertDescription>Success message.</AlertDescription>
82
+ </Alert>
83
+ </div>
84
+ ),
85
+ };
@@ -0,0 +1,47 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { AspectRatio } from "./aspect-ratio";
3
+
4
+ const meta = {
5
+ title: "Components/AspectRatio",
6
+ component: AspectRatio,
7
+ tags: ["autodocs"],
8
+ } satisfies Meta<typeof AspectRatio>;
9
+
10
+ export default meta;
11
+ type Story = StoryObj<typeof meta>;
12
+
13
+ export const Default: Story = {
14
+ render: () => (
15
+ <div className="w-[450px]">
16
+ <AspectRatio ratio={16 / 9} className="bg-muted rounded-md overflow-hidden">
17
+ <div className="flex items-center justify-center h-full text-muted-foreground">
18
+ 16:9
19
+ </div>
20
+ </AspectRatio>
21
+ </div>
22
+ ),
23
+ };
24
+
25
+ export const Square: Story = {
26
+ render: () => (
27
+ <div className="w-[300px]">
28
+ <AspectRatio ratio={1} className="bg-muted rounded-md overflow-hidden">
29
+ <div className="flex items-center justify-center h-full text-muted-foreground">
30
+ 1:1
31
+ </div>
32
+ </AspectRatio>
33
+ </div>
34
+ ),
35
+ };
36
+
37
+ export const Portrait: Story = {
38
+ render: () => (
39
+ <div className="w-[200px]">
40
+ <AspectRatio ratio={3 / 4} className="bg-muted rounded-md overflow-hidden">
41
+ <div className="flex items-center justify-center h-full text-muted-foreground">
42
+ 3:4
43
+ </div>
44
+ </AspectRatio>
45
+ </div>
46
+ ),
47
+ };
@@ -0,0 +1,66 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { Avatar, AvatarFallback, AvatarImage } from "./avatar";
3
+
4
+ const meta = {
5
+ title: "Components/Avatar",
6
+ component: Avatar,
7
+ tags: ["autodocs"],
8
+ } satisfies Meta<typeof Avatar>;
9
+
10
+ export default meta;
11
+ type Story = StoryObj<typeof meta>;
12
+
13
+ export const WithImage: Story = {
14
+ render: () => (
15
+ <Avatar>
16
+ <AvatarImage src="https://github.com/shadcn.png" alt="User" />
17
+ <AvatarFallback>CN</AvatarFallback>
18
+ </Avatar>
19
+ ),
20
+ };
21
+
22
+ export const Fallback: Story = {
23
+ render: () => (
24
+ <Avatar>
25
+ <AvatarFallback>JD</AvatarFallback>
26
+ </Avatar>
27
+ ),
28
+ };
29
+
30
+ export const Sizes: Story = {
31
+ render: () => (
32
+ <div className="flex items-center gap-4">
33
+ <Avatar className="h-8 w-8">
34
+ <AvatarFallback className="text-xs">S</AvatarFallback>
35
+ </Avatar>
36
+ <Avatar>
37
+ <AvatarFallback>MD</AvatarFallback>
38
+ </Avatar>
39
+ <Avatar className="h-14 w-14">
40
+ <AvatarFallback className="text-lg">LG</AvatarFallback>
41
+ </Avatar>
42
+ <Avatar className="h-20 w-20">
43
+ <AvatarFallback className="text-xl">XL</AvatarFallback>
44
+ </Avatar>
45
+ </div>
46
+ ),
47
+ };
48
+
49
+ export const Group: Story = {
50
+ render: () => (
51
+ <div className="flex -space-x-3">
52
+ <Avatar className="border-2 border-background">
53
+ <AvatarFallback>A</AvatarFallback>
54
+ </Avatar>
55
+ <Avatar className="border-2 border-background">
56
+ <AvatarFallback>B</AvatarFallback>
57
+ </Avatar>
58
+ <Avatar className="border-2 border-background">
59
+ <AvatarFallback>C</AvatarFallback>
60
+ </Avatar>
61
+ <Avatar className="border-2 border-background">
62
+ <AvatarFallback className="text-xs">+3</AvatarFallback>
63
+ </Avatar>
64
+ </div>
65
+ ),
66
+ };
@@ -0,0 +1,60 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { Badge } from "./badge";
3
+
4
+ const meta = {
5
+ title: "Components/Badge",
6
+ component: Badge,
7
+ tags: ["autodocs"],
8
+ argTypes: {
9
+ variant: {
10
+ control: "select",
11
+ options: ["default", "secondary", "destructive", "outline", "overlay", "glass", "success", "warning"],
12
+ },
13
+ },
14
+ } satisfies Meta<typeof Badge>;
15
+
16
+ export default meta;
17
+ type Story = StoryObj<typeof meta>;
18
+
19
+ export const Default: Story = {
20
+ args: { children: "Badge" },
21
+ };
22
+
23
+ export const Secondary: Story = {
24
+ args: { children: "Secondary", variant: "secondary" },
25
+ };
26
+
27
+ export const Destructive: Story = {
28
+ args: { children: "Destructive", variant: "destructive" },
29
+ };
30
+
31
+ export const Outline: Story = {
32
+ args: { children: "Outline", variant: "outline" },
33
+ };
34
+
35
+ export const Glass: Story = {
36
+ args: { children: "Glass", variant: "glass" },
37
+ };
38
+
39
+ export const Success: Story = {
40
+ args: { children: "Success", variant: "success" },
41
+ };
42
+
43
+ export const Warning: Story = {
44
+ args: { children: "Warning", variant: "warning" },
45
+ };
46
+
47
+ export const AllVariants: Story = {
48
+ render: () => (
49
+ <div className="flex flex-wrap items-center gap-3">
50
+ <Badge variant="default">Default</Badge>
51
+ <Badge variant="secondary">Secondary</Badge>
52
+ <Badge variant="destructive">Destructive</Badge>
53
+ <Badge variant="outline">Outline</Badge>
54
+ <Badge variant="overlay">Overlay</Badge>
55
+ <Badge variant="glass">Glass</Badge>
56
+ <Badge variant="success">Success</Badge>
57
+ <Badge variant="warning">Warning</Badge>
58
+ </div>
59
+ ),
60
+ };
@@ -0,0 +1,63 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import {
3
+ Breadcrumb,
4
+ BreadcrumbEllipsis,
5
+ BreadcrumbItem,
6
+ BreadcrumbLink,
7
+ BreadcrumbList,
8
+ BreadcrumbPage,
9
+ BreadcrumbSeparator,
10
+ } from "./breadcrumb";
11
+
12
+ const meta = {
13
+ title: "Components/Breadcrumb",
14
+ component: Breadcrumb,
15
+ tags: ["autodocs"],
16
+ } satisfies Meta<typeof Breadcrumb>;
17
+
18
+ export default meta;
19
+ type Story = StoryObj<typeof meta>;
20
+
21
+ export const Default: Story = {
22
+ render: () => (
23
+ <Breadcrumb>
24
+ <BreadcrumbList>
25
+ <BreadcrumbItem>
26
+ <BreadcrumbLink href="#">Home</BreadcrumbLink>
27
+ </BreadcrumbItem>
28
+ <BreadcrumbSeparator />
29
+ <BreadcrumbItem>
30
+ <BreadcrumbLink href="#">Products</BreadcrumbLink>
31
+ </BreadcrumbItem>
32
+ <BreadcrumbSeparator />
33
+ <BreadcrumbItem>
34
+ <BreadcrumbPage>Current Page</BreadcrumbPage>
35
+ </BreadcrumbItem>
36
+ </BreadcrumbList>
37
+ </Breadcrumb>
38
+ ),
39
+ };
40
+
41
+ export const WithEllipsis: Story = {
42
+ render: () => (
43
+ <Breadcrumb>
44
+ <BreadcrumbList>
45
+ <BreadcrumbItem>
46
+ <BreadcrumbLink href="#">Home</BreadcrumbLink>
47
+ </BreadcrumbItem>
48
+ <BreadcrumbSeparator />
49
+ <BreadcrumbItem>
50
+ <BreadcrumbEllipsis />
51
+ </BreadcrumbItem>
52
+ <BreadcrumbSeparator />
53
+ <BreadcrumbItem>
54
+ <BreadcrumbLink href="#">Category</BreadcrumbLink>
55
+ </BreadcrumbItem>
56
+ <BreadcrumbSeparator />
57
+ <BreadcrumbItem>
58
+ <BreadcrumbPage>Product</BreadcrumbPage>
59
+ </BreadcrumbItem>
60
+ </BreadcrumbList>
61
+ </Breadcrumb>
62
+ ),
63
+ };
@@ -0,0 +1,115 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { Button } from "./button";
3
+ import { Heart, Mail, Plus } from "lucide-react";
4
+
5
+ const meta = {
6
+ title: "Components/Button",
7
+ component: Button,
8
+ tags: ["autodocs"],
9
+ argTypes: {
10
+ variant: {
11
+ control: "select",
12
+ options: [
13
+ "default",
14
+ "destructive",
15
+ "outline",
16
+ "secondary",
17
+ "ghost",
18
+ "link",
19
+ "glass",
20
+ "brown",
21
+ "antagonist",
22
+ ],
23
+ },
24
+ size: {
25
+ control: "select",
26
+ options: ["default", "sm", "lg", "icon"],
27
+ },
28
+ },
29
+ } satisfies Meta<typeof Button>;
30
+
31
+ export default meta;
32
+ type Story = StoryObj<typeof meta>;
33
+
34
+ export const Default: Story = {
35
+ args: { children: "Button" },
36
+ };
37
+
38
+ export const Destructive: Story = {
39
+ args: { children: "Delete", variant: "destructive" },
40
+ };
41
+
42
+ export const Outline: Story = {
43
+ args: { children: "Outline", variant: "outline" },
44
+ };
45
+
46
+ export const Secondary: Story = {
47
+ args: { children: "Secondary", variant: "secondary" },
48
+ };
49
+
50
+ export const Ghost: Story = {
51
+ args: { children: "Ghost", variant: "ghost" },
52
+ };
53
+
54
+ export const Link: Story = {
55
+ args: { children: "Link", variant: "link" },
56
+ };
57
+
58
+ export const Glass: Story = {
59
+ args: { children: "Glass", variant: "glass" },
60
+ };
61
+
62
+ export const Brown: Story = {
63
+ args: { children: "Brown", variant: "brown" },
64
+ };
65
+
66
+ export const Antagonist: Story = {
67
+ args: { children: "Antagonist", variant: "antagonist" },
68
+ };
69
+
70
+ export const Small: Story = {
71
+ args: { children: "Small", size: "sm" },
72
+ };
73
+
74
+ export const Large: Story = {
75
+ args: { children: "Large", size: "lg" },
76
+ };
77
+
78
+ export const Icon: Story = {
79
+ args: { size: "icon", children: <Plus className="h-4 w-4" /> },
80
+ };
81
+
82
+ export const WithIcon: Story = {
83
+ args: { children: <><Mail className="h-4 w-4" /> Send Email</> },
84
+ };
85
+
86
+ export const Disabled: Story = {
87
+ args: { children: "Disabled", disabled: true },
88
+ };
89
+
90
+ export const AllVariants: Story = {
91
+ render: () => (
92
+ <div className="flex flex-wrap items-center gap-4">
93
+ <Button variant="default">Default</Button>
94
+ <Button variant="destructive">Destructive</Button>
95
+ <Button variant="outline">Outline</Button>
96
+ <Button variant="secondary">Secondary</Button>
97
+ <Button variant="ghost">Ghost</Button>
98
+ <Button variant="link">Link</Button>
99
+ <Button variant="glass">Glass</Button>
100
+ <Button variant="brown">Brown</Button>
101
+ <Button variant="antagonist">Antagonist</Button>
102
+ </div>
103
+ ),
104
+ };
105
+
106
+ export const AllSizes: Story = {
107
+ render: () => (
108
+ <div className="flex items-center gap-4">
109
+ <Button size="sm">Small</Button>
110
+ <Button size="default">Default</Button>
111
+ <Button size="lg">Large</Button>
112
+ <Button size="icon"><Heart className="h-4 w-4" /></Button>
113
+ </div>
114
+ ),
115
+ };
@@ -14,7 +14,7 @@ const buttonVariants = cva(
14
14
  destructive:
15
15
  "bg-destructive text-destructive-foreground shadow-lg hover:bg-destructive/90 hover:shadow-destructive/20 backdrop-blur-sm border border-destructive/20",
16
16
  outline:
17
- "border border-border bg-card/70 backdrop-blur-md hover:bg-accent hover:text-accent-foreground hover:border-accent-foreground/20 hover:shadow-lg glass-hover",
17
+ "border border-border bg-sidebar backdrop-blur-md hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:border-sidebar-accent-foreground/20 hover:shadow-lg",
18
18
  secondary:
19
19
  "bg-secondary text-secondary-foreground shadow-lg hover:bg-secondary/90 hover:shadow-secondary/20 backdrop-blur-sm border border-secondary/20",
20
20
  ghost: "hover:bg-foreground/10 hover:text-foreground transition-colors duration-200",
@@ -0,0 +1,47 @@
1
+ import { useState } from "react";
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import { Calendar } from "./calendar";
4
+
5
+ const meta = {
6
+ title: "Components/Calendar",
7
+ component: Calendar,
8
+ tags: ["autodocs"],
9
+ } satisfies Meta<typeof Calendar>;
10
+
11
+ export default meta;
12
+ type Story = StoryObj<typeof meta>;
13
+
14
+ function CalendarDemo() {
15
+ const [date, setDate] = useState<Date | undefined>(new Date());
16
+ return (
17
+ <Calendar
18
+ mode="single"
19
+ selected={date}
20
+ onSelect={setDate}
21
+ className="rounded-md border"
22
+ />
23
+ );
24
+ }
25
+
26
+ export const Default: Story = {
27
+ render: () => <CalendarDemo />,
28
+ };
29
+
30
+ function CalendarRangeDemo() {
31
+ const [range, setRange] = useState<{ from: Date; to?: Date }>({
32
+ from: new Date(),
33
+ });
34
+ return (
35
+ <Calendar
36
+ mode="range"
37
+ selected={range}
38
+ onSelect={(r) => r && setRange(r as { from: Date; to?: Date })}
39
+ numberOfMonths={2}
40
+ className="rounded-md border"
41
+ />
42
+ );
43
+ }
44
+
45
+ export const Range: Story = {
46
+ render: () => <CalendarRangeDemo />,
47
+ };