@caffeinebounce/ui 0.62.3 → 0.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +1 -1
  2. package/dist/blog.js +7 -6
  3. package/dist/blog.mjs +2 -1
  4. package/dist/charts.d.cts +1 -1
  5. package/dist/charts.d.ts +1 -1
  6. package/dist/{chunk-6DVWMJ3H.mjs → chunk-2EFVMX6V.mjs} +3 -3
  7. package/dist/{chunk-6ZJCK6KH.js → chunk-375DECW4.js} +31 -31
  8. package/dist/{chunk-PZRI43EZ.js → chunk-46JYKBRX.js} +0 -43
  9. package/dist/chunk-5D55OVD5.js +75 -0
  10. package/dist/{chunk-JORVSG52.js → chunk-663CFAHS.js} +211 -269
  11. package/dist/chunk-6HKJDV43.mjs +48 -0
  12. package/dist/chunk-6NCRGHV3.mjs +64 -0
  13. package/dist/{chunk-OLAAXLXY.mjs → chunk-6QAKQG57.mjs} +4 -4
  14. package/dist/{chunk-N6AFNFZR.mjs → chunk-7ERVZXIN.mjs} +214 -270
  15. package/dist/chunk-APFEP5B7.mjs +100 -0
  16. package/dist/chunk-C3OADNSG.js +348 -0
  17. package/dist/{chunk-GIJQE3JR.js → chunk-DH5Z3ETN.js} +66 -45
  18. package/dist/chunk-DYWZ23QT.mjs +90 -0
  19. package/dist/{chunk-DTVWRRFN.mjs → chunk-E67IR6HU.mjs} +30 -9
  20. package/dist/{chunk-OVNLC5RD.mjs → chunk-EXQSWHLD.mjs} +6 -6
  21. package/dist/{chunk-ZOA7B32D.js → chunk-F35KL6TX.js} +9 -9
  22. package/dist/{chunk-YSLD2HLP.mjs → chunk-FFJC66KO.mjs} +1 -1
  23. package/dist/{chunk-MPZFPU4X.js → chunk-GMBLPQ3I.js} +3 -3
  24. package/dist/chunk-IJFPPLQW.js +50 -0
  25. package/dist/{chunk-BMFQG6RA.mjs → chunk-KJIX6V32.mjs} +107 -1885
  26. package/dist/chunk-LABHD4PU.js +109 -0
  27. package/dist/{chunk-GAIQJCAZ.js → chunk-LT5VD4KR.js} +149 -1953
  28. package/dist/{chunk-7DHKQODW.mjs → chunk-LTLCIRZY.mjs} +256 -474
  29. package/dist/chunk-N5BHXWR3.mjs +34 -0
  30. package/dist/chunk-OCO3Z5YA.js +37 -0
  31. package/dist/chunk-OIJ7XMDV.mjs +71 -0
  32. package/dist/chunk-ORBH4IBC.mjs +316 -0
  33. package/dist/chunk-OWWOAYIY.js +2652 -0
  34. package/dist/chunk-PFHOXDSW.mjs +10 -0
  35. package/dist/chunk-QRS7DJGS.js +103 -0
  36. package/dist/{chunk-NXPEJ2UR.mjs → chunk-R3X4B4JJ.mjs} +53 -6
  37. package/dist/chunk-RM7ACPTM.mjs +2601 -0
  38. package/dist/chunk-RODSGPBB.mjs +75 -0
  39. package/dist/{chunk-T6ZBA6VJ.js → chunk-UHAV34YX.js} +8 -8
  40. package/dist/{chunk-GUSTCU2W.mjs → chunk-ULANYJ7Y.mjs} +1 -59
  41. package/dist/chunk-ULDE7QSN.js +70 -0
  42. package/dist/chunk-UT36VNVZ.mjs +47 -0
  43. package/dist/chunk-UY3H4PKB.js +71 -0
  44. package/dist/{chunk-KB7UXIQZ.mjs → chunk-VIVWFQG5.mjs} +2 -1
  45. package/dist/{chunk-ESZ7CBA2.js → chunk-VKBJ3SGT.js} +6 -5
  46. package/dist/{chunk-UM7WMXIU.js → chunk-W3YOQ5ZD.js} +264 -505
  47. package/dist/{chunk-GHOFYK2E.js → chunk-XGJL6DLV.js} +55 -5
  48. package/dist/chunk-YRIBFIQ5.js +116 -0
  49. package/dist/chunk-ZWWJ3RRA.js +15 -0
  50. package/dist/data-grid.d.cts +241 -0
  51. package/dist/data-grid.d.ts +241 -0
  52. package/dist/data-grid.js +6486 -0
  53. package/dist/data-grid.mjs +6459 -0
  54. package/dist/data-table-CDQBo-Ve.d.ts +818 -0
  55. package/dist/data-table-jLzt6plY.d.cts +818 -0
  56. package/dist/data-table.d.cts +8 -42
  57. package/dist/data-table.d.ts +8 -42
  58. package/dist/data-table.js +61 -187
  59. package/dist/data-table.mjs +11 -5
  60. package/dist/finance.d.cts +534 -0
  61. package/dist/finance.d.ts +534 -0
  62. package/dist/finance.js +188 -0
  63. package/dist/finance.mjs +15 -0
  64. package/dist/forms.js +9 -6
  65. package/dist/forms.mjs +7 -4
  66. package/dist/{hooks-B2jU1GVT.d.ts → hooks-A55E0fgf.d.ts} +3 -2
  67. package/dist/{hooks-8ORd7T1A.d.cts → hooks-Bys_AZPI.d.cts} +3 -2
  68. package/dist/hooks.d.cts +1 -1
  69. package/dist/hooks.d.ts +1 -1
  70. package/dist/hooks.js +26 -23
  71. package/dist/hooks.mjs +6 -3
  72. package/dist/index.d.cts +536 -665
  73. package/dist/index.d.ts +536 -665
  74. package/dist/index.js +3829 -3408
  75. package/dist/index.mjs +2067 -1767
  76. package/dist/layouts.js +25 -25
  77. package/dist/layouts.mjs +4 -4
  78. package/dist/marketing.js +74 -74
  79. package/dist/marketing.mjs +4 -4
  80. package/dist/navigation.js +28 -28
  81. package/dist/navigation.mjs +6 -6
  82. package/dist/primitives.d.cts +72 -109
  83. package/dist/primitives.d.ts +72 -109
  84. package/dist/primitives.js +78 -72
  85. package/dist/primitives.mjs +8 -6
  86. package/dist/settings.js +9 -9
  87. package/dist/settings.mjs +4 -4
  88. package/package.json +17 -1
  89. package/dist/UnifiedTableControls-CG299y9h.d.ts +0 -1233
  90. package/dist/UnifiedTableControls-CIjRpNhy.d.cts +0 -1233
  91. package/dist/chunk-GMBGWOCR.mjs +0 -49
  92. package/dist/chunk-HBLKVQIQ.mjs +0 -23
  93. package/dist/chunk-HMAMMC72.js +0 -26
  94. package/dist/chunk-MVYRNJA6.js +0 -75
  95. /package/dist/{chunk-RVEFPVZF.mjs → chunk-C57MX3BG.mjs} +0 -0
  96. /package/dist/{chunk-C4UT5V3P.js → chunk-OWHI5VGJ.js} +0 -0
