@gv-tech/design-system 2.16.0 → 2.18.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 (142) hide show
  1. package/README.md +13 -13
  2. package/dist/accordion.cjs +1 -1
  3. package/dist/accordion.mjs +2 -2
  4. package/dist/alert-dialog.cjs +1 -1
  5. package/dist/alert-dialog.mjs +2 -2
  6. package/dist/alert.cjs +1 -1
  7. package/dist/alert.mjs +2 -2
  8. package/dist/aspect-ratio.cjs +1 -1
  9. package/dist/aspect-ratio.mjs +1 -1
  10. package/dist/avatar.cjs +1 -1
  11. package/dist/avatar.mjs +2 -2
  12. package/dist/badge.cjs +1 -1
  13. package/dist/badge.mjs +2 -2
  14. package/dist/breadcrumb.cjs +1 -1
  15. package/dist/breadcrumb.mjs +2 -2
  16. package/dist/button.cjs +1 -1
  17. package/dist/button.mjs +2 -2
  18. package/dist/calendar.cjs +1 -1
  19. package/dist/calendar.mjs +2 -2
  20. package/dist/card.cjs +1 -1
  21. package/dist/card.mjs +2 -2
  22. package/dist/carousel.cjs +1 -1
  23. package/dist/carousel.mjs +2 -2
  24. package/dist/chart.cjs +1 -1
  25. package/dist/chart.mjs +2 -2
  26. package/dist/checkbox.cjs +1 -1
  27. package/dist/checkbox.mjs +2 -2
  28. package/dist/collapsible.cjs +1 -1
  29. package/dist/collapsible.mjs +1 -1
  30. package/dist/command.cjs +1 -1
  31. package/dist/command.mjs +2 -2
  32. package/dist/context-menu.cjs +1 -1
  33. package/dist/context-menu.mjs +2 -2
  34. package/dist/design-system.css +1 -1
  35. package/dist/dialog.cjs +1 -1
  36. package/dist/dialog.mjs +2 -2
  37. package/dist/drawer.cjs +1 -1
  38. package/dist/drawer.mjs +2 -2
  39. package/dist/dropdown-menu.cjs +1 -1
  40. package/dist/dropdown-menu.mjs +2 -2
  41. package/dist/form.cjs +1 -1
  42. package/dist/form.mjs +2 -2
  43. package/dist/hover-card.cjs +1 -1
  44. package/dist/hover-card.mjs +2 -2
  45. package/dist/index.cjs +1 -1
  46. package/dist/index.cjs.map +1 -1
  47. package/dist/index.d.ts +49 -0
  48. package/dist/index.mjs +100 -96
  49. package/dist/index.mjs.map +1 -1
  50. package/dist/input.cjs +1 -1
  51. package/dist/input.mjs +2 -2
  52. package/dist/label.cjs +1 -1
  53. package/dist/label.mjs +2 -2
  54. package/dist/menubar.cjs +1 -1
  55. package/dist/menubar.mjs +2 -2
  56. package/dist/navigation-menu.cjs +1 -1
  57. package/dist/navigation-menu.mjs +8 -8
  58. package/dist/pagination.cjs +1 -1
  59. package/dist/pagination.mjs +2 -2
  60. package/dist/popover.cjs +1 -1
  61. package/dist/popover.mjs +2 -2
  62. package/dist/progress.cjs +1 -1
  63. package/dist/progress.mjs +2 -2
  64. package/dist/radio-group.cjs +1 -1
  65. package/dist/radio-group.mjs +2 -2
  66. package/dist/resizable.cjs +1 -1
  67. package/dist/resizable.mjs +2 -2
  68. package/dist/scroll-area.cjs +1 -1
  69. package/dist/scroll-area.mjs +2 -2
  70. package/dist/scroll-to-top.cjs +2 -0
  71. package/dist/scroll-to-top.cjs.map +1 -0
  72. package/dist/scroll-to-top.d.ts +37 -0
  73. package/dist/scroll-to-top.mjs +86 -0
  74. package/dist/scroll-to-top.mjs.map +1 -0
  75. package/dist/search.cjs +1 -1
  76. package/dist/search.mjs +4 -4
  77. package/dist/select.cjs +1 -1
  78. package/dist/select.mjs +4 -4
  79. package/dist/separator.cjs +1 -1
  80. package/dist/separator.mjs +2 -2
  81. package/dist/sheet.cjs +1 -1
  82. package/dist/sheet.mjs +7 -7
  83. package/dist/skeleton.cjs +1 -1
  84. package/dist/skeleton.mjs +2 -2
  85. package/dist/slider.cjs +1 -1
  86. package/dist/slider.mjs +2 -2
  87. package/dist/sonner.cjs +1 -1
  88. package/dist/sonner.mjs +1 -1
  89. package/dist/support-fab.cjs +2 -0
  90. package/dist/support-fab.cjs.map +1 -0
  91. package/dist/support-fab.d.ts +20 -0
  92. package/dist/support-fab.mjs +120 -0
  93. package/dist/support-fab.mjs.map +1 -0
  94. package/dist/switch.cjs +1 -1
  95. package/dist/switch.mjs +2 -2
  96. package/dist/table-of-contents.cjs +1 -1
  97. package/dist/table-of-contents.mjs +2 -2
  98. package/dist/table.cjs +1 -1
  99. package/dist/table.mjs +2 -2
  100. package/dist/tabs.cjs +1 -1
  101. package/dist/tabs.mjs +2 -2
  102. package/dist/text.cjs +1 -1
  103. package/dist/text.mjs +2 -2
  104. package/dist/textarea.cjs +1 -1
  105. package/dist/textarea.mjs +2 -2
  106. package/dist/theme-provider.cjs +1 -1
  107. package/dist/theme-provider.mjs +1 -1
  108. package/dist/{theme-toggle-BUU8zhDg.mjs → theme-toggle-BNtYv2Jv.mjs} +5 -5
  109. package/dist/{theme-toggle-BUU8zhDg.mjs.map → theme-toggle-BNtYv2Jv.mjs.map} +1 -1
  110. package/dist/{theme-toggle-B3z50t2s.js → theme-toggle-DK_OhDRf.js} +2 -2
  111. package/dist/{theme-toggle-B3z50t2s.js.map → theme-toggle-DK_OhDRf.js.map} +1 -1
  112. package/dist/theme-toggle.cjs +1 -1
  113. package/dist/theme-toggle.mjs +3 -3
  114. package/dist/toast.cjs +1 -1
  115. package/dist/toast.mjs +2 -2
  116. package/dist/{toaster-BqX0t2H6.mjs → toaster-Cj_SryBI.mjs} +2 -2
  117. package/dist/{toaster-BqX0t2H6.mjs.map → toaster-Cj_SryBI.mjs.map} +1 -1
  118. package/dist/{toaster-CKwNMV1Z.js → toaster-Q_hzVonm.js} +2 -2
  119. package/dist/{toaster-CKwNMV1Z.js.map → toaster-Q_hzVonm.js.map} +1 -1
  120. package/dist/toaster.cjs +1 -1
  121. package/dist/toaster.mjs +2 -2
  122. package/dist/{toggle-Dmzr60z6.mjs → toggle-DPMTgo47.mjs} +2 -2
  123. package/dist/{toggle-Dmzr60z6.mjs.map → toggle-DPMTgo47.mjs.map} +1 -1
  124. package/dist/{toggle-BAzsZDaN.js → toggle-_F_yB_Dj.js} +2 -2
  125. package/dist/{toggle-BAzsZDaN.js.map → toggle-_F_yB_Dj.js.map} +1 -1
  126. package/dist/toggle-group.cjs +1 -1
  127. package/dist/toggle-group.mjs +3 -3
  128. package/dist/toggle.cjs +1 -1
  129. package/dist/toggle.mjs +3 -3
  130. package/dist/tooltip.cjs +1 -1
  131. package/dist/tooltip.mjs +2 -2
  132. package/dist/{utils-CgPEtJt0.mjs → utils-Bgpn0CK0.mjs} +2 -2
  133. package/dist/{utils-CgPEtJt0.mjs.map → utils-Bgpn0CK0.mjs.map} +1 -1
  134. package/dist/{utils--qajXu5A.js → utils-CBWPs0D7.js} +2 -2
  135. package/dist/{utils--qajXu5A.js.map → utils-CBWPs0D7.js.map} +1 -1
  136. package/dist/{vendor-DxBXMLEx.mjs → vendor-BQwS7aJt.mjs} +1953 -1929
  137. package/dist/vendor-BQwS7aJt.mjs.map +1 -0
  138. package/dist/{vendor-DQFuDa7q.js → vendor-B_07FHqh.js} +14 -14
  139. package/dist/vendor-B_07FHqh.js.map +1 -0
  140. package/package.json +68 -72
  141. package/dist/vendor-DQFuDa7q.js.map +0 -1
  142. package/dist/vendor-DxBXMLEx.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support-fab.cjs","sources":["../packages/ui-web/src/support-fab.tsx"],"sourcesContent":["'use client';\n\nimport { Coffee, ExternalLink } from 'lucide-react';\nimport * as React from 'react';\nimport { Button } from './button';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle } from './drawer';\nimport { cn } from './lib/utils';\n\nconst MOBILE_QUERY = '(max-width: 767px)';\n\nconst normalizeBaseUrl = (url: string) => {\n const trimmed = url.trim();\n return trimmed.endsWith('/') ? trimmed.slice(0, -1) : trimmed;\n};\n\nconst sanitizeCreator = (creatorId: string) => creatorId.trim().replace(/^@+/, '');\n\nconst buildPageUrl = (supportUrl: string, creatorId: string) => {\n const base = normalizeBaseUrl(supportUrl);\n const creator = encodeURIComponent(sanitizeCreator(creatorId));\n return `${base}/${creator}`;\n};\n\nconst buildEmbedUrl = (supportUrl: string, creatorId: string) => {\n const base = normalizeBaseUrl(supportUrl);\n const creator = encodeURIComponent(sanitizeCreator(creatorId));\n return `${base}/widget/page/${creator}`;\n};\n\nconst useIsMobile = () => {\n const getInitial = () => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false;\n }\n return window.matchMedia(MOBILE_QUERY).matches;\n };\n\n const [isMobile, setIsMobile] = React.useState(getInitial);\n\n React.useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n const mediaQuery = window.matchMedia(MOBILE_QUERY);\n const onChange = (event: MediaQueryListEvent) => setIsMobile(event.matches);\n\n setIsMobile(mediaQuery.matches);\n mediaQuery.addEventListener('change', onChange);\n\n return () => {\n mediaQuery.removeEventListener('change', onChange);\n };\n }, []);\n\n return isMobile;\n};\n\nexport interface SupportFabProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n supportUrl?: string;\n creatorId: string;\n title?: string;\n description?: string;\n iframeTitle?: string;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n positionClassName?: string;\n buttonClassName?: string;\n panelClassName?: string;\n}\n\nexport function SupportFab({\n supportUrl = 'https://www.buymeacoffee.com',\n creatorId,\n title = 'Buy me a coffee',\n description = 'Support the project directly from this panel.',\n iframeTitle = 'Buy Me a Coffee support form',\n open,\n defaultOpen = false,\n onOpenChange,\n positionClassName,\n buttonClassName,\n panelClassName,\n className,\n type,\n onClick,\n ...buttonProps\n}: SupportFabProps) {\n const isMobile = useIsMobile();\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n\n const setOpen = React.useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const pageUrl = React.useMemo(() => buildPageUrl(supportUrl, creatorId), [creatorId, supportUrl]);\n const embedUrl = React.useMemo(() => buildEmbedUrl(supportUrl, creatorId), [creatorId, supportUrl]);\n\n const panelBody = (\n <div className=\"flex max-h-[75vh] flex-col gap-3\">\n <div className=\"overflow-hidden rounded-md border\">\n <iframe\n title={iframeTitle}\n src={embedUrl}\n className=\"h-[560px] w-full border-0\"\n loading=\"lazy\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n />\n </div>\n <div className=\"text-muted-foreground flex items-center justify-between gap-2 text-xs\">\n <span>If the embedded checkout is unavailable, open the support page directly.</span>\n <a\n href={pageUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground inline-flex items-center gap-1 font-medium underline underline-offset-2\"\n >\n Open Buy Me a Coffee\n <ExternalLink className=\"h-3.5 w-3.5\" />\n </a>\n </div>\n </div>\n );\n\n const trigger = (\n <div className={cn('fixed right-6 bottom-6 z-50', positionClassName)}>\n <Button\n aria-label=\"Support this project\"\n type={type ?? 'button'}\n className={cn(\n 'inline-flex h-14 w-14 rounded-full border border-black/15 bg-[#ffdd00] text-black shadow-[0_16px_36px_-18px_rgba(0,0,0,0.8)] transition hover:-translate-y-0.5 hover:scale-105 hover:bg-[#ffe347] focus-visible:ring-2 focus-visible:ring-offset-2 active:translate-y-0 active:scale-95',\n buttonClassName,\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n setOpen(true);\n }\n }}\n {...buttonProps}\n >\n <Coffee className=\"h-6 w-6\" />\n <span className=\"sr-only\">Support this project</span>\n </Button>\n </div>\n );\n\n if (isMobile) {\n return (\n <>\n {trigger}\n <Drawer open={isOpen} onOpenChange={setOpen}>\n <DrawerContent className={cn('mx-auto w-full max-w-xl', panelClassName)}>\n <DrawerHeader>\n <DrawerTitle>{title}</DrawerTitle>\n <DrawerDescription>{description}</DrawerDescription>\n </DrawerHeader>\n <div className=\"px-4 pb-4\">{panelBody}</div>\n </DrawerContent>\n </Drawer>\n </>\n );\n }\n\n return (\n <>\n {trigger}\n <Dialog open={isOpen} onOpenChange={setOpen}>\n <DialogContent className={cn('max-w-xl p-5', panelClassName)}>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n {panelBody}\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"names":["MOBILE_QUERY","normalizeBaseUrl","url","trimmed","sanitizeCreator","creatorId","buildPageUrl","supportUrl","base","creator","buildEmbedUrl","useIsMobile","getInitial","isMobile","setIsMobile","React","mediaQuery","onChange","event","SupportFab","title","description","iframeTitle","open","defaultOpen","onOpenChange","positionClassName","buttonClassName","panelClassName","className","type","onClick","buttonProps","isControlled","internalOpen","setInternalOpen","isOpen","setOpen","nextOpen","pageUrl","embedUrl","panelBody","jsxs","jsx","ExternalLink","trigger","cn","Button","Coffee","Fragment","Drawer","DrawerContent","DrawerHeader","DrawerTitle","DrawerDescription","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { JSX } from 'react/jsx-runtime';
2
+ import * as React_2 from 'react';
3
+
4
+ export declare function SupportFab({ supportUrl, creatorId, title, description, iframeTitle, open, defaultOpen, onOpenChange, positionClassName, buttonClassName, panelClassName, className, type, onClick, ...buttonProps }: SupportFabProps): JSX.Element;
5
+
6
+ export declare interface SupportFabProps extends Omit<React_2.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {
7
+ supportUrl?: string;
8
+ creatorId: string;
9
+ title?: string;
10
+ description?: string;
11
+ iframeTitle?: string;
12
+ open?: boolean;
13
+ defaultOpen?: boolean;
14
+ onOpenChange?: (open: boolean) => void;
15
+ positionClassName?: string;
16
+ buttonClassName?: string;
17
+ panelClassName?: string;
18
+ }
19
+
20
+ export { }
@@ -0,0 +1,120 @@
1
+ "use client";
2
+ import { j as e, bh as _, bi as I } from "./vendor-BQwS7aJt.mjs";
3
+ import * as o from "react";
4
+ import { Button as R } from "./button.mjs";
5
+ import { Dialog as U, DialogContent as z, DialogHeader as L, DialogTitle as $, DialogDescription as F } from "./dialog.mjs";
6
+ import { Drawer as P, DrawerContent as H, DrawerHeader as Q, DrawerTitle as T, DrawerDescription as W } from "./drawer.mjs";
7
+ import { c as l } from "./utils-Bgpn0CK0.mjs";
8
+ const b = "(max-width: 767px)", g = (n) => {
9
+ const t = n.trim();
10
+ return t.endsWith("/") ? t.slice(0, -1) : t;
11
+ }, w = (n) => n.trim().replace(/^@+/, ""), Y = (n, t) => {
12
+ const s = g(n), r = encodeURIComponent(w(t));
13
+ return `${s}/${r}`;
14
+ }, q = (n, t) => {
15
+ const s = g(n), r = encodeURIComponent(w(t));
16
+ return `${s}/widget/page/${r}`;
17
+ }, A = () => {
18
+ const n = () => typeof window > "u" || typeof window.matchMedia != "function" ? !1 : window.matchMedia(b).matches, [t, s] = o.useState(n);
19
+ return o.useEffect(() => {
20
+ if (typeof window > "u" || typeof window.matchMedia != "function")
21
+ return;
22
+ const r = window.matchMedia(b), a = (c) => s(c.matches);
23
+ return s(r.matches), r.addEventListener("change", a), () => {
24
+ r.removeEventListener("change", a);
25
+ };
26
+ }, []), t;
27
+ };
28
+ function Z({
29
+ supportUrl: n = "https://www.buymeacoffee.com",
30
+ creatorId: t,
31
+ title: s = "Buy me a coffee",
32
+ description: r = "Support the project directly from this panel.",
33
+ iframeTitle: a = "Buy Me a Coffee support form",
34
+ open: c,
35
+ defaultOpen: j = !1,
36
+ onOpenChange: m,
37
+ positionClassName: v,
38
+ buttonClassName: y,
39
+ panelClassName: h,
40
+ className: M,
41
+ type: C,
42
+ onClick: D,
43
+ ...N
44
+ }) {
45
+ const E = A(), d = c !== void 0, [k, B] = o.useState(j), u = d ? c : k, f = o.useCallback(
46
+ (i) => {
47
+ d || B(i), m?.(i);
48
+ },
49
+ [d, m]
50
+ ), O = o.useMemo(() => Y(n, t), [t, n]), S = o.useMemo(() => q(n, t), [t, n]), p = /* @__PURE__ */ e.jsxs("div", { className: "flex max-h-[75vh] flex-col gap-3", children: [
51
+ /* @__PURE__ */ e.jsx("div", { className: "overflow-hidden rounded-md border", children: /* @__PURE__ */ e.jsx(
52
+ "iframe",
53
+ {
54
+ title: a,
55
+ src: S,
56
+ className: "h-[560px] w-full border-0",
57
+ loading: "lazy",
58
+ referrerPolicy: "strict-origin-when-cross-origin"
59
+ }
60
+ ) }),
61
+ /* @__PURE__ */ e.jsxs("div", { className: "text-muted-foreground flex items-center justify-between gap-2 text-xs", children: [
62
+ /* @__PURE__ */ e.jsx("span", { children: "If the embedded checkout is unavailable, open the support page directly." }),
63
+ /* @__PURE__ */ e.jsxs(
64
+ "a",
65
+ {
66
+ href: O,
67
+ target: "_blank",
68
+ rel: "noopener noreferrer",
69
+ className: "text-foreground inline-flex items-center gap-1 font-medium underline underline-offset-2",
70
+ children: [
71
+ "Open Buy Me a Coffee",
72
+ /* @__PURE__ */ e.jsx(I, { className: "h-3.5 w-3.5" })
73
+ ]
74
+ }
75
+ )
76
+ ] })
77
+ ] }), x = /* @__PURE__ */ e.jsx("div", { className: l("fixed right-6 bottom-6 z-50", v), children: /* @__PURE__ */ e.jsxs(
78
+ R,
79
+ {
80
+ "aria-label": "Support this project",
81
+ type: C ?? "button",
82
+ className: l(
83
+ "inline-flex h-14 w-14 rounded-full border border-black/15 bg-[#ffdd00] text-black shadow-[0_16px_36px_-18px_rgba(0,0,0,0.8)] transition hover:-translate-y-0.5 hover:scale-105 hover:bg-[#ffe347] focus-visible:ring-2 focus-visible:ring-offset-2 active:translate-y-0 active:scale-95",
84
+ y,
85
+ M
86
+ ),
87
+ onClick: (i) => {
88
+ D?.(i), i.defaultPrevented || f(!0);
89
+ },
90
+ ...N,
91
+ children: [
92
+ /* @__PURE__ */ e.jsx(_, { className: "h-6 w-6" }),
93
+ /* @__PURE__ */ e.jsx("span", { className: "sr-only", children: "Support this project" })
94
+ ]
95
+ }
96
+ ) });
97
+ return E ? /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
98
+ x,
99
+ /* @__PURE__ */ e.jsx(P, { open: u, onOpenChange: f, children: /* @__PURE__ */ e.jsxs(H, { className: l("mx-auto w-full max-w-xl", h), children: [
100
+ /* @__PURE__ */ e.jsxs(Q, { children: [
101
+ /* @__PURE__ */ e.jsx(T, { children: s }),
102
+ /* @__PURE__ */ e.jsx(W, { children: r })
103
+ ] }),
104
+ /* @__PURE__ */ e.jsx("div", { className: "px-4 pb-4", children: p })
105
+ ] }) })
106
+ ] }) : /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
107
+ x,
108
+ /* @__PURE__ */ e.jsx(U, { open: u, onOpenChange: f, children: /* @__PURE__ */ e.jsxs(z, { className: l("max-w-xl p-5", h), children: [
109
+ /* @__PURE__ */ e.jsxs(L, { children: [
110
+ /* @__PURE__ */ e.jsx($, { children: s }),
111
+ /* @__PURE__ */ e.jsx(F, { children: r })
112
+ ] }),
113
+ p
114
+ ] }) })
115
+ ] });
116
+ }
117
+ export {
118
+ Z as SupportFab
119
+ };
120
+ //# sourceMappingURL=support-fab.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support-fab.mjs","sources":["../packages/ui-web/src/support-fab.tsx"],"sourcesContent":["'use client';\n\nimport { Coffee, ExternalLink } from 'lucide-react';\nimport * as React from 'react';\nimport { Button } from './button';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from './dialog';\nimport { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle } from './drawer';\nimport { cn } from './lib/utils';\n\nconst MOBILE_QUERY = '(max-width: 767px)';\n\nconst normalizeBaseUrl = (url: string) => {\n const trimmed = url.trim();\n return trimmed.endsWith('/') ? trimmed.slice(0, -1) : trimmed;\n};\n\nconst sanitizeCreator = (creatorId: string) => creatorId.trim().replace(/^@+/, '');\n\nconst buildPageUrl = (supportUrl: string, creatorId: string) => {\n const base = normalizeBaseUrl(supportUrl);\n const creator = encodeURIComponent(sanitizeCreator(creatorId));\n return `${base}/${creator}`;\n};\n\nconst buildEmbedUrl = (supportUrl: string, creatorId: string) => {\n const base = normalizeBaseUrl(supportUrl);\n const creator = encodeURIComponent(sanitizeCreator(creatorId));\n return `${base}/widget/page/${creator}`;\n};\n\nconst useIsMobile = () => {\n const getInitial = () => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false;\n }\n return window.matchMedia(MOBILE_QUERY).matches;\n };\n\n const [isMobile, setIsMobile] = React.useState(getInitial);\n\n React.useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return;\n }\n\n const mediaQuery = window.matchMedia(MOBILE_QUERY);\n const onChange = (event: MediaQueryListEvent) => setIsMobile(event.matches);\n\n setIsMobile(mediaQuery.matches);\n mediaQuery.addEventListener('change', onChange);\n\n return () => {\n mediaQuery.removeEventListener('change', onChange);\n };\n }, []);\n\n return isMobile;\n};\n\nexport interface SupportFabProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n supportUrl?: string;\n creatorId: string;\n title?: string;\n description?: string;\n iframeTitle?: string;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n positionClassName?: string;\n buttonClassName?: string;\n panelClassName?: string;\n}\n\nexport function SupportFab({\n supportUrl = 'https://www.buymeacoffee.com',\n creatorId,\n title = 'Buy me a coffee',\n description = 'Support the project directly from this panel.',\n iframeTitle = 'Buy Me a Coffee support form',\n open,\n defaultOpen = false,\n onOpenChange,\n positionClassName,\n buttonClassName,\n panelClassName,\n className,\n type,\n onClick,\n ...buttonProps\n}: SupportFabProps) {\n const isMobile = useIsMobile();\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const isOpen = isControlled ? open : internalOpen;\n\n const setOpen = React.useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n const pageUrl = React.useMemo(() => buildPageUrl(supportUrl, creatorId), [creatorId, supportUrl]);\n const embedUrl = React.useMemo(() => buildEmbedUrl(supportUrl, creatorId), [creatorId, supportUrl]);\n\n const panelBody = (\n <div className=\"flex max-h-[75vh] flex-col gap-3\">\n <div className=\"overflow-hidden rounded-md border\">\n <iframe\n title={iframeTitle}\n src={embedUrl}\n className=\"h-[560px] w-full border-0\"\n loading=\"lazy\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n />\n </div>\n <div className=\"text-muted-foreground flex items-center justify-between gap-2 text-xs\">\n <span>If the embedded checkout is unavailable, open the support page directly.</span>\n <a\n href={pageUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground inline-flex items-center gap-1 font-medium underline underline-offset-2\"\n >\n Open Buy Me a Coffee\n <ExternalLink className=\"h-3.5 w-3.5\" />\n </a>\n </div>\n </div>\n );\n\n const trigger = (\n <div className={cn('fixed right-6 bottom-6 z-50', positionClassName)}>\n <Button\n aria-label=\"Support this project\"\n type={type ?? 'button'}\n className={cn(\n 'inline-flex h-14 w-14 rounded-full border border-black/15 bg-[#ffdd00] text-black shadow-[0_16px_36px_-18px_rgba(0,0,0,0.8)] transition hover:-translate-y-0.5 hover:scale-105 hover:bg-[#ffe347] focus-visible:ring-2 focus-visible:ring-offset-2 active:translate-y-0 active:scale-95',\n buttonClassName,\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n setOpen(true);\n }\n }}\n {...buttonProps}\n >\n <Coffee className=\"h-6 w-6\" />\n <span className=\"sr-only\">Support this project</span>\n </Button>\n </div>\n );\n\n if (isMobile) {\n return (\n <>\n {trigger}\n <Drawer open={isOpen} onOpenChange={setOpen}>\n <DrawerContent className={cn('mx-auto w-full max-w-xl', panelClassName)}>\n <DrawerHeader>\n <DrawerTitle>{title}</DrawerTitle>\n <DrawerDescription>{description}</DrawerDescription>\n </DrawerHeader>\n <div className=\"px-4 pb-4\">{panelBody}</div>\n </DrawerContent>\n </Drawer>\n </>\n );\n }\n\n return (\n <>\n {trigger}\n <Dialog open={isOpen} onOpenChange={setOpen}>\n <DialogContent className={cn('max-w-xl p-5', panelClassName)}>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n {panelBody}\n </DialogContent>\n </Dialog>\n </>\n );\n}\n"],"names":["MOBILE_QUERY","normalizeBaseUrl","url","trimmed","sanitizeCreator","creatorId","buildPageUrl","supportUrl","base","creator","buildEmbedUrl","useIsMobile","getInitial","isMobile","setIsMobile","React","mediaQuery","onChange","event","SupportFab","title","description","iframeTitle","open","defaultOpen","onOpenChange","positionClassName","buttonClassName","panelClassName","className","type","onClick","buttonProps","isControlled","internalOpen","setInternalOpen","isOpen","setOpen","nextOpen","pageUrl","embedUrl","panelBody","jsxs","jsx","ExternalLink","trigger","cn","Button","Coffee","Fragment","Drawer","DrawerContent","DrawerHeader","DrawerTitle","DrawerDescription","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription"],"mappings":"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"}
package/dist/switch.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./vendor-DQFuDa7q.js"),a=require("react"),s=require("./utils--qajXu5A.js");function c(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,o.get?o:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const l=c(a),i=l.forwardRef(({className:e,...r},t)=>n.jsxRuntimeExports.jsx(n.Root$9,{className:s.cn("peer focus-visible:ring-ring focus-visible:ring-offset-background data-[state=checked]:bg-primary data-[state=unchecked]:bg-input inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50",e),...r,ref:t,children:n.jsxRuntimeExports.jsx(n.Thumb$1,{className:s.cn("bg-background pointer-events-none block h-4 w-4 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0")})}));i.displayName=n.Root$9?.displayName||"Switch";exports.Switch=i;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./vendor-B_07FHqh.js"),a=require("react"),s=require("./utils-CBWPs0D7.js");function c(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,o.get?o:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const l=c(a),i=l.forwardRef(({className:e,...r},t)=>n.jsxRuntimeExports.jsx(n.Root$9,{className:s.cn("peer focus-visible:ring-ring focus-visible:ring-offset-background data-[state=checked]:bg-primary data-[state=unchecked]:bg-input inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50",e),...r,ref:t,children:n.jsxRuntimeExports.jsx(n.Thumb$1,{className:s.cn("bg-background pointer-events-none block h-4 w-4 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0")})}));i.displayName=n.Root$9?.displayName||"Switch";exports.Switch=i;
2
2
  //# sourceMappingURL=switch.cjs.map
package/dist/switch.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { j as e, bC as t, bD as i } from "./vendor-DxBXMLEx.mjs";
2
+ import { j as e, bF as t, bG as i } from "./vendor-BQwS7aJt.mjs";
3
3
  import * as n from "react";
4
- import { c as s } from "./utils-CgPEtJt0.mjs";
4
+ import { c as s } from "./utils-Bgpn0CK0.mjs";
5
5
  const c = n.forwardRef(({ className: a, ...r }, o) => /* @__PURE__ */ e.jsx(
6
6
  t,
7
7
  {
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./vendor-DQFuDa7q.js"),O=require("react"),h=require("./utils--qajXu5A.js");function C(n){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const i in n)if(i!=="default"){const a=Object.getOwnPropertyDescriptor(n,i);Object.defineProperty(r,i,a.get?a:{enumerable:!0,get:()=>n[i]})}}return r.default=n,Object.freeze(r)}const l=C(O),E=l.createContext(null);function R(){const n=l.useContext(E);if(!n)throw new Error("TOC components must be used within a TableOfContents provider");return n}function v({children:n,className:r,activeId:i,minLevel:a=1,maxLevel:s=4,selector:x="h1, h2, h3, h4, h5, h6"}){const[u,f]=l.useState([]),[t,d]=l.useState(null),p=l.useMemo(()=>u.find(o=>o.id===t)?.text||null,[u,t]),c=l.useCallback(o=>{f(j=>JSON.stringify(j)===JSON.stringify(o)?j:o)},[]),m=l.useMemo(()=>({headings:u,activeId:i||t,activeHeadingText:p,registerHeadings:c,setActiveId:d,config:{minLevel:a,maxLevel:s,selector:x,className:r}}),[u,t,i,p,c,a,s,x,r]);return e.jsxRuntimeExports.jsx(E.Provider,{value:m,children:e.jsxRuntimeExports.jsx("div",{className:h.cn("relative",r),children:n||e.jsxRuntimeExports.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxRuntimeExports.jsx(b,{}),e.jsxRuntimeExports.jsx(g,{children:null})]})})})}function b({className:n}){const{headings:r,activeId:i,activeHeadingText:a}=R(),[s,x]=l.useState(!1);if(l.useEffect(()=>{if(!s)return;const t=()=>{x(!1)};return window.addEventListener("scroll",t,{passive:!0}),()=>window.removeEventListener("scroll",t)},[s]),r.length===0)return null;const u=Math.min(...r.map(t=>t.level)),f=e.jsxRuntimeExports.jsx("ul",{className:"m-0 list-none text-sm",children:r.map(t=>{const d=i===t.id,p=`${(t.level-u)*1}rem`;return e.jsxRuntimeExports.jsx("li",{className:"mt-0 pt-2",children:e.jsxRuntimeExports.jsx("a",{href:`#${t.id}`,onClick:()=>x(!1),className:h.cn("hover:text-foreground inline-block no-underline transition-colors",d?"text-primary font-medium":"text-muted-foreground"),style:{paddingLeft:p},children:t.text})},t.id)})});return e.jsxRuntimeExports.jsxs(e.jsxRuntimeExports.Fragment,{children:[e.jsxRuntimeExports.jsxs("div",{className:h.cn("bg-background/95 sticky top-0 z-40 border-b backdrop-blur xl:hidden",n),children:[e.jsxRuntimeExports.jsxs("button",{onClick:()=>x(!s),className:"flex w-full items-center justify-between px-4 py-3 text-left",children:[e.jsxRuntimeExports.jsxs("div",{className:"flex items-center gap-2 overflow-hidden",children:[e.jsxRuntimeExports.jsx("span",{className:"text-muted-foreground text-xs font-semibold tracking-wider uppercase",children:"On this page:"}),e.jsxRuntimeExports.jsx("span",{className:"truncate text-sm font-medium",children:a||"Overview"})]}),e.jsxRuntimeExports.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:h.cn("shrink-0 transition-transform duration-200",s&&"rotate-180"),children:e.jsxRuntimeExports.jsx("path",{d:"m6 9 6 6 6-6"})})]}),s&&e.jsxRuntimeExports.jsx("div",{className:"bg-background border-t px-4 pt-2 pb-6",children:e.jsxRuntimeExports.jsx("nav",{"aria-label":"Table of contents mobile",children:f})})]}),e.jsxRuntimeExports.jsx("nav",{className:h.cn("hidden xl:block",n),"aria-label":"Table of contents",children:f})]})}function g({children:n,className:r}){const{registerHeadings:i,setActiveId:a,config:s}=R(),x=l.useRef(null);return l.useEffect(()=>{const u=x.current;if(!u)return;const f=()=>{const c=Array.from(u.querySelectorAll(s.selector||"h1, h2, h3, h4, h5, h6")).filter(o=>{const j=parseInt(o.tagName.charAt(1),10);return j>=(s.minLevel??1)&&j<=(s.maxLevel??4)}),m=c.map(o=>(o.id||(o.id=h.slugify(o.textContent||"heading")),{id:o.id,text:o.textContent||"",level:parseInt(o.tagName.charAt(1),10)}));return i(m),c},t=f(),d=new IntersectionObserver(c=>{c.forEach(m=>{m.isIntersecting&&a(m.target.id)})},{rootMargin:"0px 0px -80% 0px",threshold:.1});t.forEach(c=>d.observe(c));const p=new MutationObserver(()=>{const c=f();d.disconnect(),c.forEach(m=>d.observe(m))});return p.observe(u,{childList:!0,subtree:!0,characterData:!0}),()=>{d.disconnect(),p.disconnect()}},[s.selector,s.minLevel,s.maxLevel,i,a]),e.jsxRuntimeExports.jsx("div",{ref:x,className:r,children:n})}v.List=b;v.Content=g;exports.TableOfContents=v;exports.TableOfContentsContent=g;exports.TableOfContentsList=b;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./vendor-B_07FHqh.js"),O=require("react"),h=require("./utils-CBWPs0D7.js");function C(n){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const i in n)if(i!=="default"){const a=Object.getOwnPropertyDescriptor(n,i);Object.defineProperty(r,i,a.get?a:{enumerable:!0,get:()=>n[i]})}}return r.default=n,Object.freeze(r)}const l=C(O),E=l.createContext(null);function R(){const n=l.useContext(E);if(!n)throw new Error("TOC components must be used within a TableOfContents provider");return n}function v({children:n,className:r,activeId:i,minLevel:a=1,maxLevel:s=4,selector:x="h1, h2, h3, h4, h5, h6"}){const[u,f]=l.useState([]),[t,d]=l.useState(null),p=l.useMemo(()=>u.find(o=>o.id===t)?.text||null,[u,t]),c=l.useCallback(o=>{f(j=>JSON.stringify(j)===JSON.stringify(o)?j:o)},[]),m=l.useMemo(()=>({headings:u,activeId:i||t,activeHeadingText:p,registerHeadings:c,setActiveId:d,config:{minLevel:a,maxLevel:s,selector:x,className:r}}),[u,t,i,p,c,a,s,x,r]);return e.jsxRuntimeExports.jsx(E.Provider,{value:m,children:e.jsxRuntimeExports.jsx("div",{className:h.cn("relative",r),children:n||e.jsxRuntimeExports.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxRuntimeExports.jsx(b,{}),e.jsxRuntimeExports.jsx(g,{children:null})]})})})}function b({className:n}){const{headings:r,activeId:i,activeHeadingText:a}=R(),[s,x]=l.useState(!1);if(l.useEffect(()=>{if(!s)return;const t=()=>{x(!1)};return window.addEventListener("scroll",t,{passive:!0}),()=>window.removeEventListener("scroll",t)},[s]),r.length===0)return null;const u=Math.min(...r.map(t=>t.level)),f=e.jsxRuntimeExports.jsx("ul",{className:"m-0 list-none text-sm",children:r.map(t=>{const d=i===t.id,p=`${(t.level-u)*1}rem`;return e.jsxRuntimeExports.jsx("li",{className:"mt-0 pt-2",children:e.jsxRuntimeExports.jsx("a",{href:`#${t.id}`,onClick:()=>x(!1),className:h.cn("hover:text-foreground inline-block no-underline transition-colors",d?"text-primary font-medium":"text-muted-foreground"),style:{paddingLeft:p},children:t.text})},t.id)})});return e.jsxRuntimeExports.jsxs(e.jsxRuntimeExports.Fragment,{children:[e.jsxRuntimeExports.jsxs("div",{className:h.cn("bg-background/95 sticky top-0 z-40 border-b backdrop-blur xl:hidden",n),children:[e.jsxRuntimeExports.jsxs("button",{onClick:()=>x(!s),className:"flex w-full items-center justify-between px-4 py-3 text-left",children:[e.jsxRuntimeExports.jsxs("div",{className:"flex items-center gap-2 overflow-hidden",children:[e.jsxRuntimeExports.jsx("span",{className:"text-muted-foreground text-xs font-semibold tracking-wider uppercase",children:"On this page:"}),e.jsxRuntimeExports.jsx("span",{className:"truncate text-sm font-medium",children:a||"Overview"})]}),e.jsxRuntimeExports.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:h.cn("shrink-0 transition-transform duration-200",s&&"rotate-180"),children:e.jsxRuntimeExports.jsx("path",{d:"m6 9 6 6 6-6"})})]}),s&&e.jsxRuntimeExports.jsx("div",{className:"bg-background border-t px-4 pt-2 pb-6",children:e.jsxRuntimeExports.jsx("nav",{"aria-label":"Table of contents mobile",children:f})})]}),e.jsxRuntimeExports.jsx("nav",{className:h.cn("hidden xl:block",n),"aria-label":"Table of contents",children:f})]})}function g({children:n,className:r}){const{registerHeadings:i,setActiveId:a,config:s}=R(),x=l.useRef(null);return l.useEffect(()=>{const u=x.current;if(!u)return;const f=()=>{const c=Array.from(u.querySelectorAll(s.selector||"h1, h2, h3, h4, h5, h6")).filter(o=>{const j=parseInt(o.tagName.charAt(1),10);return j>=(s.minLevel??1)&&j<=(s.maxLevel??4)}),m=c.map(o=>(o.id||(o.id=h.slugify(o.textContent||"heading")),{id:o.id,text:o.textContent||"",level:parseInt(o.tagName.charAt(1),10)}));return i(m),c},t=f(),d=new IntersectionObserver(c=>{c.forEach(m=>{m.isIntersecting&&a(m.target.id)})},{rootMargin:"0px 0px -80% 0px",threshold:.1});t.forEach(c=>d.observe(c));const p=new MutationObserver(()=>{const c=f();d.disconnect(),c.forEach(m=>d.observe(m))});return p.observe(u,{childList:!0,subtree:!0,characterData:!0}),()=>{d.disconnect(),p.disconnect()}},[s.selector,s.minLevel,s.maxLevel,i,a]),e.jsxRuntimeExports.jsx("div",{ref:x,className:r,children:n})}v.List=b;v.Content=g;exports.TableOfContents=v;exports.TableOfContentsContent=g;exports.TableOfContentsList=b;
2
2
  //# sourceMappingURL=table-of-contents.cjs.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { j as e } from "./vendor-DxBXMLEx.mjs";
