@astra-kit/ui 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +330 -2
  4. package/THIRD_PARTY_NOTICES.md +31 -0
  5. package/assets/fonts/geist-LICENSE.txt +93 -0
  6. package/assets/fonts/geist-latin-variable.woff2 +0 -0
  7. package/assets/fonts/ibm-plex-mono-latin-400.woff2 +0 -0
  8. package/assets/fonts/ibm-plex-mono-latin-500.woff2 +0 -0
  9. package/assets/fonts/ibmplexmono-LICENSE.txt +93 -0
  10. package/assets/fonts/inter-LICENSE.txt +93 -0
  11. package/assets/fonts/inter-latin-variable.woff2 +0 -0
  12. package/dist/adapters/unpic-image.d.ts +3 -0
  13. package/dist/adapters/unpic-image.js +98 -0
  14. package/dist/components/account-menu.d.ts +67 -0
  15. package/dist/components/account-menu.js +440 -0
  16. package/dist/components/action-button.d.ts +25 -0
  17. package/dist/components/action-button.js +264 -0
  18. package/dist/components/alert.d.ts +31 -0
  19. package/dist/components/alert.js +503 -0
  20. package/dist/components/animated-collapse.d.ts +19 -0
  21. package/dist/components/animated-collapse.js +170 -0
  22. package/dist/components/animated-count.d.ts +13 -0
  23. package/dist/components/animated-count.js +105 -0
  24. package/dist/components/animated-list-item.d.ts +25 -0
  25. package/dist/components/animated-list-item.js +134 -0
  26. package/dist/components/animated-theme-toggler.d.ts +12 -0
  27. package/dist/components/animated-theme-toggler.js +200 -0
  28. package/dist/components/avatar.d.ts +65 -0
  29. package/dist/components/avatar.js +463 -0
  30. package/dist/components/badge.d.ts +21 -0
  31. package/dist/components/badge.js +297 -0
  32. package/dist/components/button-interaction.d.ts +23 -0
  33. package/dist/components/button-interaction.js +22 -0
  34. package/dist/components/button-label.d.ts +8 -0
  35. package/dist/components/button-label.js +203 -0
  36. package/dist/components/button.d.ts +23 -0
  37. package/dist/components/button.js +145 -0
  38. package/dist/components/calendar.d.ts +47 -0
  39. package/dist/components/calendar.js +155 -0
  40. package/dist/components/card.d.ts +38 -0
  41. package/dist/components/card.js +904 -0
  42. package/dist/components/carousel.d.ts +71 -0
  43. package/dist/components/carousel.js +585 -0
  44. package/dist/components/checkbox.d.ts +15 -0
  45. package/dist/components/checkbox.js +324 -0
  46. package/dist/components/control-button.d.ts +16 -0
  47. package/dist/components/control-button.js +215 -0
  48. package/dist/components/data-table.d.ts +118 -0
  49. package/dist/components/data-table.js +895 -0
  50. package/dist/components/dialog-surface.d.ts +49 -0
  51. package/dist/components/dialog-surface.js +220 -0
  52. package/dist/components/dialog.d.ts +92 -0
  53. package/dist/components/dialog.js +320 -0
  54. package/dist/components/dropdown-menu.d.ts +58 -0
  55. package/dist/components/dropdown-menu.js +135 -0
  56. package/dist/components/field.d.ts +53 -0
  57. package/dist/components/field.js +710 -0
  58. package/dist/components/file-upload.d.ts +88 -0
  59. package/dist/components/file-upload.js +776 -0
  60. package/dist/components/filter-presets-bar.d.ts +73 -0
  61. package/dist/components/filter-presets-bar.js +510 -0
  62. package/dist/components/filter-query-bar.d.ts +21 -0
  63. package/dist/components/filter-query-bar.js +881 -0
  64. package/dist/components/filter-query-grammar.d.ts +188 -0
  65. package/dist/components/filter-query-grammar.js +875 -0
  66. package/dist/components/form.d.ts +29 -0
  67. package/dist/components/form.js +330 -0
  68. package/dist/components/highlighter.d.ts +15 -0
  69. package/dist/components/highlighter.js +152 -0
  70. package/dist/components/hover-card.d.ts +50 -0
  71. package/dist/components/hover-card.js +80 -0
  72. package/dist/components/input-group.d.ts +16 -0
  73. package/dist/components/input-group.js +277 -0
  74. package/dist/components/input.d.ts +17 -0
  75. package/dist/components/input.js +120 -0
  76. package/dist/components/label.d.ts +4 -0
  77. package/dist/components/label.js +43 -0
  78. package/dist/components/link.d.ts +9 -0
  79. package/dist/components/link.js +43 -0
  80. package/dist/components/morph-text.d.ts +14 -0
  81. package/dist/components/morph-text.js +210 -0
  82. package/dist/components/pagination.d.ts +59 -0
  83. package/dist/components/pagination.js +190 -0
  84. package/dist/components/popover.d.ts +17 -0
  85. package/dist/components/popover.js +40 -0
  86. package/dist/components/presence-swap.d.ts +22 -0
  87. package/dist/components/presence-swap.js +209 -0
  88. package/dist/components/primitives/alert-dialog.d.ts +68 -0
  89. package/dist/components/primitives/alert-dialog.js +629 -0
  90. package/dist/components/primitives/avatar.d.ts +46 -0
  91. package/dist/components/primitives/avatar.js +265 -0
  92. package/dist/components/primitives/calendar.d.ts +37 -0
  93. package/dist/components/primitives/calendar.js +1250 -0
  94. package/dist/components/primitives/carousel.d.ts +106 -0
  95. package/dist/components/primitives/carousel.js +928 -0
  96. package/dist/components/primitives/dialog.d.ts +62 -0
  97. package/dist/components/primitives/dialog.js +490 -0
  98. package/dist/components/primitives/dropdown-menu-items.d.ts +59 -0
  99. package/dist/components/primitives/dropdown-menu-items.js +265 -0
  100. package/dist/components/primitives/dropdown-menu.d.ts +64 -0
  101. package/dist/components/primitives/dropdown-menu.js +560 -0
  102. package/dist/components/primitives/hover-card.d.ts +50 -0
  103. package/dist/components/primitives/hover-card.js +507 -0
  104. package/dist/components/primitives/pagination.d.ts +65 -0
  105. package/dist/components/primitives/pagination.js +373 -0
  106. package/dist/components/primitives/popover.d.ts +22 -0
  107. package/dist/components/primitives/popover.js +213 -0
  108. package/dist/components/primitives/select.d.ts +37 -0
  109. package/dist/components/primitives/select.js +428 -0
  110. package/dist/components/primitives/tooltip.d.ts +30 -0
  111. package/dist/components/primitives/tooltip.js +277 -0
  112. package/dist/components/progress-ring.d.ts +20 -0
  113. package/dist/components/progress-ring.js +53 -0
  114. package/dist/components/radio-group.d.ts +34 -0
  115. package/dist/components/radio-group.js +392 -0
  116. package/dist/components/reaction-button.d.ts +30 -0
  117. package/dist/components/reaction-button.js +189 -0
  118. package/dist/components/rich-link-editor.d.ts +25 -0
  119. package/dist/components/rich-link-editor.js +320 -0
  120. package/dist/components/rich-markdown-content.d.ts +10 -0
  121. package/dist/components/rich-markdown-content.js +56 -0
  122. package/dist/components/rich-text-content.d.ts +19 -0
  123. package/dist/components/rich-text-content.js +26 -0
  124. package/dist/components/select.d.ts +55 -0
  125. package/dist/components/select.js +188 -0
  126. package/dist/components/separator.d.ts +3 -0
  127. package/dist/components/separator.js +48 -0
  128. package/dist/components/sheet.d.ts +19 -0
  129. package/dist/components/sheet.js +420 -0
  130. package/dist/components/sidebar-panel-context.d.ts +17 -0
  131. package/dist/components/sidebar-panel-context.js +14 -0
  132. package/dist/components/sidebar.d.ts +195 -0
  133. package/dist/components/sidebar.js +2041 -0
  134. package/dist/components/skeleton.d.ts +23 -0
  135. package/dist/components/skeleton.js +334 -0
  136. package/dist/components/split-button.d.ts +36 -0
  137. package/dist/components/split-button.js +306 -0
  138. package/dist/components/svgs/whatsappIcon.d.ts +3 -0
  139. package/dist/components/svgs/whatsappIcon.js +14 -0
  140. package/dist/components/switch.d.ts +13 -0
  141. package/dist/components/switch.js +444 -0
  142. package/dist/components/table.d.ts +10 -0
  143. package/dist/components/table.js +298 -0
  144. package/dist/components/tabs.d.ts +36 -0
  145. package/dist/components/tabs.js +636 -0
  146. package/dist/components/textarea.d.ts +16 -0
  147. package/dist/components/textarea.js +111 -0
  148. package/dist/components/themed-toaster.d.ts +7 -0
  149. package/dist/components/themed-toaster.js +86 -0
  150. package/dist/components/toaster.d.ts +12 -0
  151. package/dist/components/toaster.js +62 -0
  152. package/dist/components/tooltip.d.ts +43 -0
  153. package/dist/components/tooltip.js +65 -0
  154. package/dist/components/typing-animation.d.ts +34 -0
  155. package/dist/components/typing-animation.js +389 -0
  156. package/dist/constants/action-button.d.ts +20 -0
  157. package/dist/constants/action-button.js +17 -0
  158. package/dist/constants/alert.d.ts +16 -0
  159. package/dist/constants/alert.js +13 -0
  160. package/dist/constants/avatar.d.ts +38 -0
  161. package/dist/constants/avatar.js +32 -0
  162. package/dist/constants/badge.d.ts +6 -0
  163. package/dist/constants/badge.js +6 -0
  164. package/dist/constants/button.d.ts +16 -0
  165. package/dist/constants/button.js +16 -0
  166. package/dist/constants/calendar.d.ts +36 -0
  167. package/dist/constants/calendar.js +34 -0
  168. package/dist/constants/card.d.ts +23 -0
  169. package/dist/constants/card.js +20 -0
  170. package/dist/constants/carousel.d.ts +55 -0
  171. package/dist/constants/carousel.js +74 -0
  172. package/dist/constants/checkbox.d.ts +17 -0
  173. package/dist/constants/checkbox.js +17 -0
  174. package/dist/constants/dialog.d.ts +11 -0
  175. package/dist/constants/dialog.js +10 -0
  176. package/dist/constants/dropdown-menu.d.ts +17 -0
  177. package/dist/constants/dropdown-menu.js +48 -0
  178. package/dist/constants/field.d.ts +24 -0
  179. package/dist/constants/field.js +24 -0
  180. package/dist/constants/hover-card.d.ts +37 -0
  181. package/dist/constants/hover-card.js +85 -0
  182. package/dist/constants/morph-text.d.ts +13 -0
  183. package/dist/constants/morph-text.js +13 -0
  184. package/dist/constants/motion.d.ts +12 -0
  185. package/dist/constants/motion.js +12 -0
  186. package/dist/constants/pagination.d.ts +20 -0
  187. package/dist/constants/pagination.js +20 -0
  188. package/dist/constants/popover.d.ts +7 -0
  189. package/dist/constants/popover.js +33 -0
  190. package/dist/constants/radio-group.d.ts +10 -0
  191. package/dist/constants/radio-group.js +10 -0
  192. package/dist/constants/select.d.ts +7 -0
  193. package/dist/constants/select.js +34 -0
  194. package/dist/constants/sidebar.d.ts +9 -0
  195. package/dist/constants/sidebar.js +17 -0
  196. package/dist/constants/skeleton.d.ts +17 -0
  197. package/dist/constants/skeleton.js +17 -0
  198. package/dist/constants/split-button.d.ts +7 -0
  199. package/dist/constants/split-button.js +5 -0
  200. package/dist/constants/switch.d.ts +33 -0
  201. package/dist/constants/switch.js +41 -0
  202. package/dist/constants/tabs.d.ts +17 -0
  203. package/dist/constants/tabs.js +17 -0
  204. package/dist/constants/toast.d.ts +3 -0
  205. package/dist/constants/toast.js +3 -0
  206. package/dist/constants/tooltip.d.ts +13 -0
  207. package/dist/constants/tooltip.js +52 -0
  208. package/dist/hooks/use-horizontal-swipe.d.ts +23 -0
  209. package/dist/hooks/use-horizontal-swipe.js +80 -0
  210. package/dist/hooks/use-is-hydrated.d.ts +6 -0
  211. package/dist/hooks/use-is-hydrated.js +20 -0
  212. package/dist/hooks/use-mobile.d.ts +1 -0
  213. package/dist/hooks/use-mobile.js +19 -0
  214. package/dist/hooks/use-prefers-reduced-motion.d.ts +2 -0
  215. package/dist/hooks/use-prefers-reduced-motion.js +27 -0
  216. package/dist/hooks/use-rich-link-editor.d.ts +55 -0
  217. package/dist/hooks/use-rich-link-editor.js +515 -0
  218. package/dist/hooks/use-sidebar-persistence.d.ts +6 -0
  219. package/dist/hooks/use-sidebar-persistence.js +52 -0
  220. package/dist/hooks/use-today.d.ts +7 -0
  221. package/dist/hooks/use-today.js +50 -0
  222. package/dist/hooks/use-viewer-time-zone.d.ts +6 -0
  223. package/dist/hooks/use-viewer-time-zone.js +20 -0
  224. package/dist/hooks.d.ts +11 -0
  225. package/dist/hooks.js +11 -0
  226. package/dist/index.d.ts +71 -0
  227. package/dist/index.js +69 -0
  228. package/dist/lib/browser-clipboard.d.ts +13 -0
  229. package/dist/lib/browser-clipboard.js +48 -0
  230. package/dist/lib/column-filter-value.d.ts +12 -0
  231. package/dist/lib/column-filter-value.js +52 -0
  232. package/dist/lib/file-acceptance.d.ts +43 -0
  233. package/dist/lib/file-acceptance.js +107 -0
  234. package/dist/lib/format-file-size.d.ts +16 -0
  235. package/dist/lib/format-file-size.js +34 -0
  236. package/dist/lib/fuzzy-search.d.ts +17 -0
  237. package/dist/lib/fuzzy-search.js +183 -0
  238. package/dist/lib/horizontal-swipe.d.ts +23 -0
  239. package/dist/lib/horizontal-swipe.js +29 -0
  240. package/dist/lib/image-dimensions.d.ts +2 -0
  241. package/dist/lib/image-dimensions.js +7 -0
  242. package/dist/lib/name-initials.d.ts +7 -0
  243. package/dist/lib/name-initials.js +11 -0
  244. package/dist/lib/rich-text/link-markdown-constants.d.ts +147 -0
  245. package/dist/lib/rich-text/link-markdown-constants.js +458 -0
  246. package/dist/lib/rich-text/link-markdown-types.d.ts +53 -0
  247. package/dist/lib/rich-text/link-markdown-types.js +1 -0
  248. package/dist/lib/rich-text/link-markdown.d.ts +193 -0
  249. package/dist/lib/rich-text/link-markdown.js +592 -0
  250. package/dist/lib/rich-text/rich-markdown.d.ts +41 -0
  251. package/dist/lib/rich-text/rich-markdown.js +105 -0
  252. package/dist/lib/rich-text/rich-text-editor-dom.d.ts +26 -0
  253. package/dist/lib/rich-text/rich-text-editor-dom.js +79 -0
  254. package/dist/lib/toast-layer.d.ts +24 -0
  255. package/dist/lib/toast-layer.js +76 -0
  256. package/dist/lib/utils.d.ts +2 -0
  257. package/dist/lib/utils.js +2 -0
  258. package/dist/lib/year-month-filter.d.ts +16 -0
  259. package/dist/lib/year-month-filter.js +46 -0
  260. package/dist/motion/arc-floating-slot.d.ts +40 -0
  261. package/dist/motion/arc-floating-slot.js +177 -0
  262. package/dist/motion/arc-press.d.ts +6 -0
  263. package/dist/motion/arc-press.js +59 -0
  264. package/dist/motion/arc-swap.d.ts +22 -0
  265. package/dist/motion/arc-swap.js +49 -0
  266. package/dist/motion/arc-tokens.d.ts +53 -0
  267. package/dist/motion/arc-tokens.js +73 -0
  268. package/dist/motion/glide-indicator.d.ts +69 -0
  269. package/dist/motion/glide-indicator.js +309 -0
  270. package/dist/motion/glide-slot.d.ts +9 -0
  271. package/dist/motion/glide-slot.js +71 -0
  272. package/dist/motion/motion-slot.d.ts +12 -0
  273. package/dist/motion/motion-slot.js +376 -0
  274. package/dist/motion/overlay-warmth.d.ts +24 -0
  275. package/dist/motion/overlay-warmth.js +70 -0
  276. package/dist/motion/presence.d.ts +40 -0
  277. package/dist/motion/presence.js +101 -0
  278. package/dist/motion/surface-keyframes.d.ts +24 -0
  279. package/dist/motion/surface-keyframes.js +141 -0
  280. package/dist/motion/tokens.d.ts +81 -0
  281. package/dist/motion/tokens.js +67 -0
  282. package/dist/motion/use-attached-element.d.ts +7 -0
  283. package/dist/motion/use-attached-element.js +22 -0
  284. package/dist/motion/use-morph-width.d.ts +13 -0
  285. package/dist/motion/use-morph-width.js +59 -0
  286. package/dist/next.d.ts +14 -0
  287. package/dist/next.js +79 -0
  288. package/dist/providers/astra-ui-provider.d.ts +27 -0
  289. package/dist/providers/astra-ui-provider.js +100 -0
  290. package/dist/providers/native-provider.d.ts +4 -0
  291. package/dist/providers/native-provider.js +45 -0
  292. package/dist/sonner.d.ts +7 -0
  293. package/dist/sonner.js +8 -0
  294. package/dist/styles.css +2 -0
  295. package/dist/tanstack.d.ts +11 -0
  296. package/dist/tanstack.js +50 -0
  297. package/dist/theme.d.ts +3 -0
  298. package/dist/theme.js +1 -0
  299. package/dist/types/data-table.d.ts +27 -0
  300. package/dist/types/data-table.js +1 -0
  301. package/fonts.css +5 -0
  302. package/package.json +450 -4
  303. package/styles.css +4 -0
  304. package/theme.css +248 -0
