@esprydi/ui 0.0.0-stage → 0.1.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 +81 -2
- package/dist/chunk-3GSLHHK2.mjs +85 -0
- package/dist/chunk-3GSLHHK2.mjs.map +1 -0
- package/dist/index.d.mts +126 -0
- package/dist/index.d.ts +126 -0
- package/dist/index.js +859 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +694 -0
- package/dist/index.mjs.map +1 -0
- package/dist/styles.css +1 -0
- package/dist/tailwind/preset.d.mts +93 -0
- package/dist/tailwind/preset.d.ts +93 -0
- package/dist/tailwind/preset.js +109 -0
- package/dist/tailwind/preset.js.map +1 -0
- package/dist/tailwind/preset.mjs +9 -0
- package/dist/tailwind/preset.mjs.map +1 -0
- package/package.json +55 -4
package/dist/index.js
ADDED
|
@@ -0,0 +1,859 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var src_exports = {};
|
|
32
|
+
__export(src_exports, {
|
|
33
|
+
AppShell: () => AppShell,
|
|
34
|
+
Avatar: () => Avatar,
|
|
35
|
+
Badge: () => Badge,
|
|
36
|
+
Button: () => Button,
|
|
37
|
+
Card: () => Card,
|
|
38
|
+
CardContent: () => CardContent,
|
|
39
|
+
CardDescription: () => CardDescription,
|
|
40
|
+
CardFooter: () => CardFooter,
|
|
41
|
+
CardHeader: () => CardHeader,
|
|
42
|
+
CardTitle: () => CardTitle,
|
|
43
|
+
Dialog: () => Dialog,
|
|
44
|
+
DialogClose: () => DialogClose,
|
|
45
|
+
DialogContent: () => DialogContent,
|
|
46
|
+
DialogDescription: () => DialogDescription,
|
|
47
|
+
DialogFooter: () => DialogFooter,
|
|
48
|
+
DialogHeader: () => DialogHeader,
|
|
49
|
+
DialogOverlay: () => DialogOverlay,
|
|
50
|
+
DialogPortal: () => DialogPortal,
|
|
51
|
+
DialogTitle: () => DialogTitle,
|
|
52
|
+
DialogTrigger: () => DialogTrigger,
|
|
53
|
+
DropdownMenu: () => DropdownMenu,
|
|
54
|
+
DropdownMenuCheckboxItem: () => DropdownMenuCheckboxItem,
|
|
55
|
+
DropdownMenuContent: () => DropdownMenuContent,
|
|
56
|
+
DropdownMenuGroup: () => DropdownMenuGroup,
|
|
57
|
+
DropdownMenuItem: () => DropdownMenuItem,
|
|
58
|
+
DropdownMenuLabel: () => DropdownMenuLabel,
|
|
59
|
+
DropdownMenuPortal: () => DropdownMenuPortal,
|
|
60
|
+
DropdownMenuRadioGroup: () => DropdownMenuRadioGroup,
|
|
61
|
+
DropdownMenuRadioItem: () => DropdownMenuRadioItem,
|
|
62
|
+
DropdownMenuSeparator: () => DropdownMenuSeparator,
|
|
63
|
+
DropdownMenuSub: () => DropdownMenuSub,
|
|
64
|
+
DropdownMenuSubContent: () => DropdownMenuSubContent,
|
|
65
|
+
DropdownMenuSubTrigger: () => DropdownMenuSubTrigger,
|
|
66
|
+
DropdownMenuTrigger: () => DropdownMenuTrigger,
|
|
67
|
+
Input: () => Input,
|
|
68
|
+
PageHeader: () => PageHeader,
|
|
69
|
+
Skeleton: () => Skeleton,
|
|
70
|
+
Table: () => Table,
|
|
71
|
+
TableBody: () => TableBody,
|
|
72
|
+
TableCaption: () => TableCaption,
|
|
73
|
+
TableCell: () => TableCell,
|
|
74
|
+
TableFooter: () => TableFooter,
|
|
75
|
+
TableHead: () => TableHead,
|
|
76
|
+
TableHeader: () => TableHeader,
|
|
77
|
+
TableRow: () => TableRow,
|
|
78
|
+
Textarea: () => Textarea,
|
|
79
|
+
Tooltip: () => Tooltip,
|
|
80
|
+
TooltipContent: () => TooltipContent,
|
|
81
|
+
TooltipProvider: () => TooltipProvider,
|
|
82
|
+
TooltipTrigger: () => TooltipTrigger,
|
|
83
|
+
badgeVariants: () => badgeVariants,
|
|
84
|
+
buttonVariants: () => buttonVariants,
|
|
85
|
+
cn: () => cn,
|
|
86
|
+
esprydiPreset: () => esprydiPreset
|
|
87
|
+
});
|
|
88
|
+
module.exports = __toCommonJS(src_exports);
|
|
89
|
+
|
|
90
|
+
// src/lib/utils.ts
|
|
91
|
+
var import_clsx = require("clsx");
|
|
92
|
+
var import_tailwind_merge = require("tailwind-merge");
|
|
93
|
+
function cn(...inputs) {
|
|
94
|
+
return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// src/components/ui/button.tsx
|
|
98
|
+
var React = __toESM(require("react"));
|
|
99
|
+
var import_react_slot = require("@radix-ui/react-slot");
|
|
100
|
+
var import_class_variance_authority = require("class-variance-authority");
|
|
101
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
102
|
+
var buttonVariants = (0, import_class_variance_authority.cva)(
|
|
103
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-lg text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 active:scale-[0.98]",
|
|
104
|
+
{
|
|
105
|
+
variants: {
|
|
106
|
+
variant: {
|
|
107
|
+
default: "bg-primary text-primary-foreground shadow hover:bg-primary/90",
|
|
108
|
+
destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
|
|
109
|
+
outline: "border border-border bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
|
|
110
|
+
secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
|
|
111
|
+
ghost: "hover:bg-accent hover:text-accent-foreground",
|
|
112
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
113
|
+
/* Esprydi Signature Ocean Variants (Tanpa Warna Neon) */
|
|
114
|
+
glow: "bg-[#086288] text-[#FFFEFC] font-semibold shadow-sm hover:bg-[#064e6d] active:scale-[0.98]",
|
|
115
|
+
coastal: "bg-[#4D8DBA] text-[#FFFEFC] font-semibold shadow-sm hover:bg-[#3d779f] active:scale-[0.98]",
|
|
116
|
+
ice: "bg-[#97D7FF] text-[#086288] font-semibold border border-[#97D7FF] hover:bg-[#86cdfc] active:scale-[0.98]",
|
|
117
|
+
glass: "bg-white/80 backdrop-blur-md border border-[#086288]/20 text-[#086288] hover:bg-[#086288]/10 shadow-sm",
|
|
118
|
+
subtle: "bg-[#4D8DBA]/10 border border-[#4D8DBA]/20 text-[#086288] hover:bg-[#4D8DBA]/20"
|
|
119
|
+
},
|
|
120
|
+
size: {
|
|
121
|
+
default: "h-9 px-4 py-2",
|
|
122
|
+
sm: "h-8 rounded-md px-3 text-xs",
|
|
123
|
+
lg: "h-11 rounded-lg px-8 text-base",
|
|
124
|
+
icon: "h-9 w-9"
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
defaultVariants: {
|
|
128
|
+
variant: "default",
|
|
129
|
+
size: "default"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
);
|
|
133
|
+
var Button = React.forwardRef(
|
|
134
|
+
({ className, variant, size, asChild = false, ...props }, ref) => {
|
|
135
|
+
const Comp = asChild ? import_react_slot.Slot : "button";
|
|
136
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
137
|
+
Comp,
|
|
138
|
+
{
|
|
139
|
+
className: cn(buttonVariants({ variant, size, className })),
|
|
140
|
+
ref,
|
|
141
|
+
...props
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
);
|
|
146
|
+
Button.displayName = "Button";
|
|
147
|
+
|
|
148
|
+
// src/components/ui/card.tsx
|
|
149
|
+
var React2 = __toESM(require("react"));
|
|
150
|
+
var import_class_variance_authority2 = require("class-variance-authority");
|
|
151
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
152
|
+
var cardVariants = (0, import_class_variance_authority2.cva)(
|
|
153
|
+
"rounded-xl transition-all duration-300 text-card-foreground",
|
|
154
|
+
{
|
|
155
|
+
variants: {
|
|
156
|
+
variant: {
|
|
157
|
+
default: "border border-border bg-card shadow-sm",
|
|
158
|
+
glass: "bg-white/90 backdrop-blur-md border border-[#4D8DBA]/20 shadow-sm hover:border-[#086288]/40 hover:shadow-md",
|
|
159
|
+
elevated: "bg-white border border-[#086288]/20 shadow-md hover:shadow-lg",
|
|
160
|
+
glow: "border-t-4 border-t-[#086288] border-x border-b border-border bg-white shadow-sm hover:shadow-md",
|
|
161
|
+
coastal: "border-t-4 border-t-[#4D8DBA] border-x border-b border-border bg-white shadow-sm hover:shadow-md",
|
|
162
|
+
ice: "border-t-4 border-t-[#97D7FF] border-x border-b border-border bg-white shadow-sm hover:shadow-md"
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
defaultVariants: {
|
|
166
|
+
variant: "default"
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
);
|
|
170
|
+
var Card = React2.forwardRef(
|
|
171
|
+
({ className, variant, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
172
|
+
"div",
|
|
173
|
+
{
|
|
174
|
+
ref,
|
|
175
|
+
className: cn(cardVariants({ variant }), className),
|
|
176
|
+
...props
|
|
177
|
+
}
|
|
178
|
+
)
|
|
179
|
+
);
|
|
180
|
+
Card.displayName = "Card";
|
|
181
|
+
var CardHeader = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
182
|
+
"div",
|
|
183
|
+
{
|
|
184
|
+
ref,
|
|
185
|
+
className: cn("flex flex-col space-y-1.5 p-6", className),
|
|
186
|
+
...props
|
|
187
|
+
}
|
|
188
|
+
));
|
|
189
|
+
CardHeader.displayName = "CardHeader";
|
|
190
|
+
var CardTitle = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
191
|
+
"h3",
|
|
192
|
+
{
|
|
193
|
+
ref,
|
|
194
|
+
className: cn("font-semibold leading-none tracking-tight", className),
|
|
195
|
+
...props
|
|
196
|
+
}
|
|
197
|
+
));
|
|
198
|
+
CardTitle.displayName = "CardTitle";
|
|
199
|
+
var CardDescription = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
200
|
+
"p",
|
|
201
|
+
{
|
|
202
|
+
ref,
|
|
203
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
204
|
+
...props
|
|
205
|
+
}
|
|
206
|
+
));
|
|
207
|
+
CardDescription.displayName = "CardDescription";
|
|
208
|
+
var CardContent = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { ref, className: cn("p-6 pt-0", className), ...props }));
|
|
209
|
+
CardContent.displayName = "CardContent";
|
|
210
|
+
var CardFooter = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
211
|
+
"div",
|
|
212
|
+
{
|
|
213
|
+
ref,
|
|
214
|
+
className: cn("flex items-center p-6 pt-0", className),
|
|
215
|
+
...props
|
|
216
|
+
}
|
|
217
|
+
));
|
|
218
|
+
CardFooter.displayName = "CardFooter";
|
|
219
|
+
|
|
220
|
+
// src/components/ui/badge.tsx
|
|
221
|
+
var import_class_variance_authority3 = require("class-variance-authority");
|
|
222
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
223
|
+
var badgeVariants = (0, import_class_variance_authority3.cva)(
|
|
224
|
+
"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
|
|
225
|
+
{
|
|
226
|
+
variants: {
|
|
227
|
+
variant: {
|
|
228
|
+
default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
|
|
229
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
230
|
+
destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
|
|
231
|
+
outline: "text-foreground border-border",
|
|
232
|
+
/* Esprydi Signature Ocean Badges (Tanpa Warna Neon) */
|
|
233
|
+
ocean: "border-[#086288]/30 bg-[#086288]/10 text-[#086288] font-semibold",
|
|
234
|
+
coastal: "border-[#4D8DBA]/30 bg-[#4D8DBA]/10 text-[#086288] font-semibold",
|
|
235
|
+
ice: "border-[#97D7FF] bg-[#97D7FF]/30 text-[#086288] font-semibold",
|
|
236
|
+
subtle: "border-border/60 bg-surface-2 text-muted-foreground"
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
defaultVariants: {
|
|
240
|
+
variant: "default"
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
);
|
|
244
|
+
function Badge({ className, variant, dot = false, children, ...props }) {
|
|
245
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: cn(badgeVariants({ variant }), className), ...props, children: [
|
|
246
|
+
dot && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mr-1.5 h-1.5 w-1.5 rounded-full bg-current animate-pulse" }),
|
|
247
|
+
children
|
|
248
|
+
] });
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// src/components/ui/input.tsx
|
|
252
|
+
var React3 = __toESM(require("react"));
|
|
253
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
254
|
+
var Input = React3.forwardRef(
|
|
255
|
+
({ className, type, glow = true, ...props }, ref) => {
|
|
256
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
257
|
+
"input",
|
|
258
|
+
{
|
|
259
|
+
type,
|
|
260
|
+
className: cn(
|
|
261
|
+
"flex h-9 w-full rounded-lg border border-input bg-surface-1 px-3 py-1 text-sm shadow-sm transition-all duration-200 file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
|
|
262
|
+
glow && "focus-visible:border-primary/50 focus-visible:ring-primary/20",
|
|
263
|
+
className
|
|
264
|
+
),
|
|
265
|
+
ref,
|
|
266
|
+
...props
|
|
267
|
+
}
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
);
|
|
271
|
+
Input.displayName = "Input";
|
|
272
|
+
|
|
273
|
+
// src/components/ui/textarea.tsx
|
|
274
|
+
var React4 = __toESM(require("react"));
|
|
275
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
276
|
+
var Textarea = React4.forwardRef(
|
|
277
|
+
({ className, glow = true, ...props }, ref) => {
|
|
278
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
279
|
+
"textarea",
|
|
280
|
+
{
|
|
281
|
+
className: cn(
|
|
282
|
+
"flex min-h-[80px] w-full rounded-lg border border-input bg-surface-1 px-3 py-2 text-sm shadow-sm transition-all duration-200 placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
|
|
283
|
+
glow && "focus-visible:border-primary/50 focus-visible:ring-primary/20",
|
|
284
|
+
className
|
|
285
|
+
),
|
|
286
|
+
ref,
|
|
287
|
+
...props
|
|
288
|
+
}
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
);
|
|
292
|
+
Textarea.displayName = "Textarea";
|
|
293
|
+
|
|
294
|
+
// src/components/ui/dialog.tsx
|
|
295
|
+
var React5 = __toESM(require("react"));
|
|
296
|
+
var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"));
|
|
297
|
+
var import_lucide_react = require("lucide-react");
|
|
298
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
299
|
+
var Dialog = DialogPrimitive.Root;
|
|
300
|
+
var DialogTrigger = DialogPrimitive.Trigger;
|
|
301
|
+
var DialogPortal = DialogPrimitive.Portal;
|
|
302
|
+
var DialogClose = DialogPrimitive.Close;
|
|
303
|
+
var DialogOverlay = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
304
|
+
DialogPrimitive.Overlay,
|
|
305
|
+
{
|
|
306
|
+
ref,
|
|
307
|
+
className: cn(
|
|
308
|
+
"fixed inset-0 z-50 bg-black/70 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
309
|
+
className
|
|
310
|
+
),
|
|
311
|
+
...props
|
|
312
|
+
}
|
|
313
|
+
));
|
|
314
|
+
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
|
|
315
|
+
var DialogContent = React5.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(DialogPortal, { children: [
|
|
316
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DialogOverlay, {}),
|
|
317
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
318
|
+
DialogPrimitive.Content,
|
|
319
|
+
{
|
|
320
|
+
ref,
|
|
321
|
+
className: cn(
|
|
322
|
+
"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border/80 bg-card/95 p-6 shadow-2xl backdrop-blur-xl duration-200 rounded-xl",
|
|
323
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
|
|
324
|
+
className
|
|
325
|
+
),
|
|
326
|
+
...props,
|
|
327
|
+
children: [
|
|
328
|
+
children,
|
|
329
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none", children: [
|
|
330
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react.X, { className: "h-4 w-4 text-muted-foreground hover:text-foreground" }),
|
|
331
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "sr-only", children: "Close" })
|
|
332
|
+
] })
|
|
333
|
+
]
|
|
334
|
+
}
|
|
335
|
+
)
|
|
336
|
+
] }));
|
|
337
|
+
DialogContent.displayName = DialogPrimitive.Content.displayName;
|
|
338
|
+
var DialogHeader = ({
|
|
339
|
+
className,
|
|
340
|
+
...props
|
|
341
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
342
|
+
"div",
|
|
343
|
+
{
|
|
344
|
+
className: cn(
|
|
345
|
+
"flex flex-col space-y-1.5 text-center sm:text-left",
|
|
346
|
+
className
|
|
347
|
+
),
|
|
348
|
+
...props
|
|
349
|
+
}
|
|
350
|
+
);
|
|
351
|
+
DialogHeader.displayName = "DialogHeader";
|
|
352
|
+
var DialogFooter = ({
|
|
353
|
+
className,
|
|
354
|
+
...props
|
|
355
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
356
|
+
"div",
|
|
357
|
+
{
|
|
358
|
+
className: cn(
|
|
359
|
+
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
|
|
360
|
+
className
|
|
361
|
+
),
|
|
362
|
+
...props
|
|
363
|
+
}
|
|
364
|
+
);
|
|
365
|
+
DialogFooter.displayName = "DialogFooter";
|
|
366
|
+
var DialogTitle = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
367
|
+
DialogPrimitive.Title,
|
|
368
|
+
{
|
|
369
|
+
ref,
|
|
370
|
+
className: cn(
|
|
371
|
+
"text-lg font-semibold leading-none tracking-tight text-foreground",
|
|
372
|
+
className
|
|
373
|
+
),
|
|
374
|
+
...props
|
|
375
|
+
}
|
|
376
|
+
));
|
|
377
|
+
DialogTitle.displayName = DialogPrimitive.Title.displayName;
|
|
378
|
+
var DialogDescription = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
379
|
+
DialogPrimitive.Description,
|
|
380
|
+
{
|
|
381
|
+
ref,
|
|
382
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
383
|
+
...props
|
|
384
|
+
}
|
|
385
|
+
));
|
|
386
|
+
DialogDescription.displayName = DialogPrimitive.Description.displayName;
|
|
387
|
+
|
|
388
|
+
// src/components/ui/dropdown-menu.tsx
|
|
389
|
+
var React6 = __toESM(require("react"));
|
|
390
|
+
var DropdownMenuPrimitive = __toESM(require("@radix-ui/react-dropdown-menu"));
|
|
391
|
+
var import_lucide_react2 = require("lucide-react");
|
|
392
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
393
|
+
var DropdownMenu = DropdownMenuPrimitive.Root;
|
|
394
|
+
var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
|
395
|
+
var DropdownMenuGroup = DropdownMenuPrimitive.Group;
|
|
396
|
+
var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
|
|
397
|
+
var DropdownMenuSub = DropdownMenuPrimitive.Sub;
|
|
398
|
+
var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
|
|
399
|
+
var DropdownMenuSubTrigger = React6.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
400
|
+
DropdownMenuPrimitive.SubTrigger,
|
|
401
|
+
{
|
|
402
|
+
ref,
|
|
403
|
+
className: cn(
|
|
404
|
+
"flex cursor-default select-none items-center rounded-md px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",
|
|
405
|
+
inset && "pl-8",
|
|
406
|
+
className
|
|
407
|
+
),
|
|
408
|
+
...props,
|
|
409
|
+
children: [
|
|
410
|
+
children,
|
|
411
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.ChevronRight, { className: "ml-auto h-4 w-4" })
|
|
412
|
+
]
|
|
413
|
+
}
|
|
414
|
+
));
|
|
415
|
+
DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
|
|
416
|
+
var DropdownMenuSubContent = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
417
|
+
DropdownMenuPrimitive.SubContent,
|
|
418
|
+
{
|
|
419
|
+
ref,
|
|
420
|
+
className: cn(
|
|
421
|
+
"z-50 min-w-[8rem] overflow-hidden rounded-lg border border-border/70 bg-popover/95 p-1 text-popover-foreground shadow-xl backdrop-blur-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
422
|
+
className
|
|
423
|
+
),
|
|
424
|
+
...props
|
|
425
|
+
}
|
|
426
|
+
));
|
|
427
|
+
DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
|
|
428
|
+
var DropdownMenuContent = React6.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
429
|
+
DropdownMenuPrimitive.Content,
|
|
430
|
+
{
|
|
431
|
+
ref,
|
|
432
|
+
sideOffset,
|
|
433
|
+
className: cn(
|
|
434
|
+
"z-50 min-w-[10rem] overflow-hidden rounded-lg border border-border/70 bg-popover/95 p-1 text-popover-foreground shadow-xl backdrop-blur-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
435
|
+
className
|
|
436
|
+
),
|
|
437
|
+
...props
|
|
438
|
+
}
|
|
439
|
+
) }));
|
|
440
|
+
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
|
|
441
|
+
var DropdownMenuItem = React6.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
442
|
+
DropdownMenuPrimitive.Item,
|
|
443
|
+
{
|
|
444
|
+
ref,
|
|
445
|
+
className: cn(
|
|
446
|
+
"relative flex cursor-pointer select-none items-center rounded-md px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
447
|
+
inset && "pl-8",
|
|
448
|
+
className
|
|
449
|
+
),
|
|
450
|
+
...props
|
|
451
|
+
}
|
|
452
|
+
));
|
|
453
|
+
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
|
|
454
|
+
var DropdownMenuCheckboxItem = React6.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
455
|
+
DropdownMenuPrimitive.CheckboxItem,
|
|
456
|
+
{
|
|
457
|
+
ref,
|
|
458
|
+
className: cn(
|
|
459
|
+
"relative flex cursor-default select-none items-center rounded-md py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
460
|
+
className
|
|
461
|
+
),
|
|
462
|
+
checked,
|
|
463
|
+
...props,
|
|
464
|
+
children: [
|
|
465
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.Check, { className: "h-4 w-4 text-primary" }) }) }),
|
|
466
|
+
children
|
|
467
|
+
]
|
|
468
|
+
}
|
|
469
|
+
));
|
|
470
|
+
DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
|
|
471
|
+
var DropdownMenuRadioItem = React6.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
472
|
+
DropdownMenuPrimitive.RadioItem,
|
|
473
|
+
{
|
|
474
|
+
ref,
|
|
475
|
+
className: cn(
|
|
476
|
+
"relative flex cursor-default select-none items-center rounded-md py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
477
|
+
className
|
|
478
|
+
),
|
|
479
|
+
...props,
|
|
480
|
+
children: [
|
|
481
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.Circle, { className: "h-2 w-2 fill-current text-primary" }) }) }),
|
|
482
|
+
children
|
|
483
|
+
]
|
|
484
|
+
}
|
|
485
|
+
));
|
|
486
|
+
DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
|
|
487
|
+
var DropdownMenuLabel = React6.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
488
|
+
DropdownMenuPrimitive.Label,
|
|
489
|
+
{
|
|
490
|
+
ref,
|
|
491
|
+
className: cn(
|
|
492
|
+
"px-2 py-1.5 text-xs font-semibold text-muted-foreground",
|
|
493
|
+
inset && "pl-8",
|
|
494
|
+
className
|
|
495
|
+
),
|
|
496
|
+
...props
|
|
497
|
+
}
|
|
498
|
+
));
|
|
499
|
+
DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
|
|
500
|
+
var DropdownMenuSeparator = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
501
|
+
DropdownMenuPrimitive.Separator,
|
|
502
|
+
{
|
|
503
|
+
ref,
|
|
504
|
+
className: cn("-mx-1 my-1 h-px bg-border/60", className),
|
|
505
|
+
...props
|
|
506
|
+
}
|
|
507
|
+
));
|
|
508
|
+
DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
|
|
509
|
+
|
|
510
|
+
// src/components/ui/tooltip.tsx
|
|
511
|
+
var React7 = __toESM(require("react"));
|
|
512
|
+
var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"));
|
|
513
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
514
|
+
var TooltipProvider = TooltipPrimitive.Provider;
|
|
515
|
+
var Tooltip = TooltipPrimitive.Root;
|
|
516
|
+
var TooltipTrigger = TooltipPrimitive.Trigger;
|
|
517
|
+
var TooltipContent = React7.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
518
|
+
TooltipPrimitive.Content,
|
|
519
|
+
{
|
|
520
|
+
ref,
|
|
521
|
+
sideOffset,
|
|
522
|
+
className: cn(
|
|
523
|
+
"z-50 overflow-hidden rounded-md border border-border/80 bg-popover/90 px-3 py-1.5 text-xs text-popover-foreground shadow-md backdrop-blur-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
524
|
+
className
|
|
525
|
+
),
|
|
526
|
+
...props
|
|
527
|
+
}
|
|
528
|
+
));
|
|
529
|
+
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
530
|
+
|
|
531
|
+
// src/components/ui/table.tsx
|
|
532
|
+
var React8 = __toESM(require("react"));
|
|
533
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
534
|
+
var Table = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "relative w-full overflow-auto rounded-xl border border-border/60 bg-surface-1/40 backdrop-blur-sm", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
535
|
+
"table",
|
|
536
|
+
{
|
|
537
|
+
ref,
|
|
538
|
+
className: cn("w-full caption-bottom text-sm", className),
|
|
539
|
+
...props
|
|
540
|
+
}
|
|
541
|
+
) }));
|
|
542
|
+
Table.displayName = "Table";
|
|
543
|
+
var TableHeader = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
544
|
+
"thead",
|
|
545
|
+
{
|
|
546
|
+
ref,
|
|
547
|
+
className: cn(
|
|
548
|
+
"border-b border-[#086288]/20 bg-[#97D7FF]/35 text-slate-900 font-bold [&_th]:text-slate-900 [&_th]:font-bold [&_tr]:border-b-0",
|
|
549
|
+
className
|
|
550
|
+
),
|
|
551
|
+
...props
|
|
552
|
+
}
|
|
553
|
+
));
|
|
554
|
+
TableHeader.displayName = "TableHeader";
|
|
555
|
+
var TableBody = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
556
|
+
"tbody",
|
|
557
|
+
{
|
|
558
|
+
ref,
|
|
559
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
560
|
+
...props
|
|
561
|
+
}
|
|
562
|
+
));
|
|
563
|
+
TableBody.displayName = "TableBody";
|
|
564
|
+
var TableFooter = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
565
|
+
"tfoot",
|
|
566
|
+
{
|
|
567
|
+
ref,
|
|
568
|
+
className: cn(
|
|
569
|
+
"border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0",
|
|
570
|
+
className
|
|
571
|
+
),
|
|
572
|
+
...props
|
|
573
|
+
}
|
|
574
|
+
));
|
|
575
|
+
TableFooter.displayName = "TableFooter";
|
|
576
|
+
var TableRow = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
577
|
+
"tr",
|
|
578
|
+
{
|
|
579
|
+
ref,
|
|
580
|
+
className: cn(
|
|
581
|
+
"border-b border-border/40 transition-colors hover:bg-surface-2/50 data-[state=selected]:bg-muted",
|
|
582
|
+
className
|
|
583
|
+
),
|
|
584
|
+
...props
|
|
585
|
+
}
|
|
586
|
+
));
|
|
587
|
+
TableRow.displayName = "TableRow";
|
|
588
|
+
var TableHead = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
589
|
+
"th",
|
|
590
|
+
{
|
|
591
|
+
ref,
|
|
592
|
+
className: cn(
|
|
593
|
+
"h-10 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",
|
|
594
|
+
className
|
|
595
|
+
),
|
|
596
|
+
...props
|
|
597
|
+
}
|
|
598
|
+
));
|
|
599
|
+
TableHead.displayName = "TableHead";
|
|
600
|
+
var TableCell = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
601
|
+
"td",
|
|
602
|
+
{
|
|
603
|
+
ref,
|
|
604
|
+
className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className),
|
|
605
|
+
...props
|
|
606
|
+
}
|
|
607
|
+
));
|
|
608
|
+
TableCell.displayName = "TableCell";
|
|
609
|
+
var TableCaption = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
610
|
+
"caption",
|
|
611
|
+
{
|
|
612
|
+
ref,
|
|
613
|
+
className: cn("mt-4 text-sm text-muted-foreground", className),
|
|
614
|
+
...props
|
|
615
|
+
}
|
|
616
|
+
));
|
|
617
|
+
TableCaption.displayName = "TableCaption";
|
|
618
|
+
|
|
619
|
+
// src/components/ui/avatar.tsx
|
|
620
|
+
var React9 = __toESM(require("react"));
|
|
621
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
622
|
+
function Avatar({
|
|
623
|
+
src,
|
|
624
|
+
alt = "Avatar",
|
|
625
|
+
fallback = "U",
|
|
626
|
+
glow = false,
|
|
627
|
+
className,
|
|
628
|
+
...props
|
|
629
|
+
}) {
|
|
630
|
+
const [hasError, setHasError] = React9.useState(!src);
|
|
631
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
632
|
+
"div",
|
|
633
|
+
{
|
|
634
|
+
className: cn(
|
|
635
|
+
"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full border border-border/80 bg-surface-2",
|
|
636
|
+
glow && "ring-2 ring-primary/40 shadow-[0_0_12px_rgba(59,130,246,0.25)]",
|
|
637
|
+
className
|
|
638
|
+
),
|
|
639
|
+
...props,
|
|
640
|
+
children: src && !hasError ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
641
|
+
"img",
|
|
642
|
+
{
|
|
643
|
+
src,
|
|
644
|
+
alt,
|
|
645
|
+
onError: () => setHasError(true),
|
|
646
|
+
className: "aspect-square h-full w-full object-cover"
|
|
647
|
+
}
|
|
648
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex h-full w-full items-center justify-center font-medium text-xs text-muted-foreground uppercase", children: fallback })
|
|
649
|
+
}
|
|
650
|
+
);
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
// src/components/ui/skeleton.tsx
|
|
654
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
655
|
+
function Skeleton({
|
|
656
|
+
className,
|
|
657
|
+
...props
|
|
658
|
+
}) {
|
|
659
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
660
|
+
"div",
|
|
661
|
+
{
|
|
662
|
+
className: cn(
|
|
663
|
+
"animate-pulse rounded-md bg-surface-2/80",
|
|
664
|
+
className
|
|
665
|
+
),
|
|
666
|
+
...props
|
|
667
|
+
}
|
|
668
|
+
);
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
// src/components/layout/shell.tsx
|
|
672
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
673
|
+
function AppShell({
|
|
674
|
+
sidebar,
|
|
675
|
+
header,
|
|
676
|
+
children,
|
|
677
|
+
className,
|
|
678
|
+
...props
|
|
679
|
+
}) {
|
|
680
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
681
|
+
"div",
|
|
682
|
+
{
|
|
683
|
+
className: cn(
|
|
684
|
+
"min-h-screen bg-background text-foreground flex antialiased selection:bg-primary/20",
|
|
685
|
+
className
|
|
686
|
+
),
|
|
687
|
+
...props,
|
|
688
|
+
children: [
|
|
689
|
+
sidebar && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("aside", { className: "w-64 border-r border-border/70 bg-surface-1/70 backdrop-blur-md hidden md:flex flex-col shrink-0", children: sidebar }),
|
|
690
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex-1 flex flex-col min-w-0", children: [
|
|
691
|
+
header && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("header", { className: "h-16 border-b border-border/60 bg-background/80 backdrop-blur-md sticky top-0 z-40 flex items-center px-6 justify-between", children: header }),
|
|
692
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("main", { className: "flex-1 p-6 overflow-y-auto", children })
|
|
693
|
+
] })
|
|
694
|
+
]
|
|
695
|
+
}
|
|
696
|
+
);
|
|
697
|
+
}
|
|
698
|
+
function PageHeader({
|
|
699
|
+
title,
|
|
700
|
+
description,
|
|
701
|
+
actions,
|
|
702
|
+
className,
|
|
703
|
+
...props
|
|
704
|
+
}) {
|
|
705
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
706
|
+
"div",
|
|
707
|
+
{
|
|
708
|
+
className: cn(
|
|
709
|
+
"flex flex-col md:flex-row md:items-center md:justify-between gap-4 pb-6 border-b border-border/40 mb-6",
|
|
710
|
+
className
|
|
711
|
+
),
|
|
712
|
+
...props,
|
|
713
|
+
children: [
|
|
714
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { children: [
|
|
715
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h1", { className: "text-2xl font-bold tracking-tight text-foreground", children: title }),
|
|
716
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "text-sm text-muted-foreground mt-1", children: description })
|
|
717
|
+
] }),
|
|
718
|
+
actions && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex items-center gap-3", children: actions })
|
|
719
|
+
]
|
|
720
|
+
}
|
|
721
|
+
);
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
// src/tailwind/preset.ts
|
|
725
|
+
var esprydiPreset = {
|
|
726
|
+
darkMode: ["class"],
|
|
727
|
+
content: [],
|
|
728
|
+
theme: {
|
|
729
|
+
extend: {
|
|
730
|
+
colors: {
|
|
731
|
+
border: "hsl(var(--border))",
|
|
732
|
+
input: "hsl(var(--input))",
|
|
733
|
+
ring: "hsl(var(--ring))",
|
|
734
|
+
background: "hsl(var(--background))",
|
|
735
|
+
foreground: "hsl(var(--foreground))",
|
|
736
|
+
primary: {
|
|
737
|
+
DEFAULT: "hsl(var(--primary))",
|
|
738
|
+
foreground: "hsl(var(--primary-foreground))"
|
|
739
|
+
},
|
|
740
|
+
secondary: {
|
|
741
|
+
DEFAULT: "hsl(var(--secondary))",
|
|
742
|
+
foreground: "hsl(var(--secondary-foreground))"
|
|
743
|
+
},
|
|
744
|
+
destructive: {
|
|
745
|
+
DEFAULT: "hsl(var(--destructive))",
|
|
746
|
+
foreground: "hsl(var(--destructive-foreground))"
|
|
747
|
+
},
|
|
748
|
+
muted: {
|
|
749
|
+
DEFAULT: "hsl(var(--muted))",
|
|
750
|
+
foreground: "hsl(var(--muted-foreground))"
|
|
751
|
+
},
|
|
752
|
+
accent: {
|
|
753
|
+
DEFAULT: "hsl(var(--accent))",
|
|
754
|
+
foreground: "hsl(var(--accent-foreground))"
|
|
755
|
+
},
|
|
756
|
+
popover: {
|
|
757
|
+
DEFAULT: "hsl(var(--popover))",
|
|
758
|
+
foreground: "hsl(var(--popover-foreground))"
|
|
759
|
+
},
|
|
760
|
+
card: {
|
|
761
|
+
DEFAULT: "hsl(var(--card))",
|
|
762
|
+
foreground: "hsl(var(--card-foreground))"
|
|
763
|
+
},
|
|
764
|
+
surface: {
|
|
765
|
+
1: "hsl(var(--surface-depth-1))",
|
|
766
|
+
2: "hsl(var(--surface-depth-2))"
|
|
767
|
+
},
|
|
768
|
+
ocean: {
|
|
769
|
+
deep: "#086288",
|
|
770
|
+
coastal: "#4D8DBA",
|
|
771
|
+
ice: "#97D7FF",
|
|
772
|
+
light: "#FFFEFC"
|
|
773
|
+
}
|
|
774
|
+
},
|
|
775
|
+
borderRadius: {
|
|
776
|
+
lg: "var(--radius)",
|
|
777
|
+
md: "calc(var(--radius) - 2px)",
|
|
778
|
+
sm: "calc(var(--radius) - 4px)"
|
|
779
|
+
},
|
|
780
|
+
keyframes: {
|
|
781
|
+
"accordion-down": {
|
|
782
|
+
from: { height: "0" },
|
|
783
|
+
to: { height: "var(--radix-accordion-content-height)" }
|
|
784
|
+
},
|
|
785
|
+
"accordion-up": {
|
|
786
|
+
from: { height: "var(--radix-accordion-content-height)" },
|
|
787
|
+
to: { height: "0" }
|
|
788
|
+
},
|
|
789
|
+
"pulse-glow": {
|
|
790
|
+
"0%, 100%": { opacity: "0.4", transform: "scale(1)" },
|
|
791
|
+
"50%": { opacity: "0.8", transform: "scale(1.05)" }
|
|
792
|
+
}
|
|
793
|
+
},
|
|
794
|
+
animation: {
|
|
795
|
+
"accordion-down": "accordion-down 0.2s ease-out",
|
|
796
|
+
"accordion-up": "accordion-up 0.2s ease-out",
|
|
797
|
+
"pulse-glow": "pulse-glow 4s ease-in-out infinite"
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
};
|
|
802
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
803
|
+
0 && (module.exports = {
|
|
804
|
+
AppShell,
|
|
805
|
+
Avatar,
|
|
806
|
+
Badge,
|
|
807
|
+
Button,
|
|
808
|
+
Card,
|
|
809
|
+
CardContent,
|
|
810
|
+
CardDescription,
|
|
811
|
+
CardFooter,
|
|
812
|
+
CardHeader,
|
|
813
|
+
CardTitle,
|
|
814
|
+
Dialog,
|
|
815
|
+
DialogClose,
|
|
816
|
+
DialogContent,
|
|
817
|
+
DialogDescription,
|
|
818
|
+
DialogFooter,
|
|
819
|
+
DialogHeader,
|
|
820
|
+
DialogOverlay,
|
|
821
|
+
DialogPortal,
|
|
822
|
+
DialogTitle,
|
|
823
|
+
DialogTrigger,
|
|
824
|
+
DropdownMenu,
|
|
825
|
+
DropdownMenuCheckboxItem,
|
|
826
|
+
DropdownMenuContent,
|
|
827
|
+
DropdownMenuGroup,
|
|
828
|
+
DropdownMenuItem,
|
|
829
|
+
DropdownMenuLabel,
|
|
830
|
+
DropdownMenuPortal,
|
|
831
|
+
DropdownMenuRadioGroup,
|
|
832
|
+
DropdownMenuRadioItem,
|
|
833
|
+
DropdownMenuSeparator,
|
|
834
|
+
DropdownMenuSub,
|
|
835
|
+
DropdownMenuSubContent,
|
|
836
|
+
DropdownMenuSubTrigger,
|
|
837
|
+
DropdownMenuTrigger,
|
|
838
|
+
Input,
|
|
839
|
+
PageHeader,
|
|
840
|
+
Skeleton,
|
|
841
|
+
Table,
|
|
842
|
+
TableBody,
|
|
843
|
+
TableCaption,
|
|
844
|
+
TableCell,
|
|
845
|
+
TableFooter,
|
|
846
|
+
TableHead,
|
|
847
|
+
TableHeader,
|
|
848
|
+
TableRow,
|
|
849
|
+
Textarea,
|
|
850
|
+
Tooltip,
|
|
851
|
+
TooltipContent,
|
|
852
|
+
TooltipProvider,
|
|
853
|
+
TooltipTrigger,
|
|
854
|
+
badgeVariants,
|
|
855
|
+
buttonVariants,
|
|
856
|
+
cn,
|
|
857
|
+
esprydiPreset
|
|
858
|
+
});
|
|
859
|
+
//# sourceMappingURL=index.js.map
|