package/README.md CHANGED
@@ -9,7 +9,7 @@ settings, portal, media, and CSS exports.
9
9
  - `@caffeinebounce/ui/primitives` is the lightweight primitive-only entrypoint.
10
10
  - Feature subpaths include `./forms`, `./hooks`, `./layouts`, `./navigation`,
11
11
  `./marketing`, `./marketing-3d`, `./settings`, `./portal`, `./blog`,
12
- `./data-table`, `./charts`, `./editor`, `./media`, and `./styles.css`.
12
+ `./data-table` (tablecn/shadcn table + add-ons), `./finance` (financial statement table and controls), `./data-grid` (tablecn editable grid), `./charts`, `./editor`, `./media`, and `./styles.css`.
13
13
 
14
14
  ## Belongs Here
15
15
 
package/dist/blog.js CHANGED
@@ -1,8 +1,9 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkPZRI43EZ_js = require('./chunk-PZRI43EZ.js');
4
+ var chunk46JYKBRX_js = require('./chunk-46JYKBRX.js');
5
5
  var chunkEYJJQVV4_js = require('./chunk-EYJJQVV4.js');
6
+ var chunkIJFPPLQW_js = require('./chunk-IJFPPLQW.js');
6
7
  require('./chunk-Q256HRYD.js');
7
8
  require('./chunk-ADIDI7AJ.js');
8
9
  var Image = require('next/image');
@@ -86,7 +87,7 @@ function BlogCardGrid({ posts, basePath = "/blog" }) {
86
87
  post.excerpt && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground line-clamp-2", children: post.excerpt })
87
88
  ] }),