2
+ import { j as e } from "./vendor-BQwS7aJt.mjs";
3
3
  import * as i from "react";
4
- import { c as p, s as k } from "./utils-CgPEtJt0.mjs";
4
+ import { c as p, s as k } from "./utils-Bgpn0CK0.mjs";
5
5
  const g = i.createContext(null);
6
6
  function b() {
7
7
  const c = i.useContext(g);
package/dist/table.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./vendor-DQFuDa7q.js"),f=require("react"),r=require("./utils--qajXu5A.js");function p(e){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const l=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(a,t,l.get?l:{enumerable:!0,get:()=>e[t]})}}return a.default=e,Object.freeze(a)}const s=p(f),n=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("div",{className:"relative w-full overflow-auto",children:o.jsxRuntimeExports.jsx("table",{ref:t,className:r.cn("w-full caption-bottom text-sm",e),...a})}));n.displayName="Table";const c=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("thead",{ref:t,className:r.cn("[&_tr]:border-b",e),...a}));c.displayName="TableHeader";const d=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("tbody",{ref:t,className:r.cn("[&_tr:last-child]:border-0",e),...a}));d.displayName="TableBody";const b=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("tfoot",{ref:t,className:r.cn("bg-muted/50 border-t font-medium [&>tr]:last:border-b-0",e),...a}));b.displayName="TableFooter";const i=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("tr",{ref:t,className:r.cn("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",e),...a}));i.displayName="TableRow";const m=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("th",{ref:t,className:r.cn("text-muted-foreground h-10 px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...a}));m.displayName="TableHead";const u=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("td",{ref:t,className:r.cn("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...a}));u.displayName="TableCell";const x=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("caption",{ref:t,className:r.cn("text-muted-foreground mt-4 text-sm",e),...a}));x.displayName="TableCaption";exports.Table=n;exports.TableBody=d;exports.TableCaption=x;exports.TableCell=u;exports.TableFooter=b;exports.TableHead=m;exports.TableHeader=c;exports.TableRow=i;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./vendor-B_07FHqh.js"),f=require("react"),r=require("./utils-CBWPs0D7.js");function p(e){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const l=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(a,t,l.get?l:{enumerable:!0,get:()=>e[t]})}}return a.default=e,Object.freeze(a)}const s=p(f),n=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("div",{className:"relative w-full overflow-auto",children:o.jsxRuntimeExports.jsx("table",{ref:t,className:r.cn("w-full caption-bottom text-sm",e),...a})}));n.displayName="Table";const c=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("thead",{ref:t,className:r.cn("[&_tr]:border-b",e),...a}));c.displayName="TableHeader";const d=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("tbody",{ref:t,className:r.cn("[&_tr:last-child]:border-0",e),...a}));d.displayName="TableBody";const b=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("tfoot",{ref:t,className:r.cn("bg-muted/50 border-t font-medium [&>tr]:last:border-b-0",e),...a}));b.displayName="TableFooter";const i=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("tr",{ref:t,className:r.cn("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",e),...a}));i.displayName="TableRow";const m=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("th",{ref:t,className:r.cn("text-muted-foreground h-10 px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...a}));m.displayName="TableHead";const u=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("td",{ref:t,className:r.cn("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...a}));u.displayName="TableCell";const x=s.forwardRef(({className:e,...a},t)=>o.jsxRuntimeExports.jsx("caption",{ref:t,className:r.cn("text-muted-foreground mt-4 text-sm",e),...a}));x.displayName="TableCaption";exports.Table=n;exports.TableBody=d;exports.TableCaption=x;exports.TableCell=u;exports.TableFooter=b;exports.TableHead=m;exports.TableHeader=c;exports.TableRow=i;
2
2
  //# sourceMappingURL=table.cjs.map
