@squadbase/vantage 0.0.1 → 0.1.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 (187) hide show
  1. package/README.md +24 -4
  2. package/dist/{chunk-ZGDU5YLH.js → chunk-5L2MH2NG.js} +16 -7
  3. package/dist/chunk-5L2MH2NG.js.map +1 -0
  4. package/dist/chunk-7IPAXPPY.js +51 -0
  5. package/dist/chunk-7IPAXPPY.js.map +1 -0
  6. package/dist/chunk-A2UUGASH.js +12 -0
  7. package/dist/chunk-A2UUGASH.js.map +1 -0
  8. package/dist/chunk-DTDVSFRY.js +29 -0
  9. package/dist/chunk-DTDVSFRY.js.map +1 -0
  10. package/dist/chunk-WQZYXXQW.js +2249 -0
  11. package/dist/chunk-WQZYXXQW.js.map +1 -0
  12. package/dist/{chunk-73J5ZD4C.js → chunk-YLAB6UQS.js} +17 -3
  13. package/dist/chunk-YLAB6UQS.js.map +1 -0
  14. package/dist/cli.js +607 -36
  15. package/dist/cli.js.map +1 -1
  16. package/dist/client/index.d.ts +2 -1
  17. package/dist/client/index.js +3 -1
  18. package/dist/client/index.js.map +1 -1
  19. package/dist/components/index.d.ts +575 -0
  20. package/dist/components/index.js +2097 -0
  21. package/dist/components/index.js.map +1 -0
  22. package/dist/{define-page-B6y9TOfZ.d.ts → define-page-BfhrK99G.d.ts} +5 -0
  23. package/dist/index.d.ts +2 -2
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/markdown/index.d.ts +9 -0
  27. package/dist/markdown/index.js +26 -0
  28. package/dist/markdown/index.js.map +1 -0
  29. package/dist/query/index.d.ts +95 -2
  30. package/dist/query/index.js +102 -1
  31. package/dist/query/index.js.map +1 -1
  32. package/dist/router/index.d.ts +86 -1
  33. package/dist/router/index.js +71 -7
  34. package/dist/router/index.js.map +1 -1
  35. package/dist/server/node.js +6 -1
  36. package/dist/server/node.js.map +1 -1
  37. package/dist/ui/index.d.ts +316 -200
  38. package/dist/ui/index.js +566 -511
  39. package/dist/ui/index.js.map +1 -1
  40. package/dist/vite/index.js +2 -2
  41. package/docs/en/agent-skills.md +89 -0
  42. package/docs/en/api-and-server.md +84 -0
  43. package/docs/en/build-and-deploy.md +280 -0
  44. package/docs/en/cli-reference.md +311 -0
  45. package/docs/en/components.md +235 -0
  46. package/docs/en/data-fetching.md +142 -0
  47. package/docs/en/environment-variables.md +69 -0
  48. package/docs/en/getting-started.md +95 -0
  49. package/docs/en/index.md +65 -0
  50. package/docs/en/markdown/markdown-renderer.md +44 -0
  51. package/docs/en/pages-and-metadata.md +59 -0
  52. package/docs/en/parts/app-shell.md +54 -0
  53. package/docs/en/parts/dashboard-card.md +64 -0
  54. package/docs/en/parts/data-table.md +86 -0
  55. package/docs/en/parts/date-range-picker.md +41 -0
  56. package/docs/en/parts/echart.md +53 -0
  57. package/docs/en/parts/filter-bar.md +66 -0
  58. package/docs/en/parts/funnel-steps.md +33 -0
  59. package/docs/en/parts/metric-value.md +23 -0
  60. package/docs/en/parts/multi-select.md +27 -0
  61. package/docs/en/parts/page-shell.md +45 -0
  62. package/docs/en/parts/placeholder.md +38 -0
  63. package/docs/en/parts/searchable-select.md +47 -0
  64. package/docs/en/parts/section-header.md +20 -0
  65. package/docs/en/parts/segmented-control.md +25 -0
  66. package/docs/en/parts/sparkline.md +47 -0
  67. package/docs/en/parts/status-badge.md +44 -0
  68. package/docs/en/parts/trend-indicator.md +26 -0
  69. package/docs/en/routing.md +177 -0
  70. package/docs/en/ui/accordion.md +36 -0
  71. package/docs/en/ui/alert.md +31 -0
  72. package/docs/en/ui/badge.md +23 -0
  73. package/docs/en/ui/breadcrumb.md +38 -0
  74. package/docs/en/ui/button.md +39 -0
  75. package/docs/en/ui/calendar.md +28 -0
  76. package/docs/en/ui/card.md +35 -0
  77. package/docs/en/ui/checkbox.md +34 -0
  78. package/docs/en/ui/cn.md +34 -0
  79. package/docs/en/ui/collapsible.md +21 -0
  80. package/docs/en/ui/command.md +37 -0
  81. package/docs/en/ui/dialog.md +52 -0
  82. package/docs/en/ui/dropdown-menu.md +50 -0
  83. package/docs/en/ui/empty.md +22 -0
  84. package/docs/en/ui/error-state.md +50 -0
  85. package/docs/en/ui/input-group.md +30 -0
  86. package/docs/en/ui/input.md +28 -0
  87. package/docs/en/ui/label.md +19 -0
  88. package/docs/en/ui/loading.md +19 -0
  89. package/docs/en/ui/popover.md +34 -0
  90. package/docs/en/ui/progress.md +28 -0
  91. package/docs/en/ui/scroll-area.md +23 -0
  92. package/docs/en/ui/select.md +63 -0
  93. package/docs/en/ui/separator.md +15 -0
  94. package/docs/en/ui/sheet.md +28 -0
  95. package/docs/en/ui/sidebar.md +92 -0
  96. package/docs/en/ui/skeleton.md +16 -0
  97. package/docs/en/ui/slider.md +21 -0
  98. package/docs/en/ui/spinner.md +14 -0
  99. package/docs/en/ui/switch.md +19 -0
  100. package/docs/en/ui/table.md +24 -0
  101. package/docs/en/ui/tabs.md +23 -0
  102. package/docs/en/ui/textarea.md +15 -0
  103. package/docs/en/ui/toggle-group.md +26 -0
  104. package/docs/en/ui/toggle.md +19 -0
  105. package/docs/en/ui/tooltip.md +22 -0
  106. package/docs/en/ui/use-is-mobile.md +18 -0
  107. package/docs/en/ui-and-theming.md +95 -0
  108. package/docs/index.json +1346 -0
  109. package/docs/ja/agent-skills.md +87 -0
  110. package/docs/ja/api-and-server.md +84 -0
  111. package/docs/ja/build-and-deploy.md +279 -0
  112. package/docs/ja/cli-reference.md +305 -0
  113. package/docs/ja/components.md +231 -0
  114. package/docs/ja/data-fetching.md +142 -0
  115. package/docs/ja/environment-variables.md +68 -0
  116. package/docs/ja/getting-started.md +95 -0
  117. package/docs/ja/index.md +65 -0
  118. package/docs/ja/markdown/markdown-renderer.md +43 -0
  119. package/docs/ja/pages-and-metadata.md +59 -0
  120. package/docs/ja/parts/app-shell.md +54 -0
  121. package/docs/ja/parts/dashboard-card.md +64 -0
  122. package/docs/ja/parts/data-table.md +85 -0
  123. package/docs/ja/parts/date-range-picker.md +41 -0
  124. package/docs/ja/parts/echart.md +52 -0
  125. package/docs/ja/parts/filter-bar.md +64 -0
  126. package/docs/ja/parts/funnel-steps.md +33 -0
  127. package/docs/ja/parts/metric-value.md +25 -0
  128. package/docs/ja/parts/multi-select.md +27 -0
  129. package/docs/ja/parts/page-shell.md +45 -0
  130. package/docs/ja/parts/placeholder.md +37 -0
  131. package/docs/ja/parts/searchable-select.md +47 -0
  132. package/docs/ja/parts/section-header.md +20 -0
  133. package/docs/ja/parts/segmented-control.md +26 -0
  134. package/docs/ja/parts/sparkline.md +47 -0
  135. package/docs/ja/parts/status-badge.md +44 -0
  136. package/docs/ja/parts/trend-indicator.md +26 -0
  137. package/docs/ja/routing.md +175 -0
  138. package/docs/ja/ui/accordion.md +37 -0
  139. package/docs/ja/ui/alert.md +31 -0
  140. package/docs/ja/ui/badge.md +23 -0
  141. package/docs/ja/ui/breadcrumb.md +38 -0
  142. package/docs/ja/ui/button.md +39 -0
  143. package/docs/ja/ui/calendar.md +28 -0
  144. package/docs/ja/ui/card.md +35 -0
  145. package/docs/ja/ui/checkbox.md +34 -0
  146. package/docs/ja/ui/cn.md +34 -0
  147. package/docs/ja/ui/collapsible.md +21 -0
  148. package/docs/ja/ui/command.md +36 -0
  149. package/docs/ja/ui/dialog.md +51 -0
  150. package/docs/ja/ui/dropdown-menu.md +50 -0
  151. package/docs/ja/ui/empty.md +22 -0
  152. package/docs/ja/ui/error-state.md +50 -0
  153. package/docs/ja/ui/input-group.md +30 -0
  154. package/docs/ja/ui/input.md +28 -0
  155. package/docs/ja/ui/label.md +19 -0
  156. package/docs/ja/ui/loading.md +19 -0
  157. package/docs/ja/ui/popover.md +34 -0
  158. package/docs/ja/ui/progress.md +28 -0
  159. package/docs/ja/ui/scroll-area.md +24 -0
  160. package/docs/ja/ui/select.md +64 -0
  161. package/docs/ja/ui/separator.md +15 -0
  162. package/docs/ja/ui/sheet.md +28 -0
  163. package/docs/ja/ui/sidebar.md +92 -0
  164. package/docs/ja/ui/skeleton.md +16 -0
  165. package/docs/ja/ui/slider.md +21 -0
  166. package/docs/ja/ui/spinner.md +14 -0
  167. package/docs/ja/ui/switch.md +19 -0
  168. package/docs/ja/ui/table.md +24 -0
  169. package/docs/ja/ui/tabs.md +24 -0
  170. package/docs/ja/ui/textarea.md +15 -0
  171. package/docs/ja/ui/toggle-group.md +27 -0
  172. package/docs/ja/ui/toggle.md +19 -0
  173. package/docs/ja/ui/tooltip.md +22 -0
  174. package/docs/ja/ui/use-is-mobile.md +18 -0
  175. package/docs/ja/ui-and-theming.md +95 -0
  176. package/package.json +29 -4
  177. package/registry/blocks/sales-overview.tsx +43 -19
  178. package/registry/ui/data-table.tsx +702 -102
  179. package/skills/vantage-add-feature/SKILL.md +153 -0
  180. package/skills/vantage-app/SKILL.md +291 -0
  181. package/skills/vantage-pitfalls/SKILL.md +139 -0
  182. package/templates/AGENTS.md +313 -0
  183. package/theme.css +178 -40
  184. package/dist/chunk-73J5ZD4C.js.map +0 -1
  185. package/dist/chunk-ATYZ45XL.js +0 -19
  186. package/dist/chunk-ATYZ45XL.js.map +0 -1
  187. package/dist/chunk-ZGDU5YLH.js.map +0 -1
