@cupcodev/ui 6.1.1 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,282 +1,157 @@
1
1
  var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
2
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
-
5
- // src/components/cupcode/AccordionCupcode.tsx
6
- import * as React from "react";
7
- import * as AccordionPrimitive from "@radix-ui/react-accordion";
8
- import { ChevronDown } from "lucide-react";
9
-
10
- // src/lib/utils.ts
11
- import { clsx } from "clsx";
12
- import { twMerge } from "tailwind-merge";
13
- function cn(...inputs) {
14
- return twMerge(clsx(inputs));
15
- }
16
-
17
- // src/components/cupcode/AccordionCupcode.tsx
18
- import { jsx, jsxs } from "react/jsx-runtime";
19
- var AccordionCupcode = AccordionPrimitive.Root;
20
- var AccordionItem = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
21
- AccordionPrimitive.Item,
22
- {
23
- ref,
24
- className: cn("glass rounded-xl mb-3 overflow-hidden", className),
25
- ...props
26
- }
27
- ));
28
- AccordionItem.displayName = "AccordionItem";
29
- var AccordionTrigger = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
30
- AccordionPrimitive.Trigger,
31
- {
32
- ref,
33
- className: cn(
34
- "flex flex-1 items-center justify-between p-4 font-semibold text-foreground",
35
- "transition-all hover:bg-cupcode-purple/5",
36
- "[&[data-state=open]>svg]:rotate-180",
37
- className
38
- ),
39
- ...props,
40
- children: [
41
- children,
42
- /* @__PURE__ */ jsx(ChevronDown, { className: "h-5 w-5 shrink-0 text-cupcode-purple transition-transform duration-300" })
43
- ]
44
- }
45
- ) }));
46
- AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
47
- var AccordionContent = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
48
- AccordionPrimitive.Content,
49
- {
50
- ref,
51
- className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
52
- ...props,
53
- children: /* @__PURE__ */ jsx("div", { className: cn("px-4 pb-4 pt-0 text-muted-foreground", className), children })
54
- }
55
- ));
56
- AccordionContent.displayName = AccordionPrimitive.Content.displayName;
57
-
58
- // src/components/cupcode/AvatarCupcode.tsx
59
- import * as React2 from "react";
60
- import * as AvatarPrimitive from "@radix-ui/react-avatar";
61
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
62
- var Avatar = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
63
- AvatarPrimitive.Root,
64
- {
65
- ref,
66
- className: cn(
67
- "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
68
- "ring-2 ring-border ring-offset-2 ring-offset-background",
69
- className
70
- ),
71
- ...props
72
- }
73
- ));
74
- Avatar.displayName = AvatarPrimitive.Root.displayName;
75
- var AvatarImage = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
76
- AvatarPrimitive.Image,
77
- {
78
- ref,
79
- className: cn("aspect-square h-full w-full object-cover", className),
80
- ...props
81
- }
82
- ));
83
- AvatarImage.displayName = AvatarPrimitive.Image.displayName;
84
- var AvatarFallback = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
85
- AvatarPrimitive.Fallback,
86
- {
87
- ref,
88
- className: cn(
89
- "flex h-full w-full items-center justify-center rounded-full",
90
- "bg-gradient-to-br from-cupcode-hover to-cupcode-purple",
91
- "text-white font-semibold",
92
- className
93
- ),
94
- ...props
95
- }
96
- ));
97
- AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
98
- var statusStyles = {
99
- online: "bg-success",
100
- offline: "bg-muted-foreground",
101
- away: "bg-warning",
102
- busy: "bg-destructive"
103
- };
104
- var sizeClasses = {
105
- sm: "h-8 w-8",
106
- md: "h-10 w-10",
107
- lg: "h-14 w-14",
108
- xl: "h-20 w-20"
4
+ var __esm = (fn, res) => function __init() {
5
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
109
6
  };
110
- var statusSizes = {
111
- sm: "h-2 w-2",
112
- md: "h-2.5 w-2.5",
113
- lg: "h-3 w-3",
114
- xl: "h-4 w-4"
115
- };
116
- var AvatarWithStatus = ({
117
- src,
118
- alt,
119
- fallback,
120
- status,
121
- size = "md",
122
- className
123
- }) => {
124
- return /* @__PURE__ */ jsxs2("div", { className: "relative inline-block", children: [
125
- /* @__PURE__ */ jsxs2(Avatar, { className: cn(sizeClasses[size], className), children: [
126
- /* @__PURE__ */ jsx2(AvatarImage, { src, alt }),
127
- /* @__PURE__ */ jsx2(AvatarFallback, { children: fallback })
128
- ] }),
129
- status && /* @__PURE__ */ jsx2(
130
- "span",
131
- {
132
- className: cn(
133
- "absolute bottom-0 right-0 block rounded-full ring-2 ring-background",
134
- statusStyles[status],
135
- statusSizes[size],
136
- status === "online" && "animate-pulse"
137
- )
138
- }
139
- )
140
- ] });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
141
10
  };
11
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
142
12
 
143
13
  // src/components/cupcode/BackgroundRainbow.tsx
14
+ var BackgroundRainbow_exports = {};
15
+ __export(BackgroundRainbow_exports, {
16
+ BackgroundRainbow: () => BackgroundRainbow
17
+ });
144
18
  import { useEffect, useId, useMemo, useRef } from "react";
145
19
  import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
146
- var BackgroundRainbow = () => {
147
- const rootRef = useRef(null);
148
- const interactiveRef = useRef(null);
149
- const currentRef = useRef({ x: 0, y: 0 });
150
- const targetRef = useRef({ x: 0, y: 0 });
151
- const filterId = useId().replace(/:/g, "");
152
- const config = useMemo(() => {
153
- const nav = typeof navigator !== "undefined" ? navigator : null;
154
- const lowMemory = !!nav && typeof nav.deviceMemory === "number" && nav.deviceMemory <= 4;
155
- const lowCpu = !!nav && typeof nav.hardwareConcurrency === "number" && nav.hardwareConcurrency <= 4;
156
- const lowPowerDevice = lowMemory || lowCpu;
157
- return {
158
- blur: lowPowerDevice ? 20 : 30,
159
- interactiveOpacity: lowPowerDevice ? 0.54 : 0.7,
160
- useGoo: !lowPowerDevice,
161
- snapDistance: lowPowerDevice ? 2.5 : 1.5,
162
- easeFactor: lowPowerDevice ? 7.5 : 10,
163
- renderThirdBubble: !lowPowerDevice,
164
- blendMode: lowPowerDevice ? "screen" : "hard-light"
165
- };
166
- }, []);
167
- useEffect(() => {
168
- const interactive = interactiveRef.current;
169
- const root = rootRef.current;
170
- if (!interactive || !root) return;
171
- const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)");
172
- let raf = 0;
173
- let running = false;
174
- const stop = () => {
175
- running = false;
176
- if (raf) {
177
- cancelAnimationFrame(raf);
178
- raf = 0;
179
- }
180
- };
181
- const updatePlayState = () => {
182
- const enabled = !prefersReducedMotion.matches && !document.hidden && !document.documentElement.classList.contains("dark");
183
- root.style.setProperty("--cc-rainbow-play", enabled ? "running" : "paused");
184
- if (!enabled) stop();
185
- return enabled;
186
- };
187
- const applyTransform = () => {
188
- const x = Math.round(currentRef.current.x);
189
- const y = Math.round(currentRef.current.y);
190
- interactive.style.transform = `translate3d(${x}px, ${y}px, 0)`;
191
- };
192
- const animate = () => {
193
- if (!updatePlayState()) return;
194
- currentRef.current.x += (targetRef.current.x - currentRef.current.x) / config.easeFactor;
195
- currentRef.current.y += (targetRef.current.y - currentRef.current.y) / config.easeFactor;
196
- applyTransform();
197
- const dx = Math.abs(targetRef.current.x - currentRef.current.x);
198
- const dy = Math.abs(targetRef.current.y - currentRef.current.y);
199
- if (dx < config.snapDistance && dy < config.snapDistance) {
200
- running = false;
201
- raf = 0;
202
- return;
203
- }
204
- raf = requestAnimationFrame(animate);
205
- };
206
- const start = () => {
207
- if (running) return;
208
- if (!updatePlayState()) return;
209
- running = true;
210
- raf = requestAnimationFrame(animate);
211
- };
212
- const onPointer = (e) => {
213
- if (!updatePlayState()) return;
214
- targetRef.current.x = e.clientX;
215
- targetRef.current.y = e.clientY;
216
- start();
217
- };
218
- const onStateChange = () => {
219
- updatePlayState();
220
- };
221
- const centerX = window.innerWidth / 2;
222
- const centerY = window.innerHeight / 2;
223
- currentRef.current.x = centerX;
224
- currentRef.current.y = centerY;
225
- targetRef.current.x = centerX;
226
- targetRef.current.y = centerY;
227
- applyTransform();
228
- updatePlayState();
229
- window.addEventListener("pointermove", onPointer, { passive: true });
230
- document.addEventListener("visibilitychange", onStateChange);
231
- if (typeof prefersReducedMotion.addEventListener === "function") {
232
- prefersReducedMotion.addEventListener("change", onStateChange);
233
- } else {
234
- prefersReducedMotion.addListener(onStateChange);
235
- }
236
- const observer = new MutationObserver(onStateChange);
237
- observer.observe(document.documentElement, { attributes: true, attributeFilter: ["class"] });
238
- return () => {
239
- window.removeEventListener("pointermove", onPointer);
240
- document.removeEventListener("visibilitychange", onStateChange);
241
- if (typeof prefersReducedMotion.removeEventListener === "function") {
242
- prefersReducedMotion.removeEventListener("change", onStateChange);
243
- } else {
244
- prefersReducedMotion.removeListener(onStateChange);
245
- }
246
- observer.disconnect();
247
- stop();
248
- };
249
- }, [config.easeFactor, config.snapDistance]);
250
- return /* @__PURE__ */ jsxs3("div", { ref: rootRef, className: "fixed inset-0 z-0 overflow-hidden bg-white pointer-events-none dark:hidden", children: [
251
- /* @__PURE__ */ jsx3("svg", { className: "hidden", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": true, focusable: "false", children: /* @__PURE__ */ jsx3("defs", { children: /* @__PURE__ */ jsxs3("filter", { id: filterId, children: [
252
- /* @__PURE__ */ jsx3("feGaussianBlur", { in: "SourceGraphic", stdDeviation: "10", result: "blur" }),
253
- /* @__PURE__ */ jsx3(
254
- "feColorMatrix",
255
- {
256
- in: "blur",
257
- mode: "matrix",
258
- values: "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -8",
259
- result: "goo"
20
+ var BackgroundRainbow;
21
+ var init_BackgroundRainbow = __esm({
22
+ "src/components/cupcode/BackgroundRainbow.tsx"() {
23
+ "use strict";
24
+ BackgroundRainbow = () => {
25
+ const rootRef = useRef(null);
26
+ const interactiveRef = useRef(null);
27
+ const currentRef = useRef({ x: 0, y: 0 });
28
+ const targetRef = useRef({ x: 0, y: 0 });
29
+ const filterId = useId().replace(/:/g, "");
30
+ const config = useMemo(() => {
31
+ const nav = typeof navigator !== "undefined" ? navigator : null;
32
+ const lowMemory = !!nav && typeof nav.deviceMemory === "number" && nav.deviceMemory <= 4;
33
+ const lowCpu = !!nav && typeof nav.hardwareConcurrency === "number" && nav.hardwareConcurrency <= 4;
34
+ const lowPowerDevice = lowMemory || lowCpu;
35
+ return {
36
+ blur: lowPowerDevice ? 20 : 30,
37
+ interactiveOpacity: lowPowerDevice ? 0.54 : 0.7,
38
+ useGoo: !lowPowerDevice,
39
+ snapDistance: lowPowerDevice ? 2.5 : 1.5,
40
+ easeFactor: lowPowerDevice ? 7.5 : 10,
41
+ renderThirdBubble: !lowPowerDevice,
42
+ blendMode: lowPowerDevice ? "screen" : "hard-light"
43
+ };
44
+ }, []);
45
+ useEffect(() => {
46
+ const interactive = interactiveRef.current;
47
+ const root = rootRef.current;
48
+ if (!interactive || !root) return;
49
+ const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)");
50
+ let raf = 0;
51
+ let running = false;
52
+ const stop = () => {
53
+ running = false;
54
+ if (raf) {
55
+ cancelAnimationFrame(raf);
56
+ raf = 0;
57
+ }
58
+ };
59
+ const updatePlayState = () => {
60
+ const enabled = !prefersReducedMotion.matches && !document.hidden;
61
+ root.style.setProperty("--cc-rainbow-play", enabled ? "running" : "paused");
62
+ if (!enabled) stop();
63
+ return enabled;
64
+ };
65
+ const applyTransform = () => {
66
+ const x = Math.round(currentRef.current.x);
67
+ const y = Math.round(currentRef.current.y);
68
+ interactive.style.transform = `translate3d(${x}px, ${y}px, 0)`;
69
+ };
70
+ const animate = () => {
71
+ if (!updatePlayState()) return;
72
+ currentRef.current.x += (targetRef.current.x - currentRef.current.x) / config.easeFactor;
73
+ currentRef.current.y += (targetRef.current.y - currentRef.current.y) / config.easeFactor;
74
+ applyTransform();
75
+ const dx = Math.abs(targetRef.current.x - currentRef.current.x);
76
+ const dy = Math.abs(targetRef.current.y - currentRef.current.y);
77
+ if (dx < config.snapDistance && dy < config.snapDistance) {
78
+ running = false;
79
+ raf = 0;
80
+ return;
81
+ }
82
+ raf = requestAnimationFrame(animate);
83
+ };
84
+ const start = () => {
85
+ if (running) return;
86
+ if (!updatePlayState()) return;
87
+ running = true;
88
+ raf = requestAnimationFrame(animate);
89
+ };
90
+ const onPointer = (e) => {
91
+ if (!updatePlayState()) return;
92
+ targetRef.current.x = e.clientX;
93
+ targetRef.current.y = e.clientY;
94
+ start();
95
+ };
96
+ const onStateChange = () => {
97
+ updatePlayState();
98
+ };
99
+ const centerX = window.innerWidth / 2;
100
+ const centerY = window.innerHeight / 2;
101
+ currentRef.current.x = centerX;
102
+ currentRef.current.y = centerY;
103
+ targetRef.current.x = centerX;
104
+ targetRef.current.y = centerY;
105
+ applyTransform();
106
+ updatePlayState();
107
+ window.addEventListener("pointermove", onPointer, { passive: true });
108
+ document.addEventListener("visibilitychange", onStateChange);
109
+ if (typeof prefersReducedMotion.addEventListener === "function") {
110
+ prefersReducedMotion.addEventListener("change", onStateChange);
111
+ } else {
112
+ prefersReducedMotion.addListener(onStateChange);
260
113
  }
261
- ),
262
- /* @__PURE__ */ jsx3("feBlend", { in: "SourceGraphic", in2: "goo" })
263
- ] }) }) }),
264
- /* @__PURE__ */ jsxs3(
265
- "div",
266
- {
267
- className: "absolute inset-0 cc-rainbow-layer",
268
- style: {
269
- filter: config.useGoo ? `url(#${filterId}) blur(${config.blur}px)` : `blur(${config.blur}px)`
270
- },
271
- children: [
272
- /* @__PURE__ */ jsx3("div", { className: "cc-rainbow-bubble cc-rainbow-a cc-rainbow-g1" }),
273
- /* @__PURE__ */ jsx3("div", { className: "cc-rainbow-bubble cc-rainbow-b cc-rainbow-g2" }),
274
- config.renderThirdBubble ? /* @__PURE__ */ jsx3("div", { className: "cc-rainbow-bubble cc-rainbow-a cc-rainbow-g3" }) : null,
275
- /* @__PURE__ */ jsx3("div", { ref: interactiveRef, className: "cc-rainbow-bubble cc-rainbow-b cc-rainbow-interactive" })
276
- ]
277
- }
278
- ),
279
- /* @__PURE__ */ jsx3("style", { children: `
114
+ return () => {
115
+ window.removeEventListener("pointermove", onPointer);
116
+ document.removeEventListener("visibilitychange", onStateChange);
117
+ if (typeof prefersReducedMotion.removeEventListener === "function") {
118
+ prefersReducedMotion.removeEventListener("change", onStateChange);
119
+ } else {
120
+ prefersReducedMotion.removeListener(onStateChange);
121
+ }
122
+ stop();
123
+ };
124
+ }, [config.easeFactor, config.snapDistance]);
125
+ return /* @__PURE__ */ jsxs3("div", { ref: rootRef, className: "fixed inset-0 z-0 overflow-hidden bg-white pointer-events-none dark:hidden", children: [
126
+ /* @__PURE__ */ jsx3("svg", { className: "hidden", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": true, focusable: "false", children: /* @__PURE__ */ jsx3("defs", { children: /* @__PURE__ */ jsxs3("filter", { id: filterId, children: [
127
+ /* @__PURE__ */ jsx3("feGaussianBlur", { in: "SourceGraphic", stdDeviation: "10", result: "blur" }),
128
+ /* @__PURE__ */ jsx3(
129
+ "feColorMatrix",
130
+ {
131
+ in: "blur",
132
+ mode: "matrix",
133
+ values: "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -8",
134
+ result: "goo"
135
+ }
136
+ ),
137
+ /* @__PURE__ */ jsx3("feBlend", { in: "SourceGraphic", in2: "goo" })
138
+ ] }) }) }),
139
+ /* @__PURE__ */ jsxs3(
140
+ "div",
141
+ {
142
+ className: "absolute inset-0 cc-rainbow-layer",
143
+ style: {
144
+ filter: config.useGoo ? `url(#${filterId}) blur(${config.blur}px)` : `blur(${config.blur}px)`
145
+ },
146
+ children: [
147
+ /* @__PURE__ */ jsx3("div", { className: "cc-rainbow-bubble cc-rainbow-a cc-rainbow-g1" }),
148
+ /* @__PURE__ */ jsx3("div", { className: "cc-rainbow-bubble cc-rainbow-b cc-rainbow-g2" }),
149
+ config.renderThirdBubble ? /* @__PURE__ */ jsx3("div", { className: "cc-rainbow-bubble cc-rainbow-a cc-rainbow-g3" }) : null,
150
+ /* @__PURE__ */ jsx3("div", { ref: interactiveRef, className: "cc-rainbow-bubble cc-rainbow-b cc-rainbow-interactive" })
151
+ ]
152
+ }
153
+ ),
154
+ /* @__PURE__ */ jsx3("style", { children: `
280
155
  .cc-rainbow-layer {
281
156
  contain: paint;
282
157
  }
@@ -361,21 +236,35 @@ var BackgroundRainbow = () => {
361
236
  }
362
237
  }
363
238
  ` })
364
- ] });
365
- };
239
+ ] });
240
+ };
241
+ }
242
+ });
366
243
 
367
244
  // src/components/cupcode/BackgroundStars.tsx
245
+ var BackgroundStars_exports = {};
246
+ __export(BackgroundStars_exports, {
247
+ BackgroundStars: () => BackgroundStars,
248
+ default: () => BackgroundStars_default
249
+ });
368
250
  import { useEffect as useEffect2, useRef as useRef2 } from "react";
