@tangle-network/sandbox-ui 0.2.1 → 0.3.3
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 +201 -10
- package/dist/auth.js +2 -2
- package/dist/chat-container-C8eHLw8z.d.ts +67 -0
- package/dist/chat.d.ts +70 -78
- package/dist/chat.js +8 -8
- package/dist/chunk-4F2GJRGU.js +756 -0
- package/dist/{chunk-HYEAX3DC.js → chunk-5LV6DZZF.js} +445 -114
- package/dist/chunk-67C53XVV.js +1106 -0
- package/dist/{chunk-QSQBDR3N.js → chunk-BX6AQMUS.js} +5 -2
- package/dist/chunk-CCKNIAS7.js +124 -0
- package/dist/chunk-CJ2RYVZH.js +128 -0
- package/dist/{chunk-KMXV7DDX.js → chunk-CNWVHQFY.js} +1 -1
- package/dist/{chunk-OU4TRNQZ.js → chunk-COCSO7FG.js} +3 -3
- package/dist/chunk-FJSVPBKY.js +85 -0
- package/dist/chunk-FRGMMANX.js +102 -0
- package/dist/{chunk-E6FS7R4X.js → chunk-HWLX5NME.js} +1 -1
- package/dist/chunk-JF6E2DS5.js +610 -0
- package/dist/chunk-MUOL44AE.js +121 -0
- package/dist/chunk-MXCSSOGH.js +105 -0
- package/dist/{chunk-J4OADEUK.js → chunk-OM6ON27W.js} +24 -9
- package/dist/{chunk-NI2EI43H.js → chunk-PDV7W4NY.js} +9 -124
- package/dist/chunk-TQN3VR4F.js +92 -0
- package/dist/{chunk-SOT2V7TX.js → chunk-TXI4MZAZ.js} +62 -144
- package/dist/chunk-WUR652Y3.js +1140 -0
- package/dist/chunk-YDBXQQLC.js +336 -0
- package/dist/{chunk-4EIWPJMJ.js → chunk-ZP6GSX4D.js} +36 -27
- package/dist/dashboard.d.ts +5 -2
- package/dist/dashboard.js +5 -4
- package/dist/{expanded-tool-detail-OkXGqTHe.d.ts → expanded-tool-detail-BDi_h_dZ.d.ts} +11 -4
- package/dist/file-tabs-CmaoDVBI.d.ts +72 -0
- package/dist/files.d.ts +25 -44
- package/dist/files.js +8 -3
- package/{src/styles → dist}/globals.css +16 -67
- package/dist/hooks.d.ts +5 -4
- package/dist/hooks.js +14 -9
- package/dist/index.d.ts +38 -9
- package/dist/index.js +100 -126
- package/dist/markdown.d.ts +1 -24
- package/dist/markdown.js +1 -7
- package/dist/openui.d.ts +115 -0
- package/dist/openui.js +11 -0
- package/dist/pages.d.ts +3 -2
- package/dist/pages.js +19 -16
- package/dist/primitives.d.ts +8 -1
- package/dist/primitives.js +25 -19
- package/dist/run.d.ts +2 -2
- package/dist/run.js +8 -7
- package/dist/{use-sidecar-auth-Bb0-w3lX.d.ts → sdk-hooks.d.ts} +61 -72
- package/dist/sdk-hooks.js +29 -0
- package/dist/styles.css +179 -0
- package/dist/tokens.css +165 -0
- package/dist/{tool-display-BvsVW_Ur.d.ts → tool-display-Ct9nFAzJ.d.ts} +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/{usage-chart-DINgSVL5.d.ts → usage-chart-CY9xo3KX.d.ts} +8 -3
- package/dist/use-pty-session-DeZSxOCN.d.ts +69 -0
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/dist/workspace.d.ts +171 -33
- package/dist/workspace.js +25 -1
- package/package.json +10 -3
- package/dist/chunk-2UHPE5T7.js +0 -201
- package/dist/chunk-6MQIDUPA.js +0 -502
- package/dist/chunk-KYY2X6LY.js +0 -318
- package/dist/chunk-L6ZDH5F4.js +0 -334
- package/dist/chunk-M34OA6PQ.js +0 -233
- package/dist/chunk-M6VLC32S.js +0 -219
- package/dist/chunk-U62G5TS7.js +0 -472
- package/src/styles/tokens.css +0 -73
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "./chunk-RQHJBTEU.js";
|
|
4
|
+
|
|
5
|
+
// src/primitives/input.tsx
|
|
6
|
+
import * as React from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
var Input = React.forwardRef(
|
|
9
|
+
({ className, type, variant = "default", label, error, hint, id, ...props }, ref) => {
|
|
10
|
+
const inputId = id ?? label?.toLowerCase().replace(/\s+/g, "-");
|
|
11
|
+
const variants = {
|
|
12
|
+
default: "border-input focus:ring-ring",
|
|
13
|
+
sandbox: "border-[var(--border-accent)] focus:border-[var(--border-accent-hover)] focus:ring-[var(--border-accent)]"
|
|
14
|
+
};
|
|
15
|
+
const input = /* @__PURE__ */ jsx(
|
|
16
|
+
"input",
|
|
17
|
+
{
|
|
18
|
+
type,
|
|
19
|
+
id: inputId,
|
|
20
|
+
className: cn(
|
|
21
|
+
"flex h-11 w-full rounded-lg border bg-card/50 px-4 py-2 text-sm transition-all duration-200",
|
|
22
|
+
"placeholder:text-muted-foreground",
|
|
23
|
+
"focus:outline-none focus:ring-2 focus:ring-offset-0",
|
|
24
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
25
|
+
"file:border-0 file:bg-transparent file:font-medium file:text-sm",
|
|
26
|
+
error ? "border-red-500/50 focus:ring-red-500/20" : variants[variant],
|
|
27
|
+
className
|
|
28
|
+
),
|
|
29
|
+
ref,
|
|
30
|
+
...props
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
if (!label && !error && !hint) return input;
|
|
34
|
+
return /* @__PURE__ */ jsxs("div", { className: "w-full space-y-1.5", children: [
|
|
35
|
+
label && /* @__PURE__ */ jsx(
|
|
36
|
+
"label",
|
|
37
|
+
{
|
|
38
|
+
htmlFor: inputId,
|
|
39
|
+
className: "block font-medium text-muted-foreground text-sm",
|
|
40
|
+
children: label
|
|
41
|
+
}
|
|
42
|
+
),
|
|
43
|
+
input,
|
|
44
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-red-400 text-sm", children: error }),
|
|
45
|
+
hint && !error && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground/70 text-sm", children: hint })
|
|
46
|
+
] });
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
Input.displayName = "Input";
|
|
50
|
+
var Textarea = React.forwardRef(
|
|
51
|
+
({ className, variant = "default", label, error, hint, id, ...props }, ref) => {
|
|
52
|
+
const textareaId = id ?? label?.toLowerCase().replace(/\s+/g, "-");
|
|
53
|
+
const variants = {
|
|
54
|
+
default: "border-input focus:ring-ring",
|
|
55
|
+
sandbox: "border-[var(--border-accent)] focus:border-[var(--border-accent-hover)] focus:ring-[var(--border-accent)]"
|
|
56
|
+
};
|
|
57
|
+
const textarea = /* @__PURE__ */ jsx(
|
|
58
|
+
"textarea",
|
|
59
|
+
{
|
|
60
|
+
id: textareaId,
|
|
61
|
+
className: cn(
|
|
62
|
+
"flex min-h-[120px] w-full resize-y rounded-lg border bg-card/50 px-4 py-3 text-sm transition-all duration-200",
|
|
63
|
+
"placeholder:text-muted-foreground",
|
|
64
|
+
"focus:outline-none focus:ring-2 focus:ring-offset-0",
|
|
65
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
66
|
+
error ? "border-red-500/50 focus:ring-red-500/20" : variants[variant],
|
|
67
|
+
className
|
|
68
|
+
),
|
|
69
|
+
ref,
|
|
70
|
+
...props
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
if (!label && !error && !hint) return textarea;
|
|
74
|
+
return /* @__PURE__ */ jsxs("div", { className: "w-full space-y-1.5", children: [
|
|
75
|
+
label && /* @__PURE__ */ jsx(
|
|
76
|
+
"label",
|
|
77
|
+
{
|
|
78
|
+
htmlFor: textareaId,
|
|
79
|
+
className: "block font-medium text-muted-foreground text-sm",
|
|
80
|
+
children: label
|
|
81
|
+
}
|
|
82
|
+
),
|
|
83
|
+
textarea,
|
|
84
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-red-400 text-sm", children: error }),
|
|
85
|
+
hint && !error && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground/70 text-sm", children: hint })
|
|
86
|
+
] });
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
Textarea.displayName = "Textarea";
|
|
90
|
+
|
|
91
|
+
// src/primitives/empty-state.tsx
|
|
92
|
+
import * as React2 from "react";
|
|
93
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
94
|
+
var EmptyState = React2.forwardRef(
|
|
95
|
+
({ className, icon, title, description, action, ...props }, ref) => {
|
|
96
|
+
return /* @__PURE__ */ jsxs2(
|
|
97
|
+
"div",
|
|
98
|
+
{
|
|
99
|
+
ref,
|
|
100
|
+
className: cn(
|
|
101
|
+
"flex flex-col items-center justify-center px-4 py-16 text-center",
|
|
102
|
+
className
|
|
103
|
+
),
|
|
104
|
+
...props,
|
|
105
|
+
children: [
|
|
106
|
+
icon && /* @__PURE__ */ jsx2("div", { className: "mb-4 rounded-full bg-muted p-4 text-muted-foreground", children: icon }),
|
|
107
|
+
/* @__PURE__ */ jsx2("h3", { className: "font-semibold text-lg", children: title }),
|
|
108
|
+
description && /* @__PURE__ */ jsx2("p", { className: "mt-2 max-w-sm text-muted-foreground text-sm", children: description }),
|
|
109
|
+
action && /* @__PURE__ */ jsx2("div", { className: "mt-6", children: action })
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
EmptyState.displayName = "EmptyState";
|
|
116
|
+
|
|
117
|
+
export {
|
|
118
|
+
Input,
|
|
119
|
+
Textarea,
|
|
120
|
+
EmptyState
|
|
121
|
+
};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "./chunk-RQHJBTEU.js";
|
|
4
|
+
|
|
5
|
+
// src/primitives/card.tsx
|
|
6
|
+
import * as React from "react";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
var Card = React.forwardRef(({ className, variant = "default", hover = false, ...props }, ref) => {
|
|
9
|
+
const variants = {
|
|
10
|
+
default: "bg-card border-border",
|
|
11
|
+
glass: "bg-card/60 backdrop-blur-xl border-border/50",
|
|
12
|
+
sandbox: "bg-card/80 backdrop-blur-xl border-[var(--border-accent)] shadow-[var(--shadow-accent)]"
|
|
13
|
+
};
|
|
14
|
+
return /* @__PURE__ */ jsx(
|
|
15
|
+
"div",
|
|
16
|
+
{
|
|
17
|
+
ref,
|
|
18
|
+
className: cn(
|
|
19
|
+
"rounded-xl border text-card-foreground transition-all duration-300",
|
|
20
|
+
variants[variant],
|
|
21
|
+
hover && "cursor-pointer hover:border-muted-foreground/50 hover:shadow-xl",
|
|
22
|
+
className
|
|
23
|
+
),
|
|
24
|
+
...props
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
});
|
|
28
|
+
Card.displayName = "Card";
|
|
29
|
+
var CardHeader = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
30
|
+
"div",
|
|
31
|
+
{
|
|
32
|
+
ref,
|
|
33
|
+
className: cn("flex flex-col space-y-1.5 p-6", className),
|
|
34
|
+
...props
|
|
35
|
+
}
|
|
36
|
+
));
|
|
37
|
+
CardHeader.displayName = "CardHeader";
|
|
38
|
+
var CardTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
39
|
+
"h3",
|
|
40
|
+
{
|
|
41
|
+
ref,
|
|
42
|
+
className: cn("font-semibold leading-none tracking-tight", className),
|
|
43
|
+
...props
|
|
44
|
+
}
|
|
45
|
+
));
|
|
46
|
+
CardTitle.displayName = "CardTitle";
|
|
47
|
+
var CardDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
48
|
+
"p",
|
|
49
|
+
{
|
|
50
|
+
ref,
|
|
51
|
+
className: cn("text-muted-foreground text-sm", className),
|
|
52
|
+
...props
|
|
53
|
+
}
|
|
54
|
+
));
|
|
55
|
+
CardDescription.displayName = "CardDescription";
|
|
56
|
+
var CardContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("p-6 pt-0", className), ...props }));
|
|
57
|
+
CardContent.displayName = "CardContent";
|
|
58
|
+
var CardFooter = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
59
|
+
"div",
|
|
60
|
+
{
|
|
61
|
+
ref,
|
|
62
|
+
className: cn("flex items-center p-6 pt-0", className),
|
|
63
|
+
...props
|
|
64
|
+
}
|
|
65
|
+
));
|
|
66
|
+
CardFooter.displayName = "CardFooter";
|
|
67
|
+
|
|
68
|
+
// src/primitives/badge.tsx
|
|
69
|
+
import { cva } from "class-variance-authority";
|
|
70
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
71
|
+
var badgeVariants = cva(
|
|
72
|
+
"inline-flex items-center rounded-full border px-2.5 py-0.5 font-semibold text-xs transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
|
|
73
|
+
{
|
|
74
|
+
variants: {
|
|
75
|
+
variant: {
|
|
76
|
+
default: "border-transparent bg-primary text-primary-foreground",
|
|
77
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground",
|
|
78
|
+
destructive: "border-transparent bg-destructive text-destructive-foreground",
|
|
79
|
+
outline: "text-foreground",
|
|
80
|
+
success: "border-green-500/20 border-transparent bg-green-500/10 text-green-400",
|
|
81
|
+
warning: "border-transparent border-yellow-500/20 bg-yellow-500/10 text-yellow-400",
|
|
82
|
+
error: "border-red-500/20 border-transparent bg-red-500/10 text-red-400",
|
|
83
|
+
info: "border-blue-500/20 border-transparent bg-blue-500/10 text-blue-400",
|
|
84
|
+
sandbox: "border-[var(--border-accent)] bg-[var(--accent-surface-soft)] text-[var(--accent-text)]"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
defaultVariants: {
|
|
88
|
+
variant: "default"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
function Badge({ className, variant, ...props }) {
|
|
93
|
+
return /* @__PURE__ */ jsx2("div", { className: cn(badgeVariants({ variant }), className), ...props });
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export {
|
|
97
|
+
Card,
|
|
98
|
+
CardHeader,
|
|
99
|
+
CardTitle,
|
|
100
|
+
CardDescription,
|
|
101
|
+
CardContent,
|
|
102
|
+
CardFooter,
|
|
103
|
+
badgeVariants,
|
|
104
|
+
Badge
|
|
105
|
+
};
|
|
@@ -10,12 +10,14 @@ import {
|
|
|
10
10
|
DropdownMenuTrigger
|
|
11
11
|
} from "./chunk-MCGKDCOR.js";
|
|
12
12
|
import {
|
|
13
|
-
Badge,
|
|
14
13
|
Skeleton
|
|
15
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-FRGMMANX.js";
|
|
15
|
+
import {
|
|
16
|
+
Badge
|
|
17
|
+
} from "./chunk-MXCSSOGH.js";
|
|
16
18
|
import {
|
|
17
19
|
Button
|
|
18
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-HWLX5NME.js";
|
|
19
21
|
import {
|
|
20
22
|
cn
|
|
21
23
|
} from "./chunk-RQHJBTEU.js";
|
|
@@ -110,8 +112,8 @@ import * as React from "react";
|
|
|
110
112
|
import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
111
113
|
var variantStyles = {
|
|
112
114
|
sandbox: {
|
|
113
|
-
activeNav: "bg-
|
|
114
|
-
userGradient: "
|
|
115
|
+
activeNav: "bg-[var(--accent-surface-soft)] text-[var(--accent-text)]",
|
|
116
|
+
userGradient: "bg-[image:var(--accent-gradient-strong)]"
|
|
115
117
|
}
|
|
116
118
|
};
|
|
117
119
|
function DefaultLink({
|
|
@@ -254,6 +256,9 @@ function DashboardLayout({
|
|
|
254
256
|
onLogout,
|
|
255
257
|
onSettingsClick,
|
|
256
258
|
settingsHref = "/dashboard/settings",
|
|
259
|
+
className,
|
|
260
|
+
sidebarClassName,
|
|
261
|
+
contentClassName,
|
|
257
262
|
LinkComponent = DefaultLink
|
|
258
263
|
}) {
|
|
259
264
|
const styles = variantStyles[variant];
|
|
@@ -300,7 +305,7 @@ function DashboardLayout({
|
|
|
300
305
|
"div",
|
|
301
306
|
{
|
|
302
307
|
className: cn(
|
|
303
|
-
"flex h-8 w-8 items-center justify-center rounded-full
|
|
308
|
+
"flex h-8 w-8 items-center justify-center rounded-full",
|
|
304
309
|
styles.userGradient
|
|
305
310
|
),
|
|
306
311
|
children: /* @__PURE__ */ jsx2(UserIcon, { className: "h-4 w-4 text-white", "aria-hidden": "true" })
|
|
@@ -344,7 +349,7 @@ function DashboardLayout({
|
|
|
344
349
|
] })
|
|
345
350
|
] })
|
|
346
351
|
] });
|
|
347
|
-
return /* @__PURE__ */ jsxs2("div", { className: "flex min-h-screen bg-background", children: [
|
|
352
|
+
return /* @__PURE__ */ jsxs2("div", { className: cn("flex min-h-screen bg-background", className), children: [
|
|
348
353
|
/* @__PURE__ */ jsxs2("header", { className: "fixed top-0 right-0 left-0 z-40 flex h-16 items-center justify-between border-border border-b bg-card/95 px-4 backdrop-blur-xl md:hidden", children: [
|
|
349
354
|
/* @__PURE__ */ jsx2(Logo, { variant, size: "sm" }),
|
|
350
355
|
/* @__PURE__ */ jsx2(
|
|
@@ -372,13 +377,23 @@ function DashboardLayout({
|
|
|
372
377
|
{
|
|
373
378
|
className: cn(
|
|
374
379
|
"fixed top-16 bottom-0 left-0 z-30 flex w-64 flex-col border-border border-r bg-card/95 backdrop-blur-xl transition-transform duration-200 md:hidden",
|
|
380
|
+
sidebarClassName,
|
|
375
381
|
mobileMenuOpen ? "translate-x-0" : "-translate-x-full"
|
|
376
382
|
),
|
|
377
383
|
children: /* @__PURE__ */ jsx2(SidebarContent, {})
|
|
378
384
|
}
|
|
379
385
|
),
|
|
380
|
-
/* @__PURE__ */ jsx2(
|
|
381
|
-
|
|
386
|
+
/* @__PURE__ */ jsx2(
|
|
387
|
+
"aside",
|
|
388
|
+
{
|
|
389
|
+
className: cn(
|
|
390
|
+
"fixed top-0 bottom-0 left-0 hidden w-64 flex-col border-border border-r bg-card/50 backdrop-blur-xl md:flex",
|
|
391
|
+
sidebarClassName
|
|
392
|
+
),
|
|
393
|
+
children: /* @__PURE__ */ jsx2(SidebarContent, {})
|
|
394
|
+
}
|
|
395
|
+
),
|
|
396
|
+
/* @__PURE__ */ jsx2("main", { className: cn("flex-1 pt-16 md:ml-64 md:pt-0", contentClassName), children: /* @__PURE__ */ jsx2("div", { className: "p-4 md:p-8", children: /* @__PURE__ */ jsx2("div", { className: "mx-auto max-w-6xl", children }) }) })
|
|
382
397
|
] });
|
|
383
398
|
}
|
|
384
399
|
|
|
@@ -28,7 +28,7 @@ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
|
|
|
28
28
|
var DialogContent = React.forwardRef(({ className, children, variant = "default", ...props }, ref) => {
|
|
29
29
|
const variants = {
|
|
30
30
|
default: "border-border",
|
|
31
|
-
sandbox: "border-
|
|
31
|
+
sandbox: "border-[var(--border-accent)] shadow-[var(--shadow-accent)]"
|
|
32
32
|
};
|
|
33
33
|
return /* @__PURE__ */ jsxs(DialogPortal, { children: [
|
|
34
34
|
/* @__PURE__ */ jsx(DialogOverlay, {}),
|
|
@@ -110,104 +110,18 @@ var DialogDescription = React.forwardRef(({ className, ...props }, ref) => /* @_
|
|
|
110
110
|
));
|
|
111
111
|
DialogDescription.displayName = DialogPrimitive.Description.displayName;
|
|
112
112
|
|
|
113
|
-
// src/primitives/input.tsx
|
|
114
|
-
import * as React2 from "react";
|
|
115
|
-
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
116
|
-
var Input = React2.forwardRef(
|
|
117
|
-
({ className, type, variant = "default", label, error, hint, id, ...props }, ref) => {
|
|
118
|
-
const inputId = id ?? label?.toLowerCase().replace(/\s+/g, "-");
|
|
119
|
-
const variants = {
|
|
120
|
-
default: "border-input focus:ring-ring",
|
|
121
|
-
sandbox: "border-purple-500/20 focus:border-purple-500/50 focus:ring-purple-500/20"
|
|
122
|
-
};
|
|
123
|
-
const input = /* @__PURE__ */ jsx2(
|
|
124
|
-
"input",
|
|
125
|
-
{
|
|
126
|
-
type,
|
|
127
|
-
id: inputId,
|
|
128
|
-
className: cn(
|
|
129
|
-
"flex h-11 w-full rounded-lg border bg-card/50 px-4 py-2 text-sm transition-all duration-200",
|
|
130
|
-
"placeholder:text-muted-foreground",
|
|
131
|
-
"focus:outline-none focus:ring-2 focus:ring-offset-0",
|
|
132
|
-
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
133
|
-
"file:border-0 file:bg-transparent file:font-medium file:text-sm",
|
|
134
|
-
error ? "border-red-500/50 focus:ring-red-500/20" : variants[variant],
|
|
135
|
-
className
|
|
136
|
-
),
|
|
137
|
-
ref,
|
|
138
|
-
...props
|
|
139
|
-
}
|
|
140
|
-
);
|
|
141
|
-
if (!label && !error && !hint) return input;
|
|
142
|
-
return /* @__PURE__ */ jsxs2("div", { className: "w-full space-y-1.5", children: [
|
|
143
|
-
label && /* @__PURE__ */ jsx2(
|
|
144
|
-
"label",
|
|
145
|
-
{
|
|
146
|
-
htmlFor: inputId,
|
|
147
|
-
className: "block font-medium text-muted-foreground text-sm",
|
|
148
|
-
children: label
|
|
149
|
-
}
|
|
150
|
-
),
|
|
151
|
-
input,
|
|
152
|
-
error && /* @__PURE__ */ jsx2("p", { className: "text-red-400 text-sm", children: error }),
|
|
153
|
-
hint && !error && /* @__PURE__ */ jsx2("p", { className: "text-muted-foreground/70 text-sm", children: hint })
|
|
154
|
-
] });
|
|
155
|
-
}
|
|
156
|
-
);
|
|
157
|
-
Input.displayName = "Input";
|
|
158
|
-
var Textarea = React2.forwardRef(
|
|
159
|
-
({ className, variant = "default", label, error, hint, id, ...props }, ref) => {
|
|
160
|
-
const textareaId = id ?? label?.toLowerCase().replace(/\s+/g, "-");
|
|
161
|
-
const variants = {
|
|
162
|
-
default: "border-input focus:ring-ring",
|
|
163
|
-
sandbox: "border-purple-500/20 focus:border-purple-500/50 focus:ring-purple-500/20"
|
|
164
|
-
};
|
|
165
|
-
const textarea = /* @__PURE__ */ jsx2(
|
|
166
|
-
"textarea",
|
|
167
|
-
{
|
|
168
|
-
id: textareaId,
|
|
169
|
-
className: cn(
|
|
170
|
-
"flex min-h-[120px] w-full resize-y rounded-lg border bg-card/50 px-4 py-3 text-sm transition-all duration-200",
|
|
171
|
-
"placeholder:text-muted-foreground",
|
|
172
|
-
"focus:outline-none focus:ring-2 focus:ring-offset-0",
|
|
173
|
-
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
174
|
-
error ? "border-red-500/50 focus:ring-red-500/20" : variants[variant],
|
|
175
|
-
className
|
|
176
|
-
),
|
|
177
|
-
ref,
|
|
178
|
-
...props
|
|
179
|
-
}
|
|
180
|
-
);
|
|
181
|
-
if (!label && !error && !hint) return textarea;
|
|
182
|
-
return /* @__PURE__ */ jsxs2("div", { className: "w-full space-y-1.5", children: [
|
|
183
|
-
label && /* @__PURE__ */ jsx2(
|
|
184
|
-
"label",
|
|
185
|
-
{
|
|
186
|
-
htmlFor: textareaId,
|
|
187
|
-
className: "block font-medium text-muted-foreground text-sm",
|
|
188
|
-
children: label
|
|
189
|
-
}
|
|
190
|
-
),
|
|
191
|
-
textarea,
|
|
192
|
-
error && /* @__PURE__ */ jsx2("p", { className: "text-red-400 text-sm", children: error }),
|
|
193
|
-
hint && !error && /* @__PURE__ */ jsx2("p", { className: "text-muted-foreground/70 text-sm", children: hint })
|
|
194
|
-
] });
|
|
195
|
-
}
|
|
196
|
-
);
|
|
197
|
-
Textarea.displayName = "Textarea";
|
|
198
|
-
|
|
199
113
|
// src/primitives/tabs.tsx
|
|
200
114
|
import * as TabsPrimitive from "@radix-ui/react-tabs";
|
|
201
|
-
import * as
|
|
202
|
-
import { jsx as
|
|
115
|
+
import * as React2 from "react";
|
|
116
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
203
117
|
var Tabs = TabsPrimitive.Root;
|
|
204
|
-
var TabsList =
|
|
118
|
+
var TabsList = React2.forwardRef(({ className, variant = "default", ...props }, ref) => {
|
|
205
119
|
const variants = {
|
|
206
120
|
default: "inline-flex h-10 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",
|
|
207
121
|
pills: "inline-flex items-center gap-2",
|
|
208
122
|
underline: "inline-flex items-center gap-4 border-b border-border"
|
|
209
123
|
};
|
|
210
|
-
return /* @__PURE__ */
|
|
124
|
+
return /* @__PURE__ */ jsx2(
|
|
211
125
|
TabsPrimitive.List,
|
|
212
126
|
{
|
|
213
127
|
ref,
|
|
@@ -217,13 +131,13 @@ var TabsList = React3.forwardRef(({ className, variant = "default", ...props },
|
|
|
217
131
|
);
|
|
218
132
|
});
|
|
219
133
|
TabsList.displayName = TabsPrimitive.List.displayName;
|
|
220
|
-
var TabsTrigger =
|
|
134
|
+
var TabsTrigger = React2.forwardRef(({ className, variant = "default", ...props }, ref) => {
|
|
221
135
|
const variants = {
|
|
222
136
|
default: "inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
|
|
223
137
|
pills: "inline-flex items-center justify-center whitespace-nowrap rounded-full px-4 py-2 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-primary data-[state=active]:text-primary-foreground data-[state=inactive]:text-muted-foreground data-[state=inactive]:hover:bg-muted",
|
|
224
138
|
underline: "inline-flex items-center justify-center whitespace-nowrap pb-3 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:text-foreground data-[state=inactive]:text-muted-foreground"
|
|
225
139
|
};
|
|
226
|
-
return /* @__PURE__ */
|
|
140
|
+
return /* @__PURE__ */ jsx2(
|
|
227
141
|
TabsPrimitive.Trigger,
|
|
228
142
|
{
|
|
229
143
|
ref,
|
|
@@ -233,7 +147,7 @@ var TabsTrigger = React3.forwardRef(({ className, variant = "default", ...props
|
|
|
233
147
|
);
|
|
234
148
|
});
|
|
235
149
|
TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
|
|
236
|
-
var TabsContent =
|
|
150
|
+
var TabsContent = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
|
|
237
151
|
TabsPrimitive.Content,
|
|
238
152
|
{
|
|
239
153
|
ref,
|
|
@@ -247,32 +161,6 @@ var TabsContent = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE
|
|
|
247
161
|
));
|
|
248
162
|
TabsContent.displayName = TabsPrimitive.Content.displayName;
|
|
249
163
|
|
|
250
|
-
// src/primitives/empty-state.tsx
|
|
251
|
-
import * as React4 from "react";
|
|
252
|
-
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
253
|
-
var EmptyState = React4.forwardRef(
|
|
254
|
-
({ className, icon, title, description, action, ...props }, ref) => {
|
|
255
|
-
return /* @__PURE__ */ jsxs3(
|
|
256
|
-
"div",
|
|
257
|
-
{
|
|
258
|
-
ref,
|
|
259
|
-
className: cn(
|
|
260
|
-
"flex flex-col items-center justify-center px-4 py-16 text-center",
|
|
261
|
-
className
|
|
262
|
-
),
|
|
263
|
-
...props,
|
|
264
|
-
children: [
|
|
265
|
-
icon && /* @__PURE__ */ jsx4("div", { className: "mb-4 rounded-full bg-muted p-4 text-muted-foreground", children: icon }),
|
|
266
|
-
/* @__PURE__ */ jsx4("h3", { className: "font-semibold text-lg", children: title }),
|
|
267
|
-
description && /* @__PURE__ */ jsx4("p", { className: "mt-2 max-w-sm text-muted-foreground text-sm", children: description }),
|
|
268
|
-
action && /* @__PURE__ */ jsx4("div", { className: "mt-6", children: action })
|
|
269
|
-
]
|
|
270
|
-
}
|
|
271
|
-
);
|
|
272
|
-
}
|
|
273
|
-
);
|
|
274
|
-
EmptyState.displayName = "EmptyState";
|
|
275
|
-
|
|
276
164
|
export {
|
|
277
165
|
Dialog,
|
|
278
166
|
DialogTrigger,
|
|
@@ -284,11 +172,8 @@ export {
|
|
|
284
172
|
DialogFooter,
|
|
285
173
|
DialogTitle,
|
|
286
174
|
DialogDescription,
|
|
287
|
-
Input,
|
|
288
|
-
Textarea,
|
|
289
175
|
Tabs,
|
|
290
176
|
TabsList,
|
|
291
177
|
TabsTrigger,
|
|
292
|
-
TabsContent
|
|
293
|
-
EmptyState
|
|
178
|
+
TabsContent
|
|
294
179
|
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "./chunk-RQHJBTEU.js";
|
|
4
|
+
|
|
5
|
+
// src/primitives/table.tsx
|
|
6
|
+
import * as React from "react";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
var Table = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx(
|
|
9
|
+
"table",
|
|
10
|
+
{
|
|
11
|
+
ref,
|
|
12
|
+
className: cn("w-full caption-bottom text-sm", className),
|
|
13
|
+
...props
|
|
14
|
+
}
|
|
15
|
+
) }));
|
|
16
|
+
Table.displayName = "Table";
|
|
17
|
+
var TableHeader = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
|
|
18
|
+
TableHeader.displayName = "TableHeader";
|
|
19
|
+
var TableBody = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
20
|
+
"tbody",
|
|
21
|
+
{
|
|
22
|
+
ref,
|
|
23
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
24
|
+
...props
|
|
25
|
+
}
|
|
26
|
+
));
|
|
27
|
+
TableBody.displayName = "TableBody";
|
|
28
|
+
var TableFooter = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
29
|
+
"tfoot",
|
|
30
|
+
{
|
|
31
|
+
ref,
|
|
32
|
+
className: cn(
|
|
33
|
+
"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
|
|
34
|
+
className
|
|
35
|
+
),
|
|
36
|
+
...props
|
|
37
|
+
}
|
|
38
|
+
));
|
|
39
|
+
TableFooter.displayName = "TableFooter";
|
|
40
|
+
var TableRow = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
41
|
+
"tr",
|
|
42
|
+
{
|
|
43
|
+
ref,
|
|
44
|
+
className: cn(
|
|
45
|
+
"border-border border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
|
|
46
|
+
className
|
|
47
|
+
),
|
|
48
|
+
...props
|
|
49
|
+
}
|
|
50
|
+
));
|
|
51
|
+
TableRow.displayName = "TableRow";
|
|
52
|
+
var TableHead = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
53
|
+
"th",
|
|
54
|
+
{
|
|
55
|
+
ref,
|
|
56
|
+
className: cn(
|
|
57
|
+
"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",
|
|
58
|
+
className
|
|
59
|
+
),
|
|
60
|
+
...props
|
|
61
|
+
}
|
|
62
|
+
));
|
|
63
|
+
TableHead.displayName = "TableHead";
|
|
64
|
+
var TableCell = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
65
|
+
"td",
|
|
66
|
+
{
|
|
67
|
+
ref,
|
|
68
|
+
className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className),
|
|
69
|
+
...props
|
|
70
|
+
}
|
|
71
|
+
));
|
|
72
|
+
TableCell.displayName = "TableCell";
|
|
73
|
+
var TableCaption = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
74
|
+
"caption",
|
|
75
|
+
{
|
|
76
|
+
ref,
|
|
77
|
+
className: cn("mt-4 text-muted-foreground text-sm", className),
|
|
78
|
+
...props
|
|
79
|
+
}
|
|
80
|
+
));
|
|
81
|
+
TableCaption.displayName = "TableCaption";
|
|
82
|
+
|
|
83
|
+
export {
|
|
84
|
+
Table,
|
|
85
|
+
TableHeader,
|
|
86
|
+
TableBody,
|
|
87
|
+
TableFooter,
|
|
88
|
+
TableRow,
|
|
89
|
+
TableHead,
|
|
90
|
+
TableCell,
|
|
91
|
+
TableCaption
|
|
92
|
+
};
|