@@ -0,0 +1,2249 @@
1
+ import { cn } from './chunk-A2UUGASH.js';
2
+ import { mergeProps } from '@base-ui/react/merge-props';
3
+ import { useRender } from '@base-ui/react/use-render';
4
+ import { cva } from 'class-variance-authority';
5
+ import { Button as Button$1 } from '@base-ui/react/button';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+ import * as React12 from 'react';
8
+ import { getDefaultClassNames, DayPicker } from 'react-day-picker';
9
+ import { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon, CheckIcon, XIcon, SearchIcon, ChevronUpIcon, PanelLeftIcon } from 'lucide-react';
10
+ import { Checkbox as Checkbox$1 } from '@base-ui/react/checkbox';
11
+ import { Collapsible as Collapsible$1 } from '@base-ui/react/collapsible';
12
+ import { Dialog as Dialog$1 } from '@base-ui/react/dialog';
13
+ import { Input as Input$1 } from '@base-ui/react/input';
14
+ import { Command as Command$1 } from 'cmdk';
15
+ import { Menu } from '@base-ui/react/menu';
16
+ import { Popover as Popover$1 } from '@base-ui/react/popover';
17
+ import { Select as Select$1 } from '@base-ui/react/select';
18
+ import { Separator as Separator$1 } from '@base-ui/react/separator';
19
+ import { Tooltip as Tooltip$1 } from '@base-ui/react/tooltip';
20
+ import { Toggle as Toggle$1 } from '@base-ui/react/toggle';
21
+ import { ToggleGroup as ToggleGroup$1 } from '@base-ui/react/toggle-group';
22
+
23
+ // @squadbase/vantage — generated build. Do not edit.
24
+ var badgeVariants = cva(
25
+ "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",
26
+ {
27
+ variants: {
28
+ variant: {
29
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
30
+ secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
31
+ destructive: "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",
32
+ outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
33
+ ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
34
+ link: "text-primary underline-offset-4 hover:underline"
35
+ }
36
+ },
37
+ defaultVariants: {
38
+ variant: "default"
39
+ }
40
+ }
41
+ );
42
+ function Badge({
43
+ className,
44
+ variant = "default",
45
+ render,
46
+ ...props
47
+ }) {
48
+ return useRender({
49
+ defaultTagName: "span",
50
+ props: mergeProps(
51
+ {
52
+ className: cn(badgeVariants({ variant }), className)
53
+ },
54
+ props
55
+ ),
56
+ render,
57
+ state: {
58
+ slot: "badge",
59
+ variant
60
+ }
61
+ });
62
+ }
63
+ var buttonVariants = cva(
64
+ "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
65
+ {
66
+ variants: {
67
+ variant: {
68
+ default: "bg-primary text-primary-foreground hover:bg-primary/80",
69
+ outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
70
+ secondary: "bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
71
+ ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
72
+ destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
73
+ link: "text-primary underline-offset-4 hover:underline"
74
+ },
75
+ size: {
76
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
77
+ xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
78
+ sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
79
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
80
+ icon: "size-8",
81
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
82
+ "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
83
+ "icon-lg": "size-9"
84
+ }
85
+ },
86
+ defaultVariants: {
87
+ variant: "default",
88
+ size: "default"
89
+ }
90
+ }
91
+ );
92
+ function Button({
93
+ className,
94
+ variant = "default",
95
+ size = "default",
96
+ ...props
97
+ }) {
98
+ return /* @__PURE__ */ jsx(
99
+ Button$1,
100
+ {
101
+ "data-slot": "button",
102
+ className: cn(buttonVariants({ variant, size, className })),
103
+ ...props
104
+ }
105
+ );
106
+ }
107
+ function Calendar({
108
+ className,
109
+ classNames,
110
+ showOutsideDays = true,
111
+ captionLayout = "label",
112
+ buttonVariant = "ghost",
113
+ locale,
114
+ formatters,
115
+ components,
116
+ ...props
117
+ }) {
118
+ const defaultClassNames = getDefaultClassNames();
119
+ return /* @__PURE__ */ jsx(
120
+ DayPicker,
121
+ {
122
+ showOutsideDays,
123
+ className: cn(
124
+ "group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent",
125
+ String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
126
+ String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
127
+ className
128
+ ),
129
+ captionLayout,
130
+ locale,
131
+ formatters: {
132
+ formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: "short" }),
133
+ ...formatters
134
+ },
135
+ classNames: {
136
+ root: cn("w-fit", defaultClassNames.root),
137
+ months: cn(
138
+ "relative flex flex-col gap-4 md:flex-row",
139
+ defaultClassNames.months
140
+ ),
141
+ month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
142
+ nav: cn(
143
+ "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",
144
+ defaultClassNames.nav
145
+ ),
146
+ button_previous: cn(
147
+ buttonVariants({ variant: buttonVariant }),
148
+ "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
149
+ defaultClassNames.button_previous
150
+ ),
151
+ button_next: cn(
152
+ buttonVariants({ variant: buttonVariant }),
153
+ "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
154
+ defaultClassNames.button_next
155
+ ),
156
+ month_caption: cn(
157
+ "flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)",
158
+ defaultClassNames.month_caption
159
+ ),
160
+ dropdowns: cn(
161
+ "flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium",
162
+ defaultClassNames.dropdowns
163
+ ),
164
+ dropdown_root: cn(
165
+ "cn-calendar-dropdown-root relative rounded-(--cell-radius)",
166
+ defaultClassNames.dropdown_root
167
+ ),
168
+ dropdown: cn(
169
+ "absolute inset-0 bg-popover opacity-0",
170
+ defaultClassNames.dropdown
171
+ ),
172
+ caption_label: cn(
173
+ "font-medium select-none",
174
+ captionLayout === "label" ? "cn-calendar-caption text-sm" : "cn-calendar-caption-label flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",
175
+ defaultClassNames.caption_label
176
+ ),
177
+ month_grid: cn("w-full border-collapse", defaultClassNames.month_grid),
178
+ weekdays: cn("flex", defaultClassNames.weekdays),
179
+ weekday: cn(
180
+ "flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none",
181
+ defaultClassNames.weekday
182
+ ),
183
+ week: cn("mt-2 flex w-full", defaultClassNames.week),
184
+ week_number_header: cn(
185
+ "w-(--cell-size) select-none",
186
+ defaultClassNames.week_number_header
187
+ ),
188
+ week_number: cn(
189
+ "text-[0.8rem] text-muted-foreground select-none",
190
+ defaultClassNames.week_number
191
+ ),
192
+ day: cn(
193
+ "group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)",
194
+ props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",
195
+ defaultClassNames.day
196
+ ),
197
+ range_start: cn(
198
+ "relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted",
199
+ defaultClassNames.range_start
200
+ ),
201
+ range_middle: cn("rounded-none", defaultClassNames.range_middle),
202
+ range_end: cn(
203
+ "relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted",
204
+ defaultClassNames.range_end
205
+ ),
206
+ today: cn(
207
+ "rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none",
208
+ defaultClassNames.today
209
+ ),
210
+ outside: cn(
211
+ "text-muted-foreground aria-selected:text-muted-foreground",
212
+ defaultClassNames.outside
213
+ ),
214
+ disabled: cn(
215
+ "text-muted-foreground opacity-50",
216
+ defaultClassNames.disabled
217
+ ),
218
+ hidden: cn("invisible", defaultClassNames.hidden),
219
+ ...classNames
220
+ },
221
+ components: {
222
+ Root: ({ className: className2, rootRef, ...props2 }) => {
223
+ return /* @__PURE__ */ jsx(
224
+ "div",
225
+ {
226
+ "data-slot": "calendar",
227
+ ref: rootRef,
228
+ className: cn(className2),
229
+ ...props2
230
+ }
231
+ );
232
+ },
233
+ Chevron: ({ className: className2, orientation, ...props2 }) => {
234
+ if (orientation === "left") {
235
+ return /* @__PURE__ */ jsx(ChevronLeftIcon, { className: cn("cn-rtl-flip size-4", className2), ...props2 });
236
+ }
237
+ if (orientation === "right") {
238
+ return /* @__PURE__ */ jsx(ChevronRightIcon, { className: cn("cn-rtl-flip size-4", className2), ...props2 });
239
+ }
240
+ return /* @__PURE__ */ jsx(ChevronDownIcon, { className: cn("size-4", className2), ...props2 });
241
+ },
242
+ DayButton: ({ ...props2 }) => /* @__PURE__ */ jsx(CalendarDayButton, { locale, ...props2 }),
243
+ WeekNumber: ({ children, ...props2 }) => {
244
+ return /* @__PURE__ */ jsx("td", { ...props2, children: /* @__PURE__ */ jsx("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) });
245
+ },
246
+ ...components
247
+ },
248
+ ...props
249
+ }
250
+ );
251
+ }
252
+ function CalendarDayButton({
253
+ className,
254
+ day,
255
+ modifiers,
256
+ locale,
257
+ ...props
258
+ }) {
259
+ const defaultClassNames = getDefaultClassNames();
260
+ const ref = React12.useRef(null);
261
+ React12.useEffect(() => {
262
+ if (modifiers.focused) ref.current?.focus();
263
+ }, [modifiers.focused]);
264
+ return /* @__PURE__ */ jsx(
265
+ Button,
266
+ {
267
+ variant: "ghost",
268
+ size: "icon",
269
+ "data-day": day.date.toLocaleDateString(locale?.code),
270
+ "data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
271
+ "data-range-start": modifiers.range_start,
272
+ "data-range-end": modifiers.range_end,
273
+ "data-range-middle": modifiers.range_middle,
274
+ className: cn(
275
+ "relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70",
276
+ defaultClassNames.day,
277
+ className
278
+ ),
279
+ ...props
280
+ }
281
+ );
282
+ }
283
+ function Checkbox({ className, ...props }) {
284
+ return /* @__PURE__ */ jsx(
285
+ Checkbox$1.Root,
286
+ {
287
+ "data-slot": "checkbox",
288
+ className: cn(
289
+ "peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary",
290
+ className
291
+ ),
292
+ ...props,
293
+ children: /* @__PURE__ */ jsx(
294
+ Checkbox$1.Indicator,
295
+ {
296
+ "data-slot": "checkbox-indicator",
297
+ className: "grid place-content-center text-current transition-none [&>svg]:size-3.5",
298
+ children: /* @__PURE__ */ jsx(CheckIcon, {})
299
+ }
300
+ )
301
+ }
302
+ );
303
+ }
304
+ function Collapsible({ ...props }) {
305
+ return /* @__PURE__ */ jsx(Collapsible$1.Root, { "data-slot": "collapsible", ...props });
306
+ }
307
+ function CollapsibleTrigger({ ...props }) {
308
+ return /* @__PURE__ */ jsx(Collapsible$1.Trigger, { "data-slot": "collapsible-trigger", ...props });
309
+ }
310
+ function CollapsibleContent({ ...props }) {
311
+ return /* @__PURE__ */ jsx(Collapsible$1.Panel, { "data-slot": "collapsible-content", ...props });
312
+ }
313
+ function Dialog({ ...props }) {
314
+ return /* @__PURE__ */ jsx(Dialog$1.Root, { "data-slot": "dialog", ...props });
315
+ }
316
+ function DialogTrigger({ ...props }) {
317
+ return /* @__PURE__ */ jsx(Dialog$1.Trigger, { "data-slot": "dialog-trigger", ...props });
318
+ }
319
+ function DialogPortal({ ...props }) {
320
+ return /* @__PURE__ */ jsx(Dialog$1.Portal, { "data-slot": "dialog-portal", ...props });
321
+ }
322
+ function DialogClose({ ...props }) {
323
+ return /* @__PURE__ */ jsx(Dialog$1.Close, { "data-slot": "dialog-close", ...props });
324
+ }
325
+ function DialogOverlay({
326
+ className,
327
+ ...props
328
+ }) {
329
+ return /* @__PURE__ */ jsx(
330
+ Dialog$1.Backdrop,
331
+ {
332
+ "data-slot": "dialog-overlay",
333
+ className: cn(
334
+ "fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
335
+ className
336
+ ),
337
+ ...props
338
+ }
339
+ );
340
+ }
341
+ function DialogContent({
342
+ className,
343
+ children,
344
+ showCloseButton = true,
345
+ ...props
346
+ }) {
347
+ return /* @__PURE__ */ jsxs(DialogPortal, { children: [
348
+ /* @__PURE__ */ jsx(DialogOverlay, {}),
349
+ /* @__PURE__ */ jsxs(
350
+ Dialog$1.Popup,
351
+ {
352
+ "data-slot": "dialog-content",
353
+ className: cn(
354
+ "fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
355
+ className
356
+ ),
357
+ ...props,
358
+ children: [
359
+ children,
360
+ showCloseButton && /* @__PURE__ */ jsxs(
361
+ Dialog$1.Close,
362
+ {
363
+ "data-slot": "dialog-close",
364
+ render: /* @__PURE__ */ jsx(
365
+ Button,
366
+ {
367
+ variant: "ghost",
368
+ className: "absolute top-2 right-2",
369
+ size: "icon-sm"
370
+ }
371
+ ),
372
+ children: [
373
+ /* @__PURE__ */ jsx(XIcon, {}),
374
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
375
+ ]
376
+ }
377
+ )
378
+ ]
379
+ }
380
+ )
381
+ ] });
382
+ }
383
+ function DialogHeader({ className, ...props }) {
384
+ return /* @__PURE__ */ jsx(
385
+ "div",
386
+ {
387
+ "data-slot": "dialog-header",
388
+ className: cn("flex flex-col gap-2", className),
389
+ ...props
390
+ }
391
+ );
392
+ }
393
+ function DialogFooter({
394
+ className,
395
+ showCloseButton = false,
396
+ children,
397
+ ...props
398
+ }) {
399
+ return /* @__PURE__ */ jsxs(
400
+ "div",
401
+ {
402
+ "data-slot": "dialog-footer",
403
+ className: cn(
404
+ "-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end",
405
+ className
406
+ ),
407
+ ...props,
408
+ children: [
409
+ children,
410
+ showCloseButton && /* @__PURE__ */ jsx(Dialog$1.Close, { render: /* @__PURE__ */ jsx(Button, { variant: "outline" }), children: "Close" })
411
+ ]
412
+ }
413
+ );
414
+ }
415
+ function DialogTitle({ className, ...props }) {
416
+ return /* @__PURE__ */ jsx(
417
+ Dialog$1.Title,
418
+ {
419
+ "data-slot": "dialog-title",
420
+ className: cn(
421
+ "cn-font-heading text-base leading-none font-medium",
422
+ className
423
+ ),
424
+ ...props
425
+ }
426
+ );
427
+ }
428
+ function DialogDescription({
429
+ className,
430
+ ...props
431
+ }) {
432
+ return /* @__PURE__ */ jsx(
433
+ Dialog$1.Description,
434
+ {
435
+ "data-slot": "dialog-description",
436
+ className: cn(
437
+ "text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
438
+ className
439
+ ),
440
+ ...props
441
+ }
442
+ );
443
+ }
444
+ function Input({ className, type, ...props }) {
445
+ return /* @__PURE__ */ jsx(
446
+ Input$1,
447
+ {
448
+ type,
449
+ "data-slot": "input",
450
+ className: cn(
451
+ "h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
452
+ className
453
+ ),
454
+ ...props
455
+ }
456
+ );
457
+ }
458
+ function Textarea({ className, ...props }) {
459
+ return /* @__PURE__ */ jsx(
460
+ "textarea",
461
+ {
462
+ "data-slot": "textarea",
463
+ className: cn(
464
+ "flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
465
+ className
466
+ ),
467
+ ...props
468
+ }
469
+ );
470
+ }
471
+ function InputGroup({ className, ...props }) {
472
+ return /* @__PURE__ */ jsx(
473
+ "div",
474
+ {
475
+ "data-slot": "input-group",
476
+ role: "group",
477
+ className: cn(
478
+ "group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5",
479
+ className
480
+ ),
481
+ ...props
482
+ }
483
+ );
484
+ }
485
+ var inputGroupAddonVariants = cva(
486
+ "flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4",
487
+ {
488
+ variants: {
489
+ align: {
490
+ "inline-start": "order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]",
491
+ "inline-end": "order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]",
492
+ "block-start": "order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
493
+ "block-end": "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2"
494
+ }
495
+ },
496
+ defaultVariants: {
497
+ align: "inline-start"
498
+ }
499
+ }
500
+ );
501
+ function InputGroupAddon({
502
+ className,
503
+ align = "inline-start",
504
+ ...props
505
+ }) {
506
+ return /* @__PURE__ */ jsx(
507
+ "div",
508
+ {
509
+ role: "group",
510
+ "data-slot": "input-group-addon",
511
+ "data-align": align,
512
+ className: cn(inputGroupAddonVariants({ align }), className),
513
+ onClick: (e) => {
514
+ if (e.target.closest("button")) {
515
+ return;
516
+ }
517
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
518
+ },
519
+ ...props
520
+ }
521
+ );
522
+ }
523
+ var inputGroupButtonVariants = cva(
524
+ "flex items-center gap-2 text-sm shadow-none",
525
+ {
526
+ variants: {
527
+ size: {
528
+ xs: "h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
529
+ sm: "",
530
+ "icon-xs": "size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0",
531
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0"
532
+ }
533
+ },
534
+ defaultVariants: {
535
+ size: "xs"
536
+ }
537
+ }
538
+ );
539
+ function InputGroupButton({
540
+ className,
541
+ type = "button",
542
+ variant = "ghost",
543
+ size = "xs",
544
+ ...props
545
+ }) {
546
+ return /* @__PURE__ */ jsx(
547
+ Button,
548
+ {
549
+ type,
550
+ "data-size": size,
551
+ variant,
552
+ className: cn(inputGroupButtonVariants({ size }), className),
553
+ ...props
554
+ }
555
+ );
556
+ }
557
+ function InputGroupText({ className, ...props }) {
558
+ return /* @__PURE__ */ jsx(
559
+ "span",
560
+ {
561
+ className: cn(
562
+ "flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
563
+ className
564
+ ),
565
+ ...props
566
+ }
567
+ );
568
+ }
569
+ function InputGroupInput({
570
+ className,
571
+ ...props
572
+ }) {
573
+ return /* @__PURE__ */ jsx(
574
+ Input,
575
+ {
576
+ "data-slot": "input-group-control",
577
+ className: cn(
578
+ "flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent",
579
+ className
580
+ ),
581
+ ...props
582
+ }
583
+ );
584
+ }
585
+ function InputGroupTextarea({
586
+ className,
587
+ ...props
588
+ }) {
589
+ return /* @__PURE__ */ jsx(
590
+ Textarea,
591
+ {
592
+ "data-slot": "input-group-control",
593
+ className: cn(
594
+ "flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent",
595
+ className
596
+ ),
597
+ ...props
598
+ }
599
+ );
600
+ }
601
+ function Command({
602
+ className,
603
+ ...props
604
+ }) {
605
+ return /* @__PURE__ */ jsx(
606
+ Command$1,
607
+ {
608
+ "data-slot": "command",
609
+ className: cn(
610
+ "flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground",
611
+ className
612
+ ),
613
+ ...props
614
+ }
615
+ );
616
+ }
617
+ function CommandDialog({
618
+ title = "Command Palette",
619
+ description = "Search for a command to run...",
620
+ children,
621
+ className,
622
+ showCloseButton = false,
623
+ ...props
624
+ }) {
625
+ return /* @__PURE__ */ jsxs(Dialog, { ...props, children: [
626
+ /* @__PURE__ */ jsxs(DialogHeader, { className: "sr-only", children: [
627
+ /* @__PURE__ */ jsx(DialogTitle, { children: title }),
628
+ /* @__PURE__ */ jsx(DialogDescription, { children: description })
629
+ ] }),
630
+ /* @__PURE__ */ jsx(
631
+ DialogContent,
632
+ {
633
+ className: cn(
634
+ "top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0",
635
+ className
636
+ ),
637
+ showCloseButton,
638
+ children
639
+ }
640
+ )
641
+ ] });
642
+ }
643
+ function CommandInput({
644
+ className,
645
+ ...props
646
+ }) {
647
+ return /* @__PURE__ */ jsx("div", { "data-slot": "command-input-wrapper", className: "p-1 pb-0", children: /* @__PURE__ */ jsxs(InputGroup, { className: "h-8! rounded-lg! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!", children: [
648
+ /* @__PURE__ */ jsx(
649
+ Command$1.Input,
650
+ {
651
+ "data-slot": "command-input",
652
+ className: cn(
653
+ "w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
654
+ className
655
+ ),
656
+ ...props
657
+ }
658
+ ),
659
+ /* @__PURE__ */ jsx(InputGroupAddon, { children: /* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }) })
660
+ ] }) });
661
+ }
662
+ function CommandList({
663
+ className,
664
+ ...props
665
+ }) {
666
+ return /* @__PURE__ */ jsx(
667
+ Command$1.List,
668
+ {
669
+ "data-slot": "command-list",
670
+ className: cn(
671
+ "no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",
672
+ className
673
+ ),
674
+ ...props
675
+ }
676
+ );
677
+ }
678
+ function CommandEmpty({
679
+ className,
680
+ ...props
681
+ }) {
682
+ return /* @__PURE__ */ jsx(
683
+ Command$1.Empty,
684
+ {
685
+ "data-slot": "command-empty",
686
+ className: cn("py-6 text-center text-sm", className),
687
+ ...props
688
+ }
689
+ );
690
+ }
691
+ function CommandGroup({
692
+ className,
693
+ ...props
694
+ }) {
695
+ return /* @__PURE__ */ jsx(
696
+ Command$1.Group,
697
+ {
698
+ "data-slot": "command-group",
699
+ className: cn(
700
+ "overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground",
701
+ className
702
+ ),
703
+ ...props
704
+ }
705
+ );
706
+ }
707
+ function CommandSeparator({
708
+ className,
709
+ ...props
710
+ }) {
711
+ return /* @__PURE__ */ jsx(
712
+ Command$1.Separator,
713
+ {
714
+ "data-slot": "command-separator",
715
+ className: cn("-mx-1 h-px bg-border", className),
716
+ ...props
717
+ }
718
+ );
719
+ }
720
+ function CommandItem({
721
+ className,
722
+ children,
723
+ ...props
724
+ }) {
725
+ return /* @__PURE__ */ jsxs(
726
+ Command$1.Item,
727
+ {
728
+ "data-slot": "command-item",
729
+ className: cn(
730
+ "group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-selected:*:[svg]:text-foreground",
731
+ className
732
+ ),
733
+ ...props,
734
+ children: [
735
+ children,
736
+ /* @__PURE__ */ jsx(CheckIcon, { className: "ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" })
737
+ ]
738
+ }
739
+ );
740
+ }
741
+ function CommandShortcut({
742
+ className,
743
+ ...props
744
+ }) {
745
+ return /* @__PURE__ */ jsx(
746
+ "span",
747
+ {
748
+ "data-slot": "command-shortcut",
749
+ className: cn(
750
+ "ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground",
751
+ className
752
+ ),
753
+ ...props
754
+ }
755
+ );
756
+ }
757
+ function DropdownMenu({ ...props }) {
758
+ return /* @__PURE__ */ jsx(Menu.Root, { "data-slot": "dropdown-menu", ...props });
759
+ }
760
+ function DropdownMenuPortal({ ...props }) {
761
+ return /* @__PURE__ */ jsx(Menu.Portal, { "data-slot": "dropdown-menu-portal", ...props });
762
+ }
763
+ function DropdownMenuTrigger({ ...props }) {
764
+ return /* @__PURE__ */ jsx(Menu.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
765
+ }
766
+ function DropdownMenuContent({
767
+ align = "start",
768
+ alignOffset = 0,
769
+ side = "bottom",
770
+ sideOffset = 4,
771
+ className,
772
+ ...props
773
+ }) {
774
+ return /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(
775
+ Menu.Positioner,
776
+ {
777
+ className: "isolate z-50 outline-none",
778
+ align,
779
+ alignOffset,
780
+ side,
781
+ sideOffset,
782
+ children: /* @__PURE__ */ jsx(
783
+ Menu.Popup,
784
+ {
785
+ "data-slot": "dropdown-menu-content",
786
+ className: cn(
787
+ "cn-menu-target cn-menu-translucent z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95",
788
+ className
789
+ ),
790
+ ...props
791
+ }
792
+ )
793
+ }
794
+ ) });
795
+ }
796
+ function DropdownMenuGroup({ ...props }) {
797
+ return /* @__PURE__ */ jsx(Menu.Group, { "data-slot": "dropdown-menu-group", ...props });
798
+ }
799
+ function DropdownMenuLabel({
800
+ className,
801
+ inset,
802
+ ...props
803
+ }) {
804
+ return /* @__PURE__ */ jsx(
805
+ Menu.GroupLabel,
806
+ {
807
+ "data-slot": "dropdown-menu-label",
808
+ "data-inset": inset,
809
+ className: cn(
810
+ "px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7",
811
+ className
812
+ ),
813
+ ...props
814
+ }
815
+ );
816
+ }
817
+ function DropdownMenuItem({
818
+ className,
819
+ inset,
820
+ variant = "default",
821
+ ...props
822
+ }) {
823
+ return /* @__PURE__ */ jsx(
824
+ Menu.Item,
825
+ {
826
+ "data-slot": "dropdown-menu-item",
827
+ "data-inset": inset,
828
+ "data-variant": variant,
829
+ className: cn(
830
+ "group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
831
+ className
832
+ ),
833
+ ...props
834
+ }
835
+ );
836
+ }
837
+ function DropdownMenuSub({ ...props }) {
838
+ return /* @__PURE__ */ jsx(Menu.SubmenuRoot, { "data-slot": "dropdown-menu-sub", ...props });
839
+ }
840
+ function DropdownMenuSubTrigger({
841
+ className,
842
+ inset,
843
+ children,
844
+ ...props
845
+ }) {
846
+ return /* @__PURE__ */ jsxs(
847
+ Menu.SubmenuTrigger,
848
+ {
849
+ "data-slot": "dropdown-menu-sub-trigger",
850
+ "data-inset": inset,
851
+ className: cn(
852
+ "flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
853
+ className
854
+ ),
855
+ ...props,
856
+ children: [
857
+ children,
858
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
859
+ ]
860
+ }
861
+ );
862
+ }
863
+ function DropdownMenuSubContent({
864
+ align = "start",
865
+ alignOffset = -3,
866
+ side = "right",
867
+ sideOffset = 0,
868
+ className,
869
+ ...props
870
+ }) {
871
+ return /* @__PURE__ */ jsx(
872
+ DropdownMenuContent,
873
+ {
874
+ "data-slot": "dropdown-menu-sub-content",
875
+ className: cn(
876
+ "cn-menu-target cn-menu-translucent w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
877
+ className
878
+ ),
879
+ align,
880
+ alignOffset,
881
+ side,
882
+ sideOffset,
883
+ ...props
884
+ }
885
+ );
886
+ }
887
+ function DropdownMenuCheckboxItem({
888
+ className,
889
+ children,
890
+ checked,
891
+ inset,
892
+ ...props
893
+ }) {
894
+ return /* @__PURE__ */ jsxs(
895
+ Menu.CheckboxItem,
896
+ {
897
+ "data-slot": "dropdown-menu-checkbox-item",
898
+ "data-inset": inset,
899
+ className: cn(
900
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
901
+ className
902
+ ),
903
+ checked,
904
+ ...props,
905
+ children: [
906
+ /* @__PURE__ */ jsx(
907
+ "span",
908
+ {
909
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
910
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
911
+ children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
912
+ }
913
+ ),
914
+ children
915
+ ]
916
+ }
917
+ );
918
+ }
919
+ function DropdownMenuRadioGroup({ ...props }) {
920
+ return /* @__PURE__ */ jsx(
921
+ Menu.RadioGroup,
922
+ {
923
+ "data-slot": "dropdown-menu-radio-group",
924
+ ...props
925
+ }
926
+ );
927
+ }
928
+ function DropdownMenuRadioItem({
929
+ className,
930
+ children,
931
+ inset,
932
+ ...props
933
+ }) {
934
+ return /* @__PURE__ */ jsxs(
935
+ Menu.RadioItem,
936
+ {
937
+ "data-slot": "dropdown-menu-radio-item",
938
+ "data-inset": inset,
939
+ className: cn(
940
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
941
+ className
942
+ ),
943
+ ...props,
944
+ children: [
945
+ /* @__PURE__ */ jsx(
946
+ "span",
947
+ {
948
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
949
+ "data-slot": "dropdown-menu-radio-item-indicator",
950
+ children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
951
+ }
952
+ ),
953
+ children
954
+ ]
955
+ }
956
+ );
957
+ }
958
+ function DropdownMenuSeparator({
959
+ className,
960
+ ...props
961
+ }) {
962
+ return /* @__PURE__ */ jsx(
963
+ Menu.Separator,
964
+ {
965
+ "data-slot": "dropdown-menu-separator",
966
+ className: cn("-mx-1 my-1 h-px bg-border", className),
967
+ ...props
968
+ }
969
+ );
970
+ }
971
+ function DropdownMenuShortcut({
972
+ className,
973
+ ...props
974
+ }) {
975
+ return /* @__PURE__ */ jsx(
976
+ "span",
977
+ {
978
+ "data-slot": "dropdown-menu-shortcut",
979
+ className: cn(
980
+ "ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground",
981
+ className
982
+ ),
983
+ ...props
984
+ }
985
+ );
986
+ }
987
+ function Popover({ ...props }) {
988
+ return /* @__PURE__ */ jsx(Popover$1.Root, { "data-slot": "popover", ...props });
989
+ }
990
+ function PopoverTrigger({ ...props }) {
991
+ return /* @__PURE__ */ jsx(Popover$1.Trigger, { "data-slot": "popover-trigger", ...props });
992
+ }
993
+ function PopoverContent({
994
+ className,
995
+ align = "center",
996
+ alignOffset = 0,
997
+ side = "bottom",
998
+ sideOffset = 4,
999
+ ...props
1000
+ }) {
1001
+ return /* @__PURE__ */ jsx(Popover$1.Portal, { children: /* @__PURE__ */ jsx(
1002
+ Popover$1.Positioner,
1003
+ {
1004
+ align,
1005
+ alignOffset,
1006
+ side,
1007
+ sideOffset,
1008
+ className: "isolate z-50",
1009
+ children: /* @__PURE__ */ jsx(
1010
+ Popover$1.Popup,
1011
+ {
1012
+ "data-slot": "popover-content",
1013
+ className: cn(
1014
+ "z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
1015
+ className
1016
+ ),
1017
+ ...props
1018
+ }
1019
+ )
1020
+ }
1021
+ ) });
1022
+ }
1023
+ function PopoverHeader({ className, ...props }) {
1024
+ return /* @__PURE__ */ jsx(
1025
+ "div",
1026
+ {
1027
+ "data-slot": "popover-header",
1028
+ className: cn("flex flex-col gap-0.5 text-sm", className),
1029
+ ...props
1030
+ }
1031
+ );
1032
+ }
1033
+ function PopoverTitle({ className, ...props }) {
1034
+ return /* @__PURE__ */ jsx(
1035
+ Popover$1.Title,
1036
+ {
1037
+ "data-slot": "popover-title",
1038
+ className: cn("font-medium", className),
1039
+ ...props
1040
+ }
1041
+ );
1042
+ }
1043
+ function PopoverDescription({
1044
+ className,
1045
+ ...props
1046
+ }) {
1047
+ return /* @__PURE__ */ jsx(
1048
+ Popover$1.Description,
1049
+ {
1050
+ "data-slot": "popover-description",
1051
+ className: cn("text-muted-foreground", className),
1052
+ ...props
1053
+ }
1054
+ );
1055
+ }
1056
+ var Select = Select$1.Root;
1057
+ function SelectGroup({ className, ...props }) {
1058
+ return /* @__PURE__ */ jsx(
1059
+ Select$1.Group,
1060
+ {
1061
+ "data-slot": "select-group",
1062
+ className: cn("scroll-my-1 p-1", className),
1063
+ ...props
1064
+ }
1065
+ );
1066
+ }
1067
+ function SelectValue({ className, ...props }) {
1068
+ return /* @__PURE__ */ jsx(
1069
+ Select$1.Value,
1070
+ {
1071
+ "data-slot": "select-value",
1072
+ className: cn("flex flex-1 text-left", className),
1073
+ ...props
1074
+ }
1075
+ );
1076
+ }
1077
+ function SelectTrigger({
1078
+ className,
1079
+ size = "default",
1080
+ children,
1081
+ ...props
1082
+ }) {
1083
+ return /* @__PURE__ */ jsxs(
1084
+ Select$1.Trigger,
1085
+ {
1086
+ "data-slot": "select-trigger",
1087
+ "data-size": size,
1088
+ className: cn(
1089
+ "flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1090
+ className
1091
+ ),
1092
+ ...props,
1093
+ children: [
1094
+ children,
1095
+ /* @__PURE__ */ jsx(
1096
+ Select$1.Icon,
1097
+ {
1098
+ render: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" })
1099
+ }
1100
+ )
1101
+ ]
1102
+ }
1103
+ );
1104
+ }
1105
+ function SelectContent({
1106
+ className,
1107
+ children,
1108
+ side = "bottom",
1109
+ sideOffset = 4,
1110
+ align = "center",
1111
+ alignOffset = 0,
1112
+ alignItemWithTrigger = true,
1113
+ ...props
1114
+ }) {
1115
+ return /* @__PURE__ */ jsx(Select$1.Portal, { children: /* @__PURE__ */ jsx(
1116
+ Select$1.Positioner,
1117
+ {
1118
+ side,
1119
+ sideOffset,
1120
+ align,
1121
+ alignOffset,
1122
+ alignItemWithTrigger,
1123
+ className: "isolate z-50",
1124
+ children: /* @__PURE__ */ jsxs(
1125
+ Select$1.Popup,
1126
+ {
1127
+ "data-slot": "select-content",
1128
+ "data-align-trigger": alignItemWithTrigger,
1129
+ className: cn(
1130
+ "cn-menu-target cn-menu-translucent relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
1131
+ className
1132
+ ),
1133
+ ...props,
1134
+ children: [
1135
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
1136
+ /* @__PURE__ */ jsx(Select$1.List, { children }),
1137
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
1138
+ ]
1139
+ }
1140
+ )
1141
+ }
1142
+ ) });
1143
+ }
1144
+ function SelectLabel({
1145
+ className,
1146
+ ...props
1147
+ }) {
1148
+ return /* @__PURE__ */ jsx(
1149
+ Select$1.GroupLabel,
1150
+ {
1151
+ "data-slot": "select-label",
1152
+ className: cn("px-1.5 py-1 text-xs text-muted-foreground", className),
1153
+ ...props
1154
+ }
1155
+ );
1156
+ }
1157
+ function SelectItem({
1158
+ className,
1159
+ children,
1160
+ ...props
1161
+ }) {
1162
+ return /* @__PURE__ */ jsxs(
1163
+ Select$1.Item,
1164
+ {
1165
+ "data-slot": "select-item",
1166
+ className: cn(
1167
+ "relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
1168
+ className
1169
+ ),
1170
+ ...props,
1171
+ children: [
1172
+ /* @__PURE__ */ jsx(Select$1.ItemText, { className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap", children }),
1173
+ /* @__PURE__ */ jsx(
1174
+ Select$1.ItemIndicator,
1175
+ {
1176
+ render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
1177
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
1178
+ }
1179
+ )
1180
+ ]
1181
+ }
1182
+ );
1183
+ }
1184
+ function SelectSeparator({
1185
+ className,
1186
+ ...props
1187
+ }) {
1188
+ return /* @__PURE__ */ jsx(
1189
+ Select$1.Separator,
1190
+ {
1191
+ "data-slot": "select-separator",
1192
+ className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
1193
+ ...props
1194
+ }
1195
+ );
1196
+ }
1197
+ function SelectScrollUpButton({
1198
+ className,
1199
+ ...props
1200
+ }) {
1201
+ return /* @__PURE__ */ jsx(
1202
+ Select$1.ScrollUpArrow,
1203
+ {
1204
+ "data-slot": "select-scroll-up-button",
1205
+ className: cn(
1206
+ "top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
1207
+ className
1208
+ ),
1209
+ ...props,
1210
+ children: /* @__PURE__ */ jsx(ChevronUpIcon, {})
1211
+ }
1212
+ );
1213
+ }
1214
+ function SelectScrollDownButton({
1215
+ className,
1216
+ ...props
1217
+ }) {
1218
+ return /* @__PURE__ */ jsx(
1219
+ Select$1.ScrollDownArrow,
1220
+ {
1221
+ "data-slot": "select-scroll-down-button",
1222
+ className: cn(
1223
+ "bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
1224
+ className
1225
+ ),
1226
+ ...props,
1227
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
1228
+ }
1229
+ );
1230
+ }
1231
+ function Separator({
1232
+ className,
1233
+ orientation = "horizontal",
1234
+ ...props
1235
+ }) {
1236
+ return /* @__PURE__ */ jsx(
1237
+ Separator$1,
1238
+ {
1239
+ "data-slot": "separator",
1240
+ orientation,
1241
+ className: cn(
1242
+ "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
1243
+ className
1244
+ ),
1245
+ ...props
1246
+ }
1247
+ );
1248
+ }
1249
+ function Sheet({ ...props }) {
1250
+ return /* @__PURE__ */ jsx(Dialog$1.Root, { "data-slot": "sheet", ...props });
1251
+ }
1252
+ function SheetTrigger({ ...props }) {
1253
+ return /* @__PURE__ */ jsx(Dialog$1.Trigger, { "data-slot": "sheet-trigger", ...props });
1254
+ }
1255
+ function SheetClose({ ...props }) {
1256
+ return /* @__PURE__ */ jsx(Dialog$1.Close, { "data-slot": "sheet-close", ...props });
1257
+ }
1258
+ function SheetPortal({ ...props }) {
1259
+ return /* @__PURE__ */ jsx(Dialog$1.Portal, { "data-slot": "sheet-portal", ...props });
1260
+ }
1261
+ function SheetOverlay({ className, ...props }) {
1262
+ return /* @__PURE__ */ jsx(
1263
+ Dialog$1.Backdrop,
1264
+ {
1265
+ "data-slot": "sheet-overlay",
1266
+ className: cn(
1267
+ "fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",
1268
+ className
1269
+ ),
1270
+ ...props
1271
+ }
1272
+ );
1273
+ }
1274
+ function SheetContent({
1275
+ className,
1276
+ children,
1277
+ side = "right",
1278
+ showCloseButton = true,
1279
+ ...props
1280
+ }) {
1281
+ return /* @__PURE__ */ jsxs(SheetPortal, { children: [
1282
+ /* @__PURE__ */ jsx(SheetOverlay, {}),
1283
+ /* @__PURE__ */ jsxs(
1284
+ Dialog$1.Popup,
1285
+ {
1286
+ "data-slot": "sheet-content",
1287
+ "data-side": side,
1288
+ className: cn(
1289
+ "fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-ending-style:translate-y-[2.5rem] data-[side=bottom]:data-starting-style:translate-y-[2.5rem] data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-ending-style:translate-x-[-2.5rem] data-[side=left]:data-starting-style:translate-x-[-2.5rem] data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-ending-style:translate-x-[2.5rem] data-[side=right]:data-starting-style:translate-x-[2.5rem] data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-ending-style:translate-y-[-2.5rem] data-[side=top]:data-starting-style:translate-y-[-2.5rem] data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",
1290
+ className
1291
+ ),
1292
+ ...props,
1293
+ children: [
1294
+ children,
1295
+ showCloseButton && /* @__PURE__ */ jsxs(
1296
+ Dialog$1.Close,
1297
+ {
1298
+ "data-slot": "sheet-close",
1299
+ render: /* @__PURE__ */ jsx(
1300
+ Button,
1301
+ {
1302
+ variant: "ghost",
1303
+ className: "absolute top-3 right-3",
1304
+ size: "icon-sm"
1305
+ }
1306
+ ),
1307
+ children: [
1308
+ /* @__PURE__ */ jsx(XIcon, {}),
1309
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
1310
+ ]
1311
+ }
1312
+ )
1313
+ ]
1314
+ }
1315
+ )
1316
+ ] });
1317
+ }
1318
+ function SheetHeader({ className, ...props }) {
1319
+ return /* @__PURE__ */ jsx(
1320
+ "div",
1321
+ {
1322
+ "data-slot": "sheet-header",
1323
+ className: cn("flex flex-col gap-0.5 p-4", className),
1324
+ ...props
1325
+ }
1326
+ );
1327
+ }
1328
+ function SheetFooter({ className, ...props }) {
1329
+ return /* @__PURE__ */ jsx(
1330
+ "div",
1331
+ {
1332
+ "data-slot": "sheet-footer",
1333
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
1334
+ ...props
1335
+ }
1336
+ );
1337
+ }
1338
+ function SheetTitle({ className, ...props }) {
1339
+ return /* @__PURE__ */ jsx(
1340
+ Dialog$1.Title,
1341
+ {
1342
+ "data-slot": "sheet-title",
1343
+ className: cn(
1344
+ "cn-font-heading text-base font-medium text-foreground",
1345
+ className
1346
+ ),
1347
+ ...props
1348
+ }
1349
+ );
1350
+ }
1351
+ function SheetDescription({
1352
+ className,
1353
+ ...props
1354
+ }) {
1355
+ return /* @__PURE__ */ jsx(
1356
+ Dialog$1.Description,
1357
+ {
1358
+ "data-slot": "sheet-description",
1359
+ className: cn("text-sm text-muted-foreground", className),
1360
+ ...props
1361
+ }
1362
+ );
1363
+ }
1364
+ var MOBILE_BREAKPOINT = 768;
1365
+ function useIsMobile() {
1366
+ const [isMobile, setIsMobile] = React12.useState(void 0);
1367
+ React12.useEffect(() => {
1368
+ const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
1369
+ const onChange = () => {
1370
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
1371
+ };
1372
+ mql.addEventListener("change", onChange);
1373
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
1374
+ return () => mql.removeEventListener("change", onChange);
1375
+ }, []);
1376
+ return !!isMobile;
1377
+ }
1378
+ function Skeleton({ className, ...props }) {
1379
+ return /* @__PURE__ */ jsx(
1380
+ "div",
1381
+ {
1382
+ "data-slot": "skeleton",
1383
+ className: cn("animate-pulse rounded-md bg-muted", className),
1384
+ ...props
1385
+ }
1386
+ );
1387
+ }
1388
+ function TooltipProvider({
1389
+ delay = 0,
1390
+ ...props
1391
+ }) {
1392
+ return /* @__PURE__ */ jsx(
1393
+ Tooltip$1.Provider,
1394
+ {
1395
+ "data-slot": "tooltip-provider",
1396
+ delay,
1397
+ ...props
1398
+ }
1399
+ );
1400
+ }
1401
+ function Tooltip({ ...props }) {
1402
+ return /* @__PURE__ */ jsx(Tooltip$1.Root, { "data-slot": "tooltip", ...props });
1403
+ }
1404
+ function TooltipTrigger({ ...props }) {
1405
+ return /* @__PURE__ */ jsx(Tooltip$1.Trigger, { "data-slot": "tooltip-trigger", ...props });
1406
+ }
1407
+ function TooltipContent({
1408
+ className,
1409
+ side = "top",
1410
+ sideOffset = 4,
1411
+ align = "center",
1412
+ alignOffset = 0,
1413
+ children,
1414
+ ...props
1415
+ }) {
1416
+ return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(
1417
+ Tooltip$1.Positioner,
1418
+ {
1419
+ align,
1420
+ alignOffset,
1421
+ side,
1422
+ sideOffset,
1423
+ className: "isolate z-50",
1424
+ children: /* @__PURE__ */ jsxs(
1425
+ Tooltip$1.Popup,
1426
+ {
1427
+ "data-slot": "tooltip-content",
1428
+ className: cn(
1429
+ "z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
1430
+ className
1431
+ ),
1432
+ ...props,
1433
+ children: [
1434
+ children,
1435
+ /* @__PURE__ */ jsx(Tooltip$1.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })
1436
+ ]
1437
+ }
1438
+ )
1439
+ }
1440
+ ) });
1441
+ }
1442
+ var SIDEBAR_COOKIE_NAME = "sidebar_state";
1443
+ var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
1444
+ var SIDEBAR_WIDTH = "16rem";
1445
+ var SIDEBAR_WIDTH_MOBILE = "18rem";
1446
+ var SIDEBAR_WIDTH_ICON = "3rem";
1447
+ var SIDEBAR_KEYBOARD_SHORTCUT = "b";
1448
+ var SidebarContext = React12.createContext(null);
1449
+ function useSidebar() {
1450
+ const context = React12.useContext(SidebarContext);
1451
+ if (!context) {
1452
+ throw new Error("useSidebar must be used within a SidebarProvider.");
1453
+ }
1454
+ return context;
1455
+ }
1456
+ function SidebarProvider({
1457
+ defaultOpen = true,
1458
+ open: openProp,
1459
+ onOpenChange: setOpenProp,
1460
+ className,
1461
+ style,
1462
+ children,
1463
+ ...props
1464
+ }) {
1465
+ const isMobile = useIsMobile();
1466
+ const [openMobile, setOpenMobile] = React12.useState(false);
1467
+ const [_open, _setOpen] = React12.useState(defaultOpen);
1468
+ const open = openProp ?? _open;
1469
+ const setOpen = React12.useCallback(
1470
+ (value) => {
1471
+ const openState = typeof value === "function" ? value(open) : value;
1472
+ if (setOpenProp) {
1473
+ setOpenProp(openState);
1474
+ } else {
1475
+ _setOpen(openState);
1476
+ }
1477
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
1478
+ },
1479
+ [setOpenProp, open]
1480
+ );
1481
+ const toggleSidebar = React12.useCallback(() => {
1482
+ return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
1483
+ }, [isMobile, setOpen, setOpenMobile]);
1484
+ React12.useEffect(() => {
1485
+ const handleKeyDown = (event) => {
1486
+ if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
1487
+ event.preventDefault();
1488
+ toggleSidebar();
1489
+ }
1490
+ };
1491
+ window.addEventListener("keydown", handleKeyDown);
1492
+ return () => window.removeEventListener("keydown", handleKeyDown);
1493
+ }, [toggleSidebar]);
1494
+ const state = open ? "expanded" : "collapsed";
1495
+ const contextValue = React12.useMemo(
1496
+ () => ({
1497
+ state,
1498
+ open,
1499
+ setOpen,
1500
+ isMobile,
1501
+ openMobile,
1502
+ setOpenMobile,
1503
+ toggleSidebar
1504
+ }),
1505
+ [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
1506
+ );
1507
+ return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
1508
+ "div",
1509
+ {
1510
+ "data-slot": "sidebar-wrapper",
1511
+ style: {
1512
+ "--sidebar-width": SIDEBAR_WIDTH,
1513
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
1514
+ ...style
1515
+ },
1516
+ className: cn(
1517
+ "group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",
1518
+ className
1519
+ ),
1520
+ ...props,
1521
+ children
1522
+ }
1523
+ ) });
1524
+ }
1525
+ function Sidebar({
1526
+ side = "left",
1527
+ variant = "sidebar",
1528
+ collapsible = "offcanvas",
1529
+ className,
1530
+ children,
1531
+ dir,
1532
+ ...props
1533
+ }) {
1534
+ const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
1535
+ if (collapsible === "none") {
1536
+ return /* @__PURE__ */ jsx(
1537
+ "div",
1538
+ {
1539
+ "data-slot": "sidebar",
1540
+ className: cn(
1541
+ "flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",
1542
+ className
1543
+ ),
1544
+ ...props,
1545
+ children
1546
+ }
1547
+ );
1548
+ }
1549
+ if (isMobile) {
1550
+ return /* @__PURE__ */ jsx(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxs(
1551
+ SheetContent,
1552
+ {
1553
+ dir,
1554
+ "data-sidebar": "sidebar",
1555
+ "data-slot": "sidebar",
1556
+ "data-mobile": "true",
1557
+ className: "w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",
1558
+ style: {
1559
+ "--sidebar-width": SIDEBAR_WIDTH_MOBILE
1560
+ },
1561
+ side,
1562
+ children: [
1563
+ /* @__PURE__ */ jsxs(SheetHeader, { className: "sr-only", children: [
1564
+ /* @__PURE__ */ jsx(SheetTitle, { children: "Sidebar" }),
1565
+ /* @__PURE__ */ jsx(SheetDescription, { children: "Displays the mobile sidebar." })
1566
+ ] }),
1567
+ /* @__PURE__ */ jsx("div", { className: "flex h-full w-full flex-col", children })
1568
+ ]
1569
+ }
1570
+ ) });
1571
+ }
1572
+ return /* @__PURE__ */ jsxs(
1573
+ "div",
1574
+ {
1575
+ className: "group peer hidden text-sidebar-foreground md:block",
1576
+ "data-state": state,
1577
+ "data-collapsible": state === "collapsed" ? collapsible : "",
1578
+ "data-variant": variant,
1579
+ "data-side": side,
1580
+ "data-slot": "sidebar",
1581
+ children: [
1582
+ /* @__PURE__ */ jsx(
1583
+ "div",
1584
+ {
1585
+ "data-slot": "sidebar-gap",
1586
+ className: cn(
1587
+ "relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear",
1588
+ "group-data-[collapsible=offcanvas]:w-0",
1589
+ "group-data-[side=right]:rotate-180",
1590
+ variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
1591
+ )
1592
+ }
1593
+ ),
1594
+ /* @__PURE__ */ jsx(
1595
+ "div",
1596
+ {
1597
+ "data-slot": "sidebar-container",
1598
+ "data-side": side,
1599
+ className: cn(
1600
+ "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex",
1601
+ // Adjust the padding for floating and inset variants.
1602
+ variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",
1603
+ className
1604
+ ),
1605
+ ...props,
1606
+ children: /* @__PURE__ */ jsx(
1607
+ "div",
1608
+ {
1609
+ "data-sidebar": "sidebar",
1610
+ "data-slot": "sidebar-inner",
1611
+ className: "flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border",
1612
+ children
1613
+ }
1614
+ )
1615
+ }
1616
+ )
1617
+ ]
1618
+ }
1619
+ );
1620
+ }
1621
+ function SidebarTrigger({
1622
+ className,
1623
+ onClick,
1624
+ ...props
1625
+ }) {
1626
+ const { toggleSidebar } = useSidebar();
1627
+ return /* @__PURE__ */ jsxs(
1628
+ Button,
1629
+ {
1630
+ "data-sidebar": "trigger",
1631
+ "data-slot": "sidebar-trigger",
1632
+ variant: "ghost",
1633
+ size: "icon-sm",
1634
+ className: cn(className),
1635
+ onClick: (event) => {
1636
+ onClick?.(event);
1637
+ toggleSidebar();
1638
+ },
1639
+ ...props,
1640
+ children: [
1641
+ /* @__PURE__ */ jsx(PanelLeftIcon, { className: "cn-rtl-flip" }),
1642
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Toggle Sidebar" })
1643
+ ]
1644
+ }
1645
+ );
1646
+ }
1647
+ function SidebarRail({ className, ...props }) {
1648
+ const { toggleSidebar } = useSidebar();
1649
+ return /* @__PURE__ */ jsx(
1650
+ "button",
1651
+ {
1652
+ "data-sidebar": "rail",
1653
+ "data-slot": "sidebar-rail",
1654
+ "aria-label": "Toggle Sidebar",
1655
+ tabIndex: -1,
1656
+ onClick: toggleSidebar,
1657
+ title: "Toggle Sidebar",
1658
+ className: cn(
1659
+ "absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2",
1660
+ "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
1661
+ "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
1662
+ "group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar",
1663
+ "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
1664
+ "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
1665
+ className
1666
+ ),
1667
+ ...props
1668
+ }
1669
+ );
1670
+ }
1671
+ function SidebarInset({ className, ...props }) {
1672
+ return /* @__PURE__ */ jsx(
1673
+ "main",
1674
+ {
1675
+ "data-slot": "sidebar-inset",
1676
+ className: cn(
1677
+ "relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",
1678
+ className
1679
+ ),
1680
+ ...props
1681
+ }
1682
+ );
1683
+ }
1684
+ function SidebarInput({
1685
+ className,
1686
+ ...props
1687
+ }) {
1688
+ return /* @__PURE__ */ jsx(
1689
+ Input,
1690
+ {
1691
+ "data-slot": "sidebar-input",
1692
+ "data-sidebar": "input",
1693
+ className: cn("h-8 w-full bg-background shadow-none", className),
1694
+ ...props
1695
+ }
1696
+ );
1697
+ }
1698
+ function SidebarHeader({ className, ...props }) {
1699
+ return /* @__PURE__ */ jsx(
1700
+ "div",
1701
+ {
1702
+ "data-slot": "sidebar-header",
1703
+ "data-sidebar": "header",
1704
+ className: cn("flex flex-col gap-2 p-2", className),
1705
+ ...props
1706
+ }
1707
+ );
1708
+ }
1709
+ function SidebarFooter({ className, ...props }) {
1710
+ return /* @__PURE__ */ jsx(
1711
+ "div",
1712
+ {
1713
+ "data-slot": "sidebar-footer",
1714
+ "data-sidebar": "footer",
1715
+ className: cn("flex flex-col gap-2 p-2", className),
1716
+ ...props
1717
+ }
1718
+ );
1719
+ }
1720
+ function SidebarSeparator({
1721
+ className,
1722
+ ...props
1723
+ }) {
1724
+ return /* @__PURE__ */ jsx(
1725
+ Separator,
1726
+ {
1727
+ "data-slot": "sidebar-separator",
1728
+ "data-sidebar": "separator",
1729
+ className: cn("mx-2 w-auto bg-sidebar-border", className),
1730
+ ...props
1731
+ }
1732
+ );
1733
+ }
1734
+ function SidebarContent({ className, ...props }) {
1735
+ return /* @__PURE__ */ jsx(
1736
+ "div",
1737
+ {
1738
+ "data-slot": "sidebar-content",
1739
+ "data-sidebar": "content",
1740
+ className: cn(
1741
+ "no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-hidden",
1742
+ className
1743
+ ),
1744
+ ...props
1745
+ }
1746
+ );
1747
+ }
1748
+ function SidebarGroup({ className, ...props }) {
1749
+ return /* @__PURE__ */ jsx(
1750
+ "div",
1751
+ {
1752
+ "data-slot": "sidebar-group",
1753
+ "data-sidebar": "group",
1754
+ className: cn("relative flex w-full min-w-0 flex-col p-2", className),
1755
+ ...props
1756
+ }
1757
+ );
1758
+ }
1759
+ function SidebarGroupLabel({
1760
+ className,
1761
+ render,
1762
+ ...props
1763
+ }) {
1764
+ return useRender({
1765
+ defaultTagName: "div",
1766
+ props: mergeProps(
1767
+ {
1768
+ className: cn(
1769
+ "flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
1770
+ className
1771
+ )
1772
+ },
1773
+ props
1774
+ ),
1775
+ render,
1776
+ state: {
1777
+ slot: "sidebar-group-label",
1778
+ sidebar: "group-label"
1779
+ }
1780
+ });
1781
+ }
1782
+ function SidebarGroupAction({
1783
+ className,
1784
+ render,
1785
+ ...props
1786
+ }) {
1787
+ return useRender({
1788
+ defaultTagName: "button",
1789
+ props: mergeProps(
1790
+ {
1791
+ className: cn(
1792
+ "absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0",
1793
+ className
1794
+ )
1795
+ },
1796
+ props
1797
+ ),
1798
+ render,
1799
+ state: {
1800
+ slot: "sidebar-group-action",
1801
+ sidebar: "group-action"
1802
+ }
1803
+ });
1804
+ }
1805
+ function SidebarGroupContent({
1806
+ className,
1807
+ ...props
1808
+ }) {
1809
+ return /* @__PURE__ */ jsx(
1810
+ "div",
1811
+ {
1812
+ "data-slot": "sidebar-group-content",
1813
+ "data-sidebar": "group-content",
1814
+ className: cn("w-full text-sm", className),
1815
+ ...props
1816
+ }
1817
+ );
1818
+ }
1819
+ function SidebarMenu({ className, ...props }) {
1820
+ return /* @__PURE__ */ jsx(
1821
+ "ul",
1822
+ {
1823
+ "data-slot": "sidebar-menu",
1824
+ "data-sidebar": "menu",
1825
+ className: cn("flex w-full min-w-0 flex-col gap-0", className),
1826
+ ...props
1827
+ }
1828
+ );
1829
+ }
1830
+ function SidebarMenuItem({ className, ...props }) {
1831
+ return /* @__PURE__ */ jsx(
1832
+ "li",
1833
+ {
1834
+ "data-slot": "sidebar-menu-item",
1835
+ "data-sidebar": "menu-item",
1836
+ className: cn("group/menu-item relative", className),
1837
+ ...props
1838
+ }
1839
+ );
1840
+ }
1841
+ var sidebarMenuButtonVariants = cva(
1842
+ "peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate",
1843
+ {
1844
+ variants: {
1845
+ variant: {
1846
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
1847
+ outline: "bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"
1848
+ },
1849
+ size: {
1850
+ default: "h-8 text-sm",
1851
+ sm: "h-7 text-xs",
1852
+ lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
1853
+ }
1854
+ },
1855
+ defaultVariants: {
1856
+ variant: "default",
1857
+ size: "default"
1858
+ }
1859
+ }
1860
+ );
1861
+ function SidebarMenuButton({
1862
+ render,
1863
+ isActive = false,
1864
+ variant = "default",
1865
+ size = "default",
1866
+ tooltip,
1867
+ className,
1868
+ ...props
1869
+ }) {
1870
+ const { isMobile, state } = useSidebar();
1871
+ const comp = useRender({
1872
+ defaultTagName: "button",
1873
+ props: mergeProps(
1874
+ {
1875
+ className: cn(sidebarMenuButtonVariants({ variant, size }), className)
1876
+ },
1877
+ props
1878
+ ),
1879
+ render: !tooltip ? render : /* @__PURE__ */ jsx(TooltipTrigger, { render }),
1880
+ state: {
1881
+ slot: "sidebar-menu-button",
1882
+ sidebar: "menu-button",
1883
+ size,
1884
+ active: isActive
1885
+ }
1886
+ });
1887
+ if (!tooltip) {
1888
+ return comp;
1889
+ }
1890
+ if (typeof tooltip === "string") {
1891
+ tooltip = {
1892
+ children: tooltip
1893
+ };
1894
+ }
1895
+ return /* @__PURE__ */ jsxs(Tooltip, { children: [
1896
+ comp,
1897
+ /* @__PURE__ */ jsx(
1898
+ TooltipContent,
1899
+ {
1900
+ side: "right",
1901
+ align: "center",
1902
+ hidden: state !== "collapsed" || isMobile,
1903
+ ...tooltip
1904
+ }
1905
+ )
1906
+ ] });
1907
+ }
1908
+ function SidebarMenuAction({
1909
+ className,
1910
+ render,
1911
+ showOnHover = false,
1912
+ ...props
1913
+ }) {
1914
+ return useRender({
1915
+ defaultTagName: "button",
1916
+ props: mergeProps(
1917
+ {
1918
+ className: cn(
1919
+ "absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0",
1920
+ showOnHover && "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-active/menu-button:text-sidebar-accent-foreground aria-expanded:opacity-100 md:opacity-0",
1921
+ className
1922
+ )
1923
+ },
1924
+ props
1925
+ ),
1926
+ render,
1927
+ state: {
1928
+ slot: "sidebar-menu-action",
1929
+ sidebar: "menu-action"
1930
+ }
1931
+ });
1932
+ }
1933
+ function SidebarMenuBadge({
1934
+ className,
1935
+ ...props
1936
+ }) {
1937
+ return /* @__PURE__ */ jsx(
1938
+ "div",
1939
+ {
1940
+ "data-slot": "sidebar-menu-badge",
1941
+ "data-sidebar": "menu-badge",
1942
+ className: cn(
1943
+ "pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-accent-foreground",
1944
+ className
1945
+ ),
1946
+ ...props
1947
+ }
1948
+ );
1949
+ }
1950
+ function SidebarMenuSkeleton({
1951
+ className,
1952
+ showIcon = false,
1953
+ ...props
1954
+ }) {
1955
+ const [width] = React12.useState(() => {
1956
+ return `${Math.floor(Math.random() * 40) + 50}%`;
1957
+ });
1958
+ return /* @__PURE__ */ jsxs(
1959
+ "div",
1960
+ {
1961
+ "data-slot": "sidebar-menu-skeleton",
1962
+ "data-sidebar": "menu-skeleton",
1963
+ className: cn("flex h-8 items-center gap-2 rounded-md px-2", className),
1964
+ ...props,
1965
+ children: [
1966
+ showIcon && /* @__PURE__ */ jsx(
1967
+ Skeleton,
1968
+ {
1969
+ className: "size-4 rounded-md",
1970
+ "data-sidebar": "menu-skeleton-icon"
1971
+ }
1972
+ ),
1973
+ /* @__PURE__ */ jsx(
1974
+ Skeleton,
1975
+ {
1976
+ className: "h-4 max-w-(--skeleton-width) flex-1",
1977
+ "data-sidebar": "menu-skeleton-text",
1978
+ style: {
1979
+ "--skeleton-width": width
1980
+ }
1981
+ }
1982
+ )
1983
+ ]
1984
+ }
1985
+ );
1986
+ }
1987
+ function SidebarMenuSub({ className, ...props }) {
1988
+ return /* @__PURE__ */ jsx(
1989
+ "ul",
1990
+ {
1991
+ "data-slot": "sidebar-menu-sub",
1992
+ "data-sidebar": "menu-sub",
1993
+ className: cn(
1994
+ "mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5 group-data-[collapsible=icon]:hidden",
1995
+ className
1996
+ ),
1997
+ ...props
1998
+ }
1999
+ );
2000
+ }
2001
+ function SidebarMenuSubItem({
2002
+ className,
2003
+ ...props
2004
+ }) {
2005
+ return /* @__PURE__ */ jsx(
2006
+ "li",
2007
+ {
2008
+ "data-slot": "sidebar-menu-sub-item",
2009
+ "data-sidebar": "menu-sub-item",
2010
+ className: cn("group/menu-sub-item relative", className),
2011
+ ...props
2012
+ }
2013
+ );
2014
+ }
2015
+ function SidebarMenuSubButton({
2016
+ render,
2017
+ size = "md",
2018
+ isActive = false,
2019
+ className,
2020
+ ...props
2021
+ }) {
2022
+ return useRender({
2023
+ defaultTagName: "a",
2024
+ props: mergeProps(
2025
+ {
2026
+ className: cn(
2027
+ "flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden group-data-[collapsible=icon]:hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground",
2028
+ className
2029
+ )
2030
+ },
2031
+ props
2032
+ ),
2033
+ render,
2034
+ state: {
2035
+ slot: "sidebar-menu-sub-button",
2036
+ sidebar: "menu-sub-button",
2037
+ size,
2038
+ active: isActive
2039
+ }
2040
+ });
2041
+ }
2042
+ function Table({ className, ...props }) {
2043
+ return /* @__PURE__ */ jsx(
2044
+ "div",
2045
+ {
2046
+ "data-slot": "table-container",
2047
+ className: "relative w-full overflow-x-auto",
2048
+ children: /* @__PURE__ */ jsx(
2049
+ "table",
2050
+ {
2051
+ "data-slot": "table",
2052
+ className: cn("w-full caption-bottom text-sm", className),
2053
+ ...props
2054
+ }
2055
+ )
2056
+ }
2057
+ );
2058
+ }
2059
+ function TableHeader({ className, ...props }) {
2060
+ return /* @__PURE__ */ jsx(
2061
+ "thead",
2062
+ {
2063
+ "data-slot": "table-header",
2064
+ className: cn("[&_tr]:border-b", className),
2065
+ ...props
2066
+ }
2067
+ );
2068
+ }
2069
+ function TableBody({ className, ...props }) {
2070
+ return /* @__PURE__ */ jsx(
2071
+ "tbody",
2072
+ {
2073
+ "data-slot": "table-body",
2074
+ className: cn("[&_tr:last-child]:border-0", className),
2075
+ ...props
2076
+ }
2077
+ );
2078
+ }
2079
+ function TableFooter({ className, ...props }) {
2080
+ return /* @__PURE__ */ jsx(
2081
+ "tfoot",
2082
+ {
2083
+ "data-slot": "table-footer",
2084
+ className: cn(
2085
+ "border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
2086
+ className
2087
+ ),
2088
+ ...props
2089
+ }
2090
+ );
2091
+ }
2092
+ function TableRow({ className, ...props }) {
2093
+ return /* @__PURE__ */ jsx(
2094
+ "tr",
2095
+ {
2096
+ "data-slot": "table-row",
2097
+ className: cn(
2098
+ "border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",
2099
+ className
2100
+ ),
2101
+ ...props
2102
+ }
2103
+ );
2104
+ }
2105
+ function TableHead({ className, ...props }) {
2106
+ return /* @__PURE__ */ jsx(
2107
+ "th",
2108
+ {
2109
+ "data-slot": "table-head",
2110
+ className: cn(
2111
+ "h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0",
2112
+ className
2113
+ ),
2114
+ ...props
2115
+ }
2116
+ );
2117
+ }
2118
+ function TableCell({ className, ...props }) {
2119
+ return /* @__PURE__ */ jsx(
2120
+ "td",
2121
+ {
2122
+ "data-slot": "table-cell",
2123
+ className: cn(
2124
+ "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",
2125
+ className
2126
+ ),
2127
+ ...props
2128
+ }
2129
+ );
2130
+ }
2131
+ function TableCaption({
2132
+ className,
2133
+ ...props
2134
+ }) {
2135
+ return /* @__PURE__ */ jsx(
2136
+ "caption",
2137
+ {
2138
+ "data-slot": "table-caption",
2139
+ className: cn("mt-4 text-sm text-muted-foreground", className),
2140
+ ...props
2141
+ }
2142
+ );
2143
+ }
2144
+ var toggleVariants = cva(
2145
+ "group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2146
+ {
2147
+ variants: {
2148
+ variant: {
2149
+ default: "bg-transparent",
2150
+ outline: "border border-input bg-transparent hover:bg-muted"
2151
+ },
2152
+ size: {
2153
+ default: "h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
2154
+ sm: "h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
2155
+ lg: "h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2"
2156
+ }
2157
+ },
2158
+ defaultVariants: {
2159
+ variant: "default",
2160
+ size: "default"
2161
+ }
2162
+ }
2163
+ );
2164
+ function Toggle({
2165
+ className,
2166
+ variant = "default",
2167
+ size = "default",
2168
+ ...props
2169
+ }) {
2170
+ return /* @__PURE__ */ jsx(
2171
+ Toggle$1,
2172
+ {
2173
+ "data-slot": "toggle",
2174
+ className: cn(toggleVariants({ variant, size, className })),
2175
+ ...props
2176
+ }
2177
+ );
2178
+ }
2179
+ var ToggleGroupContext = React12.createContext({
2180
+ size: "default",
2181
+ variant: "default",
2182
+ spacing: 2,
2183
+ orientation: "horizontal"
2184
+ });
2185
+ function ToggleGroup({
2186
+ className,
2187
+ variant,
2188
+ size,
2189
+ spacing = 2,
2190
+ orientation = "horizontal",
2191
+ children,
2192
+ ...props
2193
+ }) {
2194
+ return /* @__PURE__ */ jsx(
2195
+ ToggleGroup$1,
2196
+ {
2197
+ "data-slot": "toggle-group",
2198
+ "data-variant": variant,
2199
+ "data-size": size,
2200
+ "data-spacing": spacing,
2201
+ "data-orientation": orientation,
2202
+ style: { "--gap": spacing },
2203
+ className: cn(
2204
+ "group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-vertical:flex-col data-vertical:items-stretch",
2205
+ className
2206
+ ),
2207
+ ...props,
2208
+ children: /* @__PURE__ */ jsx(
2209
+ ToggleGroupContext.Provider,
2210
+ {
2211
+ value: { variant, size, spacing, orientation },
2212
+ children
2213
+ }
2214
+ )
2215
+ }
2216
+ );
2217
+ }
2218
+ function ToggleGroupItem({
2219
+ className,
2220
+ children,
2221
+ variant = "default",
2222
+ size = "default",
2223
+ ...props
2224
+ }) {
2225
+ const context = React12.useContext(ToggleGroupContext);
2226
+ return /* @__PURE__ */ jsx(
2227
+ Toggle$1,
2228
+ {
2229
+ "data-slot": "toggle-group-item",
2230
+ "data-variant": context.variant || variant,
2231
+ "data-size": context.size || size,
2232
+ "data-spacing": context.spacing,
2233
+ className: cn(
2234
+ "shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t",
2235
+ toggleVariants({
2236
+ variant: context.variant || variant,
2237
+ size: context.size || size
2238
+ }),
2239
+ className
2240
+ ),
2241
+ ...props,
2242
+ children
2243
+ }
2244
+ );
2245
+ }
2246
+
2247
+ export { Badge, Button, Calendar, CalendarDayButton, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Textarea, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, toggleVariants, useIsMobile, useSidebar };
2248
+ //# sourceMappingURL=chunk-WQZYXXQW.js.map
2249
+ //# sourceMappingURL=chunk-WQZYXXQW.js.map