@raxrai/stylelab-ui 0.3.2 → 0.4.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/README.md +14 -3
- package/dist/index.cjs +511 -510
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +161 -55
- package/dist/index.d.ts +161 -55
- package/dist/index.mjs +387 -384
- package/dist/index.mjs.map +1 -1
- package/package.json +11 -2
package/dist/index.mjs
CHANGED
|
@@ -18,13 +18,13 @@ import {
|
|
|
18
18
|
// lib/theme-resolver.ts
|
|
19
19
|
var themeMap = {
|
|
20
20
|
minimal: {
|
|
21
|
-
button: { primary: "bg-zinc-900 text-white border border-zinc-200 transition-colors duration-200 hover:bg-zinc-800 hover:border-zinc-300 hover:shadow-md", secondary: "bg-transparent border border-zinc-200 text-zinc-900 hover:bg-zinc-100", ghost: "text-
|
|
21
|
+
button: { primary: "bg-zinc-900 text-white border border-zinc-200 transition-colors duration-200 hover:bg-zinc-800 hover:border-zinc-300 hover:shadow-md", secondary: "bg-transparent border border-zinc-200 text-zinc-900 hover:bg-zinc-100", ghost: "text-inherit hover:bg-zinc-100" },
|
|
22
22
|
input: { default: "border border-zinc-200 text-zinc-900 placeholder:text-zinc-400 focus:ring-1 focus:ring-zinc-400 focus:border-zinc-400" },
|
|
23
23
|
toggle: { default: "bg-zinc-200 data-[state=on]:bg-zinc-900" },
|
|
24
24
|
badge: { default: "bg-zinc-100 text-zinc-700 border border-zinc-200" },
|
|
25
25
|
slider: { default: "bg-zinc-200 [&_.slider-thumb]:bg-zinc-900" },
|
|
26
26
|
tabs: { default: "border-b border-zinc-200", triggerActive: "border-zinc-900 font-semibold", triggerInactive: "opacity-70" },
|
|
27
|
-
card: { default: "bg-white
|
|
27
|
+
card: { default: "bg-white border border-zinc-200 shadow-none" },
|
|
28
28
|
bento: { default: "gap-4" },
|
|
29
29
|
navbar: { default: "bg-white text-zinc-900 border-b border-zinc-200" },
|
|
30
30
|
sidebar: { default: "bg-white text-zinc-900 border-r border-zinc-200" },
|
|
@@ -47,13 +47,13 @@ var themeMap = {
|
|
|
47
47
|
timeline: { default: "border-l-2 border-zinc-200 text-zinc-900" }
|
|
48
48
|
},
|
|
49
49
|
night: {
|
|
50
|
-
button: { primary: "bg-white text-zinc-950 border border-white/10 shadow-[inset_0_1px_0_0_rgba(255,255,255,0.1)] transition-colors duration-200 hover:bg-zinc-100 hover:shadow-md hover:border-white/20", secondary: "bg-zinc-900 border border-white/10 text-white hover:bg-zinc-800", ghost: "text-
|
|
50
|
+
button: { primary: "bg-white text-zinc-950 border border-white/10 shadow-[inset_0_1px_0_0_rgba(255,255,255,0.1)] transition-colors duration-200 hover:bg-zinc-100 hover:shadow-md hover:border-white/20", secondary: "bg-zinc-900 border border-white/10 text-white hover:bg-zinc-800", ghost: "text-inherit hover:bg-white/5" },
|
|
51
51
|
input: { default: "bg-zinc-900 text-zinc-100 border border-white/10 placeholder:text-zinc-500 focus:ring-1 focus:ring-white/20 shadow-[inset_0_2px_4px_rgba(0,0,0,0.3)]" },
|
|
52
52
|
toggle: { default: "bg-zinc-800 data-[state=on]:bg-white shadow-[inset_0_2px_4px_rgba(0,0,0,0.3)]" },
|
|
53
53
|
badge: { default: "bg-zinc-800 text-zinc-300 border border-white/10" },
|
|
54
54
|
slider: { default: "bg-zinc-800 [&_.slider-thumb]:bg-white shadow-[inset_0_2px_4px_rgba(0,0,0,0.3)]" },
|
|
55
55
|
tabs: { default: "border-b border-white/10", triggerActive: "border-white font-semibold", triggerInactive: "opacity-70" },
|
|
56
|
-
card: { default: "bg-zinc-950
|
|
56
|
+
card: { default: "bg-zinc-950 border border-white/10 shadow-[inset_0_2px_4px_rgba(0,0,0,0.3)]" },
|
|
57
57
|
bento: { default: "gap-4" },
|
|
58
58
|
navbar: { default: "bg-zinc-950 text-zinc-100 border-b border-white/10" },
|
|
59
59
|
sidebar: { default: "bg-zinc-950 text-zinc-100 border-r border-white/10" },
|
|
@@ -76,13 +76,13 @@ var themeMap = {
|
|
|
76
76
|
timeline: { default: "border-l-2 border-white/20 text-zinc-100" }
|
|
77
77
|
},
|
|
78
78
|
glass: {
|
|
79
|
-
button: { primary: "rounded-xl bg-white/70 backdrop-blur-2xl border border-white/60 text-slate-800 shadow-glass-soft transition-all duration-200 ease-in-out hover:-translate-y-0.5 hover:bg-white/80 hover:border-white/80 hover:shadow-glass-button-hover active:translate-y-0 active:shadow-glass-soft", secondary: "rounded-xl bg-white/50 backdrop-blur-2xl border border-white/60 text-slate-800 shadow-glass-soft transition-all duration-200 ease-in-out hover:-translate-y-0.5 hover:bg-white/60 hover:border-white/80 hover:shadow-glass-button-hover active:translate-y-0 active:shadow-glass-soft", ghost: "rounded-xl text-
|
|
79
|
+
button: { primary: "rounded-xl bg-white/70 backdrop-blur-2xl border border-white/60 text-slate-800 shadow-glass-soft transition-all duration-200 ease-in-out hover:-translate-y-0.5 hover:bg-white/80 hover:border-white/80 hover:shadow-glass-button-hover active:translate-y-0 active:shadow-glass-soft", secondary: "rounded-xl bg-white/50 backdrop-blur-2xl border border-white/60 text-slate-800 shadow-glass-soft transition-all duration-200 ease-in-out hover:-translate-y-0.5 hover:bg-white/60 hover:border-white/80 hover:shadow-glass-button-hover active:translate-y-0 active:shadow-glass-soft", ghost: "rounded-xl text-inherit backdrop-blur-xl transition-all duration-200 ease-in-out hover:-translate-y-0.5 hover:bg-white/40 hover:shadow-glass-soft hover:border hover:border-white/60" },
|
|
80
80
|
input: { default: "rounded-xl bg-white/50 backdrop-blur-2xl border border-slate-200/80 text-slate-800 shadow-glass-soft placeholder:text-slate-500 focus:ring-2 focus:ring-slate-300/50 focus:border-slate-300" },
|
|
81
81
|
toggle: { default: "rounded-full bg-white/50 data-[state=on]:bg-white/80 backdrop-blur-2xl border border-white/60 shadow-glass-soft" },
|
|
82
82
|
badge: { default: "rounded-xl bg-white/60 backdrop-blur-2xl text-slate-700 border border-white/60 shadow-glass-soft" },
|
|
83
83
|
slider: { default: "rounded-full bg-white/50 [&_.slider-thumb]:bg-white [&_.slider-thumb]:border-slate-200 [&_.slider-thumb]:shadow-glass-soft backdrop-blur-2xl border border-white/60 shadow-glass-soft" },
|
|
84
84
|
tabs: { default: "border-b border-slate-200/60", triggerActive: "border-slate-700 font-semibold", triggerInactive: "opacity-70" },
|
|
85
|
-
card: { default: "rounded-2xl bg-white/60 backdrop-blur-2xl border border-white/60
|
|
85
|
+
card: { default: "rounded-2xl bg-white/60 backdrop-blur-2xl border border-white/60 shadow-glass-lift" },
|
|
86
86
|
bento: { default: "gap-4" },
|
|
87
87
|
navbar: { default: "rounded-none bg-white/50 backdrop-blur-2xl border-b border-white/60 text-slate-800 shadow-glass-soft" },
|
|
88
88
|
sidebar: { default: "rounded-none bg-white/50 backdrop-blur-2xl border-r border-white/60 text-slate-800 shadow-glass-soft" },
|
|
@@ -105,13 +105,13 @@ var themeMap = {
|
|
|
105
105
|
timeline: { default: "border-l-2 border-slate-200/60 text-slate-800" }
|
|
106
106
|
},
|
|
107
107
|
neubrutal: {
|
|
108
|
-
button: { primary: "rounded-none bg-[#FFD600] text-black border-4 border-black shadow-neubrutal hover:translate-x-1 hover:translate-y-1 hover:shadow-[4px_4px_0px_0px_rgba(0,0,0,1)]", secondary: "rounded-none bg-[#FF5733] text-black border-4 border-black shadow-neubrutal hover:translate-x-1 hover:translate-y-1", ghost: "rounded-none border-4 border-transparent hover:border-black hover:bg-zinc-100
|
|
108
|
+
button: { primary: "rounded-none bg-[#FFD600] text-black border-4 border-black shadow-neubrutal hover:translate-x-1 hover:translate-y-1 hover:shadow-[4px_4px_0px_0px_rgba(0,0,0,1)]", secondary: "rounded-none bg-[#FF5733] text-black border-4 border-black shadow-neubrutal hover:translate-x-1 hover:translate-y-1", ghost: "rounded-none text-inherit border-4 border-transparent hover:border-black hover:bg-zinc-100" },
|
|
109
109
|
input: { default: "rounded-none border-4 border-black text-black placeholder:text-zinc-600 focus:ring-4 focus:ring-black/20 bg-white" },
|
|
110
110
|
toggle: { default: "rounded-none border-4 border-black bg-white data-[state=on]:bg-[#FFD600] shadow-neubrutal" },
|
|
111
111
|
badge: { default: "rounded-none bg-[#FFD600] text-black border-4 border-black" },
|
|
112
112
|
slider: { default: "rounded-none border-4 border-black bg-white [&_.slider-thumb]:bg-[#FF5733] [&_.slider-thumb]:border-4 [&_.slider-thumb]:border-black" },
|
|
113
113
|
tabs: { default: "border-b-4 border-black", triggerActive: "bg-[#FFD600] border-b-4 border-black font-bold -mb-[3px] pb-[5px] shadow-neubrutal", triggerInactive: "opacity-80" },
|
|
114
|
-
card: { default: "rounded-none bg-white
|
|
114
|
+
card: { default: "rounded-none bg-white border-4 border-black shadow-neubrutal" },
|
|
115
115
|
bento: { default: "gap-4" },
|
|
116
116
|
navbar: { default: "rounded-none bg-[#FFD600] text-black border-b-4 border-black shadow-neubrutal" },
|
|
117
117
|
sidebar: { default: "rounded-none bg-[#FFD600]/30 border-r-4 border-black shadow-neubrutal text-black" },
|
|
@@ -134,13 +134,13 @@ var themeMap = {
|
|
|
134
134
|
timeline: { default: "border-l-4 border-black text-black" }
|
|
135
135
|
},
|
|
136
136
|
clay: {
|
|
137
|
-
button: { primary: "rounded-[40px] bg-rose-200 text-rose-900 border border-rose-300 shadow-clay-outer hover:shadow-[10px_10px_20px_rgba(0,0,0,0.08),inset_-8px_-8px_15px_rgba(0,0,0,0.2),inset_8px_8px_15px_rgba(255,255,255,0.4)]", secondary: "rounded-[40px] bg-sky-100 text-sky-900 shadow-clay-outer", ghost: "rounded-[40px] hover:bg-zinc-100
|
|
137
|
+
button: { primary: "rounded-[40px] bg-rose-200 text-rose-900 border border-rose-300 shadow-clay-outer hover:shadow-[10px_10px_20px_rgba(0,0,0,0.08),inset_-8px_-8px_15px_rgba(0,0,0,0.2),inset_8px_8px_15px_rgba(255,255,255,0.4)]", secondary: "rounded-[40px] bg-sky-100 text-sky-900 shadow-clay-outer", ghost: "rounded-[40px] text-inherit hover:bg-zinc-100" },
|
|
138
138
|
input: { default: "rounded-[40px] border border-zinc-200 bg-zinc-50 text-zinc-900 placeholder:text-zinc-500 focus:ring-2 focus:ring-sky-300" },
|
|
139
139
|
toggle: { default: "rounded-full bg-sky-100 data-[state=on]:bg-sky-300 data-[state=on]:shadow-clay-outer" },
|
|
140
140
|
badge: { default: "rounded-[40px] bg-amber-100 text-amber-900" },
|
|
141
141
|
slider: { default: "rounded-full bg-sky-100 [&_.slider-thumb]:rounded-full [&_.slider-thumb]:bg-rose-300" },
|
|
142
142
|
tabs: { default: "border-b-2 border-zinc-200/80", triggerActive: "border-rose-600 font-semibold", triggerInactive: "opacity-70" },
|
|
143
|
-
card: { default: "rounded-[40px] bg-rose-50
|
|
143
|
+
card: { default: "rounded-[40px] bg-rose-50 shadow-clay-outer border border-rose-100" },
|
|
144
144
|
bento: { default: "gap-4" },
|
|
145
145
|
navbar: { default: "rounded-b-3xl bg-white/80 text-zinc-900 backdrop-blur-md shadow-clay-outer border-b border-zinc-200" },
|
|
146
146
|
sidebar: { default: "rounded-r-3xl bg-sky-50 text-zinc-900 shadow-clay-outer border-r border-sky-100" },
|
|
@@ -163,13 +163,13 @@ var themeMap = {
|
|
|
163
163
|
timeline: { default: "border-l-2 border-rose-200 text-zinc-900" }
|
|
164
164
|
},
|
|
165
165
|
cyberpunk: {
|
|
166
|
-
button: { primary: "bg-transparent border-2 border-[#22d3ee] text-[#22d3ee] font-mono shadow-neon-glow hover:animate-glitch-anim", secondary: "bg-transparent border-2 border-[#ec4899] text-[#ec4899] font-mono hover:animate-glitch-anim", ghost: "text-
|
|
166
|
+
button: { primary: "bg-transparent border-2 border-[#22d3ee] text-[#22d3ee] font-mono shadow-neon-glow hover:animate-glitch-anim", secondary: "bg-transparent border-2 border-[#ec4899] text-[#ec4899] font-mono hover:animate-glitch-anim", ghost: "text-inherit font-mono hover:bg-[#22d3ee]/10" },
|
|
167
167
|
input: { default: "bg-black border-2 border-[#22d3ee] text-[#22d3ee] placeholder:text-[#22d3ee]/50 font-mono focus:shadow-neon-glow" },
|
|
168
168
|
toggle: { default: "bg-zinc-900 border-2 border-[#22d3ee] data-[state=on]:bg-[#22d3ee] data-[state=on]:shadow-neon-glow" },
|
|
169
169
|
badge: { default: "bg-black border-2 border-[#ec4899] text-[#ec4899] font-mono" },
|
|
170
170
|
slider: { default: "bg-zinc-900 [&_.slider-thumb]:border-2 [&_.slider-thumb]:border-[#22d3ee] [&_.slider-thumb]:bg-[#22d3ee] [&_.slider-thumb]:shadow-neon-glow" },
|
|
171
171
|
tabs: { default: "border-b-2 border-[#22d3ee]", triggerActive: "text-[#22d3ee] border-[#22d3ee] font-bold shadow-neon-glow", triggerInactive: "opacity-50 text-[#22d3ee]/70" },
|
|
172
|
-
card: { default: "bg-black
|
|
172
|
+
card: { default: "bg-black border-2 border-[#22d3ee] shadow-neon-glow font-mono" },
|
|
173
173
|
bento: { default: "gap-4" },
|
|
174
174
|
navbar: { default: "bg-black text-[#22d3ee] border-b-2 border-[#22d3ee] font-mono" },
|
|
175
175
|
sidebar: { default: "bg-black text-[#22d3ee] border-r-2 border-[#22d3ee] font-mono" },
|
|
@@ -192,13 +192,13 @@ var themeMap = {
|
|
|
192
192
|
timeline: { default: "border-l-2 border-[#22d3ee] text-[#22d3ee] font-mono" }
|
|
193
193
|
},
|
|
194
194
|
retro: {
|
|
195
|
-
button: { primary: "rounded-none bg-lime-500 text-black border-2 border-black font-mono shadow-[4px_4px_0_0_rgba(0,0,0,1)] hover:bg-lime-400 active:shadow-[2px_2px_0_0_rgba(0,0,0,1)]", secondary: "rounded-none bg-white text-black border-2 border-black font-mono shadow-[4px_4px_0_0_rgba(0,0,0,1)] hover:bg-zinc-100 active:shadow-[2px_2px_0_0_rgba(0,0,0,1)]", ghost: "rounded-none font-mono text-
|
|
195
|
+
button: { primary: "rounded-none bg-lime-500 text-black border-2 border-black font-mono shadow-[4px_4px_0_0_rgba(0,0,0,1)] hover:bg-lime-400 active:shadow-[2px_2px_0_0_rgba(0,0,0,1)]", secondary: "rounded-none bg-white text-black border-2 border-black font-mono shadow-[4px_4px_0_0_rgba(0,0,0,1)] hover:bg-zinc-100 active:shadow-[2px_2px_0_0_rgba(0,0,0,1)]", ghost: "rounded-none font-mono text-inherit border-2 border-transparent hover:border-black hover:bg-zinc-100" },
|
|
196
196
|
input: { default: "rounded-none border-2 border-black text-black placeholder:text-zinc-500 font-mono focus:ring-2 focus:ring-black focus:ring-offset-0 bg-white" },
|
|
197
197
|
toggle: { default: "rounded-none border-2 border-black bg-zinc-200 data-[state=on]:bg-lime-500 shadow-[3px_3px_0_0_rgba(0,0,0,1)]" },
|
|
198
198
|
badge: { default: "rounded-none bg-lime-500 text-black border-2 border-black font-mono" },
|
|
199
199
|
slider: { default: "rounded-none border-2 border-black bg-zinc-200 [&_.slider-thumb]:rounded-none [&_.slider-thumb]:border-2 [&_.slider-thumb]:border-black [&_.slider-thumb]:bg-lime-500 [&_.slider-thumb]:shadow-[2px_2px_0_0_rgba(0,0,0,1)]" },
|
|
200
200
|
tabs: { default: "border-b-2 border-black font-mono", triggerActive: "border-b-2 border-black font-bold bg-lime-500/20 text-black -mb-[2px] pb-[6px]", triggerInactive: "opacity-70 text-black" },
|
|
201
|
-
card: { default: "rounded-none bg-white
|
|
201
|
+
card: { default: "rounded-none bg-white border-2 border-black shadow-[6px_6px_0_0_rgba(0,0,0,1)] font-mono" },
|
|
202
202
|
bento: { default: "gap-4" },
|
|
203
203
|
navbar: { default: "rounded-none bg-zinc-100 text-black border-b-2 border-black font-mono shadow-[0_4px_0_0_rgba(0,0,0,1)]" },
|
|
204
204
|
sidebar: { default: "rounded-none bg-zinc-100 text-black border-r-2 border-black font-mono" },
|
|
@@ -221,13 +221,13 @@ var themeMap = {
|
|
|
221
221
|
timeline: { default: "border-l-2 border-black text-black font-mono" }
|
|
222
222
|
},
|
|
223
223
|
motion: {
|
|
224
|
-
button: { primary: "rounded-xl bg-indigo-500 text-white border-0 shadow-lg transition-all duration-300 ease-out hover:scale-105 hover:-translate-y-0.5 hover:shadow-xl hover:bg-indigo-600 active:scale-100 active:translate-y-0 focus:ring-2 focus:ring-indigo-400 focus:ring-offset-2", secondary: "rounded-xl bg-white text-indigo-600 border-2 border-indigo-200 shadow-md transition-all duration-300 ease-out hover:scale-105 hover:-translate-y-0.5 hover:border-indigo-300 hover:shadow-lg active:scale-100 active:translate-y-0 focus:ring-2 focus:ring-indigo-300 focus:ring-offset-2", ghost: "rounded-xl text-
|
|
224
|
+
button: { primary: "rounded-xl bg-indigo-500 text-white border-0 shadow-lg transition-all duration-300 ease-out hover:scale-105 hover:-translate-y-0.5 hover:shadow-xl hover:bg-indigo-600 active:scale-100 active:translate-y-0 focus:ring-2 focus:ring-indigo-400 focus:ring-offset-2", secondary: "rounded-xl bg-white text-indigo-600 border-2 border-indigo-200 shadow-md transition-all duration-300 ease-out hover:scale-105 hover:-translate-y-0.5 hover:border-indigo-300 hover:shadow-lg active:scale-100 active:translate-y-0 focus:ring-2 focus:ring-indigo-300 focus:ring-offset-2", ghost: "rounded-xl text-inherit transition-all duration-300 ease-out hover:scale-105 hover:bg-indigo-50 hover:-translate-y-0.5 active:scale-100 active:translate-y-0" },
|
|
225
225
|
input: { default: "rounded-xl border-2 border-indigo-200 bg-white text-zinc-900 transition-all duration-300 ease-out placeholder:text-zinc-400 focus:scale-[1.01] focus:border-indigo-500 focus:ring-2 focus:ring-indigo-200 focus:ring-offset-0" },
|
|
226
226
|
toggle: { default: "rounded-full bg-zinc-200 transition-all duration-300 ease-out data-[state=on]:bg-indigo-500 [&_.slider-thumb]:transition-transform [&_.slider-thumb]:duration-300 [&_.slider-thumb]:data-[state=on]:scale-110" },
|
|
227
227
|
badge: { default: "rounded-full bg-indigo-100 text-indigo-700 border border-indigo-200 transition-all duration-300 ease-out hover:scale-110 hover:bg-indigo-200" },
|
|
228
228
|
slider: { default: "rounded-full bg-zinc-200 transition-all duration-300 [&_.slider-thumb]:rounded-full [&_.slider-thumb]:bg-indigo-500 [&_.slider-thumb]:transition-transform [&_.slider-thumb]:duration-300 [&_.slider-thumb]:hover:scale-125 [&_.slider-thumb]:active:scale-110" },
|
|
229
229
|
tabs: { default: "border-b-2 border-indigo-200 transition-colors duration-300", triggerActive: "border-indigo-500 font-semibold text-indigo-600 transition-all duration-300", triggerInactive: "opacity-70 transition-opacity duration-300 hover:opacity-100" },
|
|
230
|
-
card: { default: "rounded-2xl bg-white
|
|
230
|
+
card: { default: "rounded-2xl bg-white border-2 border-indigo-100 shadow-lg transition-all duration-300 ease-out hover:scale-[1.02] hover:shadow-xl hover:border-indigo-200 hover:-translate-y-1" },
|
|
231
231
|
bento: { default: "gap-4" },
|
|
232
232
|
navbar: { default: "rounded-none bg-white/95 backdrop-blur-md text-zinc-900 border-b-2 border-indigo-100 shadow-sm transition-all duration-300" },
|
|
233
233
|
sidebar: { default: "rounded-none bg-white/95 backdrop-blur-md text-zinc-900 border-r-2 border-indigo-100 transition-all duration-300" },
|
|
@@ -3526,6 +3526,14 @@ var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
|
|
|
3526
3526
|
function cn(...inputs) {
|
|
3527
3527
|
return twMerge(clsx(inputs));
|
|
3528
3528
|
}
|
|
3529
|
+
function mergeRefs(...refs) {
|
|
3530
|
+
return (node) => {
|
|
3531
|
+
refs.forEach((ref) => {
|
|
3532
|
+
if (typeof ref === "function") ref(node);
|
|
3533
|
+
else if (ref != null) ref.current = node;
|
|
3534
|
+
});
|
|
3535
|
+
};
|
|
3536
|
+
}
|
|
3529
3537
|
|
|
3530
3538
|
// node_modules/lucide-react/dist/esm/createLucideIcon.js
|
|
3531
3539
|
import { forwardRef as forwardRef2, createElement as createElement2 } from "react";
|
|
@@ -3675,6 +3683,7 @@ var X = createLucideIcon("x", __iconNode9);
|
|
|
3675
3683
|
|
|
3676
3684
|
// components/Accordion.tsx
|
|
3677
3685
|
import {
|
|
3686
|
+
forwardRef as forwardRef3,
|
|
3678
3687
|
useCallback as useCallback2,
|
|
3679
3688
|
useEffect as useEffect2,
|
|
3680
3689
|
useRef,
|
|
@@ -3740,14 +3749,14 @@ function AccordionPanel({
|
|
|
3740
3749
|
)
|
|
3741
3750
|
] });
|
|
3742
3751
|
}
|
|
3743
|
-
|
|
3752
|
+
var Accordion = forwardRef3(function Accordion2({
|
|
3744
3753
|
items,
|
|
3745
3754
|
allowMultiple = false,
|
|
3746
3755
|
defaultOpenIds,
|
|
3747
3756
|
className,
|
|
3748
3757
|
style,
|
|
3749
3758
|
theme: themeProp
|
|
3750
|
-
}) {
|
|
3759
|
+
}, ref) {
|
|
3751
3760
|
const [open, setOpen] = useState2(
|
|
3752
3761
|
() => new Set(defaultOpenIds ?? [])
|
|
3753
3762
|
);
|
|
@@ -3768,7 +3777,7 @@ function Accordion({
|
|
|
3768
3777
|
},
|
|
3769
3778
|
[allowMultiple]
|
|
3770
3779
|
);
|
|
3771
|
-
return /* @__PURE__ */ jsx2("div", { className: cn(themeClass, className), style, children: items.map((item) => /* @__PURE__ */ jsx2(
|
|
3780
|
+
return /* @__PURE__ */ jsx2("div", { ref, className: cn(themeClass, className), style, children: items.map((item) => /* @__PURE__ */ jsx2(
|
|
3772
3781
|
AccordionPanel,
|
|
3773
3782
|
{
|
|
3774
3783
|
item,
|
|
@@ -3778,12 +3787,12 @@ function Accordion({
|
|
|
3778
3787
|
},
|
|
3779
3788
|
item.id
|
|
3780
3789
|
)) });
|
|
3781
|
-
}
|
|
3790
|
+
});
|
|
3782
3791
|
|
|
3783
3792
|
// components/Alert.tsx
|
|
3784
|
-
import { forwardRef as
|
|
3793
|
+
import { forwardRef as forwardRef4 } from "react";
|
|
3785
3794
|
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
3786
|
-
var Alert =
|
|
3795
|
+
var Alert = forwardRef4(function Alert2({
|
|
3787
3796
|
intent = "default",
|
|
3788
3797
|
title,
|
|
3789
3798
|
children,
|
|
@@ -3811,12 +3820,12 @@ var Alert = forwardRef3(function Alert2({
|
|
|
3811
3820
|
});
|
|
3812
3821
|
|
|
3813
3822
|
// components/Avatar.tsx
|
|
3814
|
-
import { forwardRef as
|
|
3823
|
+
import { forwardRef as forwardRef5 } from "react";
|
|
3815
3824
|
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
3816
3825
|
function getInitials(name) {
|
|
3817
3826
|
return name.trim().split(/\s+/).map((s) => s[0]).join("").toUpperCase().slice(0, 2);
|
|
3818
3827
|
}
|
|
3819
|
-
var Avatar =
|
|
3828
|
+
var Avatar = forwardRef5(function Avatar2({
|
|
3820
3829
|
src,
|
|
3821
3830
|
alt = "",
|
|
3822
3831
|
fallback,
|
|
@@ -3960,7 +3969,7 @@ var cva = (base, config) => (props) => {
|
|
|
3960
3969
|
};
|
|
3961
3970
|
|
|
3962
3971
|
// components/Badge.tsx
|
|
3963
|
-
import { forwardRef as
|
|
3972
|
+
import { forwardRef as forwardRef6 } from "react";
|
|
3964
3973
|
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
3965
3974
|
var badgeVariants = cva(
|
|
3966
3975
|
"inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium",
|
|
@@ -3978,7 +3987,7 @@ var badgeVariants = cva(
|
|
|
3978
3987
|
}
|
|
3979
3988
|
}
|
|
3980
3989
|
);
|
|
3981
|
-
var Badge =
|
|
3990
|
+
var Badge = forwardRef6(function Badge2({
|
|
3982
3991
|
children,
|
|
3983
3992
|
variant = "default",
|
|
3984
3993
|
dot = false,
|
|
@@ -4023,17 +4032,15 @@ var Badge = forwardRef5(function Badge2({
|
|
|
4023
4032
|
});
|
|
4024
4033
|
|
|
4025
4034
|
// components/BentoGrid.tsx
|
|
4035
|
+
import { forwardRef as forwardRef7 } from "react";
|
|
4026
4036
|
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
4027
|
-
|
|
4028
|
-
children,
|
|
4029
|
-
className,
|
|
4030
|
-
style
|
|
4031
|
-
}) {
|
|
4037
|
+
var BentoGrid = forwardRef7(function BentoGrid2({ children, className, style }, ref) {
|
|
4032
4038
|
const { theme } = useTheme();
|
|
4033
4039
|
const themeClass = getThemeClass(theme, "bento", "default");
|
|
4034
4040
|
return /* @__PURE__ */ jsx6(
|
|
4035
4041
|
"div",
|
|
4036
4042
|
{
|
|
4043
|
+
ref,
|
|
4037
4044
|
className: cn(
|
|
4038
4045
|
"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
4039
4046
|
themeClass,
|
|
@@ -4043,9 +4050,10 @@ function BentoGrid({
|
|
|
4043
4050
|
children
|
|
4044
4051
|
}
|
|
4045
4052
|
);
|
|
4046
|
-
}
|
|
4053
|
+
});
|
|
4047
4054
|
|
|
4048
4055
|
// components/Breadcrumbs.tsx
|
|
4056
|
+
import { forwardRef as forwardRef8 } from "react";
|
|
4049
4057
|
import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
4050
4058
|
var defaultSeparators = {
|
|
4051
4059
|
minimal: "/",
|
|
@@ -4057,25 +4065,20 @@ var defaultSeparators = {
|
|
|
4057
4065
|
retro: ">",
|
|
4058
4066
|
motion: "\u203A"
|
|
4059
4067
|
};
|
|
4060
|
-
|
|
4061
|
-
items,
|
|
4062
|
-
separator,
|
|
4063
|
-
className,
|
|
4064
|
-
theme: themeProp
|
|
4065
|
-
}) {
|
|
4068
|
+
var Breadcrumbs = forwardRef8(function Breadcrumbs2({ items, separator, className, style, theme: themeProp }, ref) {
|
|
4066
4069
|
const { theme: contextTheme } = useTheme();
|
|
4067
4070
|
const theme = themeProp ?? contextTheme;
|
|
4068
4071
|
const themeClass = getThemeClass(theme, "breadcrumbs", "default");
|
|
4069
4072
|
const sep = separator ?? defaultSeparators[theme] ?? "/";
|
|
4070
|
-
return /* @__PURE__ */ jsx7("nav", { "aria-label": "Breadcrumb", className: cn("flex flex-wrap items-center gap-1.5 text-sm", themeClass, className), children: items.map((item, i) => /* @__PURE__ */ jsxs5("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
4073
|
+
return /* @__PURE__ */ jsx7("nav", { ref, "aria-label": "Breadcrumb", className: cn("flex flex-wrap items-center gap-1.5 text-sm", themeClass, className), style, children: items.map((item, i) => /* @__PURE__ */ jsxs5("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
4071
4074
|
i > 0 && /* @__PURE__ */ jsx7("span", { "data-sep": true, className: "shrink-0 opacity-70", "aria-hidden": true, children: sep }),
|
|
4072
4075
|
item.href != null ? /* @__PURE__ */ jsx7("a", { href: item.href, className: "hover:underline", children: item.label }) : /* @__PURE__ */ jsx7("span", { className: "font-medium", "aria-current": i === items.length - 1 ? "page" : void 0, children: item.label })
|
|
4073
4076
|
] }, i)) });
|
|
4074
|
-
}
|
|
4077
|
+
});
|
|
4075
4078
|
|
|
4076
4079
|
// components/Button.tsx
|
|
4077
4080
|
import {
|
|
4078
|
-
forwardRef as
|
|
4081
|
+
forwardRef as forwardRef9
|
|
4079
4082
|
} from "react";
|
|
4080
4083
|
import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
4081
4084
|
var buttonVariants = cva(
|
|
@@ -4157,10 +4160,10 @@ function ButtonInner(props, ref) {
|
|
|
4157
4160
|
}
|
|
4158
4161
|
);
|
|
4159
4162
|
}
|
|
4160
|
-
var Button =
|
|
4163
|
+
var Button = forwardRef9(ButtonInner);
|
|
4161
4164
|
|
|
4162
4165
|
// components/Calendar.tsx
|
|
4163
|
-
import { useMemo as useMemo2, useState as useState3 } from "react";
|
|
4166
|
+
import { forwardRef as forwardRef10, useMemo as useMemo2, useState as useState3 } from "react";
|
|
4164
4167
|
import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
4165
4168
|
function getDaysInMonth(year, month) {
|
|
4166
4169
|
return new Date(year, month + 1, 0).getDate();
|
|
@@ -4191,15 +4194,16 @@ var MONTHS = [
|
|
|
4191
4194
|
"November",
|
|
4192
4195
|
"December"
|
|
4193
4196
|
];
|
|
4194
|
-
|
|
4197
|
+
var Calendar = forwardRef10(function Calendar2({
|
|
4195
4198
|
value: controlledValue,
|
|
4196
4199
|
defaultValue,
|
|
4197
4200
|
onSelect,
|
|
4198
4201
|
min,
|
|
4199
4202
|
max,
|
|
4200
4203
|
className,
|
|
4204
|
+
style,
|
|
4201
4205
|
theme: themeProp
|
|
4202
|
-
}) {
|
|
4206
|
+
}, ref) {
|
|
4203
4207
|
const [uncontrolled, setUncontrolled] = useState3(
|
|
4204
4208
|
() => defaultValue ?? null
|
|
4205
4209
|
);
|
|
@@ -4247,7 +4251,9 @@ function Calendar({
|
|
|
4247
4251
|
return /* @__PURE__ */ jsxs7(
|
|
4248
4252
|
"div",
|
|
4249
4253
|
{
|
|
4254
|
+
ref,
|
|
4250
4255
|
className: cn("inline-block max-w-full min-w-0 border p-3 sm:p-4 rounded-xl", themeClass, className),
|
|
4256
|
+
style,
|
|
4251
4257
|
children: [
|
|
4252
4258
|
/* @__PURE__ */ jsxs7("div", { className: "flex items-center justify-between mb-3", children: [
|
|
4253
4259
|
/* @__PURE__ */ jsx9(
|
|
@@ -4300,10 +4306,10 @@ function Calendar({
|
|
|
4300
4306
|
]
|
|
4301
4307
|
}
|
|
4302
4308
|
);
|
|
4303
|
-
}
|
|
4309
|
+
});
|
|
4304
4310
|
|
|
4305
4311
|
// components/Card.tsx
|
|
4306
|
-
import { forwardRef as
|
|
4312
|
+
import { forwardRef as forwardRef11 } from "react";
|
|
4307
4313
|
import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
4308
4314
|
var cardVariants = cva("rounded-xl", {
|
|
4309
4315
|
variants: {
|
|
@@ -4322,7 +4328,7 @@ var cardVariants = cva("rounded-xl", {
|
|
|
4322
4328
|
isHoverable: false
|
|
4323
4329
|
}
|
|
4324
4330
|
});
|
|
4325
|
-
var Card =
|
|
4331
|
+
var Card = forwardRef11(function Card2({
|
|
4326
4332
|
header,
|
|
4327
4333
|
footer,
|
|
4328
4334
|
padding = "md",
|
|
@@ -4343,8 +4349,8 @@ var Card = forwardRef7(function Card2({
|
|
|
4343
4349
|
className: cn(
|
|
4344
4350
|
cardVariants({ padding, isHoverable }),
|
|
4345
4351
|
themeClass,
|
|
4346
|
-
|
|
4347
|
-
|
|
4352
|
+
classNames.root,
|
|
4353
|
+
className
|
|
4348
4354
|
),
|
|
4349
4355
|
...props,
|
|
4350
4356
|
children: [
|
|
@@ -4380,9 +4386,160 @@ var Card = forwardRef7(function Card2({
|
|
|
4380
4386
|
);
|
|
4381
4387
|
});
|
|
4382
4388
|
|
|
4389
|
+
// components/CommandPalette.tsx
|
|
4390
|
+
import { forwardRef as forwardRef12, useCallback as useCallback3, useEffect as useEffect3, useMemo as useMemo3, useRef as useRef2, useState as useState4 } from "react";
|
|
4391
|
+
import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
4392
|
+
var CommandPalette = forwardRef12(function CommandPalette2({
|
|
4393
|
+
open,
|
|
4394
|
+
onClose,
|
|
4395
|
+
commands,
|
|
4396
|
+
placeholder = "Type a command...",
|
|
4397
|
+
className,
|
|
4398
|
+
style,
|
|
4399
|
+
theme: themeProp
|
|
4400
|
+
}, ref) {
|
|
4401
|
+
const [query, setQuery] = useState4("");
|
|
4402
|
+
const [selected, setSelected] = useState4(0);
|
|
4403
|
+
const listRef = useRef2(null);
|
|
4404
|
+
const { theme: contextTheme } = useTheme();
|
|
4405
|
+
const theme = themeProp ?? contextTheme;
|
|
4406
|
+
const themeClass = getThemeClass(theme, "commandPalette", "default");
|
|
4407
|
+
const filtered = useMemo3(() => {
|
|
4408
|
+
if (!query.trim()) return commands;
|
|
4409
|
+
const q = query.toLowerCase();
|
|
4410
|
+
return commands.filter((c) => c.label.toLowerCase().includes(q));
|
|
4411
|
+
}, [commands, query]);
|
|
4412
|
+
const safeSelected = Math.min(selected, Math.max(0, filtered.length - 1));
|
|
4413
|
+
useEffect3(() => {
|
|
4414
|
+
if (open) {
|
|
4415
|
+
setQuery("");
|
|
4416
|
+
setSelected(0);
|
|
4417
|
+
}
|
|
4418
|
+
}, [open]);
|
|
4419
|
+
useEffect3(() => {
|
|
4420
|
+
setSelected((s) => Math.min(s, Math.max(0, filtered.length - 1)));
|
|
4421
|
+
}, [filtered.length]);
|
|
4422
|
+
const runSelected = useCallback3(() => {
|
|
4423
|
+
const item = filtered[safeSelected];
|
|
4424
|
+
if (item) {
|
|
4425
|
+
item.onSelect();
|
|
4426
|
+
onClose();
|
|
4427
|
+
}
|
|
4428
|
+
}, [filtered, safeSelected, onClose]);
|
|
4429
|
+
useEffect3(() => {
|
|
4430
|
+
if (!open) return;
|
|
4431
|
+
const handler = (e) => {
|
|
4432
|
+
if (e.key === "Escape") {
|
|
4433
|
+
e.preventDefault();
|
|
4434
|
+
onClose();
|
|
4435
|
+
return;
|
|
4436
|
+
}
|
|
4437
|
+
if (e.key === "ArrowDown") {
|
|
4438
|
+
e.preventDefault();
|
|
4439
|
+
setSelected((s) => (s + 1) % Math.max(1, filtered.length));
|
|
4440
|
+
return;
|
|
4441
|
+
}
|
|
4442
|
+
if (e.key === "ArrowUp") {
|
|
4443
|
+
e.preventDefault();
|
|
4444
|
+
setSelected(
|
|
4445
|
+
(s) => (s - 1 + filtered.length) % Math.max(1, filtered.length)
|
|
4446
|
+
);
|
|
4447
|
+
return;
|
|
4448
|
+
}
|
|
4449
|
+
if (e.key === "Enter") {
|
|
4450
|
+
e.preventDefault();
|
|
4451
|
+
runSelected();
|
|
4452
|
+
}
|
|
4453
|
+
};
|
|
4454
|
+
document.addEventListener("keydown", handler, true);
|
|
4455
|
+
return () => document.removeEventListener("keydown", handler, true);
|
|
4456
|
+
}, [open, onClose, filtered.length, runSelected]);
|
|
4457
|
+
useEffect3(() => {
|
|
4458
|
+
const el = listRef.current;
|
|
4459
|
+
if (!el) return;
|
|
4460
|
+
const item = el.querySelector(`[data-index="${safeSelected}"]`);
|
|
4461
|
+
if (item && typeof item.scrollIntoView === "function") {
|
|
4462
|
+
item.scrollIntoView({ block: "nearest", behavior: "smooth" });
|
|
4463
|
+
}
|
|
4464
|
+
}, [safeSelected]);
|
|
4465
|
+
if (!open) return null;
|
|
4466
|
+
return /* @__PURE__ */ jsxs9(
|
|
4467
|
+
"div",
|
|
4468
|
+
{
|
|
4469
|
+
ref,
|
|
4470
|
+
className: "fixed inset-0 z-50 flex items-start justify-center pt-[20vh] p-4",
|
|
4471
|
+
role: "dialog",
|
|
4472
|
+
"aria-modal": "true",
|
|
4473
|
+
"aria-label": "Command palette",
|
|
4474
|
+
children: [
|
|
4475
|
+
/* @__PURE__ */ jsx11(
|
|
4476
|
+
"div",
|
|
4477
|
+
{
|
|
4478
|
+
className: "absolute inset-0 bg-black/50 backdrop-blur-sm",
|
|
4479
|
+
onClick: onClose,
|
|
4480
|
+
"aria-hidden": true
|
|
4481
|
+
}
|
|
4482
|
+
),
|
|
4483
|
+
/* @__PURE__ */ jsxs9(
|
|
4484
|
+
"div",
|
|
4485
|
+
{
|
|
4486
|
+
className: cn("relative z-10 w-full max-w-[calc(100vw-2rem)] sm:max-w-xl overflow-hidden rounded-xl mx-2 sm:mx-0", themeClass, className),
|
|
4487
|
+
style,
|
|
4488
|
+
children: [
|
|
4489
|
+
/* @__PURE__ */ jsxs9("div", { className: "flex items-center gap-2 border-b border-inherit px-3 py-2", children: [
|
|
4490
|
+
/* @__PURE__ */ jsx11(Search, { className: "size-4 shrink-0 opacity-60", "aria-hidden": true }),
|
|
4491
|
+
/* @__PURE__ */ jsx11(
|
|
4492
|
+
"input",
|
|
4493
|
+
{
|
|
4494
|
+
type: "text",
|
|
4495
|
+
value: query,
|
|
4496
|
+
onChange: (e) => setQuery(e.target.value),
|
|
4497
|
+
placeholder,
|
|
4498
|
+
className: "flex-1 bg-transparent outline-none placeholder:opacity-60",
|
|
4499
|
+
autoFocus: true,
|
|
4500
|
+
"aria-autocomplete": "list",
|
|
4501
|
+
"aria-controls": "command-palette-list",
|
|
4502
|
+
"aria-expanded": "true"
|
|
4503
|
+
}
|
|
4504
|
+
),
|
|
4505
|
+
/* @__PURE__ */ jsx11("kbd", { className: "rounded border border-inherit px-1.5 py-0.5 text-xs opacity-60", children: "ESC" })
|
|
4506
|
+
] }),
|
|
4507
|
+
/* @__PURE__ */ jsx11(
|
|
4508
|
+
"ul",
|
|
4509
|
+
{
|
|
4510
|
+
ref: listRef,
|
|
4511
|
+
id: "command-palette-list",
|
|
4512
|
+
role: "listbox",
|
|
4513
|
+
className: "max-h-72 overflow-auto py-2",
|
|
4514
|
+
children: filtered.length === 0 ? /* @__PURE__ */ jsx11("li", { className: "px-4 py-3 text-sm opacity-60", children: "No results." }) : filtered.map((cmd, i) => /* @__PURE__ */ jsx11("li", { role: "option", "aria-selected": i === safeSelected, "data-index": i, children: /* @__PURE__ */ jsxs9(
|
|
4515
|
+
"button",
|
|
4516
|
+
{
|
|
4517
|
+
type: "button",
|
|
4518
|
+
onClick: () => {
|
|
4519
|
+
cmd.onSelect();
|
|
4520
|
+
onClose();
|
|
4521
|
+
},
|
|
4522
|
+
onMouseEnter: () => setSelected(i),
|
|
4523
|
+
className: `flex w-full items-center justify-between px-4 py-2 text-left text-sm ${i === safeSelected ? "bg-current/10" : ""}`,
|
|
4524
|
+
children: [
|
|
4525
|
+
cmd.label,
|
|
4526
|
+
cmd.shortcut ? /* @__PURE__ */ jsx11("kbd", { className: "rounded border border-inherit px-1.5 py-0.5 text-xs opacity-60", children: cmd.shortcut }) : null
|
|
4527
|
+
]
|
|
4528
|
+
}
|
|
4529
|
+
) }, cmd.id))
|
|
4530
|
+
}
|
|
4531
|
+
)
|
|
4532
|
+
]
|
|
4533
|
+
}
|
|
4534
|
+
)
|
|
4535
|
+
]
|
|
4536
|
+
}
|
|
4537
|
+
);
|
|
4538
|
+
});
|
|
4539
|
+
|
|
4383
4540
|
// components/DashboardShell.tsx
|
|
4384
|
-
import { useState as
|
|
4385
|
-
import { Fragment, jsx as
|
|
4541
|
+
import { forwardRef as forwardRef13, useState as useState5 } from "react";
|
|
4542
|
+
import { Fragment, jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
4386
4543
|
var SHELL_BG_BY_THEME = {
|
|
4387
4544
|
minimal: "bg-gradient-to-br from-slate-50 via-zinc-50 to-slate-100",
|
|
4388
4545
|
night: "bg-zinc-950 text-zinc-100",
|
|
@@ -4414,7 +4571,7 @@ function mobileNavLinkStateClasses(theme, active) {
|
|
|
4414
4571
|
}
|
|
4415
4572
|
return active ? "bg-black/5 text-zinc-900" : "text-zinc-600 hover:bg-black/5 hover:text-zinc-900";
|
|
4416
4573
|
}
|
|
4417
|
-
|
|
4574
|
+
var DashboardShell = forwardRef13(function DashboardShell2({
|
|
4418
4575
|
children,
|
|
4419
4576
|
navItems,
|
|
4420
4577
|
adminNavItems,
|
|
@@ -4423,19 +4580,20 @@ function DashboardShell({
|
|
|
4423
4580
|
userRole,
|
|
4424
4581
|
onLogout,
|
|
4425
4582
|
logo,
|
|
4426
|
-
className
|
|
4427
|
-
|
|
4428
|
-
|
|
4583
|
+
className,
|
|
4584
|
+
style
|
|
4585
|
+
}, ref) {
|
|
4586
|
+
const [mobileOpen, setMobileOpen] = useState5(false);
|
|
4429
4587
|
const isAdmin = userRole === "ADMIN";
|
|
4430
4588
|
const { theme } = useTheme();
|
|
4431
4589
|
const shellBg = SHELL_BG_BY_THEME[theme];
|
|
4432
4590
|
const isDarkHeader = darkHeaderThemes.includes(theme);
|
|
4433
4591
|
const isActive = (href) => currentPath ? currentPath === href || currentPath.startsWith(href) : false;
|
|
4434
|
-
return /* @__PURE__ */
|
|
4435
|
-
/* @__PURE__ */
|
|
4436
|
-
/* @__PURE__ */
|
|
4437
|
-
/* @__PURE__ */
|
|
4438
|
-
/* @__PURE__ */
|
|
4592
|
+
return /* @__PURE__ */ jsxs10("div", { ref, className: cn("min-h-screen", shellBg, className), style, children: [
|
|
4593
|
+
/* @__PURE__ */ jsxs10("header", { className: cn("sticky top-0 z-40", headerClasses(theme)), children: [
|
|
4594
|
+
/* @__PURE__ */ jsxs10("div", { className: "mx-auto flex h-14 max-w-7xl items-center justify-between px-4 sm:px-6 lg:px-8", children: [
|
|
4595
|
+
/* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-2", children: [
|
|
4596
|
+
/* @__PURE__ */ jsx12(
|
|
4439
4597
|
"button",
|
|
4440
4598
|
{
|
|
4441
4599
|
type: "button",
|
|
@@ -4446,10 +4604,10 @@ function DashboardShell({
|
|
|
4446
4604
|
),
|
|
4447
4605
|
"aria-label": "Toggle navigation",
|
|
4448
4606
|
"aria-expanded": mobileOpen,
|
|
4449
|
-
children: mobileOpen ? /* @__PURE__ */
|
|
4607
|
+
children: mobileOpen ? /* @__PURE__ */ jsx12("span", { className: "text-lg leading-none", children: "\xD7" }) : /* @__PURE__ */ jsx12("span", { className: "text-xl leading-none", children: "\u2630" })
|
|
4450
4608
|
}
|
|
4451
4609
|
),
|
|
4452
|
-
/* @__PURE__ */
|
|
4610
|
+
/* @__PURE__ */ jsx12("div", { className: "flex items-center gap-2", children: logo ?? /* @__PURE__ */ jsx12(
|
|
4453
4611
|
"span",
|
|
4454
4612
|
{
|
|
4455
4613
|
className: cn(
|
|
@@ -4459,8 +4617,8 @@ function DashboardShell({
|
|
|
4459
4617
|
children: "Dashboard"
|
|
4460
4618
|
}
|
|
4461
4619
|
) }),
|
|
4462
|
-
/* @__PURE__ */
|
|
4463
|
-
navItems.map((item) => /* @__PURE__ */
|
|
4620
|
+
/* @__PURE__ */ jsxs10("nav", { className: "ml-6 hidden items-center gap-1 text-sm sm:flex", children: [
|
|
4621
|
+
navItems.map((item) => /* @__PURE__ */ jsx12(
|
|
4464
4622
|
"a",
|
|
4465
4623
|
{
|
|
4466
4624
|
href: item.href,
|
|
@@ -4469,8 +4627,8 @@ function DashboardShell({
|
|
|
4469
4627
|
},
|
|
4470
4628
|
item.href
|
|
4471
4629
|
)),
|
|
4472
|
-
isAdmin && adminNavItems && adminNavItems.length > 0 && /* @__PURE__ */
|
|
4473
|
-
/* @__PURE__ */
|
|
4630
|
+
isAdmin && adminNavItems && adminNavItems.length > 0 && /* @__PURE__ */ jsxs10(Fragment, { children: [
|
|
4631
|
+
/* @__PURE__ */ jsx12(
|
|
4474
4632
|
"span",
|
|
4475
4633
|
{
|
|
4476
4634
|
className: cn(
|
|
@@ -4479,7 +4637,7 @@ function DashboardShell({
|
|
|
4479
4637
|
)
|
|
4480
4638
|
}
|
|
4481
4639
|
),
|
|
4482
|
-
adminNavItems.map((item) => /* @__PURE__ */
|
|
4640
|
+
adminNavItems.map((item) => /* @__PURE__ */ jsx12(
|
|
4483
4641
|
"a",
|
|
4484
4642
|
{
|
|
4485
4643
|
href: item.href,
|
|
@@ -4494,8 +4652,8 @@ function DashboardShell({
|
|
|
4494
4652
|
] })
|
|
4495
4653
|
] })
|
|
4496
4654
|
] }),
|
|
4497
|
-
/* @__PURE__ */
|
|
4498
|
-
userEmail && /* @__PURE__ */
|
|
4655
|
+
/* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-2 text-sm", children: [
|
|
4656
|
+
userEmail && /* @__PURE__ */ jsx12(
|
|
4499
4657
|
"span",
|
|
4500
4658
|
{
|
|
4501
4659
|
className: cn(
|
|
@@ -4505,7 +4663,7 @@ function DashboardShell({
|
|
|
4505
4663
|
children: userEmail
|
|
4506
4664
|
}
|
|
4507
4665
|
),
|
|
4508
|
-
onLogout && /* @__PURE__ */
|
|
4666
|
+
onLogout && /* @__PURE__ */ jsx12(
|
|
4509
4667
|
"button",
|
|
4510
4668
|
{
|
|
4511
4669
|
type: "button",
|
|
@@ -4519,8 +4677,8 @@ function DashboardShell({
|
|
|
4519
4677
|
)
|
|
4520
4678
|
] })
|
|
4521
4679
|
] }),
|
|
4522
|
-
mobileOpen && /* @__PURE__ */
|
|
4523
|
-
/* @__PURE__ */
|
|
4680
|
+
mobileOpen && /* @__PURE__ */ jsxs10("div", { className: mobilePanelClasses(theme), children: [
|
|
4681
|
+
/* @__PURE__ */ jsx12("div", { className: "space-y-1", children: navItems.map((item) => /* @__PURE__ */ jsx12(
|
|
4524
4682
|
"a",
|
|
4525
4683
|
{
|
|
4526
4684
|
href: item.href,
|
|
@@ -4532,8 +4690,8 @@ function DashboardShell({
|
|
|
4532
4690
|
},
|
|
4533
4691
|
item.href
|
|
4534
4692
|
)) }),
|
|
4535
|
-
isAdmin && adminNavItems && adminNavItems.length > 0 && /* @__PURE__ */
|
|
4536
|
-
/* @__PURE__ */
|
|
4693
|
+
isAdmin && adminNavItems && adminNavItems.length > 0 && /* @__PURE__ */ jsxs10(Fragment, { children: [
|
|
4694
|
+
/* @__PURE__ */ jsx12(
|
|
4537
4695
|
"div",
|
|
4538
4696
|
{
|
|
4539
4697
|
className: cn(
|
|
@@ -4542,7 +4700,7 @@ function DashboardShell({
|
|
|
4542
4700
|
)
|
|
4543
4701
|
}
|
|
4544
4702
|
),
|
|
4545
|
-
/* @__PURE__ */
|
|
4703
|
+
/* @__PURE__ */ jsx12("div", { className: "space-y-1", children: adminNavItems.map((item) => /* @__PURE__ */ jsx12(
|
|
4546
4704
|
"a",
|
|
4547
4705
|
{
|
|
4548
4706
|
href: item.href,
|
|
@@ -4555,7 +4713,7 @@ function DashboardShell({
|
|
|
4555
4713
|
item.href
|
|
4556
4714
|
)) })
|
|
4557
4715
|
] }),
|
|
4558
|
-
userEmail && /* @__PURE__ */
|
|
4716
|
+
userEmail && /* @__PURE__ */ jsx12(
|
|
4559
4717
|
"div",
|
|
4560
4718
|
{
|
|
4561
4719
|
className: cn(
|
|
@@ -4565,7 +4723,7 @@ function DashboardShell({
|
|
|
4565
4723
|
children: userEmail
|
|
4566
4724
|
}
|
|
4567
4725
|
),
|
|
4568
|
-
onLogout && /* @__PURE__ */
|
|
4726
|
+
onLogout && /* @__PURE__ */ jsx12(
|
|
4569
4727
|
"button",
|
|
4570
4728
|
{
|
|
4571
4729
|
type: "button",
|
|
@@ -4579,157 +4737,51 @@ function DashboardShell({
|
|
|
4579
4737
|
)
|
|
4580
4738
|
] })
|
|
4581
4739
|
] }),
|
|
4582
|
-
/* @__PURE__ */
|
|
4740
|
+
/* @__PURE__ */ jsx12("main", { className: "mx-auto max-w-7xl px-4 py-8 sm:px-6 lg:px-8", children })
|
|
4583
4741
|
] });
|
|
4584
|
-
}
|
|
4742
|
+
});
|
|
4585
4743
|
|
|
4586
|
-
// components/
|
|
4587
|
-
import {
|
|
4588
|
-
import { jsx as
|
|
4589
|
-
function
|
|
4590
|
-
|
|
4591
|
-
|
|
4592
|
-
|
|
4593
|
-
placeholder = "Type a command...",
|
|
4594
|
-
theme: themeProp
|
|
4595
|
-
}) {
|
|
4596
|
-
const [query, setQuery] = useState5("");
|
|
4597
|
-
const [selected, setSelected] = useState5(0);
|
|
4598
|
-
const listRef = useRef2(null);
|
|
4599
|
-
const { theme: contextTheme } = useTheme();
|
|
4600
|
-
const theme = themeProp ?? contextTheme;
|
|
4601
|
-
const themeClass = getThemeClass(theme, "commandPalette", "default");
|
|
4602
|
-
const filtered = useMemo3(() => {
|
|
4603
|
-
if (!query.trim()) return commands;
|
|
4604
|
-
const q = query.toLowerCase();
|
|
4605
|
-
return commands.filter((c) => c.label.toLowerCase().includes(q));
|
|
4606
|
-
}, [commands, query]);
|
|
4607
|
-
const safeSelected = Math.min(selected, Math.max(0, filtered.length - 1));
|
|
4608
|
-
useEffect3(() => {
|
|
4609
|
-
if (open) {
|
|
4610
|
-
setQuery("");
|
|
4611
|
-
setSelected(0);
|
|
4612
|
-
}
|
|
4613
|
-
}, [open]);
|
|
4614
|
-
useEffect3(() => {
|
|
4615
|
-
setSelected((s) => Math.min(s, Math.max(0, filtered.length - 1)));
|
|
4616
|
-
}, [filtered.length]);
|
|
4617
|
-
const runSelected = useCallback3(() => {
|
|
4618
|
-
const item = filtered[safeSelected];
|
|
4619
|
-
if (item) {
|
|
4620
|
-
item.onSelect();
|
|
4621
|
-
onClose();
|
|
4622
|
-
}
|
|
4623
|
-
}, [filtered, safeSelected, onClose]);
|
|
4624
|
-
useEffect3(() => {
|
|
4625
|
-
if (!open) return;
|
|
4626
|
-
const handler = (e) => {
|
|
4627
|
-
if (e.key === "Escape") {
|
|
4628
|
-
e.preventDefault();
|
|
4629
|
-
onClose();
|
|
4630
|
-
return;
|
|
4631
|
-
}
|
|
4632
|
-
if (e.key === "ArrowDown") {
|
|
4633
|
-
e.preventDefault();
|
|
4634
|
-
setSelected((s) => (s + 1) % Math.max(1, filtered.length));
|
|
4635
|
-
return;
|
|
4636
|
-
}
|
|
4637
|
-
if (e.key === "ArrowUp") {
|
|
4638
|
-
e.preventDefault();
|
|
4639
|
-
setSelected(
|
|
4640
|
-
(s) => (s - 1 + filtered.length) % Math.max(1, filtered.length)
|
|
4641
|
-
);
|
|
4642
|
-
return;
|
|
4643
|
-
}
|
|
4644
|
-
if (e.key === "Enter") {
|
|
4645
|
-
e.preventDefault();
|
|
4646
|
-
runSelected();
|
|
4647
|
-
}
|
|
4648
|
-
};
|
|
4649
|
-
document.addEventListener("keydown", handler, true);
|
|
4650
|
-
return () => document.removeEventListener("keydown", handler, true);
|
|
4651
|
-
}, [open, onClose, filtered.length, runSelected]);
|
|
4652
|
-
useEffect3(() => {
|
|
4653
|
-
const el = listRef.current;
|
|
4654
|
-
if (!el) return;
|
|
4655
|
-
const item = el.querySelector(`[data-index="${safeSelected}"]`);
|
|
4656
|
-
item?.scrollIntoView({ block: "nearest", behavior: "smooth" });
|
|
4657
|
-
}, [safeSelected]);
|
|
4658
|
-
if (!open) return null;
|
|
4659
|
-
return /* @__PURE__ */ jsxs10(
|
|
4744
|
+
// components/DataTable.tsx
|
|
4745
|
+
import { forwardRef as forwardRef14 } from "react";
|
|
4746
|
+
import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
4747
|
+
function DataTableInner({ columns, data, getRowKey, className, style }, ref) {
|
|
4748
|
+
const { theme } = useTheme();
|
|
4749
|
+
const themeClass = getThemeClass(theme, "dataTable", "default");
|
|
4750
|
+
return /* @__PURE__ */ jsx13(
|
|
4660
4751
|
"div",
|
|
4661
4752
|
{
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4753
|
+
ref,
|
|
4754
|
+
className: cn(
|
|
4755
|
+
"overflow-x-auto rounded-lg -mx-1 px-1 sm:mx-0 sm:px-0",
|
|
4756
|
+
themeClass,
|
|
4757
|
+
className
|
|
4758
|
+
),
|
|
4759
|
+
style,
|
|
4760
|
+
children: /* @__PURE__ */ jsxs11("table", { className: "w-full min-w-[480px] text-left text-sm", children: [
|
|
4761
|
+
/* @__PURE__ */ jsx13("thead", { children: /* @__PURE__ */ jsx13("tr", { className: "border-b border-inherit", children: columns.map((col) => /* @__PURE__ */ jsx13(
|
|
4762
|
+
"th",
|
|
4669
4763
|
{
|
|
4670
|
-
className: "
|
|
4671
|
-
|
|
4672
|
-
|
|
4673
|
-
|
|
4674
|
-
),
|
|
4675
|
-
/* @__PURE__ */
|
|
4676
|
-
"
|
|
4764
|
+
className: "px-4 py-3 font-medium",
|
|
4765
|
+
children: col.header
|
|
4766
|
+
},
|
|
4767
|
+
String(col.key)
|
|
4768
|
+
)) }) }),
|
|
4769
|
+
/* @__PURE__ */ jsx13("tbody", { children: data.map((row, i) => /* @__PURE__ */ jsx13(
|
|
4770
|
+
"tr",
|
|
4677
4771
|
{
|
|
4678
|
-
className:
|
|
4679
|
-
children: [
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
{
|
|
4685
|
-
type: "text",
|
|
4686
|
-
value: query,
|
|
4687
|
-
onChange: (e) => setQuery(e.target.value),
|
|
4688
|
-
placeholder,
|
|
4689
|
-
className: "flex-1 bg-transparent outline-none placeholder:opacity-60",
|
|
4690
|
-
autoFocus: true,
|
|
4691
|
-
"aria-autocomplete": "list",
|
|
4692
|
-
"aria-controls": "command-palette-list",
|
|
4693
|
-
"aria-expanded": "true"
|
|
4694
|
-
}
|
|
4695
|
-
),
|
|
4696
|
-
/* @__PURE__ */ jsx12("kbd", { className: "rounded border border-inherit px-1.5 py-0.5 text-xs opacity-60", children: "ESC" })
|
|
4697
|
-
] }),
|
|
4698
|
-
/* @__PURE__ */ jsx12(
|
|
4699
|
-
"ul",
|
|
4700
|
-
{
|
|
4701
|
-
ref: listRef,
|
|
4702
|
-
id: "command-palette-list",
|
|
4703
|
-
role: "listbox",
|
|
4704
|
-
className: "max-h-72 overflow-auto py-2",
|
|
4705
|
-
children: filtered.length === 0 ? /* @__PURE__ */ jsx12("li", { className: "px-4 py-3 text-sm opacity-60", children: "No results." }) : filtered.map((cmd, i) => /* @__PURE__ */ jsx12("li", { role: "option", "data-index": i, children: /* @__PURE__ */ jsxs10(
|
|
4706
|
-
"button",
|
|
4707
|
-
{
|
|
4708
|
-
type: "button",
|
|
4709
|
-
onClick: () => {
|
|
4710
|
-
cmd.onSelect();
|
|
4711
|
-
onClose();
|
|
4712
|
-
},
|
|
4713
|
-
onMouseEnter: () => setSelected(i),
|
|
4714
|
-
className: `flex w-full items-center justify-between px-4 py-2 text-left text-sm ${i === safeSelected ? "bg-current/10" : ""}`,
|
|
4715
|
-
children: [
|
|
4716
|
-
cmd.label,
|
|
4717
|
-
cmd.shortcut ? /* @__PURE__ */ jsx12("kbd", { className: "rounded border border-inherit px-1.5 py-0.5 text-xs opacity-60", children: cmd.shortcut }) : null
|
|
4718
|
-
]
|
|
4719
|
-
}
|
|
4720
|
-
) }, cmd.id))
|
|
4721
|
-
}
|
|
4722
|
-
)
|
|
4723
|
-
]
|
|
4724
|
-
}
|
|
4725
|
-
)
|
|
4726
|
-
]
|
|
4772
|
+
className: "border-b border-inherit last:border-0",
|
|
4773
|
+
children: columns.map((col) => /* @__PURE__ */ jsx13("td", { className: "px-4 py-3", children: col.render ? col.render(row) : String(row[col.key] ?? "") }, String(col.key)))
|
|
4774
|
+
},
|
|
4775
|
+
getRowKey ? getRowKey(row, i) : i
|
|
4776
|
+
)) })
|
|
4777
|
+
] })
|
|
4727
4778
|
}
|
|
4728
4779
|
);
|
|
4729
4780
|
}
|
|
4781
|
+
var DataTable = forwardRef14(DataTableInner);
|
|
4730
4782
|
|
|
4731
4783
|
// components/DocumentAccordion.tsx
|
|
4732
|
-
import { jsx as
|
|
4784
|
+
import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
4733
4785
|
function DocumentAccordion({
|
|
4734
4786
|
title,
|
|
4735
4787
|
content,
|
|
@@ -4744,15 +4796,15 @@ function DocumentAccordion({
|
|
|
4744
4796
|
{
|
|
4745
4797
|
id: "document",
|
|
4746
4798
|
title,
|
|
4747
|
-
content: /* @__PURE__ */
|
|
4799
|
+
content: /* @__PURE__ */ jsx14(
|
|
4748
4800
|
"div",
|
|
4749
4801
|
{
|
|
4750
4802
|
className: cn(
|
|
4751
4803
|
"rounded-xl border p-0 shadow-sm backdrop-blur-md",
|
|
4752
4804
|
theme === "night" || theme === "cyberpunk" ? "border-white/10 bg-zinc-950/80" : "border-black/5 bg-white/60"
|
|
4753
4805
|
),
|
|
4754
|
-
children: pdfUrl ? /* @__PURE__ */
|
|
4755
|
-
/* @__PURE__ */
|
|
4806
|
+
children: pdfUrl ? /* @__PURE__ */ jsxs12("div", { className: "flex flex-col gap-3", children: [
|
|
4807
|
+
/* @__PURE__ */ jsx14("div", { className: "flex justify-end px-4 pt-4", children: /* @__PURE__ */ jsxs12(
|
|
4756
4808
|
"a",
|
|
4757
4809
|
{
|
|
4758
4810
|
href: pdfUrl,
|
|
@@ -4763,19 +4815,19 @@ function DocumentAccordion({
|
|
|
4763
4815
|
theme === "night" || theme === "cyberpunk" ? "border-white/20 bg-zinc-900/80 text-sky-300 hover:bg-zinc-800/80" : "border-black/5 bg-white/70 text-blue-700 hover:bg-white"
|
|
4764
4816
|
),
|
|
4765
4817
|
children: [
|
|
4766
|
-
/* @__PURE__ */
|
|
4767
|
-
/* @__PURE__ */
|
|
4818
|
+
/* @__PURE__ */ jsx14("span", { children: "Open PDF" }),
|
|
4819
|
+
/* @__PURE__ */ jsx14("span", { "aria-hidden": true, children: "\u2197" })
|
|
4768
4820
|
]
|
|
4769
4821
|
}
|
|
4770
4822
|
) }),
|
|
4771
|
-
/* @__PURE__ */
|
|
4823
|
+
/* @__PURE__ */ jsx14(
|
|
4772
4824
|
"div",
|
|
4773
4825
|
{
|
|
4774
4826
|
className: cn(
|
|
4775
4827
|
"h-[60vh] w-full border-t",
|
|
4776
4828
|
theme === "night" || theme === "cyberpunk" ? "border-white/10" : "border-black/5"
|
|
4777
4829
|
),
|
|
4778
|
-
children: /* @__PURE__ */
|
|
4830
|
+
children: /* @__PURE__ */ jsx14(
|
|
4779
4831
|
"iframe",
|
|
4780
4832
|
{
|
|
4781
4833
|
src: `https://docs.google.com/viewer?url=${encodeURIComponent(
|
|
@@ -4787,7 +4839,7 @@ function DocumentAccordion({
|
|
|
4787
4839
|
)
|
|
4788
4840
|
}
|
|
4789
4841
|
)
|
|
4790
|
-
] }) : content ? /* @__PURE__ */
|
|
4842
|
+
] }) : content ? /* @__PURE__ */ jsx14(
|
|
4791
4843
|
"div",
|
|
4792
4844
|
{
|
|
4793
4845
|
className: cn(
|
|
@@ -4801,7 +4853,7 @@ function DocumentAccordion({
|
|
|
4801
4853
|
)
|
|
4802
4854
|
}
|
|
4803
4855
|
];
|
|
4804
|
-
return /* @__PURE__ */
|
|
4856
|
+
return /* @__PURE__ */ jsx14(
|
|
4805
4857
|
Accordion,
|
|
4806
4858
|
{
|
|
4807
4859
|
items,
|
|
@@ -4813,48 +4865,6 @@ function DocumentAccordion({
|
|
|
4813
4865
|
);
|
|
4814
4866
|
}
|
|
4815
4867
|
|
|
4816
|
-
// components/DataTable.tsx
|
|
4817
|
-
import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
4818
|
-
function DataTable({
|
|
4819
|
-
columns,
|
|
4820
|
-
data,
|
|
4821
|
-
getRowKey,
|
|
4822
|
-
className,
|
|
4823
|
-
style
|
|
4824
|
-
}) {
|
|
4825
|
-
const { theme } = useTheme();
|
|
4826
|
-
const themeClass = getThemeClass(theme, "dataTable", "default");
|
|
4827
|
-
return /* @__PURE__ */ jsx14(
|
|
4828
|
-
"div",
|
|
4829
|
-
{
|
|
4830
|
-
className: cn(
|
|
4831
|
-
"overflow-x-auto rounded-lg -mx-1 px-1 sm:mx-0 sm:px-0",
|
|
4832
|
-
themeClass,
|
|
4833
|
-
className
|
|
4834
|
-
),
|
|
4835
|
-
style,
|
|
4836
|
-
children: /* @__PURE__ */ jsxs12("table", { className: "w-full min-w-[480px] text-left text-sm", children: [
|
|
4837
|
-
/* @__PURE__ */ jsx14("thead", { children: /* @__PURE__ */ jsx14("tr", { className: "border-b border-inherit", children: columns.map((col) => /* @__PURE__ */ jsx14(
|
|
4838
|
-
"th",
|
|
4839
|
-
{
|
|
4840
|
-
className: "px-4 py-3 font-medium",
|
|
4841
|
-
children: col.header
|
|
4842
|
-
},
|
|
4843
|
-
String(col.key)
|
|
4844
|
-
)) }) }),
|
|
4845
|
-
/* @__PURE__ */ jsx14("tbody", { children: data.map((row, i) => /* @__PURE__ */ jsx14(
|
|
4846
|
-
"tr",
|
|
4847
|
-
{
|
|
4848
|
-
className: "border-b border-inherit last:border-0",
|
|
4849
|
-
children: columns.map((col) => /* @__PURE__ */ jsx14("td", { className: "px-4 py-3", children: col.render ? col.render(row) : String(row[col.key] ?? "") }, String(col.key)))
|
|
4850
|
-
},
|
|
4851
|
-
getRowKey ? getRowKey(row, i) : i
|
|
4852
|
-
)) })
|
|
4853
|
-
] })
|
|
4854
|
-
}
|
|
4855
|
-
);
|
|
4856
|
-
}
|
|
4857
|
-
|
|
4858
4868
|
// src/hooks/useKeyboardNavigation.ts
|
|
4859
4869
|
import { useCallback as useCallback4, useEffect as useEffect4 } from "react";
|
|
4860
4870
|
function useKeyboardNavigation(options) {
|
|
@@ -4933,6 +4943,7 @@ function useClickOutside(ref, handler, options) {
|
|
|
4933
4943
|
|
|
4934
4944
|
// components/Dropdown.tsx
|
|
4935
4945
|
import {
|
|
4946
|
+
forwardRef as forwardRef15,
|
|
4936
4947
|
useCallback as useCallback6,
|
|
4937
4948
|
useEffect as useEffect6,
|
|
4938
4949
|
useLayoutEffect,
|
|
@@ -4945,7 +4956,7 @@ function dropdownItemHighlightClass(theme) {
|
|
|
4945
4956
|
const darkThemes = ["night", "cyberpunk"];
|
|
4946
4957
|
return darkThemes.includes(theme) ? "hover:bg-white/10 focus:bg-white/10" : "hover:bg-black/5 focus:bg-black/5";
|
|
4947
4958
|
}
|
|
4948
|
-
|
|
4959
|
+
var Dropdown = forwardRef15(function Dropdown2({
|
|
4949
4960
|
trigger: triggerProp,
|
|
4950
4961
|
placeholder = "Select\u2026",
|
|
4951
4962
|
items,
|
|
@@ -4957,7 +4968,7 @@ function Dropdown({
|
|
|
4957
4968
|
style,
|
|
4958
4969
|
theme: themeProp,
|
|
4959
4970
|
classNames = {}
|
|
4960
|
-
}) {
|
|
4971
|
+
}, ref) {
|
|
4961
4972
|
const [open, setOpen] = useState6(false);
|
|
4962
4973
|
const [uncontrolledValue, setUncontrolledValue] = useState6(defaultValue ?? "");
|
|
4963
4974
|
const isControlled = controlledValue !== void 0;
|
|
@@ -4967,6 +4978,7 @@ function Dropdown({
|
|
|
4967
4978
|
const listRef = useRef3(null);
|
|
4968
4979
|
const containerRef = useRef3(null);
|
|
4969
4980
|
const triggerRef = useRef3(null);
|
|
4981
|
+
const mergedContainerRef = mergeRefs(ref, containerRef);
|
|
4970
4982
|
const { theme: contextTheme } = useTheme();
|
|
4971
4983
|
const theme = themeProp ?? contextTheme;
|
|
4972
4984
|
const themeClass = getThemeClass(theme, "card", "default");
|
|
@@ -5126,7 +5138,7 @@ function Dropdown({
|
|
|
5126
5138
|
return /* @__PURE__ */ jsxs13(
|
|
5127
5139
|
"div",
|
|
5128
5140
|
{
|
|
5129
|
-
ref:
|
|
5141
|
+
ref: mergedContainerRef,
|
|
5130
5142
|
className: cn("relative inline-block", className),
|
|
5131
5143
|
style,
|
|
5132
5144
|
onKeyDown: handleKeyDown,
|
|
@@ -5150,7 +5162,7 @@ function Dropdown({
|
|
|
5150
5162
|
]
|
|
5151
5163
|
}
|
|
5152
5164
|
);
|
|
5153
|
-
}
|
|
5165
|
+
});
|
|
5154
5166
|
|
|
5155
5167
|
// components/Flashcard.tsx
|
|
5156
5168
|
import { useState as useState7 } from "react";
|
|
@@ -5534,7 +5546,7 @@ function createDOMMotionComponentProxy(componentFactory) {
|
|
|
5534
5546
|
|
|
5535
5547
|
// node_modules/framer-motion/dist/es/motion/index.mjs
|
|
5536
5548
|
import { jsxs as jsxs14, jsx as jsx16 } from "react/jsx-runtime";
|
|
5537
|
-
import { forwardRef as
|
|
5549
|
+
import { forwardRef as forwardRef16, useContext as useContext5 } from "react";
|
|
5538
5550
|
|
|
5539
5551
|
// node_modules/framer-motion/dist/es/context/MotionContext/index.mjs
|
|
5540
5552
|
import { createContext as createContext6 } from "react";
|
|
@@ -5762,7 +5774,7 @@ function createRendererMotionComponent({ preloadedFeatures, createVisualElement,
|
|
|
5762
5774
|
return jsxs14(MotionContext.Provider, { value: context, children: [MeasureLayout2 && context.visualElement ? jsx16(MeasureLayout2, { visualElement: context.visualElement, ...configAndProps }) : null, useRender(Component2, props, useMotionRef(visualState, context.visualElement, externalRef), visualState, isStatic, context.visualElement)] });
|
|
5763
5775
|
}
|
|
5764
5776
|
MotionComponent.displayName = `motion.${typeof Component2 === "string" ? Component2 : `create(${(_b = (_a = Component2.displayName) !== null && _a !== void 0 ? _a : Component2.name) !== null && _b !== void 0 ? _b : ""})`}`;
|
|
5765
|
-
const ForwardRefMotionComponent =
|
|
5777
|
+
const ForwardRefMotionComponent = forwardRef16(MotionComponent);
|
|
5766
5778
|
ForwardRefMotionComponent[motionComponentSymbol] = Component2;
|
|
5767
5779
|
return ForwardRefMotionComponent;
|
|
5768
5780
|
}
|
|
@@ -12847,6 +12859,7 @@ var createMotionComponent = /* @__PURE__ */ createMotionComponentFactory({
|
|
|
12847
12859
|
var motion = /* @__PURE__ */ createDOMMotionComponentProxy(createMotionComponent);
|
|
12848
12860
|
|
|
12849
12861
|
// components/Flashcard.tsx
|
|
12862
|
+
import { forwardRef as forwardRef17 } from "react";
|
|
12850
12863
|
import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
12851
12864
|
var FRONT_BY_THEME = {
|
|
12852
12865
|
minimal: "border-black/5 bg-gradient-to-br from-white to-zinc-50 text-zinc-900 shadow-[0_4px_20px_-4px_rgba(0,0,0,0.1)]",
|
|
@@ -12868,17 +12881,13 @@ var BACK_BY_THEME = {
|
|
|
12868
12881
|
retro: "from-zinc-800 to-black text-lime-400 font-mono",
|
|
12869
12882
|
motion: "from-indigo-600 via-purple-600 to-indigo-700 text-white transition-all duration-500"
|
|
12870
12883
|
};
|
|
12871
|
-
|
|
12872
|
-
question,
|
|
12873
|
-
answer,
|
|
12874
|
-
className,
|
|
12875
|
-
...props
|
|
12876
|
-
}) {
|
|
12884
|
+
var Flashcard = forwardRef17(function Flashcard2({ question, answer, className, ...props }, ref) {
|
|
12877
12885
|
const [isFlipped, setIsFlipped] = useState7(false);
|
|
12878
12886
|
const { theme } = useTheme();
|
|
12879
12887
|
return /* @__PURE__ */ jsx18(
|
|
12880
12888
|
"div",
|
|
12881
12889
|
{
|
|
12890
|
+
ref,
|
|
12882
12891
|
className: cn(
|
|
12883
12892
|
"group relative h-64 w-full cursor-pointer [perspective:1000px]",
|
|
12884
12893
|
className
|
|
@@ -12934,9 +12943,10 @@ function Flashcard({
|
|
|
12934
12943
|
)
|
|
12935
12944
|
}
|
|
12936
12945
|
);
|
|
12937
|
-
}
|
|
12946
|
+
});
|
|
12938
12947
|
|
|
12939
12948
|
// components/GraphicCard.tsx
|
|
12949
|
+
import { forwardRef as forwardRef18 } from "react";
|
|
12940
12950
|
import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
12941
12951
|
var SURFACE_BY_THEME = {
|
|
12942
12952
|
minimal: "bg-gradient-to-br from-white to-zinc-50 border-black/5 shadow-[0_4px_20px_-4px_rgba(0,0,0,0.08)] hover:shadow-[0_10px_40px_-6px_rgba(0,0,0,0.18)]",
|
|
@@ -12948,11 +12958,7 @@ var SURFACE_BY_THEME = {
|
|
|
12948
12958
|
retro: "bg-white border-2 border-black font-mono shadow-[4px_4px_0_0_rgba(0,0,0,1)]",
|
|
12949
12959
|
motion: "bg-white border-2 border-indigo-200 shadow-lg transition-all duration-300 hover:scale-[1.02] hover:shadow-xl hover:border-indigo-300 hover:-translate-y-0.5"
|
|
12950
12960
|
};
|
|
12951
|
-
|
|
12952
|
-
children,
|
|
12953
|
-
className,
|
|
12954
|
-
...props
|
|
12955
|
-
}) {
|
|
12961
|
+
var GraphicCard = forwardRef18(function GraphicCard2({ children, className, ...props }, ref) {
|
|
12956
12962
|
const { theme } = useTheme();
|
|
12957
12963
|
const surface = SURFACE_BY_THEME[theme];
|
|
12958
12964
|
const isDark = theme === "night" || theme === "cyberpunk";
|
|
@@ -12961,6 +12967,7 @@ function GraphicCard({
|
|
|
12961
12967
|
return /* @__PURE__ */ jsxs16(
|
|
12962
12968
|
"div",
|
|
12963
12969
|
{
|
|
12970
|
+
ref,
|
|
12964
12971
|
className: cn(
|
|
12965
12972
|
"group relative w-full overflow-hidden rounded-2xl p-6 transition-all duration-300",
|
|
12966
12973
|
surface,
|
|
@@ -12974,10 +12981,10 @@ function GraphicCard({
|
|
|
12974
12981
|
]
|
|
12975
12982
|
}
|
|
12976
12983
|
);
|
|
12977
|
-
}
|
|
12984
|
+
});
|
|
12978
12985
|
|
|
12979
12986
|
// components/Input.tsx
|
|
12980
|
-
import { forwardRef as
|
|
12987
|
+
import { forwardRef as forwardRef19 } from "react";
|
|
12981
12988
|
import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
12982
12989
|
var inputVariants = cva(
|
|
12983
12990
|
"w-full rounded-lg px-3 py-2 text-sm outline-none transition-shadow",
|
|
@@ -12994,7 +13001,7 @@ var inputVariants = cva(
|
|
|
12994
13001
|
}
|
|
12995
13002
|
}
|
|
12996
13003
|
);
|
|
12997
|
-
var Input =
|
|
13004
|
+
var Input = forwardRef19(function Input2({
|
|
12998
13005
|
label,
|
|
12999
13006
|
error,
|
|
13000
13007
|
helperText,
|
|
@@ -13002,6 +13009,7 @@ var Input = forwardRef9(function Input2({
|
|
|
13002
13009
|
suffix,
|
|
13003
13010
|
size = "md",
|
|
13004
13011
|
className,
|
|
13012
|
+
style,
|
|
13005
13013
|
id: idProp,
|
|
13006
13014
|
disabled,
|
|
13007
13015
|
theme: themeProp,
|
|
@@ -13030,13 +13038,12 @@ var Input = forwardRef9(function Input2({
|
|
|
13030
13038
|
themeClass,
|
|
13031
13039
|
error && "border-red-500 focus:ring-red-500 focus:border-red-500",
|
|
13032
13040
|
hasAddon && "rounded-none first:rounded-l-lg last:rounded-r-lg",
|
|
13033
|
-
!hasAddon && "rounded-lg"
|
|
13034
|
-
className
|
|
13041
|
+
!hasAddon && "rounded-lg"
|
|
13035
13042
|
),
|
|
13036
13043
|
...props
|
|
13037
13044
|
}
|
|
13038
13045
|
);
|
|
13039
|
-
return /* @__PURE__ */ jsxs17("div", { className: "w-full", children: [
|
|
13046
|
+
return /* @__PURE__ */ jsxs17("div", { className: cn("w-full", className), style, children: [
|
|
13040
13047
|
label && /* @__PURE__ */ jsx20(
|
|
13041
13048
|
"label",
|
|
13042
13049
|
{
|
|
@@ -13125,7 +13132,7 @@ function useFocusTrap(active, options) {
|
|
|
13125
13132
|
}
|
|
13126
13133
|
|
|
13127
13134
|
// components/Modal.tsx
|
|
13128
|
-
import { useCallback as useCallback10, useEffect as useEffect11 } from "react";
|
|
13135
|
+
import { forwardRef as forwardRef20, useCallback as useCallback10, useEffect as useEffect11 } from "react";
|
|
13129
13136
|
import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
13130
13137
|
var modalVariants = cva(
|
|
13131
13138
|
"relative z-10 max-h-[90vh] w-full max-w-[calc(100vw-2rem)] overflow-auto rounded-xl p-4 sm:p-6",
|
|
@@ -13142,7 +13149,7 @@ var modalVariants = cva(
|
|
|
13142
13149
|
}
|
|
13143
13150
|
}
|
|
13144
13151
|
);
|
|
13145
|
-
|
|
13152
|
+
var Modal = forwardRef20(function Modal2({
|
|
13146
13153
|
open,
|
|
13147
13154
|
onClose,
|
|
13148
13155
|
title,
|
|
@@ -13151,11 +13158,12 @@ function Modal({
|
|
|
13151
13158
|
style,
|
|
13152
13159
|
children,
|
|
13153
13160
|
theme: themeProp
|
|
13154
|
-
}) {
|
|
13161
|
+
}, ref) {
|
|
13155
13162
|
const { theme: contextTheme } = useTheme();
|
|
13156
13163
|
const theme = themeProp ?? contextTheme;
|
|
13157
13164
|
const themeClass = getThemeClass(theme, "modal", "default");
|
|
13158
13165
|
const focusTrapRef = useFocusTrap(open, { returnFocus: true });
|
|
13166
|
+
const mergedRef = mergeRefs(ref, focusTrapRef);
|
|
13159
13167
|
const handleEscape = useCallback10(
|
|
13160
13168
|
(e) => {
|
|
13161
13169
|
if (e.key === "Escape") onClose();
|
|
@@ -13192,7 +13200,7 @@ function Modal({
|
|
|
13192
13200
|
/* @__PURE__ */ jsxs18(
|
|
13193
13201
|
"div",
|
|
13194
13202
|
{
|
|
13195
|
-
ref:
|
|
13203
|
+
ref: mergedRef,
|
|
13196
13204
|
className: cn(modalVariants({ size }), themeClass, className),
|
|
13197
13205
|
style,
|
|
13198
13206
|
children: [
|
|
@@ -13225,21 +13233,15 @@ function Modal({
|
|
|
13225
13233
|
]
|
|
13226
13234
|
}
|
|
13227
13235
|
);
|
|
13228
|
-
}
|
|
13236
|
+
});
|
|
13229
13237
|
|
|
13230
13238
|
// components/Navbar.tsx
|
|
13231
|
-
import { useCallback as useCallback11, useRef as useRef7, useState as useState8 } from "react";
|
|
13239
|
+
import { forwardRef as forwardRef21, useCallback as useCallback11, useRef as useRef7, useState as useState8 } from "react";
|
|
13232
13240
|
import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
13233
|
-
|
|
13234
|
-
children,
|
|
13235
|
-
logo,
|
|
13236
|
-
items,
|
|
13237
|
-
right,
|
|
13238
|
-
className,
|
|
13239
|
-
style
|
|
13240
|
-
}) {
|
|
13241
|
+
var Navbar = forwardRef21(function Navbar2({ children, logo, items, right, className, style }, ref) {
|
|
13241
13242
|
const [mobileOpen, setMobileOpen] = useState8(false);
|
|
13242
13243
|
const navRef = useRef7(null);
|
|
13244
|
+
const mergedNavRef = mergeRefs(ref, navRef);
|
|
13243
13245
|
const { theme } = useTheme();
|
|
13244
13246
|
const themeClass = getThemeClass(theme, "navbar", "default");
|
|
13245
13247
|
const mobilePanelBgOverride = theme === "glass" ? "bg-white/95 backdrop-blur-xl" : theme === "clay" ? "bg-white/95" : null;
|
|
@@ -13253,7 +13255,7 @@ function Navbar({
|
|
|
13253
13255
|
return /* @__PURE__ */ jsxs19(
|
|
13254
13256
|
"nav",
|
|
13255
13257
|
{
|
|
13256
|
-
ref:
|
|
13258
|
+
ref: mergedNavRef,
|
|
13257
13259
|
className: cn(
|
|
13258
13260
|
"relative sticky top-0 z-50 flex h-14 w-full flex-col px-3 sm:px-4",
|
|
13259
13261
|
themeClass,
|
|
@@ -13319,6 +13321,7 @@ function Navbar({
|
|
|
13319
13321
|
return /* @__PURE__ */ jsx22(
|
|
13320
13322
|
"nav",
|
|
13321
13323
|
{
|
|
13324
|
+
ref: mergedNavRef,
|
|
13322
13325
|
className: cn(
|
|
13323
13326
|
"sticky top-0 z-50 flex h-14 w-full flex-wrap items-center gap-2 px-3 sm:px-4",
|
|
13324
13327
|
themeClass,
|
|
@@ -13328,21 +13331,18 @@ function Navbar({
|
|
|
13328
13331
|
children
|
|
13329
13332
|
}
|
|
13330
13333
|
);
|
|
13331
|
-
}
|
|
13334
|
+
});
|
|
13332
13335
|
|
|
13333
13336
|
// components/PricingCard.tsx
|
|
13337
|
+
import { forwardRef as forwardRef22 } from "react";
|
|
13334
13338
|
import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
13335
|
-
|
|
13336
|
-
tier,
|
|
13337
|
-
onSelect,
|
|
13338
|
-
className,
|
|
13339
|
-
style
|
|
13340
|
-
}) {
|
|
13339
|
+
var PricingCard = forwardRef22(function PricingCard2({ tier, onSelect, className, style }, ref) {
|
|
13341
13340
|
const { theme } = useTheme();
|
|
13342
13341
|
const themeClass = getThemeClass(theme, "pricingCard", "default");
|
|
13343
13342
|
return /* @__PURE__ */ jsxs20(
|
|
13344
13343
|
"div",
|
|
13345
13344
|
{
|
|
13345
|
+
ref,
|
|
13346
13346
|
className: cn(
|
|
13347
13347
|
"flex flex-col rounded-xl p-4 sm:p-6",
|
|
13348
13348
|
themeClass,
|
|
@@ -13370,36 +13370,47 @@ function PricingCard({
|
|
|
13370
13370
|
]
|
|
13371
13371
|
}
|
|
13372
13372
|
);
|
|
13373
|
-
}
|
|
13373
|
+
});
|
|
13374
13374
|
|
|
13375
13375
|
// components/ProgressBar.tsx
|
|
13376
|
+
import { forwardRef as forwardRef23 } from "react";
|
|
13376
13377
|
import { jsx as jsx24 } from "react/jsx-runtime";
|
|
13377
|
-
|
|
13378
|
+
var ProgressBar = forwardRef23(function ProgressBar2({
|
|
13378
13379
|
value,
|
|
13379
13380
|
max = 100,
|
|
13380
13381
|
segmented = false,
|
|
13381
13382
|
className,
|
|
13382
13383
|
style,
|
|
13384
|
+
"aria-label": ariaLabel,
|
|
13383
13385
|
trackColor,
|
|
13384
13386
|
activeColor
|
|
13385
|
-
}) {
|
|
13387
|
+
}, ref) {
|
|
13386
13388
|
const { theme } = useTheme();
|
|
13387
13389
|
const themeClass = getThemeClass(theme, "progress", "default");
|
|
13388
13390
|
const pct = Math.min(100, Math.max(0, value / max * 100));
|
|
13389
13391
|
const trackStyle = trackColor ? { backgroundColor: trackColor } : void 0;
|
|
13390
13392
|
const fillStyle = activeColor ? { width: `${pct}%`, backgroundColor: activeColor } : { width: `${pct}%` };
|
|
13393
|
+
const progressRole = {
|
|
13394
|
+
role: "progressbar",
|
|
13395
|
+
"aria-valuenow": value,
|
|
13396
|
+
"aria-valuemin": 0,
|
|
13397
|
+
"aria-valuemax": max,
|
|
13398
|
+
...ariaLabel && { "aria-label": ariaLabel }
|
|
13399
|
+
};
|
|
13391
13400
|
if (segmented) {
|
|
13392
13401
|
const segments = 10;
|
|
13393
13402
|
const filled = Math.round(pct / 100 * segments);
|
|
13394
13403
|
return /* @__PURE__ */ jsx24(
|
|
13395
13404
|
"div",
|
|
13396
13405
|
{
|
|
13406
|
+
ref,
|
|
13397
13407
|
className: cn(
|
|
13398
13408
|
"flex h-3 w-full gap-0.5 overflow-hidden rounded-full",
|
|
13399
13409
|
themeClass,
|
|
13400
13410
|
className
|
|
13401
13411
|
),
|
|
13402
13412
|
style: { ...style, ...trackStyle },
|
|
13413
|
+
...progressRole,
|
|
13403
13414
|
children: Array.from({ length: segments }).map((_, i) => /* @__PURE__ */ jsx24(
|
|
13404
13415
|
"div",
|
|
13405
13416
|
{
|
|
@@ -13417,12 +13428,14 @@ function ProgressBar({
|
|
|
13417
13428
|
return /* @__PURE__ */ jsx24(
|
|
13418
13429
|
"div",
|
|
13419
13430
|
{
|
|
13431
|
+
ref,
|
|
13420
13432
|
className: cn(
|
|
13421
13433
|
"relative h-3 w-full overflow-hidden rounded-full",
|
|
13422
13434
|
themeClass,
|
|
13423
13435
|
className
|
|
13424
13436
|
),
|
|
13425
13437
|
style: { ...style, ...trackStyle },
|
|
13438
|
+
...progressRole,
|
|
13426
13439
|
children: /* @__PURE__ */ jsx24(
|
|
13427
13440
|
"span",
|
|
13428
13441
|
{
|
|
@@ -13432,33 +13445,25 @@ function ProgressBar({
|
|
|
13432
13445
|
)
|
|
13433
13446
|
}
|
|
13434
13447
|
);
|
|
13435
|
-
}
|
|
13448
|
+
});
|
|
13436
13449
|
|
|
13437
13450
|
// components/SectionHeader.tsx
|
|
13451
|
+
import { forwardRef as forwardRef24 } from "react";
|
|
13438
13452
|
import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
13439
|
-
|
|
13440
|
-
title,
|
|
13441
|
-
subtitle,
|
|
13442
|
-
className,
|
|
13443
|
-
style
|
|
13444
|
-
}) {
|
|
13453
|
+
var SectionHeader = forwardRef24(function SectionHeader2({ title, subtitle, className, style }, ref) {
|
|
13445
13454
|
const { theme } = useTheme();
|
|
13446
13455
|
const themeClass = getThemeClass(theme, "sectionHeader", "default");
|
|
13447
|
-
return /* @__PURE__ */ jsxs21("header", { className: cn("pb-4", themeClass, className), style, children: [
|
|
13456
|
+
return /* @__PURE__ */ jsxs21("header", { ref, className: cn("pb-4", themeClass, className), style, children: [
|
|
13448
13457
|
/* @__PURE__ */ jsx25("h2", { className: "text-lg font-semibold sm:text-xl", children: title }),
|
|
13449
13458
|
subtitle ? /* @__PURE__ */ jsx25("p", { className: "mt-1 text-sm opacity-80", children: subtitle }) : null,
|
|
13450
13459
|
/* @__PURE__ */ jsx25("div", { className: "mt-3 border-b border-inherit" })
|
|
13451
13460
|
] });
|
|
13452
|
-
}
|
|
13461
|
+
});
|
|
13453
13462
|
|
|
13454
13463
|
// components/Sidebar.tsx
|
|
13455
|
-
import { useCallback as useCallback12, useState as useState9 } from "react";
|
|
13464
|
+
import { forwardRef as forwardRef25, useCallback as useCallback12, useState as useState9 } from "react";
|
|
13456
13465
|
import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
13457
|
-
|
|
13458
|
-
children,
|
|
13459
|
-
className,
|
|
13460
|
-
style
|
|
13461
|
-
}) {
|
|
13466
|
+
var Sidebar = forwardRef25(function Sidebar2({ children, className, style }, ref) {
|
|
13462
13467
|
const [collapsed, setCollapsed] = useState9(false);
|
|
13463
13468
|
const { theme } = useTheme();
|
|
13464
13469
|
const themeClass = getThemeClass(theme, "sidebar", "default");
|
|
@@ -13466,6 +13471,7 @@ function Sidebar({
|
|
|
13466
13471
|
return /* @__PURE__ */ jsxs22(
|
|
13467
13472
|
"aside",
|
|
13468
13473
|
{
|
|
13474
|
+
ref,
|
|
13469
13475
|
className: cn(
|
|
13470
13476
|
"flex h-full flex-col transition-[width] duration-200",
|
|
13471
13477
|
collapsed ? "w-12 sm:w-14" : "w-48 max-w-[85vw] sm:w-56 sm:max-w-none",
|
|
@@ -13488,10 +13494,10 @@ function Sidebar({
|
|
|
13488
13494
|
]
|
|
13489
13495
|
}
|
|
13490
13496
|
);
|
|
13491
|
-
}
|
|
13497
|
+
});
|
|
13492
13498
|
|
|
13493
13499
|
// components/Skeleton.tsx
|
|
13494
|
-
import { forwardRef as
|
|
13500
|
+
import { forwardRef as forwardRef26 } from "react";
|
|
13495
13501
|
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
13496
13502
|
var skeletonVariants = cva("", {
|
|
13497
13503
|
variants: {
|
|
@@ -13505,7 +13511,7 @@ var skeletonVariants = cva("", {
|
|
|
13505
13511
|
variant: "rectangle"
|
|
13506
13512
|
}
|
|
13507
13513
|
});
|
|
13508
|
-
var Skeleton =
|
|
13514
|
+
var Skeleton = forwardRef26(
|
|
13509
13515
|
function Skeleton2({ variant = "rectangle", className, theme: themeProp, style, ...props }, ref) {
|
|
13510
13516
|
const { theme: contextTheme } = useTheme();
|
|
13511
13517
|
const theme = themeProp ?? contextTheme;
|
|
@@ -13532,7 +13538,7 @@ var Skeleton = forwardRef10(
|
|
|
13532
13538
|
|
|
13533
13539
|
// components/Slider.tsx
|
|
13534
13540
|
import {
|
|
13535
|
-
forwardRef as
|
|
13541
|
+
forwardRef as forwardRef27,
|
|
13536
13542
|
useCallback as useCallback13,
|
|
13537
13543
|
useState as useState10
|
|
13538
13544
|
} from "react";
|
|
@@ -13556,7 +13562,7 @@ var trackVariants = cva(
|
|
|
13556
13562
|
"relative h-3 w-full rounded-full overflow-visible",
|
|
13557
13563
|
{ variants: {}, defaultVariants: {} }
|
|
13558
13564
|
);
|
|
13559
|
-
var Slider =
|
|
13565
|
+
var Slider = forwardRef27(function Slider2({
|
|
13560
13566
|
min = 0,
|
|
13561
13567
|
max = 100,
|
|
13562
13568
|
step = 1,
|
|
@@ -13565,6 +13571,7 @@ var Slider = forwardRef11(function Slider2({
|
|
|
13565
13571
|
onValueChange,
|
|
13566
13572
|
size = "md",
|
|
13567
13573
|
className,
|
|
13574
|
+
style,
|
|
13568
13575
|
theme: themeProp,
|
|
13569
13576
|
...props
|
|
13570
13577
|
}, ref) {
|
|
@@ -13583,7 +13590,7 @@ var Slider = forwardRef11(function Slider2({
|
|
|
13583
13590
|
},
|
|
13584
13591
|
[isControlled, onValueChange]
|
|
13585
13592
|
);
|
|
13586
|
-
return /* @__PURE__ */ jsxs23("div", { className: cn(sliderVariants({ size }), className), children: [
|
|
13593
|
+
return /* @__PURE__ */ jsxs23("div", { className: cn(sliderVariants({ size }), className), style, children: [
|
|
13587
13594
|
/* @__PURE__ */ jsxs23("div", { className: cn(trackVariants(), themeClass), children: [
|
|
13588
13595
|
/* @__PURE__ */ jsx28(
|
|
13589
13596
|
"span",
|
|
@@ -13621,20 +13628,15 @@ var Slider = forwardRef11(function Slider2({
|
|
|
13621
13628
|
});
|
|
13622
13629
|
|
|
13623
13630
|
// components/StatsCard.tsx
|
|
13631
|
+
import { forwardRef as forwardRef28 } from "react";
|
|
13624
13632
|
import { jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
13625
|
-
|
|
13626
|
-
label,
|
|
13627
|
-
value,
|
|
13628
|
-
trend,
|
|
13629
|
-
className,
|
|
13630
|
-
style
|
|
13631
|
-
}) {
|
|
13633
|
+
var StatsCard = forwardRef28(function StatsCard2({ label, value, trend, className, style }, ref) {
|
|
13632
13634
|
const { theme } = useTheme();
|
|
13633
13635
|
const themeClass = getThemeClass(theme, "statsCard", "default");
|
|
13634
13636
|
const isDark = theme === "night" || theme === "cyberpunk";
|
|
13635
13637
|
const trendUpClass = trend?.direction === "up" ? isDark ? "text-emerald-400" : "text-emerald-600" : null;
|
|
13636
13638
|
const trendDownClass = trend?.direction === "down" ? isDark ? "text-rose-400" : "text-rose-600" : null;
|
|
13637
|
-
return /* @__PURE__ */ jsxs24("div", { className: cn("rounded-xl p-6", themeClass, className), style, children: [
|
|
13639
|
+
return /* @__PURE__ */ jsxs24("div", { ref, className: cn("rounded-xl p-6", themeClass, className), style, children: [
|
|
13638
13640
|
/* @__PURE__ */ jsx29("p", { className: "text-sm font-medium opacity-80", children: label }),
|
|
13639
13641
|
/* @__PURE__ */ jsx29("p", { className: "mt-2 text-2xl font-bold tracking-tight", children: value }),
|
|
13640
13642
|
trend ? /* @__PURE__ */ jsxs24(
|
|
@@ -13651,10 +13653,11 @@ function StatsCard({
|
|
|
13651
13653
|
}
|
|
13652
13654
|
) : null
|
|
13653
13655
|
] });
|
|
13654
|
-
}
|
|
13656
|
+
});
|
|
13655
13657
|
|
|
13656
13658
|
// components/Tabs.tsx
|
|
13657
13659
|
import {
|
|
13660
|
+
forwardRef as forwardRef29,
|
|
13658
13661
|
useCallback as useCallback14,
|
|
13659
13662
|
useEffect as useEffect12,
|
|
13660
13663
|
useRef as useRef8,
|
|
@@ -13682,7 +13685,7 @@ var tabTriggerVariants = cva(
|
|
|
13682
13685
|
}
|
|
13683
13686
|
}
|
|
13684
13687
|
);
|
|
13685
|
-
|
|
13688
|
+
var Tabs = forwardRef29(function Tabs2({
|
|
13686
13689
|
items,
|
|
13687
13690
|
defaultValue,
|
|
13688
13691
|
value: controlledValue,
|
|
@@ -13690,7 +13693,7 @@ function Tabs({
|
|
|
13690
13693
|
className,
|
|
13691
13694
|
style,
|
|
13692
13695
|
theme: themeProp
|
|
13693
|
-
}) {
|
|
13696
|
+
}, ref) {
|
|
13694
13697
|
const [uncontrolled, setUncontrolled] = useState11(
|
|
13695
13698
|
() => defaultValue ?? items[0]?.value ?? ""
|
|
13696
13699
|
);
|
|
@@ -13732,7 +13735,7 @@ function Tabs({
|
|
|
13732
13735
|
);
|
|
13733
13736
|
const activeItem = items[safeIndex];
|
|
13734
13737
|
const content = activeItem?.content ?? null;
|
|
13735
|
-
return /* @__PURE__ */ jsxs25("div", { className: cn("w-full min-w-0", className), style, children: [
|
|
13738
|
+
return /* @__PURE__ */ jsxs25("div", { ref, className: cn("w-full min-w-0", className), style, children: [
|
|
13736
13739
|
/* @__PURE__ */ jsx30(
|
|
13737
13740
|
"div",
|
|
13738
13741
|
{
|
|
@@ -13776,22 +13779,19 @@ function Tabs({
|
|
|
13776
13779
|
}
|
|
13777
13780
|
)
|
|
13778
13781
|
] });
|
|
13779
|
-
}
|
|
13782
|
+
});
|
|
13780
13783
|
|
|
13781
13784
|
// components/Terminal.tsx
|
|
13785
|
+
import { forwardRef as forwardRef30 } from "react";
|
|
13782
13786
|
import { jsx as jsx31, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
13783
|
-
|
|
13784
|
-
title = "terminal",
|
|
13785
|
-
children,
|
|
13786
|
-
className,
|
|
13787
|
-
style
|
|
13788
|
-
}) {
|
|
13787
|
+
var Terminal = forwardRef30(function Terminal2({ title = "terminal", children, className, style }, ref) {
|
|
13789
13788
|
const { theme } = useTheme();
|
|
13790
13789
|
const themeClass = getThemeClass(theme, "terminal", "default");
|
|
13791
13790
|
const isCyberpunk = theme === "cyberpunk";
|
|
13792
13791
|
return /* @__PURE__ */ jsxs26(
|
|
13793
13792
|
"div",
|
|
13794
13793
|
{
|
|
13794
|
+
ref,
|
|
13795
13795
|
className: cn("overflow-hidden rounded-xl font-mono text-sm", themeClass, className),
|
|
13796
13796
|
style,
|
|
13797
13797
|
children: [
|
|
@@ -13817,22 +13817,21 @@ function Terminal({
|
|
|
13817
13817
|
]
|
|
13818
13818
|
}
|
|
13819
13819
|
);
|
|
13820
|
-
}
|
|
13820
|
+
});
|
|
13821
13821
|
|
|
13822
13822
|
// components/Timeline.tsx
|
|
13823
|
+
import { forwardRef as forwardRef31 } from "react";
|
|
13823
13824
|
import { jsx as jsx32, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
13824
|
-
|
|
13825
|
-
items,
|
|
13826
|
-
className,
|
|
13827
|
-
theme: themeProp
|
|
13828
|
-
}) {
|
|
13825
|
+
var Timeline = forwardRef31(function Timeline2({ items, className, style, theme: themeProp }, ref) {
|
|
13829
13826
|
const { theme: contextTheme } = useTheme();
|
|
13830
13827
|
const theme = themeProp ?? contextTheme;
|
|
13831
13828
|
const themeClass = getThemeClass(theme, "timeline", "default");
|
|
13832
13829
|
return /* @__PURE__ */ jsx32(
|
|
13833
13830
|
"div",
|
|
13834
13831
|
{
|
|
13832
|
+
ref,
|
|
13835
13833
|
className: cn("relative pl-4", themeClass, className),
|
|
13834
|
+
style,
|
|
13836
13835
|
role: "list",
|
|
13837
13836
|
"aria-label": "Timeline",
|
|
13838
13837
|
children: items.map((item, i) => /* @__PURE__ */ jsxs27(
|
|
@@ -13859,21 +13858,25 @@ function Timeline({
|
|
|
13859
13858
|
))
|
|
13860
13859
|
}
|
|
13861
13860
|
);
|
|
13862
|
-
}
|
|
13861
|
+
});
|
|
13863
13862
|
|
|
13864
13863
|
// components/Toast.tsx
|
|
13864
|
+
import { forwardRef as forwardRef32, useEffect as useEffect13 } from "react";
|
|
13865
13865
|
import { jsx as jsx33, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
13866
|
-
|
|
13867
|
-
message,
|
|
13868
|
-
onDismiss,
|
|
13869
|
-
className,
|
|
13870
|
-
style
|
|
13871
|
-
}) {
|
|
13866
|
+
var Toast = forwardRef32(function Toast2({ message, onDismiss, className, style }, ref) {
|
|
13872
13867
|
const { theme } = useTheme();
|
|
13873
13868
|
const themeClass = getThemeClass(theme, "toast", "default");
|
|
13869
|
+
useEffect13(() => {
|
|
13870
|
+
const handler = (e) => {
|
|
13871
|
+
if (e.key === "Escape") onDismiss();
|
|
13872
|
+
};
|
|
13873
|
+
document.addEventListener("keydown", handler);
|
|
13874
|
+
return () => document.removeEventListener("keydown", handler);
|
|
13875
|
+
}, [onDismiss]);
|
|
13874
13876
|
return /* @__PURE__ */ jsxs28(
|
|
13875
13877
|
"div",
|
|
13876
13878
|
{
|
|
13879
|
+
ref,
|
|
13877
13880
|
role: "alert",
|
|
13878
13881
|
className: cn(
|
|
13879
13882
|
"flex items-center justify-between gap-4 rounded-lg px-4 py-3 shadow-lg",
|
|
@@ -13896,11 +13899,11 @@ function Toast({
|
|
|
13896
13899
|
]
|
|
13897
13900
|
}
|
|
13898
13901
|
);
|
|
13899
|
-
}
|
|
13902
|
+
});
|
|
13900
13903
|
|
|
13901
13904
|
// components/Toggle.tsx
|
|
13902
13905
|
import {
|
|
13903
|
-
forwardRef as
|
|
13906
|
+
forwardRef as forwardRef33,
|
|
13904
13907
|
useCallback as useCallback15,
|
|
13905
13908
|
useId as useId2,
|
|
13906
13909
|
useState as useState12
|
|
@@ -13913,11 +13916,12 @@ var toggleVariants = cva(
|
|
|
13913
13916
|
defaultVariants: {}
|
|
13914
13917
|
}
|
|
13915
13918
|
);
|
|
13916
|
-
var Toggle =
|
|
13919
|
+
var Toggle = forwardRef33(function Toggle2({
|
|
13917
13920
|
checked: controlledChecked,
|
|
13918
13921
|
defaultChecked = false,
|
|
13919
13922
|
onCheckedChange,
|
|
13920
13923
|
className,
|
|
13924
|
+
style,
|
|
13921
13925
|
"aria-label": ariaLabel = "Toggle",
|
|
13922
13926
|
theme: themeProp,
|
|
13923
13927
|
disabled,
|
|
@@ -13945,6 +13949,7 @@ var Toggle = forwardRef12(function Toggle2({
|
|
|
13945
13949
|
{
|
|
13946
13950
|
htmlFor: id3,
|
|
13947
13951
|
className: cn(toggleVariants(), themeClass, className),
|
|
13952
|
+
style,
|
|
13948
13953
|
"data-state": checked ? "on" : "off",
|
|
13949
13954
|
children: [
|
|
13950
13955
|
/* @__PURE__ */ jsx34(
|
|
@@ -13978,7 +13983,7 @@ var Toggle = forwardRef12(function Toggle2({
|
|
|
13978
13983
|
});
|
|
13979
13984
|
|
|
13980
13985
|
// components/Tooltip.tsx
|
|
13981
|
-
import { useCallback as useCallback16, useState as useState13 } from "react";
|
|
13986
|
+
import { forwardRef as forwardRef34, useCallback as useCallback16, useId as useId3, useState as useState13 } from "react";
|
|
13982
13987
|
import { jsx as jsx35, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
13983
13988
|
var placementClasses = {
|
|
13984
13989
|
top: "bottom-full left-1/2 -translate-x-1/2 mb-2",
|
|
@@ -13990,15 +13995,9 @@ var tooltipVariants = cva(
|
|
|
13990
13995
|
"absolute z-50 whitespace-nowrap rounded-lg px-2 py-1 text-xs shadow-lg",
|
|
13991
13996
|
{ variants: {}, defaultVariants: {} }
|
|
13992
13997
|
);
|
|
13993
|
-
|
|
13994
|
-
content,
|
|
13995
|
-
children,
|
|
13996
|
-
placement = "top",
|
|
13997
|
-
className,
|
|
13998
|
-
style,
|
|
13999
|
-
theme: themeProp
|
|
14000
|
-
}) {
|
|
13998
|
+
var Tooltip = forwardRef34(function Tooltip2({ content, children, placement = "top", className, style, theme: themeProp }, ref) {
|
|
14001
13999
|
const [visible, setVisible] = useState13(false);
|
|
14000
|
+
const tooltipId = useId3();
|
|
14002
14001
|
const { theme: contextTheme } = useTheme();
|
|
14003
14002
|
const theme = themeProp ?? contextTheme;
|
|
14004
14003
|
const themeClass = getThemeClass(theme, "tooltip", "default");
|
|
@@ -14007,17 +14006,20 @@ function Tooltip({
|
|
|
14007
14006
|
return /* @__PURE__ */ jsxs30(
|
|
14008
14007
|
"span",
|
|
14009
14008
|
{
|
|
14009
|
+
ref,
|
|
14010
14010
|
className: cn("relative inline-block", className),
|
|
14011
14011
|
style,
|
|
14012
14012
|
onMouseEnter: show,
|
|
14013
14013
|
onMouseLeave: hide,
|
|
14014
14014
|
onFocus: show,
|
|
14015
14015
|
onBlur: hide,
|
|
14016
|
+
"aria-describedby": visible ? tooltipId : void 0,
|
|
14016
14017
|
children: [
|
|
14017
14018
|
children,
|
|
14018
14019
|
visible ? /* @__PURE__ */ jsx35(
|
|
14019
14020
|
"span",
|
|
14020
14021
|
{
|
|
14022
|
+
id: tooltipId,
|
|
14021
14023
|
role: "tooltip",
|
|
14022
14024
|
className: cn(
|
|
14023
14025
|
tooltipVariants(),
|
|
@@ -14030,7 +14032,7 @@ function Tooltip({
|
|
|
14030
14032
|
]
|
|
14031
14033
|
}
|
|
14032
14034
|
);
|
|
14033
|
-
}
|
|
14035
|
+
});
|
|
14034
14036
|
|
|
14035
14037
|
// lib/theme-recommendations.ts
|
|
14036
14038
|
var THEME_BACKGROUNDS = {
|
|
@@ -14161,6 +14163,7 @@ export {
|
|
|
14161
14163
|
cn,
|
|
14162
14164
|
getNextListIndex,
|
|
14163
14165
|
getThemeClass,
|
|
14166
|
+
mergeRefs,
|
|
14164
14167
|
useClickOutside,
|
|
14165
14168
|
useFocusTrap,
|
|
14166
14169
|
useKeyboardNavigation,
|