@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.
Files changed (68) hide show
  1. package/README.md +201 -10
  2. package/dist/auth.js +2 -2
  3. package/dist/chat-container-C8eHLw8z.d.ts +67 -0
  4. package/dist/chat.d.ts +70 -78
  5. package/dist/chat.js +8 -8
  6. package/dist/chunk-4F2GJRGU.js +756 -0
  7. package/dist/{chunk-HYEAX3DC.js → chunk-5LV6DZZF.js} +445 -114
  8. package/dist/chunk-67C53XVV.js +1106 -0
  9. package/dist/{chunk-QSQBDR3N.js → chunk-BX6AQMUS.js} +5 -2
  10. package/dist/chunk-CCKNIAS7.js +124 -0
  11. package/dist/chunk-CJ2RYVZH.js +128 -0
  12. package/dist/{chunk-KMXV7DDX.js → chunk-CNWVHQFY.js} +1 -1
  13. package/dist/{chunk-OU4TRNQZ.js → chunk-COCSO7FG.js} +3 -3
  14. package/dist/chunk-FJSVPBKY.js +85 -0
  15. package/dist/chunk-FRGMMANX.js +102 -0
  16. package/dist/{chunk-E6FS7R4X.js → chunk-HWLX5NME.js} +1 -1
  17. package/dist/chunk-JF6E2DS5.js +610 -0
  18. package/dist/chunk-MUOL44AE.js +121 -0
  19. package/dist/chunk-MXCSSOGH.js +105 -0
  20. package/dist/{chunk-J4OADEUK.js → chunk-OM6ON27W.js} +24 -9
  21. package/dist/{chunk-NI2EI43H.js → chunk-PDV7W4NY.js} +9 -124
  22. package/dist/chunk-TQN3VR4F.js +92 -0
  23. package/dist/{chunk-SOT2V7TX.js → chunk-TXI4MZAZ.js} +62 -144
  24. package/dist/chunk-WUR652Y3.js +1140 -0
  25. package/dist/chunk-YDBXQQLC.js +336 -0
  26. package/dist/{chunk-4EIWPJMJ.js → chunk-ZP6GSX4D.js} +36 -27
  27. package/dist/dashboard.d.ts +5 -2
  28. package/dist/dashboard.js +5 -4
  29. package/dist/{expanded-tool-detail-OkXGqTHe.d.ts → expanded-tool-detail-BDi_h_dZ.d.ts} +11 -4
  30. package/dist/file-tabs-CmaoDVBI.d.ts +72 -0
  31. package/dist/files.d.ts +25 -44
  32. package/dist/files.js +8 -3
  33. package/{src/styles → dist}/globals.css +16 -67
  34. package/dist/hooks.d.ts +5 -4
  35. package/dist/hooks.js +14 -9
  36. package/dist/index.d.ts +38 -9
  37. package/dist/index.js +100 -126
  38. package/dist/markdown.d.ts +1 -24
  39. package/dist/markdown.js +1 -7
  40. package/dist/openui.d.ts +115 -0
  41. package/dist/openui.js +11 -0
  42. package/dist/pages.d.ts +3 -2
  43. package/dist/pages.js +19 -16
  44. package/dist/primitives.d.ts +8 -1
  45. package/dist/primitives.js +25 -19
  46. package/dist/run.d.ts +2 -2
  47. package/dist/run.js +8 -7
  48. package/dist/{use-sidecar-auth-Bb0-w3lX.d.ts → sdk-hooks.d.ts} +61 -72
  49. package/dist/sdk-hooks.js +29 -0
  50. package/dist/styles.css +179 -0
  51. package/dist/tokens.css +165 -0
  52. package/dist/{tool-display-BvsVW_Ur.d.ts → tool-display-Ct9nFAzJ.d.ts} +1 -1
  53. package/dist/types.d.ts +1 -1
  54. package/dist/{usage-chart-DINgSVL5.d.ts → usage-chart-CY9xo3KX.d.ts} +8 -3
  55. package/dist/use-pty-session-DeZSxOCN.d.ts +69 -0
  56. package/dist/utils.d.ts +1 -1
  57. package/dist/utils.js +1 -1
  58. package/dist/workspace.d.ts +171 -33
  59. package/dist/workspace.js +25 -1
  60. package/package.json +10 -3
  61. package/dist/chunk-2UHPE5T7.js +0 -201
  62. package/dist/chunk-6MQIDUPA.js +0 -502
  63. package/dist/chunk-KYY2X6LY.js +0 -318
  64. package/dist/chunk-L6ZDH5F4.js +0 -334
  65. package/dist/chunk-M34OA6PQ.js +0 -233
  66. package/dist/chunk-M6VLC32S.js +0 -219
  67. package/dist/chunk-U62G5TS7.js +0 -472
  68. 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-2UHPE5T7.js";
14
+ } from "./chunk-FRGMMANX.js";
15
+ import {
16
+ Badge
17
+ } from "./chunk-MXCSSOGH.js";
16
18
  import {
17
19
  Button
18
- } from "./chunk-E6FS7R4X.js";
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-purple-500/10 text-purple-400",
114
- userGradient: "from-purple-500 to-violet-500"
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 bg-gradient-to-r",
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("aside", { className: "fixed top-0 bottom-0 left-0 hidden w-64 flex-col border-border border-r bg-card/50 backdrop-blur-xl md:flex", children: /* @__PURE__ */ jsx2(SidebarContent, {}) }),
381
- /* @__PURE__ */ jsx2("main", { className: "flex-1 pt-16 md:ml-64 md:pt-0", children: /* @__PURE__ */ jsx2("div", { className: "p-4 md:p-8", children: /* @__PURE__ */ jsx2("div", { className: "mx-auto max-w-6xl", children }) }) })
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-purple-500/20 shadow-lg shadow-purple-500/10"
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 React3 from "react";
202
- import { jsx as jsx3 } from "react/jsx-runtime";
115
+ import * as React2 from "react";
116
+ import { jsx as jsx2 } from "react/jsx-runtime";
203
117
  var Tabs = TabsPrimitive.Root;
204
- var TabsList = React3.forwardRef(({ className, variant = "default", ...props }, ref) => {
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__ */ jsx3(
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 = React3.forwardRef(({ className, variant = "default", ...props }, ref) => {
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__ */ jsx3(
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 = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx3(
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
+ };