@tangle-network/sandbox-ui 0.14.0 → 0.15.1

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 (104) hide show
  1. package/dist/auth.d.ts +1 -74
  2. package/dist/auth.js +1 -4
  3. package/dist/chat.d.ts +1 -136
  4. package/dist/chat.js +2 -15
  5. package/dist/chunk-2BUPSB7O.js +0 -0
  6. package/dist/chunk-3J6FG3FJ.js +18 -0
  7. package/dist/chunk-76IQLPW2.js +206 -0
  8. package/dist/chunk-7ZA5SEK3.js +239 -0
  9. package/dist/chunk-AHBZCBDO.js +2960 -0
  10. package/dist/chunk-AZ3AWMTM.js +8 -0
  11. package/dist/chunk-CMY7W45U.js +380 -0
  12. package/dist/{chunk-QMU2PWOU.js → chunk-DNZ4DTNA.js} +71 -17
  13. package/dist/chunk-EI44GEQ5.js +6 -0
  14. package/dist/{chunk-5OQ27N57.js → chunk-GPT7VKK6.js} +34 -38
  15. package/dist/chunk-JBGKGLD7.js +16 -0
  16. package/dist/chunk-NJNME4J4.js +14 -0
  17. package/dist/chunk-QPAJR74X.js +20 -0
  18. package/dist/chunk-TK46XFLM.js +28 -0
  19. package/dist/chunk-WID73FPH.js +89 -0
  20. package/dist/chunk-YVXK4XRO.js +30 -0
  21. package/dist/dashboard.d.ts +538 -4
  22. package/dist/dashboard.js +15 -886
  23. package/dist/editor.d.ts +1 -120
  24. package/dist/editor.js +1 -5
  25. package/dist/files.d.ts +1 -129
  26. package/dist/files.js +2 -7
  27. package/dist/globals.css +2 -1265
  28. package/dist/hooks.d.ts +114 -11
  29. package/dist/hooks.js +17 -88
  30. package/dist/index.d.ts +24 -99
  31. package/dist/index.js +247 -252
  32. package/dist/markdown.d.ts +1 -29
  33. package/dist/markdown.js +2 -2
  34. package/dist/openui.d.ts +8 -115
  35. package/dist/openui.js +1 -6
  36. package/dist/pages.d.ts +1 -2
  37. package/dist/pages.js +68 -66
  38. package/dist/primitives.d.ts +14 -49
  39. package/dist/primitives.js +69 -77
  40. package/dist/run.d.ts +1 -14
  41. package/dist/run.js +2 -22
  42. package/dist/sdk-hooks.d.ts +3 -283
  43. package/dist/sdk-hooks.js +10 -14
  44. package/dist/stores.d.ts +2 -14
  45. package/dist/stores.js +11 -39
  46. package/dist/styles.css +2 -1265
  47. package/dist/{usage-chart-CPTcNlGs.d.ts → template-card-UhV3pmRC.d.ts} +16 -1
  48. package/dist/types.d.ts +11 -8
  49. package/dist/types.js +1 -0
  50. package/dist/utils.d.ts +1 -44
  51. package/dist/utils.js +6 -12
  52. package/dist/workspace.d.ts +5 -10
  53. package/dist/workspace.js +3 -19
  54. package/package.json +19 -54
  55. package/dist/active-sessions-store-CeOmXgv5.d.ts +0 -85
  56. package/dist/artifact-pane-Bh45Ssco.d.ts +0 -24
  57. package/dist/branding-DCi5VEik.d.ts +0 -13
  58. package/dist/button-CMQuQEW_.d.ts +0 -17
  59. package/dist/chat-container-f4yEs6KN.d.ts +0 -106
  60. package/dist/chunk-34A66VBG.js +0 -214
  61. package/dist/chunk-34I7UFSX.js +0 -92
  62. package/dist/chunk-36QY2W5G.js +0 -802
  63. package/dist/chunk-4CLN43XT.js +0 -45
  64. package/dist/chunk-54SQQMMM.js +0 -156
  65. package/dist/chunk-66EZOYZR.js +0 -102
  66. package/dist/chunk-BX6AQMUS.js +0 -183
  67. package/dist/chunk-DI3NZ5ZX.js +0 -192
  68. package/dist/chunk-DPGIXDAI.js +0 -220
  69. package/dist/chunk-DXMIEK4K.js +0 -1426
  70. package/dist/chunk-GSZA3TSY.js +0 -79
  71. package/dist/chunk-HB5Y37YU.js +0 -54
  72. package/dist/chunk-LQNEZDRM.js +0 -109
  73. package/dist/chunk-MA7YKRUP.js +0 -131
  74. package/dist/chunk-MKTSMWVD.js +0 -109
  75. package/dist/chunk-MQXABZTB.js +0 -1348
  76. package/dist/chunk-MT5FJ3ZT.js +0 -186
  77. package/dist/chunk-NKUPJC34.js +0 -2070
  78. package/dist/chunk-OEX7NZE3.js +0 -321
  79. package/dist/chunk-OKLQVY3Y.js +0 -139
  80. package/dist/chunk-Q56BYXQF.js +0 -61
  81. package/dist/chunk-QD4QE5P5.js +0 -40
  82. package/dist/chunk-QDH5GEGY.js +0 -630
  83. package/dist/chunk-QID2OOMG.js +0 -133
  84. package/dist/chunk-RQHJBTEU.js +0 -10
  85. package/dist/chunk-T7HMZEVO.js +0 -216
  86. package/dist/chunk-U6QTHMY6.js +0 -1290
  87. package/dist/chunk-US6JKJKH.js +0 -124
  88. package/dist/chunk-VX3XOUEB.js +0 -63
  89. package/dist/chunk-XLG757B6.js +0 -933
  90. package/dist/chunk-ZMNSRDMH.js +0 -127
  91. package/dist/chunk-ZNCEM5CD.js +0 -316
  92. package/dist/document-editor-pane-A70-EhdQ.d.ts +0 -124
  93. package/dist/document-editor-pane-TLPVRBBU.js +0 -11
  94. package/dist/expanded-tool-detail-Dh99mcbY.d.ts +0 -63
  95. package/dist/file-tabs-BLfxfmAH.d.ts +0 -51
  96. package/dist/parts-CyGkM6Fp.d.ts +0 -50
  97. package/dist/run-CtFZ6s-D.d.ts +0 -41
  98. package/dist/sidebar-drop-zone-tDBsuOH5.d.ts +0 -301
  99. package/dist/sidecar-CFU2W9j1.d.ts +0 -8
  100. package/dist/template-card-BAtvcAkU.d.ts +0 -18
  101. package/dist/tool-call-feed-Bs3MyQMT.d.ts +0 -68
  102. package/dist/tool-display-Ct9nFAzJ.d.ts +0 -32
  103. package/dist/use-sandbox-metrics-DWc0k9Xm.d.ts +0 -153
  104. package/dist/variant-list-BrHYcBCk.d.ts +0 -540