package/dist/table.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { j as o } from "./vendor-DxBXMLEx.mjs";
2
+ import { j as o } from "./vendor-BQwS7aJt.mjs";
3
3
  import * as l from "react";
4
- import { c as s } from "./utils-CgPEtJt0.mjs";
4
+ import { c as s } from "./utils-Bgpn0CK0.mjs";
5
5
  const r = l.forwardRef(
6
6
  ({ className: e, ...a }, t) => /* @__PURE__ */ o.jsx("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ o.jsx("table", { ref: t, className: s("w-full caption-bottom text-sm", e), ...a }) })
7
7
  );
package/dist/tabs.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./vendor-DQFuDa7q.js"),l=require("react"),n=require("./utils--qajXu5A.js");function f(e){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(i,t,a.get?a:{enumerable:!0,get:()=>e[t]})}}return i.default=e,Object.freeze(i)}const r=f(l),d=s.Root2$9,o=r.forwardRef(({className:e,...i},t)=>s.jsxRuntimeExports.jsx(s.List$1,{ref:t,className:n.cn("bg-muted text-muted-foreground inline-flex h-9 items-center justify-center rounded-lg p-1",e),...i}));o.displayName=s.List$1?.displayName||"TabsList";const c=r.forwardRef(({className:e,...i},t)=>s.jsxRuntimeExports.jsx(s.Trigger$8,{ref:t,className:n.cn("ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow",e),...i}));c.displayName=s.Trigger$8?.displayName||"TabsTrigger";const u=r.forwardRef(({className:e,...i},t)=>s.jsxRuntimeExports.jsx(s.Content$2,{ref:t,className:n.cn("ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none",e),...i}));u.displayName=s.Content$2?.displayName||"TabsContent";exports.Tabs=d;exports.TabsContent=u;exports.TabsList=o;exports.TabsTrigger=c;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./vendor-B_07FHqh.js"),l=require("react"),n=require("./utils-CBWPs0D7.js");function f(e){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(i,t,a.get?a:{enumerable:!0,get:()=>e[t]})}}return i.default=e,Object.freeze(i)}const r=f(l),d=s.Root2$9,o=r.forwardRef(({className:e,...i},t)=>s.jsxRuntimeExports.jsx(s.List$1,{ref:t,className:n.cn("bg-muted text-muted-foreground inline-flex h-9 items-center justify-center rounded-lg p-1",e),...i}));o.displayName=s.List$1?.displayName||"TabsList";const c=r.forwardRef(({className:e,...i},t)=>s.jsxRuntimeExports.jsx(s.Trigger$8,{ref:t,className:n.cn("ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow",e),...i}));c.displayName=s.Trigger$8?.displayName||"TabsTrigger";const u=r.forwardRef(({className:e,...i},t)=>s.jsxRuntimeExports.jsx(s.Content$2,{ref:t,className:n.cn("ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none",e),...i}));u.displayName=s.Content$2?.displayName||"TabsContent";exports.Tabs=d;exports.TabsContent=u;exports.TabsList=o;exports.TabsTrigger=c;
2
2
  //# sourceMappingURL=tabs.cjs.map