369
251
  import { Fragment, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
370
- var TWO_PI = Math.PI * 2;
371
- var rand = (a, b) => a + Math.random() * (b - a);
372
- var choice = (arr) => arr[Math.random() * arr.length | 0];
373
252
  function createCanvas(width, height) {
374
253
  const canvas = document.createElement("canvas");
375
254
  canvas.width = Math.max(1, Math.floor(width));
376
255
  canvas.height = Math.max(1, Math.floor(height));
377
256
  return canvas;
378
257
  }
258
+ function dprFromPixelBudget(width, height, pixelBudget, minDpr, maxDpr) {
259
+ const area = Math.max(1, width * height);
260
+ const dpr = Math.sqrt(pixelBudget / area);
261
+ return clamp(dpr, minDpr, maxDpr);
262
+ }
263
+ function scaleFromPixelBudget(width, height, pixelBudget, minScale, maxScale) {
264
+ const area = Math.max(1, width * height);
265
+ const scale = Math.sqrt(pixelBudget / area);
266
+ return clamp(scale, minScale, maxScale);
267
+ }
379
268
  function createStarBaseSprite(size) {
380
269
  const canvas = createCanvas(size, size);
381
270
  const ctx = canvas.getContext("2d");
@@ -424,8 +313,8 @@ function createFlareSprite(size) {
424
313
  const centerY = size / 2;
425
314
  const gradient = ctx.createLinearGradient(0, centerY, canvas.width, centerY);
426
315
  gradient.addColorStop(0, "rgba(0,0,0,0)");
427
- gradient.addColorStop(0.44, "rgba(41,5,40,0.92)");
428
- gradient.addColorStop(0.56, "rgba(41,5,40,0.92)");
316
+ gradient.addColorStop(0.44, "rgba(41,5,40,0.84)");
317
+ gradient.addColorStop(0.56, "rgba(41,5,40,0.84)");
429
318
  gradient.addColorStop(1, "rgba(0,0,0,0)");
430
319
  ctx.fillStyle = gradient;
431
320
  ctx.fillRect(0, (size - 4) / 2, canvas.width, 4);
@@ -457,21 +346,14 @@ function createCometHeadSprite(size) {
457
346
  const ctx = canvas.getContext("2d");
458
347
  if (!ctx) return canvas;
459
348
  const half = size / 2;
460
- const glowA = ctx.createRadialGradient(half, half, 0, half, half, half);
461
- glowA.addColorStop(0, "rgba(255,255,255,0.96)");
462
- glowA.addColorStop(0.3, "rgba(151,90,182,0.78)");
463
- glowA.addColorStop(1, "rgba(0,0,0,0)");
464
- ctx.fillStyle = glowA;
349
+ const outer = ctx.createRadialGradient(half, half, 0, half, half, half);
350
+ outer.addColorStop(0, "rgba(255,255,255,0.96)");
351
+ outer.addColorStop(0.35, "rgba(151,90,182,0.72)");
352
+ outer.addColorStop(1, "rgba(0,0,0,0)");
353
+ ctx.fillStyle = outer;
465
354
  ctx.beginPath();
466
355
  ctx.arc(half, half, half, 0, TWO_PI);
467
356
  ctx.fill();
468
- const glowB = ctx.createRadialGradient(half, half, 0, half, half, half * 0.56);
469
- glowB.addColorStop(0, "rgba(255,255,255,0.95)");
470
- glowB.addColorStop(1, "rgba(0,0,0,0)");
471
- ctx.fillStyle = glowB;
472
- ctx.beginPath();
473
- ctx.arc(half, half, half * 0.56, 0, TWO_PI);
474
- ctx.fill();
475
357
  return canvas;
476
358
  }
477
359
  function createCometTailSprite(width, height) {
@@ -481,59 +363,37 @@ function createCometTailSprite(width, height) {
481
363
  const center = height / 2;
482
364
  const gradient = ctx.createLinearGradient(0, center, width, center);
483
365
  gradient.addColorStop(0, "rgba(0,0,0,0)");
484
- gradient.addColorStop(0.45, "rgba(124,91,187,0.55)");
485
- gradient.addColorStop(0.8, "rgba(151,90,182,0.8)");
486
- gradient.addColorStop(1, "rgba(255,255,255,0.96)");
366
+ gradient.addColorStop(0.5, "rgba(124,91,187,0.52)");
367
+ gradient.addColorStop(1, "rgba(255,255,255,0.94)");
487
368
  ctx.fillStyle = gradient;
488
369
  ctx.fillRect(0, center - 1, width, 2);
489
370
  return canvas;
490
371
  }
491
- function drawHaloSprite(ctx, sprite, radius) {
492
- if (radius <= 0.5) return;
493
- const diameter = radius * 2;
494
- ctx.drawImage(sprite, -radius, -radius, diameter, diameter);
372
+ function setCanvasDisplaySize(canvas, width, height, dpr) {
373
+ canvas.width = Math.max(1, Math.floor(width * dpr));
374
+ canvas.height = Math.max(1, Math.floor(height * dpr));
375
+ canvas.style.width = `${width}px`;
376
+ canvas.style.height = `${height}px`;
495
377
  }
496
378
  function BackgroundStars() {
497
379
  const nebulaRef = useRef2(null);
498
- const starsRef = useRef2(null);
380
+ const staticStarsRef = useRef2(null);
381
+ const fxStarsRef = useRef2(null);
499
382
  useEffect2(() => {
500
383
  const nebulaCanvas = nebulaRef.current;
501
- const starsCanvas = starsRef.current;
502
- if (!nebulaCanvas || !starsCanvas) return;
384
+ const staticCanvas = staticStarsRef.current;
385
+ const fxCanvas = fxStarsRef.current;
386
+ if (!nebulaCanvas || !staticCanvas || !fxCanvas) return;
503
387
  const nebulaCtx = nebulaCanvas.getContext("2d", { alpha: true, desynchronized: true });
504
- const starsCtx = starsCanvas.getContext("2d", { alpha: true, desynchronized: true });
505
- if (!nebulaCtx || !starsCtx) return;
506
- const width = window.innerWidth;
507
- const height = window.innerHeight;
388
+ const staticCtx = staticCanvas.getContext("2d", { alpha: true, desynchronized: true });
389
+ const fxCtx = fxCanvas.getContext("2d", { alpha: true, desynchronized: true });
390
+ if (!nebulaCtx || !staticCtx || !fxCtx) return;
508
391
  const nav = navigator;
509
392
  const reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
510
393
  const lowMemory = typeof nav.deviceMemory === "number" && nav.deviceMemory <= 4;
511
394
  const lowCpu = typeof nav.hardwareConcurrency === "number" && nav.hardwareConcurrency <= 4;
512
395
  const lowPowerDevice = lowMemory || lowCpu;
513
- const nebulaScale = lowPowerDevice ? 0.48 : 0.62;
514
- const nebulaWidth = Math.max(1, Math.floor(width * nebulaScale));
515
- const nebulaHeight = Math.max(1, Math.floor(height * nebulaScale));
516
- nebulaCanvas.width = nebulaWidth;
517
- nebulaCanvas.height = nebulaHeight;
518
- nebulaCanvas.style.width = `${width}px`;
519
- nebulaCanvas.style.height = `${height}px`;
520
- starsCanvas.width = width;
521
- starsCanvas.height = height;
522
- starsCanvas.style.width = `${width}px`;
523
- starsCanvas.style.height = `${height}px`;
524
396
  const palette = ["#ffffff", "#d7c8ff", "#7c5bbb", "#b146ea", "#975ab6", "#ff8ad1"];
525
- const starSpriteSize = 96;
526
- const halfStarSprite = starSpriteSize / 2;
527
- const starBaseSprite = createStarBaseSprite(starSpriteSize);
528
- const starSprites = /* @__PURE__ */ new Map();
529
- for (const color of palette) {
530
- starSprites.set(color, tintSprite(starBaseSprite, color));
531
- }
532
- const flareSprite = createFlareSprite(starSpriteSize);
533
- const haloPink = createHaloSprite(160, "rgba(251,88,235,0.68)");
534
- const haloPurple = createHaloSprite(160, "rgba(151,90,182,0.6)");
535
- const haloIndigo = createHaloSprite(160, "rgba(124,91,187,0.54)");
536
- const haloGlow = createHaloSprite(140, "rgba(151,90,182,0.32)");
537
397
  const cloudColors = [
538
398
  "rgba(65,105,225,0.18)",
539
399
  "rgba(138,43,226,0.17)",
@@ -542,96 +402,81 @@ function BackgroundStars() {
542
402
  "rgba(147,112,219,0.17)",
543
403
  "rgba(218,112,214,0.16)"
544
404
  ];
405
+ const starSpriteSize = 96;
406
+ const starBaseSprite = createStarBaseSprite(starSpriteSize);
407
+ const starSprites = /* @__PURE__ */ new Map();
408
+ for (const color of palette) {
409
+ starSprites.set(color, tintSprite(starBaseSprite, color));
410
+ }
411
+ const haloSoft = createHaloSprite(160, "rgba(151,90,182,0.52)");
412
+ const haloPulse = createHaloSprite(192, "rgba(251,88,235,0.56)");
413
+ const flareSprite = createFlareSprite(starSpriteSize);
545
414
  const cloudSprites = /* @__PURE__ */ new Map();
546
415
  for (const color of cloudColors) {
547
416
  cloudSprites.set(color, createCloudSprite(256, color));
548
417
  }
549
- const nebulaBackdrop = createCanvas(nebulaWidth, nebulaHeight);
550
- const nebulaBackdropCtx = nebulaBackdrop.getContext("2d");
551
- if (nebulaBackdropCtx) {
552
- const bg = nebulaBackdropCtx.createRadialGradient(
553
- nebulaWidth / 2,
554
- nebulaHeight / 2,
555
- 0,
556
- nebulaWidth / 2,
557
- nebulaHeight / 2,
558
- Math.max(nebulaWidth, nebulaHeight) / 1.45
559
- );
560
- bg.addColorStop(0, "#0c0d1d");
561
- bg.addColorStop(1, "#000000");
562
- nebulaBackdropCtx.fillStyle = bg;
563
- nebulaBackdropCtx.fillRect(0, 0, nebulaWidth, nebulaHeight);
564
- }
565
- const cloudCount = lowPowerDevice ? 5 : 8;
566
- const clouds = Array.from({ length: cloudCount }).map(() => {
567
- const color = choice(cloudColors);
568
- return {
569
- x: Math.random() * nebulaWidth,
570
- y: Math.random() * nebulaHeight,
571
- size: rand(95, 230),
572
- alpha: rand(0.65, 1),
573
- sprite: cloudSprites.get(color),
574
- angle: Math.random() * TWO_PI,
575
- speed: rand(-5e-4, 5e-4),
576
- pulseAmp: rand(0.03, 0.1),
577
- pulsePhase: Math.random() * TWO_PI
578
- };
579
- });
580
- const areaFactor = Math.min(1.25, width * height / (1920 * 1080));
581
- const baseStars = lowPowerDevice ? 105 : 170;
582
- const quantity = Math.max(80, Math.min(220, Math.round(baseStars * areaFactor)));
583
- const stars = Array.from({ length: quantity }).map(() => {
584
- const bucket = Math.random();
585
- let size;
586
- let isHighlight = false;
587
- if (bucket < 0.25) size = rand(0.35, 0.95) * (width * 1e-3);
588
- else if (bucket < 0.97) size = rand(0.6, 1.8) * (width * 1e-3);
589
- else {
590
- size = rand(1.8, 3.2) * (width * 1e-3);
591
- isHighlight = true;
592
- }
593
- const twinkleDur = rand(5500, 32e3);
594
- const sparkDur = rand(650, 1100);
595
- const color = choice(palette);
596
- return {
597
- x: Math.random() * width,
598
- y: Math.random() * height,
599
- size: Math.max(0.8, size),
600
- isHighlight,
601
- sprite: starSprites.get(color),
602
- driftDx: rand(-6e-3, 6e-3) * width,
603
- driftDy: rand(-6e-3, 6e-3) * height,
604
- driftInvDur: 1 / rand(5e4, 9e4),
605
- scaleTo: rand(0.9, 1.12),
606
- baseOpacity: rand(0.82, 1),
607
- intensity: rand(0.95, 1.5),
608
- twinkleFreq: TWO_PI / twinkleDur,
609
- twinkleDelay: rand(0, 24e3),
610
- sparkInvDur: 1 / sparkDur,
611
- sparkDelay: rand(0, 1200),
612
- phase: Math.random() * TWO_PI
613
- };
614
- });
615
- const cometHeadSprite = createCometHeadSprite(90);
616
- const cometTailSprite = createCometTailSprite(256, 8);
617
- const comets = [];
618
- const spawnComet = (now) => {
619
- comets.push({
620
- x: Math.random() * width,
621
- y: Math.random() * height,
622
- angle: Math.random() * TWO_PI,
623
- len: rand(80, 160),
624
- t0: now,
625
- dur: rand(1400, 2200)
626
- });
418
+ const cometHeadSprite = createCometHeadSprite(84);
419
+ const cometTailSprite = createCometTailSprite(228, 8);
420
+ const maxQualityLevel = lowPowerDevice ? 1 : QUALITY_PROFILES.length - 1;
421
+ let qualityLevel = maxQualityLevel;
422
+ let profile = QUALITY_PROFILES[qualityLevel];
423
+ let width = 0;
424
+ let height = 0;
425
+ let staticDpr = 1;
426
+ let fxDpr = 1;
427
+ let nebulaScale = lowPowerDevice ? 0.46 : 0.58;
428
+ let nebulaWidth = 1;
429
+ let nebulaHeight = 1;
430
+ let staticStars = [];
431
+ let dynamicStars = [];
432
+ let clouds = [];
433
+ let comets = [];
434
+ let nebulaBackdrop = createCanvas(1, 1);
435
+ let nextCometAt = 0;
436
+ const nextCometDelay = () => rand(profile.cometMinMs, profile.cometMaxMs);
437
+ const clearFx = () => {
438
+ fxCtx.setTransform(fxDpr, 0, 0, fxDpr, 0, 0);
439
+ fxCtx.clearRect(0, 0, width, height);
440
+ };
441
+ const clearNebula = () => {
442
+ nebulaCtx.setTransform(1, 0, 0, 1, 0, 0);
443
+ nebulaCtx.clearRect(0, 0, nebulaWidth, nebulaHeight);
444
+ };
445
+ const drawStaticStars = () => {
446
+ staticCtx.setTransform(staticDpr, 0, 0, staticDpr, 0, 0);
447
+ staticCtx.clearRect(0, 0, width, height);
448
+ staticCtx.globalCompositeOperation = "screen";
449
+ for (const star of staticStars) {
450
+ const size = star.size;
451
+ const half = size / 2;
452
+ staticCtx.globalAlpha = star.alpha;
453
+ staticCtx.drawImage(star.sprite, star.x - half, star.y - half, size, size);
454
+ const haloRadius = size * star.haloScale;
455
+ staticCtx.globalAlpha = star.alpha * 0.48;
456
+ staticCtx.drawImage(haloSoft, star.x - haloRadius, star.y - haloRadius, haloRadius * 2, haloRadius * 2);
457
+ if (star.isHighlight) {
458
+ const flareWidth = size * 5.2;
459
+ const flareHeight = size * 1.25;
460
+ staticCtx.globalAlpha = star.alpha * 0.22;
461
+ staticCtx.drawImage(flareSprite, star.x - flareWidth / 2, star.y - flareHeight / 2, flareWidth, flareHeight);
462
+ staticCtx.save();
463
+ staticCtx.translate(star.x, star.y);
464
+ staticCtx.rotate(Math.PI / 2);
465
+ staticCtx.drawImage(flareSprite, -flareWidth / 2, -flareHeight / 2, flareWidth, flareHeight);
466
+ staticCtx.restore();
467
+ }
468
+ }
469
+ staticCtx.globalAlpha = 1;
470
+ staticCtx.globalCompositeOperation = "source-over";
627
471
  };
628
472
  const drawNebula = (now) => {
473
+ nebulaCtx.setTransform(1, 0, 0, 1, 0, 0);
629
474
  nebulaCtx.clearRect(0, 0, nebulaWidth, nebulaHeight);
630
475
  nebulaCtx.drawImage(nebulaBackdrop, 0, 0);
631
476
  nebulaCtx.globalCompositeOperation = "screen";
632
477
  for (const cloud of clouds) {
633
478
  cloud.angle += cloud.speed;
634
- const pulse = 1 + cloud.pulseAmp * Math.sin(now * 2e-4 + cloud.pulsePhase);
479
+ const pulse = 1 + cloud.pulseAmp * Math.sin(now * 18e-5 + cloud.pulsePhase);
635
480
  const radius = cloud.size * pulse;
636
481
  nebulaCtx.save();
637
482
  nebulaCtx.translate(cloud.x, cloud.y);
@@ -643,79 +488,208 @@ function BackgroundStars() {
643
488
  nebulaCtx.globalCompositeOperation = "source-over";
644
489
  nebulaCtx.globalAlpha = 1;
645
490
  };
491
+ const drawDynamicStars = (now) => {
492
+ fxCtx.setTransform(fxDpr, 0, 0, fxDpr, 0, 0);
493
+ fxCtx.clearRect(0, 0, width, height);
494
+ fxCtx.globalCompositeOperation = "screen";
495
+ for (const star of dynamicStars) {
496
+ const drift = now * star.driftInvDur % 1;
497
+ const x = star.x + star.driftDx * drift;
498
+ const y = star.y + star.driftDy * drift;
499
+ const twinkle = (Math.sin((now + star.twinkleDelay) * star.twinkleFreq + star.phase) + 1) * 0.5;
500
+ const sparkCycle = (now + star.sparkDelay) * star.sparkInvDur % 1;
501
+ const sparkBoost = sparkCycle < 0.15 ? sparkCycle / 0.15 : sparkCycle < 0.4 ? 1 - (sparkCycle - 0.15) / 0.25 : 0;
502
+ const size = star.size * (0.92 + twinkle * profile.twinkleBoost + sparkBoost * 0.12);
503
+ const alpha = star.baseOpacity * (0.58 + twinkle * 0.42);
504
+ const half = size / 2;
505
+ fxCtx.globalAlpha = alpha;
506
+ fxCtx.drawImage(star.sprite, x - half, y - half, size, size);
507
+ const haloRadius = size * (star.haloScale + sparkBoost * 1.8) * profile.haloBoost;
508
+ fxCtx.globalAlpha = alpha * 0.42;
509
+ fxCtx.drawImage(haloPulse, x - haloRadius, y - haloRadius, haloRadius * 2, haloRadius * 2);
510
+ if (profile.dynamicFlares && star.isHighlight) {
511
+ const flareWidth = size * 5.8;
512
+ const flareHeight = size * 1.25;
513
+ fxCtx.globalAlpha = alpha * (0.18 + sparkBoost * 0.35);
514
+ fxCtx.drawImage(flareSprite, x - flareWidth / 2, y - flareHeight / 2, flareWidth, flareHeight);
515
+ fxCtx.save();
516
+ fxCtx.translate(x, y);
517
+ fxCtx.rotate(Math.PI / 2);
518
+ fxCtx.drawImage(flareSprite, -flareWidth / 2, -flareHeight / 2, flareWidth, flareHeight);
519
+ fxCtx.restore();
520
+ }
521
+ }
522
+ fxCtx.globalAlpha = 1;
523
+ fxCtx.globalCompositeOperation = "source-over";
524
+ };
646
525
  const drawComets = (now) => {
647
- for (let i = comets.length - 1; i >= 0; i--) {
648
- const comet = comets[i];
649
- const p = (now - comet.t0) / comet.dur;
650
- if (p >= 1) {
651
- comets.splice(i, 1);
526
+ if (!comets.length) return;
527
+ fxCtx.globalCompositeOperation = "screen";
528
+ for (let index = comets.length - 1; index >= 0; index -= 1) {
529
+ const comet = comets[index];
530
+ const progress = (now - comet.t0) / comet.dur;
531
+ if (progress >= 1) {
532
+ comets.splice(index, 1);
652
533
  continue;
653
534
  }
654
- const ease = p < 0.5 ? p * 2 : 1 - (p - 0.5) * 2;
655
- const dx = Math.cos(comet.angle) * comet.len * 6.8 * p;
656
- const dy = Math.sin(comet.angle) * comet.len * 6.8 * p;
657
- starsCtx.save();
658
- starsCtx.translate(comet.x + dx, comet.y + dy);
659
- starsCtx.rotate(comet.angle);
660
- starsCtx.globalAlpha = 0.2 + 0.8 * ease;
661
- starsCtx.drawImage(cometHeadSprite, -14, -14, 28, 28);
662
- starsCtx.globalAlpha = 0.25 + 0.65 * ease;
663
- starsCtx.drawImage(cometTailSprite, -comet.len, -3, comet.len, 6);
664
- starsCtx.globalAlpha = 0.45 * ease;
665
- starsCtx.drawImage(cometTailSprite, 0, -2, Math.min(24, comet.len * 0.24), 4);
666
- starsCtx.restore();
667
- }
535
+ const ease = progress < 0.5 ? progress * 2 : 1 - (progress - 0.5) * 2;
536
+ const dx = Math.cos(comet.angle) * comet.len * 6.2 * progress;
537
+ const dy = Math.sin(comet.angle) * comet.len * 6.2 * progress;
538
+ fxCtx.save();
539
+ fxCtx.translate(comet.x + dx, comet.y + dy);
540
+ fxCtx.rotate(comet.angle);
541
+ fxCtx.globalAlpha = 0.24 + 0.7 * ease;
542
+ fxCtx.drawImage(cometHeadSprite, -12, -12, 24, 24);
543
+ fxCtx.globalAlpha = 0.2 + 0.58 * ease;
544
+ fxCtx.drawImage(cometTailSprite, -comet.len, -3, comet.len, 6);
545
+ fxCtx.restore();
546
+ }
547
+ fxCtx.globalAlpha = 1;
548
+ fxCtx.globalCompositeOperation = "source-over";
668
549
  };
669
- const drawStars = (now) => {
670
- starsCtx.clearRect(0, 0, width, height);
671
- starsCtx.globalCompositeOperation = "screen";
672
- for (const star of stars) {
673
- const drift = now * star.driftInvDur % 1;
674
- const sx = star.x + star.driftDx * drift;
675
- const sy = star.y + star.driftDy * drift;
676
- const scaleByDrift = 1 + (star.scaleTo - 1) * drift;
677
- const twinkle = (Math.sin((now + star.twinkleDelay) * star.twinkleFreq + star.phase) + 1) * 0.5;
678
- const twinklePeak = 0.58 + 0.42 * twinkle;
679
- const sparkCycle = (now + star.sparkDelay) * star.sparkInvDur % 1;
680
- const sparkBoost = sparkCycle < 0.15 ? sparkCycle / 0.15 : sparkCycle < 0.45 ? 1 - (sparkCycle - 0.15) / 0.3 : 0;
681
- const sparkScale = 1 + 0.28 * sparkBoost;
682
- const glow = 0.38 + 0.2 * (0.5 + 0.5 * Math.sin(now * 2e-3 + star.phase));
683
- const opacity = star.baseOpacity * twinklePeak;
684
- const intensity = star.intensity * (0.82 + 0.38 * sparkBoost);
685
- const size = star.size * scaleByDrift * sparkScale;
686
- starsCtx.save();
687
- starsCtx.globalAlpha = opacity;
688
- starsCtx.translate(sx, sy);
689
- starsCtx.scale(size / starSpriteSize, size / starSpriteSize);
690
- starsCtx.drawImage(star.sprite, -halfStarSprite, -halfStarSprite);
691
- drawHaloSprite(starsCtx, haloPink, size * 4.1 * intensity);
692
- drawHaloSprite(starsCtx, haloPurple, size * 6.9 * intensity);
693
- drawHaloSprite(starsCtx, haloIndigo, size * 10.2 * intensity);
694
- drawHaloSprite(starsCtx, haloGlow, size * (1.8 + glow));
695
- if (star.isHighlight) {
696
- starsCtx.globalAlpha = opacity * (0.35 + 0.65 * sparkBoost);
697
- starsCtx.drawImage(flareSprite, -2 * starSpriteSize, -halfStarSprite, 4 * starSpriteSize, starSpriteSize);
698
- starsCtx.rotate(Math.PI / 2);
699
- starsCtx.drawImage(flareSprite, -2 * starSpriteSize, -halfStarSprite, 4 * starSpriteSize, starSpriteSize);
550
+ const spawnComet = (now) => {
551
+ if (profile.maxComets <= 0) return;
552
+ if (comets.length >= profile.maxComets) return;
553
+ comets.push({
554
+ x: Math.random() * width,
555
+ y: Math.random() * height,
556
+ angle: Math.random() * TWO_PI,
557
+ len: rand(72, 150),
558
+ t0: now,
559
+ dur: rand(1300, 2100)
560
+ });
561
+ };
562
+ const buildScene = () => {
563
+ width = Math.max(1, window.innerWidth);
564
+ height = Math.max(1, window.innerHeight);
565
+ const deviceDpr = window.devicePixelRatio || 1;
566
+ staticDpr = dprFromPixelBudget(
567
+ width,
568
+ height,
569
+ profile.staticPixelBudget,
570
+ lowPowerDevice ? 0.36 : 0.44,
571
+ Math.min(deviceDpr, 0.85)
572
+ );
573
+ fxDpr = dprFromPixelBudget(
574
+ width,
575
+ height,
576
+ profile.fxPixelBudget,
577
+ lowPowerDevice ? 0.44 : 0.52,
578
+ Math.min(deviceDpr, 0.95)
579
+ );
580
+ setCanvasDisplaySize(staticCanvas, width, height, staticDpr);
581
+ setCanvasDisplaySize(fxCanvas, width, height, fxDpr);
582
+ nebulaScale = scaleFromPixelBudget(
583
+ width,
584
+ height,
585
+ profile.nebulaPixelBudget,
586
+ lowPowerDevice ? 0.32 : 0.38,
587
+ 0.62
588
+ );
589
+ nebulaWidth = Math.max(1, Math.floor(width * nebulaScale));
590
+ nebulaHeight = Math.max(1, Math.floor(height * nebulaScale));
591
+ nebulaCanvas.width = nebulaWidth;
592
+ nebulaCanvas.height = nebulaHeight;
593
+ nebulaCanvas.style.width = `${width}px`;
594
+ nebulaCanvas.style.height = `${height}px`;
595
+ staticCtx.setTransform(staticDpr, 0, 0, staticDpr, 0, 0);
596
+ fxCtx.setTransform(fxDpr, 0, 0, fxDpr, 0, 0);
597
+ nebulaCtx.setTransform(1, 0, 0, 1, 0, 0);
598
+ const areaFactor = Math.min(1.25, width * height / (1920 * 1080));
599
+ const totalStarsBase = lowPowerDevice ? 100 : 166;
600
+ const totalStars = Math.max(72, Math.min(210, Math.round(totalStarsBase * areaFactor)));
601
+ const dynamicCount = Math.max(10, Math.round(totalStars * profile.dynamicRatio));
602
+ staticStars = [];
603
+ dynamicStars = [];
604
+ comets = [];
605
+ for (let i = 0; i < totalStars; i += 1) {
606
+ const bucket = Math.random();
607
+ const isHighlight = bucket > 0.965;
608
+ const size = Math.max(
609
+ 0.8,
610
+ (bucket < 0.24 ? rand(0.35, 0.95) : bucket < 0.95 ? rand(0.6, 1.75) : rand(1.8, 3)) * (width * 1e-3)
611
+ );
612
+ const color = choice(palette);
613
+ const alpha = rand(0.76, 0.98);
614
+ const base = {
615
+ x: Math.random() * width,
616
+ y: Math.random() * height,
617
+ size,
618
+ sprite: starSprites.get(color),
619
+ isHighlight
620
+ };
621
+ if (dynamicStars.length < dynamicCount && Math.random() > 0.32) {
622
+ const twinkleDur = rand(5500, 26e3);
623
+ const sparkDur = rand(760, 1300);
624
+ dynamicStars.push({
625
+ ...base,
626
+ baseOpacity: alpha,
627
+ driftDx: rand(-5e-3, 5e-3) * width,
628
+ driftDy: rand(-5e-3, 5e-3) * height,
629
+ driftInvDur: 1 / rand(52e3, 96e3),
630
+ twinkleFreq: TWO_PI / twinkleDur,
631
+ twinkleDelay: rand(0, 2e4),
632
+ sparkInvDur: 1 / sparkDur,
633
+ sparkDelay: rand(0, 1100),
634
+ phase: Math.random() * TWO_PI,
635
+ haloScale: rand(2.2, 3.8)
636
+ });
637
+ } else {
638
+ staticStars.push({
639
+ ...base,
640
+ alpha,
641
+ haloScale: rand(2.1, 3.6)
642
+ });
700
643
  }
701
- starsCtx.restore();
702
644
  }
703
- starsCtx.globalCompositeOperation = "source-over";
645
+ const cloudCount = lowPowerDevice ? Math.min(profile.cloudCount, 4) : profile.cloudCount;
646
+ clouds = Array.from({ length: cloudCount }).map(() => {
647
+ const color = choice(cloudColors);
648
+ return {
649
+ x: Math.random() * nebulaWidth,
650
+ y: Math.random() * nebulaHeight,
651
+ size: rand(90, 220),
652
+ alpha: rand(0.64, 0.95),
653
+ sprite: cloudSprites.get(color),
654
+ angle: Math.random() * TWO_PI,
655
+ speed: rand(-36e-5, 36e-5),
656
+ pulseAmp: rand(0.02, 0.07),
657
+ pulsePhase: Math.random() * TWO_PI
658
+ };
659
+ });
660
+ nebulaBackdrop = createCanvas(nebulaWidth, nebulaHeight);
661
+ const backdropCtx = nebulaBackdrop.getContext("2d");
662
+ if (backdropCtx) {
663
+ const bg = backdropCtx.createRadialGradient(
664
+ nebulaWidth / 2,
665
+ nebulaHeight / 2,
666
+ 0,
667
+ nebulaWidth / 2,
668
+ nebulaHeight / 2,
669
+ Math.max(nebulaWidth, nebulaHeight) / 1.5
670
+ );
671
+ bg.addColorStop(0, "#0c0d1d");
672
+ bg.addColorStop(1, "#000000");
673
+ backdropCtx.fillStyle = bg;
674
+ backdropCtx.fillRect(0, 0, nebulaWidth, nebulaHeight);
675
+ }
676
+ nextCometAt = performance.now() + nextCometDelay();
677
+ drawNebula(performance.now());
678
+ drawStaticStars();
679
+ clearFx();
704
680
  };
681
+ buildScene();
705
682
  let raf = 0;
683
+ let resizeRaf = 0;
706
684
  let running = false;
707
685
  let disposed = false;
708
686
  let lastFrame = 0;
709
687
  let lastNebulaFrame = 0;
710
- let nextCometAt = performance.now() + rand(3200, 6800);
711
- const minFrameMs = lowPowerDevice ? 22 : 16;
712
- const nebulaFrameMs = lowPowerDevice ? 85 : 55;
713
- const isDarkMode = () => document.documentElement.classList.contains("dark");
714
- const clearCanvases = () => {
715
- starsCtx.clearRect(0, 0, width, height);
716
- nebulaCtx.clearRect(0, 0, nebulaWidth, nebulaHeight);
717
- };
718
- const shouldRun = () => !reducedMotion && !document.hidden && isDarkMode();
688
+ let avgFrameMs = profile.minFrameMs;
689
+ let slowFrameScore = 0;
690
+ let fastFrameScore = 0;
691
+ let qualityCooldownUntil = performance.now() + 2400;
692
+ const shouldRun = () => !reducedMotion && !document.hidden;
719
693
  const stop = () => {
720
694
  running = false;
721
695
  if (raf) {
@@ -723,21 +697,67 @@ function BackgroundStars() {
723
697
  raf = 0;
724
698
  }
725
699
  };
700
+ const scheduleRebuild = () => {
701
+ if (resizeRaf) cancelAnimationFrame(resizeRaf);
702
+ resizeRaf = requestAnimationFrame(() => {
703
+ resizeRaf = 0;
704
+ buildScene();
705
+ if (shouldRun() && !running) {
706
+ running = true;
707
+ lastFrame = 0;
708
+ lastNebulaFrame = 0;
709
+ raf = requestAnimationFrame(frame);
710
+ }
711
+ });
712
+ };
713
+ const setQualityLevel = (nextLevel, now) => {
714
+ const boundedLevel = clamp(nextLevel, 0, maxQualityLevel);
715
+ if (boundedLevel === qualityLevel) return;
716
+ qualityLevel = boundedLevel;
717
+ profile = QUALITY_PROFILES[qualityLevel];
718
+ avgFrameMs = profile.minFrameMs;
719
+ slowFrameScore = 0;
720
+ fastFrameScore = 0;
721
+ qualityCooldownUntil = now + 4200;
722
+ scheduleRebuild();
723
+ };
724
+ const adaptQuality = (deltaMs, now) => {
725
+ const clampedDelta = clamp(deltaMs, 1, 250);
726
+ avgFrameMs = avgFrameMs * 0.9 + clampedDelta * 0.1;
727
+ if (now < qualityCooldownUntil) return;
728
+ const slowThreshold = profile.minFrameMs * 1.45;
729
+ const fastThreshold = profile.minFrameMs * 0.9;
730
+ if (avgFrameMs > slowThreshold) slowFrameScore += 1;
731
+ else slowFrameScore = Math.max(0, slowFrameScore - 0.5);
732
+ if (avgFrameMs < fastThreshold) fastFrameScore += 1;
733
+ else fastFrameScore = Math.max(0, fastFrameScore - 1);
734
+ if (slowFrameScore >= 48 && qualityLevel > 0) {
735
+ setQualityLevel(qualityLevel - 1, now);
736
+ return;
737
+ }
738
+ if (fastFrameScore >= 220 && qualityLevel < maxQualityLevel) {
739
+ setQualityLevel(qualityLevel + 1, now);
740
+ }
741
+ };
726
742
  const frame = (now) => {
727
743
  if (!running || disposed) return;
728
- if (now - lastFrame < minFrameMs) {
729
- raf = requestAnimationFrame(frame);
730
- return;
744
+ if (lastFrame !== 0) {
745
+ const delta = now - lastFrame;
746
+ if (delta < profile.minFrameMs) {
747
+ raf = requestAnimationFrame(frame);
748
+ return;
749
+ }
750
+ adaptQuality(delta, now);
731
751
  }
732
752
  lastFrame = now;
733
- if (now - lastNebulaFrame >= nebulaFrameMs) {
753
+ if (now - lastNebulaFrame >= profile.nebulaFrameMs) {
734
754
  drawNebula(now);
735
755
  lastNebulaFrame = now;
736
756
  }
737
- drawStars(now);
738
- if (now >= nextCometAt) {
757
+ drawDynamicStars(now);
758
+ if (profile.maxComets > 0 && now >= nextCometAt) {
739
759
  spawnComet(now);
740
- nextCometAt = now + rand(3200, 6800);
760
+ nextCometAt = now + nextCometDelay();
741
761
  }
742
762
  drawComets(now);
743
763
  raf = requestAnimationFrame(frame);
@@ -747,35 +767,41 @@ function BackgroundStars() {
747
767
  running = true;
748
768
  lastFrame = 0;
749
769
  lastNebulaFrame = 0;
770
+ nextCometAt = performance.now() + nextCometDelay();
750
771
  raf = requestAnimationFrame(frame);
751
772
  };
752
- const onVisibilityOrTheme = () => {
753
- if (shouldRun()) start();
754
- else {
755
- stop();
756
- clearCanvases();
773
+ const onVisibilityChange = () => {
774
+ if (shouldRun()) {
775
+ start();
776
+ return;
757
777
  }
778
+ stop();
779
+ clearFx();
780
+ if (document.hidden) clearNebula();
781
+ else drawNebula(0);
782
+ };
783
+ const onResize = () => {
784
+ scheduleRebuild();
758
785
  };
759
786
  if (reducedMotion) {
760
- if (isDarkMode()) {
761
- drawNebula(0);
762
- drawStars(0);
763
- } else {
764
- clearCanvases();
765
- }
787
+ drawNebula(0);
788
+ drawStaticStars();
789
+ clearFx();
766
790
  return () => {
767
791
  stop();
768
792
  };
769
793
  }
770
- const observer = new MutationObserver(onVisibilityOrTheme);
771
- observer.observe(document.documentElement, { attributes: true, attributeFilter: ["class"] });
772
- document.addEventListener("visibilitychange", onVisibilityOrTheme);
773
- onVisibilityOrTheme();
794
+ document.addEventListener("visibilitychange", onVisibilityChange);
795
+ window.addEventListener("resize", onResize, { passive: true });
796
+ start();
774
797
  return () => {
775
798
  disposed = true;
776
799
  stop();
777
- observer.disconnect();
778
- document.removeEventListener("visibilitychange", onVisibilityOrTheme);
800
+ clearFx();
801
+ clearNebula();
802
+ document.removeEventListener("visibilitychange", onVisibilityChange);
803
+ window.removeEventListener("resize", onResize);
804
+ if (resizeRaf) cancelAnimationFrame(resizeRaf);
779
805
  };
780
806
  }, []);
781
807
  return /* @__PURE__ */ jsxs4(Fragment, { children: [
@@ -784,26 +810,234 @@ function BackgroundStars() {
784
810
  {
785
811
  ref: nebulaRef,
786
812
  "aria-hidden": "true",
787
- className: "cc-background-stars-canvas fixed inset-0 z-0 pointer-events-none hidden dark:block"
813
+ className: "cc-background-stars-canvas fixed inset-0 z-0 pointer-events-none"
814
+ }
815
+ ),
816
+ /* @__PURE__ */ jsx4(
817
+ "canvas",
818
+ {
819
+ ref: staticStarsRef,
820
+ "aria-hidden": "true",
821
+ className: "cc-background-stars-canvas fixed inset-0 z-10 pointer-events-none"
788
822
  }
789
823
  ),
790
824
  /* @__PURE__ */ jsx4(
791
825
  "canvas",
792
826
  {
793
- ref: starsRef,
827
+ ref: fxStarsRef,
794
828
  "aria-hidden": "true",
795
- className: "cc-background-stars-canvas fixed inset-0 z-10 pointer-events-none hidden dark:block"
829
+ className: "cc-background-stars-canvas fixed inset-0 z-20 pointer-events-none"
796
830
  }
797
831
  ),
798
832
  /* @__PURE__ */ jsx4("style", { children: `
799
833
  @media (prefers-reduced-motion: reduce) {
800
834
  .cc-background-stars-canvas {
801
- display: none !important;
835
+ animation: none !important;
802
836
  }
803
837
  }
804
838
  ` })
805
839
  ] });
806
840
  }
841
+ var TWO_PI, rand, choice, clamp, QUALITY_PROFILES, BackgroundStars_default;
842
+ var init_BackgroundStars = __esm({
843
+ "src/components/cupcode/BackgroundStars.tsx"() {
844
+ "use strict";
845
+ TWO_PI = Math.PI * 2;
846
+ rand = (a, b) => a + Math.random() * (b - a);
847
+ choice = (arr) => arr[Math.random() * arr.length | 0];
848
+ clamp = (value, min, max) => Math.min(max, Math.max(min, value));
849
+ QUALITY_PROFILES = [
850
+ {
851
+ staticPixelBudget: 42e4,
852
+ fxPixelBudget: 62e4,
853
+ nebulaPixelBudget: 3e5,
854
+ dynamicRatio: 0.12,
855
+ cloudCount: 3,
856
+ maxComets: 0,
857
+ minFrameMs: 36,
858
+ nebulaFrameMs: 180,
859
+ cometMinMs: 9e3,
860
+ cometMaxMs: 14e3,
861
+ haloBoost: 0.72,
862
+ twinkleBoost: 0.2,
863
+ dynamicFlares: false
864
+ },
865
+ {
866
+ staticPixelBudget: 62e4,
867
+ fxPixelBudget: 95e4,
868
+ nebulaPixelBudget: 42e4,
869
+ dynamicRatio: 0.18,
870
+ cloudCount: 4,
871
+ maxComets: 1,
872
+ minFrameMs: 26,
873
+ nebulaFrameMs: 130,
874
+ cometMinMs: 5600,
875
+ cometMaxMs: 9e3,
876
+ haloBoost: 0.88,
877
+ twinkleBoost: 0.26,
878
+ dynamicFlares: true
879
+ },
880
+ {
881
+ staticPixelBudget: 78e4,
882
+ fxPixelBudget: 125e4,
883
+ nebulaPixelBudget: 56e4,
884
+ dynamicRatio: 0.24,
885
+ cloudCount: 6,
886
+ maxComets: 2,
887
+ minFrameMs: 16,
888
+ nebulaFrameMs: 90,
889
+ cometMinMs: 3600,
890
+ cometMaxMs: 7e3,
891
+ haloBoost: 1,
892
+ twinkleBoost: 0.3,
893
+ dynamicFlares: true
894
+ }
895
+ ];
896
+ BackgroundStars_default = BackgroundStars;
897
+ }
898
+ });
899
+
900
+ // src/components/cupcode/AccordionCupcode.tsx
901
+ import * as React from "react";
902
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
903
+ import { ChevronDown } from "lucide-react";
904
+
905
+ // src/lib/utils.ts
906
+ import { clsx } from "clsx";
907
+ import { twMerge } from "tailwind-merge";
908
+ function cn(...inputs) {
909
+ return twMerge(clsx(inputs));
910
+ }
911
+
912
+ // src/components/cupcode/AccordionCupcode.tsx
913
+ import { jsx, jsxs } from "react/jsx-runtime";
914
+ var AccordionCupcode = AccordionPrimitive.Root;
915
+ var AccordionItem = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
916
+ AccordionPrimitive.Item,
917
+ {
918
+ ref,
919
+ className: cn("glass rounded-xl mb-3 overflow-hidden", className),
920
+ ...props
921
+ }
922
+ ));
923
+ AccordionItem.displayName = "AccordionItem";
924
+ var AccordionTrigger = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
925
+ AccordionPrimitive.Trigger,
926
+ {
927
+ ref,
928
+ className: cn(
929
+ "flex flex-1 items-center justify-between p-4 font-semibold text-foreground",
930
+ "transition-all hover:bg-cupcode-purple/5",
931
+ "[&[data-state=open]>svg]:rotate-180",
932
+ className
933
+ ),
934
+ ...props,
935
+ children: [
936
+ children,
937
+ /* @__PURE__ */ jsx(ChevronDown, { className: "h-5 w-5 shrink-0 text-cupcode-purple transition-transform duration-300" })
938
+ ]
939
+ }
940
+ ) }));
941
+ AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
942
+ var AccordionContent = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
943
+ AccordionPrimitive.Content,
944
+ {
945
+ ref,
946
+ className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
947
+ ...props,
948
+ children: /* @__PURE__ */ jsx("div", { className: cn("px-4 pb-4 pt-0 text-muted-foreground", className), children })
949
+ }
950
+ ));
951
+ AccordionContent.displayName = AccordionPrimitive.Content.displayName;
952
+
953
+ // src/components/cupcode/AvatarCupcode.tsx
954
+ import * as React2 from "react";
955
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
956
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
957
+ var Avatar = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
958
+ AvatarPrimitive.Root,
959
+ {
960
+ ref,
961
+ className: cn(
962
+ "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
963
+ "ring-2 ring-border ring-offset-2 ring-offset-background",
964
+ className
965
+ ),
966
+ ...props
967
+ }
968
+ ));
969
+ Avatar.displayName = AvatarPrimitive.Root.displayName;
970
+ var AvatarImage = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
971
+ AvatarPrimitive.Image,
972
+ {
973
+ ref,
974
+ className: cn("aspect-square h-full w-full object-cover", className),
975
+ ...props
976
+ }
977
+ ));
978
+ AvatarImage.displayName = AvatarPrimitive.Image.displayName;
979
+ var AvatarFallback = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
980
+ AvatarPrimitive.Fallback,
981
+ {
982
+ ref,
983
+ className: cn(
984
+ "flex h-full w-full items-center justify-center rounded-full",
985
+ "bg-gradient-to-br from-cupcode-hover to-cupcode-purple",
986
+ "text-white font-semibold",
987
+ className
988
+ ),
989
+ ...props
990
+ }
991
+ ));
992
+ AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
993
+ var statusStyles = {
994
+ online: "bg-success",
995
+ offline: "bg-muted-foreground",
996
+ away: "bg-warning",
997
+ busy: "bg-destructive"
998
+ };
999
+ var sizeClasses = {
1000
+ sm: "h-8 w-8",
1001
+ md: "h-10 w-10",
1002
+ lg: "h-14 w-14",
1003
+ xl: "h-20 w-20"
1004
+ };
1005
+ var statusSizes = {
1006
+ sm: "h-2 w-2",
1007
+ md: "h-2.5 w-2.5",
1008
+ lg: "h-3 w-3",
1009
+ xl: "h-4 w-4"
1010
+ };
1011
+ var AvatarWithStatus = ({
1012
+ src,
1013
+ alt,
1014
+ fallback,
1015
+ status,
1016
+ size = "md",
1017
+ className
1018
+ }) => {
1019
+ return /* @__PURE__ */ jsxs2("div", { className: "relative inline-block", children: [
1020
+ /* @__PURE__ */ jsxs2(Avatar, { className: cn(sizeClasses[size], className), children: [
1021
+ /* @__PURE__ */ jsx2(AvatarImage, { src, alt }),
1022
+ /* @__PURE__ */ jsx2(AvatarFallback, { children: fallback })
1023
+ ] }),
1024
+ status && /* @__PURE__ */ jsx2(
1025
+ "span",
1026
+ {
1027
+ className: cn(
1028
+ "absolute bottom-0 right-0 block rounded-full ring-2 ring-background",
1029
+ statusStyles[status],
1030
+ statusSizes[size],
1031
+ status === "online" && "animate-pulse"
1032
+ )
1033
+ }
1034
+ )
1035
+ ] });
1036
+ };
1037
+
1038
+ // src/index.ts
1039
+ init_BackgroundRainbow();
1040
+ init_BackgroundStars();
807
1041
 
808
1042
  // src/components/cupcode/BadgeCupcode.tsx
809
1043
  import { forwardRef as forwardRef3 } from "react";
@@ -6045,34 +6279,132 @@ var TelescupUpload = ({
6045
6279
  ) }) : null
6046
6280
  ]
6047
6281
  }
6048
- )
6049
- ] });
6050
- if (!isControlled && renderTrigger) {
6051
- return /* @__PURE__ */ jsxs21(Fragment3, { children: [
6052
- renderTrigger({ open: () => setInternalOpen(true) }),
6053
- mode === "drawer" ? /* @__PURE__ */ jsx34(Drawer, { open: isOpen, onOpenChange: (next) => !next ? handleClose() : setInternalOpen(next), children: /* @__PURE__ */ jsx34(DrawerContent, { className: "h-[90vh] p-6", children: content }) }) : /* @__PURE__ */ jsx34(Dialog, { open: isOpen, onOpenChange: (next) => !next ? handleClose() : setInternalOpen(next), children: /* @__PURE__ */ jsxs21(DialogContent, { className: "max-w-5xl z-[4600]", children: [
6054
- /* @__PURE__ */ jsx34(DialogTitle, { className: "sr-only", children: labels.title }),
6055
- /* @__PURE__ */ jsx34(DialogDescription, { className: "sr-only", children: "Sele\xE7\xE3o e upload de assets com metadados do Telescup." }),
6056
- content
6057
- ] }) })
6058
- ] });
6282
+ )
6283
+ ] });
6284
+ if (!isControlled && renderTrigger) {
6285
+ return /* @__PURE__ */ jsxs21(Fragment3, { children: [
6286
+ renderTrigger({ open: () => setInternalOpen(true) }),
6287
+ mode === "drawer" ? /* @__PURE__ */ jsx34(Drawer, { open: isOpen, onOpenChange: (next) => !next ? handleClose() : setInternalOpen(next), children: /* @__PURE__ */ jsx34(DrawerContent, { className: "h-[90vh] p-6", children: content }) }) : /* @__PURE__ */ jsx34(Dialog, { open: isOpen, onOpenChange: (next) => !next ? handleClose() : setInternalOpen(next), children: /* @__PURE__ */ jsxs21(DialogContent, { className: "max-w-5xl z-[4600]", children: [
6288
+ /* @__PURE__ */ jsx34(DialogTitle, { className: "sr-only", children: labels.title }),
6289
+ /* @__PURE__ */ jsx34(DialogDescription, { className: "sr-only", children: "Sele\xE7\xE3o e upload de assets com metadados do Telescup." }),
6290
+ content
6291
+ ] }) })
6292
+ ] });
6293
+ }
6294
+ if (!isControlled && !renderTrigger) {
6295
+ return /* @__PURE__ */ jsxs21(Fragment3, { children: [
6296
+ /* @__PURE__ */ jsx34(Button, { onClick: () => setInternalOpen(true), children: labels.actions.select }),
6297
+ mode === "drawer" ? /* @__PURE__ */ jsx34(Drawer, { open: isOpen, onOpenChange: (next) => !next ? handleClose() : setInternalOpen(next), children: /* @__PURE__ */ jsx34(DrawerContent, { className: "h-[90vh] p-6", children: content }) }) : /* @__PURE__ */ jsx34(Dialog, { open: isOpen, onOpenChange: (next) => !next ? handleClose() : setInternalOpen(next), children: /* @__PURE__ */ jsxs21(DialogContent, { className: "max-w-5xl z-[4600]", children: [
6298
+ /* @__PURE__ */ jsx34(DialogTitle, { className: "sr-only", children: labels.title }),
6299
+ /* @__PURE__ */ jsx34(DialogDescription, { className: "sr-only", children: "Sele\xE7\xE3o e upload de assets com metadados do Telescup." }),
6300
+ content
6301
+ ] }) })
6302
+ ] });
6303
+ }
6304
+ return mode === "drawer" ? /* @__PURE__ */ jsx34(Drawer, { open: Boolean(open), onOpenChange: (next) => !next ? handleClose() : void 0, children: /* @__PURE__ */ jsx34(DrawerContent, { className: "h-[90vh] p-6", children: content }) }) : /* @__PURE__ */ jsx34(Dialog, { open: Boolean(open), onOpenChange: (next) => !next ? handleClose() : void 0, children: /* @__PURE__ */ jsxs21(DialogContent, { className: "max-w-5xl z-[4600]", children: [
6305
+ /* @__PURE__ */ jsx34(DialogTitle, { className: "sr-only", children: labels.title }),
6306
+ /* @__PURE__ */ jsx34(DialogDescription, { className: "sr-only", children: "Sele\xE7\xE3o e upload de assets com metadados do Telescup." }),
6307
+ content
6308
+ ] }) });
6309
+ };
6310
+
6311
+ // src/lib/themePreference.ts
6312
+ var THEME_STORAGE_KEY = "cupcode-theme";
6313
+ var LEGACY_THEME_STORAGE_KEY = "theme";
6314
+ var THEME_PREFERENCE_STORAGE_KEY = "cupcode-theme-preference";
6315
+ var EXPERIENCE_SETTINGS_STORAGE_KEY = "cc_user_menu_experience_settings";
6316
+ var THEME_PREFERENCE_CHANGE_EVENT = "cupcode:theme-preference-change";
6317
+ function isStoredThemeMode(value) {
6318
+ return value === "light" || value === "dark";
6319
+ }
6320
+ function parseStoredThemePreference(value) {
6321
+ return value === "light" || value === "dark" || value === "system" ? value : null;
6322
+ }
6323
+ function normalizeStoredThemePreference(value) {
6324
+ var _a78;
6325
+ return (_a78 = parseStoredThemePreference(value)) != null ? _a78 : "system";
6326
+ }
6327
+ function readStoredThemeMode() {
6328
+ var _a78;
6329
+ if (typeof window === "undefined") return null;
6330
+ try {
6331
+ const storedTheme = (_a78 = window.localStorage.getItem(THEME_STORAGE_KEY)) != null ? _a78 : window.localStorage.getItem(LEGACY_THEME_STORAGE_KEY);
6332
+ return isStoredThemeMode(storedTheme) ? storedTheme : null;
6333
+ } catch (e) {
6334
+ return null;
6335
+ }
6336
+ }
6337
+ function resolveSystemThemeMode() {
6338
+ if (typeof window !== "undefined" && window.matchMedia("(prefers-color-scheme: dark)").matches) {
6339
+ return "dark";
6340
+ }
6341
+ return "light";
6342
+ }
6343
+ function resolveAppliedThemeMode(preference) {
6344
+ return preference === "system" ? resolveSystemThemeMode() : preference;
6345
+ }
6346
+ function readStoredExperienceSettingsRecord() {
6347
+ if (typeof window === "undefined") return null;
6348
+ try {
6349
+ const raw = window.localStorage.getItem(EXPERIENCE_SETTINGS_STORAGE_KEY);
6350
+ if (!raw) return null;
6351
+ const parsed = JSON.parse(raw);
6352
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
6353
+ return null;
6354
+ }
6355
+ return parsed;
6356
+ } catch (e) {
6357
+ return null;
6358
+ }
6359
+ }
6360
+ function persistThemePreferenceSelection(preference) {
6361
+ if (typeof window === "undefined") return;
6362
+ const appliedMode = resolveAppliedThemeMode(preference);
6363
+ try {
6364
+ window.localStorage.setItem(THEME_PREFERENCE_STORAGE_KEY, preference);
6365
+ window.localStorage.setItem(THEME_STORAGE_KEY, appliedMode);
6366
+ window.localStorage.setItem(LEGACY_THEME_STORAGE_KEY, appliedMode);
6367
+ const currentExperienceSettings = readStoredExperienceSettingsRecord();
6368
+ window.localStorage.setItem(
6369
+ EXPERIENCE_SETTINGS_STORAGE_KEY,
6370
+ JSON.stringify({
6371
+ ...currentExperienceSettings != null ? currentExperienceSettings : {},
6372
+ theme: preference
6373
+ })
6374
+ );
6375
+ } catch (e) {
6376
+ }
6377
+ window.dispatchEvent(
6378
+ new CustomEvent(THEME_PREFERENCE_CHANGE_EVENT, {
6379
+ detail: {
6380
+ appliedMode,
6381
+ preference
6382
+ }
6383
+ })
6384
+ );
6385
+ }
6386
+ function resolveStoredThemePreference(experienceSettingsTheme) {
6387
+ var _a78;
6388
+ if (typeof window === "undefined") {
6389
+ return normalizeStoredThemePreference(experienceSettingsTheme);
6059
6390
  }
6060
- if (!isControlled && !renderTrigger) {
6061
- return /* @__PURE__ */ jsxs21(Fragment3, { children: [
6062
- /* @__PURE__ */ jsx34(Button, { onClick: () => setInternalOpen(true), children: labels.actions.select }),
6063
- mode === "drawer" ? /* @__PURE__ */ jsx34(Drawer, { open: isOpen, onOpenChange: (next) => !next ? handleClose() : setInternalOpen(next), children: /* @__PURE__ */ jsx34(DrawerContent, { className: "h-[90vh] p-6", children: content }) }) : /* @__PURE__ */ jsx34(Dialog, { open: isOpen, onOpenChange: (next) => !next ? handleClose() : setInternalOpen(next), children: /* @__PURE__ */ jsxs21(DialogContent, { className: "max-w-5xl z-[4600]", children: [
6064
- /* @__PURE__ */ jsx34(DialogTitle, { className: "sr-only", children: labels.title }),
6065
- /* @__PURE__ */ jsx34(DialogDescription, { className: "sr-only", children: "Sele\xE7\xE3o e upload de assets com metadados do Telescup." }),
6066
- content
6067
- ] }) })
6068
- ] });
6391
+ try {
6392
+ const storedThemePreference = parseStoredThemePreference(
6393
+ window.localStorage.getItem(THEME_PREFERENCE_STORAGE_KEY)
6394
+ );
6395
+ if (storedThemePreference) {
6396
+ return storedThemePreference;
6397
+ }
6398
+ const parsedExperienceTheme = parseStoredThemePreference(experienceSettingsTheme);
6399
+ const storedThemeMode = readStoredThemeMode();
6400
+ if (parsedExperienceTheme === "system" && storedThemeMode) {
6401
+ return storedThemeMode;
6402
+ }
6403
+ return (_a78 = parsedExperienceTheme != null ? parsedExperienceTheme : storedThemeMode) != null ? _a78 : "system";
6404
+ } catch (e) {
6405
+ return normalizeStoredThemePreference(experienceSettingsTheme);
6069
6406
  }
6070
- return mode === "drawer" ? /* @__PURE__ */ jsx34(Drawer, { open: Boolean(open), onOpenChange: (next) => !next ? handleClose() : void 0, children: /* @__PURE__ */ jsx34(DrawerContent, { className: "h-[90vh] p-6", children: content }) }) : /* @__PURE__ */ jsx34(Dialog, { open: Boolean(open), onOpenChange: (next) => !next ? handleClose() : void 0, children: /* @__PURE__ */ jsxs21(DialogContent, { className: "max-w-5xl z-[4600]", children: [
6071
- /* @__PURE__ */ jsx34(DialogTitle, { className: "sr-only", children: labels.title }),
6072
- /* @__PURE__ */ jsx34(DialogDescription, { className: "sr-only", children: "Sele\xE7\xE3o e upload de assets com metadados do Telescup." }),
6073
- content
6074
- ] }) });
6075
- };
6407
+ }
6076
6408
 