88
89
  post.tags && post.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkEYJJQVV4_js.CardFooter, { className: "pt-0", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: post.tags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
89
- chunkPZRI43EZ_js.Badge,
90
+ chunkIJFPPLQW_js.Badge,
90
91
  {
91
92
  variant: "secondary",
92
93
  className: "text-xs font-normal",
@@ -146,7 +147,7 @@ function BlogPostHeader({
146
147
  }) {
147
148
  return /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "mb-12", children: [
148
149
  tags && tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5 mb-4", children: tags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
149
- chunkPZRI43EZ_js.Badge,
150
+ chunkIJFPPLQW_js.Badge,
150
151
  {
151
152
  variant: "secondary",
152
153
  className: "text-xs font-normal",
@@ -199,10 +200,10 @@ var calloutConfig = {
199
200
  function Callout({ type = "note", title, children }) {
200
201
  const config = calloutConfig[type];
201
202
  const Icon = config.icon;
202
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkPZRI43EZ_js.Alert, { className: `my-6 ${config.className}`, children: [
203
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunk46JYKBRX_js.Alert, { className: `my-6 ${config.className}`, children: [
203
204
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-4 w-4" }),
204
- title && /* @__PURE__ */ jsxRuntime.jsx(chunkPZRI43EZ_js.AlertTitle, { children: title }),
205
- /* @__PURE__ */ jsxRuntime.jsx(chunkPZRI43EZ_js.AlertDescription, { children })
205
+ title && /* @__PURE__ */ jsxRuntime.jsx(chunk46JYKBRX_js.AlertTitle, { children: title }),
206
+ /* @__PURE__ */ jsxRuntime.jsx(chunk46JYKBRX_js.AlertDescription, { children })
206
207
  ] });
207
208
  }
208
209
  function Blockquote(props) {
package/dist/blog.mjs CHANGED
@@ -1,6 +1,7 @@
1
1
  "use client";
2
- import { Badge, Alert, AlertTitle, AlertDescription } from './chunk-GUSTCU2W.mjs';
2
+ import { Alert, AlertTitle, AlertDescription } from './chunk-6NCRGHV3.mjs';
3
3
  import { Card, CardContent, CardHeader, CardFooter } from './chunk-YL7RZRHM.mjs';
4
+ import { Badge } from './chunk-ULANYJ7Y.mjs';
4
5
  import './chunk-MHZXUOGN.mjs';
5
6
  import './chunk-IMKLN273.mjs';
6
7
  import Image from 'next/image';
package/dist/charts.d.cts CHANGED
@@ -37,7 +37,7 @@ declare const ChartContainer: React.ForwardRefExoticComponent<Omit<React.ClassAt
37
37
  children: React.ComponentProps<typeof ResponsiveContainer>["children"];
38
38
  }, "ref"> & React.RefAttributes<HTMLDivElement>>;
39
39
  declare const ChartTooltip: typeof Tooltip;
40
- declare const ChartTooltipContent: React.ForwardRefExoticComponent<Omit<Omit<recharts.DefaultTooltipContentProps<recharts.TooltipValueType, recharts_types_component_DefaultTooltipContent.NameType>, "viewBox" | "label" | "active" | "payload" | "coordinate" | "accessibilityLayer"> & {
40
+ declare const ChartTooltipContent: React.ForwardRefExoticComponent<Omit<Omit<recharts.DefaultTooltipContentProps<recharts.TooltipValueType, recharts_types_component_DefaultTooltipContent.NameType>, "viewBox" | "label" | "payload" | "active" | "coordinate" | "accessibilityLayer"> & {
41
41
  active?: boolean;
42
42
  allowEscapeViewBox?: recharts_types_util_types.AllowInDimension;
43
43
  animationDuration?: recharts_types_util_types.AnimationDuration;
package/dist/charts.d.ts CHANGED
@@ -37,7 +37,7 @@ declare const ChartContainer: React.ForwardRefExoticComponent<Omit<React.ClassAt
37
37
  children: React.ComponentProps<typeof ResponsiveContainer>["children"];
38
38
  }, "ref"> & React.RefAttributes<HTMLDivElement>>;
39
39
  declare const ChartTooltip: typeof Tooltip;
40
- declare const ChartTooltipContent: React.ForwardRefExoticComponent<Omit<Omit<recharts.DefaultTooltipContentProps<recharts.TooltipValueType, recharts_types_component_DefaultTooltipContent.NameType>, "viewBox" | "label" | "active" | "payload" | "coordinate" | "accessibilityLayer"> & {
40
+ declare const ChartTooltipContent: React.ForwardRefExoticComponent<Omit<Omit<recharts.DefaultTooltipContentProps<recharts.TooltipValueType, recharts_types_component_DefaultTooltipContent.NameType>, "viewBox" | "label" | "payload" | "active" | "coordinate" | "accessibilityLayer"> & {
41
41
  active?: boolean;
42
42
  allowEscapeViewBox?: recharts_types_util_types.AllowInDimension;
43
43
  animationDuration?: recharts_types_util_types.AnimationDuration;
@@ -1,9 +1,9 @@
1
1
  "use client";
2
- import { Card, CardHeader, CardTitle, CardContent, CardFooter } from './chunk-YL7RZRHM.mjs';
3
2
  import { cx, sectionToneClasses, sectionPaddingClasses, hasWindow, clamp } from './chunk-T5R6HUDG.mjs';
4
- import { Container } from './chunk-RVEFPVZF.mjs';
5
- import { Separator } from './chunk-ZKUIUE7W.mjs';
3
+ import { Container } from './chunk-C57MX3BG.mjs';
4
+ import { Card, CardHeader, CardTitle, CardContent, CardFooter } from './chunk-YL7RZRHM.mjs';
6
5
  import { Button } from './chunk-VBD4Q5LL.mjs';
6
+ import { Separator } from './chunk-ZKUIUE7W.mjs';
7
7
  import { cn } from './chunk-IMKLN273.mjs';
8
8
  import React, { memo, useRef, useCallback, useEffect, useState, useMemo, useId, createElement } from 'react';
9
9
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -2,12 +2,12 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkR26Y7LGJ_js = require('./chunk-R26Y7LGJ.js');
5
- var chunkC4UT5V3P_js = require('./chunk-C4UT5V3P.js');
6
- var chunkGHOFYK2E_js = require('./chunk-GHOFYK2E.js');
7
- var chunkLQCVRWVF_js = require('./chunk-LQCVRWVF.js');
8
- var chunkHMAMMC72_js = require('./chunk-HMAMMC72.js');
9
5
  var chunkRBUYW6QQ_js = require('./chunk-RBUYW6QQ.js');
6
+ var chunkOWHI5VGJ_js = require('./chunk-OWHI5VGJ.js');
10
7
  var chunk6TGV2DNP_js = require('./chunk-6TGV2DNP.js');
8
+ var chunkXGJL6DLV_js = require('./chunk-XGJL6DLV.js');
9
+ var chunkLQCVRWVF_js = require('./chunk-LQCVRWVF.js');
10
+ var chunkOCO3Z5YA_js = require('./chunk-OCO3Z5YA.js');
11
11
  var chunkJ6OLBSZR_js = require('./chunk-J6OLBSZR.js');
12
12
  var chunkSORWLKOK_js = require('./chunk-SORWLKOK.js');
13
13
  var chunkDQWHYBV2_js = require('./chunk-DQWHYBV2.js');
@@ -189,7 +189,7 @@ function AppSwitcher({
189
189
  const pathname = navigation.usePathname();
190
190
  const router = navigation.useRouter();
191
191
  const [open, setOpen] = react.useState(false);
192
- const Shortcut = ShortcutComponent || chunkGHOFYK2E_js.KeyboardShortcut;
192
+ const Shortcut = ShortcutComponent || chunkXGJL6DLV_js.KeyboardShortcut;
193
193
  const activeApp = react.useMemo(() => {
194
194
  if (getActiveAppId) {
195
195
  const activeId = getActiveAppId(pathname);
@@ -226,9 +226,9 @@ function AppSwitcher({
226
226
  if (!activeApp) {
227
227
  return null;
228
228
  }
229
- return /* @__PURE__ */ jsxRuntime.jsx(chunkGHOFYK2E_js.SidebarMenu, { className, children: /* @__PURE__ */ jsxRuntime.jsx(chunkGHOFYK2E_js.SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkJ6OLBSZR_js.DropdownMenu, { open, onOpenChange: setOpen, children: [
229
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkXGJL6DLV_js.SidebarMenu, { className, children: /* @__PURE__ */ jsxRuntime.jsx(chunkXGJL6DLV_js.SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkJ6OLBSZR_js.DropdownMenu, { open, onOpenChange: setOpen, children: [
230
230
  /* @__PURE__ */ jsxRuntime.jsx(chunkJ6OLBSZR_js.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
231
- chunkGHOFYK2E_js.SidebarMenuButton,
231
+ chunkXGJL6DLV_js.SidebarMenuButton,
232
232
  {
233
233
  size: "lg",
234
234
  className: "data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground",
@@ -339,7 +339,7 @@ function ComingSoonButton({
339
339
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-3.5 w-3.5 transition-transform duration-200 group-hover:scale-110 [&>svg]:h-full [&>svg]:w-full", children: icon }),
340
340
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: label }),
341
341
  shortcutKey && /* @__PURE__ */ jsxRuntime.jsx(
342
- chunkGHOFYK2E_js.KeyboardShortcut,
342
+ chunkXGJL6DLV_js.KeyboardShortcut,
343
343
  {
344
344
  visible: shortcutsVisible,
345
345
  className: "ml-0.5 hidden uppercase md:inline-flex",
@@ -384,10 +384,10 @@ function EntitySwitcher({
384
384
  className,
385
385
  ShortcutComponent
386
386
  }) {
387
- const Shortcut = ShortcutComponent || chunkGHOFYK2E_js.KeyboardShortcut;
387
+ const Shortcut = ShortcutComponent || chunkXGJL6DLV_js.KeyboardShortcut;
388
388
  const [open, setOpen] = react.useState(false);
389
389
  const [logoHovered, setLogoHovered] = react.useState(false);
390
- const { state: sidebarState } = chunkGHOFYK2E_js.useSidebar();
390
+ const { state: sidebarState } = chunkXGJL6DLV_js.useSidebar();
391
391
  const isCollapsed = sidebarState === "collapsed";
392
392
  const handleKeyDown = react.useCallback(
393
393
  (event) => {
@@ -417,14 +417,14 @@ function EntitySwitcher({
417
417
  return () => window.removeEventListener("keydown", handleKeyDown);
418
418
  }, [handleKeyDown, enableKeyboardShortcuts]);
419
419
  if (loading) {
420
- return /* @__PURE__ */ jsxRuntime.jsx(chunkGHOFYK2E_js.SidebarMenu, { className, children: /* @__PURE__ */ jsxRuntime.jsx(chunkGHOFYK2E_js.SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkGHOFYK2E_js.SidebarMenuButton, { size: "lg", disabled: true, children: [
421
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-8 w-8 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(chunkHMAMMC72_js.Spinner, { size: "sm" }) }),
420
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkXGJL6DLV_js.SidebarMenu, { className, children: /* @__PURE__ */ jsxRuntime.jsx(chunkXGJL6DLV_js.SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXGJL6DLV_js.SidebarMenuButton, { size: "lg", disabled: true, children: [
421
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-8 w-8 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(chunkOCO3Z5YA_js.SizedSpinner, { size: "sm" }) }),
422
422
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid min-w-0 flex-1 text-left text-sm leading-tight group-data-[collapsible=icon]:hidden", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-muted-foreground", children: "Loading..." }) })
423
423
  ] }) }) });
424
424
  }
425
425
  if (!activeEntity) {
426
426
  const gradientId = userId || "default";
427
- return /* @__PURE__ */ jsxRuntime.jsx(chunkGHOFYK2E_js.SidebarMenu, { className, children: /* @__PURE__ */ jsxRuntime.jsx(chunkGHOFYK2E_js.SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkGHOFYK2E_js.SidebarMenuButton, { size: "lg", onClick: onAddNew, disabled: !onAddNew, children: [
427
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkXGJL6DLV_js.SidebarMenu, { className, children: /* @__PURE__ */ jsxRuntime.jsx(chunkXGJL6DLV_js.SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXGJL6DLV_js.SidebarMenuButton, { size: "lg", onClick: onAddNew, disabled: !onAddNew, children: [
428
428
  /* @__PURE__ */ jsxRuntime.jsx(
429
429
  "div",
430
430
  {
@@ -441,9 +441,9 @@ function EntitySwitcher({
441
441
  }
442
442
  const displayName = getDisplayName(activeEntity);
443
443
  const initials = getInitials(activeEntity);
444
- return /* @__PURE__ */ jsxRuntime.jsx(chunkGHOFYK2E_js.SidebarMenu, { className, children: /* @__PURE__ */ jsxRuntime.jsx(chunkGHOFYK2E_js.SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkJ6OLBSZR_js.DropdownMenu, { open, onOpenChange: setOpen, children: [
444
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkXGJL6DLV_js.SidebarMenu, { className, children: /* @__PURE__ */ jsxRuntime.jsx(chunkXGJL6DLV_js.SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkJ6OLBSZR_js.DropdownMenu, { open, onOpenChange: setOpen, children: [
445
445
  /* @__PURE__ */ jsxRuntime.jsx(chunkJ6OLBSZR_js.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
446
- chunkGHOFYK2E_js.SidebarMenuButton,
446
+ chunkXGJL6DLV_js.SidebarMenuButton,
447
447
  {
448
448
  size: "lg",
449
449
  className: "data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground",
@@ -452,7 +452,7 @@ function EntitySwitcher({
452
452
  onMouseLeave: () => setLogoHovered(false),
453
453
  children: [
454
454
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex h-8 w-8 shrink-0 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsxs(
455
- chunkGHOFYK2E_js.Avatar,
455
+ chunkXGJL6DLV_js.Avatar,
456
456
  {
457
457
  className: "h-8 w-8 rounded-lg",
458
458
  style: {
@@ -462,7 +462,7 @@ function EntitySwitcher({
462
462
  },
463
463
  children: [
464
464
  activeEntity.logoUrl && /* @__PURE__ */ jsxRuntime.jsx(
465
- chunkGHOFYK2E_js.AvatarImage,
465
+ chunkXGJL6DLV_js.AvatarImage,
466
466
  {
467
467
  src: activeEntity.logoUrl,
468
468
  alt: displayName,
@@ -470,7 +470,7 @@ function EntitySwitcher({
470
470
  }
471
471
  ),
472
472
  /* @__PURE__ */ jsxRuntime.jsx(
473
- chunkGHOFYK2E_js.AvatarFallback,
473
+ chunkXGJL6DLV_js.AvatarFallback,
474
474
  {
475
475
  className: "rounded-lg text-xs font-medium text-white",
476
476
  style: chunkQ256HRYD_js.getAvatarGradient(activeEntity.id).style,
@@ -506,9 +506,9 @@ function EntitySwitcher({
506
506
  onClick: () => onSelect(entity),
507
507
  className: "gap-2 p-2",
508
508
  children: [
509
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-6 w-6", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkGHOFYK2E_js.Avatar, { className: "h-6 w-6 rounded-md", children: [
509
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-6 w-6", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXGJL6DLV_js.Avatar, { className: "h-6 w-6 rounded-md", children: [
510
510
  entity.logoUrl && /* @__PURE__ */ jsxRuntime.jsx(
511
- chunkGHOFYK2E_js.AvatarImage,
511
+ chunkXGJL6DLV_js.AvatarImage,
512
512
  {
513
513
  src: entity.logoUrl,
514
514
  alt: name,
@@ -516,7 +516,7 @@ function EntitySwitcher({
516
516
  }
517
517
  ),
518
518
  /* @__PURE__ */ jsxRuntime.jsx(
519
- chunkGHOFYK2E_js.AvatarFallback,
519
+ chunkXGJL6DLV_js.AvatarFallback,
520
520
  {
521
521
  className: "rounded-md text-xs font-medium text-white",
522
522
  style: chunkQ256HRYD_js.getAvatarGradient(entity.id).style,
@@ -596,7 +596,7 @@ function Footer({
596
596
  );
597
597
  }
598
598
  return /* @__PURE__ */ jsxRuntime.jsx("footer", { className: chunkADIDI7AJ_js.cn("bg-muted/50 border-t", className), children: /* @__PURE__ */ jsxRuntime.jsxs(
599
- chunkC4UT5V3P_js.Container,
599
+ chunkOWHI5VGJ_js.Container,
600
600
  {
601
601
  "data-slot": "footer-container",
602
602
  className: chunkADIDI7AJ_js.cn("py-12 md:py-16", containerClassName),
@@ -685,7 +685,7 @@ function BrandFooter({
685
685
  }
686
686
  ),
687
687
  /* @__PURE__ */ jsxRuntime.jsxs(
688
- chunkC4UT5V3P_js.Container,
688
+ chunkOWHI5VGJ_js.Container,
689
689
  {
690
690
  "data-slot": "footer-container",
691
691
  className: chunkADIDI7AJ_js.cn("py-16 md:py-20", containerClassName),
@@ -804,7 +804,7 @@ function MinimalFooter({
804
804
  }) {
805
805
  const allLinks = linkGroups.flatMap((g) => g.links);
806
806
  return /* @__PURE__ */ jsxRuntime.jsx("footer", { className: chunkADIDI7AJ_js.cn("bg-background border-t border-border", className), children: /* @__PURE__ */ jsxRuntime.jsx(
807
- chunkC4UT5V3P_js.Container,
807
+ chunkOWHI5VGJ_js.Container,
808
808
  {
809
809
  "data-slot": "footer-container",
810
810
  className: chunkADIDI7AJ_js.cn("py-6", containerClassName),
@@ -1023,7 +1023,7 @@ function Navbar({
1023
1023
  },
1024
1024
  children: [
1025
1025
  /* @__PURE__ */ jsxRuntime.jsxs(
1026
- chunkC4UT5V3P_js.Container,
1026
+ chunkOWHI5VGJ_js.Container,
1027
1027
  {
1028
1028
  "data-slot": "navbar-container",
1029
1029
  className: chunkADIDI7AJ_js.cn(
@@ -1253,7 +1253,7 @@ function Navbar({
1253
1253
  height: `calc(100dvh - ${mobileMenuTop}px)`
1254
1254
  } : void 0,
1255
1255
  children: /* @__PURE__ */ jsxRuntime.jsx(
1256
- chunkC4UT5V3P_js.Container,
1256
+ chunkOWHI5VGJ_js.Container,
1257
1257
  {
1258
1258
  "data-slot": "navbar-mobile-menu-container",
1259
1259
  className: chunkADIDI7AJ_js.cn(
@@ -1474,7 +1474,7 @@ function NavbarUserMenu({
1474
1474
  return items;
1475
1475
  }, [additionalItems, onSignOut]);
1476
1476
  if (loading) {
1477
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "inline-flex h-8 w-8 items-center justify-center rounded-md", children: /* @__PURE__ */ jsxRuntime.jsx(chunkHMAMMC72_js.Spinner, { size: "sm" }) });
1477
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "inline-flex h-8 w-8 items-center justify-center rounded-md", children: /* @__PURE__ */ jsxRuntime.jsx(chunkOCO3Z5YA_js.SizedSpinner, { size: "sm" }) });
1478
1478
  }
1479
1479
  const metadata = user.metadata || {};
1480
1480
  const avatarUrl = profile?.avatarUrl || profile?.avatar_url || metadata.picture || metadata.avatar_url;
@@ -1484,7 +1484,7 @@ function NavbarUserMenu({
1484
1484
  const displayName = `${firstName} ${lastName}`.trim() || user.email || "User";
1485
1485
  const initials = `${firstName?.[0] || ""}${lastName?.[0] || ""}`.toUpperCase() || "U";
1486
1486
  return /* @__PURE__ */ jsxRuntime.jsx(
1487
- chunkGHOFYK2E_js.UserAvatarMenu,
1487
+ chunkXGJL6DLV_js.UserAvatarMenu,
1488
1488
  {
1489
1489
  user: {
1490
1490
  id: user.id,
@@ -1504,10 +1504,10 @@ function NavbarUserMenu({
1504
1504
  type: "button",
1505
1505
  className: "inline-flex h-8 w-8 items-center justify-center rounded-full focus:outline-none overflow-hidden *:hover:brightness-110 *:transition-all",
1506
1506
  children: [
1507
- /* @__PURE__ */ jsxRuntime.jsxs(chunkGHOFYK2E_js.Avatar, { className: "h-7 w-7", children: [
1508
- avatarUrl && /* @__PURE__ */ jsxRuntime.jsx(chunkGHOFYK2E_js.AvatarImage, { src: avatarUrl, alt: displayName }),
1507
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkXGJL6DLV_js.Avatar, { className: "h-7 w-7", children: [
1508
+ avatarUrl && /* @__PURE__ */ jsxRuntime.jsx(chunkXGJL6DLV_js.AvatarImage, { src: avatarUrl, alt: displayName }),
1509
1509
  /* @__PURE__ */ jsxRuntime.jsx(
1510
- chunkGHOFYK2E_js.AvatarFallback,
1510
+ chunkXGJL6DLV_js.AvatarFallback,
1511
1511
  {
1512
1512
  className: "text-xs font-medium text-white",
1513
1513
  style: chunkQ256HRYD_js.getAvatarGradient(user.id).style,
@@ -62,50 +62,7 @@ function AlertDescription({
62
62
  }
63
63
  );
64
64
  }
65
- var badgeVariants = classVarianceAuthority.cva(
66
- "inline-flex items-center border font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
67
- {
68
- variants: {
69
- variant: {
70
- default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
71
- secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
72
- destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
73
- outline: "text-foreground",
74
- success: "border-transparent bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400",
75
- warning: "border-transparent bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-400",
76
- muted: "border-transparent bg-muted text-muted-foreground"
77
- },
78
- shape: {
79
- pill: "rounded-full",
80
- rounded: "rounded-md",
81
- square: "rounded-none"
82
- },
83
- size: {
84
- sm: "px-1 text-[9px]",
85
- default: "px-1.5 text-[10px]",
86
- lg: "px-2 py-0.5 text-xs"
87
- }
88
- },
89
- defaultVariants: {
90
- variant: "default",
91
- shape: "pill",
92
- size: "default"
93
- }
94
- }
95
- );
96
- function Badge({ className, variant, shape, size, ...props }) {
97
- return /* @__PURE__ */ jsxRuntime.jsx(
98
- "div",
99
- {
100
- "data-slot": "badge",
101
- className: chunkADIDI7AJ_js.cn(badgeVariants({ variant, shape, size }), className),
102
- ...props
103
- }
104
- );
105
- }
106
65
 
107
66
  exports.Alert = Alert;
108
67
  exports.AlertDescription = AlertDescription;
109
68
  exports.AlertTitle = AlertTitle;
110
- exports.Badge = Badge;
111
- exports.badgeVariants = badgeVariants;
@@ -0,0 +1,75 @@
1
+ 'use strict';
2
+
3
+ // src/hooks/spreadsheetWorkbook.ts
4
+ function escapeXml(value) {
5
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
6
+ }
7
+ function styleId(style) {
8
+ if (!style) return void 0;
9
+ const map = {
10
+ header: "Header",
11
+ text: "Text",
12
+ number: "Number",
13
+ currency: "Currency",
14
+ percent: "Percent",
15
+ totalLabel: "TotalLabel",
16
+ totalNumber: "TotalNumber"
17
+ };
18
+ return map[style];
19
+ }
20
+ function excelColumnName(columnIndex) {
21
+ let n = columnIndex + 1;
22
+ let result = "";
23
+ while (n > 0) {
24
+ const rem = (n - 1) % 26;
25
+ result = String.fromCharCode(65 + rem) + result;
26
+ n = Math.floor((n - 1) / 26);
27
+ }
28
+ return result;
29
+ }
30
+ function buildSpreadsheetWorkbookXml({
31
+ worksheetName,
32
+ rows
33
+ }) {
34
+ const xmlRows = rows.map(
35
+ (row) => `<Row>${row.map((cell) => {
36
+ const inferredType = cell.type ?? (typeof cell.value === "number" || cell.formula ? "Number" : "String");
37
+ const rawValue = cell.value ?? "";
38
+ const value = inferredType === "Number" ? Number(rawValue || 0) : escapeXml(String(rawValue));
39
+ const style = styleId(cell.style);
40
+ const styleAttr = style ? ` ss:StyleID="${style}"` : "";
41
+ const formulaAttr = cell.formula ? ` ss:Formula="=${escapeXml(cell.formula)}"` : "";
42
+ return `<Cell${styleAttr}${formulaAttr}><Data ss:Type="${inferredType}">${value}</Data></Cell>`;
43
+ }).join("")}</Row>`
44
+ ).join("\n");
45
+ return `<?xml version="1.0" encoding="UTF-8"?>
46
+ <?mso-application progid="Excel.Sheet"?>
47
+ <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
48
+ <Styles>
49
+ <Style ss:ID="Header"><Font ss:Bold="1"/><Interior ss:Color="#F3F4F6" ss:Pattern="Solid"/></Style>
50
+ <Style ss:ID="Text"><NumberFormat ss:Format="@"/></Style>
51
+ <Style ss:ID="Number"><NumberFormat ss:Format="#,##0.00"/></Style>
52
+ <Style ss:ID="Currency"><NumberFormat ss:Format="$#,##0.00;[Red]($#,##0.00)"/></Style>
53
+ <Style ss:ID="Percent"><NumberFormat ss:Format="0.00%"/></Style>
54
+ <Style ss:ID="TotalLabel"><Font ss:Bold="1"/><Interior ss:Color="#F9FAFB" ss:Pattern="Solid"/></Style>
55
+ <Style ss:ID="TotalNumber"><Font ss:Bold="1"/><NumberFormat ss:Format="$#,##0.00;[Red]($#,##0.00)"/><Interior ss:Color="#F9FAFB" ss:Pattern="Solid"/></Style>
56
+ </Styles>
57
+ <Worksheet ss:Name="${escapeXml(worksheetName)}"><Table>
58
+ ${xmlRows}
59
+ </Table></Worksheet></Workbook>`;
60
+ }
61
+ function downloadExcelXml(xml, filename) {
62
+ const blob = new Blob([xml], {
63
+ type: "application/vnd.ms-excel;charset=utf-8;"
64
+ });
65
+ const url = URL.createObjectURL(blob);
66
+ const link = document.createElement("a");
67
+ link.href = url;
68
+ link.download = `${filename}.xls`;
69
+ link.click();
70
+ URL.revokeObjectURL(url);
71
+ }
72
+
73
+ exports.buildSpreadsheetWorkbookXml = buildSpreadsheetWorkbookXml;
74
+ exports.downloadExcelXml = downloadExcelXml;
75
+ exports.excelColumnName = excelColumnName;