package/dist/tabs.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { j as t, bE as o, bF as r, bG as f, bH as c } from "./vendor-DxBXMLEx.mjs";
2
+ import { j as t, bH as o, bI as r, bJ as f, bK as c } from "./vendor-BQwS7aJt.mjs";
3
3
  import * as a from "react";
4
- import { c as n } from "./utils-CgPEtJt0.mjs";
4
+ import { c as n } from "./utils-Bgpn0CK0.mjs";
5
5
  const u = c, d = a.forwardRef(({ className: e, ...s }, i) => /* @__PURE__ */ t.jsx(
6
6
  o,
7
7
  {
package/dist/text.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./vendor-DQFuDa7q.js"),d=require("react"),u=require("./utils--qajXu5A.js");function x(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,o.get?o:{enumerable:!0,get:()=>t[n]})}}return e.default=t,Object.freeze(e)}const m=x(d),r=a.cva("",{variants:{variant:{h1:"scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl",h2:"scroll-m-20 text-3xl font-semibold tracking-tight",h3:"scroll-m-20 text-2xl font-semibold tracking-tight",h4:"scroll-m-20 text-xl font-semibold tracking-tight",body:"leading-7",bodySmall:"text-sm leading-6",caption:"text-xs text-muted-foreground",label:"text-sm font-medium leading-none",overline:"text-xs font-semibold uppercase tracking-widest text-muted-foreground"}},defaultVariants:{variant:"body"}}),b={h1:"h1",h2:"h2",h3:"h3",h4:"h4",body:"p",bodySmall:"p",caption:"span",label:"label",overline:"span"},l=m.forwardRef(({className:t,variant:e="body",as:n,children:o,...i},s)=>{const c=n||b[e??"body"]||"p";return a.jsxRuntimeExports.jsx(c,{ref:s,className:u.cn(r({variant:e,className:t})),...i,children:o})});l.displayName="Text";exports.Text=l;exports.textVariants=r;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./vendor-B_07FHqh.js"),d=require("react"),u=require("./utils-CBWPs0D7.js");function x(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,o.get?o:{enumerable:!0,get:()=>t[n]})}}return e.default=t,Object.freeze(e)}const m=x(d),r=a.cva("",{variants:{variant:{h1:"scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl",h2:"scroll-m-20 text-3xl font-semibold tracking-tight",h3:"scroll-m-20 text-2xl font-semibold tracking-tight",h4:"scroll-m-20 text-xl font-semibold tracking-tight",body:"leading-7",bodySmall:"text-sm leading-6",caption:"text-xs text-muted-foreground",label:"text-sm font-medium leading-none",overline:"text-xs font-semibold uppercase tracking-widest text-muted-foreground"}},defaultVariants:{variant:"body"}}),b={h1:"h1",h2:"h2",h3:"h3",h4:"h4",body:"p",bodySmall:"p",caption:"span",label:"label",overline:"span"},l=m.forwardRef(({className:t,variant:e="body",as:n,children:o,...i},s)=>{const c=n||b[e??"body"]||"p";return a.jsxRuntimeExports.jsx(c,{ref:s,className:u.cn(r({variant:e,className:t})),...i,children:o})});l.displayName="Text";exports.Text=l;exports.textVariants=r;
2
2
  //# sourceMappingURL=text.cjs.map
package/dist/text.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { j as s, g as i } from "./vendor-DxBXMLEx.mjs";
2
+ import { j as s, g as i } from "./vendor-BQwS7aJt.mjs";
3
3
  import * as m from "react";
4
- import { c as x } from "./utils-CgPEtJt0.mjs";
4
+ import { c as x } from "./utils-Bgpn0CK0.mjs";
5
5
  const d = i("", {
6
6
  variants: {
7
7
  variant: {
package/dist/textarea.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./vendor-DQFuDa7q.js"),s=require("react"),i=require("./utils--qajXu5A.js");function c(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const u=c(s),o=u.forwardRef(({className:e,...r},t)=>a.jsxRuntimeExports.jsx("textarea",{className:i.cn("border-input placeholder:text-muted-foreground focus-visible:ring-ring flex min-h-[60px] w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-sm focus-visible:ring-1 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:t,...r}));o.displayName="Textarea";exports.Textarea=o;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./vendor-B_07FHqh.js"),s=require("react"),i=require("./utils-CBWPs0D7.js");function c(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const u=c(s),o=u.forwardRef(({className:e,...r},t)=>a.jsxRuntimeExports.jsx("textarea",{className:i.cn("border-input placeholder:text-muted-foreground focus-visible:ring-ring flex min-h-[60px] w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-sm focus-visible:ring-1 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:t,...r}));o.displayName="Textarea";exports.Textarea=o;
2
2
  //# sourceMappingURL=textarea.cjs.map
package/dist/textarea.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { j as o } from "./vendor-DxBXMLEx.mjs";
2
+ import { j as o } from "./vendor-BQwS7aJt.mjs";
3
3
  import * as s from "react";