@@ -1,29 +1 @@
1
- import * as React from 'react';
2
- import { HTMLAttributes, ReactNode } from 'react';
3
- import * as react_jsx_runtime from 'react/jsx-runtime';
4
-
5
- interface CodeBlockProps extends HTMLAttributes<HTMLDivElement> {
6
- code: string;
7
- language?: string;
8
- showLineNumbers?: boolean;
9
- /** Force light theme; defaults to dark */
10
- light?: boolean;
11
- children?: ReactNode;
12
- }
13
- declare const CodeBlock: React.MemoExoticComponent<({ code, language, showLineNumbers, light: lightProp, className, children, ...props }: CodeBlockProps) => react_jsx_runtime.JSX.Element>;
14
- /** Copy-to-clipboard button for use inside CodeBlock. */
15
- declare const CopyButton: React.MemoExoticComponent<({ text }: {
16
- text: string;
17
- }) => react_jsx_runtime.JSX.Element>;
18
-
19
- interface MarkdownProps {
20
- children: string;
21
- className?: string;
22
- }
23
- /**
24
- * Renders Markdown content with GFM support, XSS sanitisation, and
25
- * custom code block rendering via our CodeBlock component.
26
- */
27
- declare const Markdown: React.MemoExoticComponent<({ children, className }: MarkdownProps) => react_jsx_runtime.JSX.Element>;
28
-
29
- export { CodeBlock, type CodeBlockProps, CopyButton, Markdown, type MarkdownProps };
1
+ export { CodeBlock, CodeBlockProps, CopyButton, Markdown, MarkdownProps } from '@tangle-network/ui/markdown';
package/dist/markdown.js CHANGED
@@ -1,9 +1,9 @@
1
+ // src/markdown/index.ts
1
2
  import {
2
3
  CodeBlock,
3
4
  CopyButton,
4
5
  Markdown
5
- } from "./chunk-T7HMZEVO.js";
6
- import "./chunk-RQHJBTEU.js";
6
+ } from "@tangle-network/ui/markdown";
7
7
  export {
8
8
  CodeBlock,
9
9
  CopyButton,
package/dist/openui.d.ts CHANGED
@@ -1,115 +1,8 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { ReactNode } from 'react';
3
-
4
- type OpenUIPrimitive = string | number | boolean | null | undefined;
5
- interface OpenUIAction {
6
- id: string;
7
- label: string;
8
- tone?: "default" | "secondary" | "outline" | "ghost" | "destructive";
9
- disabled?: boolean;
10
- onPress?: () => void;
11
- }
12
- interface OpenUIBaseNode {
13
- id?: string;
14
- }
15
- interface OpenUIHeadingNode extends OpenUIBaseNode {
16
- type: "heading";
17
- text: string;
18
- level?: 1 | 2 | 3 | 4;
19
- kicker?: string;
20
- meta?: string;
21
- }
22
- interface OpenUITextNode extends OpenUIBaseNode {
23
- type: "text";
24
- text: string;
25
- tone?: "default" | "muted" | "success" | "warning" | "error";
26
- mono?: boolean;
27
- }
28
- interface OpenUIBadgeNode extends OpenUIBaseNode {
29
- type: "badge";
30
- label: string;
31
- tone?: "default" | "secondary" | "success" | "warning" | "error" | "info" | "sandbox";
32
- }
33
- interface OpenUIStatNode extends OpenUIBaseNode {
34
- type: "stat";
35
- label: string;
36
- value: string;
37
- change?: string;
38
- tone?: "default" | "success" | "warning" | "error" | "info";
39
- }
40
- interface OpenUIKeyValueNode extends OpenUIBaseNode {
41
- type: "key_value";
42
- items: Array<{
43
- id?: string;
44
- label: string;
45
- value: ReactNode | OpenUIPrimitive;
46
- tone?: "default" | "muted";
47
- }>;
48
- }
49
- interface OpenUICodeNode extends OpenUIBaseNode {
50
- type: "code";
51
- code: string;
52
- language?: string;
53
- title?: string;
54
- showLineNumbers?: boolean;
55
- }
56
- interface OpenUIMarkdownNode extends OpenUIBaseNode {
57
- type: "markdown";
58
- content: string;
59
- }
60
- interface OpenUITableNode extends OpenUIBaseNode {
61
- type: "table";
62
- columns: Array<{
63
- key: string;
64
- header: string;
65
- align?: "left" | "right";
66
- }>;
67
- rows: Array<Record<string, ReactNode | OpenUIPrimitive>>;
68
- caption?: string;
69
- }
70
- interface OpenUIActionsNode extends OpenUIBaseNode {
71
- type: "actions";
72
- actions: OpenUIAction[];
73
- }
74
- interface OpenUISeparatorNode extends OpenUIBaseNode {
75
- type: "separator";
76
- label?: string;
77
- }
78
- interface OpenUIStackNode extends OpenUIBaseNode {
79
- type: "stack";
80
- direction?: "row" | "column";
81
- gap?: "sm" | "md" | "lg";
82
- align?: "start" | "center" | "end" | "stretch";
83
- wrap?: boolean;
84
- children: OpenUIComponentNode[];
85
- }
86
- interface OpenUIGridNode extends OpenUIBaseNode {
87
- type: "grid";
88
- columns?: 1 | 2 | 3 | 4;
89
- gap?: "sm" | "md" | "lg";
90
- children: OpenUIComponentNode[];
91
- }
92
- interface OpenUICardNode extends OpenUIBaseNode {
93
- type: "card";
94
- title?: string;
95
- description?: string;
96
- eyebrow?: string;
97
- badge?: OpenUIBadgeNode;
98
- actions?: OpenUIAction[];
99
- children?: OpenUIComponentNode[];
100
- }
101
- type OpenUIComponentNode = OpenUIActionsNode | OpenUIBadgeNode | OpenUICardNode | OpenUICodeNode | OpenUIGridNode | OpenUIHeadingNode | OpenUIKeyValueNode | OpenUIMarkdownNode | OpenUISeparatorNode | OpenUIStackNode | OpenUIStatNode | OpenUITableNode | OpenUITextNode;
102
- interface OpenUIArtifactRendererProps {
103
- schema: OpenUIComponentNode | OpenUIComponentNode[];
104
- onAction?: (action: OpenUIAction) => void;
105
- className?: string;
106
- }
107
- /**
108
- * OpenUIArtifactRenderer — contained renderer for OpenUI-like structured
109
- * artifact payloads using sandbox-ui primitives and theme tokens. This is an
110
- * extension surface for generated inspectors/results, not a replacement for
111
- * the sandbox shell.
112
- */
113
- declare function OpenUIArtifactRenderer({ schema, onAction, className, }: OpenUIArtifactRendererProps): react_jsx_runtime.JSX.Element;
114
-
115
- export { type OpenUIAction, type OpenUIActionsNode, OpenUIArtifactRenderer, type OpenUIArtifactRendererProps, type OpenUIBadgeNode, type OpenUICardNode, type OpenUICodeNode, type OpenUIComponentNode, type OpenUIGridNode, type OpenUIHeadingNode, type OpenUIKeyValueNode, type OpenUIMarkdownNode, type OpenUIPrimitive, type OpenUISeparatorNode, type OpenUIStackNode, type OpenUIStatNode, type OpenUITableNode, type OpenUITextNode };
1
+ export { OpenUIAction, OpenUIActionsNode, OpenUIArtifactRenderer, OpenUIArtifactRendererProps, OpenUIBadgeNode, OpenUICardNode, OpenUICodeNode, OpenUIComponentNode, OpenUIGridNode, OpenUIHeadingNode, OpenUIKeyValueNode, OpenUIMarkdownNode, OpenUIPrimitive, OpenUISeparatorNode, OpenUIStackNode, OpenUIStatNode, OpenUITableNode, OpenUITextNode } from '@tangle-network/ui/openui';
2
+ import '@tangle-network/ui/chat';
3
+ import '@tangle-network/ui/editor';
4
+ import '@tangle-network/ui/run';
5
+ import '@tangle-network/ui/files';
6
+ import '@tangle-network/ui/auth';
7
+ import '@tangle-network/ui/utils';
8
+ import '@tangle-network/ui/markdown';
package/dist/openui.js CHANGED
@@ -1,11 +1,6 @@
1
1
  import {
2
2
  OpenUIArtifactRenderer
3
- } from "./chunk-ZNCEM5CD.js";
4
- import "./chunk-34I7UFSX.js";
5
- import "./chunk-T7HMZEVO.js";
6
- import "./chunk-ZMNSRDMH.js";
7
- import "./chunk-MKTSMWVD.js";
8
- import "./chunk-RQHJBTEU.js";
3
+ } from "./chunk-AZ3AWMTM.js";
9
4
  export {
10
5
  OpenUIArtifactRenderer
11
6
  };
