@caffeinebounce/ui 0.62.2

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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +39 -0
  3. package/dist/FinancialStatementTable-BNUrdTU4.d.cts +249 -0
  4. package/dist/FinancialStatementTable-BNUrdTU4.d.ts +249 -0
  5. package/dist/NewsletterSignup-BPreFi5W.d.cts +37 -0
  6. package/dist/NewsletterSignup-BPreFi5W.d.ts +37 -0
  7. package/dist/TestimonialsSection-DtPu2OeR.d.ts +736 -0
  8. package/dist/TestimonialsSection-z-yotRfv.d.cts +736 -0
  9. package/dist/UnifiedTableControls-CG299y9h.d.ts +1233 -0
  10. package/dist/UnifiedTableControls-CIjRpNhy.d.cts +1233 -0
  11. package/dist/blog.d.cts +99 -0
  12. package/dist/blog.d.ts +99 -0
  13. package/dist/blog.js +292 -0
  14. package/dist/blog.mjs +279 -0
  15. package/dist/button-BHnoRUkF.d.cts +34 -0
  16. package/dist/button-BHnoRUkF.d.ts +34 -0
  17. package/dist/charts.d.cts +80 -0
  18. package/dist/charts.d.ts +80 -0
  19. package/dist/charts.js +19 -0
  20. package/dist/charts.mjs +2 -0
  21. package/dist/chunk-33JR5SYE.js +44 -0
  22. package/dist/chunk-3NDB4YPC.js +247 -0
  23. package/dist/chunk-5RW4PYZ6.js +1504 -0
  24. package/dist/chunk-5THF4YP6.mjs +155 -0
  25. package/dist/chunk-6BUBNZPG.mjs +164 -0
  26. package/dist/chunk-6DVWMJ3H.mjs +7029 -0
  27. package/dist/chunk-6TGV2DNP.js +120 -0
  28. package/dist/chunk-72JGQ7IJ.mjs +1498 -0
  29. package/dist/chunk-7DHKQODW.mjs +2932 -0
  30. package/dist/chunk-7IKHZKAC.js +160 -0
  31. package/dist/chunk-ADIDI7AJ.js +11 -0
  32. package/dist/chunk-BFWX5GJZ.mjs +940 -0
  33. package/dist/chunk-BMFQG6RA.mjs +5537 -0
  34. package/dist/chunk-C4UT5V3P.js +65 -0
  35. package/dist/chunk-CC4KUIKC.js +2004 -0
  36. package/dist/chunk-D3QXPL47.mjs +1814 -0
  37. package/dist/chunk-DQWHYBV2.js +36 -0
  38. package/dist/chunk-E42B4GSB.js +993 -0
  39. package/dist/chunk-ESZ7CBA2.js +1007 -0
  40. package/dist/chunk-EYJJQVV4.js +111 -0
  41. package/dist/chunk-FRRS2YZH.mjs +129 -0
  42. package/dist/chunk-G5TQWWQA.mjs +37 -0
  43. package/dist/chunk-GAIQJCAZ.js +5612 -0
  44. package/dist/chunk-GMBGWOCR.mjs +48 -0
  45. package/dist/chunk-GUSTCU2W.mjs +105 -0
  46. package/dist/chunk-HBLKVQIQ.mjs +23 -0
  47. package/dist/chunk-HMAMMC72.js +26 -0
  48. package/dist/chunk-IMKLN273.mjs +9 -0
  49. package/dist/chunk-J6OLBSZR.js +250 -0
  50. package/dist/chunk-JAE45W2T.js +28 -0
  51. package/dist/chunk-JORVSG52.js +606 -0
  52. package/dist/chunk-KB7UXIQZ.mjs +984 -0
  53. package/dist/chunk-KGGQ5NZV.js +186 -0
  54. package/dist/chunk-KHCC5UKW.mjs +22 -0
  55. package/dist/chunk-KRRIRS6A.mjs +1945 -0
  56. package/dist/chunk-LQCVRWVF.js +48 -0
  57. package/dist/chunk-MHZXUOGN.mjs +168 -0
  58. package/dist/chunk-MPZFPU4X.js +349 -0
  59. package/dist/chunk-MVYRNJA6.js +74 -0
  60. package/dist/chunk-N6AFNFZR.mjs +565 -0
  61. package/dist/chunk-OFQLWSUR.mjs +214 -0
  62. package/dist/chunk-OLAAXLXY.mjs +219 -0
  63. package/dist/chunk-OZZWDIOY.js +1859 -0
  64. package/dist/chunk-PZRI43EZ.js +111 -0
  65. package/dist/chunk-Q256HRYD.js +176 -0
  66. package/dist/chunk-Q52ZEL62.mjs +223 -0
  67. package/dist/chunk-R26Y7LGJ.js +142 -0
  68. package/dist/chunk-RBUYW6QQ.js +39 -0
  69. package/dist/chunk-RVEFPVZF.mjs +43 -0
  70. package/dist/chunk-SORWLKOK.js +96 -0
  71. package/dist/chunk-STEP6C4C.mjs +33 -0
  72. package/dist/chunk-T5R6HUDG.mjs +22 -0
  73. package/dist/chunk-T6ZBA6VJ.js +7109 -0
  74. package/dist/chunk-UM7WMXIU.js +2995 -0
  75. package/dist/chunk-VBD4Q5LL.mjs +117 -0
  76. package/dist/chunk-WOITB4JL.js +195 -0
  77. package/dist/chunk-YKZEKJMZ.mjs +71 -0
  78. package/dist/chunk-YL7RZRHM.mjs +103 -0
  79. package/dist/chunk-YSLD2HLP.mjs +346 -0
  80. package/dist/chunk-ZFLZA7UP.mjs +140 -0
  81. package/dist/chunk-ZKUIUE7W.mjs +26 -0
  82. package/dist/chunk-ZOA7B32D.js +248 -0
  83. package/dist/data-table.d.cts +46 -0
  84. package/dist/data-table.d.ts +46 -0
  85. package/dist/data-table.js +270 -0
  86. package/dist/data-table.mjs +13 -0
  87. package/dist/editor.d.cts +89 -0
  88. package/dist/editor.d.ts +89 -0
  89. package/dist/editor.js +10 -0
  90. package/dist/editor.mjs +1 -0
  91. package/dist/forms.d.cts +142 -0
  92. package/dist/forms.d.ts +142 -0
  93. package/dist/forms.js +24 -0
  94. package/dist/forms.mjs +11 -0
  95. package/dist/hooks-8ORd7T1A.d.cts +751 -0
  96. package/dist/hooks-B2jU1GVT.d.ts +751 -0
  97. package/dist/hooks.d.cts +6 -0
  98. package/dist/hooks.d.ts +6 -0
  99. package/dist/hooks.js +99 -0
  100. package/dist/hooks.mjs +10 -0
  101. package/dist/index.d.cts +3141 -0
  102. package/dist/index.d.ts +3141 -0
  103. package/dist/index.js +7332 -0
  104. package/dist/index.mjs +5876 -0
  105. package/dist/layouts-DPfDDF53.d.cts +1001 -0
  106. package/dist/layouts-DPfDDF53.d.ts +1001 -0
  107. package/dist/layouts.d.cts +4 -0
  108. package/dist/layouts.d.ts +4 -0
  109. package/dist/layouts.js +100 -0
  110. package/dist/layouts.mjs +11 -0
  111. package/dist/marketing-3d.d.cts +51 -0
  112. package/dist/marketing-3d.d.ts +51 -0
  113. package/dist/marketing-3d.js +553 -0
  114. package/dist/marketing-3d.mjs +526 -0
  115. package/dist/marketing.d.cts +583 -0
  116. package/dist/marketing.d.ts +583 -0
  117. package/dist/marketing.js +299 -0
  118. package/dist/marketing.mjs +10 -0
  119. package/dist/media.d.cts +29 -0
  120. package/dist/media.d.ts +29 -0
  121. package/dist/media.js +189 -0
  122. package/dist/media.mjs +182 -0
  123. package/dist/navigation.d.cts +591 -0
  124. package/dist/navigation.d.ts +591 -0
  125. package/dist/navigation.js +108 -0
  126. package/dist/navigation.mjs +15 -0
  127. package/dist/portal.d.cts +58 -0
  128. package/dist/portal.d.ts +58 -0
  129. package/dist/portal.js +403 -0
  130. package/dist/portal.mjs +395 -0
  131. package/dist/primitives.d.cts +508 -0
  132. package/dist/primitives.d.ts +508 -0
  133. package/dist/primitives.js +295 -0
  134. package/dist/primitives.mjs +14 -0
  135. package/dist/settings.d.cts +216 -0
  136. package/dist/settings.d.ts +216 -0
  137. package/dist/settings.js +34 -0
  138. package/dist/settings.mjs +9 -0
  139. package/dist/shared-Dqn36QHZ.d.cts +4 -0
  140. package/dist/shared-Dqn36QHZ.d.ts +4 -0
  141. package/dist/styles.css +1213 -0
  142. package/package.json +189 -0
  143. package/styles.css +1 -0