6077
6409
  // src/components/cupcode/UserMenuCupcode.tsx
6078
6410
  import { Fragment as Fragment4, jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
@@ -6163,12 +6495,9 @@ var CHAT_DELETED_PLACEHOLDER_TEXT = "Mensagem deletada";
6163
6495
  var CHAT_GROUP_PREFIX = "local-group";
6164
6496
  var NOTIFICATIONS_VISIBLE_LIMIT = 8;
6165
6497
  var CHAT_SETTINGS_STORAGE_KEY = "cc_user_menu_chat_settings";
6166
- var EXPERIENCE_SETTINGS_STORAGE_KEY = "cc_user_menu_experience_settings";
6498
+ var EXPERIENCE_SETTINGS_STORAGE_KEY2 = "cc_user_menu_experience_settings";
6167
6499
  var NOTIFICATION_PREFERENCES_STORAGE_KEY = "cc_user_menu_notification_preferences";
6168
6500
  var INTEGRATION_SETTINGS_STORAGE_KEY = "cc_user_menu_integration_connections";
6169
- var THEME_PREFERENCE_STORAGE_KEY = "cupcode-theme-preference";
6170
- var THEME_STORAGE_KEY = "cupcode-theme";
6171
- var LEGACY_THEME_STORAGE_KEY = "theme";
6172
6501
  var SHARED_FILE_URL_REGEX = /https?:\/\/[^\s]+/gi;
6173
6502
  var SHARED_FILE_EXTENSIONS = [
6174
6503
  ".pdf",
@@ -6345,12 +6674,6 @@ var defaultExperienceSettings = () => ({
6345
6674
  contrast: "normal",
6346
6675
  showEmailPublicly: true
6347
6676
  });
6348
- var normalizeThemePreference = (value) => {
6349
- const normalized = value == null ? void 0 : value.trim().toLowerCase();
6350
- if (normalized === "light") return "light";
6351
- if (normalized === "dark") return "dark";
6352
- return "system";
6353
- };
6354
6677
  var normalizeDensityMode = (value) => {
6355
6678
  return (value == null ? void 0 : value.trim().toLowerCase()) === "comfortable" ? "comfortable" : "compact";
6356
6679
  };
@@ -6358,16 +6681,13 @@ var normalizeContrastMode = (value) => {
6358
6681
  return (value == null ? void 0 : value.trim().toLowerCase()) === "high" ? "high" : "normal";
6359
6682
  };
6360
6683
  var readStoredExperienceSettings = () => {
6361
- var _a78, _b7, _c;
6362
6684
  const fallback = defaultExperienceSettings();
6363
6685
  if (typeof window === "undefined") return fallback;
6364
6686
  try {
6365
- const raw = window.localStorage.getItem(EXPERIENCE_SETTINGS_STORAGE_KEY);
6687
+ const raw = window.localStorage.getItem(EXPERIENCE_SETTINGS_STORAGE_KEY2);
6366
6688
  const parsed = raw ? JSON.parse(raw) : null;
6367
- const storedThemePreference = window.localStorage.getItem(THEME_PREFERENCE_STORAGE_KEY);
6368
- const legacyTheme = (_a78 = window.localStorage.getItem(THEME_STORAGE_KEY)) != null ? _a78 : window.localStorage.getItem(LEGACY_THEME_STORAGE_KEY);
6369
6689
  return {
6370
- theme: normalizeThemePreference((_c = (_b7 = parsed == null ? void 0 : parsed.theme) != null ? _b7 : storedThemePreference) != null ? _c : legacyTheme),
6690
+ theme: resolveStoredThemePreference(parsed == null ? void 0 : parsed.theme),
6371
6691
  density: normalizeDensityMode(parsed == null ? void 0 : parsed.density),
6372
6692
  contrast: normalizeContrastMode(parsed == null ? void 0 : parsed.contrast),
6373
6693
  showEmailPublicly: typeof (parsed == null ? void 0 : parsed.showEmailPublicly) === "boolean" ? parsed.showEmailPublicly : fallback.showEmailPublicly
@@ -6379,7 +6699,7 @@ var readStoredExperienceSettings = () => {
6379
6699
  var persistExperienceSettings = (settings) => {
6380
6700
  if (typeof window === "undefined") return;
6381
6701
  try {
6382
- window.localStorage.setItem(EXPERIENCE_SETTINGS_STORAGE_KEY, JSON.stringify(settings));
6702
+ window.localStorage.setItem(EXPERIENCE_SETTINGS_STORAGE_KEY2, JSON.stringify(settings));
6383
6703
  } catch (e) {
6384
6704
  }
6385
6705
  };
@@ -6411,15 +6731,6 @@ var persistIntegrationConnections = (connections) => {
6411
6731
  } catch (e) {
6412
6732
  }
6413
6733
  };
6414
- var resolveSystemThemeMode = () => {
6415
- if (typeof window !== "undefined" && window.matchMedia("(prefers-color-scheme: dark)").matches) {
6416
- return "dark";
6417
- }
6418
- return "light";
6419
- };
6420
- var resolveAppliedThemeMode = (preference) => {
6421
- return preference === "system" ? resolveSystemThemeMode() : preference;
6422
- };
6423
6734
  var applyThemePreference = (preference) => {
6424
6735
  if (typeof document === "undefined") return;
6425
6736
  const root = document.documentElement;
@@ -6429,13 +6740,7 @@ var applyThemePreference = (preference) => {
6429
6740
  root.dataset.theme = appliedMode;
6430
6741
  root.dataset.cupcodeTheme = preference;
6431
6742
  root.style.colorScheme = appliedMode;
6432
- if (typeof window === "undefined") return;
6433
- try {
6434
- window.localStorage.setItem(THEME_PREFERENCE_STORAGE_KEY, preference);
6435
- window.localStorage.setItem(THEME_STORAGE_KEY, appliedMode);
6436
- window.localStorage.setItem(LEGACY_THEME_STORAGE_KEY, appliedMode);
6437
- } catch (e) {
6438
- }
6743
+ persistThemePreferenceSelection(preference);
6439
6744
  };
6440
6745
  var applyAccessibilityAttributes = (settings) => {
6441
6746
  if (typeof document === "undefined") return;
@@ -7240,6 +7545,17 @@ var UserMenuCupcode = ({
7240
7545
  useEffect12(() => {
7241
7546
  applyThemePreference(experienceSettings.theme);
7242
7547
  }, [experienceSettings.theme]);
7548
+ useEffect12(() => {
7549
+ if (typeof window === "undefined") return;
7550
+ const syncThemePreference = () => {
7551
+ const nextThemePreference = resolveStoredThemePreference();
7552
+ setExperienceSettings(
7553
+ (current) => current.theme === nextThemePreference ? current : { ...current, theme: nextThemePreference }
7554
+ );
7555
+ };
7556
+ window.addEventListener(THEME_PREFERENCE_CHANGE_EVENT, syncThemePreference);
7557
+ return () => window.removeEventListener(THEME_PREFERENCE_CHANGE_EVENT, syncThemePreference);
7558
+ }, []);
7243
7559
  useEffect12(() => {
7244
7560
  applyAccessibilityAttributes(experienceSettings);
7245
7561
  }, [experienceSettings]);
@@ -21946,13 +22262,15 @@ function ThemeToggle({ className }) {
21946
22262
  /* @__PURE__ */ jsx38("style", { children: `
21947
22263
  :root {
21948
22264
  --toggle-width: 76px;
21949
- --toggle-height: 42px;
22265
+ --toggle-height: 38px;
21950
22266
  --thumb-size: 30px;
21951
22267
  --toggle-thumb-offset: 34px;
21952
22268
  --duration: 560ms;
21953
22269
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
21954
22270
  --dark-top: #7c5bbb;
21955
22271
  --dark-bottom: #3a2a58;
22272
+ --toggle-track-alpha-light: 0.88;
22273
+ --toggle-track-alpha-dark: 0.82;
21956
22274
  }
21957
22275
 
21958
22276
  .cc-theme-toggle {
@@ -21972,7 +22290,12 @@ function ThemeToggle({ className }) {
21972
22290
  height: var(--toggle-height);
21973
22291
  border-radius: 999px;
21974
22292
  overflow: hidden;
21975
- background: linear-gradient(180deg, #f7f6fb 0%, #f1edf9 55%, #e6def5 100%);
22293
+ background: linear-gradient(
22294
+ 180deg,
22295
+ rgba(247, 246, 251, var(--toggle-track-alpha-light)) 0%,
22296
+ rgba(241, 237, 249, var(--toggle-track-alpha-light)) 55%,
22297
+ rgba(230, 222, 245, var(--toggle-track-alpha-light)) 100%
22298
+ );
21976
22299
  box-shadow:
21977
22300
  inset 0 1px 0 rgba(255, 255, 255, 0.92),
21978
22301
  inset 0 0 0 1px rgba(232, 219, 255, 0.85),
@@ -22086,7 +22409,11 @@ function ThemeToggle({ className }) {
22086
22409
  }
22087
22410
 
22088
22411
  .cc-theme-toggle.is-dark .track {
22089
- background: linear-gradient(180deg, var(--dark-top) 0%, var(--dark-bottom) 100%);
22412
+ background: linear-gradient(
22413
+ 180deg,
22414
+ rgba(124, 91, 187, var(--toggle-track-alpha-dark)) 0%,
22415
+ rgba(58, 42, 88, var(--toggle-track-alpha-dark)) 100%
22416
+ );
22090
22417
  box-shadow:
22091
22418
  inset 0 2px 8px rgba(255, 255, 255, 0.06),
22092
22419
  inset 0 -4px 12px rgba(0, 0, 0, 0.28),
@@ -22101,7 +22428,7 @@ function ThemeToggle({ className }) {
22101
22428
 
22102
22429
  .cc-theme-toggle .thumb {
22103
22430
  position: absolute;
22104
- top: 6px;
22431
+ top: 4px;
22105
22432
  left: 6px;
22106
22433
  width: var(--thumb-size);
22107
22434
  height: var(--thumb-size);
@@ -25456,7 +25783,6 @@ function ParticleSystem({
25456
25783
  canvas.height = canvas.offsetHeight;
25457
25784
  };
25458
25785
  resizeCanvas();
25459
- window.addEventListener("resize", resizeCanvas);
25460
25786
  const particles = [];
25461
25787
  for (let i = 0; i < count2; i++) {
25462
25788
  particles.push({
@@ -25468,16 +25794,17 @@ function ParticleSystem({
25468
25794
  opacity: Math.random() * 0.5 + 0.5
25469
25795
  });
25470
25796
  }
25471
- let animationId;
25472
- const animate = () => {
25797
+ const drawFrame = () => {
25798
+ const width = canvas.width;
25799
+ const height = canvas.height;
25473
25800
  ctx.clearRect(0, 0, canvas.width, canvas.height);
25474
25801
  particles.forEach((particle) => {
25475
25802
  particle.x += particle.speedX;
25476
25803
  particle.y += particle.speedY;
25477
- if (particle.x < 0) particle.x = canvas.width;
25478
- if (particle.x > canvas.width) particle.x = 0;
25479
- if (particle.y < 0) particle.y = canvas.height;
25480
- if (particle.y > canvas.height) particle.y = 0;
25804
+ if (particle.x < 0) particle.x = width;
25805
+ if (particle.x > width) particle.x = 0;
25806
+ if (particle.y < 0) particle.y = height;
25807
+ if (particle.y > height) particle.y = 0;
25481
25808
  if (variant === "stars") {
25482
25809
  ctx.fillStyle = `rgba(151, 90, 182, ${particle.opacity})`;
25483
25810
  ctx.beginPath();
@@ -25503,12 +25830,98 @@ function ParticleSystem({
25503
25830
  ctx.stroke();
25504
25831
  }
25505
25832
  });
25833
+ };
25834
+ let animationId = 0;
25835
+ let running = false;
25836
+ let isVisible = false;
25837
+ let lastFrameTime = 0;
25838
+ const minFrameMs = variant === "comets" ? 32 : 24;
25839
+ const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)");
25840
+ const canAnimate = () => isVisible && !document.hidden && !prefersReducedMotion.matches;
25841
+ const animate = (timestamp) => {
25842
+ if (!running) return;
25843
+ if (timestamp - lastFrameTime >= minFrameMs) {
25844
+ lastFrameTime = timestamp;
25845
+ drawFrame();
25846
+ }
25506
25847
  animationId = requestAnimationFrame(animate);
25507
25848
  };
25508
- animate();
25849
+ const stop = () => {
25850
+ running = false;
25851
+ if (animationId) {
25852
+ cancelAnimationFrame(animationId);
25853
+ animationId = 0;
25854
+ }
25855
+ };
25856
+ const start = () => {
25857
+ if (running || !canAnimate()) return;
25858
+ running = true;
25859
+ lastFrameTime = 0;
25860
+ animationId = requestAnimationFrame(animate);
25861
+ };
25862
+ const onDocumentVisibilityChange = () => {
25863
+ if (canAnimate()) {
25864
+ start();
25865
+ } else {
25866
+ stop();
25867
+ }
25868
+ };
25869
+ const onReducedMotionChange = () => {
25870
+ if (canAnimate()) {
25871
+ start();
25872
+ } else {
25873
+ stop();
25874
+ }
25875
+ };
25876
+ const onResize = () => {
25877
+ resizeCanvas();
25878
+ if (!running) {
25879
+ drawFrame();
25880
+ }
25881
+ };
25882
+ const observer = typeof IntersectionObserver === "undefined" ? null : new IntersectionObserver(
25883
+ (entries) => {
25884
+ const entry = entries[0];
25885
+ isVisible = Boolean(entry == null ? void 0 : entry.isIntersecting);
25886
+ if (canAnimate()) {
25887
+ start();
25888
+ } else {
25889
+ stop();
25890
+ }
25891
+ },
25892
+ {
25893
+ root: null,
25894
+ threshold: 0.01,
25895
+ rootMargin: "200px 0px"
25896
+ }
25897
+ );
25898
+ const rect = canvas.getBoundingClientRect();
25899
+ isVisible = rect.bottom >= -200 && rect.top <= window.innerHeight + 200;
25900
+ if (observer) {
25901
+ observer.observe(canvas);
25902
+ }
25903
+ window.addEventListener("resize", onResize);
25904
+ document.addEventListener("visibilitychange", onDocumentVisibilityChange);
25905
+ if (typeof prefersReducedMotion.addEventListener === "function") {
25906
+ prefersReducedMotion.addEventListener("change", onReducedMotionChange);
25907
+ } else {
25908
+ prefersReducedMotion.addListener(onReducedMotionChange);
25909
+ }
25910
+ if (canAnimate()) {
25911
+ start();
25912
+ } else {
25913
+ drawFrame();
25914
+ }
25509
25915
  return () => {
25510
- window.removeEventListener("resize", resizeCanvas);
25511
- cancelAnimationFrame(animationId);
25916
+ window.removeEventListener("resize", onResize);
25917
+ document.removeEventListener("visibilitychange", onDocumentVisibilityChange);
25918
+ if (typeof prefersReducedMotion.removeEventListener === "function") {
25919
+ prefersReducedMotion.removeEventListener("change", onReducedMotionChange);
25920
+ } else {
25921
+ prefersReducedMotion.removeListener(onReducedMotionChange);
25922
+ }
25923
+ observer == null ? void 0 : observer.disconnect();
25924
+ stop();
25512
25925
  };
25513
25926
  }, [count2, variant]);
25514
25927
  return /* @__PURE__ */ jsx49(
@@ -25928,10 +26341,25 @@ var TextareaField = React32.forwardRef(
25928
26341
  );
25929
26342
  TextareaField.displayName = "TextareaField";
25930
26343
 
26344
+ // src/components/cupcode/ThemeBackground.tsx
26345
+ import { Suspense, lazy } from "react";
26346
+ import { jsx as jsx57 } from "react/jsx-runtime";
26347
+ var BackgroundRainbow2 = lazy(
26348
+ () => Promise.resolve().then(() => (init_BackgroundRainbow(), BackgroundRainbow_exports)).then((module) => ({ default: module.BackgroundRainbow }))
26349
+ );
26350
+ var BackgroundStars2 = lazy(
26351
+ () => Promise.resolve().then(() => (init_BackgroundStars(), BackgroundStars_exports)).then((module) => ({ default: module.BackgroundStars }))
26352
+ );
26353
+ var ThemeBackground = ({ enableStars = true }) => {
26354
+ const { theme } = useAppTheme();
26355
+ const isDark = theme === "dark";
26356
+ return /* @__PURE__ */ jsx57(Suspense, { fallback: null, children: isDark ? enableStars ? /* @__PURE__ */ jsx57(BackgroundStars2, {}) : null : /* @__PURE__ */ jsx57(BackgroundRainbow2, {}) });
26357
+ };
26358
+
25931
26359
  // src/components/cupcode/ThemeToggle.tsx
25932
26360
  import * as React33 from "react";
25933
26361
  import { Moon as Moon2, Sun as Sun2 } from "lucide-react";
25934
- import { jsx as jsx57, jsxs as jsxs37 } from "react/jsx-runtime";
26362
+ import { jsx as jsx58, jsxs as jsxs37 } from "react/jsx-runtime";
25935
26363
  var THEME_STORAGE_KEY2 = "cupcode-theme";
25936
26364
  function isThemeMode(value) {
25937
26365
  return value === "light" || value === "dark";
@@ -25990,35 +26418,48 @@ var ThemeToggle2 = ({
25990
26418
  onThemeChange
25991
26419
  }) => {
25992
26420
  var _a78;
26421
+ const themeContext = React33.useContext(ThemeContext);
25993
26422
  const [mounted, setMounted] = React33.useState(false);
25994
26423
  const [internalTheme, setInternalTheme] = React33.useState(defaultTheme);
25995
26424
  const isControlled = typeof theme !== "undefined";
25996
- const activeTheme = (_a78 = isControlled ? theme : internalTheme) != null ? _a78 : defaultTheme;
26425
+ const usesProviderTheme = !isControlled && themeContext !== null;
26426
+ const activeTheme = (_a78 = isControlled ? theme : usesProviderTheme ? themeContext.theme : internalTheme) != null ? _a78 : defaultTheme;
25997
26427
  React33.useEffect(() => {
25998
- if (!isControlled) {
26428
+ if (!isControlled && !usesProviderTheme) {
25999
26429
  setInternalTheme(resolveTheme(defaultTheme));
26000
26430
  }
26001
26431
  setMounted(true);
26002
- }, [defaultTheme, isControlled]);
26432
+ }, [defaultTheme, isControlled, usesProviderTheme]);
26003
26433
  React33.useEffect(() => {
26004
- if (!mounted) return;
26434
+ if (!mounted || usesProviderTheme) return;
26005
26435
  applyThemeClass(activeTheme);
26006
26436
  writeStoredTheme(activeTheme);
26007
- }, [activeTheme, mounted]);
26437
+ }, [activeTheme, mounted, usesProviderTheme]);
26008
26438
  React33.useEffect(() => {
26009
- if (isControlled || typeof document === "undefined") return;
26439
+ if (isControlled || usesProviderTheme || typeof document === "undefined") return;
26010
26440
  const observer = new MutationObserver(() => {
26011
26441
  const resolvedTheme = resolveTheme(defaultTheme);
26012
26442
  setInternalTheme((currentTheme) => currentTheme === resolvedTheme ? currentTheme : resolvedTheme);
26013
26443
  });
26014
26444
  observer.observe(document.documentElement, { attributes: true, attributeFilter: ["class", "data-theme"] });
26015
26445
  return () => observer.disconnect();
26016
- }, [defaultTheme, isControlled]);
26446
+ }, [defaultTheme, isControlled, usesProviderTheme]);
26017
26447
  if (!mounted) {
26018
- return /* @__PURE__ */ jsx57("div", { className: cn("w-10 h-10 rounded-lg bg-muted", className) });
26448
+ return /* @__PURE__ */ jsx58("div", { className: cn("w-10 h-10 rounded-lg bg-muted", className) });
26019
26449
  }
26020
- const handleToggle = () => {
26021
- const nextTheme = activeTheme === "dark" ? "light" : "dark";
26450
+ const handleToggle = (event) => {
26451
+ var _a79;
26452
+ const currentTheme = (_a79 = readThemeFromRoot()) != null ? _a79 : activeTheme;
26453
+ const nextTheme = currentTheme === "dark" ? "light" : "dark";
26454
+ if (usesProviderTheme) {
26455
+ themeContext.toggleTheme({
26456
+ x: event.clientX,
26457
+ y: event.clientY
26458
+ });
26459
+ onThemeChange == null ? void 0 : onThemeChange(nextTheme);
26460
+ return;
26461
+ }
26462
+ persistThemePreferenceSelection(nextTheme);
26022
26463
  if (!isControlled) {
26023
26464
  setInternalTheme(nextTheme);
26024
26465
  }
@@ -26038,8 +26479,8 @@ var ThemeToggle2 = ({
26038
26479
  ),
26039
26480
  "aria-label": "Toggle theme",
26040
26481
  children: [
26041
- /* @__PURE__ */ jsx57(Sun2, { className: "h-5 w-5 text-cupcode-purple rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" }),
26042
- /* @__PURE__ */ jsx57(Moon2, { className: "absolute h-5 w-5 text-cupcode-hover rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" }),
26482
+ /* @__PURE__ */ jsx58(Sun2, { className: "h-5 w-5 text-cupcode-purple rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" }),
26483
+ /* @__PURE__ */ jsx58(Moon2, { className: "absolute h-5 w-5 text-cupcode-hover rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" }),
26043
26484
  /* @__PURE__ */ jsxs37("span", { className: "sr-only", children: [
26044
26485
  "Current theme: ",
26045
26486
  activeTheme
@@ -26050,14 +26491,9 @@ var ThemeToggle2 = ({
26050
26491
  };
26051
26492
 
26052
26493
  // src/components/theme-provider.tsx
26053
- import {
26054
- useCallback as useCallback8,
26055
- useEffect as useEffect20,
26056
- useMemo as useMemo12,
26057
- useState as useState17
26058
- } from "react";
26494
+ import { useCallback as useCallback8, useEffect as useEffect20, useMemo as useMemo12, useState as useState17 } from "react";
26059
26495
  import { flushSync } from "react-dom";
26060
- import { jsx as jsx58 } from "react/jsx-runtime";
26496
+ import { jsx as jsx59 } from "react/jsx-runtime";
26061
26497
  var STORAGE_KEY2 = "cupcode-theme";
26062
26498
  var LEGACY_STORAGE_KEY = "theme";
26063
26499
  function getPreferredTheme() {
@@ -26119,8 +26555,14 @@ function ThemeProvider({ children }) {
26119
26555
  if (!mounted) {
26120
26556
  return;
26121
26557
  }
26122
- persistTheme(theme);
26123
- applyThemeToRoot(theme);
26558
+ const rootTheme = getThemeFromRoot();
26559
+ if (rootTheme !== theme) {
26560
+ applyThemeToRoot(theme);
26561
+ }
26562
+ const storedTheme = getStoredTheme();
26563
+ if (storedTheme !== theme) {
26564
+ persistTheme(theme);
26565
+ }
26124
26566
  }, [mounted, theme]);
26125
26567
  useEffect20(() => {
26126
26568
  if (typeof window === "undefined") {
@@ -26156,35 +26598,47 @@ function ThemeProvider({ children }) {
26156
26598
  });
26157
26599
  return () => observer.disconnect();
26158
26600
  }, []);
26159
- const setTheme = useCallback8((nextTheme) => {
26160
- setThemeState(nextTheme);
26161
- }, []);
26162
- const toggleTheme = useCallback8((coords) => {
26601
+ const applyThemeSelection = useCallback8((nextTheme, coords) => {
26163
26602
  var _a78;
26164
26603
  const documentWithTransition = document;
26604
+ const root = document.documentElement;
26165
26605
  const prefersReducedMotion = window.matchMedia(
26166
26606
  "(prefers-reduced-motion: reduce)"
26167
26607
  ).matches;
26168
26608
  const supportsTransition = typeof documentWithTransition.startViewTransition === "function";
26169
- const flipTheme = () => {
26609
+ const commitTheme = () => {
26610
+ applyThemeToRoot(nextTheme);
26611
+ persistThemePreferenceSelection(nextTheme);
26170
26612
  setThemeState(
26171
- (currentTheme) => currentTheme === "light" ? "dark" : "light"
26613
+ (currentTheme) => currentTheme === nextTheme ? currentTheme : nextTheme
26172
26614
  );
26173
26615
  };
26174
- if (coords) {
26175
- document.documentElement.style.setProperty("--theme-x", `${coords.x}px`);
26176
- document.documentElement.style.setProperty("--theme-y", `${coords.y}px`);
26177
- }
26178
26616
  if (!supportsTransition || prefersReducedMotion) {
26179
- flipTheme();
26617
+ commitTheme();
26180
26618
  return;
26181
26619
  }
26620
+ if (coords) {
26621
+ root.style.setProperty("--theme-x", `${coords.x}px`);
26622
+ root.style.setProperty("--theme-y", `${coords.y}px`);
26623
+ } else {
26624
+ root.style.setProperty("--theme-x", "50%");
26625
+ root.style.setProperty("--theme-y", "50%");
26626
+ }
26182
26627
  (_a78 = documentWithTransition.startViewTransition) == null ? void 0 : _a78.call(documentWithTransition, () => {
26183
26628
  flushSync(() => {
26184
- flipTheme();
26629
+ commitTheme();
26185
26630
  });
26186
26631
  });
26187
26632
  }, []);
26633
+ const setTheme = useCallback8((nextTheme) => {
26634
+ applyThemeSelection(nextTheme);
26635
+ }, [applyThemeSelection]);
26636
+ const toggleTheme = useCallback8((coords) => {
26637
+ var _a78;
26638
+ const currentTheme = (_a78 = getThemeFromRoot()) != null ? _a78 : theme;
26639
+ const nextTheme = currentTheme === "light" ? "dark" : "light";
26640
+ applyThemeSelection(nextTheme, coords);
26641
+ }, [applyThemeSelection, theme]);
26188
26642
  const value = useMemo12(
26189
26643
  () => ({
26190
26644
  theme,
@@ -26193,7 +26647,7 @@ function ThemeProvider({ children }) {
26193
26647
  }),
26194
26648
  [theme, setTheme, toggleTheme]
26195
26649
  );
26196
- return /* @__PURE__ */ jsx58(ThemeContext.Provider, { value, children });
26650
+ return /* @__PURE__ */ jsx59(ThemeContext.Provider, { value, children });
26197
26651
  }
26198
26652
  function ThemeScript() {
26199
26653
  const script = `
@@ -26214,15 +26668,15 @@ function ThemeScript() {
26214
26668
  root.style.colorScheme = theme;
26215
26669
  })();
26216
26670
  `;
26217
- return /* @__PURE__ */ jsx58("script", { dangerouslySetInnerHTML: { __html: script } });
26671
+ return /* @__PURE__ */ jsx59("script", { dangerouslySetInnerHTML: { __html: script } });
26218
26672
  }
26219
26673
 
26220
26674
  // src/components/cupcode/TimelineCupcode.tsx
26221
- import { jsx as jsx59, jsxs as jsxs38 } from "react/jsx-runtime";
26675
+ import { jsx as jsx60, jsxs as jsxs38 } from "react/jsx-runtime";
26222
26676
  function Timeline({ items, variant = "vertical", className }) {
26223
26677
  if (variant === "horizontal") {
26224
- return /* @__PURE__ */ jsx59("div", { className: cn("flex items-start gap-4 overflow-x-auto pb-4", className), children: items.map((item, index) => /* @__PURE__ */ jsxs38("div", { className: "flex flex-col items-center min-w-[200px]", children: [
26225
- /* @__PURE__ */ jsx59(
26678
+ return /* @__PURE__ */ jsx60("div", { className: cn("flex items-start gap-4 overflow-x-auto pb-4", className), children: items.map((item, index) => /* @__PURE__ */ jsxs38("div", { className: "flex flex-col items-center min-w-[200px]", children: [
26679
+ /* @__PURE__ */ jsx60(
26226
26680
  "div",
26227
26681
  {
26228
26682
  className: cn(
@@ -26230,27 +26684,27 @@ function Timeline({ items, variant = "vertical", className }) {
26230
26684
  "transition-all duration-300",
26231
26685
  item.active ? "cc-gradient-galaxy text-white elevation-3 scale-110" : "bg-muted text-muted-foreground"
26232
26686
  ),
26233
- children: item.icon || /* @__PURE__ */ jsx59("span", { className: "text-sm font-bold", children: index + 1 })
26687
+ children: item.icon || /* @__PURE__ */ jsx60("span", { className: "text-sm font-bold", children: index + 1 })
26234
26688
  }
26235
26689
  ),
26236
- index < items.length - 1 && /* @__PURE__ */ jsx59("div", { className: cn(
26690
+ index < items.length - 1 && /* @__PURE__ */ jsx60("div", { className: cn(
26237
26691
  "h-1 w-full mb-3",
26238
26692
  item.active ? "bg-cupcode-purple" : "bg-muted"
26239
26693
  ) }),
26240
26694
  /* @__PURE__ */ jsxs38("div", { className: "text-center", children: [
26241
- /* @__PURE__ */ jsx59("h4", { className: cn(
26695
+ /* @__PURE__ */ jsx60("h4", { className: cn(
26242
26696
  "font-display font-semibold mb-1",
26243
26697
  item.active ? "text-cupcode-purple" : "text-foreground"
26244
26698
  ), children: item.title }),
26245
- item.description && /* @__PURE__ */ jsx59("p", { className: "text-sm text-muted-foreground", children: item.description }),
26246
- item.date && /* @__PURE__ */ jsx59("p", { className: "text-xs text-muted-foreground mt-1", children: item.date })
26699
+ item.description && /* @__PURE__ */ jsx60("p", { className: "text-sm text-muted-foreground", children: item.description }),
26700
+ item.date && /* @__PURE__ */ jsx60("p", { className: "text-xs text-muted-foreground mt-1", children: item.date })
26247
26701
  ] })
26248
26702
  ] }, item.id)) });
26249
26703
  }
26250
26704
  return /* @__PURE__ */ jsxs38("div", { className: cn("relative space-6", className), children: [
26251
- /* @__PURE__ */ jsx59("div", { className: "absolute left-6 top-0 bottom-0 w-0.5 bg-muted" }),
26705
+ /* @__PURE__ */ jsx60("div", { className: "absolute left-6 top-0 bottom-0 w-0.5 bg-muted" }),
26252
26706
  items.map((item, index) => /* @__PURE__ */ jsxs38("div", { className: "relative flex gap-6 pb-8 last:pb-0", children: [
26253
- /* @__PURE__ */ jsx59(
26707
+ /* @__PURE__ */ jsx60(
26254
26708
  "div",
26255
26709
  {
26256
26710
  className: cn(
@@ -26258,16 +26712,16 @@ function Timeline({ items, variant = "vertical", className }) {
26258
26712
  "transition-all duration-300",
26259
26713
  item.active ? "cc-gradient-galaxy text-white elevation-3" : "bg-muted text-muted-foreground"
26260
26714
  ),
26261
- children: item.icon || /* @__PURE__ */ jsx59("span", { className: "text-sm font-bold", children: index + 1 })
26715
+ children: item.icon || /* @__PURE__ */ jsx60("span", { className: "text-sm font-bold", children: index + 1 })
26262
26716
  }
26263
26717
  ),
26264
26718
  /* @__PURE__ */ jsxs38("div", { className: "flex-1 pt-1", children: [
26265
- /* @__PURE__ */ jsx59("h4", { className: cn(
26719
+ /* @__PURE__ */ jsx60("h4", { className: cn(
26266
26720
  "font-display font-semibold mb-1",
26267
26721
  item.active ? "text-cupcode-purple" : "text-foreground"
26268
26722
  ), children: item.title }),
26269
- item.description && /* @__PURE__ */ jsx59("p", { className: "text-sm text-muted-foreground mb-2", children: item.description }),
26270
- item.date && /* @__PURE__ */ jsx59("p", { className: "text-xs text-muted-foreground", children: item.date })
26723
+ item.description && /* @__PURE__ */ jsx60("p", { className: "text-sm text-muted-foreground mb-2", children: item.description }),
26724
+ item.date && /* @__PURE__ */ jsx60("p", { className: "text-xs text-muted-foreground", children: item.date })
26271
26725
  ] })
26272
26726
  ] }, item.id))
26273
26727
  ] });
@@ -26275,7 +26729,7 @@ function Timeline({ items, variant = "vertical", className }) {
26275
26729
 
26276
26730
  // src/components/cupcode/ToastCupcode.tsx
26277
26731
  import { X as X6, CheckCircle, AlertCircle, Info as Info2, AlertTriangle as AlertTriangle2 } from "lucide-react";
26278
- import { jsx as jsx60, jsxs as jsxs39 } from "react/jsx-runtime";
26732
+ import { jsx as jsx61, jsxs as jsxs39 } from "react/jsx-runtime";
26279
26733
  var variantStyles2 = {
26280
26734
  success: {
26281
26735
  gradient: "from-success/20 to-success/5",
@@ -26310,7 +26764,7 @@ var ToastCupcode = ({
26310
26764
  }) => {
26311
26765
  const style = variantStyles2[variant];
26312
26766
  const Icon3 = style.icon;
26313
- return /* @__PURE__ */ jsx60(
26767
+ return /* @__PURE__ */ jsx61(
26314
26768
  "div",
26315
26769
  {
26316
26770
  className: cn(
@@ -26323,17 +26777,17 @@ var ToastCupcode = ({
26323
26777
  "animate-slide-up"
26324
26778
  ),
26325
26779
  children: /* @__PURE__ */ jsxs39("div", { className: "flex items-start gap-3", children: [
26326
- /* @__PURE__ */ jsx60(Icon3, { className: cn("h-5 w-5 shrink-0 mt-0.5", style.iconColor) }),
26780
+ /* @__PURE__ */ jsx61(Icon3, { className: cn("h-5 w-5 shrink-0 mt-0.5", style.iconColor) }),
26327
26781
  /* @__PURE__ */ jsxs39("div", { className: "flex-1 space-y-1", children: [
26328
- /* @__PURE__ */ jsx60("p", { className: "text-sm font-semibold text-cupcode-ink", children: title }),
26329
- description && /* @__PURE__ */ jsx60("p", { className: "text-xs text-cupcode-ink/70", children: description })
26782
+ /* @__PURE__ */ jsx61("p", { className: "text-sm font-semibold text-foreground", children: title }),
26783
+ description && /* @__PURE__ */ jsx61("p", { className: "text-xs text-foreground/80", children: description })
26330
26784
  ] }),
26331
- onClose && /* @__PURE__ */ jsx60(
26785
+ onClose && /* @__PURE__ */ jsx61(
26332
26786
  "button",
26333
26787
  {
26334
26788
  onClick: onClose,
26335
- className: "shrink-0 rounded-md p-1 hover:bg-cupcode-ink/10 transition-colors",
26336
- children: /* @__PURE__ */ jsx60(X6, { className: "h-4 w-4 text-cupcode-ink/50" })
26789
+ className: "shrink-0 rounded-md p-1 transition-colors hover:bg-foreground/10",
26790
+ children: /* @__PURE__ */ jsx61(X6, { className: "h-4 w-4 text-foreground/60" })
26337
26791
  }
26338
26792
  )
26339
26793
  ] })
@@ -26342,10 +26796,10 @@ var ToastCupcode = ({
26342
26796
  };
26343
26797
 
26344
26798
  // src/components/cupcode/VideoWatchButton.tsx
26345
- import React35 from "react";
26346
- import { jsx as jsx61, jsxs as jsxs40 } from "react/jsx-runtime";
26347
- var PlayGlyph = () => /* @__PURE__ */ jsx61("svg", { viewBox: "0 0 18 18", "aria-hidden": "true", className: "h-[18px] w-[18px]", children: /* @__PURE__ */ jsx61("path", { d: "M6 4.5L13.5 9L6 13.5V4.5Z", fill: "currentColor" }) });
26348
- var VideoWatchButton = React35.forwardRef(
26799
+ import React34 from "react";
26800
+ import { jsx as jsx62, jsxs as jsxs40 } from "react/jsx-runtime";
26801
+ var PlayGlyph = () => /* @__PURE__ */ jsx62("svg", { viewBox: "0 0 18 18", "aria-hidden": "true", className: "h-[18px] w-[18px]", children: /* @__PURE__ */ jsx62("path", { d: "M6 4.5L13.5 9L6 13.5V4.5Z", fill: "currentColor" }) });
26802
+ var VideoWatchButton = React34.forwardRef(
26349
26803
  ({ className, label = "Assistir", type = "button", "aria-label": ariaLabel, ...props }, ref) => {
26350
26804
  return /* @__PURE__ */ jsxs40(
26351
26805
  "button",
@@ -26357,17 +26811,17 @@ var VideoWatchButton = React35.forwardRef(
26357
26811
  ...props,
26358
26812
  children: [
26359
26813
  /* @__PURE__ */ jsxs40("span", { className: "cc-video-watch-btn__bg", children: [
26360
- /* @__PURE__ */ jsx61("span", { className: "cc-video-watch-btn__icon", children: /* @__PURE__ */ jsx61(PlayGlyph, {}) }),
26361
- /* @__PURE__ */ jsx61("span", { className: "cc-video-watch-btn__label", children: label }),
26814
+ /* @__PURE__ */ jsx62("span", { className: "cc-video-watch-btn__icon", children: /* @__PURE__ */ jsx62(PlayGlyph, {}) }),
26815
+ /* @__PURE__ */ jsx62("span", { className: "cc-video-watch-btn__label", children: label }),
26362
26816
  /* @__PURE__ */ jsxs40("span", { className: "cc-video-watch-btn__mask", "aria-hidden": "true", children: [
26363
- /* @__PURE__ */ jsx61("span", { className: "cc-video-watch-btn__blob cc-video-watch-btn__blob--1" }),
26364
- /* @__PURE__ */ jsx61("span", { className: "cc-video-watch-btn__blob cc-video-watch-btn__blob--2" }),
26365
- /* @__PURE__ */ jsx61("span", { className: "cc-video-watch-btn__blob cc-video-watch-btn__blob--3" }),
26366
- /* @__PURE__ */ jsx61("span", { className: "cc-video-watch-btn__blob cc-video-watch-btn__blob--4" }),
26367
- /* @__PURE__ */ jsx61("span", { className: "cc-video-watch-btn__blob cc-video-watch-btn__blob--5" })
26817
+ /* @__PURE__ */ jsx62("span", { className: "cc-video-watch-btn__blob cc-video-watch-btn__blob--1" }),
26818
+ /* @__PURE__ */ jsx62("span", { className: "cc-video-watch-btn__blob cc-video-watch-btn__blob--2" }),
26819
+ /* @__PURE__ */ jsx62("span", { className: "cc-video-watch-btn__blob cc-video-watch-btn__blob--3" }),
26820
+ /* @__PURE__ */ jsx62("span", { className: "cc-video-watch-btn__blob cc-video-watch-btn__blob--4" }),
26821
+ /* @__PURE__ */ jsx62("span", { className: "cc-video-watch-btn__blob cc-video-watch-btn__blob--5" })
26368
26822
  ] })
26369
26823
  ] }),
26370
- /* @__PURE__ */ jsx61("span", { className: "cc-video-watch-btn__glow", "aria-hidden": "true" })
26824
+ /* @__PURE__ */ jsx62("span", { className: "cc-video-watch-btn__glow", "aria-hidden": "true" })
26371
26825
  ]
26372
26826
  }
26373
26827
  );
@@ -26376,13 +26830,13 @@ var VideoWatchButton = React35.forwardRef(
26376
26830
  VideoWatchButton.displayName = "VideoWatchButton";
26377
26831
 
26378
26832
  // src/components/cupcode/TooltipCupcode.tsx
26379
- import * as React36 from "react";
26833
+ import * as React35 from "react";
26380
26834
  import * as TooltipPrimitive2 from "@radix-ui/react-tooltip";
26381
- import { jsx as jsx62 } from "react/jsx-runtime";
26835
+ import { jsx as jsx63 } from "react/jsx-runtime";
26382
26836
  var TooltipProvider2 = TooltipPrimitive2.Provider;
26383
26837
  var TooltipCupcode = TooltipPrimitive2.Root;
26384
26838
  var TooltipTrigger2 = TooltipPrimitive2.Trigger;
26385
- var TooltipContent2 = React36.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx62(
26839
+ var TooltipContent2 = React35.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx63(
26386
26840
  TooltipPrimitive2.Content,
26387
26841
  {
26388
26842
  ref,
@@ -26403,14 +26857,14 @@ var TooltipContent2 = React36.forwardRef(({ className, sideOffset = 4, ...props
26403
26857
  TooltipContent2.displayName = TooltipPrimitive2.Content.displayName;
26404
26858
 
26405
26859
  // src/components/ui/accordion.tsx
26406
- import * as React37 from "react";
26860
+ import * as React36 from "react";
26407
26861
  import * as AccordionPrimitive2 from "@radix-ui/react-accordion";
26408
26862
  import { ChevronDown as ChevronDown6 } from "lucide-react";
26409
- import { jsx as jsx63, jsxs as jsxs41 } from "react/jsx-runtime";
26863
+ import { jsx as jsx64, jsxs as jsxs41 } from "react/jsx-runtime";
26410
26864
  var Accordion = AccordionPrimitive2.Root;
26411
- var AccordionItem2 = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx63(AccordionPrimitive2.Item, { ref, className: cn("border-b", className), ...props }));
26865
+ var AccordionItem2 = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx64(AccordionPrimitive2.Item, { ref, className: cn("border-b", className), ...props }));
26412
26866
  AccordionItem2.displayName = "AccordionItem";
26413
- var AccordionTrigger2 = React37.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx63(AccordionPrimitive2.Header, { className: "flex", children: /* @__PURE__ */ jsxs41(
26867
+ var AccordionTrigger2 = React36.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx64(AccordionPrimitive2.Header, { className: "flex", children: /* @__PURE__ */ jsxs41(
26414
26868
  AccordionPrimitive2.Trigger,
26415
26869
  {
26416
26870
  ref,
@@ -26421,33 +26875,33 @@ var AccordionTrigger2 = React37.forwardRef(({ className, children, ...props }, r
26421
26875
  ...props,
26422
26876
  children: [
26423
26877
  children,
26424
- /* @__PURE__ */ jsx63(ChevronDown6, { className: "h-4 w-4 shrink-0 transition-transform duration-200" })
26878
+ /* @__PURE__ */ jsx64(ChevronDown6, { className: "h-4 w-4 shrink-0 transition-transform duration-200" })
26425
26879
  ]
26426
26880
  }
26427
26881
  ) }));
26428
26882
  AccordionTrigger2.displayName = AccordionPrimitive2.Trigger.displayName;
26429
- var AccordionContent2 = React37.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx63(
26883
+ var AccordionContent2 = React36.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx64(
26430
26884
  AccordionPrimitive2.Content,
26431
26885
  {
26432
26886
  ref,
26433
26887
  className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
26434
26888
  ...props,
26435
- children: /* @__PURE__ */ jsx63("div", { className: cn("pb-4 pt-0", className), children })
26889
+ children: /* @__PURE__ */ jsx64("div", { className: cn("pb-4 pt-0", className), children })
26436
26890
  }
26437
26891
  ));
26438
26892
  AccordionContent2.displayName = AccordionPrimitive2.Content.displayName;
26439
26893
 
26440
26894
  // src/components/ui/alert.tsx
26441
- import * as React38 from "react";
26895
+ import * as React37 from "react";
26442
26896
  import { cva as cva3 } from "class-variance-authority";
26443
- import { jsx as jsx64 } from "react/jsx-runtime";
26897
+ import { jsx as jsx65 } from "react/jsx-runtime";
26444
26898
  var alertVariants = cva3(
26445
26899
  "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
26446
26900
  {
26447
26901
  variants: {
26448
26902
  variant: {
26449
26903
  default: "bg-background text-foreground",
26450
- destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"
26904
+ destructive: "border-destructive/50 bg-destructive/10 text-foreground dark:border-destructive/70 dark:bg-destructive/20 [&>svg]:text-destructive"
26451
26905
  }
26452
26906
  },
26453
26907
  defaultVariants: {
@@ -26455,14 +26909,14 @@ var alertVariants = cva3(
26455
26909
  }
26456
26910
  }
26457
26911
  );
26458
- var Alert = React38.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx64("div", { ref, role: "alert", className: cn(alertVariants({ variant }), className), ...props }));
26912
+ var Alert = React37.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx65("div", { ref, role: "alert", className: cn(alertVariants({ variant }), className), ...props }));
26459
26913
  Alert.displayName = "Alert";
26460
- var AlertTitle = React38.forwardRef(
26461
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx64("h5", { ref, className: cn("mb-1 font-medium leading-none tracking-tight", className), ...props })
26914
+ var AlertTitle = React37.forwardRef(
26915
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx65("h5", { ref, className: cn("mb-1 font-medium leading-none tracking-tight", className), ...props })
26462
26916
  );
26463
26917
  AlertTitle.displayName = "AlertTitle";
26464
- var AlertDescription = React38.forwardRef(
26465
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx64("div", { ref, className: cn("text-sm [&_p]:leading-relaxed", className), ...props })
26918
+ var AlertDescription = React37.forwardRef(
26919
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx65("div", { ref, className: cn("text-sm [&_p]:leading-relaxed", className), ...props })
26466
26920
  );
26467
26921
  AlertDescription.displayName = "AlertDescription";
26468
26922
 
@@ -26471,14 +26925,14 @@ import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
26471
26925
  var AspectRatio = AspectRatioPrimitive.Root;
26472
26926
 
26473
26927
  // src/components/ui/breadcrumb.tsx
26474
- import * as React39 from "react";
26928
+ import * as React38 from "react";
26475
26929
  import { Slot as Slot2 } from "@radix-ui/react-slot";
26476
26930
  import { ChevronRight as ChevronRight3, MoreHorizontal } from "lucide-react";
26477
- import { jsx as jsx65, jsxs as jsxs42 } from "react/jsx-runtime";
26478
- var Breadcrumb = React39.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx65("nav", { ref, "aria-label": "breadcrumb", ...props }));
26931
+ import { jsx as jsx66, jsxs as jsxs42 } from "react/jsx-runtime";
26932
+ var Breadcrumb = React38.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx66("nav", { ref, "aria-label": "breadcrumb", ...props }));
26479
26933
  Breadcrumb.displayName = "Breadcrumb";
26480
- var BreadcrumbList = React39.forwardRef(
26481
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx65(
26934
+ var BreadcrumbList = React38.forwardRef(
26935
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx66(
26482
26936
  "ol",
26483
26937
  {
26484
26938
  ref,
@@ -26491,17 +26945,17 @@ var BreadcrumbList = React39.forwardRef(
26491
26945
  )
26492
26946
  );
26493
26947
  BreadcrumbList.displayName = "BreadcrumbList";
26494
- var BreadcrumbItem = React39.forwardRef(
26495
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx65("li", { ref, className: cn("inline-flex items-center gap-1.5", className), ...props })
26948
+ var BreadcrumbItem = React38.forwardRef(
26949
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx66("li", { ref, className: cn("inline-flex items-center gap-1.5", className), ...props })
26496
26950
  );
26497
26951
  BreadcrumbItem.displayName = "BreadcrumbItem";
26498
- var BreadcrumbLink = React39.forwardRef(({ asChild, className, ...props }, ref) => {
26952
+ var BreadcrumbLink = React38.forwardRef(({ asChild, className, ...props }, ref) => {
26499
26953
  const Comp = asChild ? Slot2 : "a";
26500
- return /* @__PURE__ */ jsx65(Comp, { ref, className: cn("transition-colors hover:text-foreground", className), ...props });
26954
+ return /* @__PURE__ */ jsx66(Comp, { ref, className: cn("transition-colors hover:text-foreground", className), ...props });
26501
26955
  });
26502
26956
  BreadcrumbLink.displayName = "BreadcrumbLink";
26503
- var BreadcrumbPage = React39.forwardRef(
26504
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx65(
26957
+ var BreadcrumbPage = React38.forwardRef(
26958
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx66(
26505
26959
  "span",
26506
26960
  {
26507
26961
  ref,
@@ -26514,7 +26968,7 @@ var BreadcrumbPage = React39.forwardRef(
26514
26968
  )
26515
26969
  );
26516
26970
  BreadcrumbPage.displayName = "BreadcrumbPage";
26517
- var BreadcrumbSeparator = ({ children, className, ...props }) => /* @__PURE__ */ jsx65("li", { role: "presentation", "aria-hidden": "true", className: cn("[&>svg]:size-3.5", className), ...props, children: children != null ? children : /* @__PURE__ */ jsx65(ChevronRight3, {}) });
26971
+ var BreadcrumbSeparator = ({ children, className, ...props }) => /* @__PURE__ */ jsx66("li", { role: "presentation", "aria-hidden": "true", className: cn("[&>svg]:size-3.5", className), ...props, children: children != null ? children : /* @__PURE__ */ jsx66(ChevronRight3, {}) });
26518
26972
  BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
26519
26973
  var BreadcrumbEllipsis = ({ className, ...props }) => /* @__PURE__ */ jsxs42(
26520
26974
  "span",
@@ -26524,8 +26978,8 @@ var BreadcrumbEllipsis = ({ className, ...props }) => /* @__PURE__ */ jsxs42(
26524
26978
  className: cn("flex h-9 w-9 items-center justify-center", className),
26525
26979
  ...props,
26526
26980
  children: [
26527
- /* @__PURE__ */ jsx65(MoreHorizontal, { className: "h-4 w-4" }),
26528
- /* @__PURE__ */ jsx65("span", { className: "sr-only", children: "More" })
26981
+ /* @__PURE__ */ jsx66(MoreHorizontal, { className: "h-4 w-4" }),
26982
+ /* @__PURE__ */ jsx66("span", { className: "sr-only", children: "More" })
26529
26983
  ]
26530
26984
  }
26531
26985
  );
@@ -26534,9 +26988,9 @@ BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
26534
26988
  // src/components/ui/calendar.tsx
26535
26989
  import { ChevronLeft, ChevronRight as ChevronRight4 } from "lucide-react";
26536
26990
  import { DayPicker } from "react-day-picker";
26537
- import { jsx as jsx66 } from "react/jsx-runtime";
26991
+ import { jsx as jsx67 } from "react/jsx-runtime";
26538
26992
  function Calendar({ className, classNames, showOutsideDays = true, ...props }) {
26539
- return /* @__PURE__ */ jsx66(
26993
+ return /* @__PURE__ */ jsx67(
26540
26994
  DayPicker,
26541
26995
  {
26542
26996
  showOutsideDays,
@@ -26571,9 +27025,9 @@ function Calendar({ className, classNames, showOutsideDays = true, ...props }) {
26571
27025
  components: {
26572
27026
  Chevron: ({ orientation, className: className2, ...chevronProps }) => {
26573
27027
  if (orientation === "left") {
26574
- return /* @__PURE__ */ jsx66(ChevronLeft, { className: cn("h-4 w-4", className2), ...chevronProps });
27028
+ return /* @__PURE__ */ jsx67(ChevronLeft, { className: cn("h-4 w-4", className2), ...chevronProps });
26575
27029
  }
26576
- return /* @__PURE__ */ jsx66(ChevronRight4, { className: cn("h-4 w-4", className2), ...chevronProps });
27030
+ return /* @__PURE__ */ jsx67(ChevronRight4, { className: cn("h-4 w-4", className2), ...chevronProps });
26577
27031
  }
26578
27032
  },
26579
27033
  ...props
@@ -26583,45 +27037,45 @@ function Calendar({ className, classNames, showOutsideDays = true, ...props }) {
26583
27037
  Calendar.displayName = "Calendar";
26584
27038
 
26585
27039
  // src/components/ui/card.tsx
26586
- import * as React40 from "react";
26587
- import { jsx as jsx67 } from "react/jsx-runtime";
26588
- var Card = React40.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx67("div", { ref, className: cn("rounded-lg border bg-card text-card-foreground shadow-sm", className), ...props }));
27040
+ import * as React39 from "react";
27041
+ import { jsx as jsx68 } from "react/jsx-runtime";
27042
+ var Card = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx68("div", { ref, className: cn("rounded-lg border bg-card text-card-foreground shadow-sm", className), ...props }));
26589
27043
  Card.displayName = "Card";
26590
- var CardHeader = React40.forwardRef(
26591
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx67("div", { ref, className: cn("flex flex-col space-y-1.5 p-6", className), ...props })
27044
+ var CardHeader = React39.forwardRef(
27045
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx68("div", { ref, className: cn("flex flex-col space-y-1.5 p-6", className), ...props })
26592
27046
  );
26593
27047
  CardHeader.displayName = "CardHeader";
26594
- var CardTitle = React40.forwardRef(
26595
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx67("h3", { ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props })
27048
+ var CardTitle = React39.forwardRef(
27049
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx68("h3", { ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props })
26596
27050
  );
26597
27051
  CardTitle.displayName = "CardTitle";
26598
- var CardDescription = React40.forwardRef(
26599
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx67("p", { ref, className: cn("text-sm text-muted-foreground", className), ...props })
27052
+ var CardDescription = React39.forwardRef(
27053
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx68("p", { ref, className: cn("text-sm text-muted-foreground", className), ...props })
26600
27054
  );
26601
27055
  CardDescription.displayName = "CardDescription";
26602
- var CardContent = React40.forwardRef(
26603
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx67("div", { ref, className: cn("p-6 pt-0", className), ...props })
27056
+ var CardContent = React39.forwardRef(
27057
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx68("div", { ref, className: cn("p-6 pt-0", className), ...props })
26604
27058
  );
26605
27059
  CardContent.displayName = "CardContent";
26606
- var CardFooter = React40.forwardRef(
26607
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx67("div", { ref, className: cn("flex items-center p-6 pt-0", className), ...props })
27060
+ var CardFooter = React39.forwardRef(
27061
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx68("div", { ref, className: cn("flex items-center p-6 pt-0", className), ...props })
26608
27062
  );
26609
27063
  CardFooter.displayName = "CardFooter";
26610
27064
 
26611
27065
  // src/components/ui/carousel.tsx
26612
- import * as React41 from "react";
27066
+ import * as React40 from "react";
26613
27067
  import useEmblaCarousel from "embla-carousel-react";
26614
27068
  import { ArrowLeft, ArrowRight } from "lucide-react";
26615
- import { jsx as jsx68, jsxs as jsxs43 } from "react/jsx-runtime";
26616
- var CarouselContext = React41.createContext(null);
27069
+ import { jsx as jsx69, jsxs as jsxs43 } from "react/jsx-runtime";
27070
+ var CarouselContext = React40.createContext(null);
26617
27071
  function useCarousel() {
26618
- const context = React41.useContext(CarouselContext);
27072
+ const context = React40.useContext(CarouselContext);
26619
27073
  if (!context) {
26620
27074
  throw new Error("useCarousel must be used within a <Carousel />");
26621
27075
  }
26622
27076
  return context;
26623
27077
  }
26624
- var Carousel = React41.forwardRef(
27078
+ var Carousel = React40.forwardRef(
26625
27079
  ({ orientation = "horizontal", opts, setApi, plugins, className, children, ...props }, ref) => {
26626
27080
  const [carouselRef, api] = useEmblaCarousel(
26627
27081
  {
@@ -26630,22 +27084,22 @@ var Carousel = React41.forwardRef(
26630
27084
  },
26631
27085
  plugins
26632
27086
  );
26633
- const [canScrollPrev, setCanScrollPrev] = React41.useState(false);
26634
- const [canScrollNext, setCanScrollNext] = React41.useState(false);
26635
- const onSelect = React41.useCallback((api2) => {
27087
+ const [canScrollPrev, setCanScrollPrev] = React40.useState(false);
27088
+ const [canScrollNext, setCanScrollNext] = React40.useState(false);
27089
+ const onSelect = React40.useCallback((api2) => {
26636
27090
  if (!api2) {
26637
27091
  return;
26638
27092
  }
26639
27093
  setCanScrollPrev(api2.canScrollPrev());
26640
27094
  setCanScrollNext(api2.canScrollNext());
26641
27095
  }, []);
26642
- const scrollPrev = React41.useCallback(() => {
27096
+ const scrollPrev = React40.useCallback(() => {
26643
27097
  api == null ? void 0 : api.scrollPrev();
26644
27098
  }, [api]);
26645
- const scrollNext = React41.useCallback(() => {
27099
+ const scrollNext = React40.useCallback(() => {
26646
27100
  api == null ? void 0 : api.scrollNext();
26647
27101
  }, [api]);
26648
- const handleKeyDown = React41.useCallback(
27102
+ const handleKeyDown = React40.useCallback(
26649
27103
  (event) => {
26650
27104
  if (event.key === "ArrowLeft") {
26651
27105
  event.preventDefault();
@@ -26657,13 +27111,13 @@ var Carousel = React41.forwardRef(
26657
27111
  },
26658
27112
  [scrollPrev, scrollNext]
26659
27113
  );
26660
- React41.useEffect(() => {
27114
+ React40.useEffect(() => {
26661
27115
  if (!api || !setApi) {
26662
27116
  return;
26663
27117
  }
26664
27118
  setApi(api);
26665
27119
  }, [api, setApi]);
26666
- React41.useEffect(() => {
27120
+ React40.useEffect(() => {
26667
27121
  if (!api) {
26668
27122
  return;
26669
27123
  }
@@ -26674,7 +27128,7 @@ var Carousel = React41.forwardRef(
26674
27128
  api == null ? void 0 : api.off("select", onSelect);
26675
27129
  };
26676
27130
  }, [api, onSelect]);
26677
- return /* @__PURE__ */ jsx68(
27131
+ return /* @__PURE__ */ jsx69(
26678
27132
  CarouselContext.Provider,
26679
27133
  {
26680
27134
  value: {
@@ -26687,7 +27141,7 @@ var Carousel = React41.forwardRef(
26687
27141
  canScrollPrev,
26688
27142
  canScrollNext
26689
27143
  },
26690
- children: /* @__PURE__ */ jsx68(
27144
+ children: /* @__PURE__ */ jsx69(
26691
27145
  "div",
26692
27146
  {
26693
27147
  ref,
@@ -26704,10 +27158,10 @@ var Carousel = React41.forwardRef(
26704
27158
  }
26705
27159
  );
26706
27160
  Carousel.displayName = "Carousel";
26707
- var CarouselContent = React41.forwardRef(
27161
+ var CarouselContent = React40.forwardRef(
26708
27162
  ({ className, ...props }, ref) => {
26709
27163
  const { carouselRef, orientation } = useCarousel();
26710
- return /* @__PURE__ */ jsx68("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ jsx68(
27164
+ return /* @__PURE__ */ jsx69("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ jsx69(
26711
27165
  "div",
26712
27166
  {
26713
27167
  ref,
@@ -26718,10 +27172,10 @@ var CarouselContent = React41.forwardRef(
26718
27172
  }
26719
27173
  );
26720
27174
  CarouselContent.displayName = "CarouselContent";
26721
- var CarouselItem = React41.forwardRef(
27175
+ var CarouselItem = React40.forwardRef(
26722
27176
  ({ className, ...props }, ref) => {
26723
27177
  const { orientation } = useCarousel();
26724
- return /* @__PURE__ */ jsx68(
27178
+ return /* @__PURE__ */ jsx69(
26725
27179
  "div",
26726
27180
  {
26727
27181
  ref,
@@ -26734,7 +27188,7 @@ var CarouselItem = React41.forwardRef(
26734
27188
  }
26735
27189
  );
26736
27190
  CarouselItem.displayName = "CarouselItem";
26737
- var CarouselPrevious = React41.forwardRef(
27191
+ var CarouselPrevious = React40.forwardRef(
26738
27192
  ({ className, variant = "outline", size = "icon", ...props }, ref) => {
26739
27193
  const { orientation, scrollPrev, canScrollPrev } = useCarousel();
26740
27194
  return /* @__PURE__ */ jsxs43(
@@ -26752,15 +27206,15 @@ var CarouselPrevious = React41.forwardRef(
26752
27206
  onClick: scrollPrev,
26753
27207
  ...props,
26754
27208
  children: [
26755
- /* @__PURE__ */ jsx68(ArrowLeft, { className: "h-4 w-4" }),
26756
- /* @__PURE__ */ jsx68("span", { className: "sr-only", children: "Previous slide" })
27209
+ /* @__PURE__ */ jsx69(ArrowLeft, { className: "h-4 w-4" }),
27210
+ /* @__PURE__ */ jsx69("span", { className: "sr-only", children: "Previous slide" })
26757
27211
  ]
26758
27212
  }
26759
27213
  );
26760
27214
  }
26761
27215
  );
26762
27216
  CarouselPrevious.displayName = "CarouselPrevious";
26763
- var CarouselNext = React41.forwardRef(
27217
+ var CarouselNext = React40.forwardRef(
26764
27218
  ({ className, variant = "outline", size = "icon", ...props }, ref) => {
26765
27219
  const { orientation, scrollNext, canScrollNext } = useCarousel();
26766
27220
  return /* @__PURE__ */ jsxs43(
@@ -26778,8 +27232,8 @@ var CarouselNext = React41.forwardRef(
26778
27232
  onClick: scrollNext,
26779
27233
  ...props,
26780
27234
  children: [
26781
- /* @__PURE__ */ jsx68(ArrowRight, { className: "h-4 w-4" }),
26782
- /* @__PURE__ */ jsx68("span", { className: "sr-only", children: "Next slide" })
27235
+ /* @__PURE__ */ jsx69(ArrowRight, { className: "h-4 w-4" }),
27236
+ /* @__PURE__ */ jsx69("span", { className: "sr-only", children: "Next slide" })
26783
27237
  ]
26784
27238
  }
26785
27239
  );
@@ -26788,22 +27242,22 @@ var CarouselNext = React41.forwardRef(
26788
27242
  CarouselNext.displayName = "CarouselNext";
26789
27243
 
26790
27244
  // src/components/ui/chart.tsx
26791
- import * as React42 from "react";
27245
+ import * as React41 from "react";
26792
27246
  import * as RechartsPrimitive from "recharts";
26793
- import { Fragment as Fragment6, jsx as jsx69, jsxs as jsxs44 } from "react/jsx-runtime";
27247
+ import { Fragment as Fragment6, jsx as jsx70, jsxs as jsxs44 } from "react/jsx-runtime";
26794
27248
  var THEMES = { light: "", dark: ".dark" };
26795
- var ChartContext = React42.createContext(null);
27249
+ var ChartContext = React41.createContext(null);
26796
27250
  function useChart() {
26797
- const context = React42.useContext(ChartContext);
27251
+ const context = React41.useContext(ChartContext);
26798
27252
  if (!context) {
26799
27253
  throw new Error("useChart must be used within a <ChartContainer />");
26800
27254
  }
26801
27255
  return context;
26802
27256
  }
26803
- var ChartContainer = React42.forwardRef(({ id, className, children, config, ...props }, ref) => {
26804
- const uniqueId = React42.useId();
27257
+ var ChartContainer = React41.forwardRef(({ id, className, children, config, ...props }, ref) => {
27258
+ const uniqueId = React41.useId();
26805
27259
  const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
26806
- return /* @__PURE__ */ jsx69(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs44(
27260
+ return /* @__PURE__ */ jsx70(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs44(
26807
27261
  "div",
26808
27262
  {
26809
27263
  "data-chart": chartId,
@@ -26814,8 +27268,8 @@ var ChartContainer = React42.forwardRef(({ id, className, children, config, ...p
26814
27268
  ),
26815
27269
  ...props,
26816
27270
  children: [
26817
- /* @__PURE__ */ jsx69(ChartStyle, { id: chartId, config }),
26818
- /* @__PURE__ */ jsx69(RechartsPrimitive.ResponsiveContainer, { children })
27271
+ /* @__PURE__ */ jsx70(ChartStyle, { id: chartId, config }),
27272
+ /* @__PURE__ */ jsx70(RechartsPrimitive.ResponsiveContainer, { children })
26819
27273
  ]
26820
27274
  }
26821
27275
  ) });
@@ -26826,7 +27280,7 @@ var ChartStyle = ({ id, config }) => {
26826
27280
  if (!colorConfig.length) {
26827
27281
  return null;
26828
27282
  }
26829
- return /* @__PURE__ */ jsx69(
27283
+ return /* @__PURE__ */ jsx70(
26830
27284
  "style",
26831
27285
  {
26832
27286
  dangerouslySetInnerHTML: {
@@ -26846,7 +27300,7 @@ ${colorConfig.map(([key, itemConfig]) => {
26846
27300
  );
26847
27301
  };
26848
27302
  var ChartTooltip = RechartsPrimitive.Tooltip;
26849
- var ChartTooltipContent = React42.forwardRef(
27303
+ var ChartTooltipContent = React41.forwardRef(
26850
27304
  ({
26851
27305
  active,
26852
27306
  payload,
@@ -26863,7 +27317,7 @@ var ChartTooltipContent = React42.forwardRef(
26863
27317
  labelKey
26864
27318
  }, ref) => {
26865
27319
  const { config } = useChart();
26866
- const tooltipLabel = React42.useMemo(() => {
27320
+ const tooltipLabel = React41.useMemo(() => {
26867
27321
  var _a78;
26868
27322
  if (hideLabel || !(payload == null ? void 0 : payload.length)) {
26869
27323
  return null;
@@ -26873,12 +27327,12 @@ var ChartTooltipContent = React42.forwardRef(
26873
27327
  const itemConfig = getPayloadConfigFromPayload(config, item, key);
26874
27328
  const value = !labelKey && typeof label === "string" ? ((_a78 = config[label]) == null ? void 0 : _a78.label) || label : itemConfig == null ? void 0 : itemConfig.label;
26875
27329
  if (labelFormatter) {
26876
- return /* @__PURE__ */ jsx69("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
27330
+ return /* @__PURE__ */ jsx70("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
26877
27331
  }
26878
27332
  if (!value) {
26879
27333
  return null;
26880
27334
  }
26881
- return /* @__PURE__ */ jsx69("div", { className: cn("font-medium", labelClassName), children: value });
27335
+ return /* @__PURE__ */ jsx70("div", { className: cn("font-medium", labelClassName), children: value });
26882
27336
  }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);
26883
27337
  if (!active || !(payload == null ? void 0 : payload.length)) {
26884
27338
  return null;
@@ -26894,11 +27348,11 @@ var ChartTooltipContent = React42.forwardRef(
26894
27348
  ),
26895
27349
  children: [
26896
27350
  !nestLabel ? tooltipLabel : null,
26897
- /* @__PURE__ */ jsx69("div", { className: "grid gap-1.5", children: payload.map((item, index) => {
27351
+ /* @__PURE__ */ jsx70("div", { className: "grid gap-1.5", children: payload.map((item, index) => {
26898
27352
  const key = `${nameKey || item.name || item.dataKey || "value"}`;
26899
27353
  const itemConfig = getPayloadConfigFromPayload(config, item, key);
26900
27354
  const indicatorColor = color || item.payload.fill || item.color;
26901
- return /* @__PURE__ */ jsx69(
27355
+ return /* @__PURE__ */ jsx70(
26902
27356
  "div",
26903
27357
  {
26904
27358
  className: cn(
@@ -26906,7 +27360,7 @@ var ChartTooltipContent = React42.forwardRef(
26906
27360
  indicator === "dot" && "items-center"
26907
27361
  ),
26908
27362
  children: formatter && (item == null ? void 0 : item.value) !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs44(Fragment6, { children: [
26909
- (itemConfig == null ? void 0 : itemConfig.icon) ? /* @__PURE__ */ jsx69(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx69(
27363
+ (itemConfig == null ? void 0 : itemConfig.icon) ? /* @__PURE__ */ jsx70(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx70(
26910
27364
  "div",
26911
27365
  {
26912
27366
  className: cn("shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]", {
@@ -26931,9 +27385,9 @@ var ChartTooltipContent = React42.forwardRef(
26931
27385
  children: [
26932
27386
  /* @__PURE__ */ jsxs44("div", { className: "grid gap-1.5", children: [
26933
27387
  nestLabel ? tooltipLabel : null,
26934
- /* @__PURE__ */ jsx69("span", { className: "text-muted-foreground", children: (itemConfig == null ? void 0 : itemConfig.label) || item.name })
27388
+ /* @__PURE__ */ jsx70("span", { className: "text-muted-foreground", children: (itemConfig == null ? void 0 : itemConfig.label) || item.name })
26935
27389
  ] }),
26936
- item.value && /* @__PURE__ */ jsx69("span", { className: "font-mono font-medium tabular-nums text-foreground", children: item.value.toLocaleString() })
27390
+ item.value && /* @__PURE__ */ jsx70("span", { className: "font-mono font-medium tabular-nums text-foreground", children: item.value.toLocaleString() })
26937
27391
  ]
26938
27392
  }
26939
27393
  )
@@ -26949,12 +27403,12 @@ var ChartTooltipContent = React42.forwardRef(
26949
27403
  );
26950
27404
  ChartTooltipContent.displayName = "ChartTooltip";
26951
27405
  var ChartLegend = RechartsPrimitive.Legend;
26952
- var ChartLegendContent = React42.forwardRef(({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey }, ref) => {
27406
+ var ChartLegendContent = React41.forwardRef(({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey }, ref) => {
26953
27407
  const { config } = useChart();
26954
27408
  if (!(payload == null ? void 0 : payload.length)) {
26955
27409
  return null;
26956
27410
  }
26957
- return /* @__PURE__ */ jsx69(
27411
+ return /* @__PURE__ */ jsx70(
26958
27412
  "div",
26959
27413
  {
26960
27414
  ref,
@@ -26967,7 +27421,7 @@ var ChartLegendContent = React42.forwardRef(({ className, hideIcon = false, payl
26967
27421
  {
26968
27422
  className: cn("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),
26969
27423
  children: [
26970
- (itemConfig == null ? void 0 : itemConfig.icon) && !hideIcon ? /* @__PURE__ */ jsx69(itemConfig.icon, {}) : /* @__PURE__ */ jsx69(
27424
+ (itemConfig == null ? void 0 : itemConfig.icon) && !hideIcon ? /* @__PURE__ */ jsx70(itemConfig.icon, {}) : /* @__PURE__ */ jsx70(
26971
27425
  "div",
26972
27426
  {
26973
27427
  className: "h-2 w-2 shrink-0 rounded-[2px]",
@@ -27001,11 +27455,11 @@ function getPayloadConfigFromPayload(config, payload, key) {
27001
27455
  }
27002
27456
 
27003
27457
  // src/components/ui/checkbox.tsx
27004
- import * as React43 from "react";
27458
+ import * as React42 from "react";
27005
27459
  import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
27006
27460
  import { Check as Check6 } from "lucide-react";
27007
- import { jsx as jsx70 } from "react/jsx-runtime";
27008
- var Checkbox = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx70(
27461
+ import { jsx as jsx71 } from "react/jsx-runtime";
27462
+ var Checkbox = React42.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx71(
27009
27463
  CheckboxPrimitive.Root,
27010
27464
  {
27011
27465
  ref,
@@ -27014,7 +27468,7 @@ var Checkbox = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__
27014
27468
  className
27015
27469
  ),
27016
27470
  ...props,
27017
- children: /* @__PURE__ */ jsx70(CheckboxPrimitive.Indicator, { className: cn("flex items-center justify-center text-current"), children: /* @__PURE__ */ jsx70(Check6, { className: "h-4 w-4" }) })
27471
+ children: /* @__PURE__ */ jsx71(CheckboxPrimitive.Indicator, { className: cn("flex items-center justify-center text-current"), children: /* @__PURE__ */ jsx71(Check6, { className: "h-4 w-4" }) })
27018
27472
  }
27019
27473
  ));
27020
27474
  Checkbox.displayName = CheckboxPrimitive.Root.displayName;
@@ -27026,11 +27480,11 @@ var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
27026
27480
  var CollapsibleContent2 = CollapsiblePrimitive.CollapsibleContent;
27027
27481
 
27028
27482
  // src/components/ui/command.tsx
27029
- import * as React44 from "react";
27483
+ import * as React43 from "react";
27030
27484
  import { Command as CommandPrimitive } from "cmdk";
27031
27485
  import { Search as Search3 } from "lucide-react";
27032
- import { jsx as jsx71, jsxs as jsxs45 } from "react/jsx-runtime";
27033
- var Command = React44.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx71(
27486
+ import { jsx as jsx72, jsxs as jsxs45 } from "react/jsx-runtime";
27487
+ var Command = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx72(
27034
27488
  CommandPrimitive,
27035
27489
  {
27036
27490
  ref,
@@ -27043,11 +27497,11 @@ var Command = React44.forwardRef(({ className, ...props }, ref) => /* @__PURE__
27043
27497
  ));
27044
27498
  Command.displayName = CommandPrimitive.displayName;
27045
27499
  var CommandDialog = ({ children, ...props }) => {
27046
- return /* @__PURE__ */ jsx71(Dialog, { ...props, children: /* @__PURE__ */ jsx71(DialogContent, { className: "overflow-hidden p-0 shadow-lg", children: /* @__PURE__ */ jsx71(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children }) }) });
27500
+ return /* @__PURE__ */ jsx72(Dialog, { ...props, children: /* @__PURE__ */ jsx72(DialogContent, { className: "overflow-hidden p-0 shadow-lg", children: /* @__PURE__ */ jsx72(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children }) }) });
27047
27501
  };
27048
- var CommandInput = React44.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs45("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: [
27049
- /* @__PURE__ */ jsx71(Search3, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
27050
- /* @__PURE__ */ jsx71(
27502
+ var CommandInput = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs45("div", { className: "flex items-center border-b px-3", "cmdk-input-wrapper": "", children: [
27503
+ /* @__PURE__ */ jsx72(Search3, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }),
27504
+ /* @__PURE__ */ jsx72(
27051
27505
  CommandPrimitive.Input,
27052
27506
  {
27053
27507
  ref,
@@ -27060,7 +27514,7 @@ var CommandInput = React44.forwardRef(({ className, ...props }, ref) => /* @__PU
27060
27514
  )
27061
27515
  ] }));
27062
27516
  CommandInput.displayName = CommandPrimitive.Input.displayName;
27063
- var CommandList = React44.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx71(
27517
+ var CommandList = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx72(
27064
27518
  CommandPrimitive.List,
27065
27519
  {
27066
27520
  ref,
@@ -27069,9 +27523,9 @@ var CommandList = React44.forwardRef(({ className, ...props }, ref) => /* @__PUR
27069
27523
  }
27070
27524
  ));
27071
27525
  CommandList.displayName = CommandPrimitive.List.displayName;
27072
- var CommandEmpty = React44.forwardRef((props, ref) => /* @__PURE__ */ jsx71(CommandPrimitive.Empty, { ref, className: "py-6 text-center text-sm", ...props }));
27526
+ var CommandEmpty = React43.forwardRef((props, ref) => /* @__PURE__ */ jsx72(CommandPrimitive.Empty, { ref, className: "py-6 text-center text-sm", ...props }));
27073
27527
  CommandEmpty.displayName = CommandPrimitive.Empty.displayName;
27074
- var CommandGroup = React44.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx71(
27528
+ var CommandGroup = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx72(
27075
27529
  CommandPrimitive.Group,
27076
27530
  {
27077
27531
  ref,
@@ -27083,9 +27537,9 @@ var CommandGroup = React44.forwardRef(({ className, ...props }, ref) => /* @__PU
27083
27537
  }
27084
27538
  ));
27085
27539
  CommandGroup.displayName = CommandPrimitive.Group.displayName;
27086
- var CommandSeparator = React44.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx71(CommandPrimitive.Separator, { ref, className: cn("-mx-1 h-px bg-border", className), ...props }));
27540
+ var CommandSeparator = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx72(CommandPrimitive.Separator, { ref, className: cn("-mx-1 h-px bg-border", className), ...props }));
27087
27541
  CommandSeparator.displayName = CommandPrimitive.Separator.displayName;
27088
- var CommandItem = React44.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx71(
27542
+ var CommandItem = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx72(
27089
27543
  CommandPrimitive.Item,
27090
27544
  {
27091
27545
  ref,
@@ -27098,22 +27552,22 @@ var CommandItem = React44.forwardRef(({ className, ...props }, ref) => /* @__PUR
27098
27552
  ));
27099
27553
  CommandItem.displayName = CommandPrimitive.Item.displayName;
27100
27554
  var CommandShortcut = ({ className, ...props }) => {
27101
- return /* @__PURE__ */ jsx71("span", { className: cn("ml-auto text-xs tracking-widest text-muted-foreground", className), ...props });
27555
+ return /* @__PURE__ */ jsx72("span", { className: cn("ml-auto text-xs tracking-widest text-muted-foreground", className), ...props });
27102
27556
  };
27103
27557
  CommandShortcut.displayName = "CommandShortcut";
27104
27558
 
27105
27559
  // src/components/ui/context-menu.tsx
27106
- import * as React45 from "react";
27560
+ import * as React44 from "react";
27107
27561
  import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
27108
27562
  import { Check as Check7, ChevronRight as ChevronRight5, Circle as Circle3 } from "lucide-react";
27109
- import { jsx as jsx72, jsxs as jsxs46 } from "react/jsx-runtime";
27563
+ import { jsx as jsx73, jsxs as jsxs46 } from "react/jsx-runtime";
27110
27564
  var ContextMenu = ContextMenuPrimitive.Root;
27111
27565
  var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
27112
27566
  var ContextMenuGroup = ContextMenuPrimitive.Group;
27113
27567
  var ContextMenuPortal = ContextMenuPrimitive.Portal;
27114
27568
  var ContextMenuSub = ContextMenuPrimitive.Sub;
27115
27569
  var ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;
27116
- var ContextMenuSubTrigger = React45.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs46(
27570
+ var ContextMenuSubTrigger = React44.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs46(
27117
27571
  ContextMenuPrimitive.SubTrigger,
27118
27572
  {
27119
27573
  ref,
@@ -27125,12 +27579,12 @@ var ContextMenuSubTrigger = React45.forwardRef(({ className, inset, children, ..
27125
27579
  ...props,
27126
27580
  children: [
27127
27581
  children,
27128
- /* @__PURE__ */ jsx72(ChevronRight5, { className: "ml-auto h-4 w-4" })
27582
+ /* @__PURE__ */ jsx73(ChevronRight5, { className: "ml-auto h-4 w-4" })
27129
27583
  ]
27130
27584
  }
27131
27585
  ));
27132
27586
  ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;
27133
- var ContextMenuSubContent = React45.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx72(
27587
+ var ContextMenuSubContent = React44.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx73(
27134
27588
  ContextMenuPrimitive.SubContent,
27135
27589
  {
27136
27590
  ref,
@@ -27142,7 +27596,7 @@ var ContextMenuSubContent = React45.forwardRef(({ className, ...props }, ref) =>
27142
27596
  }
27143
27597
  ));
27144
27598
  ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;
27145
- var ContextMenuContent = React45.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx72(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx72(
27599
+ var ContextMenuContent = React44.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx73(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx73(
27146
27600
  ContextMenuPrimitive.Content,
27147
27601
  {
27148
27602
  ref,
@@ -27154,7 +27608,7 @@ var ContextMenuContent = React45.forwardRef(({ className, ...props }, ref) => /*
27154
27608
  }
27155
27609
  ) }));
27156
27610
  ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
27157
- var ContextMenuItem = React45.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx72(
27611
+ var ContextMenuItem = React44.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx73(
27158
27612
  ContextMenuPrimitive.Item,
27159
27613
  {
27160
27614
  ref,
@@ -27167,7 +27621,7 @@ var ContextMenuItem = React45.forwardRef(({ className, inset, ...props }, ref) =
27167
27621
  }
27168
27622
  ));
27169
27623
  ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
27170
- var ContextMenuCheckboxItem = React45.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs46(
27624
+ var ContextMenuCheckboxItem = React44.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs46(
27171
27625
  ContextMenuPrimitive.CheckboxItem,
27172
27626
  {
27173
27627
  ref,
@@ -27178,13 +27632,13 @@ var ContextMenuCheckboxItem = React45.forwardRef(({ className, children, checked
27178
27632
  checked,
27179
27633
  ...props,
27180
27634
  children: [
27181
- /* @__PURE__ */ jsx72("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx72(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx72(Check7, { className: "h-4 w-4" }) }) }),
27635
+ /* @__PURE__ */ jsx73("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx73(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx73(Check7, { className: "h-4 w-4" }) }) }),
27182
27636
  children
27183
27637
  ]
27184
27638
  }
27185
27639
  ));
27186
27640
  ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;
27187
- var ContextMenuRadioItem = React45.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs46(
27641
+ var ContextMenuRadioItem = React44.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs46(
27188
27642
  ContextMenuPrimitive.RadioItem,
27189
27643
  {
27190
27644
  ref,
@@ -27194,13 +27648,13 @@ var ContextMenuRadioItem = React45.forwardRef(({ className, children, ...props }
27194
27648
  ),
27195
27649
  ...props,
27196
27650
  children: [
27197
- /* @__PURE__ */ jsx72("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx72(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx72(Circle3, { className: "h-2 w-2 fill-current" }) }) }),
27651
+ /* @__PURE__ */ jsx73("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx73(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx73(Circle3, { className: "h-2 w-2 fill-current" }) }) }),
27198
27652
  children
27199
27653
  ]
27200
27654
  }
27201
27655
  ));
27202
27656
  ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;
27203
- var ContextMenuLabel = React45.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx72(
27657
+ var ContextMenuLabel = React44.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx73(
27204
27658
  ContextMenuPrimitive.Label,
27205
27659
  {
27206
27660
  ref,
@@ -27209,39 +27663,39 @@ var ContextMenuLabel = React45.forwardRef(({ className, inset, ...props }, ref)
27209
27663
  }
27210
27664
  ));
27211
27665
  ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;
27212
- var ContextMenuSeparator = React45.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx72(ContextMenuPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-border", className), ...props }));
27666
+ var ContextMenuSeparator = React44.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx73(ContextMenuPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-border", className), ...props }));
27213
27667
  ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;
27214
27668
  var ContextMenuShortcut = ({ className, ...props }) => {
27215
- return /* @__PURE__ */ jsx72("span", { className: cn("ml-auto text-xs tracking-widest text-muted-foreground", className), ...props });
27669
+ return /* @__PURE__ */ jsx73("span", { className: cn("ml-auto text-xs tracking-widest text-muted-foreground", className), ...props });
27216
27670
  };
27217
27671
  ContextMenuShortcut.displayName = "ContextMenuShortcut";
27218
27672
 
27219
27673
  // src/components/ui/form.tsx
27220
- import * as React47 from "react";
27674
+ import * as React46 from "react";
27221
27675
  import { Slot as Slot3 } from "@radix-ui/react-slot";
27222
27676
  import { Controller, FormProvider, useFormContext } from "react-hook-form";
27223
27677
 
27224
27678
  // src/components/ui/label.tsx
27225
- import * as React46 from "react";
27679
+ import * as React45 from "react";
27226
27680
  import * as LabelPrimitive from "@radix-ui/react-label";
27227
27681
  import { cva as cva4 } from "class-variance-authority";
27228
- import { jsx as jsx73 } from "react/jsx-runtime";
27682
+ import { jsx as jsx74 } from "react/jsx-runtime";
27229
27683
  var labelVariants = cva4("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70");
27230
- var Label4 = React46.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx73(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props }));
27684
+ var Label4 = React45.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx74(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props }));
27231
27685
  Label4.displayName = LabelPrimitive.Root.displayName;
27232
27686
 
27233
27687
  // src/components/ui/form.tsx
27234
- import { jsx as jsx74 } from "react/jsx-runtime";
27688
+ import { jsx as jsx75 } from "react/jsx-runtime";
27235
27689
  var Form = FormProvider;
27236
- var FormFieldContext = React47.createContext({});
27690
+ var FormFieldContext = React46.createContext({});
27237
27691
  var FormField = ({
27238
27692
  ...props
27239
27693
  }) => {
27240
- return /* @__PURE__ */ jsx74(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx74(Controller, { ...props }) });
27694
+ return /* @__PURE__ */ jsx75(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx75(Controller, { ...props }) });
27241
27695
  };
27242
27696
  var useFormField = () => {
27243
- const fieldContext = React47.useContext(FormFieldContext);
27244
- const itemContext = React47.useContext(FormItemContext);
27697
+ const fieldContext = React46.useContext(FormFieldContext);
27698
+ const itemContext = React46.useContext(FormItemContext);
27245
27699
  const { getFieldState, formState } = useFormContext();
27246
27700
  const fieldState = getFieldState(fieldContext.name, formState);
27247
27701
  if (!fieldContext) {
@@ -27257,23 +27711,23 @@ var useFormField = () => {
27257
27711
  ...fieldState
27258
27712
  };
27259
27713
  };
27260
- var FormItemContext = React47.createContext({});
27261
- var FormItem = React47.forwardRef(
27714
+ var FormItemContext = React46.createContext({});
27715
+ var FormItem = React46.forwardRef(
27262
27716
  ({ className, ...props }, ref) => {
27263
- const id = React47.useId();
27264
- return /* @__PURE__ */ jsx74(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx74("div", { ref, className: cn("space-y-2", className), ...props }) });
27717
+ const id = React46.useId();
27718
+ return /* @__PURE__ */ jsx75(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx75("div", { ref, className: cn("space-y-2", className), ...props }) });
27265
27719
  }
27266
27720
  );
27267
27721
  FormItem.displayName = "FormItem";
27268
- var FormLabel = React47.forwardRef(({ className, ...props }, ref) => {
27722
+ var FormLabel = React46.forwardRef(({ className, ...props }, ref) => {
27269
27723
  const { error, formItemId } = useFormField();
27270
- return /* @__PURE__ */ jsx74(Label4, { ref, className: cn(error && "text-destructive", className), htmlFor: formItemId, ...props });
27724
+ return /* @__PURE__ */ jsx75(Label4, { ref, className: cn(error && "text-destructive", className), htmlFor: formItemId, ...props });
27271
27725
  });
27272
27726
  FormLabel.displayName = "FormLabel";
27273
- var FormControl = React47.forwardRef(
27727
+ var FormControl = React46.forwardRef(
27274
27728
  ({ ...props }, ref) => {
27275
27729
  const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
27276
- return /* @__PURE__ */ jsx74(
27730
+ return /* @__PURE__ */ jsx75(
27277
27731
  Slot3,
27278
27732
  {
27279
27733
  ref,
@@ -27286,42 +27740,42 @@ var FormControl = React47.forwardRef(
27286
27740
  }
27287
27741
  );
27288
27742
  FormControl.displayName = "FormControl";
27289
- var FormDescription = React47.forwardRef(
27743
+ var FormDescription = React46.forwardRef(
27290
27744
  ({ className, ...props }, ref) => {
27291
27745
  const { formDescriptionId } = useFormField();
27292
- return /* @__PURE__ */ jsx74("p", { ref, id: formDescriptionId, className: cn("text-sm text-muted-foreground", className), ...props });
27746
+ return /* @__PURE__ */ jsx75("p", { ref, id: formDescriptionId, className: cn("text-sm text-muted-foreground", className), ...props });
27293
27747
  }
27294
27748
  );
27295
27749
  FormDescription.displayName = "FormDescription";
27296
- var FormMessage = React47.forwardRef(
27750
+ var FormMessage = React46.forwardRef(
27297
27751
  ({ className, children, ...props }, ref) => {
27298
27752
  const { error, formMessageId } = useFormField();
27299
27753
  const body = error ? String(error == null ? void 0 : error.message) : children;
27300
27754
  if (!body) {
27301
27755
  return null;
27302
27756
  }
27303
- return /* @__PURE__ */ jsx74("p", { ref, id: formMessageId, className: cn("text-sm font-medium text-destructive", className), ...props, children: body });
27757
+ return /* @__PURE__ */ jsx75("p", { ref, id: formMessageId, className: cn("text-sm font-medium text-destructive", className), ...props, children: body });
27304
27758
  }
27305
27759
  );
27306
27760
  FormMessage.displayName = "FormMessage";
27307
27761
 
27308
27762
  // src/components/ui/glass-card.tsx
27309
- import * as React48 from "react";
27310
- import { jsx as jsx75 } from "react/jsx-runtime";
27311
- var GlassCard = React48.forwardRef(
27763
+ import * as React47 from "react";
27764
+ import { jsx as jsx76 } from "react/jsx-runtime";
27765
+ var GlassCard = React47.forwardRef(
27312
27766
  ({ className, ...props }, ref) => {
27313
- return /* @__PURE__ */ jsx75("div", { ref, className: cn("glass-card", className), ...props });
27767
+ return /* @__PURE__ */ jsx76("div", { ref, className: cn("glass-card", className), ...props });
27314
27768
  }
27315
27769
  );
27316
27770
  GlassCard.displayName = "GlassCard";
27317
27771
 
27318
27772
  // src/components/ui/hover-card.tsx
27319
- import * as React49 from "react";
27773
+ import * as React48 from "react";
27320
27774
  import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
27321
- import { jsx as jsx76 } from "react/jsx-runtime";
27775
+ import { jsx as jsx77 } from "react/jsx-runtime";
27322
27776
  var HoverCard = HoverCardPrimitive.Root;
27323
27777
  var HoverCardTrigger = HoverCardPrimitive.Trigger;
27324
- var HoverCardContent = React49.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx76(
27778
+ var HoverCardContent = React48.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx77(
27325
27779
  HoverCardPrimitive.Content,
27326
27780
  {
27327
27781
  ref,
@@ -27337,12 +27791,12 @@ var HoverCardContent = React49.forwardRef(({ className, align = "center", sideOf
27337
27791
  HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
27338
27792
 
27339
27793
  // src/components/ui/input-otp.tsx
27340
- import * as React50 from "react";
27794
+ import * as React49 from "react";
27341
27795
  import { OTPInput, OTPInputContext } from "input-otp";
27342
27796
  import { Dot } from "lucide-react";
27343
- import { jsx as jsx77, jsxs as jsxs47 } from "react/jsx-runtime";
27344
- var InputOTP = React50.forwardRef(
27345
- ({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ jsx77(
27797
+ import { jsx as jsx78, jsxs as jsxs47 } from "react/jsx-runtime";
27798
+ var InputOTP = React49.forwardRef(
27799
+ ({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ jsx78(
27346
27800
  OTPInput,
27347
27801
  {
27348
27802
  ref,
@@ -27353,12 +27807,12 @@ var InputOTP = React50.forwardRef(
27353
27807
  )
27354
27808
  );
27355
27809
  InputOTP.displayName = "InputOTP";
27356
- var InputOTPGroup = React50.forwardRef(
27357
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx77("div", { ref, className: cn("flex items-center", className), ...props })
27810
+ var InputOTPGroup = React49.forwardRef(
27811
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx78("div", { ref, className: cn("flex items-center", className), ...props })
27358
27812
  );
27359
27813
  InputOTPGroup.displayName = "InputOTPGroup";
27360
- var InputOTPSlot = React50.forwardRef(({ index, className, ...props }, ref) => {
27361
- const inputOTPContext = React50.useContext(OTPInputContext);
27814
+ var InputOTPSlot = React49.forwardRef(({ index, className, ...props }, ref) => {
27815
+ const inputOTPContext = React49.useContext(OTPInputContext);
27362
27816
  const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index];
27363
27817
  return /* @__PURE__ */ jsxs47(
27364
27818
  "div",
@@ -27372,28 +27826,28 @@ var InputOTPSlot = React50.forwardRef(({ index, className, ...props }, ref) => {
27372
27826
  ...props,
27373
27827
  children: [
27374
27828
  char,
27375
- hasFakeCaret && /* @__PURE__ */ jsx77("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx77("div", { className: "animate-caret-blink h-4 w-px bg-foreground duration-1000" }) })
27829
+ hasFakeCaret && /* @__PURE__ */ jsx78("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx78("div", { className: "animate-caret-blink h-4 w-px bg-foreground duration-1000" }) })
27376
27830
  ]
27377
27831
  }
27378
27832
  );
27379
27833
  });
27380
27834
  InputOTPSlot.displayName = "InputOTPSlot";
27381
- var InputOTPSeparator = React50.forwardRef(
27382
- ({ ...props }, ref) => /* @__PURE__ */ jsx77("div", { ref, role: "separator", ...props, children: /* @__PURE__ */ jsx77(Dot, {}) })
27835
+ var InputOTPSeparator = React49.forwardRef(
27836
+ ({ ...props }, ref) => /* @__PURE__ */ jsx78("div", { ref, role: "separator", ...props, children: /* @__PURE__ */ jsx78(Dot, {}) })
27383
27837
  );
27384
27838
  InputOTPSeparator.displayName = "InputOTPSeparator";
27385
27839
 
27386
27840
  // src/components/ui/menubar.tsx
27387
- import * as React51 from "react";
27841
+ import * as React50 from "react";
27388
27842
  import * as MenubarPrimitive from "@radix-ui/react-menubar";
27389
27843
  import { Check as Check8, ChevronRight as ChevronRight6, Circle as Circle4 } from "lucide-react";
27390
- import { jsx as jsx78, jsxs as jsxs48 } from "react/jsx-runtime";
27844
+ import { jsx as jsx79, jsxs as jsxs48 } from "react/jsx-runtime";
27391
27845
  var MenubarMenu = MenubarPrimitive.Menu;
27392
27846
  var MenubarGroup = MenubarPrimitive.Group;
27393
27847
  var MenubarPortal = MenubarPrimitive.Portal;
27394
27848
  var MenubarSub = MenubarPrimitive.Sub;
27395
27849
  var MenubarRadioGroup = MenubarPrimitive.RadioGroup;
27396
- var Menubar = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx78(
27850
+ var Menubar = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx79(
27397
27851
  MenubarPrimitive.Root,
27398
27852
  {
27399
27853
  ref,
@@ -27402,7 +27856,7 @@ var Menubar = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__
27402
27856
  }
27403
27857
  ));
27404
27858
  Menubar.displayName = MenubarPrimitive.Root.displayName;
27405
- var MenubarTrigger = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx78(
27859
+ var MenubarTrigger = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx79(
27406
27860
  MenubarPrimitive.Trigger,
27407
27861
  {
27408
27862
  ref,
@@ -27414,7 +27868,7 @@ var MenubarTrigger = React51.forwardRef(({ className, ...props }, ref) => /* @__
27414
27868
  }
27415
27869
  ));
27416
27870
  MenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName;
27417
- var MenubarSubTrigger = React51.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs48(
27871
+ var MenubarSubTrigger = React50.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs48(
27418
27872
  MenubarPrimitive.SubTrigger,
27419
27873
  {
27420
27874
  ref,
@@ -27426,12 +27880,12 @@ var MenubarSubTrigger = React51.forwardRef(({ className, inset, children, ...pro
27426
27880
  ...props,
27427
27881
  children: [
27428
27882
  children,
27429
- /* @__PURE__ */ jsx78(ChevronRight6, { className: "ml-auto h-4 w-4" })
27883
+ /* @__PURE__ */ jsx79(ChevronRight6, { className: "ml-auto h-4 w-4" })
27430
27884
  ]
27431
27885
  }
27432
27886
  ));
27433
27887
  MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;
27434
- var MenubarSubContent = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx78(
27888
+ var MenubarSubContent = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx79(
27435
27889
  MenubarPrimitive.SubContent,
27436
27890
  {
27437
27891
  ref,
@@ -27443,7 +27897,7 @@ var MenubarSubContent = React51.forwardRef(({ className, ...props }, ref) => /*
27443
27897
  }
27444
27898
  ));
27445
27899
  MenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName;
27446
- var MenubarContent = React51.forwardRef(({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx78(MenubarPrimitive.Portal, { children: /* @__PURE__ */ jsx78(
27900
+ var MenubarContent = React50.forwardRef(({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }, ref) => /* @__PURE__ */ jsx79(MenubarPrimitive.Portal, { children: /* @__PURE__ */ jsx79(
27447
27901
  MenubarPrimitive.Content,
27448
27902
  {
27449
27903
  ref,
@@ -27458,7 +27912,7 @@ var MenubarContent = React51.forwardRef(({ className, align = "start", alignOffs
27458
27912
  }
27459
27913
  ) }));
27460
27914
  MenubarContent.displayName = MenubarPrimitive.Content.displayName;
27461
- var MenubarItem = React51.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx78(
27915
+ var MenubarItem = React50.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx79(
27462
27916
  MenubarPrimitive.Item,
27463
27917
  {
27464
27918
  ref,
@@ -27471,7 +27925,7 @@ var MenubarItem = React51.forwardRef(({ className, inset, ...props }, ref) => /*
27471
27925
  }
27472
27926
  ));
27473
27927
  MenubarItem.displayName = MenubarPrimitive.Item.displayName;
27474
- var MenubarCheckboxItem = React51.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs48(
27928
+ var MenubarCheckboxItem = React50.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs48(
27475
27929
  MenubarPrimitive.CheckboxItem,
27476
27930
  {
27477
27931
  ref,
@@ -27482,13 +27936,13 @@ var MenubarCheckboxItem = React51.forwardRef(({ className, children, checked, ..
27482
27936
  checked,
27483
27937
  ...props,
27484
27938
  children: [
27485
- /* @__PURE__ */ jsx78("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx78(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx78(Check8, { className: "h-4 w-4" }) }) }),
27939
+ /* @__PURE__ */ jsx79("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx79(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx79(Check8, { className: "h-4 w-4" }) }) }),
27486
27940
  children
27487
27941
  ]
27488
27942
  }
27489
27943
  ));
27490
27944
  MenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName;
27491
- var MenubarRadioItem = React51.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs48(
27945
+ var MenubarRadioItem = React50.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs48(
27492
27946
  MenubarPrimitive.RadioItem,
27493
27947
  {
27494
27948
  ref,
@@ -27498,13 +27952,13 @@ var MenubarRadioItem = React51.forwardRef(({ className, children, ...props }, re
27498
27952
  ),
27499
27953
  ...props,
27500
27954
  children: [
27501
- /* @__PURE__ */ jsx78("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx78(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx78(Circle4, { className: "h-2 w-2 fill-current" }) }) }),
27955
+ /* @__PURE__ */ jsx79("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx79(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx79(Circle4, { className: "h-2 w-2 fill-current" }) }) }),
27502
27956
  children
27503
27957
  ]
27504
27958
  }
27505
27959
  ));
27506
27960
  MenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName;
27507
- var MenubarLabel = React51.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx78(
27961
+ var MenubarLabel = React50.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx79(
27508
27962
  MenubarPrimitive.Label,
27509
27963
  {
27510
27964
  ref,
@@ -27513,20 +27967,20 @@ var MenubarLabel = React51.forwardRef(({ className, inset, ...props }, ref) => /
27513
27967
  }
27514
27968
  ));
27515
27969
  MenubarLabel.displayName = MenubarPrimitive.Label.displayName;
27516
- var MenubarSeparator = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx78(MenubarPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
27970
+ var MenubarSeparator = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx79(MenubarPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
27517
27971
  MenubarSeparator.displayName = MenubarPrimitive.Separator.displayName;
27518
27972
  var MenubarShortcut = ({ className, ...props }) => {
27519
- return /* @__PURE__ */ jsx78("span", { className: cn("ml-auto text-xs tracking-widest text-muted-foreground", className), ...props });
27973
+ return /* @__PURE__ */ jsx79("span", { className: cn("ml-auto text-xs tracking-widest text-muted-foreground", className), ...props });
27520
27974
  };
27521
27975
  MenubarShortcut.displayname = "MenubarShortcut";
27522
27976
 
27523
27977
  // src/components/ui/navigation-menu.tsx
27524
- import * as React52 from "react";
27978
+ import * as React51 from "react";
27525
27979
  import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
27526
27980
  import { cva as cva5 } from "class-variance-authority";
27527
27981
  import { ChevronDown as ChevronDown7 } from "lucide-react";
27528
- import { jsx as jsx79, jsxs as jsxs49 } from "react/jsx-runtime";
27529
- var NavigationMenu = React52.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs49(
27982
+ import { jsx as jsx80, jsxs as jsxs49 } from "react/jsx-runtime";
27983
+ var NavigationMenu = React51.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs49(
27530
27984
  NavigationMenuPrimitive.Root,
27531
27985
  {
27532
27986
  ref,
@@ -27534,12 +27988,12 @@ var NavigationMenu = React52.forwardRef(({ className, children, ...props }, ref)
27534
27988
  ...props,
27535
27989
  children: [
27536
27990
  children,
27537
- /* @__PURE__ */ jsx79(NavigationMenuViewport, {})
27991
+ /* @__PURE__ */ jsx80(NavigationMenuViewport, {})
27538
27992
  ]
27539
27993
  }
27540
27994
  ));
27541
27995
  NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
27542
- var NavigationMenuList = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx79(
27996
+ var NavigationMenuList = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx80(
27543
27997
  NavigationMenuPrimitive.List,
27544
27998
  {
27545
27999
  ref,
@@ -27552,7 +28006,7 @@ var NavigationMenuItem = NavigationMenuPrimitive.Item;
27552
28006
  var navigationMenuTriggerStyle = cva5(
27553
28007
  "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50"
27554
28008
  );
27555
- var NavigationMenuTrigger = React52.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs49(
28009
+ var NavigationMenuTrigger = React51.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs49(
27556
28010
  NavigationMenuPrimitive.Trigger,
27557
28011
  {
27558
28012
  ref,
@@ -27561,7 +28015,7 @@ var NavigationMenuTrigger = React52.forwardRef(({ className, children, ...props
27561
28015
  children: [
27562
28016
  children,
27563
28017
  " ",
27564
- /* @__PURE__ */ jsx79(
28018
+ /* @__PURE__ */ jsx80(
27565
28019
  ChevronDown7,
27566
28020
  {
27567
28021
  className: "relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180",
@@ -27572,7 +28026,7 @@ var NavigationMenuTrigger = React52.forwardRef(({ className, children, ...props
27572
28026
  }
27573
28027
  ));
27574
28028
  NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
27575
- var NavigationMenuContent = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx79(
28029
+ var NavigationMenuContent = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx80(
27576
28030
  NavigationMenuPrimitive.Content,
27577
28031
  {
27578
28032
  ref,
@@ -27585,7 +28039,7 @@ var NavigationMenuContent = React52.forwardRef(({ className, ...props }, ref) =>
27585
28039
  ));
27586
28040
  NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
27587
28041
  var NavigationMenuLink = NavigationMenuPrimitive.Link;
27588
- var NavigationMenuViewport = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx79("div", { className: cn("absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ jsx79(
28042
+ var NavigationMenuViewport = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx80("div", { className: cn("absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ jsx80(
27589
28043
  NavigationMenuPrimitive.Viewport,
27590
28044
  {
27591
28045
  className: cn(
@@ -27597,7 +28051,7 @@ var NavigationMenuViewport = React52.forwardRef(({ className, ...props }, ref) =
27597
28051
  }
27598
28052
  ) }));
27599
28053
  NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
27600
- var NavigationMenuIndicator = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx79(
28054
+ var NavigationMenuIndicator = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx80(
27601
28055
  NavigationMenuPrimitive.Indicator,
27602
28056
  {
27603
28057
  ref,
@@ -27606,16 +28060,16 @@ var NavigationMenuIndicator = React52.forwardRef(({ className, ...props }, ref)
27606
28060
  className
27607
28061
  ),
27608
28062
  ...props,
27609
- children: /* @__PURE__ */ jsx79("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" })
28063
+ children: /* @__PURE__ */ jsx80("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" })
27610
28064
  }
27611
28065
  ));
27612
28066
  NavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName;
27613
28067
 
27614
28068
  // src/components/ui/pagination.tsx
27615
- import * as React53 from "react";
28069
+ import * as React52 from "react";
27616
28070
  import { ChevronLeft as ChevronLeft2, ChevronRight as ChevronRight7, MoreHorizontal as MoreHorizontal2 } from "lucide-react";
27617
- import { jsx as jsx80, jsxs as jsxs50 } from "react/jsx-runtime";
27618
- var Pagination = ({ className, ...props }) => /* @__PURE__ */ jsx80(
28071
+ import { jsx as jsx81, jsxs as jsxs50 } from "react/jsx-runtime";
28072
+ var Pagination = ({ className, ...props }) => /* @__PURE__ */ jsx81(
27619
28073
  "nav",
27620
28074
  {
27621
28075
  role: "navigation",
@@ -27625,13 +28079,13 @@ var Pagination = ({ className, ...props }) => /* @__PURE__ */ jsx80(
27625
28079
  }
27626
28080
  );
27627
28081
  Pagination.displayName = "Pagination";
27628
- var PaginationContent = React53.forwardRef(
27629
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx80("ul", { ref, className: cn("flex flex-row items-center gap-1", className), ...props })
28082
+ var PaginationContent = React52.forwardRef(
28083
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx81("ul", { ref, className: cn("flex flex-row items-center gap-1", className), ...props })
27630
28084
  );
27631
28085
  PaginationContent.displayName = "PaginationContent";
27632
- var PaginationItem = React53.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx80("li", { ref, className: cn("", className), ...props }));
28086
+ var PaginationItem = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx81("li", { ref, className: cn("", className), ...props }));
27633
28087
  PaginationItem.displayName = "PaginationItem";
27634
- var PaginationLink = ({ className, isActive, size = "icon", ...props }) => /* @__PURE__ */ jsx80(
28088
+ var PaginationLink = ({ className, isActive, size = "icon", ...props }) => /* @__PURE__ */ jsx81(
27635
28089
  "a",
27636
28090
  {
27637
28091
  "aria-current": isActive ? "page" : void 0,
@@ -27647,28 +28101,28 @@ var PaginationLink = ({ className, isActive, size = "icon", ...props }) => /* @_
27647
28101
  );
27648
28102
  PaginationLink.displayName = "PaginationLink";
27649
28103
  var PaginationPrevious = ({ className, ...props }) => /* @__PURE__ */ jsxs50(PaginationLink, { "aria-label": "Go to previous page", size: "default", className: cn("gap-1 pl-2.5", className), ...props, children: [
27650
- /* @__PURE__ */ jsx80(ChevronLeft2, { className: "h-4 w-4" }),
27651
- /* @__PURE__ */ jsx80("span", { children: "Previous" })
28104
+ /* @__PURE__ */ jsx81(ChevronLeft2, { className: "h-4 w-4" }),
28105
+ /* @__PURE__ */ jsx81("span", { children: "Previous" })
27652
28106
  ] });
27653
28107
  PaginationPrevious.displayName = "PaginationPrevious";
27654
28108
  var PaginationNext = ({ className, ...props }) => /* @__PURE__ */ jsxs50(PaginationLink, { "aria-label": "Go to next page", size: "default", className: cn("gap-1 pr-2.5", className), ...props, children: [
27655
- /* @__PURE__ */ jsx80("span", { children: "Next" }),
27656
- /* @__PURE__ */ jsx80(ChevronRight7, { className: "h-4 w-4" })
28109
+ /* @__PURE__ */ jsx81("span", { children: "Next" }),
28110
+ /* @__PURE__ */ jsx81(ChevronRight7, { className: "h-4 w-4" })
27657
28111
  ] });
27658
28112
  PaginationNext.displayName = "PaginationNext";
27659
28113
  var PaginationEllipsis = ({ className, ...props }) => /* @__PURE__ */ jsxs50("span", { "aria-hidden": true, className: cn("flex h-9 w-9 items-center justify-center", className), ...props, children: [
27660
- /* @__PURE__ */ jsx80(MoreHorizontal2, { className: "h-4 w-4" }),
27661
- /* @__PURE__ */ jsx80("span", { className: "sr-only", children: "More pages" })
28114
+ /* @__PURE__ */ jsx81(MoreHorizontal2, { className: "h-4 w-4" }),
28115
+ /* @__PURE__ */ jsx81("span", { className: "sr-only", children: "More pages" })
27662
28116
  ] });
27663
28117
  PaginationEllipsis.displayName = "PaginationEllipsis";
27664
28118
 
27665
28119
  // src/components/ui/popover.tsx
27666
- import * as React54 from "react";
28120
+ import * as React53 from "react";
27667
28121
  import * as PopoverPrimitive from "@radix-ui/react-popover";
27668
- import { jsx as jsx81 } from "react/jsx-runtime";
28122
+ import { jsx as jsx82 } from "react/jsx-runtime";
27669
28123
  var Popover = PopoverPrimitive.Root;
27670
28124
  var PopoverTrigger = PopoverPrimitive.Trigger;
27671
- var PopoverContent = React54.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx81(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx81(
28125
+ var PopoverContent = React53.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx82(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx82(
27672
28126
  PopoverPrimitive.Content,
27673
28127
  {
27674
28128
  ref,
@@ -27684,16 +28138,16 @@ var PopoverContent = React54.forwardRef(({ className, align = "center", sideOffs
27684
28138
  PopoverContent.displayName = PopoverPrimitive.Content.displayName;
27685
28139
 
27686
28140
  // src/components/ui/radio-group.tsx
27687
- import * as React55 from "react";
28141
+ import * as React54 from "react";
27688
28142
  import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
27689
28143
  import { Circle as Circle5 } from "lucide-react";
27690
- import { jsx as jsx82 } from "react/jsx-runtime";
27691
- var RadioGroup4 = React55.forwardRef(({ className, ...props }, ref) => {
27692
- return /* @__PURE__ */ jsx82(RadioGroupPrimitive.Root, { className: cn("grid gap-2", className), ...props, ref });
28144
+ import { jsx as jsx83 } from "react/jsx-runtime";
28145
+ var RadioGroup4 = React54.forwardRef(({ className, ...props }, ref) => {
28146
+ return /* @__PURE__ */ jsx83(RadioGroupPrimitive.Root, { className: cn("grid gap-2", className), ...props, ref });
27693
28147
  });
27694
28148
  RadioGroup4.displayName = RadioGroupPrimitive.Root.displayName;
27695
- var RadioGroupItem = React55.forwardRef(({ className, ...props }, ref) => {
27696
- return /* @__PURE__ */ jsx82(
28149
+ var RadioGroupItem = React54.forwardRef(({ className, ...props }, ref) => {
28150
+ return /* @__PURE__ */ jsx83(
27697
28151
  RadioGroupPrimitive.Item,
27698
28152
  {
27699
28153
  ref,
@@ -27702,7 +28156,7 @@ var RadioGroupItem = React55.forwardRef(({ className, ...props }, ref) => {
27702
28156
  className
27703
28157
  ),
27704
28158
  ...props,
27705
- children: /* @__PURE__ */ jsx82(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx82(Circle5, { className: "h-2.5 w-2.5 fill-current text-current" }) })
28159
+ children: /* @__PURE__ */ jsx83(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx83(Circle5, { className: "h-2.5 w-2.5 fill-current text-current" }) })
27706
28160
  }
27707
28161
  );
27708
28162
  });
@@ -27711,8 +28165,8 @@ RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
27711
28165
  // src/components/ui/resizable.tsx
27712
28166
  import { GripVertical } from "lucide-react";
27713
28167
  import * as ResizablePrimitive from "react-resizable-panels";
27714
- import { jsx as jsx83 } from "react/jsx-runtime";
27715
- var ResizablePanelGroup = ({ className, ...props }) => /* @__PURE__ */ jsx83(
28168
+ import { jsx as jsx84 } from "react/jsx-runtime";
28169
+ var ResizablePanelGroup = ({ className, ...props }) => /* @__PURE__ */ jsx84(
27716
28170
  ResizablePrimitive.PanelGroup,
27717
28171
  {
27718
28172
  className: cn("flex h-full w-full data-[panel-group-direction=vertical]:flex-col", className),
@@ -27724,7 +28178,7 @@ var ResizableHandle = ({
27724
28178
  withHandle,
27725
28179
  className,
27726
28180
  ...props
27727
- }) => /* @__PURE__ */ jsx83(
28181
+ }) => /* @__PURE__ */ jsx84(
27728
28182
  ResizablePrimitive.PanelResizeHandle,
27729
28183
  {
27730
28184
  className: cn(
@@ -27732,15 +28186,15 @@ var ResizableHandle = ({
27732
28186
  className
27733
28187
  ),
27734
28188
  ...props,
27735
- children: withHandle && /* @__PURE__ */ jsx83("div", { className: "z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border", children: /* @__PURE__ */ jsx83(GripVertical, { className: "h-2.5 w-2.5" }) })
28189
+ children: withHandle && /* @__PURE__ */ jsx84("div", { className: "z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border", children: /* @__PURE__ */ jsx84(GripVertical, { className: "h-2.5 w-2.5" }) })
27736
28190
  }
27737
28191
  );
27738
28192
 
27739
28193
  // src/components/ui/separator.tsx
27740
- import * as React56 from "react";
28194
+ import * as React55 from "react";
27741
28195
  import * as SeparatorPrimitive from "@radix-ui/react-separator";
27742
- import { jsx as jsx84 } from "react/jsx-runtime";
27743
- var Separator5 = React56.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx84(
28196
+ import { jsx as jsx85 } from "react/jsx-runtime";
28197
+ var Separator5 = React55.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx85(
27744
28198
  SeparatorPrimitive.Root,
27745
28199
  {
27746
28200
  ref,
@@ -27756,13 +28210,13 @@ Separator5.displayName = SeparatorPrimitive.Root.displayName;
27756
28210
  import * as SheetPrimitive from "@radix-ui/react-dialog";
27757
28211
  import { cva as cva6 } from "class-variance-authority";
27758
28212
  import { X as X7 } from "lucide-react";
27759
- import * as React57 from "react";
27760
- import { jsx as jsx85, jsxs as jsxs51 } from "react/jsx-runtime";
28213
+ import * as React56 from "react";
28214
+ import { jsx as jsx86, jsxs as jsxs51 } from "react/jsx-runtime";
27761
28215
  var Sheet = SheetPrimitive.Root;
27762
28216
  var SheetTrigger = SheetPrimitive.Trigger;
27763
28217
  var SheetClose = SheetPrimitive.Close;
27764
28218
  var SheetPortal = SheetPrimitive.Portal;
27765
- var SheetOverlay = React57.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx85(
28219
+ var SheetOverlay = React56.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx86(
27766
28220
  SheetPrimitive.Overlay,
27767
28221
  {
27768
28222
  className: cn(
@@ -27790,7 +28244,7 @@ var sheetVariants = cva6(
27790
28244
  }
27791
28245
  }
27792
28246
  );
27793
- var SheetContent = React57.forwardRef(
28247
+ var SheetContent = React56.forwardRef(
27794
28248
  ({
27795
28249
  side = "right",
27796
28250
  className,
@@ -27800,7 +28254,7 @@ var SheetContent = React57.forwardRef(
27800
28254
  closeButtonLabel = "Close",
27801
28255
  ...props
27802
28256
  }, ref) => /* @__PURE__ */ jsxs51(SheetPortal, { children: [
27803
- /* @__PURE__ */ jsx85(SheetOverlay, {}),
28257
+ /* @__PURE__ */ jsx86(SheetOverlay, {}),
27804
28258
  /* @__PURE__ */ jsxs51(SheetPrimitive.Content, { ref, className: cn(sheetVariants({ side }), className), ...props, children: [
27805
28259
  children,
27806
28260
  showCloseButton ? /* @__PURE__ */ jsxs51(
@@ -27811,8 +28265,8 @@ var SheetContent = React57.forwardRef(
27811
28265
  closeButtonClassName
27812
28266
  ),
27813
28267
  children: [
27814
- /* @__PURE__ */ jsx85(X7, { className: "h-4 w-4" }),
27815
- /* @__PURE__ */ jsx85("span", { className: "sr-only", children: closeButtonLabel })
28268
+ /* @__PURE__ */ jsx86(X7, { className: "h-4 w-4" }),
28269
+ /* @__PURE__ */ jsx86("span", { className: "sr-only", children: closeButtonLabel })
27816
28270
  ]
27817
28271
  }
27818
28272
  ) : null
@@ -27820,27 +28274,27 @@ var SheetContent = React57.forwardRef(
27820
28274
  ] })
27821
28275
  );
27822
28276
  SheetContent.displayName = SheetPrimitive.Content.displayName;
27823
- var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx85("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props });
28277
+ var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx86("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props });
27824
28278
  SheetHeader.displayName = "SheetHeader";
27825
- var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ jsx85("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
28279
+ var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ jsx86("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
27826
28280
  SheetFooter.displayName = "SheetFooter";
27827
- var SheetTitle = React57.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx85(SheetPrimitive.Title, { ref, className: cn("text-lg font-semibold text-foreground", className), ...props }));
28281
+ var SheetTitle = React56.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx86(SheetPrimitive.Title, { ref, className: cn("text-lg font-semibold text-foreground", className), ...props }));
27828
28282
  SheetTitle.displayName = SheetPrimitive.Title.displayName;
27829
- var SheetDescription = React57.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx85(SheetPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
28283
+ var SheetDescription = React56.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx86(SheetPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
27830
28284
  SheetDescription.displayName = SheetPrimitive.Description.displayName;
27831
28285
 
27832
28286
  // src/components/ui/sidebar.tsx
27833
- import * as React59 from "react";
28287
+ import * as React58 from "react";
27834
28288
  import { Slot as Slot4 } from "@radix-ui/react-slot";
27835
28289
  import { cva as cva7 } from "class-variance-authority";
27836
28290
  import { PanelLeft as PanelLeft2 } from "lucide-react";
27837
28291
 
27838
28292
  // src/hooks/use-mobile.tsx
27839
- import * as React58 from "react";
28293
+ import * as React57 from "react";
27840
28294
  var MOBILE_BREAKPOINT = 768;
27841
28295
  function useIsMobile() {
27842
- const [isMobile, setIsMobile] = React58.useState(void 0);
27843
- React58.useEffect(() => {
28296
+ const [isMobile, setIsMobile] = React57.useState(void 0);
28297
+ React57.useEffect(() => {
27844
28298
  const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
27845
28299
  const onChange = () => {
27846
28300
  setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
@@ -27853,27 +28307,27 @@ function useIsMobile() {
27853
28307
  }
27854
28308
 
27855
28309
  // src/components/ui/sidebar.tsx
27856
- import { jsx as jsx86, jsxs as jsxs52 } from "react/jsx-runtime";
28310
+ import { jsx as jsx87, jsxs as jsxs52 } from "react/jsx-runtime";
27857
28311
  var SIDEBAR_COOKIE_NAME = "sidebar:state";
27858
28312
  var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
27859
28313
  var SIDEBAR_WIDTH = "16rem";
27860
28314
  var SIDEBAR_WIDTH_MOBILE = "18rem";
27861
28315
  var SIDEBAR_WIDTH_ICON = "3rem";
27862
28316
  var SIDEBAR_KEYBOARD_SHORTCUT = "b";
27863
- var SidebarContext = React59.createContext(null);
28317
+ var SidebarContext = React58.createContext(null);
27864
28318
  function useSidebar() {
27865
- const context = React59.useContext(SidebarContext);
28319
+ const context = React58.useContext(SidebarContext);
27866
28320
  if (!context) {
27867
28321
  throw new Error("useSidebar must be used within a SidebarProvider.");
27868
28322
  }
27869
28323
  return context;
27870
28324
  }
27871
- var SidebarProvider = React59.forwardRef(({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }, ref) => {
28325
+ var SidebarProvider = React58.forwardRef(({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }, ref) => {
27872
28326
  const isMobile = useIsMobile();
27873
- const [openMobile, setOpenMobile] = React59.useState(false);
27874
- const [_open, _setOpen] = React59.useState(defaultOpen);
28327
+ const [openMobile, setOpenMobile] = React58.useState(false);
28328
+ const [_open, _setOpen] = React58.useState(defaultOpen);
27875
28329
  const open = openProp != null ? openProp : _open;
27876
- const setOpen = React59.useCallback(
28330
+ const setOpen = React58.useCallback(
27877
28331
  (value) => {
27878
28332
  const openState = typeof value === "function" ? value(open) : value;
27879
28333
  if (setOpenProp) {
@@ -27885,10 +28339,10 @@ var SidebarProvider = React59.forwardRef(({ defaultOpen = true, open: openProp,
27885
28339
  },
27886
28340
  [setOpenProp, open]
27887
28341
  );
27888
- const toggleSidebar = React59.useCallback(() => {
28342
+ const toggleSidebar = React58.useCallback(() => {
27889
28343
  return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
27890
28344
  }, [isMobile, setOpen, setOpenMobile]);
27891
- React59.useEffect(() => {
28345
+ React58.useEffect(() => {
27892
28346
  const handleKeyDown = (event) => {
27893
28347
  if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
27894
28348
  event.preventDefault();
@@ -27899,7 +28353,7 @@ var SidebarProvider = React59.forwardRef(({ defaultOpen = true, open: openProp,
27899
28353
  return () => window.removeEventListener("keydown", handleKeyDown);
27900
28354
  }, [toggleSidebar]);
27901
28355
  const state = open ? "expanded" : "collapsed";
27902
- const contextValue = React59.useMemo(
28356
+ const contextValue = React58.useMemo(
27903
28357
  () => ({
27904
28358
  state,
27905
28359
  open,
@@ -27911,7 +28365,7 @@ var SidebarProvider = React59.forwardRef(({ defaultOpen = true, open: openProp,
27911
28365
  }),
27912
28366
  [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
27913
28367
  );
27914
- return /* @__PURE__ */ jsx86(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx86(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx86(
28368
+ return /* @__PURE__ */ jsx87(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx87(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx87(
27915
28369
  "div",
27916
28370
  {
27917
28371
  style: {
@@ -27927,10 +28381,10 @@ var SidebarProvider = React59.forwardRef(({ defaultOpen = true, open: openProp,
27927
28381
  ) }) });
27928
28382
  });
27929
28383
  SidebarProvider.displayName = "SidebarProvider";
27930
- var Sidebar = React59.forwardRef(({ side = "left", variant = "sidebar", collapsible = "offcanvas", className, children, ...props }, ref) => {
28384
+ var Sidebar = React58.forwardRef(({ side = "left", variant = "sidebar", collapsible = "offcanvas", className, children, ...props }, ref) => {
27931
28385
  const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
27932
28386
  if (collapsible === "none") {
27933
- return /* @__PURE__ */ jsx86(
28387
+ return /* @__PURE__ */ jsx87(
27934
28388
  "div",
27935
28389
  {
27936
28390
  className: cn("flex h-full w-[--sidebar-width] flex-col bg-sidebar text-sidebar-foreground", className),
@@ -27941,7 +28395,7 @@ var Sidebar = React59.forwardRef(({ side = "left", variant = "sidebar", collapsi
27941
28395
  );
27942
28396
  }
27943
28397
  if (isMobile) {
27944
- return /* @__PURE__ */ jsx86(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsx86(
28398
+ return /* @__PURE__ */ jsx87(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsx87(
27945
28399
  SheetContent,
27946
28400
  {
27947
28401
  "data-sidebar": "sidebar",
@@ -27951,7 +28405,7 @@ var Sidebar = React59.forwardRef(({ side = "left", variant = "sidebar", collapsi
27951
28405
  "--sidebar-width": SIDEBAR_WIDTH_MOBILE
27952
28406
  },
27953
28407
  side,
27954
- children: /* @__PURE__ */ jsx86("div", { className: "flex h-full w-full flex-col", children })
28408
+ children: /* @__PURE__ */ jsx87("div", { className: "flex h-full w-full flex-col", children })
27955
28409
  }
27956
28410
  ) });
27957
28411
  }
@@ -27965,7 +28419,7 @@ var Sidebar = React59.forwardRef(({ side = "left", variant = "sidebar", collapsi
27965
28419
  "data-variant": variant,
27966
28420
  "data-side": side,
27967
28421
  children: [
27968
- /* @__PURE__ */ jsx86(
28422
+ /* @__PURE__ */ jsx87(
27969
28423
  "div",
27970
28424
  {
27971
28425
  className: cn(
@@ -27976,7 +28430,7 @@ var Sidebar = React59.forwardRef(({ side = "left", variant = "sidebar", collapsi
27976
28430
  )
27977
28431
  }
27978
28432
  ),
27979
- /* @__PURE__ */ jsx86(
28433
+ /* @__PURE__ */ jsx87(
27980
28434
  "div",
27981
28435
  {
27982
28436
  className: cn(
@@ -27987,7 +28441,7 @@ var Sidebar = React59.forwardRef(({ side = "left", variant = "sidebar", collapsi
27987
28441
  className
27988
28442
  ),
27989
28443
  ...props,
27990
- children: /* @__PURE__ */ jsx86(
28444
+ children: /* @__PURE__ */ jsx87(
27991
28445
  "div",
27992
28446
  {
27993
28447
  "data-sidebar": "sidebar",
@@ -28002,7 +28456,7 @@ var Sidebar = React59.forwardRef(({ side = "left", variant = "sidebar", collapsi
28002
28456
  );
28003
28457
  });
28004
28458
  Sidebar.displayName = "Sidebar";
28005
- var SidebarTrigger = React59.forwardRef(
28459
+ var SidebarTrigger = React58.forwardRef(
28006
28460
  ({ className, onClick, ...props }, ref) => {
28007
28461
  const { toggleSidebar } = useSidebar();
28008
28462
  return /* @__PURE__ */ jsxs52(
@@ -28019,18 +28473,18 @@ var SidebarTrigger = React59.forwardRef(
28019
28473
  },
28020
28474
  ...props,
28021
28475
  children: [
28022
- /* @__PURE__ */ jsx86(PanelLeft2, {}),
28023
- /* @__PURE__ */ jsx86("span", { className: "sr-only", children: "Toggle Sidebar" })
28476
+ /* @__PURE__ */ jsx87(PanelLeft2, {}),
28477
+ /* @__PURE__ */ jsx87("span", { className: "sr-only", children: "Toggle Sidebar" })
28024
28478
  ]
28025
28479
  }
28026
28480
  );
28027
28481
  }
28028
28482
  );
28029
28483
  SidebarTrigger.displayName = "SidebarTrigger";
28030
- var SidebarRail = React59.forwardRef(
28484
+ var SidebarRail = React58.forwardRef(
28031
28485
  ({ className, ...props }, ref) => {
28032
28486
  const { toggleSidebar } = useSidebar();
28033
- return /* @__PURE__ */ jsx86(
28487
+ return /* @__PURE__ */ jsx87(
28034
28488
  "button",
28035
28489
  {
28036
28490
  ref,
@@ -28054,8 +28508,8 @@ var SidebarRail = React59.forwardRef(
28054
28508
  }
28055
28509
  );
28056
28510
  SidebarRail.displayName = "SidebarRail";
28057
- var SidebarInset = React59.forwardRef(({ className, ...props }, ref) => {
28058
- return /* @__PURE__ */ jsx86(
28511
+ var SidebarInset = React58.forwardRef(({ className, ...props }, ref) => {
28512
+ return /* @__PURE__ */ jsx87(
28059
28513
  "main",
28060
28514
  {
28061
28515
  ref,
@@ -28069,9 +28523,9 @@ var SidebarInset = React59.forwardRef(({ className, ...props }, ref) => {
28069
28523
  );
28070
28524
  });
28071
28525
  SidebarInset.displayName = "SidebarInset";
28072
- var SidebarInput = React59.forwardRef(
28526
+ var SidebarInput = React58.forwardRef(
28073
28527
  ({ className, ...props }, ref) => {
28074
- return /* @__PURE__ */ jsx86(
28528
+ return /* @__PURE__ */ jsx87(
28075
28529
  Input,
28076
28530
  {
28077
28531
  ref,
@@ -28086,17 +28540,17 @@ var SidebarInput = React59.forwardRef(
28086
28540
  }
28087
28541
  );
28088
28542
  SidebarInput.displayName = "SidebarInput";
28089
- var SidebarHeader = React59.forwardRef(({ className, ...props }, ref) => {
28090
- return /* @__PURE__ */ jsx86("div", { ref, "data-sidebar": "header", className: cn("flex flex-col gap-2 p-2", className), ...props });
28543
+ var SidebarHeader = React58.forwardRef(({ className, ...props }, ref) => {
28544
+ return /* @__PURE__ */ jsx87("div", { ref, "data-sidebar": "header", className: cn("flex flex-col gap-2 p-2", className), ...props });
28091
28545
  });
28092
28546
  SidebarHeader.displayName = "SidebarHeader";
28093
- var SidebarFooter = React59.forwardRef(({ className, ...props }, ref) => {
28094
- return /* @__PURE__ */ jsx86("div", { ref, "data-sidebar": "footer", className: cn("flex flex-col gap-2 p-2", className), ...props });
28547
+ var SidebarFooter = React58.forwardRef(({ className, ...props }, ref) => {
28548
+ return /* @__PURE__ */ jsx87("div", { ref, "data-sidebar": "footer", className: cn("flex flex-col gap-2 p-2", className), ...props });
28095
28549
  });
28096
28550
  SidebarFooter.displayName = "SidebarFooter";
28097
- var SidebarSeparator = React59.forwardRef(
28551
+ var SidebarSeparator = React58.forwardRef(
28098
28552
  ({ className, ...props }, ref) => {
28099
- return /* @__PURE__ */ jsx86(
28553
+ return /* @__PURE__ */ jsx87(
28100
28554
  Separator5,
28101
28555
  {
28102
28556
  ref,
@@ -28108,8 +28562,8 @@ var SidebarSeparator = React59.forwardRef(
28108
28562
  }
28109
28563
  );
28110
28564
  SidebarSeparator.displayName = "SidebarSeparator";
28111
- var SidebarContent = React59.forwardRef(({ className, ...props }, ref) => {
28112
- return /* @__PURE__ */ jsx86(
28565
+ var SidebarContent = React58.forwardRef(({ className, ...props }, ref) => {
28566
+ return /* @__PURE__ */ jsx87(
28113
28567
  "div",
28114
28568
  {
28115
28569
  ref,
@@ -28123,8 +28577,8 @@ var SidebarContent = React59.forwardRef(({ className, ...props }, ref) => {
28123
28577
  );
28124
28578
  });
28125
28579
  SidebarContent.displayName = "SidebarContent";
28126
- var SidebarGroup = React59.forwardRef(({ className, ...props }, ref) => {
28127
- return /* @__PURE__ */ jsx86(
28580
+ var SidebarGroup = React58.forwardRef(({ className, ...props }, ref) => {
28581
+ return /* @__PURE__ */ jsx87(
28128
28582
  "div",
28129
28583
  {
28130
28584
  ref,
@@ -28135,10 +28589,10 @@ var SidebarGroup = React59.forwardRef(({ className, ...props }, ref) => {
28135
28589
  );
28136
28590
  });
28137
28591
  SidebarGroup.displayName = "SidebarGroup";
28138
- var SidebarGroupLabel = React59.forwardRef(
28592
+ var SidebarGroupLabel = React58.forwardRef(
28139
28593
  ({ className, asChild = false, ...props }, ref) => {
28140
28594
  const Comp = asChild ? Slot4 : "div";
28141
- return /* @__PURE__ */ jsx86(
28595
+ return /* @__PURE__ */ jsx87(
28142
28596
  Comp,
28143
28597
  {
28144
28598
  ref,
@@ -28154,10 +28608,10 @@ var SidebarGroupLabel = React59.forwardRef(
28154
28608
  }
28155
28609
  );
28156
28610
  SidebarGroupLabel.displayName = "SidebarGroupLabel";
28157
- var SidebarGroupAction = React59.forwardRef(
28611
+ var SidebarGroupAction = React58.forwardRef(
28158
28612
  ({ className, asChild = false, ...props }, ref) => {
28159
28613
  const Comp = asChild ? Slot4 : "button";
28160
- return /* @__PURE__ */ jsx86(
28614
+ return /* @__PURE__ */ jsx87(
28161
28615
  Comp,
28162
28616
  {
28163
28617
  ref,
@@ -28175,13 +28629,13 @@ var SidebarGroupAction = React59.forwardRef(
28175
28629
  }
28176
28630
  );
28177
28631
  SidebarGroupAction.displayName = "SidebarGroupAction";
28178
- var SidebarGroupContent = React59.forwardRef(
28179
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx86("div", { ref, "data-sidebar": "group-content", className: cn("w-full text-sm", className), ...props })
28632
+ var SidebarGroupContent = React58.forwardRef(
28633
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx87("div", { ref, "data-sidebar": "group-content", className: cn("w-full text-sm", className), ...props })
28180
28634
  );
28181
28635
  SidebarGroupContent.displayName = "SidebarGroupContent";
28182
- var SidebarMenu = React59.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx86("ul", { ref, "data-sidebar": "menu", className: cn("flex w-full min-w-0 flex-col gap-1", className), ...props }));
28636
+ var SidebarMenu = React58.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx87("ul", { ref, "data-sidebar": "menu", className: cn("flex w-full min-w-0 flex-col gap-1", className), ...props }));
28183
28637
  SidebarMenu.displayName = "SidebarMenu";
28184
- var SidebarMenuItem = React59.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx86("li", { ref, "data-sidebar": "menu-item", className: cn("group/menu-item relative", className), ...props }));
28638
+ var SidebarMenuItem = React58.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx87("li", { ref, "data-sidebar": "menu-item", className: cn("group/menu-item relative", className), ...props }));
28185
28639
  SidebarMenuItem.displayName = "SidebarMenuItem";
28186
28640
  var sidebarMenuButtonVariants = cva7(
28187
28641
  "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
@@ -28203,10 +28657,10 @@ var sidebarMenuButtonVariants = cva7(
28203
28657
  }
28204
28658
  }
28205
28659
  );
28206
- var SidebarMenuButton = React59.forwardRef(({ asChild = false, isActive = false, variant = "default", size = "default", tooltip, className, ...props }, ref) => {
28660
+ var SidebarMenuButton = React58.forwardRef(({ asChild = false, isActive = false, variant = "default", size = "default", tooltip, className, ...props }, ref) => {
28207
28661
  const Comp = asChild ? Slot4 : "button";
28208
28662
  const { isMobile, state } = useSidebar();
28209
- const button = /* @__PURE__ */ jsx86(
28663
+ const button = /* @__PURE__ */ jsx87(
28210
28664
  Comp,
28211
28665
  {
28212
28666
  ref,
@@ -28226,14 +28680,14 @@ var SidebarMenuButton = React59.forwardRef(({ asChild = false, isActive = false,
28226
28680
  };
28227
28681
  }
28228
28682
  return /* @__PURE__ */ jsxs52(Tooltip, { children: [
28229
- /* @__PURE__ */ jsx86(TooltipTrigger, { asChild: true, children: button }),
28230
- /* @__PURE__ */ jsx86(TooltipContent, { side: "right", align: "center", hidden: state !== "collapsed" || isMobile, ...tooltip })
28683
+ /* @__PURE__ */ jsx87(TooltipTrigger, { asChild: true, children: button }),
28684
+ /* @__PURE__ */ jsx87(TooltipContent, { side: "right", align: "center", hidden: state !== "collapsed" || isMobile, ...tooltip })
28231
28685
  ] });
28232
28686
  });
28233
28687
  SidebarMenuButton.displayName = "SidebarMenuButton";
28234
- var SidebarMenuAction = React59.forwardRef(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
28688
+ var SidebarMenuAction = React58.forwardRef(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
28235
28689
  const Comp = asChild ? Slot4 : "button";
28236
- return /* @__PURE__ */ jsx86(
28690
+ return /* @__PURE__ */ jsx87(
28237
28691
  Comp,
28238
28692
  {
28239
28693
  ref,
@@ -28254,8 +28708,8 @@ var SidebarMenuAction = React59.forwardRef(({ className, asChild = false, showOn
28254
28708
  );
28255
28709
  });
28256
28710
  SidebarMenuAction.displayName = "SidebarMenuAction";
28257
- var SidebarMenuBadge = React59.forwardRef(
28258
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx86(
28711
+ var SidebarMenuBadge = React58.forwardRef(
28712
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx87(
28259
28713
  "div",
28260
28714
  {
28261
28715
  ref,
@@ -28274,8 +28728,8 @@ var SidebarMenuBadge = React59.forwardRef(
28274
28728
  )
28275
28729
  );
28276
28730
  SidebarMenuBadge.displayName = "SidebarMenuBadge";
28277
- var SidebarMenuSkeleton = React59.forwardRef(({ className, showIcon = false, ...props }, ref) => {
28278
- const width = React59.useMemo(() => {
28731
+ var SidebarMenuSkeleton = React58.forwardRef(({ className, showIcon = false, ...props }, ref) => {
28732
+ const width = React58.useMemo(() => {
28279
28733
  return `${Math.floor(Math.random() * 40) + 50}%`;
28280
28734
  }, []);
28281
28735
  return /* @__PURE__ */ jsxs52(
@@ -28286,8 +28740,8 @@ var SidebarMenuSkeleton = React59.forwardRef(({ className, showIcon = false, ...
28286
28740
  className: cn("flex h-8 items-center gap-2 rounded-md px-2", className),
28287
28741
  ...props,
28288
28742
  children: [
28289
- showIcon && /* @__PURE__ */ jsx86(Skeleton, { className: "size-4 rounded-md", "data-sidebar": "menu-skeleton-icon" }),
28290
- /* @__PURE__ */ jsx86(
28743
+ showIcon && /* @__PURE__ */ jsx87(Skeleton, { className: "size-4 rounded-md", "data-sidebar": "menu-skeleton-icon" }),
28744
+ /* @__PURE__ */ jsx87(
28291
28745
  Skeleton,
28292
28746
  {
28293
28747
  className: "h-4 max-w-[--skeleton-width] flex-1",
@@ -28302,8 +28756,8 @@ var SidebarMenuSkeleton = React59.forwardRef(({ className, showIcon = false, ...
28302
28756
  );
28303
28757
  });
28304
28758
  SidebarMenuSkeleton.displayName = "SidebarMenuSkeleton";
28305
- var SidebarMenuSub = React59.forwardRef(
28306
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx86(
28759
+ var SidebarMenuSub = React58.forwardRef(
28760
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx87(
28307
28761
  "ul",
28308
28762
  {
28309
28763
  ref,
@@ -28318,11 +28772,11 @@ var SidebarMenuSub = React59.forwardRef(
28318
28772
  )
28319
28773
  );
28320
28774
  SidebarMenuSub.displayName = "SidebarMenuSub";
28321
- var SidebarMenuSubItem = React59.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx86("li", { ref, ...props }));
28775
+ var SidebarMenuSubItem = React58.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx87("li", { ref, ...props }));
28322
28776
  SidebarMenuSubItem.displayName = "SidebarMenuSubItem";
28323
- var SidebarMenuSubButton = React59.forwardRef(({ asChild = false, size = "md", isActive, className, ...props }, ref) => {
28777
+ var SidebarMenuSubButton = React58.forwardRef(({ asChild = false, size = "md", isActive, className, ...props }, ref) => {
28324
28778
  const Comp = asChild ? Slot4 : "a";
28325
- return /* @__PURE__ */ jsx86(
28779
+ return /* @__PURE__ */ jsx87(
28326
28780
  Comp,
28327
28781
  {
28328
28782
  ref,
@@ -28344,44 +28798,44 @@ var SidebarMenuSubButton = React59.forwardRef(({ asChild = false, size = "md", i
28344
28798
  SidebarMenuSubButton.displayName = "SidebarMenuSubButton";
28345
28799
 
28346
28800
  // src/components/ui/slider.tsx
28347
- import * as React60 from "react";
28801
+ import * as React59 from "react";
28348
28802
  import * as SliderPrimitive from "@radix-ui/react-slider";
28349
- import { jsx as jsx87, jsxs as jsxs53 } from "react/jsx-runtime";
28350
- var Slider = React60.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs53(
28803
+ import { jsx as jsx88, jsxs as jsxs53 } from "react/jsx-runtime";
28804
+ var Slider = React59.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs53(
28351
28805
  SliderPrimitive.Root,
28352
28806
  {
28353
28807
  ref,
28354
28808
  className: cn("relative flex w-full touch-none select-none items-center", className),
28355
28809
  ...props,
28356
28810
  children: [
28357
- /* @__PURE__ */ jsx87(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ jsx87(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
28358
- /* @__PURE__ */ jsx87(SliderPrimitive.Thumb, { className: "block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50" })
28811
+ /* @__PURE__ */ jsx88(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ jsx88(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
28812
+ /* @__PURE__ */ jsx88(SliderPrimitive.Thumb, { className: "block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50" })
28359
28813
  ]
28360
28814
  }
28361
28815
  ));
28362
28816
  Slider.displayName = SliderPrimitive.Root.displayName;
28363
28817
 
28364
28818
  // src/components/ui/table.tsx
28365
- import * as React61 from "react";
28366
- import { jsx as jsx88 } from "react/jsx-runtime";
28367
- var Table = React61.forwardRef(
28368
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx88("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx88("table", { ref, className: cn("w-full caption-bottom text-sm", className), ...props }) })
28819
+ import * as React60 from "react";
28820
+ import { jsx as jsx89 } from "react/jsx-runtime";
28821
+ var Table = React60.forwardRef(
28822
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx89("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx89("table", { ref, className: cn("w-full caption-bottom text-sm", className), ...props }) })
28369
28823
  );
28370
28824
  Table.displayName = "Table";
28371
- var TableHeader = React61.forwardRef(
28372
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx88("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
28825
+ var TableHeader = React60.forwardRef(
28826
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx89("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
28373
28827
  );
28374
28828
  TableHeader.displayName = "TableHeader";
28375
- var TableBody = React61.forwardRef(
28376
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx88("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props })
28829
+ var TableBody = React60.forwardRef(
28830
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx89("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props })
28377
28831
  );
28378
28832
  TableBody.displayName = "TableBody";
28379
- var TableFooter = React61.forwardRef(
28380
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx88("tfoot", { ref, className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className), ...props })
28833
+ var TableFooter = React60.forwardRef(
28834
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx89("tfoot", { ref, className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className), ...props })
28381
28835
  );
28382
28836
  TableFooter.displayName = "TableFooter";
28383
- var TableRow = React61.forwardRef(
28384
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx88(
28837
+ var TableRow = React60.forwardRef(
28838
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx89(
28385
28839
  "tr",
28386
28840
  {
28387
28841
  ref,
@@ -28391,8 +28845,8 @@ var TableRow = React61.forwardRef(
28391
28845
  )
28392
28846
  );
28393
28847
  TableRow.displayName = "TableRow";
28394
- var TableHead = React61.forwardRef(
28395
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx88(
28848
+ var TableHead = React60.forwardRef(
28849
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx89(
28396
28850
  "th",
28397
28851
  {
28398
28852
  ref,
@@ -28405,23 +28859,23 @@ var TableHead = React61.forwardRef(
28405
28859
  )
28406
28860
  );
28407
28861
  TableHead.displayName = "TableHead";
28408
- var TableCell = React61.forwardRef(
28409
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx88("td", { ref, className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className), ...props })
28862
+ var TableCell = React60.forwardRef(
28863
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx89("td", { ref, className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className), ...props })
28410
28864
  );
28411
28865
  TableCell.displayName = "TableCell";
28412
- var TableCaption = React61.forwardRef(
28413
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx88("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props })
28866
+ var TableCaption = React60.forwardRef(
28867
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx89("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props })
28414
28868
  );
28415
28869
  TableCaption.displayName = "TableCaption";
28416
28870
 
28417
28871
  // src/components/ui/toast.tsx
28418
- import * as React62 from "react";
28872
+ import * as React61 from "react";
28419
28873
  import * as ToastPrimitives from "@radix-ui/react-toast";
28420
28874
  import { cva as cva8 } from "class-variance-authority";
28421
28875
  import { X as X8 } from "lucide-react";
28422
- import { jsx as jsx89 } from "react/jsx-runtime";
28876
+ import { jsx as jsx90 } from "react/jsx-runtime";
28423
28877
  var ToastProvider = ToastPrimitives.Provider;
28424
- var ToastViewport = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx89(
28878
+ var ToastViewport = React61.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx90(
28425
28879
  ToastPrimitives.Viewport,
28426
28880
  {
28427
28881
  ref,
@@ -28447,11 +28901,11 @@ var toastVariants = cva8(
28447
28901
  }
28448
28902
  }
28449
28903
  );
28450
- var Toast = React62.forwardRef(({ className, variant, ...props }, ref) => {
28451
- return /* @__PURE__ */ jsx89(ToastPrimitives.Root, { ref, className: cn(toastVariants({ variant }), className), ...props });
28904
+ var Toast = React61.forwardRef(({ className, variant, ...props }, ref) => {
28905
+ return /* @__PURE__ */ jsx90(ToastPrimitives.Root, { ref, className: cn(toastVariants({ variant }), className), ...props });
28452
28906
  });
28453
28907
  Toast.displayName = ToastPrimitives.Root.displayName;
28454
- var ToastAction = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx89(
28908
+ var ToastAction = React61.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx90(
28455
28909
  ToastPrimitives.Action,
28456
28910
  {
28457
28911
  ref,
@@ -28463,7 +28917,7 @@ var ToastAction = React62.forwardRef(({ className, ...props }, ref) => /* @__PUR
28463
28917
  }
28464
28918
  ));
28465
28919
  ToastAction.displayName = ToastPrimitives.Action.displayName;
28466
- var ToastClose = React62.forwardRef(({ className, onClick, ...props }, ref) => /* @__PURE__ */ jsx89(
28920
+ var ToastClose = React61.forwardRef(({ className, onClick, ...props }, ref) => /* @__PURE__ */ jsx90(
28467
28921
  ToastPrimitives.Close,
28468
28922
  {
28469
28923
  ref,
@@ -28477,39 +28931,39 @@ var ToastClose = React62.forwardRef(({ className, onClick, ...props }, ref) => /
28477
28931
  },
28478
28932
  "toast-close": "",
28479
28933
  ...props,
28480
- children: /* @__PURE__ */ jsx89(X8, { className: "h-4 w-4" })
28934
+ children: /* @__PURE__ */ jsx90(X8, { className: "h-4 w-4" })
28481
28935
  }
28482
28936
  ));
28483
28937
  ToastClose.displayName = ToastPrimitives.Close.displayName;
28484
- var ToastTitle = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx89(ToastPrimitives.Title, { ref, className: cn("text-sm font-semibold", className), ...props }));
28938
+ var ToastTitle = React61.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx90(ToastPrimitives.Title, { ref, className: cn("text-sm font-semibold", className), ...props }));
28485
28939
  ToastTitle.displayName = ToastPrimitives.Title.displayName;
28486
- var ToastDescription = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx89(ToastPrimitives.Description, { ref, className: cn("text-sm opacity-90", className), ...props }));
28940
+ var ToastDescription = React61.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx90(ToastPrimitives.Description, { ref, className: cn("text-sm opacity-90", className), ...props }));
28487
28941
  ToastDescription.displayName = ToastPrimitives.Description.displayName;
28488
28942
 
28489
28943
  // src/components/ui/toaster.tsx
28490
- import { jsx as jsx90, jsxs as jsxs54 } from "react/jsx-runtime";
28944
+ import { jsx as jsx91, jsxs as jsxs54 } from "react/jsx-runtime";
28491
28945
  function Toaster2() {
28492
28946
  const { toasts } = useToast();
28493
28947
  return /* @__PURE__ */ jsxs54(ToastProvider, { children: [
28494
28948
  toasts.map(function({ id, title, description, action, ...props }) {
28495
28949
  return /* @__PURE__ */ jsxs54(Toast, { ...props, children: [
28496
28950
  /* @__PURE__ */ jsxs54("div", { className: "grid gap-1", children: [
28497
- title && /* @__PURE__ */ jsx90(ToastTitle, { children: title }),
28498
- description && /* @__PURE__ */ jsx90(ToastDescription, { children: description })
28951
+ title && /* @__PURE__ */ jsx91(ToastTitle, { children: title }),
28952
+ description && /* @__PURE__ */ jsx91(ToastDescription, { children: description })
28499
28953
  ] }),
28500
28954
  action,
28501
- /* @__PURE__ */ jsx90(ToastClose, {})
28955
+ /* @__PURE__ */ jsx91(ToastClose, {})
28502
28956
  ] }, id);
28503
28957
  }),
28504
- /* @__PURE__ */ jsx90(ToastViewport, {})
28958
+ /* @__PURE__ */ jsx91(ToastViewport, {})
28505
28959
  ] });
28506
28960
  }
28507
28961
 
28508
28962
  // src/components/ui/toggle.tsx
28509
- import * as React63 from "react";
28963
+ import * as React62 from "react";
28510
28964
  import * as TogglePrimitive from "@radix-ui/react-toggle";
28511
28965
  import { cva as cva9 } from "class-variance-authority";
28512
- import { jsx as jsx91 } from "react/jsx-runtime";
28966
+ import { jsx as jsx92 } from "react/jsx-runtime";
28513
28967
  var toggleVariants = cva9(
28514
28968
  "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground",
28515
28969
  {
@@ -28530,22 +28984,22 @@ var toggleVariants = cva9(
28530
28984
  }
28531
28985
  }
28532
28986
  );
28533
- var Toggle = React63.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsx91(TogglePrimitive.Root, { ref, className: cn(toggleVariants({ variant, size, className })), ...props }));
28987
+ var Toggle = React62.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsx92(TogglePrimitive.Root, { ref, className: cn(toggleVariants({ variant, size, className })), ...props }));
28534
28988
  Toggle.displayName = TogglePrimitive.Root.displayName;
28535
28989
 
28536
28990
  // src/components/ui/toggle-group.tsx
28537
- import * as React64 from "react";
28991
+ import * as React63 from "react";
28538
28992
  import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
28539
- import { jsx as jsx92 } from "react/jsx-runtime";
28540
- var ToggleGroupContext = React64.createContext({
28993
+ import { jsx as jsx93 } from "react/jsx-runtime";
28994
+ var ToggleGroupContext = React63.createContext({
28541
28995
  size: "default",
28542
28996
  variant: "default"
28543
28997
  });
28544
- var ToggleGroup = React64.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ jsx92(ToggleGroupPrimitive.Root, { ref, className: cn("flex items-center justify-center gap-1", className), ...props, children: /* @__PURE__ */ jsx92(ToggleGroupContext.Provider, { value: { variant, size }, children }) }));
28998
+ var ToggleGroup = React63.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ jsx93(ToggleGroupPrimitive.Root, { ref, className: cn("flex items-center justify-center gap-1", className), ...props, children: /* @__PURE__ */ jsx93(ToggleGroupContext.Provider, { value: { variant, size }, children }) }));
28545
28999
  ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
28546
- var ToggleGroupItem = React64.forwardRef(({ className, children, variant, size, ...props }, ref) => {
28547
- const context = React64.useContext(ToggleGroupContext);
28548
- return /* @__PURE__ */ jsx92(
29000
+ var ToggleGroupItem = React63.forwardRef(({ className, children, variant, size, ...props }, ref) => {
29001
+ const context = React63.useContext(ToggleGroupContext);
29002
+ return /* @__PURE__ */ jsx93(
28549
29003
  ToggleGroupPrimitive.Item,
28550
29004
  {
28551
29005
  ref,
@@ -28565,30 +29019,126 @@ ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
28565
29019
 
28566
29020
  // src/hooks/useActiveSection.ts
28567
29021
  import { useEffect as useEffect24, useState as useState21 } from "react";
29022
+ var resolveActiveFromOffsets = (sectionIds, topById, offset, scrollY) => {
29023
+ var _a78;
29024
+ const line = scrollY + offset;
29025
+ let nextActive = (_a78 = sectionIds[0]) != null ? _a78 : "";
29026
+ for (const id of sectionIds) {
29027
+ const top = topById.get(id);
29028
+ if (typeof top !== "number") continue;
29029
+ if (top <= line) {
29030
+ nextActive = id;
29031
+ continue;
29032
+ }
29033
+ break;
29034
+ }
29035
+ return nextActive;
29036
+ };
28568
29037
  var useActiveSection = (sectionIds, offset = 180) => {
28569
29038
  var _a78;
28570
29039
  const [activeId, setActiveId] = useState21((_a78 = sectionIds[0]) != null ? _a78 : "");
28571
29040
  useEffect24(() => {
29041
+ var _a79;
28572
29042
  if (!sectionIds.length || typeof window === "undefined") return;
28573
- const update = () => {
28574
- let nextActive = sectionIds[0];
28575
- for (const id of sectionIds) {
28576
- const element = document.getElementById(id);
28577
- if (!element) continue;
28578
- if (element.getBoundingClientRect().top <= offset) {
28579
- nextActive = id;
28580
- continue;
29043
+ const sections = sectionIds.map((id) => {
29044
+ const element = document.getElementById(id);
29045
+ if (!element) return null;
29046
+ return { id, element };
29047
+ }).filter((section) => section !== null);
29048
+ if (!sections.length) {
29049
+ setActiveId((_a79 = sectionIds[0]) != null ? _a79 : "");
29050
+ return;
29051
+ }
29052
+ const topById = /* @__PURE__ */ new Map();
29053
+ const visibleIds = /* @__PURE__ */ new Set();
29054
+ const sectionIndexes = new Map(sectionIds.map((id, index) => [id, index]));
29055
+ const normalizedOffset = Math.max(0, offset);
29056
+ const measure = () => {
29057
+ const scrollY = window.scrollY || window.pageYOffset;
29058
+ for (const section of sections) {
29059
+ topById.set(section.id, section.element.getBoundingClientRect().top + scrollY);
29060
+ }
29061
+ };
29062
+ const commit = (nextId) => {
29063
+ setActiveId((current) => current === nextId ? current : nextId);
29064
+ };
29065
+ const resolveVisibleActive = () => {
29066
+ let nextId = null;
29067
+ let maxIndex = -1;
29068
+ for (const id of visibleIds) {
29069
+ const index = sectionIndexes.get(id);
29070
+ if (typeof index !== "number" || index < maxIndex) continue;
29071
+ maxIndex = index;
29072
+ nextId = id;
29073
+ }
29074
+ return nextId;
29075
+ };
29076
+ const resolveByScroll = () => resolveActiveFromOffsets(sectionIds, topById, normalizedOffset, window.scrollY || window.pageYOffset);
29077
+ const syncActive = () => {
29078
+ const visibleActive = resolveVisibleActive();
29079
+ commit(visibleActive != null ? visibleActive : resolveByScroll());
29080
+ };
29081
+ measure();
29082
+ syncActive();
29083
+ if (typeof IntersectionObserver === "undefined") {
29084
+ let raf = 0;
29085
+ const onScroll = () => {
29086
+ if (raf) return;
29087
+ raf = window.requestAnimationFrame(() => {
29088
+ raf = 0;
29089
+ commit(resolveByScroll());
29090
+ });
29091
+ };
29092
+ const onResize2 = () => {
29093
+ measure();
29094
+ commit(resolveByScroll());
29095
+ };
29096
+ window.addEventListener("scroll", onScroll, { passive: true });
29097
+ window.addEventListener("resize", onResize2);
29098
+ return () => {
29099
+ if (raf) window.cancelAnimationFrame(raf);
29100
+ window.removeEventListener("scroll", onScroll);
29101
+ window.removeEventListener("resize", onResize2);
29102
+ };
29103
+ }
29104
+ const observer = new IntersectionObserver(
29105
+ (entries) => {
29106
+ let changed = false;
29107
+ for (const entry of entries) {
29108
+ const target = entry.target;
29109
+ if (!target.id) continue;
29110
+ if (entry.isIntersecting) {
29111
+ if (!visibleIds.has(target.id)) {
29112
+ visibleIds.add(target.id);
29113
+ changed = true;
29114
+ }
29115
+ continue;
29116
+ }
29117
+ if (visibleIds.delete(target.id)) {
29118
+ changed = true;
29119
+ }
28581
29120
  }
28582
- break;
29121
+ if (changed) {
29122
+ syncActive();
29123
+ }
29124
+ },
29125
+ {
29126
+ root: null,
29127
+ threshold: [0, 0.01],
29128
+ rootMargin: `-${normalizedOffset}px 0px -55% 0px`
28583
29129
  }
28584
- setActiveId(nextActive);
29130
+ );
29131
+ for (const section of sections) {
29132
+ observer.observe(section.element);
29133
+ }
29134
+ const onResize = () => {
29135
+ measure();
29136
+ syncActive();
28585
29137
  };
28586
- update();
28587
- window.addEventListener("scroll", update, { passive: true });
28588
- window.addEventListener("resize", update);
29138
+ window.addEventListener("resize", onResize);
28589
29139
  return () => {
28590
- window.removeEventListener("scroll", update);
28591
- window.removeEventListener("resize", update);
29140
+ observer.disconnect();
29141
+ window.removeEventListener("resize", onResize);
28592
29142
  };
28593
29143
  }, [offset, sectionIds]);
28594
29144
  return activeId;
@@ -28653,8 +29203,8 @@ var useLayoutModeControl = () => {
28653
29203
  };
28654
29204
 
28655
29205
  // src/lib/auth.tsx
28656
- import { createContext as createContext7, useCallback as useCallback12, useContext as useContext8, useEffect as useEffect26, useMemo as useMemo15, useRef as useRef13, useState as useState23 } from "react";
28657
- import { jsx as jsx93 } from "react/jsx-runtime";
29206
+ import { createContext as createContext7, useCallback as useCallback12, useContext as useContext9, useEffect as useEffect26, useMemo as useMemo15, useRef as useRef13, useState as useState23 } from "react";
29207
+ import { jsx as jsx94 } from "react/jsx-runtime";
28658
29208
  var STORAGE_KEYS = {
28659
29209
  accessToken: "cc_access_token",
28660
29210
  idToken: "cc_id_token",
@@ -29542,10 +30092,10 @@ var AuthProvider = ({ children }) => {
29542
30092
  }),
29543
30093
  [status, user, accessToken, login, logout, completeLogin, getAccessToken, presenceStatus, setPresenceStatus]
29544
30094
  );
29545
- return /* @__PURE__ */ jsx93(AuthContext.Provider, { value, children });
30095
+ return /* @__PURE__ */ jsx94(AuthContext.Provider, { value, children });
29546
30096
  };
29547
30097
  var useAuth = () => {
29548
- const ctx = useContext8(AuthContext);
30098
+ const ctx = useContext9(AuthContext);
29549
30099
  if (!ctx) {
29550
30100
  throw new Error("useAuth deve ser usado dentro de AuthProvider.");
29551
30101
  }
@@ -29700,6 +30250,7 @@ export {
29700
30250
  DropdownMenuSubContent,
29701
30251
  DropdownMenuSubTrigger,
29702
30252
  DropdownMenuTrigger,
30253
+ EXPERIENCE_SETTINGS_STORAGE_KEY,
29703
30254
  EmptyState,
29704
30255
  ErrorBoundary,
29705
30256
  Eyebrow,
@@ -29723,6 +30274,7 @@ export {
29723
30274
  InputOTPSlot,
29724
30275
  JellyButton,
29725
30276
  JellyButtonOriginal,
30277
+ LEGACY_THEME_STORAGE_KEY,
29726
30278
  Label4 as Label,
29727
30279
  LoadingScreen,
29728
30280
  LoadingSpinner,
@@ -29778,6 +30330,15 @@ export {
29778
30330
  PopoverContent,
29779
30331
  PopoverTrigger,
29780
30332
  PricingCard,
30333
+ Skeleton as PrimitiveSkeleton,
30334
+ Tabs as PrimitiveTabs,
30335
+ TabsContent as PrimitiveTabsContent,
30336
+ TabsList as PrimitiveTabsList,
30337
+ TabsTrigger as PrimitiveTabsTrigger,
30338
+ Tooltip as PrimitiveTooltip,
30339
+ TooltipContent as PrimitiveTooltipContent,
30340
+ TooltipProvider as PrimitiveTooltipProvider,
30341
+ TooltipTrigger as PrimitiveTooltipTrigger,
29781
30342
  Progress,
29782
30343
  ProgressCupcode,
29783
30344
  RadioGroup4 as RadioGroup,
@@ -29834,11 +30395,15 @@ export {
29834
30395
  SidebarRail,
29835
30396
  SidebarSeparator,
29836
30397
  SidebarTrigger,
29837
- Skeleton,
30398
+ Skeleton2 as Skeleton,
30399
+ SkeletonText,
29838
30400
  Slider,
29839
30401
  Toaster as SonnerToaster,
29840
30402
  Switch,
29841
30403
  SwitchField,
30404
+ THEME_PREFERENCE_CHANGE_EVENT,
30405
+ THEME_PREFERENCE_STORAGE_KEY,
30406
+ THEME_STORAGE_KEY,
29842
30407
  Table,
29843
30408
  TableBody,
29844
30409
  TableCaption,
@@ -29847,10 +30412,10 @@ export {
29847
30412
  TableHead,
29848
30413
  TableHeader,
29849
30414
  TableRow,
29850
- Tabs,
29851
- TabsContent,
29852
- TabsList,
29853
- TabsTrigger,
30415
+ Tabs2 as Tabs,
30416
+ TabsContent2 as TabsContent,
30417
+ TabsList2 as TabsList,
30418
+ TabsTrigger2 as TabsTrigger,
29854
30419
  TagGroup,
29855
30420
  TelescupAssetPicker,
29856
30421
  TelescupClientError,
@@ -29860,6 +30425,7 @@ export {
29860
30425
  TelescupVideo,
29861
30426
  Textarea,
29862
30427
  TextareaField,
30428
+ ThemeBackground,
29863
30429
  ThemeProvider,
29864
30430
  ThemeScript,
29865
30431
  ThemeToggle2 as ThemeToggle,
@@ -29876,11 +30442,11 @@ export {
29876
30442
  Toggle,
29877
30443
  ToggleGroup,
29878
30444
  ToggleGroupItem,
29879
- Tooltip,
29880
- TooltipContent,
30445
+ TooltipCupcode as Tooltip,
30446
+ TooltipContent2 as TooltipContent,
29881
30447
  TooltipCupcode,
29882
- TooltipProvider,
29883
- TooltipTrigger,
30448
+ TooltipProvider2 as TooltipProvider,
30449
+ TooltipTrigger2 as TooltipTrigger,
29884
30450
  USER_PRESENCE_LAST_ACTIVE_COLUMN_ENV_KEY,
29885
30451
  USER_PRESENCE_SOURCE_COLUMN_ENV_KEY,
29886
30452
  UserMenuCupcode_default as UserMenuCupcode,
@@ -29908,12 +30474,20 @@ export {
29908
30474
  getSupabase,
29909
30475
  getSupabasePublic,
29910
30476
  isRuntimeDev,
30477
+ isStoredThemeMode,
29911
30478
  navigationMenuTriggerStyle,
30479
+ normalizeStoredThemePreference,
29912
30480
  parseAssetId,
30481
+ parseStoredThemePreference,
30482
+ persistThemePreferenceSelection,
29913
30483
  readStoredLayoutMode,
30484
+ readStoredThemeMode,
29914
30485
  reducer,
30486
+ resolveAppliedThemeMode,
29915
30487
  resolveCupcodeAppVersion,
29916
30488
  resolveOidcEndpoints,
30489
+ resolveStoredThemePreference,
30490
+ resolveSystemThemeMode,
29917
30491
  resolveTelescupImageURL,
29918
30492
  responsiveSizeClasses,
29919
30493
  setCupcodeRuntimeEnv,