package/dist/pages.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { B as BillingSubscription, a as BillingBalance, b as BillingUsage, U as UsageDataPoint, P as PricingTier } from './usage-chart-CPTcNlGs.js';
2
+ import { c as BillingSubscription, B as BillingBalance, d as BillingUsage, j as UsageDataPoint, f as PricingTier, g as TemplateCardData } from './template-card-UhV3pmRC.js';
3
3
  import * as React from 'react';
4
- import { T as TemplateCardData } from './template-card-BAtvcAkU.js';
5
4
 
6
5
  type ProductVariant$1 = "sandbox";
7
6
  interface BillingPageData {
package/dist/pages.js CHANGED
@@ -1,47 +1,18 @@
1
- import {
2
- Dialog,
3
- DialogContent,
4
- DialogDescription,
5
- DialogFooter,
6
- DialogHeader,
7
- DialogTitle
8
- } from "./chunk-US6JKJKH.js";
9
- import {
10
- Tabs,
11
- TabsContent,
12
- TabsList,
13
- TabsTrigger
14
- } from "./chunk-Q56BYXQF.js";
15
- import {
16
- EmptyState,
17
- Input
18
- } from "./chunk-MA7YKRUP.js";
19
- import {
20
- InfoPanel,
21
- TemplateCard
22
- } from "./chunk-VX3XOUEB.js";
23
1
  import {
24
2
  BillingDashboard,
3
+ InfoPanel,
25
4
  PricingPage,
5
+ TemplateCard,
26
6
  UsageChart
27
- } from "./chunk-QMU2PWOU.js";
28
- import {
29
- Skeleton,
30
- SkeletonCard
31
- } from "./chunk-66EZOYZR.js";
32
- import {
33
- Badge,
34
- Card
35
- } from "./chunk-ZMNSRDMH.js";
36
- import {
37
- Button
38
- } from "./chunk-MKTSMWVD.js";
7
+ } from "./chunk-DNZ4DTNA.js";
39
8
  import {
40
9
  cn
41
- } from "./chunk-RQHJBTEU.js";
10
+ } from "./chunk-EI44GEQ5.js";
42
11
 