@@ -0,0 +1,2041 @@
1
+ "use client";
2
+ import { c as _c } from "react/compiler-runtime";
3
+ /**
4
+ * Application sidebar on the motion of Arc's sidebar rail: the rail springs its width without
5
+ * overshoot, labels fade and drift out of the icon rail, the active item's highlight glides between
6
+ * items, hovered items only change color, submenus open their height on the smooth spring, and
7
+ * small screens get a focus-trapped sheet that slides in from its edge. Links route through the `AstraUIProvider` adapter and the open state keeps the
8
+ * `sidebar_state` cookie contract read by server entrypoints.
9
+ */
10
+ import * as React from "react";
11
+ import { ChevronRight, PanelLeftIcon } from "lucide-react";
12
+ import { Slot } from "radix-ui";
13
+ import { AnimatePresence, motion, PresenceContext } from "motion/react";
14
+ import { createPortal } from "react-dom";
15
+ import { useIsHydrated } from "../hooks/use-is-hydrated.js";
16
+ import { useIsMobile } from "../hooks/use-mobile.js";
17
+ import { usePrefersReducedMotion } from "../hooks/use-prefers-reduced-motion.js";
18
+ import { saveSidebarCookie, saveSidebarPreference, useSidebarPersistence } from "../hooks/use-sidebar-persistence.js";
19
+ import { SIDEBAR_COOKIE_MAX_AGE, SIDEBAR_COOKIE_NAME } from "../constants/sidebar.js";
20
+ import { cn } from "../lib/utils.js";
21
+ import { MOTION_EASE, MOTION_EASE_STANDARD, MOTION_TIMING, SPRING_CHEVRON, SPRING_LAYOUT, SPRING_PANEL } from "../motion/tokens.js";
22
+ import { Link } from "./link.js";
23
+ import { SidebarPanelContext } from "./sidebar-panel-context.js";
24
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
25
+ const SIDEBAR_WIDTH = "16rem";
26
+ const SIDEBAR_WIDTH_ICON = "4.25rem";
27
+ const SIDEBAR_WIDTH_MOBILE = "18rem";
28
+ const SIDEBAR_KEYBOARD_SHORTCUT = "b";
29
+ const EXTERNAL_LINK_TARGET = "_blank";
30
+ const EXTERNAL_LINK_REL = "noreferrer noopener";
31
+ /** Distance, in pixels, labels and chevrons drift while fading out of the icon rail (Arc). */
32
+ const SIDEBAR_LABEL_DRIFT_PX = 6;
33
+ /** Chevron rotation, in degrees, of an expanded group. */
34
+ const SIDEBAR_CHEVRON_EXPANDED_DEGREES = 90;
35
+ /** Arc's sidebar sheet slides in and out on the smooth spring. */
36
+ const PANEL_TRANSITION = SPRING_PANEL;
37
+ /** Arc's scrim fades on the standard duration. */
38
+ const SCRIM_TRANSITION = {
39
+ duration: MOTION_TIMING.standard,
40
+ ease: MOTION_EASE
41
+ };
42
+ /**
43
+ * The desktop rail settles at a hard zero-width boundary, and its width reports the panel state. Arc's smooth spring
44
+ * is critically damped, so it cannot overshoot, pause against that boundary and snap back during the final frame.
45
+ */
46
+ const SIDEBAR_MORPH_TRANSITION = SPRING_PANEL;
47
+ /** Arc's labels come back once the rail has mostly opened. */
48
+ const LABEL_ENTER_TRANSITION = {
49
+ duration: MOTION_TIMING.standard,
50
+ delay: .1,
51
+ ease: MOTION_EASE
52
+ };
53
+ /** Arc's labels leave quickly, before the rail finishes folding. */
54
+ const LABEL_EXIT_TRANSITION = {
55
+ duration: .14,
56
+ ease: MOTION_EASE_STANDARD
57
+ };
58
+ const REDUCED_TRANSITION = {
59
+ duration: .16,
60
+ ease: MOTION_EASE
61
+ };
62
+ const INSTANT_TRANSITION = { duration: 0 };
63
+ /** Arc's submenu opens its height on the smooth spring while its items fade in just behind it. */
64
+ const SUBMENU_OPEN_TRANSITION = {
65
+ height: SPRING_PANEL,
66
+ opacity: {
67
+ duration: MOTION_TIMING.standard,
68
+ delay: .06,
69
+ ease: MOTION_EASE
70
+ }
71
+ };
72
+ /** Arc's submenu folds on the same spring and fades out faster than it came in. */
73
+ const SUBMENU_CLOSE_TRANSITION = {
74
+ height: SPRING_PANEL,
75
+ opacity: {
76
+ duration: .14,
77
+ ease: MOTION_EASE_STANDARD
78
+ }
79
+ };
80
+ const FOCUSABLE_SELECTOR = [
81
+ "a[href]",
82
+ "button:not([disabled])",
83
+ "input:not([disabled])",
84
+ "select:not([disabled])",
85
+ "textarea:not([disabled])",
86
+ "[tabindex]:not([tabindex='-1'])"
87
+ ].join(",");
88
+ const SidebarContext = React.createContext(null);
89
+ /**
90
+ * Reads the sidebar state shared by `SidebarProvider`.
91
+ * @returns Open state for desktop and mobile, viewport and motion flags, and state setters.
92
+ */
93
+ function useSidebar() {
94
+ const context = React.use(SidebarContext);
95
+ if (!context) {
96
+ throw new Error("useSidebar must be used within a SidebarProvider.");
97
+ }
98
+ return context;
99
+ }
100
+ /**
101
+ * Reads the state of the enclosing `Sidebar` panel, so product content can adapt to the icon rail
102
+ * without depending on its DOM attributes.
103
+ * @returns Whether the panel is collapsed to its icon rail (always false in the mobile sheet), its
104
+ * collapse mode and its side.
105
+ */
106
+ function useSidebarPanel() {
107
+ const context = React.use(SidebarPanelContext);
108
+ if (!context) {
109
+ throw new Error("useSidebarPanel must be used within a Sidebar.");
110
+ }
111
+ return context;
112
+ }
113
+ /**
114
+ * Owns the open state of the sidebar, the ⌘B / Ctrl+B shortcut and the layout wrapper.
115
+ * @param props - Controlled or default state for both viewports, persistence options and wrapper attributes.
116
+ * @returns The wrapper that lays out the sidebar next to its inset.
117
+ */
118
+ function SidebarProvider(t0) {
119
+ const $ = _c(57);
120
+ let children;
121
+ let className;
122
+ let onOpenChange;
123
+ let onOpenMobileChange;
124
+ let openMobileProp;
125
+ let openProp;
126
+ let props;
127
+ let storageKey;
128
+ let style;
129
+ let t1;
130
+ let t2;
131
+ let t3;
132
+ let t4;
133
+ if ($[0] !== t0) {
134
+ ({children, open: openProp, defaultOpen: t1, onOpenChange, openMobile: openMobileProp, defaultOpenMobile: t2, onOpenMobileChange, storageKey, cookieName: t3, cookieMaxAge: t4, className, style, ...props} = t0);
135
+ $[0] = t0;
136
+ $[1] = children;
137
+ $[2] = className;
138
+ $[3] = onOpenChange;
139
+ $[4] = onOpenMobileChange;
140
+ $[5] = openMobileProp;
141
+ $[6] = openProp;
142
+ $[7] = props;
143
+ $[8] = storageKey;
144
+ $[9] = style;
145
+ $[10] = t1;
146
+ $[11] = t2;
147
+ $[12] = t3;
148
+ $[13] = t4;
149
+ } else {
150
+ children = $[1];
151
+ className = $[2];
152
+ onOpenChange = $[3];
153
+ onOpenMobileChange = $[4];
154
+ openMobileProp = $[5];
155
+ openProp = $[6];
156
+ props = $[7];
157
+ storageKey = $[8];
158
+ style = $[9];
159
+ t1 = $[10];
160
+ t2 = $[11];
161
+ t3 = $[12];
162
+ t4 = $[13];
163
+ }
164
+ const defaultOpen = t1 === undefined ? true : t1;
165
+ const defaultOpenMobile = t2 === undefined ? false : t2;
166
+ const cookieName = t3 === undefined ? SIDEBAR_COOKIE_NAME : t3;
167
+ const cookieMaxAge = t4 === undefined ? SIDEBAR_COOKIE_MAX_AGE : t4;
168
+ const [internalOpen, setInternalOpen] = React.useState(null);
169
+ const [internalOpenMobile, setInternalOpenMobile] = React.useState(defaultOpenMobile);
170
+ const persistedOpen = useSidebarPersistence(storageKey);
171
+ const isMobile = useIsMobile();
172
+ const reduce = usePrefersReducedMotion();
173
+ const generatedId = React.useId();
174
+ const triggerRef = React.useRef(null);
175
+ const open = openProp ?? internalOpen ?? persistedOpen ?? defaultOpen;
176
+ const openMobile = openMobileProp ?? internalOpenMobile;
177
+ const state = open ? "expanded" : "collapsed";
178
+ const mobileWidth = style?.["--sidebar-width-mobile"] ?? SIDEBAR_WIDTH_MOBILE;
179
+ let t5;
180
+ if ($[14] !== cookieMaxAge || $[15] !== cookieName || $[16] !== onOpenChange || $[17] !== openProp || $[18] !== storageKey) {
181
+ t5 = (nextOpen) => {
182
+ if (openProp === undefined) {
183
+ setInternalOpen(nextOpen);
184
+ }
185
+ onOpenChange?.(nextOpen);
186
+ saveSidebarPreference(storageKey, nextOpen);
187
+ saveSidebarCookie(nextOpen, cookieName, cookieMaxAge);
188
+ };
189
+ $[14] = cookieMaxAge;
190
+ $[15] = cookieName;
191
+ $[16] = onOpenChange;
192
+ $[17] = openProp;
193
+ $[18] = storageKey;
194
+ $[19] = t5;
195
+ } else {
196
+ t5 = $[19];
197
+ }
198
+ const setOpen = t5;
199
+ let t6;
200
+ if ($[20] !== onOpenMobileChange || $[21] !== openMobileProp) {
201
+ t6 = (nextOpen_0) => {
202
+ if (openMobileProp === undefined) {
203
+ setInternalOpenMobile(nextOpen_0);
204
+ }
205
+ onOpenMobileChange?.(nextOpen_0);
206
+ };
207
+ $[20] = onOpenMobileChange;
208
+ $[21] = openMobileProp;
209
+ $[22] = t6;
210
+ } else {
211
+ t6 = $[22];
212
+ }
213
+ const setOpenMobile = t6;
214
+ let t7;
215
+ if ($[23] !== isMobile || $[24] !== open || $[25] !== openMobile || $[26] !== setOpen || $[27] !== setOpenMobile) {
216
+ t7 = () => {
217
+ if (isMobile) {
218
+ setOpenMobile(!openMobile);
219
+ } else {
220
+ setOpen(!open);
221
+ }
222
+ };
223
+ $[23] = isMobile;
224
+ $[24] = open;
225
+ $[25] = openMobile;
226
+ $[26] = setOpen;
227
+ $[27] = setOpenMobile;
228
+ $[28] = t7;
229
+ } else {
230
+ t7 = $[28];
231
+ }
232
+ const toggleSidebar = t7;
233
+ let t8;
234
+ let t9;
235
+ if ($[29] !== toggleSidebar) {
236
+ t8 = () => {
237
+ const handleShortcut = (event) => {
238
+ if (typeof event.key === "string" && event.key.toLowerCase() === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
239
+ event.preventDefault();
240
+ toggleSidebar();
241
+ }
242
+ };
243
+ window.addEventListener("keydown", handleShortcut);
244
+ return () => window.removeEventListener("keydown", handleShortcut);
245
+ };
246
+ t9 = [toggleSidebar];
247
+ $[29] = toggleSidebar;
248
+ $[30] = t8;
249
+ $[31] = t9;
250
+ } else {
251
+ t8 = $[30];
252
+ t9 = $[31];
253
+ }
254
+ React.useEffect(t8, t9);
255
+ const t10 = `${generatedId}-active`;
256
+ let t11;
257
+ if ($[32] !== isMobile || $[33] !== mobileWidth || $[34] !== open || $[35] !== openMobile || $[36] !== reduce || $[37] !== setOpen || $[38] !== setOpenMobile || $[39] !== state || $[40] !== t10 || $[41] !== toggleSidebar) {
258
+ t11 = {
259
+ isMobile,
260
+ layoutId: t10,
261
+ mobileWidth,
262
+ open,
263
+ openMobile,
264
+ reduce,
265
+ setOpen,
266
+ setOpenMobile,
267
+ state,
268
+ toggleSidebar,
269
+ triggerRef
270
+ };
271
+ $[32] = isMobile;
272
+ $[33] = mobileWidth;
273
+ $[34] = open;
274
+ $[35] = openMobile;
275
+ $[36] = reduce;
276
+ $[37] = setOpen;
277
+ $[38] = setOpenMobile;
278
+ $[39] = state;
279
+ $[40] = t10;
280
+ $[41] = toggleSidebar;
281
+ $[42] = t11;
282
+ } else {
283
+ t11 = $[42];
284
+ }
285
+ const contextValue = t11;
286
+ let t12;
287
+ if ($[43] !== mobileWidth || $[44] !== style) {
288
+ t12 = {
289
+ "--sidebar-width": SIDEBAR_WIDTH,
290
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
291
+ "--sidebar-width-mobile": mobileWidth,
292
+ ...style
293
+ };
294
+ $[43] = mobileWidth;
295
+ $[44] = style;
296
+ $[45] = t12;
297
+ } else {
298
+ t12 = $[45];
299
+ }
300
+ let t13;
301
+ if ($[46] !== className) {
302
+ t13 = cn("group/sidebar-wrapper flex min-h-svh w-full min-w-0 has-data-[variant=inset]:bg-sidebar", className);
303
+ $[46] = className;
304
+ $[47] = t13;
305
+ } else {
306
+ t13 = $[47];
307
+ }
308
+ let t14;
309
+ if ($[48] !== children || $[49] !== props || $[50] !== state || $[51] !== t12 || $[52] !== t13) {
310
+ t14 = /* @__PURE__ */ _jsx("div", {
311
+ ...props,
312
+ "data-slot": "sidebar-wrapper",
313
+ "data-state": state,
314
+ style: t12,
315
+ className: t13,
316
+ children
317
+ });
318
+ $[48] = children;
319
+ $[49] = props;
320
+ $[50] = state;
321
+ $[51] = t12;
322
+ $[52] = t13;
323
+ $[53] = t14;
324
+ } else {
325
+ t14 = $[53];
326
+ }
327
+ let t15;
328
+ if ($[54] !== contextValue || $[55] !== t14) {
329
+ t15 = /* @__PURE__ */ _jsx(SidebarContext.Provider, {
330
+ value: contextValue,
331
+ children: t14
332
+ });
333
+ $[54] = contextValue;
334
+ $[55] = t14;
335
+ $[56] = t15;
336
+ } else {
337
+ t15 = $[56];
338
+ }
339
+ return t15;
340
+ }
341
+ /** Small-screen sheet: locks page scroll, traps focus and hands it back to the trigger on close. */
342
+ function MobileSidebar(t0) {
343
+ const $ = _c(54);
344
+ const { ariaLabel, children, className, side } = t0;
345
+ const context = useSidebar();
346
+ const isHydrated = useIsHydrated();
347
+ const panelRef = React.useRef(null);
348
+ const [hidden, setHidden] = React.useState(!context.openMobile);
349
+ const openMobileRef = React.useRef(context.openMobile);
350
+ const { mobileWidth, openMobile, reduce, setOpenMobile, triggerRef } = context;
351
+ let t1;
352
+ let t2;
353
+ if ($[0] !== openMobile) {
354
+ t1 = () => {
355
+ openMobileRef.current = openMobile;
356
+ if (openMobile) {
357
+ setHidden(false);
358
+ }
359
+ };
360
+ t2 = [openMobile];
361
+ $[0] = openMobile;
362
+ $[1] = t1;
363
+ $[2] = t2;
364
+ } else {
365
+ t1 = $[1];
366
+ t2 = $[2];
367
+ }
368
+ React.useEffect(t1, t2);
369
+ let t3;
370
+ let t4;
371
+ if ($[3] !== openMobile || $[4] !== triggerRef) {
372
+ t3 = () => {
373
+ if (!openMobile) {
374
+ return;
375
+ }
376
+ const body = document.body;
377
+ const scrollY = window.scrollY;
378
+ const previousBodyStyles = {
379
+ left: body.style.left,
380
+ overflow: body.style.overflow,
381
+ paddingRight: body.style.paddingRight,
382
+ position: body.style.position,
383
+ right: body.style.right,
384
+ top: body.style.top
385
+ };
386
+ const clientWidthBeforeLock = document.documentElement.clientWidth;
387
+ const bodyPaddingRight = Number.parseFloat(getComputedStyle(body).paddingRight) || 0;
388
+ body.style.position = "fixed";
389
+ body.style.top = `-${scrollY}px`;
390
+ body.style.left = "0";
391
+ body.style.right = "0";
392
+ body.style.overflow = "hidden";
393
+ const scrollbarWidth = document.documentElement.clientWidth - clientWidthBeforeLock;
394
+ if (scrollbarWidth > 0) {
395
+ body.style.paddingRight = `${bodyPaddingRight + scrollbarWidth}px`;
396
+ }
397
+ const restoreTriggerFocus = () => triggerRef.current?.focus({ preventScroll: true });
398
+ const focusFrame = requestAnimationFrame(() => {
399
+ const firstFocusable = panelRef.current?.querySelector(FOCUSABLE_SELECTOR);
400
+ (firstFocusable ?? panelRef.current)?.focus({ preventScroll: true });
401
+ });
402
+ return () => {
403
+ cancelAnimationFrame(focusFrame);
404
+ body.style.position = previousBodyStyles.position;
405
+ body.style.top = previousBodyStyles.top;
406
+ body.style.left = previousBodyStyles.left;
407
+ body.style.right = previousBodyStyles.right;
408
+ body.style.overflow = previousBodyStyles.overflow;
409
+ body.style.paddingRight = previousBodyStyles.paddingRight;
410
+ window.scrollTo(0, scrollY);
411
+ restoreTriggerFocus();
412
+ };
413
+ };
414
+ t4 = [openMobile, triggerRef];
415
+ $[3] = openMobile;
416
+ $[4] = triggerRef;
417
+ $[5] = t3;
418
+ $[6] = t4;
419
+ } else {
420
+ t3 = $[5];
421
+ t4 = $[6];
422
+ }
423
+ React.useEffect(t3, t4);
424
+ if (!isHydrated) {
425
+ return null;
426
+ }
427
+ const closedOffset = side === "left" ? "-100%" : "100%";
428
+ const transition = reduce ? REDUCED_TRANSITION : PANEL_TRANSITION;
429
+ let t5;
430
+ if ($[7] !== setOpenMobile) {
431
+ t5 = (event) => {
432
+ if (event.defaultPrevented || !panelRef.current?.contains(event.target)) {
433
+ return;
434
+ }
435
+ if (event.key === "Escape") {
436
+ event.preventDefault();
437
+ setOpenMobile(false);
438
+ return;
439
+ }
440
+ if (event.key !== "Tab") {
441
+ return;
442
+ }
443
+ const focusable = panelRef.current ? Array.from(panelRef.current.querySelectorAll(FOCUSABLE_SELECTOR)) : [];
444
+ if (focusable.length === 0) {
445
+ event.preventDefault();
446
+ panelRef.current?.focus();
447
+ return;
448
+ }
449
+ const firstFocusable_0 = focusable[0];
450
+ const lastFocusable = focusable[focusable.length - 1];
451
+ if (event.shiftKey && document.activeElement === firstFocusable_0) {
452
+ event.preventDefault();
453
+ lastFocusable.focus();
454
+ } else {
455
+ if (!event.shiftKey && document.activeElement === lastFocusable) {
456
+ event.preventDefault();
457
+ firstFocusable_0.focus();
458
+ }
459
+ }
460
+ };
461
+ $[7] = setOpenMobile;
462
+ $[8] = t5;
463
+ } else {
464
+ t5 = $[8];
465
+ }
466
+ const trapFocus = t5;
467
+ const t6 = hidden && !openMobile ? "invisible" : "visible";
468
+ let t7;
469
+ if ($[9] !== t6) {
470
+ t7 = cn("pointer-events-none fixed top-0 left-0 z-50 size-0 md:hidden", t6);
471
+ $[9] = t6;
472
+ $[10] = t7;
473
+ } else {
474
+ t7 = $[10];
475
+ }
476
+ const t8 = openMobile ? 0 : -1;
477
+ const t9 = openMobile ? 1 : 0;
478
+ let t10;
479
+ if ($[11] !== t9) {
480
+ t10 = { opacity: t9 };
481
+ $[11] = t9;
482
+ $[12] = t10;
483
+ } else {
484
+ t10 = $[12];
485
+ }
486
+ const t11 = reduce ? REDUCED_TRANSITION : SCRIM_TRANSITION;
487
+ let t12;
488
+ if ($[13] !== setOpenMobile) {
489
+ t12 = () => setOpenMobile(false);
490
+ $[13] = setOpenMobile;
491
+ $[14] = t12;
492
+ } else {
493
+ t12 = $[14];
494
+ }
495
+ const t13 = openMobile ? "pointer-events-auto" : "pointer-events-none";
496
+ let t14;
497
+ if ($[15] !== t13) {
498
+ t14 = cn("fixed inset-0 bg-black/40", t13);
499
+ $[15] = t13;
500
+ $[16] = t14;
501
+ } else {
502
+ t14 = $[16];
503
+ }
504
+ let t15;
505
+ if ($[17] !== t10 || $[18] !== t11 || $[19] !== t12 || $[20] !== t14 || $[21] !== t8) {
506
+ t15 = /* @__PURE__ */ _jsx(motion.button, {
507
+ type: "button",
508
+ "aria-label": "Close sidebar",
509
+ "data-slot": "sidebar-overlay",
510
+ tabIndex: t8,
511
+ initial: false,
512
+ animate: t10,
513
+ transition: t11,
514
+ onClick: t12,
515
+ className: t14
516
+ });
517
+ $[17] = t10;
518
+ $[18] = t11;
519
+ $[19] = t12;
520
+ $[20] = t14;
521
+ $[21] = t8;
522
+ $[22] = t15;
523
+ } else {
524
+ t15 = $[22];
525
+ }
526
+ const t16 = !openMobile;
527
+ const t17 = !openMobile;
528
+ const t18 = openMobile ? "expanded" : "collapsed";
529
+ const t19 = reduce ? openMobile ? 1 : 0 : 1;
530
+ const t20 = reduce ? 0 : openMobile ? "0%" : closedOffset;
531
+ let t21;
532
+ if ($[23] !== t19 || $[24] !== t20) {
533
+ t21 = {
534
+ opacity: t19,
535
+ x: t20
536
+ };
537
+ $[23] = t19;
538
+ $[24] = t20;
539
+ $[25] = t21;
540
+ } else {
541
+ t21 = $[25];
542
+ }
543
+ let t22;
544
+ if ($[26] === Symbol.for("react.memo_cache_sentinel")) {
545
+ t22 = () => {
546
+ if (!openMobileRef.current) {
547
+ setHidden(true);
548
+ }
549
+ };
550
+ $[26] = t22;
551
+ } else {
552
+ t22 = $[26];
553
+ }
554
+ let t23;
555
+ if ($[27] !== mobileWidth) {
556
+ t23 = { "--sidebar-width-mobile": mobileWidth };
557
+ $[27] = mobileWidth;
558
+ $[28] = t23;
559
+ } else {
560
+ t23 = $[28];
561
+ }
562
+ const t24 = t23;
563
+ const t25 = side === "left" ? "left-0 border-r" : "right-0 border-l";
564
+ const t26 = !openMobile && "pointer-events-none";
565
+ let t27;
566
+ if ($[29] !== className || $[30] !== t25 || $[31] !== t26) {
567
+ t27 = cn("pointer-events-auto fixed inset-y-0 flex h-dvh w-(--sidebar-width-mobile) max-w-[88vw] flex-col overflow-hidden outline-none", "border-sidebar-border bg-sidebar text-sidebar-foreground shadow-2xl will-change-transform", t25, t26, className);
568
+ $[29] = className;
569
+ $[30] = t25;
570
+ $[31] = t26;
571
+ $[32] = t27;
572
+ } else {
573
+ t27 = $[32];
574
+ }
575
+ let t28;
576
+ if ($[33] !== side) {
577
+ t28 = {
578
+ collapsed: false,
579
+ collapsible: "none",
580
+ side
581
+ };
582
+ $[33] = side;
583
+ $[34] = t28;
584
+ } else {
585
+ t28 = $[34];
586
+ }
587
+ let t29;
588
+ if ($[35] !== children || $[36] !== t28) {
589
+ t29 = /* @__PURE__ */ _jsx(SidebarPanelContext.Provider, {
590
+ value: t28,
591
+ children
592
+ });
593
+ $[35] = children;
594
+ $[36] = t28;
595
+ $[37] = t29;
596
+ } else {
597
+ t29 = $[37];
598
+ }
599
+ let t30;
600
+ if ($[38] !== ariaLabel || $[39] !== side || $[40] !== t16 || $[41] !== t17 || $[42] !== t18 || $[43] !== t21 || $[44] !== t24 || $[45] !== t27 || $[46] !== t29 || $[47] !== transition || $[48] !== trapFocus) {
601
+ t30 = /* @__PURE__ */ _jsx(motion.div, {
602
+ ref: panelRef,
603
+ role: "dialog",
604
+ "aria-modal": "true",
605
+ "aria-label": ariaLabel,
606
+ "aria-hidden": t16,
607
+ inert: t17,
608
+ tabIndex: -1,
609
+ "data-slot": "sidebar",
610
+ "data-mobile": "true",
611
+ "data-state": t18,
612
+ "data-side": side,
613
+ initial: false,
614
+ animate: t21,
615
+ transition,
616
+ onAnimationComplete: t22,
617
+ onKeyDown: trapFocus,
618
+ style: t24,
619
+ className: t27,
620
+ children: t29
621
+ });
622
+ $[38] = ariaLabel;
623
+ $[39] = side;
624
+ $[40] = t16;
625
+ $[41] = t17;
626
+ $[42] = t18;
627
+ $[43] = t21;
628
+ $[44] = t24;
629
+ $[45] = t27;
630
+ $[46] = t29;
631
+ $[47] = transition;
632
+ $[48] = trapFocus;
633
+ $[49] = t30;
634
+ } else {
635
+ t30 = $[49];
636
+ }
637
+ let t31;
638
+ if ($[50] !== t15 || $[51] !== t30 || $[52] !== t7) {
639
+ t31 = createPortal(/* @__PURE__ */ _jsxs("div", {
640
+ className: t7,
641
+ children: [t15, t30]
642
+ }), document.body);
643
+ $[50] = t15;
644
+ $[51] = t30;
645
+ $[52] = t7;
646
+ $[53] = t31;
647
+ } else {
648
+ t31 = $[53];
649
+ }
650
+ return t31;
651
+ }
652
+ /**
653
+ * Renders the sidebar: a width-morphing rail on desktop and a sheet on small screens.
654
+ * @param props - Side, variant, collapse mode, accessible name and panel classes.
655
+ * @returns The desktop rail, the mobile sheet portal, or an always-expanded panel.
656
+ */
657
+ function Sidebar(t0) {
658
+ const $ = _c(55);
659
+ let children;
660
+ let className;
661
+ let panelClassName;
662
+ let props;
663
+ let style;
664
+ let t1;
665
+ let t2;
666
+ let t3;
667
+ let t4;
668
+ if ($[0] !== t0) {
669
+ ({side: t1, variant: t2, collapsible: t3, ariaLabel: t4, children, className, panelClassName, style, ...props} = t0);
670
+ $[0] = t0;
671
+ $[1] = children;
672
+ $[2] = className;
673
+ $[3] = panelClassName;
674
+ $[4] = props;
675
+ $[5] = style;
676
+ $[6] = t1;
677
+ $[7] = t2;
678
+ $[8] = t3;
679
+ $[9] = t4;
680
+ } else {
681
+ children = $[1];
682
+ className = $[2];
683
+ panelClassName = $[3];
684
+ props = $[4];
685
+ style = $[5];
686
+ t1 = $[6];
687
+ t2 = $[7];
688
+ t3 = $[8];
689
+ t4 = $[9];
690
+ }
691
+ const side = t1 === undefined ? "left" : t1;
692
+ const variant = t2 === undefined ? "sidebar" : t2;
693
+ const collapsible = t3 === undefined ? "icon" : t3;
694
+ const ariaLabel = t4 === undefined ? "Sidebar" : t4;
695
+ const context = useSidebar();
696
+ const collapsed = collapsible !== "none" && !context.open;
697
+ const offcanvas = collapsed && collapsible === "offcanvas";
698
+ const width = offcanvas ? "0px" : collapsed ? "var(--sidebar-width-icon)" : "var(--sidebar-width)";
699
+ if (context.isMobile && collapsible !== "none") {
700
+ let t5;
701
+ if ($[10] !== ariaLabel || $[11] !== children || $[12] !== className || $[13] !== side) {
702
+ t5 = /* @__PURE__ */ _jsx(MobileSidebar, {
703
+ ariaLabel,
704
+ className,
705
+ side,
706
+ children
707
+ });
708
+ $[10] = ariaLabel;
709
+ $[11] = children;
710
+ $[12] = className;
711
+ $[13] = side;
712
+ $[14] = t5;
713
+ } else {
714
+ t5 = $[14];
715
+ }
716
+ return t5;
717
+ }
718
+ const t5 = collapsed ? "collapsed" : "expanded";
719
+ let t6;
720
+ if ($[15] !== width) {
721
+ t6 = { width };
722
+ $[15] = width;
723
+ $[16] = t6;
724
+ } else {
725
+ t6 = $[16];
726
+ }
727
+ const t7 = context.reduce ? INSTANT_TRANSITION : SIDEBAR_MORPH_TRANSITION;
728
+ const t8 = collapsible === "none" ? "block" : "hidden md:block";
729
+ const t9 = side === "right" && "order-last";
730
+ let t10;
731
+ if ($[17] !== className || $[18] !== t8 || $[19] !== t9) {
732
+ t10 = cn("group/sidebar peer relative h-auto shrink-0 text-sidebar-foreground will-change-[width]", t8, t9, className);
733
+ $[17] = className;
734
+ $[18] = t8;
735
+ $[19] = t9;
736
+ $[20] = t10;
737
+ } else {
738
+ t10 = $[20];
739
+ }
740
+ const t11 = offcanvas ? 0 : 1;
741
+ const t12 = offcanvas ? side === "left" ? "-100%" : "100%" : "0%";
742
+ let t13;
743
+ if ($[21] !== t11 || $[22] !== t12) {
744
+ t13 = {
745
+ opacity: t11,
746
+ x: t12
747
+ };
748
+ $[21] = t11;
749
+ $[22] = t12;
750
+ $[23] = t13;
751
+ } else {
752
+ t13 = $[23];
753
+ }
754
+ const t14 = context.reduce ? REDUCED_TRANSITION : PANEL_TRANSITION;
755
+ const t15 = collapsible === "offcanvas" && "w-(--sidebar-width)";
756
+ const t16 = collapsible === "none" && "h-auto";
757
+ const t17 = variant === "sidebar" && (side === "left" ? "border-r border-sidebar-border" : "border-l border-sidebar-border");
758
+ const t18 = variant === "floating" && "m-2 h-[calc(100svh-1rem)] rounded-2xl border border-sidebar-border shadow-sm";
759
+ const t19 = variant === "inset" && "m-2 h-[calc(100svh-1rem)] rounded-2xl";
760
+ let t20;
761
+ if ($[24] !== panelClassName || $[25] !== t15 || $[26] !== t16 || $[27] !== t17 || $[28] !== t18 || $[29] !== t19) {
762
+ t20 = cn("sticky top-0 flex h-svh w-full flex-col overflow-hidden bg-sidebar", t15, t16, t17, t18, t19, panelClassName);
763
+ $[24] = panelClassName;
764
+ $[25] = t15;
765
+ $[26] = t16;
766
+ $[27] = t17;
767
+ $[28] = t18;
768
+ $[29] = t19;
769
+ $[30] = t20;
770
+ } else {
771
+ t20 = $[30];
772
+ }
773
+ let t21;
774
+ if ($[31] !== collapsed || $[32] !== collapsible || $[33] !== side) {
775
+ t21 = {
776
+ collapsed,
777
+ collapsible,
778
+ side
779
+ };
780
+ $[31] = collapsed;
781
+ $[32] = collapsible;
782
+ $[33] = side;
783
+ $[34] = t21;
784
+ } else {
785
+ t21 = $[34];
786
+ }
787
+ let t22;
788
+ if ($[35] !== children || $[36] !== t21) {
789
+ t22 = /* @__PURE__ */ _jsx(SidebarPanelContext.Provider, {
790
+ value: t21,
791
+ children
792
+ });
793
+ $[35] = children;
794
+ $[36] = t21;
795
+ $[37] = t22;
796
+ } else {
797
+ t22 = $[37];
798
+ }
799
+ let t23;
800
+ if ($[38] !== t13 || $[39] !== t14 || $[40] !== t20 || $[41] !== t22) {
801
+ t23 = /* @__PURE__ */ _jsx(motion.div, {
802
+ initial: false,
803
+ animate: t13,
804
+ transition: t14,
805
+ "data-slot": "sidebar-inner",
806
+ className: t20,
807
+ children: t22
808
+ });
809
+ $[38] = t13;
810
+ $[39] = t14;
811
+ $[40] = t20;
812
+ $[41] = t22;
813
+ $[42] = t23;
814
+ } else {
815
+ t23 = $[42];
816
+ }
817
+ let t24;
818
+ if ($[43] !== ariaLabel || $[44] !== collapsible || $[45] !== props || $[46] !== side || $[47] !== style || $[48] !== t10 || $[49] !== t23 || $[50] !== t5 || $[51] !== t6 || $[52] !== t7 || $[53] !== variant) {
819
+ t24 = /* @__PURE__ */ _jsx(motion.aside, {
820
+ ...props,
821
+ initial: false,
822
+ "aria-label": ariaLabel,
823
+ "data-slot": "sidebar",
824
+ "data-state": t5,
825
+ "data-collapsible": collapsible,
826
+ "data-variant": variant,
827
+ "data-side": side,
828
+ animate: t6,
829
+ transition: t7,
830
+ style,
831
+ className: t10,
832
+ children: t23
833
+ });
834
+ $[43] = ariaLabel;
835
+ $[44] = collapsible;
836
+ $[45] = props;
837
+ $[46] = side;
838
+ $[47] = style;
839
+ $[48] = t10;
840
+ $[49] = t23;
841
+ $[50] = t5;
842
+ $[51] = t6;
843
+ $[52] = t7;
844
+ $[53] = variant;
845
+ $[54] = t24;
846
+ } else {
847
+ t24 = $[54];
848
+ }
849
+ return t24;
850
+ }
851
+ /**
852
+ * Button that toggles the desktop rail or the mobile sheet; shows a panel icon unless given children.
853
+ * @param props - Native button attributes.
854
+ * @returns The toggle button.
855
+ */
856
+ function SidebarTrigger({ children, className, onClick, ref, type = "button", ...props }) {
857
+ const context = useSidebar();
858
+ const expanded = context.isMobile ? context.openMobile : context.open;
859
+ return /* @__PURE__ */ _jsx("button", {
860
+ ...props,
861
+ ref: (node) => {
862
+ context.triggerRef.current = node;
863
+ if (typeof ref === "function") return ref(node);
864
+ if (ref) ref.current = node;
865
+ },
866
+ type,
867
+ "aria-label": props["aria-label"] ?? "Toggle sidebar",
868
+ "aria-expanded": expanded,
869
+ "data-slot": "sidebar-trigger",
870
+ "data-state": expanded ? "expanded" : "collapsed",
871
+ onClick: (event) => {
872
+ onClick?.(event);
873
+ if (!event.defaultPrevented) context.toggleSidebar();
874
+ },
875
+ className: cn("inline-flex size-10 shrink-0 items-center justify-center rounded-xl outline-none [&_svg]:size-4", "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background", className),
876
+ children: children ?? /* @__PURE__ */ _jsx(PanelLeftIcon, { "aria-hidden": "true" })
877
+ });
878
+ }
879
+ /**
880
+ * Button that closes the sidebar on the current viewport.
881
+ * @param props - Native button attributes; the content is the consumer's icon or text.
882
+ * @returns The close button.
883
+ */
884
+ function SidebarClose(t0) {
885
+ const $ = _c(16);
886
+ let className;
887
+ let onClick;
888
+ let props;
889
+ let t1;
890
+ if ($[0] !== t0) {
891
+ ({className, onClick, type: t1, ...props} = t0);
892
+ $[0] = t0;
893
+ $[1] = className;
894
+ $[2] = onClick;
895
+ $[3] = props;
896
+ $[4] = t1;
897
+ } else {
898
+ className = $[1];
899
+ onClick = $[2];
900
+ props = $[3];
901
+ t1 = $[4];
902
+ }
903
+ const type = t1 === undefined ? "button" : t1;
904
+ const context = useSidebar();
905
+ const t2 = props["aria-label"] ?? "Close sidebar";
906
+ let t3;
907
+ if ($[5] !== context || $[6] !== onClick) {
908
+ t3 = (event) => {
909
+ onClick?.(event);
910
+ if (event.defaultPrevented) {
911
+ return;
912
+ }
913
+ if (context.isMobile) {
914
+ context.setOpenMobile(false);
915
+ } else {
916
+ context.setOpen(false);
917
+ }
918
+ };
919
+ $[5] = context;
920
+ $[6] = onClick;
921
+ $[7] = t3;
922
+ } else {
923
+ t3 = $[7];
924
+ }
925
+ let t4;
926
+ if ($[8] !== className) {
927
+ t4 = cn("inline-flex size-10 shrink-0 items-center justify-center rounded-xl outline-none", "focus-visible:ring-2 focus-visible:ring-ring", className);
928
+ $[8] = className;
929
+ $[9] = t4;
930
+ } else {
931
+ t4 = $[9];
932
+ }
933
+ let t5;
934
+ if ($[10] !== props || $[11] !== t2 || $[12] !== t3 || $[13] !== t4 || $[14] !== type) {
935
+ t5 = /* @__PURE__ */ _jsx("button", {
936
+ ...props,
937
+ type,
938
+ "aria-label": t2,
939
+ "data-slot": "sidebar-close",
940
+ onClick: t3,
941
+ className: t4
942
+ });
943
+ $[10] = props;
944
+ $[11] = t2;
945
+ $[12] = t3;
946
+ $[13] = t4;
947
+ $[14] = type;
948
+ $[15] = t5;
949
+ } else {
950
+ t5 = $[15];
951
+ }
952
+ return t5;
953
+ }
954
+ /**
955
+ * Thin hit area on the sidebar edge that toggles it with the pointer.
956
+ * @param props - Native button attributes.
957
+ * @returns The rail button, outside the tab order.
958
+ */
959
+ function SidebarRail(t0) {
960
+ const $ = _c(17);
961
+ let className;
962
+ let onClick;
963
+ let props;
964
+ let t1;
965
+ if ($[0] !== t0) {
966
+ ({className, onClick, type: t1, ...props} = t0);
967
+ $[0] = t0;
968
+ $[1] = className;
969
+ $[2] = onClick;
970
+ $[3] = props;
971
+ $[4] = t1;
972
+ } else {
973
+ className = $[1];
974
+ onClick = $[2];
975
+ props = $[3];
976
+ t1 = $[4];
977
+ }
978
+ const type = t1 === undefined ? "button" : t1;
979
+ const context = useSidebar();
980
+ const panel = useSidebarPanel();
981
+ const t2 = panel.side;
982
+ const t3 = props["aria-label"] ?? "Toggle sidebar";
983
+ let t4;
984
+ if ($[5] !== context || $[6] !== onClick) {
985
+ t4 = (event) => {
986
+ onClick?.(event);
987
+ if (!event.defaultPrevented) {
988
+ context.toggleSidebar();
989
+ }
990
+ };
991
+ $[5] = context;
992
+ $[6] = onClick;
993
+ $[7] = t4;
994
+ } else {
995
+ t4 = $[7];
996
+ }
997
+ let t5;
998
+ if ($[8] !== className) {
999
+ t5 = cn("absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 outline-none md:block", "after:absolute after:inset-y-0 after:left-1/2 after:w-px after:bg-transparent after:transition-colors hover:after:bg-sidebar-border", "data-[side=left]:left-full data-[side=right]:right-0 data-[side=right]:translate-x-1/2", className);
1000
+ $[8] = className;
1001
+ $[9] = t5;
1002
+ } else {
1003
+ t5 = $[9];
1004
+ }
1005
+ let t6;
1006
+ if ($[10] !== panel.side || $[11] !== props || $[12] !== t3 || $[13] !== t4 || $[14] !== t5 || $[15] !== type) {
1007
+ t6 = /* @__PURE__ */ _jsx("button", {
1008
+ ...props,
1009
+ type,
1010
+ "data-slot": "sidebar-rail",
1011
+ "data-side": t2,
1012
+ "aria-label": t3,
1013
+ title: "Toggle sidebar",
1014
+ tabIndex: -1,
1015
+ onClick: t4,
1016
+ className: t5
1017
+ });
1018
+ $[10] = panel.side;
1019
+ $[11] = props;
1020
+ $[12] = t3;
1021
+ $[13] = t4;
1022
+ $[14] = t5;
1023
+ $[15] = type;
1024
+ $[16] = t6;
1025
+ } else {
1026
+ t6 = $[16];
1027
+ }
1028
+ return t6;
1029
+ }
1030
+ /**
1031
+ * Main content area laid out next to the sidebar.
1032
+ * @param props - Motion-enabled `main` attributes.
1033
+ * @returns The content landmark.
1034
+ */
1035
+ function SidebarInset(t0) {
1036
+ const $ = _c(8);
1037
+ let className;
1038
+ let props;
1039
+ if ($[0] !== t0) {
1040
+ ({className, ...props} = t0);
1041
+ $[0] = t0;
1042
+ $[1] = className;
1043
+ $[2] = props;
1044
+ } else {
1045
+ className = $[1];
1046
+ props = $[2];
1047
+ }
1048
+ let t1;
1049
+ if ($[3] !== className) {
1050
+ t1 = cn("relative flex min-h-svh min-w-0 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-2xl md:peer-data-[variant=inset]:shadow-sm", className);
1051
+ $[3] = className;
1052
+ $[4] = t1;
1053
+ } else {
1054
+ t1 = $[4];
1055
+ }
1056
+ let t2;
1057
+ if ($[5] !== props || $[6] !== t1) {
1058
+ t2 = /* @__PURE__ */ _jsx(motion.main, {
1059
+ ...props,
1060
+ "data-slot": "sidebar-inset",
1061
+ className: t1
1062
+ });
1063
+ $[5] = props;
1064
+ $[6] = t1;
1065
+ $[7] = t2;
1066
+ } else {
1067
+ t2 = $[7];
1068
+ }
1069
+ return t2;
1070
+ }
1071
+ function SidebarHeader(t0) {
1072
+ const $ = _c(8);
1073
+ let className;
1074
+ let props;
1075
+ if ($[0] !== t0) {
1076
+ ({className, ...props} = t0);
1077
+ $[0] = t0;
1078
+ $[1] = className;
1079
+ $[2] = props;
1080
+ } else {
1081
+ className = $[1];
1082
+ props = $[2];
1083
+ }
1084
+ let t1;
1085
+ if ($[3] !== className) {
1086
+ t1 = cn("flex shrink-0 flex-col gap-2 p-3", className);
1087
+ $[3] = className;
1088
+ $[4] = t1;
1089
+ } else {
1090
+ t1 = $[4];
1091
+ }
1092
+ let t2;
1093
+ if ($[5] !== props || $[6] !== t1) {
1094
+ t2 = /* @__PURE__ */ _jsx("div", {
1095
+ ...props,
1096
+ "data-slot": "sidebar-header",
1097
+ className: t1
1098
+ });
1099
+ $[5] = props;
1100
+ $[6] = t1;
1101
+ $[7] = t2;
1102
+ } else {
1103
+ t2 = $[7];
1104
+ }
1105
+ return t2;
1106
+ }
1107
+ function SidebarContent(t0) {
1108
+ const $ = _c(8);
1109
+ let className;
1110
+ let props;
1111
+ if ($[0] !== t0) {
1112
+ ({className, ...props} = t0);
1113
+ $[0] = t0;
1114
+ $[1] = className;
1115
+ $[2] = props;
1116
+ } else {
1117
+ className = $[1];
1118
+ props = $[2];
1119
+ }
1120
+ let t1;
1121
+ if ($[3] !== className) {
1122
+ t1 = cn("flex min-h-0 flex-1 flex-col gap-2 overflow-x-hidden overflow-y-auto overscroll-contain px-2 py-2", className);
1123
+ $[3] = className;
1124
+ $[4] = t1;
1125
+ } else {
1126
+ t1 = $[4];
1127
+ }
1128
+ let t2;
1129
+ if ($[5] !== props || $[6] !== t1) {
1130
+ t2 = /* @__PURE__ */ _jsx("div", {
1131
+ ...props,
1132
+ "data-slot": "sidebar-content",
1133
+ className: t1
1134
+ });
1135
+ $[5] = props;
1136
+ $[6] = t1;
1137
+ $[7] = t2;
1138
+ } else {
1139
+ t2 = $[7];
1140
+ }
1141
+ return t2;
1142
+ }
1143
+ function SidebarFooter(t0) {
1144
+ const $ = _c(8);
1145
+ let className;
1146
+ let props;
1147
+ if ($[0] !== t0) {
1148
+ ({className, ...props} = t0);
1149
+ $[0] = t0;
1150
+ $[1] = className;
1151
+ $[2] = props;
1152
+ } else {
1153
+ className = $[1];
1154
+ props = $[2];
1155
+ }
1156
+ let t1;
1157
+ if ($[3] !== className) {
1158
+ t1 = cn("flex shrink-0 flex-col gap-2 border-t border-sidebar-border p-3 pb-[max(0.75rem,env(safe-area-inset-bottom))]", className);
1159
+ $[3] = className;
1160
+ $[4] = t1;
1161
+ } else {
1162
+ t1 = $[4];
1163
+ }
1164
+ let t2;
1165
+ if ($[5] !== props || $[6] !== t1) {
1166
+ t2 = /* @__PURE__ */ _jsx("div", {
1167
+ ...props,
1168
+ "data-slot": "sidebar-footer",
1169
+ className: t1
1170
+ });
1171
+ $[5] = props;
1172
+ $[6] = t1;
1173
+ $[7] = t2;
1174
+ } else {
1175
+ t2 = $[7];
1176
+ }
1177
+ return t2;
1178
+ }
1179
+ /**
1180
+ * Product text that only makes sense in the expanded sidebar, such as a workspace name or an empty
1181
+ * state: it leaves the layout while the panel is the icon rail and always shows in the mobile sheet.
1182
+ * @param props - Span attributes, or `asChild` to keep the child element.
1183
+ * @returns The content, or nothing in the icon rail.
1184
+ */
1185
+ function SidebarLabel(t0) {
1186
+ const $ = _c(6);
1187
+ let props;
1188
+ let t1;
1189
+ if ($[0] !== t0) {
1190
+ ({asChild: t1, ...props} = t0);
1191
+ $[0] = t0;
1192
+ $[1] = props;
1193
+ $[2] = t1;
1194
+ } else {
1195
+ props = $[1];
1196
+ t1 = $[2];
1197
+ }
1198
+ const asChild = t1 === undefined ? false : t1;
1199
+ const { collapsed } = useSidebarPanel();
1200
+ if (collapsed) {
1201
+ return null;
1202
+ }
1203
+ const Component = asChild ? Slot.Root : "span";
1204
+ let t2;
1205
+ if ($[3] !== Component || $[4] !== props) {
1206
+ t2 = /* @__PURE__ */ _jsx(Component, {
1207
+ "data-slot": "sidebar-label",
1208
+ ...props
1209
+ });
1210
+ $[3] = Component;
1211
+ $[4] = props;
1212
+ $[5] = t2;
1213
+ } else {
1214
+ t2 = $[5];
1215
+ }
1216
+ return t2;
1217
+ }
1218
+ /**
1219
+ * Header row that identifies the workspace, often the trigger of a workspace switcher. It forwards
1220
+ * its props and ref to the `button`, so it works as `DropdownMenuTrigger asChild`, and keeps its tile
1221
+ * on the menu icon column while the label and trailing content leave in the icon rail.
1222
+ * @param props - Tile, label, trailing content and native button attributes.
1223
+ * @returns The brand button.
1224
+ */
1225
+ function SidebarBrandButton(t0) {
1226
+ const $ = _c(23);
1227
+ let children;
1228
+ let className;
1229
+ let icon;
1230
+ let props;
1231
+ let t1;
1232
+ let trailing;
1233
+ if ($[0] !== t0) {
1234
+ ({icon, trailing, children, className, type: t1, ...props} = t0);
1235
+ $[0] = t0;
1236
+ $[1] = children;
1237
+ $[2] = className;
1238
+ $[3] = icon;
1239
+ $[4] = props;
1240
+ $[5] = t1;
1241
+ $[6] = trailing;
1242
+ } else {
1243
+ children = $[1];
1244
+ className = $[2];
1245
+ icon = $[3];
1246
+ props = $[4];
1247
+ t1 = $[5];
1248
+ trailing = $[6];
1249
+ }
1250
+ const type = t1 === undefined ? "button" : t1;
1251
+ const { collapsed } = useSidebarPanel();
1252
+ const textLabel = typeof children === "string" ? children : undefined;
1253
+ const t2 = collapsed ? textLabel : undefined;
1254
+ const t3 = collapsed ? textLabel : undefined;
1255
+ let t4;
1256
+ if ($[7] !== className) {
1257
+ t4 = cn("flex min-h-10 w-full min-w-0 items-center gap-3 rounded-xl px-2 py-1.5 text-left text-sm font-medium text-sidebar-foreground outline-none transition-colors", "hover:bg-sidebar-accent/70 focus-visible:bg-sidebar-accent/70 focus-visible:ring-2 focus-visible:ring-sidebar-ring data-[state=open]:bg-sidebar-accent/70", "disabled:cursor-not-allowed disabled:opacity-40", className);
1258
+ $[7] = className;
1259
+ $[8] = t4;
1260
+ } else {
1261
+ t4 = $[8];
1262
+ }
1263
+ let t5;
1264
+ if ($[9] !== icon) {
1265
+ t5 = /* @__PURE__ */ _jsx("span", {
1266
+ "aria-hidden": "true",
1267
+ "data-slot": "sidebar-brand-icon",
1268
+ className: "grid size-7 shrink-0 place-items-center overflow-hidden rounded-lg [&>img]:size-full [&>img]:object-cover",
1269
+ children: icon
1270
+ });
1271
+ $[9] = icon;
1272
+ $[10] = t5;
1273
+ } else {
1274
+ t5 = $[10];
1275
+ }
1276
+ let t6;
1277
+ if ($[11] !== children || $[12] !== collapsed || $[13] !== trailing) {
1278
+ t6 = collapsed ? null : /* @__PURE__ */ _jsxs(_Fragment, { children: [/* @__PURE__ */ _jsx("span", {
1279
+ className: "min-w-0 flex-1 truncate",
1280
+ children
1281
+ }), trailing ? /* @__PURE__ */ _jsx("span", {
1282
+ "aria-hidden": "true",
1283
+ className: "grid size-4 shrink-0 place-items-center text-sidebar-foreground/70 [&_svg]:size-3.5",
1284
+ children: trailing
1285
+ }) : null] });
1286
+ $[11] = children;
1287
+ $[12] = collapsed;
1288
+ $[13] = trailing;
1289
+ $[14] = t6;
1290
+ } else {
1291
+ t6 = $[14];
1292
+ }
1293
+ let t7;
1294
+ if ($[15] !== props || $[16] !== t2 || $[17] !== t3 || $[18] !== t4 || $[19] !== t5 || $[20] !== t6 || $[21] !== type) {
1295
+ t7 = /* @__PURE__ */ _jsxs("button", {
1296
+ "aria-label": t2,
1297
+ title: t3,
1298
+ ...props,
1299
+ type,
1300
+ "data-slot": "sidebar-brand-button",
1301
+ className: t4,
1302
+ children: [t5, t6]
1303
+ });
1304
+ $[15] = props;
1305
+ $[16] = t2;
1306
+ $[17] = t3;
1307
+ $[18] = t4;
1308
+ $[19] = t5;
1309
+ $[20] = t6;
1310
+ $[21] = type;
1311
+ $[22] = t7;
1312
+ } else {
1313
+ t7 = $[22];
1314
+ }
1315
+ return t7;
1316
+ }
1317
+ function SidebarGroup(t0) {
1318
+ const $ = _c(8);
1319
+ let className;
1320
+ let props;
1321
+ if ($[0] !== t0) {
1322
+ ({className, ...props} = t0);
1323
+ $[0] = t0;
1324
+ $[1] = className;
1325
+ $[2] = props;
1326
+ } else {
1327
+ className = $[1];
1328
+ props = $[2];
1329
+ }
1330
+ let t1;
1331
+ if ($[3] !== className) {
1332
+ t1 = cn("flex w-full min-w-0 flex-col px-1 py-1.5", className);
1333
+ $[3] = className;
1334
+ $[4] = t1;
1335
+ } else {
1336
+ t1 = $[4];
1337
+ }
1338
+ let t2;
1339
+ if ($[5] !== props || $[6] !== t1) {
1340
+ t2 = /* @__PURE__ */ _jsx("div", {
1341
+ ...props,
1342
+ "data-slot": "sidebar-group",
1343
+ className: t1
1344
+ });
1345
+ $[5] = props;
1346
+ $[6] = t1;
1347
+ $[7] = t2;
1348
+ } else {
1349
+ t2 = $[7];
1350
+ }
1351
+ return t2;
1352
+ }
1353
+ /** Section heading that fades out of the icon rail and is hidden from assistive technology there. */
1354
+ function SidebarGroupLabel(t0) {
1355
+ const $ = _c(10);
1356
+ let className;
1357
+ let props;
1358
+ if ($[0] !== t0) {
1359
+ ({className, ...props} = t0);
1360
+ $[0] = t0;
1361
+ $[1] = className;
1362
+ $[2] = props;
1363
+ } else {
1364
+ className = $[1];
1365
+ props = $[2];
1366
+ }
1367
+ const { collapsed } = useSidebarPanel();
1368
+ const t1 = collapsed ? "opacity-0" : "opacity-100";
1369
+ let t2;
1370
+ if ($[3] !== className || $[4] !== t1) {
1371
+ t2 = cn("mb-1 h-7 overflow-hidden px-2 text-xs font-medium text-sidebar-foreground/70 transition-opacity", t1, className);
1372
+ $[3] = className;
1373
+ $[4] = t1;
1374
+ $[5] = t2;
1375
+ } else {
1376
+ t2 = $[5];
1377
+ }
1378
+ let t3;
1379
+ if ($[6] !== collapsed || $[7] !== props || $[8] !== t2) {
1380
+ t3 = /* @__PURE__ */ _jsx("div", {
1381
+ ...props,
1382
+ "aria-hidden": collapsed,
1383
+ "data-slot": "sidebar-group-label",
1384
+ className: t2
1385
+ });
1386
+ $[6] = collapsed;
1387
+ $[7] = props;
1388
+ $[8] = t2;
1389
+ $[9] = t3;
1390
+ } else {
1391
+ t3 = $[9];
1392
+ }
1393
+ return t3;
1394
+ }
1395
+ function SidebarGroupContent(t0) {
1396
+ const $ = _c(8);
1397
+ let className;
1398
+ let props;
1399
+ if ($[0] !== t0) {
1400
+ ({className, ...props} = t0);
1401
+ $[0] = t0;
1402
+ $[1] = className;
1403
+ $[2] = props;
1404
+ } else {
1405
+ className = $[1];
1406
+ props = $[2];
1407
+ }
1408
+ let t1;
1409
+ if ($[3] !== className) {
1410
+ t1 = cn("w-full min-w-0", className);
1411
+ $[3] = className;
1412
+ $[4] = t1;
1413
+ } else {
1414
+ t1 = $[4];
1415
+ }
1416
+ let t2;
1417
+ if ($[5] !== props || $[6] !== t1) {
1418
+ t2 = /* @__PURE__ */ _jsx("div", {
1419
+ ...props,
1420
+ "data-slot": "sidebar-group-content",
1421
+ className: t1
1422
+ });
1423
+ $[5] = props;
1424
+ $[6] = t1;
1425
+ $[7] = t2;
1426
+ } else {
1427
+ t2 = $[7];
1428
+ }
1429
+ return t2;
1430
+ }
1431
+ /** Menu list; hovered items answer in color, as in Arc's sidebar rail. */
1432
+ function SidebarMenu(t0) {
1433
+ const $ = _c(8);
1434
+ let className;
1435
+ let props;
1436
+ if ($[0] !== t0) {
1437
+ ({className, ...props} = t0);
1438
+ $[0] = t0;
1439
+ $[1] = className;
1440
+ $[2] = props;
1441
+ } else {
1442
+ className = $[1];
1443
+ props = $[2];
1444
+ }
1445
+ let t1;
1446
+ if ($[3] !== className) {
1447
+ t1 = cn("flex w-full min-w-0 list-none flex-col gap-0.5", className);
1448
+ $[3] = className;
1449
+ $[4] = t1;
1450
+ } else {
1451
+ t1 = $[4];
1452
+ }
1453
+ let t2;
1454
+ if ($[5] !== props || $[6] !== t1) {
1455
+ t2 = /* @__PURE__ */ _jsx("ul", {
1456
+ ...props,
1457
+ "data-slot": "sidebar-menu",
1458
+ className: t1
1459
+ });
1460
+ $[5] = props;
1461
+ $[6] = t1;
1462
+ $[7] = t2;
1463
+ } else {
1464
+ t2 = $[7];
1465
+ }
1466
+ return t2;
1467
+ }
1468
+ function SidebarMenuItem(t0) {
1469
+ const $ = _c(8);
1470
+ let className;
1471
+ let props;
1472
+ if ($[0] !== t0) {
1473
+ ({className, ...props} = t0);
1474
+ $[0] = t0;
1475
+ $[1] = className;
1476
+ $[2] = props;
1477
+ } else {
1478
+ className = $[1];
1479
+ props = $[2];
1480
+ }
1481
+ let t1;
1482
+ if ($[3] !== className) {
1483
+ t1 = cn("relative", className);
1484
+ $[3] = className;
1485
+ $[4] = t1;
1486
+ } else {
1487
+ t1 = $[4];
1488
+ }
1489
+ let t2;
1490
+ if ($[5] !== props || $[6] !== t1) {
1491
+ t2 = /* @__PURE__ */ _jsx(motion.li, {
1492
+ ...props,
1493
+ "data-slot": "sidebar-menu-item",
1494
+ className: t1
1495
+ });
1496
+ $[5] = props;
1497
+ $[6] = t1;
1498
+ $[7] = t2;
1499
+ } else {
1500
+ t2 = $[7];
1501
+ }
1502
+ return t2;
1503
+ }
1504
+ /**
1505
+ * Height-animated wrapper of an open submenu. It clips overflow only while the height or the fade
1506
+ * runs, so the outward focus ring of its items is not cut once the submenu settles.
1507
+ * @param props - Reduced motion flag and the submenu list.
1508
+ * @returns The animated wrapper.
1509
+ */
1510
+ function SidebarMenuSubRegion(t0) {
1511
+ const $ = _c(14);
1512
+ const { reduce, children } = t0;
1513
+ const isMountedWithoutEntrance = React.useContext(PresenceContext)?.initial === false;
1514
+ const [isSettled, setIsSettled] = React.useState(isMountedWithoutEntrance);
1515
+ let t1;
1516
+ let t2;
1517
+ let t3;
1518
+ let t4;
1519
+ if ($[0] !== reduce) {
1520
+ t1 = reduce ? { opacity: 0 } : {
1521
+ height: 0,
1522
+ opacity: 0
1523
+ };
1524
+ t2 = reduce ? { opacity: 1 } : {
1525
+ height: "auto",
1526
+ opacity: 1,
1527
+ transition: SUBMENU_OPEN_TRANSITION
1528
+ };
1529
+ t3 = reduce ? { opacity: 0 } : {
1530
+ height: 0,
1531
+ opacity: 0,
1532
+ transition: SUBMENU_CLOSE_TRANSITION
1533
+ };
1534
+ t4 = reduce ? { duration: MOTION_TIMING.exit } : undefined;
1535
+ $[0] = reduce;
1536
+ $[1] = t1;
1537
+ $[2] = t2;
1538
+ $[3] = t3;
1539
+ $[4] = t4;
1540
+ } else {
1541
+ t1 = $[1];
1542
+ t2 = $[2];
1543
+ t3 = $[3];
1544
+ t4 = $[4];
1545
+ }
1546
+ const t5 = isSettled ? "overflow-visible" : "overflow-hidden";
1547
+ let t6;
1548
+ let t7;
1549
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
1550
+ t6 = () => setIsSettled(false);
1551
+ t7 = () => setIsSettled(true);
1552
+ $[5] = t6;
1553
+ $[6] = t7;
1554
+ } else {
1555
+ t6 = $[5];
1556
+ t7 = $[6];
1557
+ }
1558
+ let t8;
1559
+ if ($[7] !== children || $[8] !== t1 || $[9] !== t2 || $[10] !== t3 || $[11] !== t4 || $[12] !== t5) {
1560
+ t8 = /* @__PURE__ */ _jsx(motion.div, {
1561
+ initial: t1,
1562
+ animate: t2,
1563
+ exit: t3,
1564
+ transition: t4,
1565
+ className: t5,
1566
+ onAnimationStart: t6,
1567
+ onAnimationComplete: t7,
1568
+ children
1569
+ });
1570
+ $[7] = children;
1571
+ $[8] = t1;
1572
+ $[9] = t2;
1573
+ $[10] = t3;
1574
+ $[11] = t4;
1575
+ $[12] = t5;
1576
+ $[13] = t8;
1577
+ } else {
1578
+ t8 = $[13];
1579
+ }
1580
+ return t8;
1581
+ }
1582
+ /**
1583
+ * Nested list that opens its height on Arc's smooth spring.
1584
+ * @param props - Open state and motion-enabled list attributes.
1585
+ * @returns The submenu while open and the sidebar is expanded.
1586
+ */
1587
+ function SidebarMenuSub(t0) {
1588
+ const $ = _c(14);
1589
+ let children;
1590
+ let className;
1591
+ let open;
1592
+ let props;
1593
+ if ($[0] !== t0) {
1594
+ ({open, children, className, ...props} = t0);
1595
+ $[0] = t0;
1596
+ $[1] = children;
1597
+ $[2] = className;
1598
+ $[3] = open;
1599
+ $[4] = props;
1600
+ } else {
1601
+ children = $[1];
1602
+ className = $[2];
1603
+ open = $[3];
1604
+ props = $[4];
1605
+ }
1606
+ const context = useSidebar();
1607
+ const panel = useSidebarPanel();
1608
+ let t1;
1609
+ if ($[5] !== children || $[6] !== className || $[7] !== context || $[8] !== open || $[9] !== panel || $[10] !== props) {
1610
+ t1 = open && !panel.collapsed ? /* @__PURE__ */ _jsx(SidebarMenuSubRegion, {
1611
+ reduce: context.reduce,
1612
+ children: /* @__PURE__ */ _jsx(motion.ul, {
1613
+ ...props,
1614
+ "data-slot": "sidebar-menu-sub",
1615
+ className: cn("relative mt-1 ml-5 flex min-w-0 flex-col gap-0.5 border-l border-sidebar-border pl-3", className),
1616
+ children
1617
+ })
1618
+ }, "sidebar-submenu") : null;
1619
+ $[5] = children;
1620
+ $[6] = className;
1621
+ $[7] = context;
1622
+ $[8] = open;
1623
+ $[9] = panel;
1624
+ $[10] = props;
1625
+ $[11] = t1;
1626
+ } else {
1627
+ t1 = $[11];
1628
+ }
1629
+ let t2;
1630
+ if ($[12] !== t1) {
1631
+ t2 = /* @__PURE__ */ _jsx(AnimatePresence, {
1632
+ initial: false,
1633
+ children: t1
1634
+ });
1635
+ $[12] = t1;
1636
+ $[13] = t2;
1637
+ } else {
1638
+ t2 = $[13];
1639
+ }
1640
+ return t2;
1641
+ }
1642
+ function SidebarMenuSubItem(t0) {
1643
+ const $ = _c(8);
1644
+ let className;
1645
+ let props;
1646
+ if ($[0] !== t0) {
1647
+ ({className, ...props} = t0);
1648
+ $[0] = t0;
1649
+ $[1] = className;
1650
+ $[2] = props;
1651
+ } else {
1652
+ className = $[1];
1653
+ props = $[2];
1654
+ }
1655
+ let t1;
1656
+ if ($[3] !== className) {
1657
+ t1 = cn("relative min-w-0", className);
1658
+ $[3] = className;
1659
+ $[4] = t1;
1660
+ } else {
1661
+ t1 = $[4];
1662
+ }
1663
+ let t2;
1664
+ if ($[5] !== props || $[6] !== t1) {
1665
+ t2 = /* @__PURE__ */ _jsx(motion.li, {
1666
+ ...props,
1667
+ "data-slot": "sidebar-menu-sub-item",
1668
+ className: t1
1669
+ });
1670
+ $[5] = props;
1671
+ $[6] = t1;
1672
+ $[7] = t2;
1673
+ } else {
1674
+ t2 = $[7];
1675
+ }
1676
+ return t2;
1677
+ }
1678
+ /** Renders a menu action as a routed link or a button, both with the subtle press feedback. */
1679
+ function SidebarPressable(t0) {
1680
+ const $ = _c(16);
1681
+ const { slot, href, disabled, target, rel, isActive, ariaExpanded, ariaLabel, title, className, children, onClick } = t0;
1682
+ const t1 = isActive ? "page" : undefined;
1683
+ let t2;
1684
+ if ($[0] !== ariaExpanded || $[1] !== ariaLabel || $[2] !== className || $[3] !== isActive || $[4] !== onClick || $[5] !== slot || $[6] !== t1 || $[7] !== title) {
1685
+ t2 = {
1686
+ "data-slot": slot,
1687
+ "data-active": isActive,
1688
+ "aria-current": t1,
1689
+ "aria-expanded": ariaExpanded,
1690
+ "aria-label": ariaLabel,
1691
+ title,
1692
+ className,
1693
+ onClick
1694
+ };
1695
+ $[0] = ariaExpanded;
1696
+ $[1] = ariaLabel;
1697
+ $[2] = className;
1698
+ $[3] = isActive;
1699
+ $[4] = onClick;
1700
+ $[5] = slot;
1701
+ $[6] = t1;
1702
+ $[7] = title;
1703
+ $[8] = t2;
1704
+ } else {
1705
+ t2 = $[8];
1706
+ }
1707
+ const sharedProps = t2;
1708
+ let t3;
1709
+ if ($[9] !== children || $[10] !== disabled || $[11] !== href || $[12] !== rel || $[13] !== sharedProps || $[14] !== target) {
1710
+ t3 = href ? /* @__PURE__ */ _jsx(Link, {
1711
+ ...sharedProps,
1712
+ href,
1713
+ target,
1714
+ rel: rel ?? (target === EXTERNAL_LINK_TARGET ? EXTERNAL_LINK_REL : undefined),
1715
+ "aria-disabled": disabled || undefined,
1716
+ tabIndex: disabled ? -1 : undefined,
1717
+ children
1718
+ }) : /* @__PURE__ */ _jsx("button", {
1719
+ ...sharedProps,
1720
+ type: "button",
1721
+ disabled,
1722
+ children
1723
+ });
1724
+ $[9] = children;
1725
+ $[10] = disabled;
1726
+ $[11] = href;
1727
+ $[12] = rel;
1728
+ $[13] = sharedProps;
1729
+ $[14] = target;
1730
+ $[15] = t3;
1731
+ } else {
1732
+ t3 = $[15];
1733
+ }
1734
+ const element = t3;
1735
+ return element;
1736
+ }
1737
+ /**
1738
+ * Submenu entry; shows a dot when no icon is given.
1739
+ * @param props - Label, icon, link or select handler, active and disabled state.
1740
+ * @returns The submenu link or button.
1741
+ */
1742
+ function SidebarMenuSubButton(t0) {
1743
+ const $ = _c(25);
1744
+ const { children, icon, href, isActive: t1, disabled: t2, closeOnSelect: t3, target, rel, onSelect, className } = t0;
1745
+ const isActive = t1 === undefined ? false : t1;
1746
+ const disabled = t2 === undefined ? false : t2;
1747
+ const closeOnSelect = t3 === undefined ? true : t3;
1748
+ const context = useSidebar();
1749
+ let t4;
1750
+ if ($[0] !== closeOnSelect || $[1] !== context || $[2] !== disabled || $[3] !== onSelect) {
1751
+ t4 = (event) => {
1752
+ if (disabled) {
1753
+ event.preventDefault();
1754
+ return;
1755
+ }
1756
+ onSelect?.();
1757
+ if (context.isMobile && closeOnSelect) {
1758
+ context.setOpenMobile(false);
1759
+ }
1760
+ };
1761
+ $[0] = closeOnSelect;
1762
+ $[1] = context;
1763
+ $[2] = disabled;
1764
+ $[3] = onSelect;
1765
+ $[4] = t4;
1766
+ } else {
1767
+ t4 = $[4];
1768
+ }
1769
+ const select = t4;
1770
+ const t5 = isActive && "bg-sidebar-accent/70 text-sidebar-accent-foreground";
1771
+ const t6 = disabled && "cursor-not-allowed opacity-40";
1772
+ let t7;
1773
+ if ($[5] !== className || $[6] !== t5 || $[7] !== t6) {
1774
+ t7 = cn("flex min-h-8 w-full min-w-0 items-center gap-2 rounded-lg px-2 text-left text-xs outline-none", "text-sidebar-foreground/70 transition-colors hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground", "focus-visible:bg-sidebar-accent/70 focus-visible:ring-2 focus-visible:ring-sidebar-ring", t5, t6, className);
1775
+ $[5] = className;
1776
+ $[6] = t5;
1777
+ $[7] = t6;
1778
+ $[8] = t7;
1779
+ } else {
1780
+ t7 = $[8];
1781
+ }
1782
+ let t8;
1783
+ if ($[9] !== icon) {
1784
+ t8 = icon ?? /* @__PURE__ */ _jsx("span", { className: "size-1 rounded-full bg-current" });
1785
+ $[9] = icon;
1786
+ $[10] = t8;
1787
+ } else {
1788
+ t8 = $[10];
1789
+ }
1790
+ let t9;
1791
+ if ($[11] !== t8) {
1792
+ t9 = /* @__PURE__ */ _jsx("span", {
1793
+ "aria-hidden": "true",
1794
+ className: "grid size-4 shrink-0 place-items-center",
1795
+ children: t8
1796
+ });
1797
+ $[11] = t8;
1798
+ $[12] = t9;
1799
+ } else {
1800
+ t9 = $[12];
1801
+ }
1802
+ let t10;
1803
+ if ($[13] !== children) {
1804
+ t10 = /* @__PURE__ */ _jsx("span", {
1805
+ className: "min-w-0 flex-1 truncate",
1806
+ children
1807
+ });
1808
+ $[13] = children;
1809
+ $[14] = t10;
1810
+ } else {
1811
+ t10 = $[14];
1812
+ }
1813
+ let t11;
1814
+ if ($[15] !== disabled || $[16] !== href || $[17] !== isActive || $[18] !== rel || $[19] !== select || $[20] !== t10 || $[21] !== t7 || $[22] !== t9 || $[23] !== target) {
1815
+ t11 = /* @__PURE__ */ _jsxs(SidebarPressable, {
1816
+ slot: "sidebar-menu-sub-button",
1817
+ href,
1818
+ disabled,
1819
+ target,
1820
+ rel,
1821
+ isActive,
1822
+ onClick: select,
1823
+ className: t7,
1824
+ children: [t9, t10]
1825
+ });
1826
+ $[15] = disabled;
1827
+ $[16] = href;
1828
+ $[17] = isActive;
1829
+ $[18] = rel;
1830
+ $[19] = select;
1831
+ $[20] = t10;
1832
+ $[21] = t7;
1833
+ $[22] = t9;
1834
+ $[23] = target;
1835
+ $[24] = t11;
1836
+ } else {
1837
+ t11 = $[24];
1838
+ }
1839
+ return t11;
1840
+ }
1841
+ /**
1842
+ * Top-level menu entry: the active one carries a pill that glides between entries, and the label
1843
+ * fades out of the icon rail, leaving a string label as accessible name and native tooltip.
1844
+ * @param props - Label, icon, badge, link or select handler, submenu and active state.
1845
+ * @returns The menu link or button.
1846
+ */
1847
+ function SidebarMenuButton(t0) {
1848
+ const $ = _c(50);
1849
+ const { children, icon, badge, href, isActive: t1, ariaExpanded, disabled: t2, closeOnSelect, target, rel, onSelect, className } = t0;
1850
+ const isActive = t1 === undefined ? false : t1;
1851
+ const disabled = t2 === undefined ? false : t2;
1852
+ const context = useSidebar();
1853
+ const panel = useSidebarPanel();
1854
+ const textLabel = typeof children === "string" ? children : undefined;
1855
+ const collapsedLabel = panel.collapsed ? textLabel : undefined;
1856
+ let t3;
1857
+ if ($[0] !== ariaExpanded || $[1] !== closeOnSelect || $[2] !== context || $[3] !== disabled || $[4] !== onSelect || $[5] !== panel.collapsed) {
1858
+ t3 = (event) => {
1859
+ if (disabled) {
1860
+ event.preventDefault();
1861
+ return;
1862
+ }
1863
+ onSelect?.();
1864
+ const shouldCloseOnSelect = closeOnSelect ?? ariaExpanded === undefined;
1865
+ if (context.isMobile && shouldCloseOnSelect) {
1866
+ context.setOpenMobile(false);
1867
+ }
1868
+ if (ariaExpanded !== undefined && panel.collapsed && !context.isMobile) {
1869
+ context.setOpen(true);
1870
+ }
1871
+ };
1872
+ $[0] = ariaExpanded;
1873
+ $[1] = closeOnSelect;
1874
+ $[2] = context;
1875
+ $[3] = disabled;
1876
+ $[4] = onSelect;
1877
+ $[5] = panel.collapsed;
1878
+ $[6] = t3;
1879
+ } else {
1880
+ t3 = $[6];
1881
+ }
1882
+ const select = t3;
1883
+ const t4 = isActive && "text-sidebar-accent-foreground";
1884
+ const t5 = disabled && "cursor-not-allowed opacity-40";
1885
+ let t6;
1886
+ if ($[7] !== className || $[8] !== t4 || $[9] !== t5) {
1887
+ t6 = cn("relative flex min-h-9 w-full min-w-0 items-center gap-2.5 overflow-hidden rounded-xl px-3 text-left text-sm font-medium outline-none", "text-sidebar-foreground/70 transition-colors hover:text-sidebar-accent-foreground hover-fine:bg-sidebar-accent/70", "focus-visible:bg-sidebar-accent/70 focus-visible:ring-2 focus-visible:ring-sidebar-ring", t4, t5, className);
1888
+ $[7] = className;
1889
+ $[8] = t4;
1890
+ $[9] = t5;
1891
+ $[10] = t6;
1892
+ } else {
1893
+ t6 = $[10];
1894
+ }
1895
+ let t7;
1896
+ if ($[11] !== context.layoutId || $[12] !== context.reduce || $[13] !== isActive) {
1897
+ t7 = isActive ? /* @__PURE__ */ _jsx(motion.span, {
1898
+ "data-slot": "sidebar-menu-active-indicator",
1899
+ layoutId: context.layoutId,
1900
+ transition: context.reduce ? INSTANT_TRANSITION : SPRING_LAYOUT,
1901
+ className: "absolute inset-0 rounded-xl bg-sidebar-accent"
1902
+ }) : null;
1903
+ $[11] = context.layoutId;
1904
+ $[12] = context.reduce;
1905
+ $[13] = isActive;
1906
+ $[14] = t7;
1907
+ } else {
1908
+ t7 = $[14];
1909
+ }
1910
+ let t8;
1911
+ if ($[15] !== icon) {
1912
+ t8 = icon ? /* @__PURE__ */ _jsx("span", {
1913
+ "aria-hidden": "true",
1914
+ className: "relative z-10 grid size-5 shrink-0 place-items-center [&_svg]:size-4",
1915
+ children: icon
1916
+ }) : null;
1917
+ $[15] = icon;
1918
+ $[16] = t8;
1919
+ } else {
1920
+ t8 = $[16];
1921
+ }
1922
+ const t9 = panel.collapsed ? 0 : 1;
1923
+ const t10 = panel.collapsed ? -SIDEBAR_LABEL_DRIFT_PX : 0;
1924
+ let t11;
1925
+ if ($[17] !== t10 || $[18] !== t9) {
1926
+ t11 = {
1927
+ opacity: t9,
1928
+ x: t10
1929
+ };
1930
+ $[17] = t10;
1931
+ $[18] = t9;
1932
+ $[19] = t11;
1933
+ } else {
1934
+ t11 = $[19];
1935
+ }
1936
+ const t12 = context.reduce ? REDUCED_TRANSITION : panel.collapsed ? LABEL_EXIT_TRANSITION : LABEL_ENTER_TRANSITION;
1937
+ const t13 = panel.collapsed;
1938
+ const t14 = panel.collapsed && "pointer-events-none";
1939
+ let t15;
1940
+ if ($[20] !== t14) {
1941
+ t15 = cn("relative z-10 min-w-0 flex-1 truncate", t14);
1942
+ $[20] = t14;
1943
+ $[21] = t15;
1944
+ } else {
1945
+ t15 = $[21];
1946
+ }
1947
+ let t16;
1948
+ if ($[22] !== children || $[23] !== panel.collapsed || $[24] !== t11 || $[25] !== t12 || $[26] !== t15) {
1949
+ t16 = /* @__PURE__ */ _jsx(motion.span, {
1950
+ initial: false,
1951
+ animate: t11,
1952
+ transition: t12,
1953
+ "aria-hidden": t13,
1954
+ className: t15,
1955
+ children
1956
+ });
1957
+ $[22] = children;
1958
+ $[23] = panel.collapsed;
1959
+ $[24] = t11;
1960
+ $[25] = t12;
1961
+ $[26] = t15;
1962
+ $[27] = t16;
1963
+ } else {
1964
+ t16 = $[27];
1965
+ }
1966
+ let t17;
1967
+ if ($[28] !== badge || $[29] !== panel.collapsed) {
1968
+ t17 = badge && !panel.collapsed ? /* @__PURE__ */ _jsx("span", {
1969
+ className: "relative z-10 shrink-0 text-xs text-sidebar-foreground/70",
1970
+ children: badge
1971
+ }) : null;
1972
+ $[28] = badge;
1973
+ $[29] = panel.collapsed;
1974
+ $[30] = t17;
1975
+ } else {
1976
+ t17 = $[30];
1977
+ }
1978
+ let t18;
1979
+ if ($[31] !== ariaExpanded || $[32] !== context.reduce || $[33] !== panel.collapsed) {
1980
+ t18 = ariaExpanded !== undefined ? /* @__PURE__ */ _jsx(motion.span, {
1981
+ "aria-hidden": "true",
1982
+ initial: false,
1983
+ animate: {
1984
+ opacity: panel.collapsed ? 0 : 1,
1985
+ rotate: ariaExpanded ? SIDEBAR_CHEVRON_EXPANDED_DEGREES : 0,
1986
+ x: panel.collapsed ? SIDEBAR_LABEL_DRIFT_PX : 0
1987
+ },
1988
+ transition: context.reduce ? INSTANT_TRANSITION : SPRING_CHEVRON,
1989
+ className: "relative z-10 grid size-4 shrink-0 place-items-center text-sidebar-foreground/70",
1990
+ children: /* @__PURE__ */ _jsx(ChevronRight, { className: "size-3.5" })
1991
+ }) : null;
1992
+ $[31] = ariaExpanded;
1993
+ $[32] = context.reduce;
1994
+ $[33] = panel.collapsed;
1995
+ $[34] = t18;
1996
+ } else {
1997
+ t18 = $[34];
1998
+ }
1999
+ let t19;
2000
+ if ($[35] !== ariaExpanded || $[36] !== collapsedLabel || $[37] !== disabled || $[38] !== href || $[39] !== isActive || $[40] !== rel || $[41] !== select || $[42] !== t16 || $[43] !== t17 || $[44] !== t18 || $[45] !== t6 || $[46] !== t7 || $[47] !== t8 || $[48] !== target) {
2001
+ t19 = /* @__PURE__ */ _jsxs(SidebarPressable, {
2002
+ slot: "sidebar-menu-button",
2003
+ href,
2004
+ disabled,
2005
+ target,
2006
+ rel,
2007
+ isActive,
2008
+ ariaExpanded,
2009
+ ariaLabel: collapsedLabel,
2010
+ title: collapsedLabel,
2011
+ onClick: select,
2012
+ className: t6,
2013
+ children: [
2014
+ t7,
2015
+ t8,
2016
+ t16,
2017
+ t17,
2018
+ t18
2019
+ ]
2020
+ });
2021
+ $[35] = ariaExpanded;
2022
+ $[36] = collapsedLabel;
2023
+ $[37] = disabled;
2024
+ $[38] = href;
2025
+ $[39] = isActive;
2026
+ $[40] = rel;
2027
+ $[41] = select;
2028
+ $[42] = t16;
2029
+ $[43] = t17;
2030
+ $[44] = t18;
2031
+ $[45] = t6;
2032
+ $[46] = t7;
2033
+ $[47] = t8;
2034
+ $[48] = target;
2035
+ $[49] = t19;
2036
+ } else {
2037
+ t19 = $[49];
2038
+ }
2039
+ return t19;
2040
+ }
2041
+ export { Sidebar, SidebarBrandButton, SidebarClose, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInset, SidebarLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarTrigger, useSidebar, useSidebarPanel };