4
- import { c as a } from "./utils-CgPEtJt0.mjs";
4
+ import { c as a } from "./utils-Bgpn0CK0.mjs";
5
5
  const i = s.forwardRef(({ className: e, ...r }, t) => /* @__PURE__ */ o.jsx(
6
6
  "textarea",
7
7
  {
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./vendor-DQFuDa7q.js"),s=require("next-themes");function i({children:e,...t}){return r.jsxRuntimeExports.jsx(s.ThemeProvider,{attribute:"class",defaultTheme:"system",enableSystem:!0,...t,children:e})}exports.ThemeProvider=i;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./vendor-B_07FHqh.js"),s=require("next-themes");function i({children:e,...t}){return r.jsxRuntimeExports.jsx(s.ThemeProvider,{attribute:"class",defaultTheme:"system",enableSystem:!0,...t,children:e})}exports.ThemeProvider=i;
2
2
  //# sourceMappingURL=theme-provider.cjs.map
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { j as t } from "./vendor-DxBXMLEx.mjs";
2
+ import { j as t } from "./vendor-BQwS7aJt.mjs";
3
3
  import { ThemeProvider as m } from "next-themes";
4
4
  function i({ children: e, ...r }) {
5
5
  return /* @__PURE__ */ t.jsx(m, { attribute: "class", defaultTheme: "system", enableSystem: !0, ...r, children: e });
@@ -1,8 +1,8 @@
1
- import { j as r, bW as m, bX as y, bY as p } from "./vendor-DxBXMLEx.mjs";
1
+ import { j as r, bZ as m, b_ as y, b$ as p } from "./vendor-BQwS7aJt.mjs";
2
2
  import { Button as x } from "./button.mjs";
3
3
  import { DropdownMenu as b, DropdownMenuTrigger as f, DropdownMenuContent as T, DropdownMenuItem as c } from "./dropdown-menu.mjs";
4
4
  import { useTheme as F } from "next-themes";
5
- import { c as s } from "./utils-CgPEtJt0.mjs";
5
+ import { c as s } from "./utils-Bgpn0CK0.mjs";
6
6
  const e = {
7
7
  brand: {
8
8
  blue: "hsl(225 73% 57%)",
@@ -107,7 +107,7 @@ function D() {
107
107
  tokens: a
108
108
  };
109
109
  }
110
- function W({ variant: t = "binary", onThemeChange: n, customTheme: a, className: i }) {
110
+ function $({ variant: t = "binary", onThemeChange: n, customTheme: a, className: i }) {
111
111
  const { theme: k, setTheme: w, resolvedTheme: v } = D(), u = a ?? k, h = (a || v) === "dark", o = u === "system", l = (d) => {
112
112
  n ? n(d) : w(d);
113
113
  }, g = () => /* @__PURE__ */ r.jsxs(r.Fragment, { children: [
@@ -169,9 +169,9 @@ function W({ variant: t = "binary", onThemeChange: n, customTheme: a, className:
169
169
  );
170
170
  }
171
171
  export {
172
- W as T,
172
+ $ as T,
173
173
  e as p,
174
174
  j as t,
175
175
  D as u
176
176
  };
177
- //# sourceMappingURL=theme-toggle-BUU8zhDg.mjs.map
177
+ //# sourceMappingURL=theme-toggle-BNtYv2Jv.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-toggle-BUU8zhDg.mjs","sources":["../packages/design-tokens/src/palette.ts","../packages/design-tokens/src/theme.ts","../packages/ui-web/src/hooks/use-theme.ts","../packages/ui-web/src/theme-toggle.tsx"],"sourcesContent":["// Primitive color palette for the GV Tech design system.\n// These are the raw color values. They should NOT be used directly in components —\n// use semantic tokens from `theme.ts` instead.\n\nexport const palette = {\n brand: {\n blue: 'hsl(225 73% 57%)', // Royal Blue (Intellect)\n green: 'hsl(151 66% 27%)', // #177245 (Stability)\n floralWhite: 'hsl(40 100% 97%)', // Light Neutral / Floral White\n },\n neutral: {\n white: 'hsl(0 0% 100%)',\n black: 'hsl(0 0% 0%)', // Pure Black\n gray50: 'hsl(0 0% 96%)', // White Smoke\n gray100: 'hsl(0 0% 92%)', // Gainsboro\n gray200: 'hsl(0 0% 89%)', // Light Gray\n gray300: 'hsl(0 0% 88%)', // French Gray\n gray400: 'hsl(0 0% 70%)', // Silver\n gray500: 'hsl(215 16% 47%)', // Steel Blue\n gray600: 'hsl(222 47% 11%)', // Oxford Blue\n gray700: 'hsl(0 0% 18%)', // Raisin Black\n gray800: 'hsl(0 0% 15%)', // Jet\n gray900: 'hsl(0 0% 14%)', // Eerie Black\n gray950: 'hsl(0 0% 11%)', // Night (alt)\n gray975: 'hsl(0 0% 9%)', // Night\n gray990: 'hsl(0 0% 6%)', // Black (almost)\n },\n semantic: {\n success: 'hsl(93 28% 54%)', // Asparagus / Pistachio\n successDark: 'hsl(96 44% 61%)',\n destructive: 'hsl(0 84.2% 60.2%)', // Vivid Red\n destructiveDark: 'hsl(0 62.8% 30.6%)', // Blood Red\n },\n} as const;\n\nexport type PaletteTokens = typeof palette;\n","// Semantic theme tokens for the GV Tech design system.\n// These map primitive palette values to semantic roles (background, foreground, etc.)\n// for both light and dark modes. Components should reference these tokens, not palette directly.\n\nimport { palette } from './palette';\n\nexport const theme = {\n light: {\n background: palette.neutral.gray50,\n foreground: palette.neutral.gray600,\n card: palette.neutral.white,\n cardForeground: palette.neutral.gray600,\n popover: palette.neutral.white,\n popoverForeground: palette.neutral.gray600,\n primary: palette.brand.blue,\n primaryForeground: palette.neutral.white,\n secondary: palette.semantic.success,\n secondaryForeground: palette.neutral.white,\n muted: palette.neutral.gray100,\n mutedForeground: palette.neutral.gray500,\n accent: palette.neutral.gray300,\n accentForeground: palette.neutral.gray600,\n destructive: palette.semantic.destructive,\n destructiveForeground: palette.neutral.white,\n border: palette.neutral.gray200,\n input: palette.neutral.gray200,\n ring: palette.neutral.gray600,\n radius: '0.5rem',\n },\n dark: {\n background: palette.neutral.gray975,\n foreground: palette.neutral.white,\n card: palette.neutral.gray900,\n cardForeground: palette.neutral.white,\n popover: palette.neutral.gray950,\n popoverForeground: palette.neutral.white,\n primary: 'hsl(227 96% 71%)', // Keeping as specific HSL to match original\n primaryForeground: palette.neutral.gray975,\n secondary: palette.semantic.successDark,\n secondaryForeground: palette.neutral.gray975,\n muted: palette.neutral.gray990,\n mutedForeground: palette.neutral.gray400,\n accent: palette.neutral.gray800,\n accentForeground: palette.neutral.white,\n destructive: palette.semantic.destructiveDark,\n destructiveForeground: palette.neutral.white,\n border: palette.neutral.gray700,\n input: palette.neutral.gray700,\n ring: 'hsl(0 0% 90%)', // Platinum\n radius: '0.5rem',\n },\n} as const;\n\nexport type ThemeTokens = typeof theme.light;\n","import { theme } from '@gv-tech/design-tokens';\nimport { useTheme as useNextTheme } from 'next-themes';\n\nexport function useTheme() {\n const context = useNextTheme();\n const { resolvedTheme } = context;\n\n // Default to light theme tokens if resolvedTheme is undefined or invalid\n const activeTokens = resolvedTheme === 'dark' ? theme.dark : theme.light;\n\n return {\n ...context,\n tokens: activeTokens,\n };\n}\n","'use client';\n\nimport { ThemeToggleBaseProps } from '@gv-tech/ui-core';\nimport { Moon, Sun, SunMoon } from 'lucide-react';\nimport { Button } from './button';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from './dropdown-menu';\nimport { useTheme } from './hooks/use-theme';\nimport { cn } from './lib/utils';\n\nexport type ThemeToggleProps = ThemeToggleBaseProps;\n\nexport function ThemeToggle({ variant = 'binary', onThemeChange, customTheme, className }: ThemeToggleProps) {\n const { theme: nextTheme, setTheme: setNextTheme, resolvedTheme } = useTheme();\n\n // Use customTheme if provided, otherwise fallback to next-themes\n const currentTheme = customTheme ?? nextTheme;\n\n // Determine the effective theme for icon rendering\n const effectiveTheme = customTheme ? customTheme : resolvedTheme;\n const isDark = effectiveTheme === 'dark';\n const isSystem = currentTheme === 'system';\n\n const handleThemeChange = (newTheme: string) => {\n if (onThemeChange) {\n onThemeChange(newTheme);\n } else {\n setNextTheme(newTheme);\n }\n };\n\n const IconToggle = () => (\n <>\n <Sun\n className={cn(\n 'h-[1.2rem] w-[1.2rem] transition-all',\n !isSystem && !isDark ? 'scale-100 rotate-0' : 'scale-0 -rotate-90',\n )}\n />\n <Moon\n className={cn(\n 'absolute h-[1.2rem] w-[1.2rem] transition-all',\n !isSystem && isDark ? 'scale-100 rotate-0' : 'scale-0 rotate-90',\n )}\n />\n <SunMoon\n className={cn(\n 'absolute h-[1.2rem] w-[1.2rem] transition-all',\n isSystem ? 'scale-100 rotate-0' : 'scale-0 rotate-90',\n )}\n />\n <span className=\"sr-only\">Toggle theme</span>\n </>\n );\n\n if (variant === 'ternary') {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className={cn('relative h-9 w-9', className)}>\n <IconToggle />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => handleThemeChange('light')}>\n <Sun className=\"mr-2 h-4 w-4\" />\n <span>Light</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => handleThemeChange('dark')}>\n <Moon className=\"mr-2 h-4 w-4\" />\n <span>Dark</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => handleThemeChange('system')}>\n <SunMoon className=\"mr-2 h-4 w-4\" />\n <span>System</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n }\n\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn('relative h-9 w-9', className)}\n onClick={() => handleThemeChange(currentTheme === 'dark' ? 'light' : 'dark')}\n aria-label=\"Toggle theme\"\n >\n <IconToggle />\n </Button>\n );\n}\n"],"names":["palette","theme","useTheme","context","useNextTheme","resolvedTheme","activeTokens","ThemeToggle","variant","onThemeChange","customTheme","className","nextTheme","setNextTheme","currentTheme","isDark","isSystem","handleThemeChange","newTheme","IconToggle","jsxs","Fragment","jsx","Sun","cn","Moon","SunMoon","DropdownMenu","DropdownMenuTrigger","Button","DropdownMenuContent","DropdownMenuItem"],"mappings":"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"}
1
+ {"version":3,"file":"theme-toggle-BNtYv2Jv.mjs","sources":["../packages/design-tokens/src/palette.ts","../packages/design-tokens/src/theme.ts","../packages/ui-web/src/hooks/use-theme.ts","../packages/ui-web/src/theme-toggle.tsx"],"sourcesContent":["// Primitive color palette for the GV Tech design system.\n// These are the raw color values. They should NOT be used directly in components —\n// use semantic tokens from `theme.ts` instead.\n\nexport const palette = {\n brand: {\n blue: 'hsl(225 73% 57%)', // Royal Blue (Intellect)\n green: 'hsl(151 66% 27%)', // #177245 (Stability)\n floralWhite: 'hsl(40 100% 97%)', // Light Neutral / Floral White\n },\n neutral: {\n white: 'hsl(0 0% 100%)',\n black: 'hsl(0 0% 0%)', // Pure Black\n gray50: 'hsl(0 0% 96%)', // White Smoke\n gray100: 'hsl(0 0% 92%)', // Gainsboro\n gray200: 'hsl(0 0% 89%)', // Light Gray\n gray300: 'hsl(0 0% 88%)', // French Gray\n gray400: 'hsl(0 0% 70%)', // Silver\n gray500: 'hsl(215 16% 47%)', // Steel Blue\n gray600: 'hsl(222 47% 11%)', // Oxford Blue\n gray700: 'hsl(0 0% 18%)', // Raisin Black\n gray800: 'hsl(0 0% 15%)', // Jet\n gray900: 'hsl(0 0% 14%)', // Eerie Black\n gray950: 'hsl(0 0% 11%)', // Night (alt)\n gray975: 'hsl(0 0% 9%)', // Night\n gray990: 'hsl(0 0% 6%)', // Black (almost)\n },\n semantic: {\n success: 'hsl(93 28% 54%)', // Asparagus / Pistachio\n successDark: 'hsl(96 44% 61%)',\n destructive: 'hsl(0 84.2% 60.2%)', // Vivid Red\n destructiveDark: 'hsl(0 62.8% 30.6%)', // Blood Red\n },\n} as const;\n\nexport type PaletteTokens = typeof palette;\n","// Semantic theme tokens for the GV Tech design system.\n// These map primitive palette values to semantic roles (background, foreground, etc.)\n// for both light and dark modes. Components should reference these tokens, not palette directly.\n\nimport { palette } from './palette';\n\nexport const theme = {\n light: {\n background: palette.neutral.gray50,\n foreground: palette.neutral.gray600,\n card: palette.neutral.white,\n cardForeground: palette.neutral.gray600,\n popover: palette.neutral.white,\n popoverForeground: palette.neutral.gray600,\n primary: palette.brand.blue,\n primaryForeground: palette.neutral.white,\n secondary: palette.semantic.success,\n secondaryForeground: palette.neutral.white,\n muted: palette.neutral.gray100,\n mutedForeground: palette.neutral.gray500,\n accent: palette.neutral.gray300,\n accentForeground: palette.neutral.gray600,\n destructive: palette.semantic.destructive,\n destructiveForeground: palette.neutral.white,\n border: palette.neutral.gray200,\n input: palette.neutral.gray200,\n ring: palette.neutral.gray600,\n radius: '0.5rem',\n },\n dark: {\n background: palette.neutral.gray975,\n foreground: palette.neutral.white,\n card: palette.neutral.gray900,\n cardForeground: palette.neutral.white,\n popover: palette.neutral.gray950,\n popoverForeground: palette.neutral.white,\n primary: 'hsl(227 96% 71%)', // Keeping as specific HSL to match original\n primaryForeground: palette.neutral.gray975,\n secondary: palette.semantic.successDark,\n secondaryForeground: palette.neutral.gray975,\n muted: palette.neutral.gray990,\n mutedForeground: palette.neutral.gray400,\n accent: palette.neutral.gray800,\n accentForeground: palette.neutral.white,\n destructive: palette.semantic.destructiveDark,\n destructiveForeground: palette.neutral.white,\n border: palette.neutral.gray700,\n input: palette.neutral.gray700,\n ring: 'hsl(0 0% 90%)', // Platinum\n radius: '0.5rem',\n },\n} as const;\n\nexport type ThemeTokens = typeof theme.light;\n","import { theme } from '@gv-tech/design-tokens';\nimport { useTheme as useNextTheme } from 'next-themes';\n\nexport function useTheme() {\n const context = useNextTheme();\n const { resolvedTheme } = context;\n\n // Default to light theme tokens if resolvedTheme is undefined or invalid\n const activeTokens = resolvedTheme === 'dark' ? theme.dark : theme.light;\n\n return {\n ...context,\n tokens: activeTokens,\n };\n}\n","'use client';\n\nimport { ThemeToggleBaseProps } from '@gv-tech/ui-core';\nimport { Moon, Sun, SunMoon } from 'lucide-react';\nimport { Button } from './button';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from './dropdown-menu';\nimport { useTheme } from './hooks/use-theme';\nimport { cn } from './lib/utils';\n\nexport type ThemeToggleProps = ThemeToggleBaseProps;\n\nexport function ThemeToggle({ variant = 'binary', onThemeChange, customTheme, className }: ThemeToggleProps) {\n const { theme: nextTheme, setTheme: setNextTheme, resolvedTheme } = useTheme();\n\n // Use customTheme if provided, otherwise fallback to next-themes\n const currentTheme = customTheme ?? nextTheme;\n\n // Determine the effective theme for icon rendering\n const effectiveTheme = customTheme ? customTheme : resolvedTheme;\n const isDark = effectiveTheme === 'dark';\n const isSystem = currentTheme === 'system';\n\n const handleThemeChange = (newTheme: string) => {\n if (onThemeChange) {\n onThemeChange(newTheme);\n } else {\n setNextTheme(newTheme);\n }\n };\n\n const IconToggle = () => (\n <>\n <Sun\n className={cn(\n 'h-[1.2rem] w-[1.2rem] transition-all',\n !isSystem && !isDark ? 'scale-100 rotate-0' : 'scale-0 -rotate-90',\n )}\n />\n <Moon\n className={cn(\n 'absolute h-[1.2rem] w-[1.2rem] transition-all',\n !isSystem && isDark ? 'scale-100 rotate-0' : 'scale-0 rotate-90',\n )}\n />\n <SunMoon\n className={cn(\n 'absolute h-[1.2rem] w-[1.2rem] transition-all',\n isSystem ? 'scale-100 rotate-0' : 'scale-0 rotate-90',\n )}\n />\n <span className=\"sr-only\">Toggle theme</span>\n </>\n );\n\n if (variant === 'ternary') {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className={cn('relative h-9 w-9', className)}>\n <IconToggle />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => handleThemeChange('light')}>\n <Sun className=\"mr-2 h-4 w-4\" />\n <span>Light</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => handleThemeChange('dark')}>\n <Moon className=\"mr-2 h-4 w-4\" />\n <span>Dark</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => handleThemeChange('system')}>\n <SunMoon className=\"mr-2 h-4 w-4\" />\n <span>System</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n }\n\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn('relative h-9 w-9', className)}\n onClick={() => handleThemeChange(currentTheme === 'dark' ? 'light' : 'dark')}\n aria-label=\"Toggle theme\"\n >\n <IconToggle />\n </Button>\n );\n}\n"],"names":["palette","theme","useTheme","context","useNextTheme","resolvedTheme","activeTokens","ThemeToggle","variant","onThemeChange","customTheme","className","nextTheme","setNextTheme","currentTheme","isDark","isSystem","handleThemeChange","newTheme","IconToggle","jsxs","Fragment","jsx","Sun","cn","Moon","SunMoon","DropdownMenu","DropdownMenuTrigger","Button","DropdownMenuContent","DropdownMenuItem"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const r=require("./vendor-DQFuDa7q.js"),x=require("./button.cjs"),t=require("./dropdown-menu.cjs"),k=require("next-themes"),n=require("./utils--qajXu5A.js"),e={brand:{blue:"hsl(225 73% 57%)",green:"hsl(151 66% 27%)",floralWhite:"hsl(40 100% 97%)"},neutral:{white:"hsl(0 0% 100%)",black:"hsl(0 0% 0%)",gray50:"hsl(0 0% 96%)",gray100:"hsl(0 0% 92%)",gray200:"hsl(0 0% 89%)",gray300:"hsl(0 0% 88%)",gray400:"hsl(0 0% 70%)",gray500:"hsl(215 16% 47%)",gray600:"hsl(222 47% 11%)",gray700:"hsl(0 0% 18%)",gray800:"hsl(0 0% 15%)",gray900:"hsl(0 0% 14%)",gray950:"hsl(0 0% 11%)",gray975:"hsl(0 0% 9%)",gray990:"hsl(0 0% 6%)"},semantic:{success:"hsl(93 28% 54%)",successDark:"hsl(96 44% 61%)",destructive:"hsl(0 84.2% 60.2%)",destructiveDark:"hsl(0 62.8% 30.6%)"}},i={light:{background:e.neutral.gray50,foreground:e.neutral.gray600,card:e.neutral.white,cardForeground:e.neutral.gray600,popover:e.neutral.white,popoverForeground:e.neutral.gray600,primary:e.brand.blue,primaryForeground:e.neutral.white,secondary:e.semantic.success,secondaryForeground:e.neutral.white,muted:e.neutral.gray100,mutedForeground:e.neutral.gray500,accent:e.neutral.gray300,accentForeground:e.neutral.gray600,destructive:e.semantic.destructive,destructiveForeground:e.neutral.white,border:e.neutral.gray200,input:e.neutral.gray200,ring:e.neutral.gray600,radius:"0.5rem"},dark:{background:e.neutral.gray975,foreground:e.neutral.white,card:e.neutral.gray900,cardForeground:e.neutral.white,popover:e.neutral.gray950,popoverForeground:e.neutral.white,primary:"hsl(227 96% 71%)",primaryForeground:e.neutral.gray975,secondary:e.semantic.successDark,secondaryForeground:e.neutral.gray975,muted:e.neutral.gray990,mutedForeground:e.neutral.gray400,accent:e.neutral.gray800,accentForeground:e.neutral.white,destructive:e.semantic.destructiveDark,destructiveForeground:e.neutral.white,border:e.neutral.gray700,input:e.neutral.gray700,ring:"hsl(0 0% 90%)",radius:"0.5rem"}};function p(){const a=k.useTheme(),{resolvedTheme:o}=a,s=o==="dark"?i.dark:i.light;return{...a,tokens:s}}function v({variant:a="binary",onThemeChange:o,customTheme:s,className:c}){const{theme:y,setTheme:j,resolvedTheme:w}=p(),h=s??y,d=(s||w)==="dark",l=h==="system",u=m=>{o?o(m):j(m)},g=()=>r.jsxRuntimeExports.jsxs(r.jsxRuntimeExports.Fragment,{children:[r.jsxRuntimeExports.jsx(r.Sun,{className:n.cn("h-[1.2rem] w-[1.2rem] transition-all",!l&&!d?"scale-100 rotate-0":"scale-0 -rotate-90")}),r.jsxRuntimeExports.jsx(r.Moon,{className:n.cn("absolute h-[1.2rem] w-[1.2rem] transition-all",!l&&d?"scale-100 rotate-0":"scale-0 rotate-90")}),r.jsxRuntimeExports.jsx(r.SunMoon,{className:n.cn("absolute h-[1.2rem] w-[1.2rem] transition-all",l?"scale-100 rotate-0":"scale-0 rotate-90")}),r.jsxRuntimeExports.jsx("span",{className:"sr-only",children:"Toggle theme"})]});return a==="ternary"?r.jsxRuntimeExports.jsxs(t.DropdownMenu,{children:[r.jsxRuntimeExports.jsx(t.DropdownMenuTrigger,{asChild:!0,children:r.jsxRuntimeExports.jsx(x.Button,{variant:"ghost",size:"icon",className:n.cn("relative h-9 w-9",c),children:r.jsxRuntimeExports.jsx(g,{})})}),r.jsxRuntimeExports.jsxs(t.DropdownMenuContent,{align:"end",children:[r.jsxRuntimeExports.jsxs(t.DropdownMenuItem,{onClick:()=>u("light"),children:[r.jsxRuntimeExports.jsx(r.Sun,{className:"mr-2 h-4 w-4"}),r.jsxRuntimeExports.jsx("span",{children:"Light"})]}),r.jsxRuntimeExports.jsxs(t.DropdownMenuItem,{onClick:()=>u("dark"),children:[r.jsxRuntimeExports.jsx(r.Moon,{className:"mr-2 h-4 w-4"}),r.jsxRuntimeExports.jsx("span",{children:"Dark"})]}),r.jsxRuntimeExports.jsxs(t.DropdownMenuItem,{onClick:()=>u("system"),children:[r.jsxRuntimeExports.jsx(r.SunMoon,{className:"mr-2 h-4 w-4"}),r.jsxRuntimeExports.jsx("span",{children:"System"})]})]})]}):r.jsxRuntimeExports.jsx(x.Button,{variant:"ghost",size:"icon",className:n.cn("relative h-9 w-9",c),onClick:()=>u(h==="dark"?"light":"dark"),"aria-label":"Toggle theme",children:r.jsxRuntimeExports.jsx(g,{})})}exports.ThemeToggle=v;exports.palette=e;exports.theme=i;exports.useTheme=p;
2
- //# sourceMappingURL=theme-toggle-B3z50t2s.js.map
1
+ "use strict";const r=require("./vendor-B_07FHqh.js"),x=require("./button.cjs"),t=require("./dropdown-menu.cjs"),k=require("next-themes"),n=require("./utils-CBWPs0D7.js"),e={brand:{blue:"hsl(225 73% 57%)",green:"hsl(151 66% 27%)",floralWhite:"hsl(40 100% 97%)"},neutral:{white:"hsl(0 0% 100%)",black:"hsl(0 0% 0%)",gray50:"hsl(0 0% 96%)",gray100:"hsl(0 0% 92%)",gray200:"hsl(0 0% 89%)",gray300:"hsl(0 0% 88%)",gray400:"hsl(0 0% 70%)",gray500:"hsl(215 16% 47%)",gray600:"hsl(222 47% 11%)",gray700:"hsl(0 0% 18%)",gray800:"hsl(0 0% 15%)",gray900:"hsl(0 0% 14%)",gray950:"hsl(0 0% 11%)",gray975:"hsl(0 0% 9%)",gray990:"hsl(0 0% 6%)"},semantic:{success:"hsl(93 28% 54%)",successDark:"hsl(96 44% 61%)",destructive:"hsl(0 84.2% 60.2%)",destructiveDark:"hsl(0 62.8% 30.6%)"}},i={light:{background:e.neutral.gray50,foreground:e.neutral.gray600,card:e.neutral.white,cardForeground:e.neutral.gray600,popover:e.neutral.white,popoverForeground:e.neutral.gray600,primary:e.brand.blue,primaryForeground:e.neutral.white,secondary:e.semantic.success,secondaryForeground:e.neutral.white,muted:e.neutral.gray100,mutedForeground:e.neutral.gray500,accent:e.neutral.gray300,accentForeground:e.neutral.gray600,destructive:e.semantic.destructive,destructiveForeground:e.neutral.white,border:e.neutral.gray200,input:e.neutral.gray200,ring:e.neutral.gray600,radius:"0.5rem"},dark:{background:e.neutral.gray975,foreground:e.neutral.white,card:e.neutral.gray900,cardForeground:e.neutral.white,popover:e.neutral.gray950,popoverForeground:e.neutral.white,primary:"hsl(227 96% 71%)",primaryForeground:e.neutral.gray975,secondary:e.semantic.successDark,secondaryForeground:e.neutral.gray975,muted:e.neutral.gray990,mutedForeground:e.neutral.gray400,accent:e.neutral.gray800,accentForeground:e.neutral.white,destructive:e.semantic.destructiveDark,destructiveForeground:e.neutral.white,border:e.neutral.gray700,input:e.neutral.gray700,ring:"hsl(0 0% 90%)",radius:"0.5rem"}};function p(){const a=k.useTheme(),{resolvedTheme:o}=a,s=o==="dark"?i.dark:i.light;return{...a,tokens:s}}function v({variant:a="binary",onThemeChange:o,customTheme:s,className:c}){const{theme:y,setTheme:j,resolvedTheme:w}=p(),h=s??y,d=(s||w)==="dark",l=h==="system",u=m=>{o?o(m):j(m)},g=()=>r.jsxRuntimeExports.jsxs(r.jsxRuntimeExports.Fragment,{children:[r.jsxRuntimeExports.jsx(r.Sun,{className:n.cn("h-[1.2rem] w-[1.2rem] transition-all",!l&&!d?"scale-100 rotate-0":"scale-0 -rotate-90")}),r.jsxRuntimeExports.jsx(r.Moon,{className:n.cn("absolute h-[1.2rem] w-[1.2rem] transition-all",!l&&d?"scale-100 rotate-0":"scale-0 rotate-90")}),r.jsxRuntimeExports.jsx(r.SunMoon,{className:n.cn("absolute h-[1.2rem] w-[1.2rem] transition-all",l?"scale-100 rotate-0":"scale-0 rotate-90")}),r.jsxRuntimeExports.jsx("span",{className:"sr-only",children:"Toggle theme"})]});return a==="ternary"?r.jsxRuntimeExports.jsxs(t.DropdownMenu,{children:[r.jsxRuntimeExports.jsx(t.DropdownMenuTrigger,{asChild:!0,children:r.jsxRuntimeExports.jsx(x.Button,{variant:"ghost",size:"icon",className:n.cn("relative h-9 w-9",c),children:r.jsxRuntimeExports.jsx(g,{})})}),r.jsxRuntimeExports.jsxs(t.DropdownMenuContent,{align:"end",children:[r.jsxRuntimeExports.jsxs(t.DropdownMenuItem,{onClick:()=>u("light"),children:[r.jsxRuntimeExports.jsx(r.Sun,{className:"mr-2 h-4 w-4"}),r.jsxRuntimeExports.jsx("span",{children:"Light"})]}),r.jsxRuntimeExports.jsxs(t.DropdownMenuItem,{onClick:()=>u("dark"),children:[r.jsxRuntimeExports.jsx(r.Moon,{className:"mr-2 h-4 w-4"}),r.jsxRuntimeExports.jsx("span",{children:"Dark"})]}),r.jsxRuntimeExports.jsxs(t.DropdownMenuItem,{onClick:()=>u("system"),children:[r.jsxRuntimeExports.jsx(r.SunMoon,{className:"mr-2 h-4 w-4"}),r.jsxRuntimeExports.jsx("span",{children:"System"})]})]})]}):r.jsxRuntimeExports.jsx(x.Button,{variant:"ghost",size:"icon",className:n.cn("relative h-9 w-9",c),onClick:()=>u(h==="dark"?"light":"dark"),"aria-label":"Toggle theme",children:r.jsxRuntimeExports.jsx(g,{})})}exports.ThemeToggle=v;exports.palette=e;exports.theme=i;exports.useTheme=p;
2
+ //# sourceMappingURL=theme-toggle-DK_OhDRf.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-toggle-B3z50t2s.js","sources":["../packages/design-tokens/src/palette.ts","../packages/design-tokens/src/theme.ts","../packages/ui-web/src/hooks/use-theme.ts","../packages/ui-web/src/theme-toggle.tsx"],"sourcesContent":["// Primitive color palette for the GV Tech design system.\n// These are the raw color values. They should NOT be used directly in components —\n// use semantic tokens from `theme.ts` instead.\n\nexport const palette = {\n brand: {\n blue: 'hsl(225 73% 57%)', // Royal Blue (Intellect)\n green: 'hsl(151 66% 27%)', // #177245 (Stability)\n floralWhite: 'hsl(40 100% 97%)', // Light Neutral / Floral White\n },\n neutral: {\n white: 'hsl(0 0% 100%)',\n black: 'hsl(0 0% 0%)', // Pure Black\n gray50: 'hsl(0 0% 96%)', // White Smoke\n gray100: 'hsl(0 0% 92%)', // Gainsboro\n gray200: 'hsl(0 0% 89%)', // Light Gray\n gray300: 'hsl(0 0% 88%)', // French Gray\n gray400: 'hsl(0 0% 70%)', // Silver\n gray500: 'hsl(215 16% 47%)', // Steel Blue\n gray600: 'hsl(222 47% 11%)', // Oxford Blue\n gray700: 'hsl(0 0% 18%)', // Raisin Black\n gray800: 'hsl(0 0% 15%)', // Jet\n gray900: 'hsl(0 0% 14%)', // Eerie Black\n gray950: 'hsl(0 0% 11%)', // Night (alt)\n gray975: 'hsl(0 0% 9%)', // Night\n gray990: 'hsl(0 0% 6%)', // Black (almost)\n },\n semantic: {\n success: 'hsl(93 28% 54%)', // Asparagus / Pistachio\n successDark: 'hsl(96 44% 61%)',\n destructive: 'hsl(0 84.2% 60.2%)', // Vivid Red\n destructiveDark: 'hsl(0 62.8% 30.6%)', // Blood Red\n },\n} as const;\n\nexport type PaletteTokens = typeof palette;\n","// Semantic theme tokens for the GV Tech design system.\n// These map primitive palette values to semantic roles (background, foreground, etc.)\n// for both light and dark modes. Components should reference these tokens, not palette directly.\n\nimport { palette } from './palette';\n\nexport const theme = {\n light: {\n background: palette.neutral.gray50,\n foreground: palette.neutral.gray600,\n card: palette.neutral.white,\n cardForeground: palette.neutral.gray600,\n popover: palette.neutral.white,\n popoverForeground: palette.neutral.gray600,\n primary: palette.brand.blue,\n primaryForeground: palette.neutral.white,\n secondary: palette.semantic.success,\n secondaryForeground: palette.neutral.white,\n muted: palette.neutral.gray100,\n mutedForeground: palette.neutral.gray500,\n accent: palette.neutral.gray300,\n accentForeground: palette.neutral.gray600,\n destructive: palette.semantic.destructive,\n destructiveForeground: palette.neutral.white,\n border: palette.neutral.gray200,\n input: palette.neutral.gray200,\n ring: palette.neutral.gray600,\n radius: '0.5rem',\n },\n dark: {\n background: palette.neutral.gray975,\n foreground: palette.neutral.white,\n card: palette.neutral.gray900,\n cardForeground: palette.neutral.white,\n popover: palette.neutral.gray950,\n popoverForeground: palette.neutral.white,\n primary: 'hsl(227 96% 71%)', // Keeping as specific HSL to match original\n primaryForeground: palette.neutral.gray975,\n secondary: palette.semantic.successDark,\n secondaryForeground: palette.neutral.gray975,\n muted: palette.neutral.gray990,\n mutedForeground: palette.neutral.gray400,\n accent: palette.neutral.gray800,\n accentForeground: palette.neutral.white,\n destructive: palette.semantic.destructiveDark,\n destructiveForeground: palette.neutral.white,\n border: palette.neutral.gray700,\n input: palette.neutral.gray700,\n ring: 'hsl(0 0% 90%)', // Platinum\n radius: '0.5rem',\n },\n} as const;\n\nexport type ThemeTokens = typeof theme.light;\n","import { theme } from '@gv-tech/design-tokens';\nimport { useTheme as useNextTheme } from 'next-themes';\n\nexport function useTheme() {\n const context = useNextTheme();\n const { resolvedTheme } = context;\n\n // Default to light theme tokens if resolvedTheme is undefined or invalid\n const activeTokens = resolvedTheme === 'dark' ? theme.dark : theme.light;\n\n return {\n ...context,\n tokens: activeTokens,\n };\n}\n","'use client';\n\nimport { ThemeToggleBaseProps } from '@gv-tech/ui-core';\nimport { Moon, Sun, SunMoon } from 'lucide-react';\nimport { Button } from './button';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from './dropdown-menu';\nimport { useTheme } from './hooks/use-theme';\nimport { cn } from './lib/utils';\n\nexport type ThemeToggleProps = ThemeToggleBaseProps;\n\nexport function ThemeToggle({ variant = 'binary', onThemeChange, customTheme, className }: ThemeToggleProps) {\n const { theme: nextTheme, setTheme: setNextTheme, resolvedTheme } = useTheme();\n\n // Use customTheme if provided, otherwise fallback to next-themes\n const currentTheme = customTheme ?? nextTheme;\n\n // Determine the effective theme for icon rendering\n const effectiveTheme = customTheme ? customTheme : resolvedTheme;\n const isDark = effectiveTheme === 'dark';\n const isSystem = currentTheme === 'system';\n\n const handleThemeChange = (newTheme: string) => {\n if (onThemeChange) {\n onThemeChange(newTheme);\n } else {\n setNextTheme(newTheme);\n }\n };\n\n const IconToggle = () => (\n <>\n <Sun\n className={cn(\n 'h-[1.2rem] w-[1.2rem] transition-all',\n !isSystem && !isDark ? 'scale-100 rotate-0' : 'scale-0 -rotate-90',\n )}\n />\n <Moon\n className={cn(\n 'absolute h-[1.2rem] w-[1.2rem] transition-all',\n !isSystem && isDark ? 'scale-100 rotate-0' : 'scale-0 rotate-90',\n )}\n />\n <SunMoon\n className={cn(\n 'absolute h-[1.2rem] w-[1.2rem] transition-all',\n isSystem ? 'scale-100 rotate-0' : 'scale-0 rotate-90',\n )}\n />\n <span className=\"sr-only\">Toggle theme</span>\n </>\n );\n\n if (variant === 'ternary') {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className={cn('relative h-9 w-9', className)}>\n <IconToggle />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => handleThemeChange('light')}>\n <Sun className=\"mr-2 h-4 w-4\" />\n <span>Light</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => handleThemeChange('dark')}>\n <Moon className=\"mr-2 h-4 w-4\" />\n <span>Dark</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => handleThemeChange('system')}>\n <SunMoon className=\"mr-2 h-4 w-4\" />\n <span>System</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n }\n\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn('relative h-9 w-9', className)}\n onClick={() => handleThemeChange(currentTheme === 'dark' ? 'light' : 'dark')}\n aria-label=\"Toggle theme\"\n >\n <IconToggle />\n </Button>\n );\n}\n"],"names":["palette","theme","useTheme","context","useNextTheme","resolvedTheme","activeTokens","ThemeToggle","variant","onThemeChange","customTheme","className","nextTheme","setNextTheme","currentTheme","isDark","isSystem","handleThemeChange","newTheme","IconToggle","jsxs","Fragment","jsx","Sun","cn","Moon","SunMoon","DropdownMenu","DropdownMenuTrigger","Button","DropdownMenuContent","DropdownMenuItem"],"mappings":"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"}
1
+ {"version":3,"file":"theme-toggle-DK_OhDRf.js","sources":["../packages/design-tokens/src/palette.ts","../packages/design-tokens/src/theme.ts","../packages/ui-web/src/hooks/use-theme.ts","../packages/ui-web/src/theme-toggle.tsx"],"sourcesContent":["// Primitive color palette for the GV Tech design system.\n// These are the raw color values. They should NOT be used directly in components —\n// use semantic tokens from `theme.ts` instead.\n\nexport const palette = {\n brand: {\n blue: 'hsl(225 73% 57%)', // Royal Blue (Intellect)\n green: 'hsl(151 66% 27%)', // #177245 (Stability)\n floralWhite: 'hsl(40 100% 97%)', // Light Neutral / Floral White\n },\n neutral: {\n white: 'hsl(0 0% 100%)',\n black: 'hsl(0 0% 0%)', // Pure Black\n gray50: 'hsl(0 0% 96%)', // White Smoke\n gray100: 'hsl(0 0% 92%)', // Gainsboro\n gray200: 'hsl(0 0% 89%)', // Light Gray\n gray300: 'hsl(0 0% 88%)', // French Gray\n gray400: 'hsl(0 0% 70%)', // Silver\n gray500: 'hsl(215 16% 47%)', // Steel Blue\n gray600: 'hsl(222 47% 11%)', // Oxford Blue\n gray700: 'hsl(0 0% 18%)', // Raisin Black\n gray800: 'hsl(0 0% 15%)', // Jet\n gray900: 'hsl(0 0% 14%)', // Eerie Black\n gray950: 'hsl(0 0% 11%)', // Night (alt)\n gray975: 'hsl(0 0% 9%)', // Night\n gray990: 'hsl(0 0% 6%)', // Black (almost)\n },\n semantic: {\n success: 'hsl(93 28% 54%)', // Asparagus / Pistachio\n successDark: 'hsl(96 44% 61%)',\n destructive: 'hsl(0 84.2% 60.2%)', // Vivid Red\n destructiveDark: 'hsl(0 62.8% 30.6%)', // Blood Red\n },\n} as const;\n\nexport type PaletteTokens = typeof palette;\n","// Semantic theme tokens for the GV Tech design system.\n// These map primitive palette values to semantic roles (background, foreground, etc.)\n// for both light and dark modes. Components should reference these tokens, not palette directly.\n\nimport { palette } from './palette';\n\nexport const theme = {\n light: {\n background: palette.neutral.gray50,\n foreground: palette.neutral.gray600,\n card: palette.neutral.white,\n cardForeground: palette.neutral.gray600,\n popover: palette.neutral.white,\n popoverForeground: palette.neutral.gray600,\n primary: palette.brand.blue,\n primaryForeground: palette.neutral.white,\n secondary: palette.semantic.success,\n secondaryForeground: palette.neutral.white,\n muted: palette.neutral.gray100,\n mutedForeground: palette.neutral.gray500,\n accent: palette.neutral.gray300,\n accentForeground: palette.neutral.gray600,\n destructive: palette.semantic.destructive,\n destructiveForeground: palette.neutral.white,\n border: palette.neutral.gray200,\n input: palette.neutral.gray200,\n ring: palette.neutral.gray600,\n radius: '0.5rem',\n },\n dark: {\n background: palette.neutral.gray975,\n foreground: palette.neutral.white,\n card: palette.neutral.gray900,\n cardForeground: palette.neutral.white,\n popover: palette.neutral.gray950,\n popoverForeground: palette.neutral.white,\n primary: 'hsl(227 96% 71%)', // Keeping as specific HSL to match original\n primaryForeground: palette.neutral.gray975,\n secondary: palette.semantic.successDark,\n secondaryForeground: palette.neutral.gray975,\n muted: palette.neutral.gray990,\n mutedForeground: palette.neutral.gray400,\n accent: palette.neutral.gray800,\n accentForeground: palette.neutral.white,\n destructive: palette.semantic.destructiveDark,\n destructiveForeground: palette.neutral.white,\n border: palette.neutral.gray700,\n input: palette.neutral.gray700,\n ring: 'hsl(0 0% 90%)', // Platinum\n radius: '0.5rem',\n },\n} as const;\n\nexport type ThemeTokens = typeof theme.light;\n","import { theme } from '@gv-tech/design-tokens';\nimport { useTheme as useNextTheme } from 'next-themes';\n\nexport function useTheme() {\n const context = useNextTheme();\n const { resolvedTheme } = context;\n\n // Default to light theme tokens if resolvedTheme is undefined or invalid\n const activeTokens = resolvedTheme === 'dark' ? theme.dark : theme.light;\n\n return {\n ...context,\n tokens: activeTokens,\n };\n}\n","'use client';\n\nimport { ThemeToggleBaseProps } from '@gv-tech/ui-core';\nimport { Moon, Sun, SunMoon } from 'lucide-react';\nimport { Button } from './button';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from './dropdown-menu';\nimport { useTheme } from './hooks/use-theme';\nimport { cn } from './lib/utils';\n\nexport type ThemeToggleProps = ThemeToggleBaseProps;\n\nexport function ThemeToggle({ variant = 'binary', onThemeChange, customTheme, className }: ThemeToggleProps) {\n const { theme: nextTheme, setTheme: setNextTheme, resolvedTheme } = useTheme();\n\n // Use customTheme if provided, otherwise fallback to next-themes\n const currentTheme = customTheme ?? nextTheme;\n\n // Determine the effective theme for icon rendering\n const effectiveTheme = customTheme ? customTheme : resolvedTheme;\n const isDark = effectiveTheme === 'dark';\n const isSystem = currentTheme === 'system';\n\n const handleThemeChange = (newTheme: string) => {\n if (onThemeChange) {\n onThemeChange(newTheme);\n } else {\n setNextTheme(newTheme);\n }\n };\n\n const IconToggle = () => (\n <>\n <Sun\n className={cn(\n 'h-[1.2rem] w-[1.2rem] transition-all',\n !isSystem && !isDark ? 'scale-100 rotate-0' : 'scale-0 -rotate-90',\n )}\n />\n <Moon\n className={cn(\n 'absolute h-[1.2rem] w-[1.2rem] transition-all',\n !isSystem && isDark ? 'scale-100 rotate-0' : 'scale-0 rotate-90',\n )}\n />\n <SunMoon\n className={cn(\n 'absolute h-[1.2rem] w-[1.2rem] transition-all',\n isSystem ? 'scale-100 rotate-0' : 'scale-0 rotate-90',\n )}\n />\n <span className=\"sr-only\">Toggle theme</span>\n </>\n );\n\n if (variant === 'ternary') {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className={cn('relative h-9 w-9', className)}>\n <IconToggle />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => handleThemeChange('light')}>\n <Sun className=\"mr-2 h-4 w-4\" />\n <span>Light</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => handleThemeChange('dark')}>\n <Moon className=\"mr-2 h-4 w-4\" />\n <span>Dark</span>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => handleThemeChange('system')}>\n <SunMoon className=\"mr-2 h-4 w-4\" />\n <span>System</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n }\n\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn('relative h-9 w-9', className)}\n onClick={() => handleThemeChange(currentTheme === 'dark' ? 'light' : 'dark')}\n aria-label=\"Toggle theme\"\n >\n <IconToggle />\n </Button>\n );\n}\n"],"names":["palette","theme","useTheme","context","useNextTheme","resolvedTheme","activeTokens","ThemeToggle","variant","onThemeChange","customTheme","className","nextTheme","setNextTheme","currentTheme","isDark","isSystem","handleThemeChange","newTheme","IconToggle","jsxs","Fragment","jsx","Sun","cn","Moon","SunMoon","DropdownMenu","DropdownMenuTrigger","Button","DropdownMenuContent","DropdownMenuItem"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("./vendor-DQFuDa7q.js");require("./button.cjs");require("./dropdown-menu.cjs");const e=require("./theme-toggle-B3z50t2s.js");require("./utils--qajXu5A.js");exports.ThemeToggle=e.ThemeToggle;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("./vendor-B_07FHqh.js");require("./button.cjs");require("./dropdown-menu.cjs");const e=require("./theme-toggle-DK_OhDRf.js");require("./utils-CBWPs0D7.js");exports.ThemeToggle=e.ThemeToggle;
2
2
  //# sourceMappingURL=theme-toggle.cjs.map
@@ -1,9 +1,9 @@
1
1
  "use client";
2
- import "./vendor-DxBXMLEx.mjs";
2
+ import "./vendor-BQwS7aJt.mjs";
3
3
  import "./button.mjs";
4
4
  import "./dropdown-menu.mjs";
5
- import { T as p } from "./theme-toggle-BUU8zhDg.mjs";
6
- import "./utils-CgPEtJt0.mjs";
5
+ import { T as p } from "./theme-toggle-BNtYv2Jv.mjs";
6
+ import "./utils-Bgpn0CK0.mjs";
7
7
  export {
8
8
  p as ThemeToggle
9
9
  };
package/dist/toast.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./vendor-DQFuDa7q.js"),m=require("react"),r=require("./utils--qajXu5A.js");function f(t){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const o in t)if(o!=="default"){const i=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(s,o,i.get?i:{enumerable:!0,get:()=>t[o]})}}return s.default=t,Object.freeze(s)}const a=f(m),x=e.Provider$1,n=a.forwardRef(({className:t,...s},o)=>e.jsxRuntimeExports.jsx(e.Viewport$3,{ref:o,className:r.cn("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:flex-col md:max-w-[420px]",t),...s}));n.displayName=e.Viewport$3?.displayName||"ToastViewport";const v=e.cva("group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",{variants:{variant:{default:"border bg-background text-foreground",destructive:"destructive group border-destructive bg-destructive text-destructive-foreground"}},defaultVariants:{variant:"default"}}),d=a.forwardRef(({className:t,variant:s,...o},i)=>e.jsxRuntimeExports.jsx(e.Root2$11,{ref:i,className:r.cn(v({variant:s}),t),...o}));d.displayName=e.Root2$11?.displayName||"Toast";const c=a.forwardRef(({className:t,...s},o)=>e.jsxRuntimeExports.jsx(e.Action$1,{ref:o,className:r.cn("hover:bg-secondary focus:ring-ring group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors focus:ring-1 focus:outline-none disabled:pointer-events-none disabled:opacity-50",t),...s}));c.displayName=e.Action$1?.displayName||"ToastAction";const u=a.forwardRef(({className:t,...s},o)=>e.jsxRuntimeExports.jsx(e.Close$1,{ref:o,className:r.cn("text-foreground/50 hover:text-foreground absolute top-1 right-1 rounded-md p-1 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:ring-1 focus:outline-none group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",t),"toast-close":"",...s,children:e.jsxRuntimeExports.jsx(e.X,{className:"h-4 w-4"})}));u.displayName=e.Close$1?.displayName||"ToastClose";const l=a.forwardRef(({className:t,...s},o)=>e.jsxRuntimeExports.jsx(e.Title$1,{ref:o,className:r.cn("text-sm font-semibold [&+div]:text-xs",t),...s}));l.displayName=e.Title$1?.displayName||"ToastTitle";const p=a.forwardRef(({className:t,...s},o)=>e.jsxRuntimeExports.jsx(e.Description$1,{ref:o,className:r.cn("text-sm opacity-90",t),...s}));p.displayName=e.Description$1?.displayName||"ToastDescription";exports.Toast=d;exports.ToastAction=c;exports.ToastClose=u;exports.ToastDescription=p;exports.ToastProvider=x;exports.ToastTitle=l;exports.ToastViewport=n;
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./vendor-B_07FHqh.js"),m=require("react"),r=require("./utils-CBWPs0D7.js");function f(t){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const o in t)if(o!=="default"){const i=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(s,o,i.get?i:{enumerable:!0,get:()=>t[o]})}}return s.default=t,Object.freeze(s)}const a=f(m),x=e.Provider$1,n=a.forwardRef(({className:t,...s},o)=>e.jsxRuntimeExports.jsx(e.Viewport$3,{ref:o,className:r.cn("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:flex-col md:max-w-[420px]",t),...s}));n.displayName=e.Viewport$3?.displayName||"ToastViewport";const v=e.cva("group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",{variants:{variant:{default:"border bg-background text-foreground",destructive:"destructive group border-destructive bg-destructive text-destructive-foreground"}},defaultVariants:{variant:"default"}}),d=a.forwardRef(({className:t,variant:s,...o},i)=>e.jsxRuntimeExports.jsx(e.Root2$11,{ref:i,className:r.cn(v({variant:s}),t),...o}));d.displayName=e.Root2$11?.displayName||"Toast";const c=a.forwardRef(({className:t,...s},o)=>e.jsxRuntimeExports.jsx(e.Action$1,{ref:o,className:r.cn("hover:bg-secondary focus:ring-ring group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors focus:ring-1 focus:outline-none disabled:pointer-events-none disabled:opacity-50",t),...s}));c.displayName=e.Action$1?.displayName||"ToastAction";const u=a.forwardRef(({className:t,...s},o)=>e.jsxRuntimeExports.jsx(e.Close$1,{ref:o,className:r.cn("text-foreground/50 hover:text-foreground absolute top-1 right-1 rounded-md p-1 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:ring-1 focus:outline-none group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",t),"toast-close":"",...s,children:e.jsxRuntimeExports.jsx(e.X,{className:"h-4 w-4"})}));u.displayName=e.Close$1?.displayName||"ToastClose";const l=a.forwardRef(({className:t,...s},o)=>e.jsxRuntimeExports.jsx(e.Title$1,{ref:o,className:r.cn("text-sm font-semibold [&+div]:text-xs",t),...s}));l.displayName=e.Title$1?.displayName||"ToastTitle";const p=a.forwardRef(({className:t,...s},o)=>e.jsxRuntimeExports.jsx(e.Description$1,{ref:o,className:r.cn("text-sm opacity-90",t),...s}));p.displayName=e.Description$1?.displayName||"ToastDescription";exports.Toast=d;exports.ToastAction=c;exports.ToastClose=u;exports.ToastDescription=p;exports.ToastProvider=x;exports.ToastTitle=l;exports.ToastViewport=n;
2
2
  //# sourceMappingURL=toast.cjs.map