43
12
  // src/pages/billing-page.tsx
44
13
  import * as React from "react";
14
+ import { Skeleton, SkeletonCard } from "@tangle-network/ui/primitives";
15
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@tangle-network/ui/primitives";
45
16
  import { jsx, jsxs } from "react/jsx-runtime";
46
17
  var defaultBillingData = {
47
18
  subscription: null,
@@ -1400,6 +1371,7 @@ function ProvisioningWizard({
1400
1371
 
1401
1372
  // src/pages/pricing-page.tsx
1402
1373
  import * as React3 from "react";
1374
+ import { Skeleton as Skeleton2, SkeletonCard as SkeletonCard2 } from "@tangle-network/ui/primitives";
1403
1375
  import { ChevronDown } from "lucide-react";
1404
1376
  import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
1405
1377
  async function fetchTiersFromApi(apiBasePath) {
@@ -1493,13 +1465,13 @@ function StandalonePricingPage({
1493
1465
  ] }),
1494
1466
  state.loading ? /* @__PURE__ */ jsxs3("div", { className: "space-y-8", children: [
1495
1467
  /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-center gap-4", children: [
1496
- /* @__PURE__ */ jsx3(Skeleton, { className: "h-10 w-24" }),
1497
- /* @__PURE__ */ jsx3(Skeleton, { className: "h-10 w-24" })
1468
+ /* @__PURE__ */ jsx3(Skeleton2, { className: "h-10 w-24" }),
1469
+ /* @__PURE__ */ jsx3(Skeleton2, { className: "h-10 w-24" })
1498
1470
  ] }),
1499
1471
  /* @__PURE__ */ jsxs3("div", { className: "grid grid-cols-1 gap-6 lg:grid-cols-3", children: [
1500
- /* @__PURE__ */ jsx3(SkeletonCard, { className: "h-[500px]" }),
1501
- /* @__PURE__ */ jsx3(SkeletonCard, { className: "h-[500px]" }),
1502
- /* @__PURE__ */ jsx3(SkeletonCard, { className: "h-[500px]" })
1472
+ /* @__PURE__ */ jsx3(SkeletonCard2, { className: "h-[500px]" }),
1473
+ /* @__PURE__ */ jsx3(SkeletonCard2, { className: "h-[500px]" }),
1474
+ /* @__PURE__ */ jsx3(SkeletonCard2, { className: "h-[500px]" })
1503
1475
  ] })
1504
1476
  ] }) : state.error ? /* @__PURE__ */ jsxs3("div", { className: "flex flex-col items-center justify-center space-y-4 rounded-xl border border-destructive/20 bg-destructive/5 p-8 text-center", children: [
1505
1477
  /* @__PURE__ */ jsx3("p", { className: "text-destructive text-sm font-medium", children: state.error }),
@@ -1549,6 +1521,19 @@ import {
1549
1521
  Trash2 as Trash22
1550
1522
  } from "lucide-react";
1551
1523
  import * as React4 from "react";
1524
+ import { Button } from "@tangle-network/ui/primitives";
1525
+ import { Badge } from "@tangle-network/ui/primitives";
1526
+ import { Card } from "@tangle-network/ui/primitives";
1527
+ import {
1528
+ Dialog,
1529
+ DialogContent,
1530
+ DialogDescription,
1531
+ DialogFooter,
1532
+ DialogHeader,
1533
+ DialogTitle
1534
+ } from "@tangle-network/ui/primitives";
1535
+ import { EmptyState } from "@tangle-network/ui/primitives";
1536
+ import { Input } from "@tangle-network/ui/primitives";
1552
1537
  import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
1553
1538
  var TIER_LIMITS = {
1554
1539
  free: 3,
@@ -2177,6 +2162,14 @@ function ProfileDetailDialog({
2177
2162
  // src/pages/secrets-page.tsx
2178
2163
  import * as React5 from "react";
2179
2164
  import { Lock, Plus as Plus3, Trash2 as Trash23, Eye, EyeOff, AlertCircle as AlertCircle2, Key, Shield, CheckCircle, Users, ArrowRight } from "lucide-react";
2165
+ import {
2166
+ Dialog as Dialog2,
2167
+ DialogContent as DialogContent2,
2168
+ DialogDescription as DialogDescription2,
2169
+ DialogFooter as DialogFooter2,
2170
+ DialogHeader as DialogHeader2,
2171
+ DialogTitle as DialogTitle2
2172
+ } from "@tangle-network/ui/primitives";
2180
2173
  import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
2181
2174
  function SecretsPage({ apiClient, className, teamSecretsHint }) {
2182
2175
  const [secrets, setSecrets] = React5.useState([]);
@@ -2318,7 +2311,7 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2318
2311
  /* @__PURE__ */ jsx5(AlertCircle2, { className: "h-5 w-5 text-destructive shrink-0" }),
2319
2312
  /* @__PURE__ */ jsx5("p", { className: "text-destructive text-sm font-medium", children: error })
2320
2313
  ] }),
2321
- /* @__PURE__ */ jsx5(Dialog, { open: isCreateOpen, onOpenChange: (open) => {
2314
+ /* @__PURE__ */ jsx5(Dialog2, { open: isCreateOpen, onOpenChange: (open) => {
2322
2315
  if (!open) {
2323
2316
  setIsCreateOpen(false);
2324
2317
  setNewName("");
@@ -2326,10 +2319,10 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2326
2319
  setCreateError(null);
2327
2320
  setShowValue(false);
2328
2321
  }
2329
- }, children: /* @__PURE__ */ jsxs5(DialogContent, { className: "max-w-md", children: [
2330
- /* @__PURE__ */ jsxs5(DialogHeader, { children: [
2331
- /* @__PURE__ */ jsx5(DialogTitle, { children: "Create Secret" }),
2332
- /* @__PURE__ */ jsx5(DialogDescription, { children: "Secrets are automatically exposed as environment variables across all your new sandboxes." })
2322
+ }, children: /* @__PURE__ */ jsxs5(DialogContent2, { className: "max-w-md", children: [
2323
+ /* @__PURE__ */ jsxs5(DialogHeader2, { children: [
2324
+ /* @__PURE__ */ jsx5(DialogTitle2, { children: "Create Secret" }),
2325
+ /* @__PURE__ */ jsx5(DialogDescription2, { children: "Secrets are automatically exposed as environment variables across all your new sandboxes." })
2333
2326
  ] }),
2334
2327
  /* @__PURE__ */ jsxs5(
2335
2328
  "form",
@@ -2390,7 +2383,7 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2390
2383
  }
2391
2384
  ),
2392
2385
  createError && /* @__PURE__ */ jsx5("p", { className: "mt-3 text-sm text-destructive", children: createError }),
2393
- /* @__PURE__ */ jsxs5(DialogFooter, { children: [
2386
+ /* @__PURE__ */ jsxs5(DialogFooter2, { children: [
2394
2387
  /* @__PURE__ */ jsx5(
2395
2388
  "button",
2396
2389
  {
@@ -2417,18 +2410,18 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2417
2410
  )
2418
2411
  ] })
2419
2412
  ] }) }),
2420
- /* @__PURE__ */ jsx5(Dialog, { open: !!deleteTarget, onOpenChange: (open) => {
2413
+ /* @__PURE__ */ jsx5(Dialog2, { open: !!deleteTarget, onOpenChange: (open) => {
2421
2414
  if (!open) setDeleteTarget(null);
2422
- }, children: /* @__PURE__ */ jsxs5(DialogContent, { className: "max-w-sm", children: [
2423
- /* @__PURE__ */ jsxs5(DialogHeader, { children: [
2424
- /* @__PURE__ */ jsx5(DialogTitle, { children: "Delete Secret?" }),
2425
- /* @__PURE__ */ jsxs5(DialogDescription, { children: [
2415
+ }, children: /* @__PURE__ */ jsxs5(DialogContent2, { className: "max-w-sm", children: [
2416
+ /* @__PURE__ */ jsxs5(DialogHeader2, { children: [
2417
+ /* @__PURE__ */ jsx5(DialogTitle2, { children: "Delete Secret?" }),
2418
+ /* @__PURE__ */ jsxs5(DialogDescription2, { children: [
2426
2419
  "This will permanently delete ",
2427
2420
  /* @__PURE__ */ jsx5("span", { className: "font-mono font-bold text-foreground", children: deleteTarget }),
2428
2421
  ". Sandboxes using this secret will lose access to it."
2429
2422
  ] })
2430
2423
  ] }),
2431
- /* @__PURE__ */ jsxs5(DialogFooter, { children: [
2424
+ /* @__PURE__ */ jsxs5(DialogFooter2, { children: [
2432
2425
  /* @__PURE__ */ jsx5(
2433
2426
  "button",
2434
2427
  {
@@ -2524,6 +2517,7 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
2524
2517
 
2525
2518
  // src/pages/templates-page.tsx
2526
2519
  import { Layers as Layers2 } from "lucide-react";
2520
+ import { Skeleton as Skeleton3 } from "@tangle-network/ui/primitives";
2527
2521
  import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
2528
2522
  function TemplatesPage({ templates, loading = false, onUseTemplate, className }) {
2529
2523
  return /* @__PURE__ */ jsxs6("div", { className: cn("space-y-8", className), children: [
@@ -2531,7 +2525,7 @@ function TemplatesPage({ templates, loading = false, onUseTemplate, className })
2531
2525
  /* @__PURE__ */ jsx6("h1", { className: "font-bold text-3xl text-foreground", children: "Templates" }),
2532
2526
  /* @__PURE__ */ jsx6("p", { className: "mt-1 text-muted-foreground", children: "Pre-configured environments to get started quickly" })
2533
2527
  ] }),
2534
- loading || !templates ? /* @__PURE__ */ jsx6("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3", children: Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ jsx6(Skeleton, { className: "h-56 rounded-2xl" }, i)) }) : templates.length === 0 ? /* @__PURE__ */ jsxs6("div", { className: "rounded-2xl border border-border bg-card p-16 text-center", children: [
2528
+ loading || !templates ? /* @__PURE__ */ jsx6("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3", children: Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ jsx6(Skeleton3, { className: "h-56 rounded-2xl" }, i)) }) : templates.length === 0 ? /* @__PURE__ */ jsxs6("div", { className: "rounded-2xl border border-border bg-card p-16 text-center", children: [
2535
2529
  /* @__PURE__ */ jsx6(Layers2, { className: "mx-auto mb-3 h-10 w-10 text-muted-foreground" }),
2536
2530
  /* @__PURE__ */ jsx6("p", { className: "text-sm font-medium text-foreground mb-1", children: "No templates available" }),
2537
2531
  /* @__PURE__ */ jsx6("p", { className: "text-sm text-muted-foreground", children: "Check back later for pre-configured environments." })
@@ -2567,6 +2561,14 @@ import {
2567
2561
  MemoryStick,
2568
2562
  Layers as Layers3
2569
2563
  } from "lucide-react";
2564
+ import {
2565
+ Dialog as Dialog3,
2566
+ DialogContent as DialogContent3,
2567
+ DialogDescription as DialogDescription3,
2568
+ DialogFooter as DialogFooter3,
2569
+ DialogHeader as DialogHeader3,
2570
+ DialogTitle as DialogTitle3
2571
+ } from "@tangle-network/ui/primitives";
2570
2572
  import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
2571
2573
  var SCRIPT_TYPE_META = {
2572
2574
  bash: {
@@ -2937,7 +2939,7 @@ function StartupScriptsPage({ apiClient, className }) {
2937
2939
  /* @__PURE__ */ jsx7(AlertCircle3, { className: "h-5 w-5 shrink-0 text-destructive" }),
2938
2940
  /* @__PURE__ */ jsx7("p", { className: "text-sm font-medium text-destructive", children: error })
2939
2941
  ] }),
2940
- /* @__PURE__ */ jsx7(Dialog, { open: isDialogOpen, onOpenChange: setIsDialogOpen, children: /* @__PURE__ */ jsxs7(DialogContent, { className: "max-w-2xl max-h-[90vh] overflow-y-auto", children: [
2942
+ /* @__PURE__ */ jsx7(Dialog3, { open: isDialogOpen, onOpenChange: setIsDialogOpen, children: /* @__PURE__ */ jsxs7(DialogContent3, { className: "max-w-2xl max-h-[90vh] overflow-y-auto", children: [
2941
2943
  dialogStep === "picker" && /* @__PURE__ */ jsxs7(
2942
2944
  "div",
2943
2945
  {
@@ -2946,9 +2948,9 @@ function StartupScriptsPage({ apiClient, className }) {
2946
2948
  transitionDir === "back" ? "slide-in-from-left-4" : "slide-in-from-right-4"
2947
2949
  ),
2948
2950
  children: [
2949
- /* @__PURE__ */ jsxs7(DialogHeader, { children: [
2950
- /* @__PURE__ */ jsx7(DialogTitle, { children: "New Startup Script" }),
2951
- /* @__PURE__ */ jsx7(DialogDescription, { children: "Start from a template or create a blank script." })
2951
+ /* @__PURE__ */ jsxs7(DialogHeader3, { children: [
2952
+ /* @__PURE__ */ jsx7(DialogTitle3, { children: "New Startup Script" }),
2953
+ /* @__PURE__ */ jsx7(DialogDescription3, { children: "Start from a template or create a blank script." })
2952
2954
  ] }),
2953
2955
  /* @__PURE__ */ jsxs7("div", { className: "space-y-4 py-2", children: [
2954
2956
  /* @__PURE__ */ jsxs7("div", { children: [
@@ -3002,9 +3004,9 @@ function StartupScriptsPage({ apiClient, className }) {
3002
3004
  transitionDir === "forward" ? "slide-in-from-right-4" : "slide-in-from-left-4"
3003
3005
  ),
3004
3006
  children: [
3005
- /* @__PURE__ */ jsxs7(DialogHeader, { children: [
3006
- /* @__PURE__ */ jsx7(DialogTitle, { children: editingScript ? "Edit Script" : "Create Startup Script" }),
3007
- /* @__PURE__ */ jsx7(DialogDescription, { children: editingScript ? "Modify your startup script configuration." : "Define a shell script that runs when sandboxes start. Scripts execute before the AI agent." })
3007
+ /* @__PURE__ */ jsxs7(DialogHeader3, { children: [
3008
+ /* @__PURE__ */ jsx7(DialogTitle3, { children: editingScript ? "Edit Script" : "Create Startup Script" }),
3009
+ /* @__PURE__ */ jsx7(DialogDescription3, { children: editingScript ? "Modify your startup script configuration." : "Define a shell script that runs when sandboxes start. Scripts execute before the AI agent." })
3008
3010
  ] }),
3009
3011
  /* @__PURE__ */ jsxs7("div", { className: "space-y-5 py-2", children: [
3010
3012
  /* @__PURE__ */ jsxs7("div", { children: [
@@ -3280,7 +3282,7 @@ function StartupScriptsPage({ apiClient, className }) {
3280
3282
  /* @__PURE__ */ jsx7("p", { className: "text-sm text-destructive", children: formError })
3281
3283
  ] })
3282
3284
  ] }),
3283
- /* @__PURE__ */ jsxs7(DialogFooter, { className: "flex items-center justify-between sm:justify-between", children: [
3285
+ /* @__PURE__ */ jsxs7(DialogFooter3, { className: "flex items-center justify-between sm:justify-between", children: [
3284
3286
  /* @__PURE__ */ jsx7("div", { children: !editingScript && /* @__PURE__ */ jsxs7(
3285
3287
  "button",
3286
3288
  {
@@ -3320,16 +3322,16 @@ function StartupScriptsPage({ apiClient, className }) {
3320
3322
  `form-${stepKey}`
3321
3323
  )
3322
3324
  ] }) }),
3323
- /* @__PURE__ */ jsx7(Dialog, { open: !!deleteTarget, onOpenChange: () => setDeleteTarget(null), children: /* @__PURE__ */ jsxs7(DialogContent, { className: "max-w-md", children: [
3324
- /* @__PURE__ */ jsxs7(DialogHeader, { children: [
3325
- /* @__PURE__ */ jsx7(DialogTitle, { children: "Delete Startup Script" }),
3326
- /* @__PURE__ */ jsxs7(DialogDescription, { children: [
3325
+ /* @__PURE__ */ jsx7(Dialog3, { open: !!deleteTarget, onOpenChange: () => setDeleteTarget(null), children: /* @__PURE__ */ jsxs7(DialogContent3, { className: "max-w-md", children: [
3326
+ /* @__PURE__ */ jsxs7(DialogHeader3, { children: [
3327
+ /* @__PURE__ */ jsx7(DialogTitle3, { children: "Delete Startup Script" }),
3328
+ /* @__PURE__ */ jsxs7(DialogDescription3, { children: [
3327
3329
  "Are you sure you want to delete \u201C",
3328
3330
  deleteTarget?.name,
3329
3331
  "\u201D? This action cannot be undone."
3330
3332
  ] })
3331
3333
  ] }),
3332
- /* @__PURE__ */ jsxs7(DialogFooter, { children: [
3334
+ /* @__PURE__ */ jsxs7(DialogFooter3, { children: [
3333
3335
  /* @__PURE__ */ jsx7(
3334
3336
  "button",
3335
3337
  {
@@ -1,54 +1,19 @@
1
- export { B as Button, a as ButtonProps, b as buttonVariants } from './button-CMQuQEW_.js';
2
- export { A as Avatar, a as AvatarFallback, b as AvatarImage, B as Badge, c as BadgeProps, C as Card, d as CardContent, e as CardDescription, f as CardFooter, g as CardHeader, h as CardTitle, D as Dialog, i as DialogClose, j as DialogContent, k as DialogDescription, l as DialogFooter, m as DialogHeader, n as DialogOverlay, o as DialogPortal, p as DialogTitle, q as DialogTrigger, r as DropZone, s as DropZoneProps, t as DropdownMenu, u as DropdownMenuCheckboxItem, v as DropdownMenuContent, w as DropdownMenuGroup, x as DropdownMenuItem, y as DropdownMenuLabel, z as DropdownMenuPortal, E as DropdownMenuRadioGroup, F as DropdownMenuRadioItem, G as DropdownMenuSeparator, H as DropdownMenuShortcut, I as DropdownMenuSub, J as DropdownMenuSubContent, K as DropdownMenuSubTrigger, L as DropdownMenuTrigger, M as EmptyState, N as EmptyStateProps, O as Input, P as InputProps, Q as Label, R as Logo, S as LogoProps, T as Progress, U as Select, V as SelectContent, W as SelectGroup, X as SelectItem, Y as SelectLabel, Z as SelectScrollDownButton, _ as SelectScrollUpButton, $ as SelectSeparator, a0 as SelectTrigger, a1 as SelectValue, a2 as SidebarDropZone, a3 as SidebarDropZoneProps, a4 as Skeleton, a5 as SkeletonCard, a6 as SkeletonTable, a7 as StatCard, a8 as StatCardProps, a9 as Switch, aa as Table, ab as TableBody, ac as TableCaption, ad as TableCell, ae as TableFooter, af as TableHead, ag as TableHeader, ah as TableRow, ai as Tabs, aj as TabsContent, ak as TabsList, al as TabsTrigger, am as TangleKnot, an as TerminalCursor, ao as TerminalDisplay, ap as TerminalInput, aq as TerminalLine, ar as Textarea, as as TextareaProps, at as Toast, au as ToastContainer, av as ToastProvider, aw as UploadFile, ax as UploadProgress, ay as UploadProgressProps, az as badgeVariants, aA as useToast } from './sidebar-drop-zone-tDBsuOH5.js';
1
+ export { Avatar, AvatarFallback, AvatarImage, Badge, BadgeProps, Button, ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CodeBlock, CodeBlockProps, CopyButton, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropZone, DropZoneProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EmptyStateProps, InlineCode, InlineCodeProps, Input, InputProps, Label, Progress, SegmentedControl, SegmentedControlOption, SegmentedControlProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SidebarDropZone, SidebarDropZoneProps, Skeleton, SkeletonCard, SkeletonTable, StatCard, StatCardProps, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TerminalCursor, TerminalDisplay, TerminalInput, TerminalLine, Textarea, TextareaProps, ThemeToggle, Toast, ToastContainer, ToastProvider, UploadFile, UploadProgress, UploadProgressProps, badgeVariants, buttonVariants, useTheme, useToast } from '@tangle-network/ui/primitives';
3
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
- import * as React from 'react';
5
- import 'class-variance-authority/types';
6
- import '@radix-ui/react-dialog';
7
- import 'class-variance-authority';
8
- import '@radix-ui/react-avatar';
9
- import '@radix-ui/react-dropdown-menu';
10
- import '@radix-ui/react-select';
11
- import '@radix-ui/react-tabs';
12
- import '@radix-ui/react-progress';
13
- import '@radix-ui/react-switch';
14
- import '@radix-ui/react-label';
15
3
 
16
- /**
17
- * Visually lightweight segmented control for single-value selection.
18
- *
19
- * Uses role="radiogroup" / role="radio" because this is a value-selector
20
- * with no associated panels — not a tab interface. Arrow keys navigate
21
- * between options (with wrapping), Home/End jump to first/last.
22
- *
23
- * **Accessibility:** Provide either `aria-label` or `aria-labelledby` — the
24
- * ARIA spec requires every radiogroup to have an accessible name. A dev-mode
25
- * console warning fires when both are omitted.
26
- *
27
- * Design rules baked into the default variant:
28
- * - Only the SELECTED segment shows a surface colour + accent text.
29
- * - Unselected segments have NO background — they're plain-text labels
30
- * that darken on hover. This keeps the selected segment as the
31
- * single visual anchor instead of the whole group competing with
32
- * itself.
33
- */
34
- interface SegmentedControlOption<T extends string = string> {
35
- value: T;
36
- label: React.ReactNode;
37
- /** Rendered right of the label, typically a count or status pill. */
38
- adornment?: React.ReactNode;
4
+ interface LogoProps {
5
+ variant?: "sandbox";
6
+ size?: "sm" | "md" | "lg" | "xl";
7
+ className?: string;
8
+ iconOnly?: boolean;
39
9
  }
40
- interface SegmentedControlProps<T extends string = string> extends Pick<React.HTMLAttributes<HTMLDivElement>, "id" | "className" | "aria-label" | "aria-labelledby"> {
41
- value: T;
42
- onValueChange: (value: T) => void;
43
- options: SegmentedControlOption<T>[];
44
- /**
45
- * Layout:
46
- * - "row" — horizontal pill bar (default, fits in a header region)
47
- * - "tabs" — horizontal with a bottom border so the selected pill
48
- * reads as a classic tab (used on the Team page)
49
- */
50
- variant?: "row" | "tabs";
10
+ declare function TangleKnot({ size, className }: {
11
+ size: number;
12
+ className?: string;
13
+ }): react_jsx_runtime.JSX.Element;
14
+ declare function Logo({ variant, size, className, iconOnly }: LogoProps): react_jsx_runtime.JSX.Element;
15
+ declare namespace Logo {
16
+ var displayName: string;
51
17
  }
52
- declare function SegmentedControl<T extends string = string>({ value, onValueChange, options, variant, className, ...rest }: SegmentedControlProps<T>): react_jsx_runtime.JSX.Element;
53
18
 
54
- export { SegmentedControl, type SegmentedControlOption, type SegmentedControlProps };
19
+ export { Logo, type LogoProps, TangleKnot };