@djangocfg/ui-nextjs 2.1.102 → 2.1.104

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.
package/dist/index.cjs DELETED
@@ -1,4080 +0,0 @@
1
- 'use strict';
2
-
3
- var components_star = require('@djangocfg/ui-core/components');
4
- var lucideReact = require('lucide-react');
5
- var Link5 = require('next/link');
6
- var React6 = require('react');
7
- var lib = require('@djangocfg/ui-core/lib');
8
- var reactSlot = require('@radix-ui/react-slot');
9
- var jsxRuntime = require('react/jsx-runtime');
10
- var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
11
- var navigation = require('next/navigation');
12
- var hooks_star = require('@djangocfg/ui-core/hooks');
13
- var reactHotkeysHook = require('react-hotkeys-hook');
14
- var classVarianceAuthority = require('class-variance-authority');
15
- var moment2 = require('moment');
16
- var Image = require('next/image');
17
- var uiTools = require('@djangocfg/ui-tools');
18
- var nextThemes = require('next-themes');
19
-
20
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
21
-
22
- function _interopNamespace(e) {
23
- if (e && e.__esModule) return e;
24
- var n = Object.create(null);
25
- if (e) {
26
- Object.keys(e).forEach(function (k) {
27
- if (k !== 'default') {
28
- var d = Object.getOwnPropertyDescriptor(e, k);
29
- Object.defineProperty(n, k, d.get ? d : {
30
- enumerable: true,
31
- get: function () { return e[k]; }
32
- });
33
- }
34
- });
35
- }
36
- n.default = e;
37
- return Object.freeze(n);
38
- }
39
-
40
- var components_star__namespace = /*#__PURE__*/_interopNamespace(components_star);
41
- var Link5__default = /*#__PURE__*/_interopDefault(Link5);
42
- var React6__namespace = /*#__PURE__*/_interopNamespace(React6);
43
- var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive);
44
- var hooks_star__namespace = /*#__PURE__*/_interopNamespace(hooks_star);
45
- var moment2__default = /*#__PURE__*/_interopDefault(moment2);
46
- var Image__default = /*#__PURE__*/_interopDefault(Image);
47
-
48
- var __defProp = Object.defineProperty;
49
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
50
- var __getOwnPropNames = Object.getOwnPropertyNames;
51
- var __hasOwnProp = Object.prototype.hasOwnProperty;
52
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
53
- var __export = (target, all) => {
54
- for (var name in all)
55
- __defProp(target, name, { get: all[name], enumerable: true });
56
- };
57
- var __copyProps = (to, from, except, desc) => {
58
- if (from && typeof from === "object" || typeof from === "function") {
59
- for (let key of __getOwnPropNames(from))
60
- if (!__hasOwnProp.call(to, key) && key !== except)
61
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
62
- }
63
- return to;
64
- };
65
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget);
66
-
67
- // src/index.ts
68
- var index_exports = {};
69
- __export(index_exports, {
70
- AnimatedBackground: () => AnimatedBackground,
71
- ArticleCard: () => ArticleCard,
72
- ArticleList: () => ArticleList,
73
- Breadcrumb: () => Breadcrumb,
74
- BreadcrumbEllipsis: () => BreadcrumbEllipsis,
75
- BreadcrumbItem: () => BreadcrumbItem,
76
- BreadcrumbLink: () => BreadcrumbLink,
77
- BreadcrumbList: () => BreadcrumbList,
78
- BreadcrumbNavigation: () => BreadcrumbNavigation,
79
- BreadcrumbPage: () => BreadcrumbPage,
80
- BreadcrumbSeparator: () => BreadcrumbSeparator,
81
- CTASection: () => CTASection,
82
- DropdownMenu: () => DropdownMenu,
83
- DropdownMenuCheckboxItem: () => DropdownMenuCheckboxItem,
84
- DropdownMenuContent: () => DropdownMenuContent,
85
- DropdownMenuGroup: () => DropdownMenuGroup,
86
- DropdownMenuItem: () => DropdownMenuItem,
87
- DropdownMenuLabel: () => DropdownMenuLabel,
88
- DropdownMenuRadioGroup: () => DropdownMenuRadioGroup,
89
- DropdownMenuRadioItem: () => DropdownMenuRadioItem,
90
- DropdownMenuSeparator: () => DropdownMenuSeparator,
91
- DropdownMenuShortcut: () => DropdownMenuShortcut,
92
- DropdownMenuSub: () => DropdownMenuSub,
93
- DropdownMenuSubContent: () => DropdownMenuSubContent,
94
- DropdownMenuSubTrigger: () => DropdownMenuSubTrigger,
95
- DropdownMenuTrigger: () => DropdownMenuTrigger,
96
- FeatureSection: () => FeatureSection,
97
- ForceTheme: () => ForceTheme,
98
- Hero: () => Hero,
99
- HotkeysProvider: () => reactHotkeysHook.HotkeysProvider,
100
- MouseFollower: () => MouseFollower,
101
- NewsletterSection: () => NewsletterSection,
102
- Pagination: () => Pagination,
103
- PaginationContent: () => PaginationContent,
104
- PaginationEllipsis: () => PaginationEllipsis,
105
- PaginationItem: () => PaginationItem,
106
- PaginationLink: () => PaginationLink,
107
- PaginationNext: () => PaginationNext,
108
- PaginationPrevious: () => PaginationPrevious,
109
- SSRPagination: () => SSRPagination,
110
- Sidebar: () => Sidebar,
111
- SidebarContent: () => SidebarContent,
112
- SidebarFooter: () => SidebarFooter,
113
- SidebarGroup: () => SidebarGroup,
114
- SidebarGroupAction: () => SidebarGroupAction,
115
- SidebarGroupContent: () => SidebarGroupContent,
116
- SidebarGroupLabel: () => SidebarGroupLabel,
117
- SidebarHeader: () => SidebarHeader,
118
- SidebarInput: () => SidebarInput,
119
- SidebarInset: () => SidebarInset,
120
- SidebarMenu: () => SidebarMenu,
121
- SidebarMenuAction: () => SidebarMenuAction,
122
- SidebarMenuBadge: () => SidebarMenuBadge,
123
- SidebarMenuButton: () => SidebarMenuButton,
124
- SidebarMenuItem: () => SidebarMenuItem,
125
- SidebarMenuSkeleton: () => SidebarMenuSkeleton,
126
- SidebarMenuSub: () => SidebarMenuSub,
127
- SidebarMenuSubButton: () => SidebarMenuSubButton,
128
- SidebarMenuSubItem: () => SidebarMenuSubItem,
129
- SidebarProvider: () => SidebarProvider,
130
- SidebarRail: () => SidebarRail,
131
- SidebarSeparator: () => SidebarSeparator,
132
- SidebarTrigger: () => SidebarTrigger,
133
- SplitHero: () => SplitHero,
134
- SplitHeroContent: () => SplitHeroContent,
135
- SplitHeroMedia: () => SplitHeroMedia,
136
- StaticPagination: () => StaticPagination,
137
- StatsSection: () => StatsSection,
138
- SuperHero: () => SuperHero,
139
- TestimonialSection: () => TestimonialSection,
140
- ThemeProvider: () => ThemeProvider,
141
- ThemeToggle: () => ThemeToggle,
142
- isHotkeyPressed: () => reactHotkeysHook.isHotkeyPressed,
143
- useBrowserDetect: () => useBrowserDetect,
144
- useCfgRouter: () => useCfgRouter,
145
- useDRFPagination: () => useDRFPagination,
146
- useDRFPaginationInfo: () => useDRFPaginationInfo,
147
- useDeviceDetect: () => useDeviceDetect,
148
- useHotkey: () => useHotkey,
149
- useHotkeysContext: () => reactHotkeysHook.useHotkeysContext,
150
- useQueryParams: () => useQueryParams,
151
- useResolvedTheme: () => useResolvedTheme,
152
- useSidebar: () => useSidebar,
153
- useThemeContext: () => useThemeContext
154
- });
155
-
156
- // src/components/index.ts
157
- var components_exports = {};
158
- __export(components_exports, {
159
- Breadcrumb: () => Breadcrumb,
160
- BreadcrumbEllipsis: () => BreadcrumbEllipsis,
161
- BreadcrumbItem: () => BreadcrumbItem,
162
- BreadcrumbLink: () => BreadcrumbLink,
163
- BreadcrumbList: () => BreadcrumbList,
164
- BreadcrumbNavigation: () => BreadcrumbNavigation,
165
- BreadcrumbPage: () => BreadcrumbPage,
166
- BreadcrumbSeparator: () => BreadcrumbSeparator,
167
- DropdownMenu: () => DropdownMenu,
168
- DropdownMenuCheckboxItem: () => DropdownMenuCheckboxItem,
169
- DropdownMenuContent: () => DropdownMenuContent,
170
- DropdownMenuGroup: () => DropdownMenuGroup,
171
- DropdownMenuItem: () => DropdownMenuItem,
172
- DropdownMenuLabel: () => DropdownMenuLabel,
173
- DropdownMenuRadioGroup: () => DropdownMenuRadioGroup,
174
- DropdownMenuRadioItem: () => DropdownMenuRadioItem,
175
- DropdownMenuSeparator: () => DropdownMenuSeparator,
176
- DropdownMenuShortcut: () => DropdownMenuShortcut,
177
- DropdownMenuSub: () => DropdownMenuSub,
178
- DropdownMenuSubContent: () => DropdownMenuSubContent,
179
- DropdownMenuSubTrigger: () => DropdownMenuSubTrigger,
180
- DropdownMenuTrigger: () => DropdownMenuTrigger,
181
- Pagination: () => Pagination,
182
- PaginationContent: () => PaginationContent,
183
- PaginationEllipsis: () => PaginationEllipsis,
184
- PaginationItem: () => PaginationItem,
185
- PaginationLink: () => PaginationLink,
186
- PaginationNext: () => PaginationNext,
187
- PaginationPrevious: () => PaginationPrevious,
188
- SSRPagination: () => SSRPagination,
189
- Sidebar: () => Sidebar,
190
- SidebarContent: () => SidebarContent,
191
- SidebarFooter: () => SidebarFooter,
192
- SidebarGroup: () => SidebarGroup,
193
- SidebarGroupAction: () => SidebarGroupAction,
194
- SidebarGroupContent: () => SidebarGroupContent,
195
- SidebarGroupLabel: () => SidebarGroupLabel,
196
- SidebarHeader: () => SidebarHeader,
197
- SidebarInput: () => SidebarInput,
198
- SidebarInset: () => SidebarInset,
199
- SidebarMenu: () => SidebarMenu,
200
- SidebarMenuAction: () => SidebarMenuAction,
201
- SidebarMenuBadge: () => SidebarMenuBadge,
202
- SidebarMenuButton: () => SidebarMenuButton,
203
- SidebarMenuItem: () => SidebarMenuItem,
204
- SidebarMenuSkeleton: () => SidebarMenuSkeleton,
205
- SidebarMenuSub: () => SidebarMenuSub,
206
- SidebarMenuSubButton: () => SidebarMenuSubButton,
207
- SidebarMenuSubItem: () => SidebarMenuSubItem,
208
- SidebarProvider: () => SidebarProvider,
209
- SidebarRail: () => SidebarRail,
210
- SidebarSeparator: () => SidebarSeparator,
211
- SidebarTrigger: () => SidebarTrigger,
212
- StaticPagination: () => StaticPagination,
213
- useDRFPagination: () => useDRFPagination,
214
- useDRFPaginationInfo: () => useDRFPaginationInfo,
215
- useSidebar: () => useSidebar
216
- });
217
- __reExport(components_exports, components_star__namespace);
218
- var Breadcrumb = React6__namespace.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("nav", { ref, "aria-label": "breadcrumb", ...props }));
219
- Breadcrumb.displayName = "Breadcrumb";
220
- var BreadcrumbList = React6__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
221
- "ol",
222
- {
223
- ref,
224
- className: lib.cn(
225
- "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5",
226
- className
227
- ),
228
- ...props
229
- }
230
- ));
231
- BreadcrumbList.displayName = "BreadcrumbList";
232
- var BreadcrumbItem = React6__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
233
- "li",
234
- {
235
- ref,
236
- className: lib.cn("inline-flex items-center gap-1.5", className),
237
- ...props
238
- }
239
- ));
240
- BreadcrumbItem.displayName = "BreadcrumbItem";
241
- var BreadcrumbLink = React6__namespace.forwardRef(({ asChild, className, href, children, ...props }, ref) => {
242
- const Comp = asChild ? reactSlot.Slot : "a";
243
- if (href) {
244
- return /* @__PURE__ */ jsxRuntime.jsx(
245
- Link5__default.default,
246
- {
247
- href,
248
- className: lib.cn("transition-colors hover:text-foreground", className),
249
- ref,
250
- children
251
- }
252
- );
253
- }
254
- return /* @__PURE__ */ jsxRuntime.jsx(
255
- Comp,
256
- {
257
- ref,
258
- className: lib.cn("transition-colors hover:text-foreground", className),
259
- ...props,
260
- children
261
- }
262
- );
263
- });
264
- BreadcrumbLink.displayName = "BreadcrumbLink";
265
- var BreadcrumbPage = React6__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
266
- "span",
267
- {
268
- ref,
269
- role: "link",
270
- "aria-disabled": "true",
271
- "aria-current": "page",
272
- className: lib.cn("font-normal text-foreground", className),
273
- ...props
274
- }
275
- ));
276
- BreadcrumbPage.displayName = "BreadcrumbPage";
277
- var BreadcrumbSeparator = /* @__PURE__ */ __name(({
278
- children,
279
- className,
280
- ...props
281
- }) => /* @__PURE__ */ jsxRuntime.jsx(
282
- "li",
283
- {
284
- role: "presentation",
285
- "aria-hidden": "true",
286
- className: lib.cn("[&>svg]:w-3.5 [&>svg]:h-3.5", className),
287
- ...props,
288
- children: children ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, {})
289
- }
290
- ), "BreadcrumbSeparator");
291
- BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
292
- var BreadcrumbEllipsis = /* @__PURE__ */ __name(({
293
- className,
294
- ...props
295
- }) => /* @__PURE__ */ jsxRuntime.jsxs(
296
- "span",
297
- {
298
- role: "presentation",
299
- "aria-hidden": "true",
300
- className: lib.cn("flex h-9 w-9 items-center justify-center", className),
301
- ...props,
302
- children: [
303
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, { className: "h-4 w-4" }),
304
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "More" })
305
- ]
306
- }
307
- ), "BreadcrumbEllipsis");
308
- BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
309
- var BreadcrumbNavigation = /* @__PURE__ */ __name(({
310
- items,
311
- separator,
312
- maxItems = 5,
313
- className,
314
- useNextLink = true
315
- }) => {
316
- if (!items || items.length === 0) {
317
- return null;
318
- }
319
- const shouldCollapse = items.length > maxItems;
320
- let displayItems = items;
321
- if (shouldCollapse && items.length > 0) {
322
- if (items.length > 0) {
323
- const firstItem = items[0];
324
- const lastItems = items.slice(-(maxItems - 2)).filter(Boolean);
325
- displayItems = [firstItem, ...lastItems];
326
- }
327
- }
328
- const renderBreadcrumbItem = /* @__PURE__ */ __name((item, index, isLast) => {
329
- const isCurrentPage = item.isCurrentPage || isLast || !item.href;
330
- const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
331
- item.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-1", children: item.icon }),
332
- item.label
333
- ] });
334
- if (isCurrentPage) {
335
- return /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbPage, { children: content }) }, `${item.label}-${index}`);
336
- }
337
- return /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbLink, { asChild: useNextLink, children: useNextLink ? /* @__PURE__ */ jsxRuntime.jsx(Link5__default.default, { href: item.href, children: content }) : /* @__PURE__ */ jsxRuntime.jsx("a", { href: item.href, children: content }) }) }, `${item.label}-${index}`);
338
- }, "renderBreadcrumbItem");
339
- return /* @__PURE__ */ jsxRuntime.jsx(Breadcrumb, { className, children: /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbList, { children: displayItems.map((item, index) => {
340
- const isLast = index === displayItems.length - 1;
341
- const isFirst = index === 0;
342
- if (shouldCollapse && isFirst && displayItems.length > 2) {
343
- return /* @__PURE__ */ jsxRuntime.jsxs(React6__namespace.default.Fragment, { children: [
344
- renderBreadcrumbItem(item, index, isLast),
345
- /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbSeparator, { children: separator }),
346
- /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbEllipsis, {}) }),
347
- !isLast && /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbSeparator, { children: separator })
348
- ] }, `fragment-${index}`);
349
- }
350
- return /* @__PURE__ */ jsxRuntime.jsxs(React6__namespace.default.Fragment, { children: [
351
- renderBreadcrumbItem(item, index, isLast),
352
- !isLast && /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbSeparator, { children: separator })
353
- ] }, `fragment-${index}`);
354
- }) }) });
355
- }, "BreadcrumbNavigation");
356
- BreadcrumbNavigation.displayName = "BreadcrumbNavigation";
357
- var DropdownMenu = DropdownMenuPrimitive__namespace.Root;
358
- var DropdownMenuTrigger = DropdownMenuPrimitive__namespace.Trigger;
359
- var DropdownMenuGroup = DropdownMenuPrimitive__namespace.Group;
360
- var DropdownMenuSub = DropdownMenuPrimitive__namespace.Sub;
361
- var DropdownMenuRadioGroup = DropdownMenuPrimitive__namespace.RadioGroup;
362
- var DropdownMenuSubTrigger = React6__namespace.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
363
- DropdownMenuPrimitive__namespace.SubTrigger,
364
- {
365
- ref,
366
- className: lib.cn(
367
- "flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
368
- inset && "pl-8",
369
- className
370
- ),
371
- ...props,
372
- children: [
373
- children,
374
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "ml-auto" })
375
- ]
376
- }
377
- ));
378
- DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive__namespace.SubTrigger.displayName;
379
- var DropdownMenuSubContent = React6__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
380
- DropdownMenuPrimitive__namespace.SubContent,
381
- {
382
- ref,
383
- className: lib.cn(
384
- "z-600 min-w-32 overflow-hidden rounded-sm border bg-popover backdrop-blur-xl p-1 text-popover-foreground shadow-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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",
385
- className
386
- ),
387
- ...props
388
- }
389
- ));
390
- DropdownMenuSubContent.displayName = DropdownMenuPrimitive__namespace.SubContent.displayName;
391
- var DropdownMenuContent = React6__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
392
- DropdownMenuPrimitive__namespace.Content,
393
- {
394
- ref,
395
- sideOffset,
396
- className: lib.cn(
397
- "z-600 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-32 overflow-y-auto overflow-x-hidden rounded-sm border bg-popover backdrop-blur-xl p-1 text-popover-foreground shadow-sm",
398
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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",
399
- className
400
- ),
401
- ...props
402
- }
403
- ) }));
404
- DropdownMenuContent.displayName = DropdownMenuPrimitive__namespace.Content.displayName;
405
- var DropdownMenuItem = React6__namespace.forwardRef(({ className, inset, href, children, ...props }, ref) => {
406
- const classes = lib.cn(
407
- "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0",
408
- inset && "pl-8",
409
- className
410
- );
411
- if (href) {
412
- return /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Item, { asChild: true, ref, ...props, children: /* @__PURE__ */ jsxRuntime.jsx(Link5__default.default, { href, className: classes, children }) });
413
- }
414
- return /* @__PURE__ */ jsxRuntime.jsx(
415
- DropdownMenuPrimitive__namespace.Item,
416
- {
417
- ref,
418
- className: classes,
419
- ...props,
420
- children
421
- }
422
- );
423
- });
424
- DropdownMenuItem.displayName = DropdownMenuPrimitive__namespace.Item.displayName;
425
- var DropdownMenuCheckboxItem = React6__namespace.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
426
- DropdownMenuPrimitive__namespace.CheckboxItem,
427
- {
428
- ref,
429
- className: lib.cn(
430
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
431
- className
432
- ),
433
- checked,
434
- ...props,
435
- children: [
436
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-4 w-4" }) }) }),
437
- children
438
- ]
439
- }
440
- ));
441
- DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive__namespace.CheckboxItem.displayName;
442
- var DropdownMenuRadioItem = React6__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
443
- DropdownMenuPrimitive__namespace.RadioItem,
444
- {
445
- ref,
446
- className: lib.cn(
447
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
448
- className
449
- ),
450
- ...props,
451
- children: [
452
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive__namespace.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { className: "h-2 w-2 fill-current" }) }) }),
453
- children
454
- ]
455
- }
456
- ));
457
- DropdownMenuRadioItem.displayName = DropdownMenuPrimitive__namespace.RadioItem.displayName;
458
- var DropdownMenuLabel = React6__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
459
- DropdownMenuPrimitive__namespace.Label,
460
- {
461
- ref,
462
- className: lib.cn(
463
- "px-2 py-1.5 text-sm font-semibold",
464
- inset && "pl-8",
465
- className
466
- ),
467
- ...props
468
- }
469
- ));
470
- DropdownMenuLabel.displayName = DropdownMenuPrimitive__namespace.Label.displayName;
471
- var DropdownMenuSeparator = React6__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
472
- DropdownMenuPrimitive__namespace.Separator,
473
- {
474
- ref,
475
- className: lib.cn("-mx-1 my-1 h-px bg-muted", className),
476
- ...props
477
- }
478
- ));
479
- DropdownMenuSeparator.displayName = DropdownMenuPrimitive__namespace.Separator.displayName;
480
- var DropdownMenuShortcut = /* @__PURE__ */ __name(({
481
- className,
482
- ...props
483
- }) => {
484
- return /* @__PURE__ */ jsxRuntime.jsx(
485
- "span",
486
- {
487
- className: lib.cn("ml-auto text-xs tracking-widest opacity-60", className),
488
- ...props
489
- }
490
- );
491
- }, "DropdownMenuShortcut");
492
- DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
493
- var Pagination = /* @__PURE__ */ __name(({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
494
- "nav",
495
- {
496
- role: "navigation",
497
- "aria-label": "pagination",
498
- className: lib.cn("mx-auto flex w-full justify-center", className),
499
- ...props
500
- }
501
- ), "Pagination");
502
- Pagination.displayName = "Pagination";
503
- var PaginationContent = React6__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
504
- "ul",
505
- {
506
- ref,
507
- className: lib.cn("flex flex-row items-center gap-1", className),
508
- ...props
509
- }
510
- ));
511
- PaginationContent.displayName = "PaginationContent";
512
- var PaginationItem = React6__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("li", { ref, className: lib.cn("", className), ...props }));
513
- PaginationItem.displayName = "PaginationItem";
514
- var PaginationLink = /* @__PURE__ */ __name(({
515
- className,
516
- isActive,
517
- size = "icon",
518
- href,
519
- children,
520
- ...props
521
- }) => {
522
- const classes = lib.cn(
523
- components_star.buttonVariants({
524
- variant: isActive ? "outline" : "ghost",
525
- size
526
- }),
527
- className
528
- );
529
- if (href) {
530
- return /* @__PURE__ */ jsxRuntime.jsx(
531
- Link5__default.default,
532
- {
533
- href,
534
- "aria-current": isActive ? "page" : void 0,
535
- className: classes,
536
- children
537
- }
538
- );
539
- }
540
- return /* @__PURE__ */ jsxRuntime.jsx(
541
- "a",
542
- {
543
- "aria-current": isActive ? "page" : void 0,
544
- className: classes,
545
- ...props,
546
- children
547
- }
548
- );
549
- }, "PaginationLink");
550
- PaginationLink.displayName = "PaginationLink";
551
- var PaginationPrevious = /* @__PURE__ */ __name(({
552
- className,
553
- ...props
554
- }) => /* @__PURE__ */ jsxRuntime.jsxs(
555
- PaginationLink,
556
- {
557
- "aria-label": "Go to previous page",
558
- size: "default",
559
- className: lib.cn("gap-1 pl-2.5", className),
560
- ...props,
561
- children: [
562
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "h-4 w-4" }),
563
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Previous" })
564
- ]
565
- }
566
- ), "PaginationPrevious");
567
- PaginationPrevious.displayName = "PaginationPrevious";
568
- var PaginationNext = /* @__PURE__ */ __name(({
569
- className,
570
- ...props
571
- }) => /* @__PURE__ */ jsxRuntime.jsxs(
572
- PaginationLink,
573
- {
574
- "aria-label": "Go to next page",
575
- size: "default",
576
- className: lib.cn("gap-1 pr-2.5", className),
577
- ...props,
578
- children: [
579
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Next" }),
580
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4" })
581
- ]
582
- }
583
- ), "PaginationNext");
584
- PaginationNext.displayName = "PaginationNext";
585
- var PaginationEllipsis = /* @__PURE__ */ __name(({
586
- className,
587
- ...props
588
- }) => /* @__PURE__ */ jsxRuntime.jsxs(
589
- "span",
590
- {
591
- "aria-hidden": true,
592
- className: lib.cn("flex h-9 w-9 items-center justify-center", className),
593
- ...props,
594
- children: [
595
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontal, { className: "h-4 w-4" }),
596
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "More pages" })
597
- ]
598
- }
599
- ), "PaginationEllipsis");
600
- PaginationEllipsis.displayName = "PaginationEllipsis";
601
-
602
- // src/hooks/index.ts
603
- var hooks_exports = {};
604
- __export(hooks_exports, {
605
- HotkeysProvider: () => reactHotkeysHook.HotkeysProvider,
606
- isHotkeyPressed: () => reactHotkeysHook.isHotkeyPressed,
607
- useBrowserDetect: () => useBrowserDetect,
608
- useCfgRouter: () => useCfgRouter,
609
- useDeviceDetect: () => useDeviceDetect,
610
- useHotkey: () => useHotkey,
611
- useHotkeysContext: () => reactHotkeysHook.useHotkeysContext,
612
- useQueryParams: () => useQueryParams,
613
- useResolvedTheme: () => useResolvedTheme
614
- });
615
- __reExport(hooks_exports, hooks_star__namespace);
616
- var useResolvedTheme = /* @__PURE__ */ __name(() => {
617
- const [theme, setTheme] = React6.useState("light");
618
- React6.useEffect(() => {
619
- const checkTheme = /* @__PURE__ */ __name(() => {
620
- if (document.documentElement.classList.contains("dark")) {
621
- return "dark";
622
- }
623
- if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
624
- return "dark";
625
- }
626
- return "light";
627
- }, "checkTheme");
628
- setTheme(checkTheme());
629
- const observer = new MutationObserver(() => {
630
- setTheme(checkTheme());
631
- });
632
- observer.observe(document.documentElement, {
633
- attributes: true,
634
- attributeFilter: ["class"]
635
- });
636
- const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
637
- const handleMediaChange = /* @__PURE__ */ __name(() => {
638
- setTheme(checkTheme());
639
- }, "handleMediaChange");
640
- mediaQuery.addEventListener("change", handleMediaChange);
641
- return () => {
642
- observer.disconnect();
643
- mediaQuery.removeEventListener("change", handleMediaChange);
644
- };
645
- }, []);
646
- return theme;
647
- }, "useResolvedTheme");
648
- function useQueryParams() {
649
- const pathname = navigation.usePathname();
650
- const [queryParams, setQueryParams] = React6.useState(() => {
651
- if (typeof window === "undefined") {
652
- return new URLSearchParams();
653
- }
654
- return new URLSearchParams(window.location.search);
655
- });
656
- const lastSearchRef = React6.useRef("");
657
- React6.useEffect(() => {
658
- if (typeof window === "undefined") return;
659
- const updateQueryParams = /* @__PURE__ */ __name(() => {
660
- const currentSearch = window.location.search;
661
- if (currentSearch !== lastSearchRef.current) {
662
- lastSearchRef.current = currentSearch;
663
- setQueryParams(new URLSearchParams(currentSearch));
664
- }
665
- }, "updateQueryParams");
666
- updateQueryParams();
667
- window.addEventListener("popstate", updateQueryParams);
668
- const intervalId = setInterval(updateQueryParams, 100);
669
- return () => {
670
- window.removeEventListener("popstate", updateQueryParams);
671
- clearInterval(intervalId);
672
- };
673
- }, [pathname]);
674
- return queryParams;
675
- }
676
- __name(useQueryParams, "useQueryParams");
677
- function getBasePath() {
678
- if (typeof process === "undefined") {
679
- return "";
680
- }
681
- return process.env.NEXT_PUBLIC_BASE_PATH || "";
682
- }
683
- __name(getBasePath, "getBasePath");
684
- function withBasePath(path, basePath) {
685
- if (!basePath) {
686
- return path;
687
- }
688
- const normalizedPath = path.startsWith("/") ? path : `/${path}`;
689
- const normalizedBasePath = basePath.replace(/\/$/, "");
690
- return `${normalizedBasePath}${normalizedPath}`;
691
- }
692
- __name(withBasePath, "withBasePath");
693
- function useCfgRouter() {
694
- const router = navigation.useRouter();
695
- const basePath = React6.useMemo(() => getBasePath(), []);
696
- React6.useMemo(() => {
697
- return typeof process !== "undefined" && process.env.NEXT_PUBLIC_STATIC_BUILD === "true";
698
- }, []);
699
- const push = React6.useCallback((href, options) => {
700
- if (basePath) {
701
- window.location.href = withBasePath(href, basePath);
702
- } else {
703
- router.push(href, options);
704
- }
705
- }, [router, basePath]);
706
- const replace = React6.useCallback((href, options) => {
707
- if (basePath) {
708
- window.location.replace(withBasePath(href, basePath));
709
- } else {
710
- router.replace(href, options);
711
- }
712
- }, [router, basePath]);
713
- const hardPush = React6.useCallback((href) => {
714
- window.location.href = withBasePath(href, basePath);
715
- }, [basePath]);
716
- const hardReplace = React6.useCallback((href) => {
717
- window.location.replace(withBasePath(href, basePath));
718
- }, [basePath]);
719
- const prefetch = React6.useCallback((href) => {
720
- router.prefetch(href);
721
- }, [router]);
722
- const back = React6.useCallback(() => {
723
- router.back();
724
- }, [router]);
725
- const forward = React6.useCallback(() => {
726
- router.forward();
727
- }, [router]);
728
- const refresh = React6.useCallback(() => {
729
- router.refresh();
730
- }, [router]);
731
- return {
732
- push,
733
- replace,
734
- hardPush,
735
- hardReplace,
736
- prefetch,
737
- back,
738
- forward,
739
- refresh
740
- };
741
- }
742
- __name(useCfgRouter, "useCfgRouter");
743
- function useHotkey(keys, callback, options = {}) {
744
- const {
745
- enabled = true,
746
- preventDefault = false,
747
- enableOnFormTags = false,
748
- enableOnContentEditable = false,
749
- description: _description,
750
- ...restOptions
751
- } = options;
752
- return reactHotkeysHook.useHotkeys(
753
- keys,
754
- (event, handler) => {
755
- if (preventDefault) {
756
- event.preventDefault();
757
- }
758
- callback(event, handler);
759
- },
760
- {
761
- enabled,
762
- enableOnFormTags,
763
- enableOnContentEditable,
764
- ...restOptions
765
- }
766
- );
767
- }
768
- __name(useHotkey, "useHotkey");
769
- var defaultSelectors = {
770
- isMobile: false,
771
- isTablet: false,
772
- isDesktop: false,
773
- isBrowser: false,
774
- isMobileOnly: false,
775
- isSmartTV: false,
776
- isConsole: false,
777
- isWearable: false,
778
- isEmbedded: false,
779
- isAndroid: false,
780
- isIOS: false,
781
- isWindows: false,
782
- isMacOs: false,
783
- isWinPhone: false,
784
- isChrome: false,
785
- isFirefox: false,
786
- isSafari: false,
787
- isOpera: false,
788
- isIE: false,
789
- isEdge: false,
790
- isEdgeChromium: false,
791
- isLegacyEdge: false,
792
- isChromium: false,
793
- isMobileSafari: false,
794
- isYandex: false,
795
- isMIUI: false,
796
- isSamsungBrowser: false,
797
- isElectron: false,
798
- osVersion: "unknown",
799
- osName: "unknown",
800
- fullBrowserVersion: "unknown",
801
- browserVersion: "unknown",
802
- browserName: "unknown",
803
- mobileVendor: "unknown",
804
- mobileModel: "unknown",
805
- engineName: "unknown",
806
- engineVersion: "unknown",
807
- getUA: "",
808
- deviceType: "unknown",
809
- isIOS13: false,
810
- isIPad13: false,
811
- isIPhone13: false,
812
- isIPod13: false
813
- };
814
- var defaultDeviceData = {
815
- deviceType: "unknown",
816
- osName: "unknown",
817
- osVersion: "unknown",
818
- browserName: "unknown",
819
- browserVersion: "unknown",
820
- fullBrowserVersion: "unknown",
821
- mobileVendor: "unknown",
822
- mobileModel: "unknown",
823
- engineName: "unknown",
824
- engineVersion: "unknown",
825
- getUA: ""
826
- };
827
- var defaultOrientation = {
828
- isPortrait: false,
829
- isLandscape: false,
830
- orientation: "portrait"
831
- };
832
- function useDeviceDetect(userAgent) {
833
- const [deviceInfo, setDeviceInfo] = React6.useState({
834
- selectors: defaultSelectors,
835
- deviceData: defaultDeviceData,
836
- orientation: defaultOrientation
837
- });
838
- React6.useEffect(() => {
839
- if (typeof window === "undefined") return;
840
- import('react-device-detect').then((deviceDetect) => {
841
- const ua = userAgent || (typeof window !== "undefined" ? window.navigator.userAgent : "");
842
- if (!ua) {
843
- console.warn("No user agent available");
844
- return;
845
- }
846
- const parsed = deviceDetect.parseUserAgent(ua);
847
- if (!parsed) {
848
- console.warn("Failed to parse user agent");
849
- return;
850
- }
851
- const selectors2 = deviceDetect.getSelectorsByUserAgent(ua) || defaultSelectors;
852
- const deviceData2 = {
853
- deviceType: parsed.device?.type || "unknown",
854
- osName: parsed.os?.name || "unknown",
855
- osVersion: parsed.os?.version || "unknown",
856
- browserName: parsed.browser?.name || "unknown",
857
- browserVersion: parsed.browser?.version || "unknown",
858
- fullBrowserVersion: parsed.browser?.version || "unknown",
859
- mobileVendor: parsed.device?.vendor || "unknown",
860
- mobileModel: parsed.device?.model || "unknown",
861
- engineName: parsed.engine?.name || "unknown",
862
- engineVersion: parsed.engine?.version || "unknown",
863
- getUA: parsed.ua || ua
864
- };
865
- let orientation2 = defaultOrientation;
866
- try {
867
- if (typeof window !== "undefined") {
868
- const isPortrait = window.innerHeight > window.innerWidth;
869
- orientation2 = {
870
- isPortrait,
871
- isLandscape: !isPortrait,
872
- orientation: isPortrait ? "portrait" : "landscape"
873
- };
874
- }
875
- } catch (error) {
876
- console.warn("Failed to get orientation:", error);
877
- }
878
- setDeviceInfo({ selectors: selectors2, deviceData: deviceData2, orientation: orientation2 });
879
- }).catch((error) => {
880
- console.warn("Failed to load device detection:", error);
881
- });
882
- }, [userAgent]);
883
- React6.useEffect(() => {
884
- if (typeof window === "undefined") return;
885
- const handleResize = /* @__PURE__ */ __name(() => {
886
- const isPortrait = window.innerHeight > window.innerWidth;
887
- setDeviceInfo((prev) => ({
888
- ...prev,
889
- orientation: {
890
- isPortrait,
891
- isLandscape: !isPortrait,
892
- orientation: isPortrait ? "portrait" : "landscape"
893
- }
894
- }));
895
- }, "handleResize");
896
- window.addEventListener("resize", handleResize);
897
- window.addEventListener("orientationchange", handleResize);
898
- return () => {
899
- window.removeEventListener("resize", handleResize);
900
- window.removeEventListener("orientationchange", handleResize);
901
- };
902
- }, []);
903
- const { selectors, deviceData, orientation } = deviceInfo;
904
- return React6.useMemo(() => {
905
- return {
906
- // Device type selectors
907
- isMobile: selectors.isMobile ?? false,
908
- isTablet: selectors.isTablet ?? false,
909
- isDesktop: selectors.isDesktop ?? false,
910
- isBrowser: selectors.isBrowser ?? false,
911
- isMobileOnly: selectors.isMobileOnly ?? false,
912
- isSmartTV: selectors.isSmartTV ?? false,
913
- isConsole: selectors.isConsole ?? false,
914
- isWearable: selectors.isWearable ?? false,
915
- isEmbedded: selectors.isEmbedded ?? false,
916
- // OS selectors
917
- isAndroid: selectors.isAndroid ?? false,
918
- isIOS: selectors.isIOS ?? false,
919
- isWindows: selectors.isWindows ?? false,
920
- isMacOs: selectors.isMacOs ?? false,
921
- isWinPhone: selectors.isWinPhone ?? false,
922
- // Browser selectors
923
- isChrome: selectors.isChrome ?? false,
924
- isFirefox: selectors.isFirefox ?? false,
925
- isSafari: selectors.isSafari ?? false,
926
- isOpera: selectors.isOpera ?? false,
927
- isIE: selectors.isIE ?? false,
928
- isEdge: selectors.isEdge ?? false,
929
- isEdgeChromium: selectors.isEdgeChromium ?? false,
930
- isLegacyEdge: selectors.isLegacyEdge ?? false,
931
- isChromium: selectors.isChromium ?? false,
932
- isMobileSafari: selectors.isMobileSafari ?? false,
933
- isYandex: selectors.isYandex ?? false,
934
- isMIUI: selectors.isMIUI ?? false,
935
- isSamsungBrowser: selectors.isSamsungBrowser ?? false,
936
- isElectron: selectors.isElectron ?? false,
937
- // iOS version selectors
938
- isIOS13: selectors.isIOS13 ?? false,
939
- isIPad13: selectors.isIPad13 ?? false,
940
- isIPhone13: selectors.isIPhone13 ?? false,
941
- isIPod13: selectors.isIPod13 ?? false,
942
- // Device information
943
- deviceType: deviceData.deviceType ?? "unknown",
944
- osName: deviceData.osName ?? "unknown",
945
- osVersion: deviceData.osVersion ?? "unknown",
946
- browserName: deviceData.browserName ?? "unknown",
947
- browserVersion: deviceData.browserVersion ?? "unknown",
948
- fullBrowserVersion: deviceData.fullBrowserVersion ?? "unknown",
949
- mobileVendor: deviceData.mobileVendor ?? "unknown",
950
- mobileModel: deviceData.mobileModel ?? "unknown",
951
- engineName: deviceData.engineName ?? "unknown",
952
- engineVersion: deviceData.engineVersion ?? "unknown",
953
- getUA: deviceData.getUA ?? "",
954
- // Orientation
955
- isPortrait: orientation.isPortrait,
956
- isLandscape: orientation.isLandscape,
957
- orientation: orientation.orientation,
958
- // Raw data (for advanced usage)
959
- selectors,
960
- deviceData
961
- };
962
- }, [selectors, deviceData, orientation]);
963
- }
964
- __name(useDeviceDetect, "useDeviceDetect");
965
- function useBrowserDetect() {
966
- return React6.useMemo(() => {
967
- if (typeof window === "undefined") {
968
- return {
969
- isChrome: false,
970
- isChromium: false,
971
- isSafari: false,
972
- isFirefox: false,
973
- isEdge: false,
974
- isOpera: false,
975
- isBrave: false,
976
- isArc: false,
977
- isVivaldi: false,
978
- isYandex: false,
979
- isSamsungBrowser: false,
980
- isUCBrowser: false,
981
- isComet: false,
982
- isOperaMini: false,
983
- isIE: false,
984
- isFacebookInApp: false,
985
- isInstagramInApp: false,
986
- isTikTokInApp: false,
987
- isSnapchatInApp: false,
988
- isWeChatInApp: false,
989
- isThreadsInApp: false,
990
- isLinkedInInApp: false,
991
- isTwitterInApp: false,
992
- isInAppBrowser: false,
993
- isWebView: false,
994
- browserName: "unknown",
995
- isWebKit: false,
996
- isBlink: false,
997
- isGecko: false,
998
- supportsPushNotifications: false,
999
- isIOSBrowser: false,
1000
- userAgent: ""
1001
- };
1002
- }
1003
- const ua = window.navigator.userAgent.toLowerCase();
1004
- const isEdge = ua.includes("edg/") || ua.includes("edge/");
1005
- const isBrave = !!window.navigator.brave;
1006
- const isArc = ua.includes("arc/");
1007
- const isVivaldi = ua.includes("vivaldi");
1008
- const isYandex = ua.includes("yabrowser");
1009
- const isSamsungBrowser = ua.includes("samsungbrowser");
1010
- const isUCBrowser = ua.includes("ucbrowser") || ua.includes("uc browser");
1011
- const isComet = ua.includes("comet") || ua.includes("perplexity");
1012
- const isOperaMini = ua.includes("opera mini") || ua.includes("opios");
1013
- const isIE = ua.includes("msie") || ua.includes("trident/");
1014
- const isFacebookInApp = ua.includes("fban") || ua.includes("fbav") || ua.includes("fb_iab");
1015
- const isInstagramInApp = ua.includes("instagram");
1016
- const isTikTokInApp = ua.includes("tiktok") || ua.includes("bytedancewebview") || ua.includes("bytelocale");
1017
- const isSnapchatInApp = ua.includes("snapchat");
1018
- const isWeChatInApp = ua.includes("micromessenger");
1019
- const isThreadsInApp = ua.includes("barcelona");
1020
- const isLinkedInInApp = ua.includes("linkedinapp");
1021
- const isTwitterInApp = ua.includes("twitter");
1022
- const isPinterestInApp = ua.includes("pinterest");
1023
- const isTelegramInApp = ua.includes("telegram");
1024
- const isLineInApp = ua.includes("line/");
1025
- const isKakaoInApp = ua.includes("kakaotalk");
1026
- const isWebView = ua.includes("wv)") || // Android WebView marker
1027
- ua.includes("webview") || ua.includes("; wv") || ua.includes("iphone") && !ua.includes("safari") || // iOS WebView (no Safari)
1028
- ua.includes("ipad") && !ua.includes("safari");
1029
- const isInAppBrowser = isFacebookInApp || isInstagramInApp || isTikTokInApp || isSnapchatInApp || isWeChatInApp || isThreadsInApp || isLinkedInInApp || isTwitterInApp || isPinterestInApp || isTelegramInApp || isLineInApp || isKakaoInApp;
1030
- const isIOSBrowser = ua.includes("iphone") || ua.includes("ipad") || ua.includes("ipod");
1031
- const isOpera = (ua.includes("opr/") || ua.includes("opera")) && !isOperaMini;
1032
- const isChrome = ua.includes("chrome") && !isEdge && !isOpera && !isYandex && !isSamsungBrowser && !isVivaldi && !isArc && !isBrave && !isComet;
1033
- const isFirefox = ua.includes("firefox") && !ua.includes("seamonkey");
1034
- const hasSafariUA = ua.includes("safari");
1035
- const hasChrome = ua.includes("chrome") || ua.includes("crios");
1036
- const hasVersion = ua.includes("version/");
1037
- const isSafari = hasSafariUA && !hasChrome && hasVersion;
1038
- const isChromium = hasChrome || isEdge || isOpera || isYandex || isSamsungBrowser || isVivaldi || isArc || isBrave || isUCBrowser || isComet;
1039
- const isWebKit = !isChromium && isSafari;
1040
- const isBlink = isChromium;
1041
- const isGecko = isFirefox;
1042
- let browserName = "unknown";
1043
- if (isFacebookInApp) browserName = "Facebook In-App";
1044
- else if (isInstagramInApp) browserName = "Instagram In-App";
1045
- else if (isTikTokInApp) browserName = "TikTok In-App";
1046
- else if (isSnapchatInApp) browserName = "Snapchat In-App";
1047
- else if (isWeChatInApp) browserName = "WeChat In-App";
1048
- else if (isThreadsInApp) browserName = "Threads In-App";
1049
- else if (isLinkedInInApp) browserName = "LinkedIn In-App";
1050
- else if (isTwitterInApp) browserName = "Twitter In-App";
1051
- else if (isPinterestInApp) browserName = "Pinterest In-App";
1052
- else if (isTelegramInApp) browserName = "Telegram In-App";
1053
- else if (isLineInApp) browserName = "Line In-App";
1054
- else if (isKakaoInApp) browserName = "KakaoTalk In-App";
1055
- else if (isComet) browserName = "Comet";
1056
- else if (isOperaMini) browserName = "Opera Mini";
1057
- else if (isIE) browserName = "Internet Explorer";
1058
- else if (isBrave) browserName = "Brave";
1059
- else if (isArc) browserName = "Arc";
1060
- else if (isVivaldi) browserName = "Vivaldi";
1061
- else if (isYandex) browserName = "Yandex";
1062
- else if (isSamsungBrowser) browserName = "Samsung Internet";
1063
- else if (isUCBrowser) browserName = "UC Browser";
1064
- else if (isEdge) browserName = "Edge";
1065
- else if (isOpera) browserName = "Opera";
1066
- else if (isChrome) browserName = "Chrome";
1067
- else if (isSafari) browserName = "Safari";
1068
- else if (isFirefox) browserName = "Firefox";
1069
- else if (isWebView) browserName = "WebView";
1070
- const browserBlocksPush = isOperaMini || isIE || isUCBrowser || isFacebookInApp || isInstagramInApp || isTikTokInApp || isSnapchatInApp || isWeChatInApp || isThreadsInApp || isPinterestInApp || isTelegramInApp || isLineInApp || isKakaoInApp || isWebView;
1071
- const twitterLinkedInAndroid = (isTwitterInApp || isLinkedInInApp) && !isIOSBrowser;
1072
- const supportsPushNotifications = !browserBlocksPush || twitterLinkedInAndroid;
1073
- return {
1074
- isChrome,
1075
- isChromium,
1076
- isSafari,
1077
- isFirefox,
1078
- isEdge,
1079
- isOpera,
1080
- isBrave,
1081
- isArc,
1082
- isVivaldi,
1083
- isYandex,
1084
- isSamsungBrowser,
1085
- isUCBrowser,
1086
- isComet,
1087
- isOperaMini,
1088
- isIE,
1089
- isFacebookInApp,
1090
- isInstagramInApp,
1091
- isTikTokInApp,
1092
- isSnapchatInApp,
1093
- isWeChatInApp,
1094
- isThreadsInApp,
1095
- isLinkedInInApp,
1096
- isTwitterInApp,
1097
- isInAppBrowser,
1098
- isWebView,
1099
- browserName,
1100
- isWebKit,
1101
- isBlink,
1102
- isGecko,
1103
- supportsPushNotifications,
1104
- isIOSBrowser,
1105
- userAgent: window.navigator.userAgent
1106
- };
1107
- }, []);
1108
- }
1109
- __name(useBrowserDetect, "useBrowserDetect");
1110
- var SSRPagination = /* @__PURE__ */ __name(({
1111
- currentPage,
1112
- totalPages,
1113
- totalItems,
1114
- itemsPerPage,
1115
- hasNextPage,
1116
- hasPreviousPage,
1117
- className,
1118
- showInfo = true,
1119
- maxVisiblePages = 7,
1120
- baseUrl,
1121
- pathname: propPathname,
1122
- preserveQuery = true
1123
- }) => {
1124
- const queryParams = useQueryParams();
1125
- const pathname = navigation.usePathname();
1126
- const isMobile = hooks_star.useIsMobile();
1127
- const getCurrentPageFromUrl = /* @__PURE__ */ __name(() => {
1128
- const pageParam = queryParams.get("page");
1129
- if (pageParam) {
1130
- const pageNum = parseInt(pageParam, 10);
1131
- return isNaN(pageNum) ? 1 : pageNum;
1132
- }
1133
- return 1;
1134
- }, "getCurrentPageFromUrl");
1135
- const actualCurrentPage = getCurrentPageFromUrl() || currentPage;
1136
- const actualHasPreviousPage = actualCurrentPage > 1;
1137
- const smartTotalPages = Math.max(
1138
- totalPages,
1139
- actualCurrentPage + (hasNextPage ? 5 : 0)
1140
- );
1141
- const getPageUrl = /* @__PURE__ */ __name((page) => {
1142
- if (baseUrl) {
1143
- return `${baseUrl}?page=${page}`;
1144
- }
1145
- const newSearchParams = preserveQuery ? new URLSearchParams(queryParams.toString()) : new URLSearchParams();
1146
- newSearchParams.set("page", page.toString());
1147
- if (page === 1) {
1148
- newSearchParams.delete("page");
1149
- }
1150
- const queryString = newSearchParams.toString();
1151
- const basePath = propPathname || pathname || "";
1152
- return queryString ? `${basePath}?${queryString}` : basePath;
1153
- }, "getPageUrl");
1154
- const getVisiblePages = /* @__PURE__ */ __name(() => {
1155
- const mobileMaxVisible = 3;
1156
- const effectiveMaxVisible = isMobile ? mobileMaxVisible : maxVisiblePages;
1157
- if (smartTotalPages <= effectiveMaxVisible) {
1158
- return Array.from({ length: smartTotalPages }, (_, i) => i + 1);
1159
- }
1160
- const pages = [];
1161
- const halfVisible = Math.floor(effectiveMaxVisible / 2);
1162
- if (isMobile) {
1163
- if (actualCurrentPage > 1) {
1164
- pages.push(actualCurrentPage - 1);
1165
- }
1166
- pages.push(actualCurrentPage);
1167
- if (actualCurrentPage < smartTotalPages) {
1168
- pages.push(actualCurrentPage + 1);
1169
- }
1170
- } else {
1171
- pages.push(1);
1172
- let start = Math.max(2, actualCurrentPage - halfVisible);
1173
- let end = Math.min(smartTotalPages - 1, actualCurrentPage + halfVisible);
1174
- if (actualCurrentPage <= halfVisible + 1) {
1175
- end = Math.min(smartTotalPages - 1, effectiveMaxVisible - 1);
1176
- } else if (actualCurrentPage >= smartTotalPages - halfVisible) {
1177
- start = Math.max(2, smartTotalPages - effectiveMaxVisible + 2);
1178
- }
1179
- if (start > 2) {
1180
- pages.push("ellipsis");
1181
- }
1182
- for (let i = start; i <= end; i++) {
1183
- pages.push(i);
1184
- }
1185
- if (end < smartTotalPages - 1) {
1186
- pages.push("ellipsis");
1187
- }
1188
- if (smartTotalPages > 1) {
1189
- pages.push(smartTotalPages);
1190
- }
1191
- }
1192
- return pages;
1193
- }, "getVisiblePages");
1194
- if (smartTotalPages <= 1) {
1195
- return null;
1196
- }
1197
- const visiblePages = getVisiblePages();
1198
- const startItem = (actualCurrentPage - 1) * itemsPerPage + 1;
1199
- const endItem = Math.min(actualCurrentPage * itemsPerPage, totalItems);
1200
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: lib.cn("space-y-4", className), children: [
1201
- showInfo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground text-center", children: isMobile ? `Page ${actualCurrentPage} of ${smartTotalPages}` : `Showing ${startItem.toLocaleString()} to ${endItem.toLocaleString()} of ${totalItems.toLocaleString()} results` }),
1202
- /* @__PURE__ */ jsxRuntime.jsx(Pagination, { children: /* @__PURE__ */ jsxRuntime.jsxs(PaginationContent, { children: [
1203
- /* @__PURE__ */ jsxRuntime.jsx(PaginationItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
1204
- PaginationPrevious,
1205
- {
1206
- href: actualHasPreviousPage ? getPageUrl(actualCurrentPage - 1) : void 0,
1207
- className: !actualHasPreviousPage ? "pointer-events-none opacity-50" : void 0
1208
- }
1209
- ) }),
1210
- visiblePages.map((page, index) => /* @__PURE__ */ jsxRuntime.jsx(PaginationItem, { children: page === "ellipsis" ? /* @__PURE__ */ jsxRuntime.jsx(PaginationEllipsis, {}) : /* @__PURE__ */ jsxRuntime.jsx(
1211
- PaginationLink,
1212
- {
1213
- href: getPageUrl(page),
1214
- isActive: page === actualCurrentPage,
1215
- children: page
1216
- }
1217
- ) }, index)),
1218
- /* @__PURE__ */ jsxRuntime.jsx(PaginationItem, { children: /* @__PURE__ */ jsxRuntime.jsx(
1219
- PaginationNext,
1220
- {
1221
- href: hasNextPage ? getPageUrl(actualCurrentPage + 1) : void 0,
1222
- className: !hasNextPage ? "pointer-events-none opacity-50" : void 0
1223
- }
1224
- ) })
1225
- ] }) })
1226
- ] });
1227
- }, "SSRPagination");
1228
- SSRPagination.displayName = "SSRPagination";
1229
- var StaticPagination = /* @__PURE__ */ __name(({
1230
- data,
1231
- onPageChange,
1232
- className,
1233
- showInfo = true,
1234
- maxVisiblePages = 7
1235
- }) => {
1236
- const isMobile = hooks_star.useIsMobile();
1237
- if (!data || !("count" in data) || !("page" in data) || !("pages" in data)) {
1238
- return null;
1239
- }
1240
- const {
1241
- count: totalItems,
1242
- page: currentPage,
1243
- pages: totalPages,
1244
- page_size: itemsPerPage,
1245
- has_next: hasNextPage,
1246
- has_previous: hasPreviousPage
1247
- } = data;
1248
- if (totalPages <= 1) {
1249
- return null;
1250
- }
1251
- const getVisiblePages = /* @__PURE__ */ __name(() => {
1252
- const mobileMaxVisible = 3;
1253
- const effectiveMaxVisible = isMobile ? mobileMaxVisible : maxVisiblePages;
1254
- if (totalPages <= effectiveMaxVisible) {
1255
- return Array.from({ length: totalPages }, (_, i) => i + 1);
1256
- }
1257
- const pages = [];
1258
- const halfVisible = Math.floor(effectiveMaxVisible / 2);
1259
- if (isMobile) {
1260
- if (currentPage > 1) {
1261
- pages.push(currentPage - 1);
1262
- }
1263
- pages.push(currentPage);
1264
- if (currentPage < totalPages) {
1265
- pages.push(currentPage + 1);
1266
- }
1267
- } else {
1268
- pages.push(1);
1269
- let start = Math.max(2, currentPage - halfVisible);
1270
- let end = Math.min(totalPages - 1, currentPage + halfVisible);
1271
- if (currentPage <= halfVisible + 1) {
1272
- end = Math.min(totalPages - 1, effectiveMaxVisible - 1);
1273
- } else if (currentPage >= totalPages - halfVisible) {
1274
- start = Math.max(2, totalPages - effectiveMaxVisible + 2);
1275
- }
1276
- if (start > 2) {
1277
- pages.push("ellipsis");
1278
- }
1279
- for (let i = start; i <= end; i++) {
1280
- pages.push(i);
1281
- }
1282
- if (end < totalPages - 1) {
1283
- pages.push("ellipsis");
1284
- }
1285
- if (totalPages > 1) {
1286
- pages.push(totalPages);
1287
- }
1288
- }
1289
- return pages;
1290
- }, "getVisiblePages");
1291
- const visiblePages = getVisiblePages();
1292
- const startItem = (currentPage - 1) * itemsPerPage + 1;
1293
- const endItem = Math.min(currentPage * itemsPerPage, totalItems);
1294
- const handlePageClick = /* @__PURE__ */ __name((page) => {
1295
- if (page !== currentPage && page >= 1 && page <= totalPages) {
1296
- onPageChange(page);
1297
- }
1298
- }, "handlePageClick");
1299
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: lib.cn("space-y-4", className), children: [
1300
- showInfo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground text-center", children: isMobile ? `Page ${currentPage} of ${totalPages}` : `Showing ${startItem.toLocaleString()} to ${endItem.toLocaleString()} of ${totalItems.toLocaleString()} results` }),
1301
- /* @__PURE__ */ jsxRuntime.jsx(Pagination, { children: /* @__PURE__ */ jsxRuntime.jsxs(PaginationContent, { children: [
1302
- /* @__PURE__ */ jsxRuntime.jsx(PaginationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(
1303
- components_star.Button,
1304
- {
1305
- variant: "ghost",
1306
- size: "default",
1307
- onClick: () => handlePageClick(currentPage - 1),
1308
- disabled: !hasPreviousPage,
1309
- className: lib.cn(
1310
- "gap-1 pl-2.5",
1311
- !hasPreviousPage && "pointer-events-none opacity-50"
1312
- ),
1313
- "aria-label": "Go to previous page",
1314
- children: [
1315
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "h-4 w-4" }),
1316
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Previous" })
1317
- ]
1318
- }
1319
- ) }),
1320
- visiblePages.map((page, index) => /* @__PURE__ */ jsxRuntime.jsx(PaginationItem, { children: page === "ellipsis" ? /* @__PURE__ */ jsxRuntime.jsx(PaginationEllipsis, {}) : /* @__PURE__ */ jsxRuntime.jsx(
1321
- components_star.Button,
1322
- {
1323
- variant: page === currentPage ? "outline" : "ghost",
1324
- size: "icon",
1325
- onClick: () => handlePageClick(page),
1326
- "aria-current": page === currentPage ? "page" : void 0,
1327
- className: lib.cn(
1328
- page === currentPage && "pointer-events-none"
1329
- ),
1330
- children: page
1331
- }
1332
- ) }, index)),
1333
- /* @__PURE__ */ jsxRuntime.jsx(PaginationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(
1334
- components_star.Button,
1335
- {
1336
- variant: "ghost",
1337
- size: "default",
1338
- onClick: () => handlePageClick(currentPage + 1),
1339
- disabled: !hasNextPage,
1340
- className: lib.cn(
1341
- "gap-1 pr-2.5",
1342
- !hasNextPage && "pointer-events-none opacity-50"
1343
- ),
1344
- "aria-label": "Go to next page",
1345
- children: [
1346
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Next" }),
1347
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "h-4 w-4" })
1348
- ]
1349
- }
1350
- ) })
1351
- ] }) })
1352
- ] });
1353
- }, "StaticPagination");
1354
- StaticPagination.displayName = "StaticPagination";
1355
- function useDRFPagination(initialPage = 1, initialPageSize = 10) {
1356
- const [page, setPage] = React6__namespace.default.useState(initialPage);
1357
- const [pageSize, setPageSize] = React6__namespace.default.useState(initialPageSize);
1358
- const handlePageSizeChange = React6__namespace.default.useCallback((newPageSize) => {
1359
- setPageSize(newPageSize);
1360
- setPage(1);
1361
- }, []);
1362
- const params = React6__namespace.default.useMemo(() => ({
1363
- page,
1364
- page_size: pageSize
1365
- }), [page, pageSize]);
1366
- return {
1367
- page,
1368
- pageSize,
1369
- setPage,
1370
- setPageSize: handlePageSizeChange,
1371
- params,
1372
- reset: /* @__PURE__ */ __name(() => {
1373
- setPage(initialPage);
1374
- setPageSize(initialPageSize);
1375
- }, "reset")
1376
- };
1377
- }
1378
- __name(useDRFPagination, "useDRFPagination");
1379
- function useDRFPaginationInfo(data) {
1380
- return React6__namespace.default.useMemo(() => {
1381
- if (!data || !("count" in data) || !("page" in data)) {
1382
- return null;
1383
- }
1384
- return {
1385
- totalItems: data.count,
1386
- currentPage: data.page,
1387
- totalPages: data.pages,
1388
- itemsPerPage: data.page_size,
1389
- hasNext: data.has_next,
1390
- hasPrevious: data.has_previous,
1391
- nextPage: data.next_page,
1392
- previousPage: data.previous_page,
1393
- results: data.results || [],
1394
- resultsCount: data.results?.length || 0
1395
- };
1396
- }, [data]);
1397
- }
1398
- __name(useDRFPaginationInfo, "useDRFPaginationInfo");
1399
- var SIDEBAR_COOKIE_NAME = "sidebar_state";
1400
- var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
1401
- var SIDEBAR_WIDTH = "16rem";
1402
- var SIDEBAR_WIDTH_MOBILE = "min(80vw, 320px)";
1403
- var SIDEBAR_WIDTH_ICON = "3rem";
1404
- var SIDEBAR_KEYBOARD_SHORTCUT = "b";
1405
- var SidebarContext = React6__namespace.createContext(null);
1406
- function useSidebar() {
1407
- const context = React6__namespace.useContext(SidebarContext);
1408
- if (!context) {
1409
- throw new Error("useSidebar must be used within a SidebarProvider.");
1410
- }
1411
- return context;
1412
- }
1413
- __name(useSidebar, "useSidebar");
1414
- var SidebarProvider = React6__namespace.forwardRef(
1415
- ({
1416
- defaultOpen = true,
1417
- open: openProp,
1418
- onOpenChange: setOpenProp,
1419
- className,
1420
- style,
1421
- children,
1422
- ...props
1423
- }, ref) => {
1424
- const isMobile = hooks_star.useIsMobile();
1425
- const [openMobile, setOpenMobile] = React6__namespace.useState(false);
1426
- const [_open, _setOpen] = React6__namespace.useState(defaultOpen);
1427
- const open = openProp ?? _open;
1428
- const setOpen = React6__namespace.useCallback(
1429
- (value) => {
1430
- const openState = typeof value === "function" ? value(open) : value;
1431
- if (setOpenProp) {
1432
- setOpenProp(openState);
1433
- } else {
1434
- _setOpen(openState);
1435
- }
1436
- document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
1437
- },
1438
- [setOpenProp, open]
1439
- );
1440
- const toggleSidebar = React6__namespace.useCallback(() => {
1441
- return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
1442
- }, [isMobile, setOpen, setOpenMobile]);
1443
- React6__namespace.useEffect(() => {
1444
- const handleKeyDown = /* @__PURE__ */ __name((event) => {
1445
- if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
1446
- event.preventDefault();
1447
- toggleSidebar();
1448
- }
1449
- }, "handleKeyDown");
1450
- window.addEventListener("keydown", handleKeyDown);
1451
- return () => window.removeEventListener("keydown", handleKeyDown);
1452
- }, [toggleSidebar]);
1453
- const state = open ? "expanded" : "collapsed";
1454
- const contextValue = React6__namespace.useMemo(
1455
- () => ({
1456
- state,
1457
- open,
1458
- setOpen,
1459
- isMobile,
1460
- openMobile,
1461
- setOpenMobile,
1462
- toggleSidebar
1463
- }),
1464
- [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
1465
- );
1466
- return /* @__PURE__ */ jsxRuntime.jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(components_star.TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxRuntime.jsx(
1467
- "div",
1468
- {
1469
- style: {
1470
- "--sidebar-width": SIDEBAR_WIDTH,
1471
- "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
1472
- ...style
1473
- },
1474
- className: lib.cn(
1475
- "group/sidebar-wrapper flex min-h-svh w-full has-[&_[data-variant=inset]]:bg-sidebar",
1476
- className
1477
- ),
1478
- ref,
1479
- ...props,
1480
- children
1481
- }
1482
- ) }) });
1483
- }
1484
- );
1485
- SidebarProvider.displayName = "SidebarProvider";
1486
- var Sidebar = React6__namespace.forwardRef(
1487
- ({
1488
- side = "left",
1489
- variant = "sidebar",
1490
- collapsible = "offcanvas",
1491
- className,
1492
- children,
1493
- ...props
1494
- }, ref) => {
1495
- const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
1496
- if (collapsible === "none") {
1497
- return /* @__PURE__ */ jsxRuntime.jsx(
1498
- "div",
1499
- {
1500
- className: lib.cn(
1501
- "flex h-full w-[--sidebar-width] flex-col bg-sidebar text-sidebar-foreground",
1502
- className
1503
- ),
1504
- ref,
1505
- ...props,
1506
- children
1507
- }
1508
- );
1509
- }
1510
- if (isMobile) {
1511
- return /* @__PURE__ */ jsxRuntime.jsx(components_star.Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxRuntime.jsxs(
1512
- components_star.SheetContent,
1513
- {
1514
- "data-sidebar": "sidebar",
1515
- "data-mobile": "true",
1516
- className: "!w-[--sidebar-width] p-0 text-sidebar-foreground [&>button]:hidden",
1517
- style: {
1518
- "--sidebar-width": SIDEBAR_WIDTH_MOBILE,
1519
- backgroundColor: "hsl(var(--sidebar-background))"
1520
- },
1521
- side,
1522
- children: [
1523
- /* @__PURE__ */ jsxRuntime.jsxs(components_star.SheetHeader, { className: "sr-only", children: [
1524
- /* @__PURE__ */ jsxRuntime.jsx(components_star.SheetTitle, { children: "Sidebar" }),
1525
- /* @__PURE__ */ jsxRuntime.jsx(components_star.SheetDescription, { children: "Displays the mobile sidebar." })
1526
- ] }),
1527
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full flex-col", style: { backgroundColor: "hsl(var(--sidebar-background))" }, children })
1528
- ]
1529
- }
1530
- ) });
1531
- }
1532
- const getGapWidth = /* @__PURE__ */ __name(() => {
1533
- if (state === "collapsed") {
1534
- if (collapsible === "offcanvas") return "0";
1535
- if (collapsible === "icon") {
1536
- return variant === "floating" || variant === "inset" ? "calc(var(--sidebar-width-icon) + 1rem)" : "var(--sidebar-width-icon)";
1537
- }
1538
- }
1539
- return "var(--sidebar-width)";
1540
- }, "getGapWidth");
1541
- const getFixedWidth = /* @__PURE__ */ __name(() => {
1542
- if (state === "collapsed" && collapsible === "icon") {
1543
- return variant === "floating" || variant === "inset" ? "calc(var(--sidebar-width-icon) + 1rem + 2px)" : "var(--sidebar-width-icon)";
1544
- }
1545
- return "var(--sidebar-width)";
1546
- }, "getFixedWidth");
1547
- return /* @__PURE__ */ jsxRuntime.jsxs(
1548
- "div",
1549
- {
1550
- ref,
1551
- className: "group peer hidden text-sidebar-foreground md:block",
1552
- "data-state": state,
1553
- "data-collapsible": collapsible,
1554
- "data-variant": variant,
1555
- "data-side": side,
1556
- children: [
1557
- /* @__PURE__ */ jsxRuntime.jsx(
1558
- "div",
1559
- {
1560
- className: lib.cn(
1561
- "relative h-full bg-transparent transition-[width] duration-200 ease-linear",
1562
- side === "right" && "rotate-180"
1563
- ),
1564
- style: {
1565
- width: getGapWidth()
1566
- }
1567
- }
1568
- ),
1569
- /* @__PURE__ */ jsxRuntime.jsx(
1570
- "div",
1571
- {
1572
- className: lib.cn(
1573
- "fixed inset-y-0 z-10 hidden h-svh transition-[left,right,width] duration-200 ease-linear md:flex",
1574
- side === "left" ? state === "collapsed" && collapsible === "offcanvas" ? "left-[calc(var(--sidebar-width)*-1)]" : "left-0" : state === "collapsed" && collapsible === "offcanvas" ? "right-[calc(var(--sidebar-width)*-1)]" : "right-0",
1575
- // Adjust the padding for floating and inset variants.
1576
- variant === "floating" || variant === "inset" ? "p-2" : lib.cn(
1577
- side === "left" && "border-r",
1578
- side === "right" && "border-l"
1579
- ),
1580
- className
1581
- ),
1582
- style: {
1583
- width: getFixedWidth()
1584
- },
1585
- ...props,
1586
- children: /* @__PURE__ */ jsxRuntime.jsx(
1587
- "div",
1588
- {
1589
- "data-sidebar": "sidebar",
1590
- className: lib.cn(
1591
- "flex h-full w-full flex-col bg-sidebar",
1592
- variant === "floating" && "rounded-lg border border-sidebar-border shadow"
1593
- ),
1594
- children
1595
- }
1596
- )
1597
- }
1598
- )
1599
- ]
1600
- }
1601
- );
1602
- }
1603
- );
1604
- Sidebar.displayName = "Sidebar";
1605
- var SidebarTrigger = React6__namespace.forwardRef(({ className, onClick, ...props }, ref) => {
1606
- const { toggleSidebar } = useSidebar();
1607
- return /* @__PURE__ */ jsxRuntime.jsxs(
1608
- components_star.Button,
1609
- {
1610
- ref,
1611
- "data-sidebar": "trigger",
1612
- variant: "ghost",
1613
- size: "icon",
1614
- className: lib.cn("h-7 w-7", className),
1615
- onClick: (event) => {
1616
- onClick?.(event);
1617
- toggleSidebar();
1618
- },
1619
- ...props,
1620
- children: [
1621
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PanelLeft, {}),
1622
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Toggle Sidebar" })
1623
- ]
1624
- }
1625
- );
1626
- });
1627
- SidebarTrigger.displayName = "SidebarTrigger";
1628
- var SidebarRail = React6__namespace.forwardRef(({ className, ...props }, ref) => {
1629
- const { toggleSidebar } = useSidebar();
1630
- return /* @__PURE__ */ jsxRuntime.jsx(
1631
- "button",
1632
- {
1633
- ref,
1634
- "data-sidebar": "rail",
1635
- "aria-label": "Toggle Sidebar",
1636
- tabIndex: -1,
1637
- onClick: toggleSidebar,
1638
- title: "Toggle Sidebar",
1639
- className: lib.cn(
1640
- "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-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex",
1641
- "group-data-[side=left]:cursor-w-resize group-data-[side=right]:cursor-e-resize",
1642
- "group-data-[side=left]:group-data-[state=collapsed]:cursor-e-resize group-data-[side=right]:group-data-[state=collapsed]:cursor-w-resize",
1643
- "group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar",
1644
- "group-data-[side=left]:group-data-[collapsible=offcanvas]:-right-2",
1645
- "group-data-[side=right]:group-data-[collapsible=offcanvas]:-left-2",
1646
- className
1647
- ),
1648
- ...props
1649
- }
1650
- );
1651
- });
1652
- SidebarRail.displayName = "SidebarRail";
1653
- var SidebarInset = React6__namespace.forwardRef(({ className, ...props }, ref) => {
1654
- return /* @__PURE__ */ jsxRuntime.jsx(
1655
- "main",
1656
- {
1657
- ref,
1658
- className: lib.cn(
1659
- "relative flex w-full flex-1 flex-col bg-background",
1660
- "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",
1661
- className
1662
- ),
1663
- ...props
1664
- }
1665
- );
1666
- });
1667
- SidebarInset.displayName = "SidebarInset";
1668
- var SidebarInput = React6__namespace.forwardRef(({ className, ...props }, ref) => {
1669
- return /* @__PURE__ */ jsxRuntime.jsx(
1670
- components_star.Input,
1671
- {
1672
- ref,
1673
- "data-sidebar": "input",
1674
- className: lib.cn(
1675
- "h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring",
1676
- className
1677
- ),
1678
- ...props
1679
- }
1680
- );
1681
- });
1682
- SidebarInput.displayName = "SidebarInput";
1683
- var SidebarHeader = React6__namespace.forwardRef(({ className, style, ...props }, ref) => {
1684
- const { state } = useSidebar();
1685
- const headerStyle = state === "collapsed" ? {
1686
- paddingLeft: "0",
1687
- paddingRight: "0",
1688
- paddingTop: "0.5rem",
1689
- paddingBottom: "0.5rem",
1690
- transition: "padding 200ms ease-in-out",
1691
- ...style
1692
- } : {
1693
- transition: "padding 200ms ease-in-out",
1694
- ...style
1695
- };
1696
- return /* @__PURE__ */ jsxRuntime.jsx(
1697
- "div",
1698
- {
1699
- ref,
1700
- "data-sidebar": "header",
1701
- className: lib.cn("flex flex-col gap-2 p-2", className),
1702
- style: headerStyle,
1703
- ...props
1704
- }
1705
- );
1706
- });
1707
- SidebarHeader.displayName = "SidebarHeader";
1708
- var SidebarFooter = React6__namespace.forwardRef(({ className, ...props }, ref) => {
1709
- return /* @__PURE__ */ jsxRuntime.jsx(
1710
- "div",
1711
- {
1712
- ref,
1713
- "data-sidebar": "footer",
1714
- className: lib.cn("flex flex-col gap-2 p-2", className),
1715
- ...props
1716
- }
1717
- );
1718
- });
1719
- SidebarFooter.displayName = "SidebarFooter";
1720
- var SidebarSeparator = React6__namespace.forwardRef(({ className, ...props }, ref) => {
1721
- return /* @__PURE__ */ jsxRuntime.jsx(
1722
- components_star.Separator,
1723
- {
1724
- ref,
1725
- "data-sidebar": "separator",
1726
- className: lib.cn("mx-2 w-auto bg-sidebar-border", className),
1727
- ...props
1728
- }
1729
- );
1730
- });
1731
- SidebarSeparator.displayName = "SidebarSeparator";
1732
- var SidebarContent = React6__namespace.forwardRef(({ className, ...props }, ref) => {
1733
- return /* @__PURE__ */ jsxRuntime.jsx(
1734
- "div",
1735
- {
1736
- ref,
1737
- "data-sidebar": "content",
1738
- className: lib.cn(
1739
- "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[state=collapsed]:group-data-[collapsible=icon]:overflow-hidden",
1740
- className
1741
- ),
1742
- ...props
1743
- }
1744
- );
1745
- });
1746
- SidebarContent.displayName = "SidebarContent";
1747
- var SidebarGroup = React6__namespace.forwardRef(({ className, ...props }, ref) => {
1748
- return /* @__PURE__ */ jsxRuntime.jsx(
1749
- "div",
1750
- {
1751
- ref,
1752
- "data-sidebar": "group",
1753
- className: lib.cn("relative flex w-full min-w-0 flex-col p-2", className),
1754
- ...props
1755
- }
1756
- );
1757
- });
1758
- SidebarGroup.displayName = "SidebarGroup";
1759
- var SidebarGroupLabel = React6__namespace.forwardRef(({ className, asChild = false, ...props }, ref) => {
1760
- const Comp = asChild ? reactSlot.Slot : "div";
1761
- return /* @__PURE__ */ jsxRuntime.jsx(
1762
- Comp,
1763
- {
1764
- ref,
1765
- "data-sidebar": "group-label",
1766
- className: lib.cn(
1767
- "flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-semibold text-muted-foreground uppercase tracking-wider outline-none ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
1768
- "group-data-[state=collapsed]:group-data-[collapsible=icon]:-mt-8 group-data-[state=collapsed]:group-data-[collapsible=icon]:opacity-0",
1769
- className
1770
- ),
1771
- ...props
1772
- }
1773
- );
1774
- });
1775
- SidebarGroupLabel.displayName = "SidebarGroupLabel";
1776
- var SidebarGroupAction = React6__namespace.forwardRef(({ className, asChild = false, ...props }, ref) => {
1777
- const Comp = asChild ? reactSlot.Slot : "button";
1778
- return /* @__PURE__ */ jsxRuntime.jsx(
1779
- Comp,
1780
- {
1781
- ref,
1782
- "data-sidebar": "group-action",
1783
- className: lib.cn(
1784
- "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",
1785
- // Increases the hit area of the button on mobile.
1786
- "after:absolute after:-inset-2 after:md:hidden",
1787
- "group-data-[state=collapsed]:group-data-[collapsible=icon]:hidden",
1788
- className
1789
- ),
1790
- ...props
1791
- }
1792
- );
1793
- });
1794
- SidebarGroupAction.displayName = "SidebarGroupAction";
1795
- var SidebarGroupContent = React6__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1796
- "div",
1797
- {
1798
- ref,
1799
- "data-sidebar": "group-content",
1800
- className: lib.cn("w-full text-sm", className),
1801
- ...props
1802
- }
1803
- ));
1804
- SidebarGroupContent.displayName = "SidebarGroupContent";
1805
- var SidebarMenu = React6__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1806
- "ul",
1807
- {
1808
- ref,
1809
- "data-sidebar": "menu",
1810
- className: lib.cn("flex w-full min-w-0 flex-col gap-1", className),
1811
- ...props
1812
- }
1813
- ));
1814
- SidebarMenu.displayName = "SidebarMenu";
1815
- var SidebarMenuItem = React6__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1816
- "li",
1817
- {
1818
- ref,
1819
- "data-sidebar": "menu-item",
1820
- className: lib.cn("group/menu-item relative", className),
1821
- ...props
1822
- }
1823
- ));
1824
- SidebarMenuItem.displayName = "SidebarMenuItem";
1825
- var sidebarMenuButtonVariants = classVarianceAuthority.cva(
1826
- "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 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-muted-foreground [&>svg]:opacity-70 data-[active=true]:[&>svg]:text-sidebar-accent-foreground data-[active=true]:[&>svg]:opacity-100 hover:[&>svg]:text-sidebar-accent-foreground hover:[&>svg]:opacity-100",
1827
- {
1828
- variants: {
1829
- variant: {
1830
- default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
1831
- 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))]"
1832
- },
1833
- size: {
1834
- default: "h-8 text-sm",
1835
- sm: "h-7 text-xs",
1836
- lg: "h-12 text-sm group-data-[state=collapsed]:group-data-[collapsible=icon]:!p-0"
1837
- }
1838
- },
1839
- defaultVariants: {
1840
- variant: "default",
1841
- size: "default"
1842
- }
1843
- }
1844
- );
1845
- var SidebarMenuButton = React6__namespace.forwardRef(
1846
- ({
1847
- asChild = false,
1848
- isActive = false,
1849
- variant = "default",
1850
- size = "default",
1851
- tooltip,
1852
- className,
1853
- style,
1854
- href,
1855
- children,
1856
- ...props
1857
- }, ref) => {
1858
- const { isMobile, state } = useSidebar();
1859
- const buttonContent = React6__namespace.useMemo(() => {
1860
- if (href) {
1861
- return /* @__PURE__ */ jsxRuntime.jsx(
1862
- Link5__default.default,
1863
- {
1864
- href,
1865
- className: lib.cn(sidebarMenuButtonVariants({ variant, size }), className),
1866
- style,
1867
- "data-sidebar": "menu-button",
1868
- "data-size": size,
1869
- "data-active": isActive,
1870
- children
1871
- }
1872
- );
1873
- }
1874
- const Comp = asChild ? reactSlot.Slot : "button";
1875
- return /* @__PURE__ */ jsxRuntime.jsx(
1876
- Comp,
1877
- {
1878
- ref,
1879
- "data-sidebar": "menu-button",
1880
- "data-size": size,
1881
- "data-active": isActive,
1882
- className: lib.cn(sidebarMenuButtonVariants({ variant, size }), className),
1883
- style,
1884
- ...props,
1885
- children
1886
- }
1887
- );
1888
- }, [href, asChild, ref, variant, size, className, style, isActive, children, props]);
1889
- if (!tooltip) {
1890
- return buttonContent;
1891
- }
1892
- if (typeof tooltip === "string") {
1893
- tooltip = {
1894
- children: tooltip
1895
- };
1896
- }
1897
- return /* @__PURE__ */ jsxRuntime.jsxs(components_star.Tooltip, { children: [
1898
- /* @__PURE__ */ jsxRuntime.jsx(components_star.TooltipTrigger, { asChild: true, children: buttonContent }),
1899
- /* @__PURE__ */ jsxRuntime.jsx(
1900
- components_star.TooltipContent,
1901
- {
1902
- side: "right",
1903
- align: "center",
1904
- hidden: state !== "collapsed" || isMobile,
1905
- ...tooltip
1906
- }
1907
- )
1908
- ] });
1909
- }
1910
- );
1911
- SidebarMenuButton.displayName = "SidebarMenuButton";
1912
- var SidebarMenuAction = React6__namespace.forwardRef(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
1913
- const Comp = asChild ? reactSlot.Slot : "button";
1914
- return /* @__PURE__ */ jsxRuntime.jsx(
1915
- Comp,
1916
- {
1917
- ref,
1918
- "data-sidebar": "menu-action",
1919
- className: lib.cn(
1920
- "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",
1921
- // Increases the hit area of the button on mobile.
1922
- "after:absolute after:-inset-2 after:md:hidden",
1923
- "peer-data-[size=sm]/menu-button:top-1",
1924
- "peer-data-[size=default]/menu-button:top-1.5",
1925
- "peer-data-[size=lg]/menu-button:top-2.5",
1926
- "group-data-[state=collapsed]:group-data-[collapsible=icon]:hidden",
1927
- 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",
1928
- className
1929
- ),
1930
- ...props
1931
- }
1932
- );
1933
- });
1934
- SidebarMenuAction.displayName = "SidebarMenuAction";
1935
- var SidebarMenuBadge = React6__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1936
- "div",
1937
- {
1938
- ref,
1939
- "data-sidebar": "menu-badge",
1940
- className: lib.cn(
1941
- "pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground",
1942
- "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground",
1943
- "peer-data-[size=sm]/menu-button:top-1",
1944
- "peer-data-[size=default]/menu-button:top-1.5",
1945
- "peer-data-[size=lg]/menu-button:top-2.5",
1946
- "group-data-[state=collapsed]:group-data-[collapsible=icon]:hidden",
1947
- className
1948
- ),
1949
- ...props
1950
- }
1951
- ));
1952
- SidebarMenuBadge.displayName = "SidebarMenuBadge";
1953
- var SidebarMenuSkeleton = React6__namespace.forwardRef(({ className, showIcon = false, ...props }, ref) => {
1954
- const width = React6__namespace.useMemo(() => {
1955
- return `${Math.floor(Math.random() * 40) + 50}%`;
1956
- }, []);
1957
- return /* @__PURE__ */ jsxRuntime.jsxs(
1958
- "div",
1959
- {
1960
- ref,
1961
- "data-sidebar": "menu-skeleton",
1962
- className: lib.cn("flex h-8 items-center gap-2 rounded-md px-2", className),
1963
- ...props,
1964
- children: [
1965
- showIcon && /* @__PURE__ */ jsxRuntime.jsx(
1966
- components_star.Skeleton,
1967
- {
1968
- className: "size-4 rounded-md",
1969
- "data-sidebar": "menu-skeleton-icon"
1970
- }
1971
- ),
1972
- /* @__PURE__ */ jsxRuntime.jsx(
1973
- components_star.Skeleton,
1974
- {
1975
- className: "h-4 max-w-[--skeleton-width] flex-1",
1976
- "data-sidebar": "menu-skeleton-text",
1977
- style: {
1978
- "--skeleton-width": width
1979
- }
1980
- }
1981
- )
1982
- ]
1983
- }
1984
- );
1985
- });
1986
- SidebarMenuSkeleton.displayName = "SidebarMenuSkeleton";
1987
- var SidebarMenuSub = React6__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
1988
- "ul",
1989
- {
1990
- ref,
1991
- "data-sidebar": "menu-sub",
1992
- className: lib.cn(
1993
- "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",
1994
- "group-data-[state=collapsed]:group-data-[collapsible=icon]:hidden",
1995
- className
1996
- ),
1997
- ...props
1998
- }
1999
- ));
2000
- SidebarMenuSub.displayName = "SidebarMenuSub";
2001
- var SidebarMenuSubItem = React6__namespace.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("li", { ref, ...props }));
2002
- SidebarMenuSubItem.displayName = "SidebarMenuSubItem";
2003
- var SidebarMenuSubButton = React6__namespace.forwardRef(({ asChild = false, size = "md", isActive, className, href, children, ...props }, ref) => {
2004
- const Comp = asChild ? reactSlot.Slot : "a";
2005
- const buttonClasses = lib.cn(
2006
- "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-muted-foreground [&>svg]:opacity-70 data-[active=true]:[&>svg]:text-sidebar-accent-foreground data-[active=true]:[&>svg]:opacity-100 hover:[&>svg]:text-sidebar-accent-foreground hover:[&>svg]:opacity-100",
2007
- "data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground",
2008
- size === "sm" && "text-xs",
2009
- size === "md" && "text-sm",
2010
- "group-data-[state=collapsed]:group-data-[collapsible=icon]:hidden",
2011
- className
2012
- );
2013
- if (href) {
2014
- return /* @__PURE__ */ jsxRuntime.jsx(
2015
- Link5__default.default,
2016
- {
2017
- href,
2018
- className: buttonClasses,
2019
- "data-sidebar": "menu-sub-button",
2020
- "data-size": size,
2021
- "data-active": isActive,
2022
- children
2023
- }
2024
- );
2025
- }
2026
- return /* @__PURE__ */ jsxRuntime.jsx(
2027
- Comp,
2028
- {
2029
- ref,
2030
- "data-sidebar": "menu-sub-button",
2031
- "data-size": size,
2032
- "data-active": isActive,
2033
- className: buttonClasses,
2034
- ...props,
2035
- children
2036
- }
2037
- );
2038
- });
2039
- SidebarMenuSubButton.displayName = "SidebarMenuSubButton";
2040
-
2041
- // src/index.ts
2042
- __reExport(index_exports, components_exports);
2043
- __reExport(index_exports, hooks_exports);
2044
- var typeConfig = {
2045
- security: { label: "Security", variant: "destructive", icon: "\u{1F6E1}\uFE0F" },
2046
- release: { label: "Release", variant: "default", icon: "\u{1F4E6}" },
2047
- announcement: { label: "Announcement", variant: "secondary", icon: "\u{1F4E2}" },
2048
- feature: { label: "Feature", variant: "outline", icon: "\u2728" }
2049
- };
2050
- var ArticleCard = /* @__PURE__ */ __name(({
2051
- title,
2052
- description,
2053
- date,
2054
- type,
2055
- href,
2056
- author,
2057
- tags,
2058
- featured = false,
2059
- className
2060
- }) => {
2061
- const config = typeConfig[type];
2062
- const formattedDate = moment2__default.default(date).format("MMMM D, YYYY");
2063
- return /* @__PURE__ */ jsxRuntime.jsxs(components_star.Card, { className: lib.cn(
2064
- "group relative overflow-hidden transition-all duration-200 hover:shadow-lg",
2065
- featured && "border-primary/50 bg-primary/5",
2066
- className
2067
- ), children: [
2068
- /* @__PURE__ */ jsxRuntime.jsxs(components_star.CardHeader, { className: "pb-3", children: [
2069
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2 mb-2", children: [
2070
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2071
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg", children: config.icon }),
2072
- /* @__PURE__ */ jsxRuntime.jsx(components_star.Badge, { variant: config.variant, children: config.label })
2073
- ] }),
2074
- /* @__PURE__ */ jsxRuntime.jsx("time", { className: "text-sm text-muted-foreground", children: formattedDate })
2075
- ] }),
2076
- /* @__PURE__ */ jsxRuntime.jsx(components_star.CardTitle, { className: "text-xl group-hover:text-primary transition-colors line-clamp-2", children: /* @__PURE__ */ jsxRuntime.jsx("a", { href, className: "hover:underline", children: title }) }),
2077
- description && /* @__PURE__ */ jsxRuntime.jsx(components_star.CardDescription, { className: "line-clamp-2 mt-2", children: description })
2078
- ] }),
2079
- /* @__PURE__ */ jsxRuntime.jsx(components_star.CardContent, { className: "pt-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
2080
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2081
- author && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-muted-foreground", children: [
2082
- "by ",
2083
- author
2084
- ] }),
2085
- tags && tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-1", children: tags.slice(0, 2).map((tag) => /* @__PURE__ */ jsxRuntime.jsx(components_star.Badge, { variant: "outline", className: "text-xs", children: tag }, tag)) })
2086
- ] }),
2087
- /* @__PURE__ */ jsxRuntime.jsx(components_star.ButtonLink, { href, variant: "ghost", size: "sm", children: "Read more \u2192" })
2088
- ] }) })
2089
- ] });
2090
- }, "ArticleCard");
2091
- var ArticleList = /* @__PURE__ */ __name(({
2092
- articles,
2093
- title,
2094
- description,
2095
- showFeatured = true,
2096
- columns = 2,
2097
- className
2098
- }) => {
2099
- const { featuredArticles, regularArticles } = React6.useMemo(() => {
2100
- const sorted = [...articles].sort(
2101
- (a, b) => moment2__default.default(b.date).valueOf() - moment2__default.default(a.date).valueOf()
2102
- );
2103
- return {
2104
- featuredArticles: showFeatured ? sorted.filter((a) => a.featured) : [],
2105
- regularArticles: showFeatured ? sorted.filter((a) => !a.featured) : sorted
2106
- };
2107
- }, [articles, showFeatured]);
2108
- const gridCols = {
2109
- 1: "grid-cols-1",
2110
- 2: "grid-cols-1 md:grid-cols-2",
2111
- 3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
2112
- };
2113
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: lib.cn("py-8", className), children: [
2114
- (title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-8", children: [
2115
- title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl font-bold tracking-tight", children: title }),
2116
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-muted-foreground", children: description })
2117
- ] }),
2118
- featuredArticles.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-8", children: [
2119
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold uppercase tracking-wider text-muted-foreground mb-4", children: "Featured" }),
2120
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-4", children: featuredArticles.map((article, index) => /* @__PURE__ */ jsxRuntime.jsx(ArticleCard, { ...article, featured: true }, index)) })
2121
- ] }),
2122
- regularArticles.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: lib.cn("grid gap-4", gridCols[columns]), children: regularArticles.map((article, index) => /* @__PURE__ */ jsxRuntime.jsx(ArticleCard, { ...article }, index)) }),
2123
- articles.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center py-12 text-muted-foreground", children: "No articles yet. Check back soon!" })
2124
- ] });
2125
- }, "ArticleList");
2126
- var CTASection = /* @__PURE__ */ __name(({
2127
- title,
2128
- subtitle,
2129
- primaryCTA,
2130
- secondaryCTA,
2131
- background = "default",
2132
- className,
2133
- children
2134
- }) => {
2135
- const backgroundClasses = {
2136
- default: "bg-background",
2137
- muted: "bg-muted/30",
2138
- primary: "bg-primary/5",
2139
- gradient: "bg-gradient-to-b from-background via-primary/5 to-background"
2140
- };
2141
- return /* @__PURE__ */ jsxRuntime.jsxs(
2142
- "section",
2143
- {
2144
- className: lib.cn(
2145
- "relative py-16 sm:py-20 md:py-24 lg:py-32",
2146
- backgroundClasses[background],
2147
- className
2148
- ),
2149
- children: [
2150
- background === "gradient" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 -z-10 overflow-hidden pointer-events-none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full max-w-4xl aspect-square bg-primary/10 rounded-full blur-3xl" }) }),
2151
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "container max-w-4xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center space-y-6 sm:space-y-8", children: [
2152
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight", children: title }),
2153
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base sm:text-lg md:text-xl text-muted-foreground max-w-2xl mx-auto leading-relaxed", children: subtitle }),
2154
- (primaryCTA || secondaryCTA) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col sm:flex-row gap-3 sm:gap-4 justify-center items-center pt-4", children: [
2155
- primaryCTA && (primaryCTA.onClick ? /* @__PURE__ */ jsxRuntime.jsx(
2156
- components_star.Button,
2157
- {
2158
- onClick: primaryCTA.onClick,
2159
- variant: primaryCTA.variant || "default",
2160
- size: primaryCTA.size || "lg",
2161
- className: "w-full sm:w-auto",
2162
- children: primaryCTA.label
2163
- }
2164
- ) : /* @__PURE__ */ jsxRuntime.jsx(
2165
- components_star.Button,
2166
- {
2167
- asChild: true,
2168
- variant: primaryCTA.variant || "default",
2169
- size: primaryCTA.size || "lg",
2170
- className: "w-full sm:w-auto",
2171
- children: /* @__PURE__ */ jsxRuntime.jsx(Link5__default.default, { href: primaryCTA.href || "#", children: primaryCTA.label })
2172
- }
2173
- )),
2174
- secondaryCTA && (secondaryCTA.onClick ? /* @__PURE__ */ jsxRuntime.jsx(
2175
- components_star.Button,
2176
- {
2177
- onClick: secondaryCTA.onClick,
2178
- variant: secondaryCTA.variant || "outline",
2179
- size: secondaryCTA.size || "lg",
2180
- className: "w-full sm:w-auto",
2181
- children: secondaryCTA.label
2182
- }
2183
- ) : /* @__PURE__ */ jsxRuntime.jsx(
2184
- components_star.Button,
2185
- {
2186
- asChild: true,
2187
- variant: secondaryCTA.variant || "outline",
2188
- size: secondaryCTA.size || "lg",
2189
- className: "w-full sm:w-auto",
2190
- children: /* @__PURE__ */ jsxRuntime.jsx(Link5__default.default, { href: secondaryCTA.href || "#", children: secondaryCTA.label })
2191
- }
2192
- ))
2193
- ] }),
2194
- children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-8 sm:pt-12", children })
2195
- ] }) })
2196
- ]
2197
- }
2198
- );
2199
- }, "CTASection");
2200
- var FeatureSection = /* @__PURE__ */ __name(({
2201
- title,
2202
- subtitle,
2203
- features,
2204
- columns = 3,
2205
- className,
2206
- background = "dark",
2207
- variant = "default"
2208
- }) => {
2209
- const getGridClasses = /* @__PURE__ */ __name(() => {
2210
- if (variant === "compact") {
2211
- switch (columns) {
2212
- case 2:
2213
- return "grid-cols-2";
2214
- case 3:
2215
- return "grid-cols-2 md:grid-cols-3";
2216
- case 4:
2217
- return "grid-cols-2 md:grid-cols-4";
2218
- case 6:
2219
- return "grid-cols-2 md:grid-cols-3 lg:grid-cols-6";
2220
- default:
2221
- return "grid-cols-2 md:grid-cols-3";
2222
- }
2223
- }
2224
- switch (columns) {
2225
- case 1:
2226
- return "grid-cols-1 max-w-2xl mx-auto";
2227
- case 2:
2228
- return "grid-cols-1 sm:grid-cols-2";
2229
- case 3:
2230
- return "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3";
2231
- case 4:
2232
- return "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4";
2233
- case 6:
2234
- return "grid-cols-2 sm:grid-cols-3 lg:grid-cols-6";
2235
- default:
2236
- return "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3";
2237
- }
2238
- }, "getGridClasses");
2239
- const getBackgroundClasses = /* @__PURE__ */ __name(() => {
2240
- switch (background) {
2241
- case "dark":
2242
- return "bg-muted/30";
2243
- case "card":
2244
- return "bg-card";
2245
- case "gradient":
2246
- return "bg-gradient-to-b from-background to-muted/20";
2247
- case "none":
2248
- return "";
2249
- default:
2250
- return "bg-background";
2251
- }
2252
- }, "getBackgroundClasses");
2253
- if (variant === "compact") {
2254
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: lib.cn("py-12 md:py-16", getBackgroundClasses(), className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "container max-w-5xl mx-auto px-4", children: [
2255
- (title || subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center mb-8", children: [
2256
- title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-xl sm:text-2xl font-bold text-foreground mb-2", children: title }),
2257
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground max-w-2xl mx-auto", children: subtitle })
2258
- ] }),
2259
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: lib.cn("grid gap-4", getGridClasses()), children: features.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center p-4", children: [
2260
- feature.icon && /* @__PURE__ */ jsxRuntime.jsx(
2261
- "div",
2262
- {
2263
- className: lib.cn(
2264
- "w-10 h-10 mx-auto mb-3 rounded-lg flex items-center justify-center",
2265
- feature.gradient || "bg-primary/10 text-primary"
2266
- ),
2267
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "[&>svg]:w-5 [&>svg]:h-5", children: feature.icon })
2268
- }
2269
- ),
2270
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-medium text-sm mb-1", children: feature.title }),
2271
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: feature.description })
2272
- ] }, index)) })
2273
- ] }) });
2274
- }
2275
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: lib.cn("py-12 sm:py-16 lg:py-24", getBackgroundClasses(), className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full px-4 sm:px-6 lg:px-8", children: [
2276
- (title || subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center mb-12 sm:mb-16", children: [
2277
- title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold text-foreground mb-4 sm:mb-6", children: title }),
2278
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base sm:text-lg md:text-xl text-muted-foreground max-w-3xl mx-auto px-2", children: subtitle })
2279
- ] }),
2280
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: lib.cn("grid gap-6 sm:gap-8", getGridClasses()), children: features.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
2281
- components_star.Card,
2282
- {
2283
- className: "h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group",
2284
- children: [
2285
- /* @__PURE__ */ jsxRuntime.jsxs(components_star.CardHeader, { className: "pb-4", children: [
2286
- feature.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: lib.cn(
2287
- "w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300",
2288
- feature.gradient || "bg-primary/10 text-primary group-hover:bg-primary/20"
2289
- ), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xl sm:text-2xl", children: feature.icon }) }),
2290
- /* @__PURE__ */ jsxRuntime.jsx(components_star.CardTitle, { className: "text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300", children: feature.title })
2291
- ] }),
2292
- /* @__PURE__ */ jsxRuntime.jsx(components_star.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsx(components_star.CardDescription, { className: "text-sm sm:text-base text-muted-foreground leading-relaxed", children: feature.description }) })
2293
- ]
2294
- },
2295
- index
2296
- )) })
2297
- ] }) });
2298
- }, "FeatureSection");
2299
- var Hero = /* @__PURE__ */ __name(({
2300
- title,
2301
- subtitle,
2302
- description,
2303
- primaryAction,
2304
- secondaryAction,
2305
- background = "dark",
2306
- className,
2307
- children
2308
- }) => {
2309
- const backgroundClasses = {
2310
- gradient: "bg-gradient-to-b from-primary/10 to-background",
2311
- solid: "bg-primary text-primary-foreground",
2312
- image: "bg-cover bg-center bg-no-repeat text-white",
2313
- dark: "bg-background text-foreground"
2314
- };
2315
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: lib.cn(
2316
- "relative py-16 sm:py-20 md:py-24 lg:py-32",
2317
- backgroundClasses[background],
2318
- className
2319
- ), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "container max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center max-w-4xl mx-auto", children: [
2320
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base sm:text-lg md:text-xl mb-4 sm:mb-6 text-muted-foreground font-medium", children: subtitle }),
2321
- /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-4xl sm:text-5xl md:text-6xl lg:text-7xl font-bold mb-6 sm:mb-8 leading-tight", children: title }),
2322
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg sm:text-xl md:text-2xl mb-8 sm:mb-10 md:mb-12 text-muted-foreground leading-relaxed max-w-3xl mx-auto", children: description }),
2323
- (primaryAction || secondaryAction) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col sm:flex-row gap-3 sm:gap-4 justify-center", children: [
2324
- primaryAction && /* @__PURE__ */ jsxRuntime.jsx(
2325
- components_star.ButtonLink,
2326
- {
2327
- href: primaryAction.href,
2328
- variant: primaryAction.variant || "default",
2329
- size: "huge",
2330
- className: "w-full sm:w-auto",
2331
- children: primaryAction.label
2332
- }
2333
- ),
2334
- secondaryAction && /* @__PURE__ */ jsxRuntime.jsx(
2335
- components_star.ButtonLink,
2336
- {
2337
- href: secondaryAction.href,
2338
- variant: secondaryAction.variant || "outline",
2339
- size: "huge",
2340
- className: "w-full sm:w-auto",
2341
- children: secondaryAction.label
2342
- }
2343
- )
2344
- ] }),
2345
- children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-12 sm:mt-14 md:mt-16 flex justify-center", children })
2346
- ] }) }) });
2347
- }, "Hero");
2348
- var NewsletterSection = /* @__PURE__ */ __name(({
2349
- title = "Stay Updated with Our Newsletter",
2350
- description = "Get the latest insights on AI, technology, and software development delivered to your inbox.",
2351
- placeholder = "Enter your email address",
2352
- buttonText = "Subscribe",
2353
- disclaimer = "No spam, unsubscribe at any time",
2354
- background = "muted",
2355
- className,
2356
- onSubmit
2357
- }) => {
2358
- const [email, setEmail] = React6__namespace.default.useState("");
2359
- const handleSubmit = /* @__PURE__ */ __name((e) => {
2360
- e.preventDefault();
2361
- if (email && onSubmit) {
2362
- onSubmit(email);
2363
- setEmail("");
2364
- }
2365
- }, "handleSubmit");
2366
- const backgroundClasses = {
2367
- default: "bg-background",
2368
- muted: "bg-muted/50",
2369
- primary: "bg-primary/5",
2370
- gradient: "bg-gradient-to-b from-background via-primary/5 to-background"
2371
- };
2372
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: lib.cn(
2373
- "relative py-16 sm:py-20 md:py-24 lg:py-32",
2374
- backgroundClasses[background],
2375
- className
2376
- ), children: [
2377
- background === "gradient" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 -z-10 overflow-hidden pointer-events-none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full max-w-4xl aspect-square bg-primary/10 rounded-full blur-3xl" }) }),
2378
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "container max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center max-w-3xl mx-auto", children: [
2379
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight mb-4 sm:mb-6", children: title }),
2380
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base sm:text-lg md:text-xl text-muted-foreground leading-relaxed mb-8 sm:mb-10 md:mb-12", children: description }),
2381
- /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit, className: "max-w-md mx-auto", children: [
2382
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col sm:flex-row gap-3 sm:gap-4", children: [
2383
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex-1", children: [
2384
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Mail, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground pointer-events-none" }),
2385
- /* @__PURE__ */ jsxRuntime.jsx(
2386
- components_star.Input,
2387
- {
2388
- type: "email",
2389
- placeholder,
2390
- value: email,
2391
- onChange: (e) => setEmail(e.target.value),
2392
- className: "pl-10 h-12 w-full",
2393
- required: true,
2394
- "aria-label": "Email address"
2395
- }
2396
- )
2397
- ] }),
2398
- /* @__PURE__ */ jsxRuntime.jsx(
2399
- components_star.Button,
2400
- {
2401
- type: "submit",
2402
- size: "lg",
2403
- className: "h-12 w-full sm:w-auto sm:min-w-[120px]",
2404
- children: buttonText
2405
- }
2406
- )
2407
- ] }),
2408
- disclaimer && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs sm:text-sm text-muted-foreground mt-3 text-center", children: disclaimer })
2409
- ] })
2410
- ] }) })
2411
- ] });
2412
- }, "NewsletterSection");
2413
- var SplitHeroContent = /* @__PURE__ */ __name(({
2414
- badge,
2415
- title,
2416
- titleGradient,
2417
- subtitle,
2418
- features = [],
2419
- primaryAction,
2420
- secondaryAction,
2421
- align = "center",
2422
- className
2423
- }) => {
2424
- const alignClasses = {
2425
- top: "justify-start",
2426
- center: "justify-center",
2427
- bottom: "justify-end"
2428
- };
2429
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: lib.cn("flex flex-col", alignClasses[align], className), children: [
2430
- badge && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center gap-2 px-3 py-1.5 bg-primary/10 text-primary rounded-full text-sm font-medium mb-4 w-fit border border-primary/20", children: [
2431
- badge.icon || /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "w-3.5 h-3.5" }),
2432
- badge.text
2433
- ] }),
2434
- /* @__PURE__ */ jsxRuntime.jsxs("h1", { className: "text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-4 leading-tight", children: [
2435
- title,
2436
- titleGradient && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2437
- " ",
2438
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent", children: titleGradient })
2439
- ] })
2440
- ] }),
2441
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg text-muted-foreground mb-6 leading-relaxed", children: subtitle }),
2442
- features.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-3 mb-6", children: features.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
2443
- "div",
2444
- {
2445
- className: "flex items-center gap-2 text-sm text-muted-foreground",
2446
- children: [
2447
- feature.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary", children: feature.icon }),
2448
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: feature.text })
2449
- ]
2450
- },
2451
- index
2452
- )) }),
2453
- (primaryAction || secondaryAction) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap gap-3", children: [
2454
- primaryAction && /* @__PURE__ */ jsxRuntime.jsxs(
2455
- components_star.ButtonLink,
2456
- {
2457
- href: primaryAction.href || "#",
2458
- onClick: primaryAction.onClick,
2459
- variant: primaryAction.variant || "default",
2460
- size: "lg",
2461
- className: "group",
2462
- children: [
2463
- primaryAction.label,
2464
- primaryAction.icon || /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { className: "w-4 h-4 group-hover:translate-x-1 transition-transform" })
2465
- ]
2466
- }
2467
- ),
2468
- secondaryAction && /* @__PURE__ */ jsxRuntime.jsxs(
2469
- components_star.ButtonLink,
2470
- {
2471
- href: secondaryAction.href || "#",
2472
- onClick: secondaryAction.onClick,
2473
- variant: secondaryAction.variant || "outline",
2474
- size: "lg",
2475
- children: [
2476
- secondaryAction.label,
2477
- secondaryAction.icon
2478
- ]
2479
- }
2480
- )
2481
- ] })
2482
- ] });
2483
- }, "SplitHeroContent");
2484
- var SplitHeroMedia = /* @__PURE__ */ __name(({
2485
- media,
2486
- className
2487
- }) => {
2488
- const containerClass = lib.cn(
2489
- "relative w-full rounded-xl overflow-hidden",
2490
- className
2491
- );
2492
- switch (media.type) {
2493
- case "image":
2494
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: containerClass, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative aspect-[4/3] w-full", children: /* @__PURE__ */ jsxRuntime.jsx(
2495
- Image__default.default,
2496
- {
2497
- src: media.src,
2498
- alt: media.alt || "",
2499
- fill: true,
2500
- className: "object-cover",
2501
- sizes: "(max-width: 768px) 100vw, 50vw"
2502
- }
2503
- ) }) });
2504
- case "video":
2505
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: containerClass, children: /* @__PURE__ */ jsxRuntime.jsx(
2506
- uiTools.VideoPlayer,
2507
- {
2508
- source: {
2509
- type: "url",
2510
- url: media.url,
2511
- title: media.title,
2512
- poster: media.poster
2513
- },
2514
- theme: "modern",
2515
- aspectRatio: 16 / 9,
2516
- autoPlay: media.autoplay,
2517
- muted: media.muted ?? media.autoplay
2518
- }
2519
- ) });
2520
- case "custom":
2521
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: containerClass, children: media.content });
2522
- default:
2523
- return null;
2524
- }
2525
- }, "SplitHeroMedia");
2526
- var MAX_WIDTH_CLASSES = {
2527
- sm: "max-w-3xl",
2528
- md: "max-w-4xl",
2529
- lg: "max-w-5xl",
2530
- xl: "max-w-6xl",
2531
- full: "max-w-7xl"
2532
- };
2533
- var BACKGROUND_CLASSES = {
2534
- none: "",
2535
- muted: "bg-muted/30",
2536
- gradient: "bg-gradient-to-br from-primary/5 via-background to-secondary/5"
2537
- };
2538
- var SplitHero = /* @__PURE__ */ __name(({
2539
- badge,
2540
- title,
2541
- titleGradient,
2542
- subtitle,
2543
- features,
2544
- primaryAction,
2545
- secondaryAction,
2546
- media,
2547
- layout = "text-left",
2548
- mobileOrder = "text-first",
2549
- align = "center",
2550
- maxWidth = "xl",
2551
- background = "none",
2552
- className
2553
- }) => {
2554
- const isTextLeft = layout === "text-left";
2555
- const isMediaFirst = mobileOrder === "media-first";
2556
- return /* @__PURE__ */ jsxRuntime.jsx(
2557
- "section",
2558
- {
2559
- className: lib.cn(
2560
- "py-12 md:py-16 lg:py-20",
2561
- BACKGROUND_CLASSES[background],
2562
- className
2563
- ),
2564
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: lib.cn("mx-auto px-4", MAX_WIDTH_CLASSES[maxWidth]), children: /* @__PURE__ */ jsxRuntime.jsxs(
2565
- "div",
2566
- {
2567
- className: lib.cn(
2568
- "grid gap-8 lg:gap-12 items-center",
2569
- media ? "lg:grid-cols-2" : "lg:grid-cols-1 max-w-3xl mx-auto"
2570
- ),
2571
- children: [
2572
- /* @__PURE__ */ jsxRuntime.jsx(
2573
- "div",
2574
- {
2575
- className: lib.cn(
2576
- // Desktop order based on layout
2577
- isTextLeft ? "lg:order-1" : "lg:order-2",
2578
- // Mobile order based on mobileOrder
2579
- isMediaFirst ? "order-2" : "order-1"
2580
- ),
2581
- children: /* @__PURE__ */ jsxRuntime.jsx(
2582
- SplitHeroContent,
2583
- {
2584
- badge,
2585
- title,
2586
- titleGradient,
2587
- subtitle,
2588
- features,
2589
- primaryAction,
2590
- secondaryAction,
2591
- align
2592
- }
2593
- )
2594
- }
2595
- ),
2596
- media && /* @__PURE__ */ jsxRuntime.jsx(
2597
- "div",
2598
- {
2599
- className: lib.cn(
2600
- // Desktop order based on layout
2601
- isTextLeft ? "lg:order-2" : "lg:order-1",
2602
- // Mobile order based on mobileOrder
2603
- isMediaFirst ? "order-1" : "order-2"
2604
- ),
2605
- children: /* @__PURE__ */ jsxRuntime.jsx(SplitHeroMedia, { media })
2606
- }
2607
- )
2608
- ]
2609
- }
2610
- ) })
2611
- }
2612
- );
2613
- }, "SplitHero");
2614
- var StatsSection = /* @__PURE__ */ __name(({
2615
- title,
2616
- subtitle,
2617
- stats,
2618
- columns = 4,
2619
- className,
2620
- background = "dark"
2621
- }) => {
2622
- const getGridClasses = /* @__PURE__ */ __name(() => {
2623
- switch (columns) {
2624
- case 2:
2625
- return "grid-cols-1 sm:grid-cols-2";
2626
- case 3:
2627
- return "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3";
2628
- case 4:
2629
- return "grid-cols-2 sm:grid-cols-2 lg:grid-cols-4";
2630
- default:
2631
- return "grid-cols-2 sm:grid-cols-2 lg:grid-cols-4";
2632
- }
2633
- }, "getGridClasses");
2634
- const getBackgroundClasses = /* @__PURE__ */ __name(() => {
2635
- switch (background) {
2636
- case "dark":
2637
- return "bg-background";
2638
- case "card":
2639
- return "gradient-card";
2640
- case "gradient":
2641
- return "gradient-subtle";
2642
- default:
2643
- return "bg-background";
2644
- }
2645
- }, "getBackgroundClasses");
2646
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: lib.cn("py-12 sm:py-16 lg:py-24", getBackgroundClasses(), className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full px-4 sm:px-6 lg:px-8", children: [
2647
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center mb-12 sm:mb-16 animate-fade-in", children: [
2648
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold text-foreground mb-4 sm:mb-6", children: title }),
2649
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base sm:text-lg md:text-xl text-muted-foreground max-w-3xl mx-auto px-2", children: subtitle })
2650
- ] }),
2651
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: lib.cn("grid gap-6 sm:gap-8", getGridClasses()), children: stats.map((stat, index) => /* @__PURE__ */ jsxRuntime.jsx(
2652
- components_star.Card,
2653
- {
2654
- className: "text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group",
2655
- style: { animationDelay: `${index * 0.1}s` },
2656
- children: /* @__PURE__ */ jsxRuntime.jsxs(components_star.CardContent, { className: "p-6 sm:p-8", children: [
2657
- stat.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xl sm:text-2xl", children: stat.icon }) }),
2658
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300", children: stat.number }),
2659
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm sm:text-base text-muted-foreground font-medium", children: stat.label }),
2660
- stat.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs sm:text-sm text-muted-foreground mt-2", children: stat.description })
2661
- ] })
2662
- },
2663
- index
2664
- )) })
2665
- ] }) });
2666
- }, "StatsSection");
2667
- var variantMap = {
2668
- "gradient-mesh": "mesh-gradient",
2669
- "dot-matrix": "geometric-flow",
2670
- "grid-lines": "geometric-flow",
2671
- "aurora": "aurora-borealis",
2672
- "particles": "floating-orbs",
2673
- "waves": "liquid-gradient"
2674
- };
2675
- var AnimatedBackground = /* @__PURE__ */ __name(({
2676
- variant = "mesh-gradient",
2677
- className,
2678
- intensity = "medium",
2679
- colorScheme = "vibrant"
2680
- }) => {
2681
- const resolvedVariant = variantMap[variant] || variant;
2682
- const intensityConfig = React6.useMemo(() => ({
2683
- subtle: { opacity: 0.15, blur: "blur-3xl", scale: 0.8 },
2684
- medium: { opacity: 0.25, blur: "blur-2xl", scale: 1 },
2685
- strong: { opacity: 0.4, blur: "blur-xl", scale: 1.2 }
2686
- })[intensity], [intensity]);
2687
- const colors = React6.useMemo(() => {
2688
- const palettes = {
2689
- vibrant: [
2690
- "hsl(var(--chart-1))",
2691
- // Blue
2692
- "hsl(var(--chart-2))",
2693
- // Green
2694
- "hsl(var(--chart-3))",
2695
- // Purple
2696
- "hsl(var(--chart-4))",
2697
- // Orange
2698
- "hsl(var(--chart-5))"
2699
- // Red
2700
- ],
2701
- monochrome: [
2702
- "hsl(var(--primary))",
2703
- "hsl(var(--primary) / 0.8)",
2704
- "hsl(var(--primary) / 0.6)"
2705
- ],
2706
- cool: [
2707
- "hsl(var(--chart-1))",
2708
- // Blue
2709
- "hsl(var(--chart-3))",
2710
- // Purple
2711
- "hsl(210 100% 50%)",
2712
- // Bright blue
2713
- "hsl(260 100% 60%)"
2714
- // Violet
2715
- ],
2716
- warm: [
2717
- "hsl(var(--chart-4))",
2718
- // Orange
2719
- "hsl(var(--chart-5))",
2720
- // Red
2721
- "hsl(35 100% 55%)",
2722
- // Gold
2723
- "hsl(350 100% 60%)"
2724
- // Rose
2725
- ]
2726
- };
2727
- return palettes[colorScheme];
2728
- }, [colorScheme]);
2729
- if (resolvedVariant === "none") {
2730
- return null;
2731
- }
2732
- return /* @__PURE__ */ jsxRuntime.jsxs(
2733
- "div",
2734
- {
2735
- className: lib.cn("absolute overflow-hidden pointer-events-none", className),
2736
- style: { inset: 0, width: "100%", height: "100%" },
2737
- children: [
2738
- resolvedVariant === "aurora-borealis" && /* @__PURE__ */ jsxRuntime.jsx(AuroraBorealis, { colors, intensity: intensityConfig }),
2739
- resolvedVariant === "mesh-gradient" && /* @__PURE__ */ jsxRuntime.jsx(MeshGradient, { colors, intensity: intensityConfig }),
2740
- resolvedVariant === "floating-orbs" && /* @__PURE__ */ jsxRuntime.jsx(FloatingOrbs, { colors, intensity: intensityConfig }),
2741
- resolvedVariant === "geometric-flow" && /* @__PURE__ */ jsxRuntime.jsx(GeometricFlow, { colors, intensity: intensityConfig }),
2742
- resolvedVariant === "liquid-gradient" && /* @__PURE__ */ jsxRuntime.jsx(LiquidGradient, { colors, intensity: intensityConfig }),
2743
- resolvedVariant === "spotlight" && /* @__PURE__ */ jsxRuntime.jsx(Spotlight, { colors, intensity: intensityConfig }),
2744
- /* @__PURE__ */ jsxRuntime.jsx(AnimationStyles, {})
2745
- ]
2746
- }
2747
- );
2748
- }, "AnimatedBackground");
2749
- var AuroraBorealis = /* @__PURE__ */ __name(({ colors, intensity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2750
- /* @__PURE__ */ jsxRuntime.jsx(
2751
- "div",
2752
- {
2753
- className: "absolute inset-0",
2754
- style: {
2755
- background: `linear-gradient(135deg, ${colors[0]} 0%, transparent 50%, ${colors[1]} 100%)`,
2756
- opacity: intensity.opacity * 0.3
2757
- }
2758
- }
2759
- ),
2760
- /* @__PURE__ */ jsxRuntime.jsx(
2761
- "div",
2762
- {
2763
- className: lib.cn("absolute inset-0", intensity.blur),
2764
- style: {
2765
- background: `linear-gradient(110deg,
2766
- transparent 0%,
2767
- ${colors[0]} 20%,
2768
- ${colors[2] || colors[0]} 35%,
2769
- ${colors[1]} 50%,
2770
- ${colors[3] || colors[1]} 65%,
2771
- ${colors[0]} 80%,
2772
- transparent 100%
2773
- )`,
2774
- opacity: intensity.opacity,
2775
- animation: "aurora-shift 15s ease-in-out infinite",
2776
- transform: `translateY(-30%) scaleY(${intensity.scale})`
2777
- }
2778
- }
2779
- ),
2780
- /* @__PURE__ */ jsxRuntime.jsx(
2781
- "div",
2782
- {
2783
- className: lib.cn("absolute inset-0", intensity.blur),
2784
- style: {
2785
- background: `linear-gradient(70deg,
2786
- transparent 0%,
2787
- ${colors[1]} 25%,
2788
- ${colors[2] || colors[0]} 50%,
2789
- ${colors[0]} 75%,
2790
- transparent 100%
2791
- )`,
2792
- opacity: intensity.opacity * 0.7,
2793
- animation: "aurora-shift 20s ease-in-out infinite reverse",
2794
- animationDelay: "-5s",
2795
- transform: `translateY(-20%) scaleY(${intensity.scale * 0.8})`
2796
- }
2797
- }
2798
- ),
2799
- /* @__PURE__ */ jsxRuntime.jsx(
2800
- "div",
2801
- {
2802
- className: "absolute inset-0",
2803
- style: {
2804
- background: `radial-gradient(ellipse 100% 50% at 50% 0%,
2805
- ${colors[2] || colors[0]} 0%,
2806
- transparent 70%
2807
- )`,
2808
- opacity: intensity.opacity * 0.4,
2809
- animation: "aurora-shimmer 8s ease-in-out infinite"
2810
- }
2811
- }
2812
- )
2813
- ] }), "AuroraBorealis");
2814
- var MeshGradient = /* @__PURE__ */ __name(({ colors, intensity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2815
- /* @__PURE__ */ jsxRuntime.jsx(
2816
- "div",
2817
- {
2818
- className: lib.cn("absolute rounded-full", intensity.blur),
2819
- style: {
2820
- width: "60%",
2821
- height: "60%",
2822
- top: "-10%",
2823
- right: "-10%",
2824
- background: `radial-gradient(circle, ${colors[0]} 0%, transparent 70%)`,
2825
- opacity: intensity.opacity,
2826
- animation: "mesh-float-1 25s ease-in-out infinite",
2827
- transform: `scale(${intensity.scale})`
2828
- }
2829
- }
2830
- ),
2831
- /* @__PURE__ */ jsxRuntime.jsx(
2832
- "div",
2833
- {
2834
- className: lib.cn("absolute rounded-full", intensity.blur),
2835
- style: {
2836
- width: "50%",
2837
- height: "50%",
2838
- bottom: "-5%",
2839
- left: "-5%",
2840
- background: `radial-gradient(circle, ${colors[1]} 0%, transparent 70%)`,
2841
- opacity: intensity.opacity,
2842
- animation: "mesh-float-2 30s ease-in-out infinite",
2843
- transform: `scale(${intensity.scale})`
2844
- }
2845
- }
2846
- ),
2847
- /* @__PURE__ */ jsxRuntime.jsx(
2848
- "div",
2849
- {
2850
- className: lib.cn("absolute rounded-full", intensity.blur),
2851
- style: {
2852
- width: "40%",
2853
- height: "40%",
2854
- top: "30%",
2855
- left: "25%",
2856
- background: `radial-gradient(circle, ${colors[2] || colors[0]} 0%, transparent 70%)`,
2857
- opacity: intensity.opacity * 0.8,
2858
- animation: "mesh-float-3 20s ease-in-out infinite",
2859
- transform: `scale(${intensity.scale})`
2860
- }
2861
- }
2862
- ),
2863
- colors[3] && /* @__PURE__ */ jsxRuntime.jsx(
2864
- "div",
2865
- {
2866
- className: lib.cn("absolute rounded-full", intensity.blur),
2867
- style: {
2868
- width: "35%",
2869
- height: "35%",
2870
- bottom: "20%",
2871
- right: "15%",
2872
- background: `radial-gradient(circle, ${colors[3]} 0%, transparent 70%)`,
2873
- opacity: intensity.opacity * 0.6,
2874
- animation: "mesh-float-4 22s ease-in-out infinite",
2875
- transform: `scale(${intensity.scale})`
2876
- }
2877
- }
2878
- )
2879
- ] }), "MeshGradient");
2880
- var FloatingOrbs = /* @__PURE__ */ __name(({ colors, intensity }) => {
2881
- const orbs = React6.useMemo(() => {
2882
- return Array.from({ length: 12 }).map((_, i) => ({
2883
- id: i,
2884
- size: 60 + i % 4 * 40,
2885
- x: i * 23 % 100,
2886
- y: i * 31 % 100,
2887
- color: colors[i % colors.length],
2888
- duration: 15 + i % 5 * 5,
2889
- delay: i * 1.5
2890
- }));
2891
- }, [colors]);
2892
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: orbs.map((orb) => /* @__PURE__ */ jsxRuntime.jsx(
2893
- "div",
2894
- {
2895
- className: lib.cn("absolute rounded-full", intensity.blur),
2896
- style: {
2897
- width: `${orb.size * intensity.scale}px`,
2898
- height: `${orb.size * intensity.scale}px`,
2899
- left: `${orb.x}%`,
2900
- top: `${orb.y}%`,
2901
- background: `radial-gradient(circle at 30% 30%, ${orb.color}, transparent 70%)`,
2902
- opacity: intensity.opacity * (0.5 + orb.id % 3 * 0.2),
2903
- animation: `orb-float-${orb.id % 4 + 1} ${orb.duration}s ease-in-out infinite`,
2904
- animationDelay: `${orb.delay}s`
2905
- }
2906
- },
2907
- orb.id
2908
- )) });
2909
- }, "FloatingOrbs");
2910
- var GeometricFlow = /* @__PURE__ */ __name(({ colors, intensity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2911
- /* @__PURE__ */ jsxRuntime.jsx(
2912
- "div",
2913
- {
2914
- className: "absolute inset-0",
2915
- style: {
2916
- background: `linear-gradient(135deg,
2917
- ${colors[0]} 0%,
2918
- transparent 30%,
2919
- transparent 70%,
2920
- ${colors[1]} 100%
2921
- )`,
2922
- opacity: intensity.opacity * 0.3
2923
- }
2924
- }
2925
- ),
2926
- /* @__PURE__ */ jsxRuntime.jsx(
2927
- "div",
2928
- {
2929
- className: "absolute inset-0",
2930
- style: {
2931
- backgroundImage: `
2932
- linear-gradient(${colors[0]}20 1px, transparent 1px),
2933
- linear-gradient(90deg, ${colors[0]}20 1px, transparent 1px)
2934
- `,
2935
- backgroundSize: "60px 60px",
2936
- animation: "grid-drift 30s linear infinite",
2937
- opacity: intensity.opacity
2938
- }
2939
- }
2940
- ),
2941
- /* @__PURE__ */ jsxRuntime.jsx(
2942
- "div",
2943
- {
2944
- className: "absolute inset-0",
2945
- style: {
2946
- backgroundImage: `repeating-linear-gradient(
2947
- 45deg,
2948
- transparent,
2949
- transparent 80px,
2950
- ${colors[2] || colors[0]}10 80px,
2951
- ${colors[2] || colors[0]}10 82px
2952
- )`,
2953
- animation: "diagonal-shift 20s linear infinite",
2954
- opacity: intensity.opacity
2955
- }
2956
- }
2957
- ),
2958
- /* @__PURE__ */ jsxRuntime.jsx(
2959
- "div",
2960
- {
2961
- className: lib.cn("absolute rounded-full", intensity.blur),
2962
- style: {
2963
- width: "40%",
2964
- height: "40%",
2965
- top: "20%",
2966
- left: "50%",
2967
- transform: "translateX(-50%)",
2968
- background: `radial-gradient(circle, ${colors[0]} 0%, transparent 70%)`,
2969
- opacity: intensity.opacity * 0.5,
2970
- animation: "pulse-glow 8s ease-in-out infinite"
2971
- }
2972
- }
2973
- )
2974
- ] }), "GeometricFlow");
2975
- var LiquidGradient = /* @__PURE__ */ __name(({ colors, intensity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2976
- /* @__PURE__ */ jsxRuntime.jsx(
2977
- "div",
2978
- {
2979
- className: "absolute inset-0",
2980
- style: {
2981
- background: `linear-gradient(180deg,
2982
- transparent 0%,
2983
- ${colors[0]}15 30%,
2984
- ${colors[1]}20 50%,
2985
- ${colors[2] || colors[0]}15 70%,
2986
- transparent 100%
2987
- )`,
2988
- opacity: intensity.opacity
2989
- }
2990
- }
2991
- ),
2992
- /* @__PURE__ */ jsxRuntime.jsx(
2993
- "div",
2994
- {
2995
- className: lib.cn("absolute", intensity.blur),
2996
- style: {
2997
- width: "120%",
2998
- height: "50%",
2999
- bottom: "-10%",
3000
- left: "-10%",
3001
- background: `linear-gradient(90deg,
3002
- ${colors[0]} 0%,
3003
- ${colors[1]} 33%,
3004
- ${colors[2] || colors[0]} 66%,
3005
- ${colors[0]} 100%
3006
- )`,
3007
- opacity: intensity.opacity,
3008
- borderRadius: "50% 50% 0 0",
3009
- animation: "liquid-flow-1 12s ease-in-out infinite",
3010
- transform: `scaleY(${intensity.scale})`
3011
- }
3012
- }
3013
- ),
3014
- /* @__PURE__ */ jsxRuntime.jsx(
3015
- "div",
3016
- {
3017
- className: lib.cn("absolute", intensity.blur),
3018
- style: {
3019
- width: "100%",
3020
- height: "40%",
3021
- bottom: "-5%",
3022
- left: "0",
3023
- background: `linear-gradient(90deg,
3024
- ${colors[1]} 0%,
3025
- ${colors[2] || colors[0]} 50%,
3026
- ${colors[3] || colors[1]} 100%
3027
- )`,
3028
- opacity: intensity.opacity * 0.8,
3029
- borderRadius: "60% 40% 0 0",
3030
- animation: "liquid-flow-2 15s ease-in-out infinite",
3031
- transform: `scaleY(${intensity.scale * 0.9})`
3032
- }
3033
- }
3034
- ),
3035
- Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(
3036
- "div",
3037
- {
3038
- className: "absolute rounded-full",
3039
- style: {
3040
- width: `${12 + i * 4}px`,
3041
- height: `${12 + i * 4}px`,
3042
- left: `${15 + i * 15}%`,
3043
- bottom: "10%",
3044
- background: `radial-gradient(circle at 30% 30%,
3045
- ${colors[i % colors.length]}80,
3046
- ${colors[i % colors.length]}20
3047
- )`,
3048
- border: `1px solid ${colors[i % colors.length]}40`,
3049
- opacity: intensity.opacity,
3050
- animation: `bubble-float ${8 + i * 2}s ease-in-out infinite`,
3051
- animationDelay: `${i * 2}s`
3052
- }
3053
- },
3054
- i
3055
- ))
3056
- ] }), "LiquidGradient");
3057
- var Spotlight = /* @__PURE__ */ __name(({ colors, intensity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3058
- /* @__PURE__ */ jsxRuntime.jsx(
3059
- "div",
3060
- {
3061
- className: lib.cn("absolute", intensity.blur),
3062
- style: {
3063
- width: "80%",
3064
- height: "80%",
3065
- top: "-20%",
3066
- left: "50%",
3067
- transform: "translateX(-50%)",
3068
- background: `conic-gradient(from 180deg at 50% 50%,
3069
- ${colors[0]} 0deg,
3070
- ${colors[1]} 60deg,
3071
- ${colors[2] || colors[0]} 120deg,
3072
- ${colors[3] || colors[1]} 180deg,
3073
- ${colors[0]} 240deg,
3074
- ${colors[1]} 300deg,
3075
- ${colors[0]} 360deg
3076
- )`,
3077
- opacity: intensity.opacity,
3078
- animation: "spotlight-rotate 30s linear infinite"
3079
- }
3080
- }
3081
- ),
3082
- /* @__PURE__ */ jsxRuntime.jsx(
3083
- "div",
3084
- {
3085
- className: "absolute inset-0",
3086
- style: {
3087
- background: `radial-gradient(circle at 50% 30%,
3088
- transparent 0%,
3089
- hsl(var(--background)) 70%
3090
- )`
3091
- }
3092
- }
3093
- ),
3094
- /* @__PURE__ */ jsxRuntime.jsx(
3095
- "div",
3096
- {
3097
- className: lib.cn("absolute rounded-full", intensity.blur),
3098
- style: {
3099
- width: "50%",
3100
- height: "50%",
3101
- top: "10%",
3102
- left: "25%",
3103
- background: `radial-gradient(circle, ${colors[0]} 0%, transparent 70%)`,
3104
- opacity: intensity.opacity * 0.5,
3105
- animation: "pulse-glow 6s ease-in-out infinite"
3106
- }
3107
- }
3108
- )
3109
- ] }), "Spotlight");
3110
- var AnimationStyles = /* @__PURE__ */ __name(() => /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
3111
- @keyframes aurora-shift {
3112
- 0%, 100% {
3113
- transform: translateX(-10%) translateY(-30%) scaleX(1.1);
3114
- }
3115
- 50% {
3116
- transform: translateX(10%) translateY(-25%) scaleX(0.9);
3117
- }
3118
- }
3119
-
3120
- @keyframes aurora-shimmer {
3121
- 0%, 100% {
3122
- opacity: 0.2;
3123
- transform: scale(1);
3124
- }
3125
- 50% {
3126
- opacity: 0.4;
3127
- transform: scale(1.05);
3128
- }
3129
- }
3130
-
3131
- @keyframes mesh-float-1 {
3132
- 0%, 100% { transform: translate(0, 0) scale(1); }
3133
- 25% { transform: translate(-5%, 10%) scale(1.05); }
3134
- 50% { transform: translate(5%, 5%) scale(0.95); }
3135
- 75% { transform: translate(-3%, -5%) scale(1.02); }
3136
- }
3137
-
3138
- @keyframes mesh-float-2 {
3139
- 0%, 100% { transform: translate(0, 0) scale(1); }
3140
- 33% { transform: translate(8%, -8%) scale(1.08); }
3141
- 66% { transform: translate(-6%, 6%) scale(0.92); }
3142
- }
3143
-
3144
- @keyframes mesh-float-3 {
3145
- 0%, 100% { transform: translate(0, 0) scale(1); }
3146
- 50% { transform: translate(10%, 10%) scale(1.1); }
3147
- }
3148
-
3149
- @keyframes mesh-float-4 {
3150
- 0%, 100% { transform: translate(0, 0) scale(1); }
3151
- 25% { transform: translate(5%, -10%) scale(0.95); }
3152
- 75% { transform: translate(-8%, 5%) scale(1.05); }
3153
- }
3154
-
3155
- @keyframes orb-float-1 {
3156
- 0%, 100% { transform: translate(0, 0); }
3157
- 50% { transform: translate(30px, -40px); }
3158
- }
3159
-
3160
- @keyframes orb-float-2 {
3161
- 0%, 100% { transform: translate(0, 0); }
3162
- 50% { transform: translate(-25px, 35px); }
3163
- }
3164
-
3165
- @keyframes orb-float-3 {
3166
- 0%, 100% { transform: translate(0, 0); }
3167
- 33% { transform: translate(40px, 20px); }
3168
- 66% { transform: translate(-20px, -30px); }
3169
- }
3170
-
3171
- @keyframes orb-float-4 {
3172
- 0%, 100% { transform: translate(0, 0); }
3173
- 25% { transform: translate(-35px, -25px); }
3174
- 75% { transform: translate(25px, 40px); }
3175
- }
3176
-
3177
- @keyframes grid-drift {
3178
- 0% { transform: translate(0, 0); }
3179
- 100% { transform: translate(60px, 60px); }
3180
- }
3181
-
3182
- @keyframes diagonal-shift {
3183
- 0% { transform: translateX(0); }
3184
- 100% { transform: translateX(160px); }
3185
- }
3186
-
3187
- @keyframes pulse-glow {
3188
- 0%, 100% { opacity: 0.3; transform: translateX(-50%) scale(1); }
3189
- 50% { opacity: 0.6; transform: translateX(-50%) scale(1.1); }
3190
- }
3191
-
3192
- @keyframes liquid-flow-1 {
3193
- 0%, 100% {
3194
- transform: translateY(0) scaleX(1);
3195
- border-radius: 50% 50% 0 0;
3196
- }
3197
- 25% {
3198
- transform: translateY(-30px) scaleX(1.05);
3199
- border-radius: 45% 55% 0 0;
3200
- }
3201
- 50% {
3202
- transform: translateY(-50px) scaleX(0.95);
3203
- border-radius: 55% 45% 0 0;
3204
- }
3205
- 75% {
3206
- transform: translateY(-25px) scaleX(1.02);
3207
- border-radius: 48% 52% 0 0;
3208
- }
3209
- }
3210
-
3211
- @keyframes liquid-flow-2 {
3212
- 0%, 100% {
3213
- transform: translateY(0) scaleX(1);
3214
- border-radius: 60% 40% 0 0;
3215
- }
3216
- 33% {
3217
- transform: translateY(-40px) scaleX(1.08);
3218
- border-radius: 40% 60% 0 0;
3219
- }
3220
- 66% {
3221
- transform: translateY(-60px) scaleX(0.92);
3222
- border-radius: 55% 45% 0 0;
3223
- }
3224
- }
3225
-
3226
- @keyframes bubble-float {
3227
- 0%, 100% {
3228
- transform: translateY(0) scale(1);
3229
- opacity: 0.6;
3230
- }
3231
- 50% {
3232
- transform: translateY(-100px) scale(1.2);
3233
- opacity: 0.3;
3234
- }
3235
- }
3236
-
3237
- @keyframes spotlight-rotate {
3238
- 0% { transform: translateX(-50%) rotate(0deg); }
3239
- 100% { transform: translateX(-50%) rotate(360deg); }
3240
- }
3241
- ` }), "AnimationStyles");
3242
- var blurMap = {
3243
- sm: "blur-sm",
3244
- md: "blur-md",
3245
- lg: "blur-lg",
3246
- xl: "blur-xl",
3247
- "2xl": "blur-2xl",
3248
- "3xl": "blur-3xl"
3249
- };
3250
- var MouseFollower = /* @__PURE__ */ __name(({
3251
- variant = "glow",
3252
- size = 300,
3253
- color = "primary",
3254
- smoothness = 0.1,
3255
- opacity = 0.3,
3256
- blur = "2xl",
3257
- className,
3258
- showOnMobile = false,
3259
- disabled = false
3260
- }) => {
3261
- const [mounted, setMounted] = React6.useState(false);
3262
- const [isVisible, setIsVisible] = React6.useState(false);
3263
- const [isMobile, setIsMobile] = React6.useState(false);
3264
- const positionRef = React6.useRef({ x: 0, y: 0 });
3265
- const targetRef = React6.useRef({ x: 0, y: 0 });
3266
- const elementRef = React6.useRef(null);
3267
- const rafRef = React6.useRef(0);
3268
- const resolvedColor = React6.useMemo(() => {
3269
- if (color === "primary") return "hsl(var(--primary))";
3270
- if (color === "secondary") return "hsl(var(--secondary))";
3271
- if (color === "accent") return "hsl(var(--accent))";
3272
- return color;
3273
- }, [color]);
3274
- React6.useEffect(() => {
3275
- setMounted(true);
3276
- const checkMobile = /* @__PURE__ */ __name(() => {
3277
- setIsMobile("ontouchstart" in window || navigator.maxTouchPoints > 0);
3278
- }, "checkMobile");
3279
- checkMobile();
3280
- window.addEventListener("resize", checkMobile);
3281
- return () => window.removeEventListener("resize", checkMobile);
3282
- }, []);
3283
- const animate = React6.useCallback(() => {
3284
- const dx = targetRef.current.x - positionRef.current.x;
3285
- const dy = targetRef.current.y - positionRef.current.y;
3286
- positionRef.current.x += dx * smoothness;
3287
- positionRef.current.y += dy * smoothness;
3288
- if (elementRef.current) {
3289
- elementRef.current.style.transform = `translate(${positionRef.current.x - size / 2}px, ${positionRef.current.y - size / 2}px)`;
3290
- }
3291
- rafRef.current = requestAnimationFrame(animate);
3292
- }, [smoothness, size]);
3293
- React6.useEffect(() => {
3294
- if (disabled || !mounted) return;
3295
- if (isMobile && !showOnMobile) return;
3296
- const handleMouseMove = /* @__PURE__ */ __name((e) => {
3297
- targetRef.current = { x: e.clientX, y: e.clientY };
3298
- if (!isVisible) setIsVisible(true);
3299
- }, "handleMouseMove");
3300
- const handleMouseLeave = /* @__PURE__ */ __name(() => {
3301
- setIsVisible(false);
3302
- }, "handleMouseLeave");
3303
- const handleMouseEnter = /* @__PURE__ */ __name(() => {
3304
- setIsVisible(true);
3305
- }, "handleMouseEnter");
3306
- document.addEventListener("mousemove", handleMouseMove);
3307
- document.addEventListener("mouseleave", handleMouseLeave);
3308
- document.addEventListener("mouseenter", handleMouseEnter);
3309
- rafRef.current = requestAnimationFrame(animate);
3310
- return () => {
3311
- document.removeEventListener("mousemove", handleMouseMove);
3312
- document.removeEventListener("mouseleave", handleMouseLeave);
3313
- document.removeEventListener("mouseenter", handleMouseEnter);
3314
- cancelAnimationFrame(rafRef.current);
3315
- };
3316
- }, [disabled, mounted, isMobile, showOnMobile, animate, isVisible]);
3317
- if (!mounted || disabled) return null;
3318
- if (isMobile && !showOnMobile) return null;
3319
- return /* @__PURE__ */ jsxRuntime.jsx(
3320
- "div",
3321
- {
3322
- className: lib.cn(
3323
- "fixed inset-0 pointer-events-none overflow-hidden z-0",
3324
- className
3325
- ),
3326
- children: /* @__PURE__ */ jsxRuntime.jsxs(
3327
- "div",
3328
- {
3329
- ref: elementRef,
3330
- className: lib.cn(
3331
- "absolute top-0 left-0 transition-opacity duration-300",
3332
- isVisible ? "opacity-100" : "opacity-0"
3333
- ),
3334
- style: { width: size, height: size },
3335
- children: [
3336
- variant === "glow" && /* @__PURE__ */ jsxRuntime.jsx(
3337
- GlowEffect,
3338
- {
3339
- size,
3340
- color: resolvedColor,
3341
- opacity,
3342
- blur: blurMap[blur]
3343
- }
3344
- ),
3345
- variant === "spotlight" && /* @__PURE__ */ jsxRuntime.jsx(
3346
- SpotlightEffect,
3347
- {
3348
- size,
3349
- color: resolvedColor,
3350
- opacity,
3351
- blur: blurMap[blur]
3352
- }
3353
- ),
3354
- variant === "gradient-blob" && /* @__PURE__ */ jsxRuntime.jsx(
3355
- GradientBlobEffect,
3356
- {
3357
- size,
3358
- color: resolvedColor,
3359
- opacity,
3360
- blur: blurMap[blur]
3361
- }
3362
- ),
3363
- variant === "ring" && /* @__PURE__ */ jsxRuntime.jsx(
3364
- RingEffect,
3365
- {
3366
- size,
3367
- color: resolvedColor,
3368
- opacity
3369
- }
3370
- ),
3371
- variant === "trail" && /* @__PURE__ */ jsxRuntime.jsx(
3372
- TrailEffect,
3373
- {
3374
- size,
3375
- color: resolvedColor,
3376
- opacity,
3377
- blur: blurMap[blur]
3378
- }
3379
- )
3380
- ]
3381
- }
3382
- )
3383
- }
3384
- );
3385
- }, "MouseFollower");
3386
- var GlowEffect = /* @__PURE__ */ __name(({ size, color, opacity, blur }) => /* @__PURE__ */ jsxRuntime.jsx(
3387
- "div",
3388
- {
3389
- className: lib.cn("w-full h-full rounded-full", blur),
3390
- style: {
3391
- background: `radial-gradient(circle, ${color} 0%, transparent 70%)`,
3392
- opacity
3393
- }
3394
- }
3395
- ), "GlowEffect");
3396
- var SpotlightEffect = /* @__PURE__ */ __name(({ size, color, opacity, blur }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3397
- /* @__PURE__ */ jsxRuntime.jsx(
3398
- "div",
3399
- {
3400
- className: lib.cn("absolute inset-0", blur),
3401
- style: {
3402
- background: `conic-gradient(from 180deg at 50% 50%,
3403
- transparent 0deg,
3404
- ${color} 150deg,
3405
- ${color} 210deg,
3406
- transparent 360deg
3407
- )`,
3408
- opacity: opacity * 0.6
3409
- }
3410
- }
3411
- ),
3412
- /* @__PURE__ */ jsxRuntime.jsx(
3413
- "div",
3414
- {
3415
- className: lib.cn("absolute rounded-full", blur),
3416
- style: {
3417
- width: "40%",
3418
- height: "40%",
3419
- top: "30%",
3420
- left: "30%",
3421
- background: `radial-gradient(circle, ${color} 0%, transparent 70%)`,
3422
- opacity
3423
- }
3424
- }
3425
- )
3426
- ] }), "SpotlightEffect");
3427
- var GradientBlobEffect = /* @__PURE__ */ __name(({ size, color, opacity, blur }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3428
- /* @__PURE__ */ jsxRuntime.jsx(
3429
- "div",
3430
- {
3431
- className: lib.cn("w-full h-full", blur),
3432
- style: {
3433
- background: `radial-gradient(ellipse 60% 40% at 50% 50%, ${color} 0%, transparent 70%)`,
3434
- opacity,
3435
- animation: "blob-morph 8s ease-in-out infinite"
3436
- }
3437
- }
3438
- ),
3439
- /* @__PURE__ */ jsxRuntime.jsx(
3440
- "div",
3441
- {
3442
- className: lib.cn("absolute inset-0", blur),
3443
- style: {
3444
- background: `radial-gradient(ellipse 40% 60% at 50% 50%, ${color} 0%, transparent 60%)`,
3445
- opacity: opacity * 0.5,
3446
- animation: "blob-morph 8s ease-in-out infinite reverse",
3447
- animationDelay: "-4s"
3448
- }
3449
- }
3450
- ),
3451
- /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
3452
- @keyframes blob-morph {
3453
- 0%, 100% { transform: scale(1) rotate(0deg); border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%; }
3454
- 25% { transform: scale(1.1) rotate(90deg); border-radius: 30% 60% 70% 40% / 50% 60% 30% 60%; }
3455
- 50% { transform: scale(0.9) rotate(180deg); border-radius: 50% 60% 30% 60% / 30% 60% 70% 40%; }
3456
- 75% { transform: scale(1.05) rotate(270deg); border-radius: 60% 40% 50% 40% / 70% 30% 50% 60%; }
3457
- }
3458
- ` })
3459
- ] }), "GradientBlobEffect");
3460
- var RingEffect = /* @__PURE__ */ __name(({ size, color, opacity }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3461
- /* @__PURE__ */ jsxRuntime.jsx(
3462
- "div",
3463
- {
3464
- className: "absolute inset-0 rounded-full",
3465
- style: {
3466
- border: `2px solid ${color}`,
3467
- opacity: opacity * 0.3
3468
- }
3469
- }
3470
- ),
3471
- /* @__PURE__ */ jsxRuntime.jsx(
3472
- "div",
3473
- {
3474
- className: "absolute rounded-full",
3475
- style: {
3476
- inset: "15%",
3477
- border: `2px solid ${color}`,
3478
- opacity: opacity * 0.5,
3479
- animation: "ring-pulse 2s ease-in-out infinite"
3480
- }
3481
- }
3482
- ),
3483
- /* @__PURE__ */ jsxRuntime.jsx(
3484
- "div",
3485
- {
3486
- className: "absolute rounded-full",
3487
- style: {
3488
- inset: "30%",
3489
- border: `2px solid ${color}`,
3490
- opacity: opacity * 0.7,
3491
- animation: "ring-pulse 2s ease-in-out infinite",
3492
- animationDelay: "-1s"
3493
- }
3494
- }
3495
- ),
3496
- /* @__PURE__ */ jsxRuntime.jsx(
3497
- "div",
3498
- {
3499
- className: "absolute rounded-full",
3500
- style: {
3501
- width: "8px",
3502
- height: "8px",
3503
- top: "50%",
3504
- left: "50%",
3505
- transform: "translate(-50%, -50%)",
3506
- background: color,
3507
- opacity
3508
- }
3509
- }
3510
- ),
3511
- /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
3512
- @keyframes ring-pulse {
3513
- 0%, 100% { opacity: 0.3; transform: scale(1); }
3514
- 50% { opacity: 0.7; transform: scale(1.05); }
3515
- }
3516
- ` })
3517
- ] }), "RingEffect");
3518
- var TrailEffect = /* @__PURE__ */ __name(({ size, color, opacity, blur }) => /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: Array.from({ length: 5 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(
3519
- "div",
3520
- {
3521
- className: lib.cn("absolute rounded-full", blur),
3522
- style: {
3523
- width: `${100 - i * 15}%`,
3524
- height: `${100 - i * 15}%`,
3525
- top: `${i * 7.5}%`,
3526
- left: `${i * 7.5}%`,
3527
- background: `radial-gradient(circle, ${color} 0%, transparent 70%)`,
3528
- opacity: opacity * (1 - i * 0.15),
3529
- transition: `transform ${0.1 + i * 0.05}s ease-out`
3530
- }
3531
- },
3532
- i
3533
- )) }), "TrailEffect");
3534
- function ThemeProvider({
3535
- children,
3536
- attribute = "class",
3537
- defaultTheme = "system",
3538
- enableSystem = true,
3539
- disableTransitionOnChange = true,
3540
- ...props
3541
- }) {
3542
- return /* @__PURE__ */ jsxRuntime.jsx(
3543
- nextThemes.ThemeProvider,
3544
- {
3545
- attribute,
3546
- defaultTheme,
3547
- enableSystem,
3548
- disableTransitionOnChange,
3549
- ...props,
3550
- children
3551
- }
3552
- );
3553
- }
3554
- __name(ThemeProvider, "ThemeProvider");
3555
- function useThemeContext() {
3556
- const { theme, setTheme, resolvedTheme, systemTheme, themes } = nextThemes.useTheme();
3557
- const toggleTheme = /* @__PURE__ */ __name(() => {
3558
- const currentResolved = resolvedTheme || "light";
3559
- setTheme(currentResolved === "light" ? "dark" : "light");
3560
- }, "toggleTheme");
3561
- return {
3562
- theme,
3563
- setTheme,
3564
- resolvedTheme,
3565
- systemTheme,
3566
- themes,
3567
- toggleTheme
3568
- };
3569
- }
3570
- __name(useThemeContext, "useThemeContext");
3571
- function ThemeToggle({ className, size = "auto" }) {
3572
- const { resolvedTheme, toggleTheme } = useThemeContext();
3573
- const [mounted, setMounted] = React6.useState(false);
3574
- const isMobile = hooks_star.useIsMobile();
3575
- React6.useEffect(() => {
3576
- setMounted(true);
3577
- }, []);
3578
- const actualSize = size === "auto" ? isMobile ? "compact" : "default" : size;
3579
- const buttonSize = actualSize === "compact" ? "h-8 w-8" : "h-9 w-9";
3580
- const iconSize = actualSize === "compact" ? "h-3.5 w-3.5" : "h-4 w-4";
3581
- if (!mounted) {
3582
- return /* @__PURE__ */ jsxRuntime.jsxs(
3583
- components_star.Button,
3584
- {
3585
- variant: "ghost",
3586
- size: "icon",
3587
- className: lib.cn(buttonSize, className),
3588
- disabled: true,
3589
- children: [
3590
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sun, { className: iconSize }),
3591
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Toggle theme" })
3592
- ]
3593
- }
3594
- );
3595
- }
3596
- return /* @__PURE__ */ jsxRuntime.jsxs(
3597
- components_star.Button,
3598
- {
3599
- variant: "ghost",
3600
- size: "icon",
3601
- onClick: toggleTheme,
3602
- className: lib.cn(buttonSize, className),
3603
- title: `Switch to ${resolvedTheme === "light" ? "dark" : "light"} theme`,
3604
- children: [
3605
- resolvedTheme === "light" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sun, { className: iconSize }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Moon, { className: iconSize }),
3606
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Toggle theme" })
3607
- ]
3608
- }
3609
- );
3610
- }
3611
- __name(ThemeToggle, "ThemeToggle");
3612
- var darkThemeVars = {
3613
- // Base HSL values
3614
- "--background": "0 0% 4%",
3615
- "--foreground": "0 0% 98%",
3616
- "--card": "0 0% 8%",
3617
- "--card-foreground": "0 0% 98%",
3618
- "--popover": "0 0% 12%",
3619
- "--popover-foreground": "0 0% 98%",
3620
- "--primary": "217 91% 60%",
3621
- "--primary-foreground": "0 0% 100%",
3622
- "--secondary": "0 0% 98%",
3623
- "--secondary-foreground": "0 0% 9%",
3624
- "--muted": "0 0% 10%",
3625
- "--muted-foreground": "0 0% 60%",
3626
- "--accent": "0 0% 15%",
3627
- "--accent-foreground": "0 0% 98%",
3628
- "--destructive": "0 84% 60%",
3629
- "--destructive-foreground": "0 0% 98%",
3630
- "--border": "0 0% 15%",
3631
- "--input": "0 0% 15%",
3632
- "--ring": "217 91% 60%",
3633
- // Tailwind color tokens (used by bg-*, text-*, etc)
3634
- "--color-background": "hsl(0 0% 4%)",
3635
- "--color-foreground": "hsl(0 0% 98%)",
3636
- "--color-card": "hsl(0 0% 8%)",
3637
- "--color-card-foreground": "hsl(0 0% 98%)",
3638
- "--color-primary": "hsl(217 91% 60%)",
3639
- "--color-primary-foreground": "hsl(0 0% 100%)",
3640
- "--color-secondary": "hsl(0 0% 98%)",
3641
- "--color-secondary-foreground": "hsl(0 0% 9%)",
3642
- "--color-muted": "hsl(0 0% 10%)",
3643
- "--color-muted-foreground": "hsl(0 0% 60%)",
3644
- "--color-accent": "hsl(0 0% 15%)",
3645
- "--color-accent-foreground": "hsl(0 0% 98%)",
3646
- "--color-destructive": "hsl(0 84% 60%)",
3647
- "--color-destructive-foreground": "hsl(0 0% 98%)",
3648
- "--color-border": "hsl(0 0% 15%)",
3649
- "--color-input": "hsl(0 0% 15%)",
3650
- "--color-ring": "hsl(217 91% 60%)"
3651
- };
3652
- var lightThemeVars = {
3653
- // Base HSL values
3654
- "--background": "0 0% 96%",
3655
- "--foreground": "0 0% 9%",
3656
- "--card": "0 0% 100%",
3657
- "--card-foreground": "0 0% 9%",
3658
- "--popover": "0 0% 100%",
3659
- "--popover-foreground": "0 0% 9%",
3660
- "--primary": "217 91% 60%",
3661
- "--primary-foreground": "0 0% 100%",
3662
- "--secondary": "0 0% 9%",
3663
- "--secondary-foreground": "0 0% 98%",
3664
- "--muted": "0 0% 96%",
3665
- "--muted-foreground": "0 0% 40%",
3666
- "--accent": "0 0% 92%",
3667
- "--accent-foreground": "0 0% 9%",
3668
- "--destructive": "0 84% 60%",
3669
- "--destructive-foreground": "0 0% 98%",
3670
- "--border": "0 0% 90%",
3671
- "--input": "0 0% 90%",
3672
- "--ring": "217 91% 60%",
3673
- // Tailwind color tokens (used by bg-*, text-*, etc)
3674
- "--color-background": "hsl(0 0% 96%)",
3675
- "--color-foreground": "hsl(0 0% 9%)",
3676
- "--color-card": "hsl(0 0% 100%)",
3677
- "--color-card-foreground": "hsl(0 0% 9%)",
3678
- "--color-primary": "hsl(217 91% 60%)",
3679
- "--color-primary-foreground": "hsl(0 0% 100%)",
3680
- "--color-secondary": "hsl(0 0% 9%)",
3681
- "--color-secondary-foreground": "hsl(0 0% 98%)",
3682
- "--color-muted": "hsl(0 0% 96%)",
3683
- "--color-muted-foreground": "hsl(0 0% 40%)",
3684
- "--color-accent": "hsl(0 0% 92%)",
3685
- "--color-accent-foreground": "hsl(0 0% 9%)",
3686
- "--color-destructive": "hsl(0 84% 60%)",
3687
- "--color-destructive-foreground": "hsl(0 0% 98%)",
3688
- "--color-border": "hsl(0 0% 90%)",
3689
- "--color-input": "hsl(0 0% 90%)",
3690
- "--color-ring": "hsl(217 91% 60%)"
3691
- };
3692
- function ForceTheme({ theme, children, className }) {
3693
- const themeVars = theme === "dark" ? darkThemeVars : lightThemeVars;
3694
- return /* @__PURE__ */ jsxRuntime.jsx(
3695
- "div",
3696
- {
3697
- className: lib.cn(theme, className),
3698
- style: themeVars,
3699
- children
3700
- }
3701
- );
3702
- }
3703
- __name(ForceTheme, "ForceTheme");
3704
- var BACKGROUND_VARIANTS = [
3705
- "aurora-borealis",
3706
- "mesh-gradient",
3707
- "floating-orbs",
3708
- "geometric-flow",
3709
- "liquid-gradient",
3710
- "spotlight",
3711
- "none"
3712
- ];
3713
- var VARIANT_LABELS = {
3714
- "aurora-borealis": "Aurora Borealis",
3715
- "mesh-gradient": "Mesh Gradient",
3716
- "floating-orbs": "Floating Orbs",
3717
- "geometric-flow": "Geometric Flow",
3718
- "liquid-gradient": "Liquid Gradient",
3719
- "spotlight": "Spotlight",
3720
- "none": "None",
3721
- // Legacy labels for backwards compatibility
3722
- "gradient-mesh": "Gradient Mesh",
3723
- "dot-matrix": "Dot Matrix",
3724
- "grid-lines": "Grid Lines",
3725
- "aurora": "Aurora",
3726
- "particles": "Particles",
3727
- "waves": "Waves"
3728
- };
3729
- var SuperHero = /* @__PURE__ */ __name(({
3730
- badge,
3731
- title,
3732
- titleGradient,
3733
- subtitle,
3734
- features = [],
3735
- primaryAction,
3736
- secondaryAction,
3737
- stats = [],
3738
- floatingElements,
3739
- backgroundVariant = "mesh-gradient",
3740
- backgroundIntensity = "medium",
3741
- showBackgroundSwitcher = false,
3742
- codeCommand,
3743
- codeCommands,
3744
- className
3745
- }) => {
3746
- const [currentVariant, setCurrentVariant] = React6__namespace.default.useState(backgroundVariant);
3747
- const [isMenuOpen, setIsMenuOpen] = React6__namespace.default.useState(false);
3748
- const [heroTheme, setHeroTheme] = React6__namespace.default.useState("dark");
3749
- const commands = React6__namespace.default.useMemo(() => {
3750
- if (codeCommands && codeCommands.length > 0) return codeCommands;
3751
- if (codeCommand) return [codeCommand];
3752
- return [];
3753
- }, [codeCommand, codeCommands]);
3754
- const titleLines = React6__namespace.default.useMemo(() => title.split("\n"), [title]);
3755
- const cycleBackground = /* @__PURE__ */ __name(() => {
3756
- const currentIndex = BACKGROUND_VARIANTS.indexOf(currentVariant);
3757
- const nextIndex = (currentIndex + 1) % BACKGROUND_VARIANTS.length;
3758
- setCurrentVariant(BACKGROUND_VARIANTS[nextIndex]);
3759
- }, "cycleBackground");
3760
- return /* @__PURE__ */ jsxRuntime.jsx(ForceTheme, { theme: heroTheme, children: /* @__PURE__ */ jsxRuntime.jsxs(
3761
- "section",
3762
- {
3763
- className: lib.cn(
3764
- "relative overflow-hidden bg-background text-foreground z-0 isolate",
3765
- className
3766
- ),
3767
- children: [
3768
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 -z-10", children: /* @__PURE__ */ jsxRuntime.jsx(AnimatedBackground, { variant: currentVariant, intensity: backgroundIntensity }) }),
3769
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20 sm:py-24 lg:py-32 relative z-10", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
3770
- badge && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center gap-2 px-4 py-2 bg-primary/10 text-primary rounded-full text-sm font-medium mb-6 border border-primary/20 hover:bg-primary/20 transition-all duration-300", children: [
3771
- badge.icon || /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "w-4 h-4" }),
3772
- badge.text
3773
- ] }),
3774
- /* @__PURE__ */ jsxRuntime.jsxs("h1", { className: "text-4xl sm:text-5xl lg:text-6xl xl:text-7xl font-bold text-foreground mb-6 leading-tight", children: [
3775
- titleLines.map((line, index) => /* @__PURE__ */ jsxRuntime.jsxs(React6__namespace.default.Fragment, { children: [
3776
- line,
3777
- index < titleLines.length - 1 && /* @__PURE__ */ jsxRuntime.jsx("br", {})
3778
- ] }, index)),
3779
- titleGradient && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3780
- /* @__PURE__ */ jsxRuntime.jsx("br", {}),
3781
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bg-gradient-to-r from-primary via-primary/80 to-secondary bg-clip-text text-transparent animate-pulse", children: titleGradient })
3782
- ] })
3783
- ] }),
3784
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl sm:text-2xl lg:text-3xl text-muted-foreground mb-8 max-w-4xl mx-auto leading-relaxed", children: subtitle }),
3785
- commands.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-center gap-2 mb-8", children: commands.map((cmd, index) => /* @__PURE__ */ jsxRuntime.jsxs(
3786
- "div",
3787
- {
3788
- className: "inline-flex items-center gap-3 px-6 py-3 bg-background/50 backdrop-blur-md border border-primary/20 rounded-xl shadow-lg hover:border-primary/40 transition-colors group",
3789
- children: [
3790
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground font-mono text-sm select-none", children: "$" }),
3791
- /* @__PURE__ */ jsxRuntime.jsx("code", { className: "font-mono text-lg text-primary font-semibold", children: cmd }),
3792
- /* @__PURE__ */ jsxRuntime.jsx(
3793
- components_star.CopyButton,
3794
- {
3795
- value: cmd,
3796
- variant: "ghost",
3797
- className: "p-1.5 h-auto rounded-md bg-primary/10 text-primary hover:bg-primary hover:text-primary-foreground transition-colors",
3798
- iconClassName: "w-4 h-4"
3799
- }
3800
- )
3801
- ]
3802
- },
3803
- index
3804
- )) }),
3805
- features.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap justify-center gap-6 mb-8", children: features.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
3806
- "div",
3807
- {
3808
- className: "flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300",
3809
- children: [
3810
- feature.icon,
3811
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: feature.text })
3812
- ]
3813
- },
3814
- index
3815
- )) }),
3816
- (primaryAction || secondaryAction) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col sm:flex-row gap-4 justify-center mb-12", children: [
3817
- primaryAction && /* @__PURE__ */ jsxRuntime.jsxs(
3818
- components_star.ButtonLink,
3819
- {
3820
- href: primaryAction.href || "#",
3821
- onClick: primaryAction.onClick,
3822
- size: "huge",
3823
- className: "group",
3824
- children: [
3825
- primaryAction.label,
3826
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, { className: "group-hover:translate-x-1 transition-transform duration-300" })
3827
- ]
3828
- }
3829
- ),
3830
- secondaryAction && /* @__PURE__ */ jsxRuntime.jsxs(
3831
- components_star.ButtonLink,
3832
- {
3833
- href: secondaryAction.href || "#",
3834
- onClick: secondaryAction.onClick,
3835
- variant: "outline",
3836
- size: "huge",
3837
- className: "group",
3838
- children: [
3839
- secondaryAction.label,
3840
- secondaryAction.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "group-hover:rotate-12 transition-transform duration-300", children: secondaryAction.icon })
3841
- ]
3842
- }
3843
- )
3844
- ] }),
3845
- stats.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap justify-center gap-x-6 gap-y-3 md:gap-x-8 md:gap-y-4 max-w-3xl mx-auto", children: stats.map((stat, index) => /* @__PURE__ */ jsxRuntime.jsxs(
3846
- "div",
3847
- {
3848
- className: "text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm",
3849
- children: [
3850
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1", children: stat.number }),
3851
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide", children: stat.label })
3852
- ]
3853
- },
3854
- index
3855
- )) })
3856
- ] }) }),
3857
- floatingElements,
3858
- /* @__PURE__ */ jsxRuntime.jsx(
3859
- components_star.Sticky,
3860
- {
3861
- bottom: true,
3862
- offsetBottom: 32,
3863
- className: "w-full flex justify-center pointer-events-none",
3864
- zIndex: 50,
3865
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center gap-2 px-4 py-2 bg-background/90 backdrop-blur-md border border-border rounded-full shadow-lg pointer-events-auto", children: [
3866
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground font-medium", children: VARIANT_LABELS[currentVariant] || currentVariant }),
3867
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-px h-4 bg-border" }),
3868
- /* @__PURE__ */ jsxRuntime.jsxs(components_star.Tooltip, { children: [
3869
- /* @__PURE__ */ jsxRuntime.jsx(components_star.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
3870
- components_star.Button,
3871
- {
3872
- size: "sm",
3873
- variant: "ghost",
3874
- onClick: cycleBackground,
3875
- className: "h-7 w-7 p-0",
3876
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Wand2, { className: "w-3.5 h-3.5" })
3877
- }
3878
- ) }),
3879
- /* @__PURE__ */ jsxRuntime.jsx(components_star.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Cycle background" }) })
3880
- ] }),
3881
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
3882
- isMenuOpen && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 bg-card border border-border rounded-lg shadow-xl p-2 min-w-[180px]", children: [
3883
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs font-semibold text-muted-foreground mb-2 px-2", children: "Background Style" }),
3884
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-1", children: BACKGROUND_VARIANTS.map((variant) => /* @__PURE__ */ jsxRuntime.jsx(
3885
- "button",
3886
- {
3887
- onClick: () => {
3888
- setCurrentVariant(variant);
3889
- setIsMenuOpen(false);
3890
- },
3891
- className: lib.cn(
3892
- "w-full text-left px-3 py-2 rounded-md text-sm transition-colors",
3893
- currentVariant === variant ? "bg-primary text-primary-foreground" : "hover:bg-accent hover:text-accent-foreground"
3894
- ),
3895
- children: VARIANT_LABELS[variant] || variant
3896
- },
3897
- variant
3898
- )) })
3899
- ] }),
3900
- /* @__PURE__ */ jsxRuntime.jsxs(components_star.Tooltip, { children: [
3901
- /* @__PURE__ */ jsxRuntime.jsx(components_star.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
3902
- components_star.Button,
3903
- {
3904
- size: "sm",
3905
- variant: "ghost",
3906
- onClick: () => setIsMenuOpen(!isMenuOpen),
3907
- className: "h-7 w-7 p-0",
3908
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "w-3.5 h-3.5" })
3909
- }
3910
- ) }),
3911
- /* @__PURE__ */ jsxRuntime.jsx(components_star.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Choose background" }) })
3912
- ] })
3913
- ] })
3914
- ] })
3915
- }
3916
- )
3917
- ]
3918
- }
3919
- ) });
3920
- }, "SuperHero");
3921
- var TestimonialSection = /* @__PURE__ */ __name(({
3922
- title,
3923
- subtitle,
3924
- testimonials,
3925
- columns = 3,
3926
- className,
3927
- background = "dark"
3928
- }) => {
3929
- const gridClasses = {
3930
- 1: "grid-cols-1 max-w-4xl mx-auto",
3931
- 2: "grid-cols-1 md:grid-cols-2",
3932
- 3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
3933
- };
3934
- const backgroundClasses = {
3935
- dark: "bg-background",
3936
- card: "bg-muted/30",
3937
- gradient: "bg-gradient-to-b from-background via-muted/10 to-background"
3938
- };
3939
- const renderStars = /* @__PURE__ */ __name((rating) => {
3940
- return Array.from({ length: 5 }, (_, i) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: i < rating ? "text-yellow-400" : "text-neutral-400", children: "\u2605" }, i));
3941
- }, "renderStars");
3942
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: lib.cn(
3943
- "relative py-16 sm:py-20 md:py-24 lg:py-32",
3944
- backgroundClasses[background],
3945
- className
3946
- ), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "container max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
3947
- (title || subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center mb-12 sm:mb-14 md:mb-16", children: [
3948
- title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold text-foreground mb-4 sm:mb-6", children: title }),
3949
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg sm:text-xl text-muted-foreground max-w-3xl mx-auto", children: subtitle })
3950
- ] }),
3951
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: lib.cn("grid gap-6 sm:gap-8", gridClasses[columns]), children: testimonials.map((testimonial, index) => /* @__PURE__ */ jsxRuntime.jsx(
3952
- components_star.Card,
3953
- {
3954
- className: "h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group",
3955
- children: /* @__PURE__ */ jsxRuntime.jsxs(components_star.CardContent, { className: "p-8", children: [
3956
- testimonial.rating && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex mb-6 text-lg", children: renderStars(testimonial.rating) }),
3957
- /* @__PURE__ */ jsxRuntime.jsxs("blockquote", { className: "text-foreground mb-8 italic text-lg leading-relaxed group-hover:text-primary transition-colors duration-300", children: [
3958
- '"',
3959
- testimonial.content,
3960
- '"'
3961
- ] }),
3962
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center", children: [
3963
- testimonial.author.avatar && /* @__PURE__ */ jsxRuntime.jsx(
3964
- "img",
3965
- {
3966
- src: testimonial.author.avatar,
3967
- alt: testimonial.author.name,
3968
- className: "w-14 h-14 rounded-full mr-4 ring-2 ring-primary/20 group-hover:ring-primary/40 transition-all duration-300"
3969
- }
3970
- ),
3971
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3972
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold text-foreground group-hover:text-primary transition-colors duration-300", children: testimonial.author.name }),
3973
- testimonial.author.title && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm text-muted-foreground", children: [
3974
- testimonial.author.title,
3975
- testimonial.author.company && ` at ${testimonial.author.company}`
3976
- ] })
3977
- ] })
3978
- ] })
3979
- ] })
3980
- },
3981
- index
3982
- )) })
3983
- ] }) });
3984
- }, "TestimonialSection");
3985
-
3986
- Object.defineProperty(exports, "HotkeysProvider", {
3987
- enumerable: true,
3988
- get: function () { return reactHotkeysHook.HotkeysProvider; }
3989
- });
3990
- Object.defineProperty(exports, "isHotkeyPressed", {
3991
- enumerable: true,
3992
- get: function () { return reactHotkeysHook.isHotkeyPressed; }
3993
- });
3994
- Object.defineProperty(exports, "useHotkeysContext", {
3995
- enumerable: true,
3996
- get: function () { return reactHotkeysHook.useHotkeysContext; }
3997
- });
3998
- exports.AnimatedBackground = AnimatedBackground;
3999
- exports.ArticleCard = ArticleCard;
4000
- exports.ArticleList = ArticleList;
4001
- exports.Breadcrumb = Breadcrumb;
4002
- exports.BreadcrumbEllipsis = BreadcrumbEllipsis;
4003
- exports.BreadcrumbItem = BreadcrumbItem;
4004
- exports.BreadcrumbLink = BreadcrumbLink;
4005
- exports.BreadcrumbList = BreadcrumbList;
4006
- exports.BreadcrumbNavigation = BreadcrumbNavigation;
4007
- exports.BreadcrumbPage = BreadcrumbPage;
4008
- exports.BreadcrumbSeparator = BreadcrumbSeparator;
4009
- exports.CTASection = CTASection;
4010
- exports.DropdownMenu = DropdownMenu;
4011
- exports.DropdownMenuCheckboxItem = DropdownMenuCheckboxItem;
4012
- exports.DropdownMenuContent = DropdownMenuContent;
4013
- exports.DropdownMenuGroup = DropdownMenuGroup;
4014
- exports.DropdownMenuItem = DropdownMenuItem;
4015
- exports.DropdownMenuLabel = DropdownMenuLabel;
4016
- exports.DropdownMenuRadioGroup = DropdownMenuRadioGroup;
4017
- exports.DropdownMenuRadioItem = DropdownMenuRadioItem;
4018
- exports.DropdownMenuSeparator = DropdownMenuSeparator;
4019
- exports.DropdownMenuShortcut = DropdownMenuShortcut;
4020
- exports.DropdownMenuSub = DropdownMenuSub;
4021
- exports.DropdownMenuSubContent = DropdownMenuSubContent;
4022
- exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
4023
- exports.DropdownMenuTrigger = DropdownMenuTrigger;
4024
- exports.FeatureSection = FeatureSection;
4025
- exports.ForceTheme = ForceTheme;
4026
- exports.Hero = Hero;
4027
- exports.MouseFollower = MouseFollower;
4028
- exports.NewsletterSection = NewsletterSection;
4029
- exports.Pagination = Pagination;
4030
- exports.PaginationContent = PaginationContent;
4031
- exports.PaginationEllipsis = PaginationEllipsis;
4032
- exports.PaginationItem = PaginationItem;
4033
- exports.PaginationLink = PaginationLink;
4034
- exports.PaginationNext = PaginationNext;
4035
- exports.PaginationPrevious = PaginationPrevious;
4036
- exports.SSRPagination = SSRPagination;
4037
- exports.Sidebar = Sidebar;
4038
- exports.SidebarContent = SidebarContent;
4039
- exports.SidebarFooter = SidebarFooter;
4040
- exports.SidebarGroup = SidebarGroup;
4041
- exports.SidebarGroupAction = SidebarGroupAction;
4042
- exports.SidebarGroupContent = SidebarGroupContent;
4043
- exports.SidebarGroupLabel = SidebarGroupLabel;
4044
- exports.SidebarHeader = SidebarHeader;
4045
- exports.SidebarInput = SidebarInput;
4046
- exports.SidebarInset = SidebarInset;
4047
- exports.SidebarMenu = SidebarMenu;
4048
- exports.SidebarMenuAction = SidebarMenuAction;
4049
- exports.SidebarMenuBadge = SidebarMenuBadge;
4050
- exports.SidebarMenuButton = SidebarMenuButton;
4051
- exports.SidebarMenuItem = SidebarMenuItem;
4052
- exports.SidebarMenuSkeleton = SidebarMenuSkeleton;
4053
- exports.SidebarMenuSub = SidebarMenuSub;
4054
- exports.SidebarMenuSubButton = SidebarMenuSubButton;
4055
- exports.SidebarMenuSubItem = SidebarMenuSubItem;
4056
- exports.SidebarProvider = SidebarProvider;
4057
- exports.SidebarRail = SidebarRail;
4058
- exports.SidebarSeparator = SidebarSeparator;
4059
- exports.SidebarTrigger = SidebarTrigger;
4060
- exports.SplitHero = SplitHero;
4061
- exports.SplitHeroContent = SplitHeroContent;
4062
- exports.SplitHeroMedia = SplitHeroMedia;
4063
- exports.StaticPagination = StaticPagination;
4064
- exports.StatsSection = StatsSection;
4065
- exports.SuperHero = SuperHero;
4066
- exports.TestimonialSection = TestimonialSection;
4067
- exports.ThemeProvider = ThemeProvider;
4068
- exports.ThemeToggle = ThemeToggle;
4069
- exports.useBrowserDetect = useBrowserDetect;
4070
- exports.useCfgRouter = useCfgRouter;
4071
- exports.useDRFPagination = useDRFPagination;
4072
- exports.useDRFPaginationInfo = useDRFPaginationInfo;
4073
- exports.useDeviceDetect = useDeviceDetect;
4074
- exports.useHotkey = useHotkey;
4075
- exports.useQueryParams = useQueryParams;
4076
- exports.useResolvedTheme = useResolvedTheme;
4077
- exports.useSidebar = useSidebar;
4078
- exports.useThemeContext = useThemeContext;
4079
- //# sourceMappingURL=index.cjs.map
4080
- //# sourceMappingURL=index.cjs.map