@@ -0,0 +1,993 @@
1
+ 'use strict';
2
+
3
+ var chunkLQCVRWVF_js = require('./chunk-LQCVRWVF.js');
4
+ var chunk7IKHZKAC_js = require('./chunk-7IKHZKAC.js');
5
+ var chunkHMAMMC72_js = require('./chunk-HMAMMC72.js');
6
+ var chunkJ6OLBSZR_js = require('./chunk-J6OLBSZR.js');
7
+ var chunkDQWHYBV2_js = require('./chunk-DQWHYBV2.js');
8
+ var chunkQ256HRYD_js = require('./chunk-Q256HRYD.js');
9
+ var chunkADIDI7AJ_js = require('./chunk-ADIDI7AJ.js');
10
+ var jsxRuntime = require('react/jsx-runtime');
11
+ var reactSlot = require('@radix-ui/react-slot');
12
+ var TooltipPrimitive = require('@radix-ui/react-tooltip');
13
+ var classVarianceAuthority = require('class-variance-authority');
14
+ var lucideReact = require('lucide-react');
15
+ var React = require('react');
16
+ var AvatarPrimitive = require('@radix-ui/react-avatar');
17
+
18
+ function _interopNamespace(e) {
19
+ if (e && e.__esModule) return e;
20
+ var n = Object.create(null);
21
+ if (e) {
22
+ Object.keys(e).forEach(function (k) {
23
+ if (k !== 'default') {
24
+ var d = Object.getOwnPropertyDescriptor(e, k);
25
+ Object.defineProperty(n, k, d.get ? d : {
26
+ enumerable: true,
27
+ get: function () { return e[k]; }
28
+ });
29
+ }
30
+ });
31
+ }
32
+ n.default = e;
33
+ return Object.freeze(n);
34
+ }
35
+
36
+ var TooltipPrimitive__namespace = /*#__PURE__*/_interopNamespace(TooltipPrimitive);
37
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
38
+ var AvatarPrimitive__namespace = /*#__PURE__*/_interopNamespace(AvatarPrimitive);
39
+
40
+ function Kbd({ className, ...props }) {
41
+ return /* @__PURE__ */ jsxRuntime.jsx(
42
+ "kbd",
43
+ {
44
+ "data-slot": "kbd",
45
+ className: chunkADIDI7AJ_js.cn(
46
+ "bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none align-middle",
47
+ "[&_svg:not([class*='size-'])]:size-3",
48
+ // Inside tooltips: subtle background with visible text
49
+ "in-data-[slot=tooltip-content]:bg-foreground/10 in-data-[slot=tooltip-content]:text-popover-foreground/70",
50
+ className
51
+ ),
52
+ ...props
53
+ }
54
+ );
55
+ }
56
+ function KbdGroup({ className, ...props }) {
57
+ return /* @__PURE__ */ jsxRuntime.jsx(
58
+ "kbd",
59
+ {
60
+ "data-slot": "kbd-group",
61
+ className: chunkADIDI7AJ_js.cn("inline-flex items-center gap-1", className),
62
+ ...props
63
+ }
64
+ );
65
+ }
66
+ function KeyboardShortcut({
67
+ visible = true,
68
+ forceShow = false,
69
+ ...props
70
+ }) {
71
+ if (!forceShow && !visible) {
72
+ return null;
73
+ }
74
+ return /* @__PURE__ */ jsxRuntime.jsx(Kbd, { ...props });
75
+ }
76
+ var SIDEBAR_COOKIE_NAME = "sidebar_state";
77
+ var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
78
+ var SIDEBAR_WIDTH = "16rem";
79
+ var SIDEBAR_WIDTH_MOBILE = "18rem";
80
+ var SIDEBAR_WIDTH_ICON = "3rem";
81
+ var SIDEBAR_KEYBOARD_SHORTCUT = "b";
82
+ function resolveSidebarMode(width, desktopPref) {
83
+ if (width < 768) return "hidden";
84
+ if (desktopPref) return desktopPref;
85
+ return width < 1024 ? "collapsed" : "expanded";
86
+ }
87
+ function toDesktopPreference(open) {
88
+ if (open === void 0) return void 0;
89
+ return open ? "expanded" : "collapsed";
90
+ }
91
+ function getEffectiveMode(state) {
92
+ const resolved = resolveSidebarMode(state.viewportWidth, state.desktopPref);
93
+ if (resolved === "hidden") {
94
+ return state.openMobile ? "expanded" : "hidden";
95
+ }
96
+ return resolved;
97
+ }
98
+ function sidebarReducer(state, event) {
99
+ switch (event.type) {
100
+ case "VIEWPORT_CHANGED": {
101
+ return {
102
+ ...state,
103
+ viewportWidth: event.width,
104
+ hydrated: true,
105
+ openMobile: event.width < 768 ? state.openMobile : false
106
+ };
107
+ }
108
+ case "TOGGLE_DESKTOP": {
109
+ if (state.viewportWidth < 768) return state;
110
+ const currentMode = resolveSidebarMode(
111
+ state.viewportWidth,
112
+ state.desktopPref
113
+ );
114
+ return {
115
+ ...state,
116
+ desktopPref: currentMode === "expanded" ? "collapsed" : "expanded"
117
+ };
118
+ }
119
+ case "OPEN_MOBILE": {
120
+ if (state.viewportWidth >= 768) return state;
121
+ return { ...state, openMobile: true };
122
+ }
123
+ case "CLOSE_MOBILE": {
124
+ if (state.viewportWidth >= 768) return state;
125
+ return { ...state, openMobile: false };
126
+ }
127
+ case "SET_DESKTOP_PREF": {
128
+ return { ...state, desktopPref: event.pref };
129
+ }
130
+ default:
131
+ return state;
132
+ }
133
+ }
134
+ var SidebarContext = React__namespace.createContext(null);
135
+ function useSidebar() {
136
+ const context = React__namespace.useContext(SidebarContext);
137
+ if (!context) {
138
+ throw new Error("useSidebar must be used within a SidebarProvider.");
139
+ }
140
+ return context;
141
+ }
142
+ var SidebarProvider = React__namespace.forwardRef(
143
+ ({
144
+ defaultOpen,
145
+ open: openProp,
146
+ onOpenChange: setOpenProp,
147
+ className,
148
+ style,
149
+ children,
150
+ ...props
151
+ }, ref) => {
152
+ const [machine, dispatch] = React__namespace.useReducer(sidebarReducer, {
153
+ viewportWidth: typeof window === "undefined" ? 1024 : window.innerWidth,
154
+ desktopPref: toDesktopPreference(defaultOpen),
155
+ openMobile: false,
156
+ hydrated: typeof window === "undefined"
157
+ });
158
+ React__namespace.useLayoutEffect(() => {
159
+ const syncViewport = () => {
160
+ dispatch({ type: "VIEWPORT_CHANGED", width: window.innerWidth });
161
+ };
162
+ syncViewport();
163
+ window.addEventListener("resize", syncViewport);
164
+ return () => window.removeEventListener("resize", syncViewport);
165
+ }, []);
166
+ const controlledDesktopPref = toDesktopPreference(openProp);
167
+ React__namespace.useEffect(() => {
168
+ if (controlledDesktopPref) {
169
+ dispatch({ type: "SET_DESKTOP_PREF", pref: controlledDesktopPref });
170
+ }
171
+ }, [controlledDesktopPref]);
172
+ const desktopPref = controlledDesktopPref ?? machine.desktopPref;
173
+ const effectiveMode = React__namespace.useMemo(
174
+ () => getEffectiveMode({
175
+ ...machine,
176
+ desktopPref
177
+ }),
178
+ [desktopPref, machine]
179
+ );
180
+ const isMobile = machine.viewportWidth < 768;
181
+ const openMobile = isMobile && machine.openMobile;
182
+ const open = resolveSidebarMode(machine.viewportWidth, desktopPref) === "expanded";
183
+ const setDesktopPreference = React__namespace.useCallback(
184
+ (pref) => {
185
+ if (setOpenProp) {
186
+ setOpenProp(pref === "expanded");
187
+ }
188
+ if (openProp === void 0) {
189
+ dispatch({ type: "SET_DESKTOP_PREF", pref });
190
+ }
191
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${pref === "expanded"}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
192
+ },
193
+ [openProp, setOpenProp]
194
+ );
195
+ const setOpen = React__namespace.useCallback(
196
+ (nextOpen) => {
197
+ setDesktopPreference(nextOpen ? "expanded" : "collapsed");
198
+ },
199
+ [setDesktopPreference]
200
+ );
201
+ const setOpenMobile = React__namespace.useCallback((nextOpen) => {
202
+ dispatch({ type: nextOpen ? "OPEN_MOBILE" : "CLOSE_MOBILE" });
203
+ }, []);
204
+ const toggleSidebar = React__namespace.useCallback(() => {
205
+ if (isMobile) {
206
+ dispatch({ type: openMobile ? "CLOSE_MOBILE" : "OPEN_MOBILE" });
207
+ return;
208
+ }
209
+ const nextPref = open ? "collapsed" : "expanded";
210
+ if (setOpenProp) {
211
+ setOpenProp(nextPref === "expanded");
212
+ }
213
+ if (openProp === void 0) {
214
+ dispatch({ type: "TOGGLE_DESKTOP" });
215
+ }
216
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${nextPref === "expanded"}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
217
+ }, [isMobile, open, openMobile, openProp, setOpenProp]);
218
+ React__namespace.useEffect(() => {
219
+ const handleKeyDown = (event) => {
220
+ if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
221
+ event.preventDefault();
222
+ toggleSidebar();
223
+ }
224
+ };
225
+ window.addEventListener("keydown", handleKeyDown);
226
+ return () => window.removeEventListener("keydown", handleKeyDown);
227
+ }, [toggleSidebar]);
228
+ const mode = effectiveMode;
229
+ const state = mode === "expanded" ? "expanded" : "collapsed";
230
+ const ready = machine.hydrated;
231
+ const contextValue = React__namespace.useMemo(
232
+ () => ({
233
+ state,
234
+ mode,
235
+ open,
236
+ setOpen,
237
+ isMobile,
238
+ openMobile,
239
+ setOpenMobile,
240
+ ready,
241
+ toggleSidebar
242
+ }),
243
+ [
244
+ state,
245
+ mode,
246
+ open,
247
+ setOpen,
248
+ isMobile,
249
+ openMobile,
250
+ setOpenMobile,
251
+ ready,
252
+ toggleSidebar
253
+ ]
254
+ );
255
+ return /* @__PURE__ */ jsxRuntime.jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Provider, { delayDuration: 0, children: /* @__PURE__ */ jsxRuntime.jsx(
256
+ "div",
257
+ {
258
+ style: {
259
+ "--sidebar-width": SIDEBAR_WIDTH,
260
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
261
+ ...style
262
+ },
263
+ className: chunkADIDI7AJ_js.cn(
264
+ "group/sidebar-wrapper flex h-full min-h-0 w-full has-data-[variant=inset]:bg-sidebar",
265
+ className
266
+ ),
267
+ ref,
268
+ ...props,
269
+ children
270
+ }
271
+ ) }) });
272
+ }
273
+ );
274
+ SidebarProvider.displayName = "SidebarProvider";
275
+ var Sidebar = React__namespace.forwardRef(
276
+ ({
277
+ side = "left",
278
+ variant = "sidebar",
279
+ collapsible = "offcanvas",
280
+ className,
281
+ children,
282
+ ...props
283
+ }, ref) => {
284
+ const { isMobile, state, openMobile, setOpenMobile, ready } = useSidebar();
285
+ if (collapsible === "none") {
286
+ return /* @__PURE__ */ jsxRuntime.jsx(
287
+ "div",
288
+ {
289
+ className: chunkADIDI7AJ_js.cn(
290
+ "flex h-full w-[--sidebar-width] flex-col bg-sidebar text-sidebar-foreground",
291
+ className
292
+ ),
293
+ ref,
294
+ ...props,
295
+ children
296
+ }
297
+ );
298
+ }
299
+ if (isMobile) {
300
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk7IKHZKAC_js.Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxRuntime.jsxs(
301
+ chunk7IKHZKAC_js.SheetContent,
302
+ {
303
+ "data-sidebar": "sidebar",
304
+ "data-mobile": "true",
305
+ className: "w-[--sidebar-width] bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",
306
+ style: {
307
+ "--sidebar-width": SIDEBAR_WIDTH_MOBILE
308
+ },
309
+ side,
310
+ children: [
311
+ /* @__PURE__ */ jsxRuntime.jsxs(chunk7IKHZKAC_js.SheetHeader, { className: "sr-only", children: [
312
+ /* @__PURE__ */ jsxRuntime.jsx(chunk7IKHZKAC_js.SheetTitle, { children: "Sidebar" }),
313
+ /* @__PURE__ */ jsxRuntime.jsx(chunk7IKHZKAC_js.SheetDescription, { children: "Displays the mobile sidebar." })
314
+ ] }),
315
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full flex-col", children })
316
+ ]
317
+ }
318
+ ) });
319
+ }
320
+ return /* @__PURE__ */ jsxRuntime.jsxs(
321
+ "div",
322
+ {
323
+ ref,
324
+ className: chunkADIDI7AJ_js.cn(
325
+ "group peer hidden md:block text-sidebar-foreground",
326
+ !ready && "md:invisible [&_*]:!transition-none [&_*]:!duration-0"
327
+ ),
328
+ "data-state": state,
329
+ "data-collapsible": state === "collapsed" ? collapsible : "",
330
+ "data-variant": variant,
331
+ "data-side": side,
332
+ children: [
333
+ /* @__PURE__ */ jsxRuntime.jsx(
334
+ "div",
335
+ {
336
+ className: chunkADIDI7AJ_js.cn(
337
+ "duration-200 relative h-svh bg-transparent transition-[width] ease-linear shrink-0",
338
+ "group-data-[collapsible=offcanvas]:w-0",
339
+ "group-data-[side=right]:rotate-180",
340
+ variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+1rem)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
341
+ ),
342
+ style: {
343
+ width: state === "collapsed" ? void 0 : "var(--sidebar-width)"
344
+ }
345
+ }
346
+ ),
347
+ /* @__PURE__ */ jsxRuntime.jsx(
348
+ "div",
349
+ {
350
+ className: chunkADIDI7AJ_js.cn(
351
+ "duration-200 fixed inset-y-0 z-10 hidden h-svh transition-[left,right,width] ease-linear md:flex",
352
+ side === "left" ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
353
+ // Adjust the padding for floating and inset variants.
354
+ variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+1rem+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",
355
+ className
356
+ ),
357
+ style: {
358
+ width: state === "collapsed" ? void 0 : "var(--sidebar-width)"
359
+ },
360
+ ...props,
361
+ children: /* @__PURE__ */ jsxRuntime.jsx(
362
+ "div",
363
+ {
364
+ "data-sidebar": "sidebar",
365
+ className: chunkADIDI7AJ_js.cn(
366
+ "flex h-full w-full flex-col bg-sidebar overflow-x-hidden group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow"
367
+ ),
368
+ children
369
+ }
370
+ )
371
+ }
372
+ )
373
+ ]
374
+ }
375
+ );
376
+ }
377
+ );
378
+ Sidebar.displayName = "Sidebar";
379
+ var SidebarTrigger = React__namespace.forwardRef(({ className, onClick, ...props }, ref) => {
380
+ const { toggleSidebar } = useSidebar();
381
+ return /* @__PURE__ */ jsxRuntime.jsxs(
382
+ "button",
383
+ {
384
+ ref,
385
+ type: "button",
386
+ "data-sidebar": "trigger",
387
+ className: chunkADIDI7AJ_js.cn(
388
+ "inline-flex h-8 w-8 items-center justify-center rounded-md text-icon transition-colors hover:text-icon-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
389
+ className
390
+ ),
391
+ onClick: (event) => {
392
+ onClick?.(event);
393
+ toggleSidebar();
394
+ },
395
+ ...props,
396
+ children: [
397
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PanelLeft, { className: "h-4 w-4 transition-transform duration-300 hover:rotate-12" }),
398
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Toggle Sidebar" })
399
+ ]
400
+ }
401
+ );
402
+ });
403
+ SidebarTrigger.displayName = "SidebarTrigger";
404
+ var SidebarRail = React__namespace.forwardRef(({ className, ...props }, ref) => {
405
+ const { toggleSidebar } = useSidebar();
406
+ return /* @__PURE__ */ jsxRuntime.jsx(
407
+ "button",
408
+ {
409
+ ref,
410
+ "data-sidebar": "rail",
411
+ "aria-label": "Toggle Sidebar",
412
+ tabIndex: -1,
413
+ onClick: toggleSidebar,
414
+ title: "Toggle Sidebar",
415
+ className: chunkADIDI7AJ_js.cn(
416
+ "absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex",
417
+ "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
418
+ "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
419
+ "group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar",
420
+ "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
421
+ "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
422
+ className
423
+ ),
424
+ ...props
425
+ }
426
+ );
427
+ });
428
+ SidebarRail.displayName = "SidebarRail";
429
+ var SidebarInset = React__namespace.forwardRef(({ className, ...props }, ref) => {
430
+ return /* @__PURE__ */ jsxRuntime.jsx(
431
+ "main",
432
+ {
433
+ ref,
434
+ className: chunkADIDI7AJ_js.cn(
435
+ // h-full + min-h-0: inherit height, allow shrinking
436
+ // flex-col: stack header and content vertically
437
+ "relative flex h-full min-h-0 flex-1 flex-col min-w-0 bg-background",
438
+ "peer-data-[variant=inset]:h-[calc(100%-1rem)] peer-data-[variant=inset]:min-h-0 md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow",
439
+ className
440
+ ),
441
+ ...props
442
+ }
443
+ );
444
+ });
445
+ SidebarInset.displayName = "SidebarInset";
446
+ var SidebarInput = React__namespace.forwardRef(({ className, ...props }, ref) => {
447
+ return /* @__PURE__ */ jsxRuntime.jsx(
448
+ chunkDQWHYBV2_js.Input,
449
+ {
450
+ ref,
451
+ "data-sidebar": "input",
452
+ className: chunkADIDI7AJ_js.cn(
453
+ "h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring",
454
+ className
455
+ ),
456
+ ...props
457
+ }
458
+ );
459
+ });
460
+ SidebarInput.displayName = "SidebarInput";
461
+ var SidebarHeader = React__namespace.forwardRef(({ className, ...props }, ref) => {
462
+ return /* @__PURE__ */ jsxRuntime.jsx(
463
+ "div",
464
+ {
465
+ ref,
466
+ "data-sidebar": "header",
467
+ className: chunkADIDI7AJ_js.cn("flex flex-col gap-2 p-2", className),
468
+ ...props
469
+ }
470
+ );
471
+ });
472
+ SidebarHeader.displayName = "SidebarHeader";
473
+ var SidebarFooter = React__namespace.forwardRef(({ className, ...props }, ref) => {
474
+ return /* @__PURE__ */ jsxRuntime.jsx(
475
+ "div",
476
+ {
477
+ ref,
478
+ "data-sidebar": "footer",
479
+ className: chunkADIDI7AJ_js.cn("flex flex-col gap-2 p-2", className),
480
+ ...props
481
+ }
482
+ );
483
+ });
484
+ SidebarFooter.displayName = "SidebarFooter";
485
+ var SidebarSeparator = React__namespace.forwardRef(({ className, ...props }, ref) => {
486
+ return /* @__PURE__ */ jsxRuntime.jsx(
487
+ chunkLQCVRWVF_js.Separator,
488
+ {
489
+ ref,
490
+ "data-sidebar": "separator",
491
+ className: chunkADIDI7AJ_js.cn("mx-2 w-auto bg-sidebar-border", className),
492
+ ...props
493
+ }
494
+ );
495
+ });
496
+ SidebarSeparator.displayName = "SidebarSeparator";
497
+ var SidebarContent = React__namespace.forwardRef(({ className, ...props }, ref) => {
498
+ return /* @__PURE__ */ jsxRuntime.jsx(
499
+ "div",
500
+ {
501
+ ref,
502
+ "data-sidebar": "content",
503
+ className: chunkADIDI7AJ_js.cn(
504
+ "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",
505
+ className
506
+ ),
507
+ ...props
508
+ }
509
+ );
510
+ });
511
+ SidebarContent.displayName = "SidebarContent";
512
+ var SidebarGroup = React__namespace.forwardRef(({ className, ...props }, ref) => {
513
+ return /* @__PURE__ */ jsxRuntime.jsx(
514
+ "div",
515
+ {
516
+ ref,
517
+ "data-sidebar": "group",
518
+ className: chunkADIDI7AJ_js.cn("relative flex w-full min-w-0 flex-col p-2", className),
519
+ ...props
520
+ }
521
+ );
522
+ });
523
+ SidebarGroup.displayName = "SidebarGroup";
524
+ var SidebarGroupLabel = React__namespace.forwardRef(({ className, asChild = false, ...props }, ref) => {
525
+ const Comp = asChild ? reactSlot.Slot : "div";
526
+ return /* @__PURE__ */ jsxRuntime.jsx(
527
+ Comp,
528
+ {
529
+ ref,
530
+ "data-sidebar": "group-label",
531
+ className: chunkADIDI7AJ_js.cn(
532
+ "duration-200 flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opa] ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
533
+ "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",
534
+ className
535
+ ),
536
+ ...props
537
+ }
538
+ );
539
+ });
540
+ SidebarGroupLabel.displayName = "SidebarGroupLabel";
541
+ var SidebarGroupAction = React__namespace.forwardRef(({ className, asChild = false, ...props }, ref) => {
542
+ const Comp = asChild ? reactSlot.Slot : "button";
543
+ return /* @__PURE__ */ jsxRuntime.jsx(
544
+ Comp,
545
+ {
546
+ ref,
547
+ "data-sidebar": "group-action",
548
+ className: chunkADIDI7AJ_js.cn(
549
+ "absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
550
+ // Increases the hit area of the button on mobile.
551
+ "after:absolute after:-inset-2 after:md:hidden",
552
+ "group-data-[collapsible=icon]:hidden",
553
+ className
554
+ ),
555
+ ...props
556
+ }
557
+ );
558
+ });
559
+ SidebarGroupAction.displayName = "SidebarGroupAction";
560
+ var SidebarGroupContent = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
561
+ "div",
562
+ {
563
+ ref,
564
+ "data-sidebar": "group-content",
565
+ className: chunkADIDI7AJ_js.cn("w-full text-sm", className),
566
+ ...props
567
+ }
568
+ ));
569
+ SidebarGroupContent.displayName = "SidebarGroupContent";
570
+ var SidebarMenu = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
571
+ "ul",
572
+ {
573
+ ref,
574
+ "data-sidebar": "menu",
575
+ className: chunkADIDI7AJ_js.cn("flex w-full min-w-0 flex-col gap-1", className),
576
+ ...props
577
+ }
578
+ ));
579
+ SidebarMenu.displayName = "SidebarMenu";
580
+ var SidebarMenuItem = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
581
+ "li",
582
+ {
583
+ ref,
584
+ "data-sidebar": "menu-item",
585
+ className: chunkADIDI7AJ_js.cn("group/menu-item relative", className),
586
+ ...props
587
+ }
588
+ ));
589
+ SidebarMenuItem.displayName = "SidebarMenuItem";
590
+ var sidebarMenuButtonVariants = classVarianceAuthority.cva(
591
+ "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] 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 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
592
+ {
593
+ variants: {
594
+ variant: {
595
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
596
+ outline: "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"
597
+ },
598
+ size: {
599
+ default: "h-8 text-sm",
600
+ sm: "h-7 text-xs",
601
+ lg: "h-12 text-sm group-data-[collapsible=icon]:!p-0 group-data-[collapsible=icon]:!gap-0 group-data-[collapsible=icon]:!size-8 [.group[data-collapsible=icon]_&]:hover:!bg-transparent [.group[data-collapsible=icon]_&]:active:!bg-transparent"
602
+ }
603
+ },
604
+ defaultVariants: {
605
+ variant: "default",
606
+ size: "default"
607
+ }
608
+ }
609
+ );
610
+ var SidebarMenuButton = React__namespace.forwardRef(
611
+ ({
612
+ asChild = false,
613
+ isActive = false,
614
+ variant = "default",
615
+ size = "default",
616
+ tooltip,
617
+ className,
618
+ ...props
619
+ }, ref) => {
620
+ const Comp = asChild ? reactSlot.Slot : "button";
621
+ const { isMobile, state } = useSidebar();
622
+ const button = /* @__PURE__ */ jsxRuntime.jsx(
623
+ Comp,
624
+ {
625
+ ref,
626
+ "data-sidebar": "menu-button",
627
+ "data-size": size,
628
+ "data-active": isActive,
629
+ className: chunkADIDI7AJ_js.cn(sidebarMenuButtonVariants({ variant, size }), className),
630
+ ...props
631
+ }
632
+ );
633
+ if (!tooltip) {
634
+ return button;
635
+ }
636
+ if (typeof tooltip === "string") {
637
+ tooltip = {
638
+ children: tooltip
639
+ };
640
+ }
641
+ return /* @__PURE__ */ jsxRuntime.jsxs(TooltipPrimitive__namespace.Root, { children: [
642
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Trigger, { asChild: true, children: button }),
643
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
644
+ TooltipContent,
645
+ {
646
+ side: "right",
647
+ align: "center",
648
+ hidden: state !== "collapsed" || isMobile,
649
+ ...tooltip
650
+ }
651
+ ) })
652
+ ] });
653
+ }
654
+ );
655
+ SidebarMenuButton.displayName = "SidebarMenuButton";
656
+ var TooltipContent = React__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
657
+ TooltipPrimitive__namespace.Content,
658
+ {
659
+ ref,
660
+ sideOffset,
661
+ className: chunkADIDI7AJ_js.cn(
662
+ "z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 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",
663
+ className
664
+ ),
665
+ ...props
666
+ }
667
+ ));
668
+ TooltipContent.displayName = TooltipPrimitive__namespace.Content.displayName;
669
+ var SidebarMenuAction = React__namespace.forwardRef(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
670
+ const Comp = asChild ? reactSlot.Slot : "button";
671
+ return /* @__PURE__ */ jsxRuntime.jsx(
672
+ Comp,
673
+ {
674
+ ref,
675
+ "data-sidebar": "menu-action",
676
+ className: chunkADIDI7AJ_js.cn(
677
+ "absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0",
678
+ // Increases the hit area of the button on mobile.
679
+ "after:absolute after:-inset-2 after:md:hidden",
680
+ "peer-data-[size=sm]/menu-button:top-1",
681
+ "peer-data-[size=default]/menu-button:top-1.5",
682
+ "peer-data-[size=lg]/menu-button:top-2.5",
683
+ "group-data-[collapsible=icon]:hidden",
684
+ showOnHover && "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0",
685
+ className
686
+ ),
687
+ ...props
688
+ }
689
+ );
690
+ });
691
+ SidebarMenuAction.displayName = "SidebarMenuAction";
692
+ var SidebarMenuBadge = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
693
+ "div",
694
+ {
695
+ ref,
696
+ "data-sidebar": "menu-badge",
697
+ className: chunkADIDI7AJ_js.cn(
698
+ "absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground select-none pointer-events-none",
699
+ "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground",
700
+ "peer-data-[size=sm]/menu-button:top-1",
701
+ "peer-data-[size=default]/menu-button:top-1.5",
702
+ "peer-data-[size=lg]/menu-button:top-2.5",
703
+ "group-data-[collapsible=icon]:hidden",
704
+ className
705
+ ),
706
+ ...props
707
+ }
708
+ ));
709
+ SidebarMenuBadge.displayName = "SidebarMenuBadge";
710
+ var SidebarMenuSkeleton = React__namespace.forwardRef(({ className, showIcon = false, ...props }, ref) => {
711
+ const width = React__namespace.useMemo(() => {
712
+ return `${Math.floor(Math.random() * 40) + 50}%`;
713
+ }, []);
714
+ return /* @__PURE__ */ jsxRuntime.jsxs(
715
+ "div",
716
+ {
717
+ ref,
718
+ "data-sidebar": "menu-skeleton",
719
+ className: chunkADIDI7AJ_js.cn("rounded-md h-8 flex gap-2 px-2 items-center", className),
720
+ ...props,
721
+ children: [
722
+ showIcon && /* @__PURE__ */ jsxRuntime.jsx(
723
+ "div",
724
+ {
725
+ className: "size-4 rounded-md bg-sidebar-accent-foreground/10",
726
+ "data-skeleton": "icon"
727
+ }
728
+ ),
729
+ /* @__PURE__ */ jsxRuntime.jsx(
730
+ "div",
731
+ {
732
+ className: "h-4 flex-1 max-w-[--skeleton-width] rounded-md bg-sidebar-accent-foreground/10",
733
+ "data-skeleton": "text",
734
+ style: {
735
+ "--skeleton-width": width
736
+ }
737
+ }
738
+ )
739
+ ]
740
+ }
741
+ );
742
+ });
743
+ SidebarMenuSkeleton.displayName = "SidebarMenuSkeleton";
744
+ var SidebarMenuSub = React__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
745
+ "ul",
746
+ {
747
+ ref,
748
+ "data-sidebar": "menu-sub",
749
+ className: chunkADIDI7AJ_js.cn(
750
+ "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",
751
+ "group-data-[collapsible=icon]:hidden",
752
+ className
753
+ ),
754
+ ...props
755
+ }
756
+ ));
757
+ SidebarMenuSub.displayName = "SidebarMenuSub";
758
+ var SidebarMenuSubItem = React__namespace.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("li", { ref, ...props }));
759
+ SidebarMenuSubItem.displayName = "SidebarMenuSubItem";
760
+ var SidebarMenuSubButton = React__namespace.forwardRef(({ asChild = false, size = "md", isActive, className, ...props }, ref) => {
761
+ const Comp = asChild ? reactSlot.Slot : "a";
762
+ return /* @__PURE__ */ jsxRuntime.jsx(
763
+ Comp,
764
+ {
765
+ ref,
766
+ "data-sidebar": "menu-sub-button",
767
+ "data-size": size,
768
+ "data-active": isActive,
769
+ className: chunkADIDI7AJ_js.cn(
770
+ "flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-none ring-sidebar-ring 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 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground",
771
+ "data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground",
772
+ size === "sm" && "text-xs",
773
+ size === "md" && "text-sm",
774
+ "group-data-[collapsible=icon]:hidden",
775
+ className
776
+ ),
777
+ ...props
778
+ }
779
+ );
780
+ });
781
+ SidebarMenuSubButton.displayName = "SidebarMenuSubButton";
782
+ function Avatar({
783
+ className,
784
+ ...props
785
+ }) {
786
+ return /* @__PURE__ */ jsxRuntime.jsx(
787
+ AvatarPrimitive__namespace.Root,
788
+ {
789
+ "data-slot": "avatar",
790
+ className: chunkADIDI7AJ_js.cn(
791
+ "relative flex size-10 shrink-0 overflow-hidden rounded-full",
792
+ className
793
+ ),
794
+ ...props
795
+ }
796
+ );
797
+ }
798
+ function AvatarImage({
799
+ className,
800
+ ...props
801
+ }) {
802
+ return /* @__PURE__ */ jsxRuntime.jsx(
803
+ AvatarPrimitive__namespace.Image,
804
+ {
805
+ "data-slot": "avatar-image",
806
+ className: chunkADIDI7AJ_js.cn("aspect-square size-full object-cover", className),
807
+ ...props
808
+ }
809
+ );
810
+ }
811
+ function AvatarFallback({
812
+ className,
813
+ ...props
814
+ }) {
815
+ return /* @__PURE__ */ jsxRuntime.jsx(
816
+ AvatarPrimitive__namespace.Fallback,
817
+ {
818
+ "data-slot": "avatar-fallback",
819
+ className: chunkADIDI7AJ_js.cn(
820
+ "bg-muted flex size-full items-center justify-center rounded-full",
821
+ className
822
+ ),
823
+ ...props
824
+ }
825
+ );
826
+ }
827
+ var sizeClasses = {
828
+ sm: "h-6 w-6",
829
+ md: "h-8 w-8",
830
+ lg: "h-10 w-10"
831
+ };
832
+ var avatarTextSizes = {
833
+ sm: "text-xs",
834
+ md: "text-xs",
835
+ lg: "text-sm"
836
+ };
837
+ function UserAvatarMenu({
838
+ user,
839
+ loading = false,
840
+ items,
841
+ size = "md",
842
+ side = "bottom",
843
+ align = "end",
844
+ open,
845
+ onOpenChange,
846
+ showChevron = false,
847
+ isActive = false,
848
+ trigger,
849
+ header,
850
+ showUserInfo = false,
851
+ menuShortcut,
852
+ menuWidth,
853
+ className = "",
854
+ avatarClassName = "",
855
+ LinkComponent,
856
+ ShortcutComponent
857
+ }) {
858
+ const Shortcut = ShortcutComponent || KeyboardShortcut;
859
+ const sizeClass = sizeClasses[size];
860
+ const textSize = avatarTextSizes[size];
861
+ if (loading) {
862
+ return /* @__PURE__ */ jsxRuntime.jsx(
863
+ "div",
864
+ {
865
+ className: `inline-flex items-center justify-center rounded-md ${sizeClass} ${className}`,
866
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkHMAMMC72_js.Spinner, { size: "sm" })
867
+ }
868
+ );
869
+ }
870
+ const { id, email, avatarUrl, name, initials } = user;
871
+ const displayInitials = initials || name?.[0]?.toUpperCase() || "U";
872
+ const gradient = chunkQ256HRYD_js.getAvatarGradient(id);
873
+ const avatarContent = /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: `${sizeClass} rounded-full ${avatarClassName}`, children: [
874
+ avatarUrl && /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarUrl, alt: name || email || "User" }),
875
+ /* @__PURE__ */ jsxRuntime.jsx(
876
+ AvatarFallback,
877
+ {
878
+ className: `rounded-full font-medium text-white ${textSize}`,
879
+ style: gradient.style,
880
+ children: displayInitials
881
+ }
882
+ )
883
+ ] });
884
+ const defaultTrigger = /* @__PURE__ */ jsxRuntime.jsxs(
885
+ "button",
886
+ {
887
+ type: "button",
888
+ className: `inline-flex items-center justify-center rounded-full focus:outline-none focus-visible:ring-2 focus-visible:ring-ring transition-all hover:scale-105 ${isActive ? "ring-2 ring-primary" : ""} ${className}`,
889
+ children: [
890
+ avatarContent,
891
+ showChevron && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { className: "ml-1 size-4" }),
892
+ menuShortcut && /* @__PURE__ */ jsxRuntime.jsx(Shortcut, { className: "ml-auto hidden text-xs text-muted-foreground md:inline-flex", children: menuShortcut }),
893
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "User menu" })
894
+ ]
895
+ }
896
+ );
897
+ const renderMenuItem = (item) => {
898
+ const Icon = item.icon;
899
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
900
+ Icon && /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "mr-2 h-4 w-4" }),
901
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1", children: item.label }),
902
+ item.showShortcut !== false && item.shortcut && /* @__PURE__ */ jsxRuntime.jsx(Shortcut, { className: "text-xs text-muted-foreground", children: item.shortcut })
903
+ ] });
904
+ const menuItemProps = {
905
+ variant: item.destructive ? "destructive" : void 0,
906
+ className: "cursor-pointer"
907
+ };
908
+ if (item.href) {
909
+ if (item.external) {
910
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkJ6OLBSZR_js.DropdownMenuItem, { asChild: true, ...menuItemProps, children: /* @__PURE__ */ jsxRuntime.jsx(
911
+ "a",
912
+ {
913
+ href: item.href,
914
+ target: "_blank",
915
+ rel: "noopener noreferrer",
916
+ className: `cursor-pointer${item.destructive ? "" : " text-muted-foreground"}`,
917
+ children: content
918
+ }
919
+ ) });
920
+ }
921
+ if (LinkComponent) {
922
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkJ6OLBSZR_js.DropdownMenuItem, { asChild: true, ...menuItemProps, children: /* @__PURE__ */ jsxRuntime.jsx(LinkComponent, { href: item.href, className: "cursor-pointer", children: content }) });
923
+ }
924
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkJ6OLBSZR_js.DropdownMenuItem, { asChild: true, ...menuItemProps, children: /* @__PURE__ */ jsxRuntime.jsx(
925
+ "a",
926
+ {
927
+ href: item.href,
928
+ className: `cursor-pointer${item.destructive ? "" : ""}`,
929
+ children: content
930
+ }
931
+ ) });
932
+ }
933
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkJ6OLBSZR_js.DropdownMenuItem, { onClick: item.onClick, ...menuItemProps, children: content });
934
+ };
935
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkJ6OLBSZR_js.DropdownMenu, { open, onOpenChange, children: [
936
+ /* @__PURE__ */ jsxRuntime.jsx(chunkJ6OLBSZR_js.DropdownMenuTrigger, { asChild: true, children: trigger || defaultTrigger }),
937
+ /* @__PURE__ */ jsxRuntime.jsxs(
938
+ chunkJ6OLBSZR_js.DropdownMenuContent,
939
+ {
940
+ className: `rounded-lg ${menuWidth || "w-56"}`,
941
+ side,
942
+ align,
943
+ sideOffset: 4,
944
+ children: [
945
+ showUserInfo && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
946
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-2 py-1.5 text-sm", children: [
947
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold", children: name || "User" }),
948
+ email && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-muted-foreground", children: email })
949
+ ] }),
950
+ /* @__PURE__ */ jsxRuntime.jsx(chunkJ6OLBSZR_js.DropdownMenuSeparator, {})
951
+ ] }),
952
+ header,
953
+ items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(React.Fragment, { children: [
954
+ item.separatorBefore && /* @__PURE__ */ jsxRuntime.jsx(chunkJ6OLBSZR_js.DropdownMenuSeparator, {}),
955
+ renderMenuItem(item)
956
+ ] }, item.label || index))
957
+ ]
958
+ }
959
+ )
960
+ ] });
961
+ }
962
+
963
+ exports.Avatar = Avatar;
964
+ exports.AvatarFallback = AvatarFallback;
965
+ exports.AvatarImage = AvatarImage;
966
+ exports.Kbd = Kbd;
967
+ exports.KbdGroup = KbdGroup;
968
+ exports.KeyboardShortcut = KeyboardShortcut;
969
+ exports.Sidebar = Sidebar;
970
+ exports.SidebarContent = SidebarContent;
971
+ exports.SidebarFooter = SidebarFooter;
972
+ exports.SidebarGroup = SidebarGroup;
973
+ exports.SidebarGroupAction = SidebarGroupAction;
974
+ exports.SidebarGroupContent = SidebarGroupContent;
975
+ exports.SidebarGroupLabel = SidebarGroupLabel;
976
+ exports.SidebarHeader = SidebarHeader;
977
+ exports.SidebarInput = SidebarInput;
978
+ exports.SidebarInset = SidebarInset;
979
+ exports.SidebarMenu = SidebarMenu;
980
+ exports.SidebarMenuAction = SidebarMenuAction;
981
+ exports.SidebarMenuBadge = SidebarMenuBadge;
982
+ exports.SidebarMenuButton = SidebarMenuButton;
983
+ exports.SidebarMenuItem = SidebarMenuItem;
984
+ exports.SidebarMenuSkeleton = SidebarMenuSkeleton;
985
+ exports.SidebarMenuSub = SidebarMenuSub;
986
+ exports.SidebarMenuSubButton = SidebarMenuSubButton;
987
+ exports.SidebarMenuSubItem = SidebarMenuSubItem;
988
+ exports.SidebarProvider = SidebarProvider;
989
+ exports.SidebarRail = SidebarRail;
990
+ exports.SidebarSeparator = SidebarSeparator;
991
+ exports.SidebarTrigger = SidebarTrigger;
992
+ exports.UserAvatarMenu = UserAvatarMenu;
993
+ exports.useSidebar = useSidebar;