@tangle-network/sandbox-ui 0.14.0 → 0.15.2
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/dist/auth.d.ts +1 -74
- package/dist/auth.js +1 -4
- package/dist/chat.d.ts +1 -136
- package/dist/chat.js +2 -15
- package/dist/chunk-2BUPSB7O.js +0 -0
- package/dist/chunk-3J6FG3FJ.js +18 -0
- package/dist/chunk-76IQLPW2.js +206 -0
- package/dist/chunk-7ZA5SEK3.js +239 -0
- package/dist/chunk-AZ3AWMTM.js +8 -0
- package/dist/chunk-CMY7W45U.js +380 -0
- package/dist/chunk-EI44GEQ5.js +6 -0
- package/dist/chunk-ENMWGVDL.js +858 -0
- package/dist/{chunk-5OQ27N57.js → chunk-GPT7VKK6.js} +34 -38
- package/dist/chunk-HLZTKSGT.js +2652 -0
- package/dist/chunk-JBGKGLD7.js +16 -0
- package/dist/chunk-NJNME4J4.js +14 -0
- package/dist/chunk-QPAJR74X.js +20 -0
- package/dist/chunk-TK46XFLM.js +28 -0
- package/dist/chunk-WID73FPH.js +89 -0
- package/dist/chunk-YVXK4XRO.js +30 -0
- package/dist/dashboard.d.ts +450 -4
- package/dist/dashboard.js +20 -891
- package/dist/editor.d.ts +1 -120
- package/dist/editor.js +1 -5
- package/dist/files.d.ts +1 -129
- package/dist/files.js +2 -7
- package/dist/globals.css +2 -1265
- package/dist/hooks.d.ts +114 -11
- package/dist/hooks.js +17 -88
- package/dist/index.d.ts +24 -99
- package/dist/index.js +251 -256
- package/dist/markdown.d.ts +1 -29
- package/dist/markdown.js +2 -2
- package/dist/openui.d.ts +8 -115
- package/dist/openui.js +1 -6
- package/dist/pages.d.ts +13 -12
- package/dist/pages.js +91 -115
- package/dist/primitives.d.ts +14 -49
- package/dist/primitives.js +69 -77
- package/dist/run.d.ts +1 -14
- package/dist/run.js +2 -22
- package/dist/sdk-hooks.d.ts +3 -283
- package/dist/sdk-hooks.js +10 -14
- package/dist/stores.d.ts +2 -14
- package/dist/stores.js +11 -39
- package/dist/styles.css +2 -1265
- package/dist/template-card-DStb8boW.d.ts +183 -0
- package/dist/types.d.ts +11 -8
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +1 -44
- package/dist/utils.js +6 -12
- package/dist/workspace.d.ts +5 -10
- package/dist/workspace.js +3 -19
- package/package.json +19 -54
- package/dist/active-sessions-store-CeOmXgv5.d.ts +0 -85
- package/dist/artifact-pane-Bh45Ssco.d.ts +0 -24
- package/dist/branding-DCi5VEik.d.ts +0 -13
- package/dist/button-CMQuQEW_.d.ts +0 -17
- package/dist/chat-container-f4yEs6KN.d.ts +0 -106
- package/dist/chunk-34A66VBG.js +0 -214
- package/dist/chunk-34I7UFSX.js +0 -92
- package/dist/chunk-36QY2W5G.js +0 -802
- package/dist/chunk-4CLN43XT.js +0 -45
- package/dist/chunk-54SQQMMM.js +0 -156
- package/dist/chunk-66EZOYZR.js +0 -102
- package/dist/chunk-BX6AQMUS.js +0 -183
- package/dist/chunk-DI3NZ5ZX.js +0 -192
- package/dist/chunk-DPGIXDAI.js +0 -220
- package/dist/chunk-DXMIEK4K.js +0 -1426
- package/dist/chunk-GSZA3TSY.js +0 -79
- package/dist/chunk-HB5Y37YU.js +0 -54
- package/dist/chunk-LQNEZDRM.js +0 -109
- package/dist/chunk-MA7YKRUP.js +0 -131
- package/dist/chunk-MKTSMWVD.js +0 -109
- package/dist/chunk-MQXABZTB.js +0 -1348
- package/dist/chunk-MT5FJ3ZT.js +0 -186
- package/dist/chunk-NKUPJC34.js +0 -2070
- package/dist/chunk-OEX7NZE3.js +0 -321
- package/dist/chunk-OKLQVY3Y.js +0 -139
- package/dist/chunk-Q56BYXQF.js +0 -61
- package/dist/chunk-QD4QE5P5.js +0 -40
- package/dist/chunk-QDH5GEGY.js +0 -630
- package/dist/chunk-QID2OOMG.js +0 -133
- package/dist/chunk-QMU2PWOU.js +0 -493
- package/dist/chunk-RQHJBTEU.js +0 -10
- package/dist/chunk-T7HMZEVO.js +0 -216
- package/dist/chunk-U6QTHMY6.js +0 -1290
- package/dist/chunk-US6JKJKH.js +0 -124
- package/dist/chunk-VX3XOUEB.js +0 -63
- package/dist/chunk-XLG757B6.js +0 -933
- package/dist/chunk-ZMNSRDMH.js +0 -127
- package/dist/chunk-ZNCEM5CD.js +0 -316
- package/dist/document-editor-pane-A70-EhdQ.d.ts +0 -124
- package/dist/document-editor-pane-TLPVRBBU.js +0 -11
- package/dist/expanded-tool-detail-Dh99mcbY.d.ts +0 -63
- package/dist/file-tabs-BLfxfmAH.d.ts +0 -51
- package/dist/parts-CyGkM6Fp.d.ts +0 -50
- package/dist/run-CtFZ6s-D.d.ts +0 -41
- package/dist/sidebar-drop-zone-tDBsuOH5.d.ts +0 -301
- package/dist/sidecar-CFU2W9j1.d.ts +0 -8
- package/dist/template-card-BAtvcAkU.d.ts +0 -18
- package/dist/tool-call-feed-Bs3MyQMT.d.ts +0 -68
- package/dist/tool-display-Ct9nFAzJ.d.ts +0 -32
- package/dist/usage-chart-CPTcNlGs.d.ts +0 -73
- package/dist/use-sandbox-metrics-DWc0k9Xm.d.ts +0 -153
- package/dist/variant-list-BrHYcBCk.d.ts +0 -540
package/dist/pages.js
CHANGED
|
@@ -1,47 +1,20 @@
|
|
|
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,
|
|
4
|
+
ModelPicker,
|
|
25
5
|
PricingPage,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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";
|
|
6
|
+
TemplateCard,
|
|
7
|
+
UsageChart,
|
|
8
|
+
canonicalModelId
|
|
9
|
+
} from "./chunk-ENMWGVDL.js";
|
|
39
10
|
import {
|
|
40
11
|
cn
|
|
41
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-EI44GEQ5.js";
|
|
42
13
|
|
|
43
14
|
// src/pages/billing-page.tsx
|
|
44
15
|
import * as React from "react";
|
|
16
|
+
import { Skeleton, SkeletonCard } from "@tangle-network/ui/primitives";
|
|
17
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@tangle-network/ui/primitives";
|
|
45
18
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
46
19
|
var defaultBillingData = {
|
|
47
20
|
subscription: null,
|
|
@@ -316,10 +289,6 @@ var VALID_DRIVERS = /* @__PURE__ */ new Set([
|
|
|
316
289
|
"firecracker",
|
|
317
290
|
"tangle"
|
|
318
291
|
]);
|
|
319
|
-
var DEFAULT_MODEL_OPTIONS = [
|
|
320
|
-
{ value: "claude-sonnet", label: "Claude Sonnet 4.6 (Highly Capable)" }
|
|
321
|
-
];
|
|
322
|
-
var DEFAULT_MODEL_TIER = DEFAULT_MODEL_OPTIONS[0]?.value ?? "claude-sonnet";
|
|
323
292
|
var STACK_DISPLAY = {
|
|
324
293
|
universal: {
|
|
325
294
|
name: "Default",
|
|
@@ -482,7 +451,7 @@ function ProvisioningWizard({
|
|
|
482
451
|
skipToReview,
|
|
483
452
|
onLoadStartupScripts,
|
|
484
453
|
resourceLimits,
|
|
485
|
-
|
|
454
|
+
models,
|
|
486
455
|
pricingRates,
|
|
487
456
|
planTiers
|
|
488
457
|
}) {
|
|
@@ -568,23 +537,17 @@ function ProvisioningWizard({
|
|
|
568
537
|
(prev) => snapSliderValue(prev, STORAGE_MIN, storageMax, storageStep)
|
|
569
538
|
);
|
|
570
539
|
}, [cpuMax, ramMax, storageMax, cpuStep, ramStep, storageStep]);
|
|
571
|
-
const [modelTier, setModelTier] = React2.useState(
|
|
572
|
-
dc?.modelTier ?? DEFAULT_MODEL_TIER
|
|
573
|
-
);
|
|
540
|
+
const [modelTier, setModelTier] = React2.useState(dc?.modelTier ?? "");
|
|
574
541
|
const [systemPrompt, setSystemPrompt] = React2.useState(
|
|
575
542
|
dc?.systemPrompt ?? ""
|
|
576
543
|
);
|
|
577
544
|
React2.useEffect(() => {
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
setModelTier(firstAvailable.value);
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
}, [modelOptions, modelTier]);
|
|
545
|
+
if (!models || models.length === 0) return;
|
|
546
|
+
const ids = models.map(canonicalModelId);
|
|
547
|
+
if (ids.includes(modelTier)) return;
|
|
548
|
+
const next = ids[0];
|
|
549
|
+
if (next && next !== modelTier) setModelTier(next);
|
|
550
|
+
}, [models, modelTier]);
|
|
588
551
|
const [name, setName] = React2.useState(dc?.name ?? "");
|
|
589
552
|
const [gitUrl, setGitUrl] = React2.useState(dc?.gitUrl ?? "");
|
|
590
553
|
const [envVars, setEnvVars] = React2.useState(dc?.envVars ?? [{ key: "", value: "" }]);
|
|
@@ -784,11 +747,8 @@ function ProvisioningWizard({
|
|
|
784
747
|
setStorageGB(
|
|
785
748
|
snapSliderValue(128, STORAGE_MIN, storageMax, storageStep)
|
|
786
749
|
);
|
|
787
|
-
const
|
|
788
|
-
|
|
789
|
-
(o) => !o.disabled
|
|
790
|
-
);
|
|
791
|
-
setModelTier(firstAvailable?.value ?? DEFAULT_MODEL_TIER);
|
|
750
|
+
const first = models?.[0];
|
|
751
|
+
setModelTier(first ? canonicalModelId(first) : "");
|
|
792
752
|
setSystemPrompt("");
|
|
793
753
|
setName("");
|
|
794
754
|
setGitUrl("");
|
|
@@ -983,27 +943,17 @@ function ProvisioningWizard({
|
|
|
983
943
|
/* @__PURE__ */ jsxs2("div", { children: [
|
|
984
944
|
/* @__PURE__ */ jsx2("label", { className: "block font-label text-xs font-bold uppercase tracking-widest text-muted-foreground mb-2", children: "Model Engine" }),
|
|
985
945
|
/* @__PURE__ */ jsx2(
|
|
986
|
-
|
|
946
|
+
ModelPicker,
|
|
987
947
|
{
|
|
948
|
+
label: "",
|
|
988
949
|
value: modelTier,
|
|
989
|
-
onChange:
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
"option",
|
|
995
|
-
{
|
|
996
|
-
value: option.value,
|
|
997
|
-
disabled: option.disabled,
|
|
998
|
-
className: "bg-gray-900",
|
|
999
|
-
children: option.label
|
|
1000
|
-
},
|
|
1001
|
-
option.value
|
|
1002
|
-
)
|
|
1003
|
-
)
|
|
950
|
+
onChange: setModelTier,
|
|
951
|
+
models: models ?? [],
|
|
952
|
+
loading: !models,
|
|
953
|
+
disabled: !models || models.length === 0,
|
|
954
|
+
triggerClassName: "rounded-xl h-12 px-4 font-bold"
|
|
1004
955
|
}
|
|
1005
|
-
)
|
|
1006
|
-
modelOptions && modelOptions.length > 0 && modelOptions.every((o) => o.disabled) && /* @__PURE__ */ jsx2("p", { className: "text-xs text-muted-foreground mt-2", children: "All model options are currently disabled. Please upgrade your plan or contact support." })
|
|
956
|
+
)
|
|
1007
957
|
] }),
|
|
1008
958
|
/* @__PURE__ */ jsxs2("div", { children: [
|
|
1009
959
|
/* @__PURE__ */ jsx2("label", { className: "block font-label text-xs font-bold uppercase tracking-widest text-muted-foreground mb-2", children: "Core Directives (System Prompt)" }),
|
|
@@ -1363,7 +1313,7 @@ function ProvisioningWizard({
|
|
|
1363
1313
|
{
|
|
1364
1314
|
type: "button",
|
|
1365
1315
|
onClick: handleDeploy,
|
|
1366
|
-
disabled: isDeploying || !selectedEnv,
|
|
1316
|
+
disabled: isDeploying || !selectedEnv || !modelTier && !bare,
|
|
1367
1317
|
className: "w-full h-12 bg-primary text-primary-foreground font-extrabold text-sm rounded-2xl tracking-wide shadow-md disabled:opacity-50 hover:brightness-110 active:scale-[0.98] transition-all",
|
|
1368
1318
|
children: isDeploying ? /* @__PURE__ */ jsxs2("span", { className: "flex items-center justify-center gap-2", children: [
|
|
1369
1319
|
/* @__PURE__ */ jsx2(Loader2, { className: "h-4 w-4 animate-spin" }),
|
|
@@ -1385,7 +1335,7 @@ function ProvisioningWizard({
|
|
|
1385
1335
|
{
|
|
1386
1336
|
type: "button",
|
|
1387
1337
|
onClick: handleDeploy,
|
|
1388
|
-
disabled: isDeploying || !selectedEnv,
|
|
1338
|
+
disabled: isDeploying || !selectedEnv || !modelTier && !bare,
|
|
1389
1339
|
className: "w-full h-12 bg-primary text-primary-foreground font-extrabold text-sm rounded-2xl tracking-wide shadow-md disabled:opacity-50 hover:brightness-110 active:scale-[0.98] transition-all",
|
|
1390
1340
|
children: isDeploying ? /* @__PURE__ */ jsxs2("span", { className: "flex items-center justify-center gap-2", children: [
|
|
1391
1341
|
/* @__PURE__ */ jsx2(Loader2, { className: "h-4 w-4 animate-spin" }),
|
|
@@ -1400,6 +1350,7 @@ function ProvisioningWizard({
|
|
|
1400
1350
|
|
|
1401
1351
|
// src/pages/pricing-page.tsx
|
|
1402
1352
|
import * as React3 from "react";
|
|
1353
|
+
import { Skeleton as Skeleton2, SkeletonCard as SkeletonCard2 } from "@tangle-network/ui/primitives";
|
|
1403
1354
|
import { ChevronDown } from "lucide-react";
|
|
1404
1355
|
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
1405
1356
|
async function fetchTiersFromApi(apiBasePath) {
|
|
@@ -1493,13 +1444,13 @@ function StandalonePricingPage({
|
|
|
1493
1444
|
] }),
|
|
1494
1445
|
state.loading ? /* @__PURE__ */ jsxs3("div", { className: "space-y-8", children: [
|
|
1495
1446
|
/* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-center gap-4", children: [
|
|
1496
|
-
/* @__PURE__ */ jsx3(
|
|
1497
|
-
/* @__PURE__ */ jsx3(
|
|
1447
|
+
/* @__PURE__ */ jsx3(Skeleton2, { className: "h-10 w-24" }),
|
|
1448
|
+
/* @__PURE__ */ jsx3(Skeleton2, { className: "h-10 w-24" })
|
|
1498
1449
|
] }),
|
|
1499
1450
|
/* @__PURE__ */ jsxs3("div", { className: "grid grid-cols-1 gap-6 lg:grid-cols-3", children: [
|
|
1500
|
-
/* @__PURE__ */ jsx3(
|
|
1501
|
-
/* @__PURE__ */ jsx3(
|
|
1502
|
-
/* @__PURE__ */ jsx3(
|
|
1451
|
+
/* @__PURE__ */ jsx3(SkeletonCard2, { className: "h-[500px]" }),
|
|
1452
|
+
/* @__PURE__ */ jsx3(SkeletonCard2, { className: "h-[500px]" }),
|
|
1453
|
+
/* @__PURE__ */ jsx3(SkeletonCard2, { className: "h-[500px]" })
|
|
1503
1454
|
] })
|
|
1504
1455
|
] }) : 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
1456
|
/* @__PURE__ */ jsx3("p", { className: "text-destructive text-sm font-medium", children: state.error }),
|
|
@@ -1549,6 +1500,19 @@ import {
|
|
|
1549
1500
|
Trash2 as Trash22
|
|
1550
1501
|
} from "lucide-react";
|
|
1551
1502
|
import * as React4 from "react";
|
|
1503
|
+
import { Button } from "@tangle-network/ui/primitives";
|
|
1504
|
+
import { Badge } from "@tangle-network/ui/primitives";
|
|
1505
|
+
import { Card } from "@tangle-network/ui/primitives";
|
|
1506
|
+
import {
|
|
1507
|
+
Dialog,
|
|
1508
|
+
DialogContent,
|
|
1509
|
+
DialogDescription,
|
|
1510
|
+
DialogFooter,
|
|
1511
|
+
DialogHeader,
|
|
1512
|
+
DialogTitle
|
|
1513
|
+
} from "@tangle-network/ui/primitives";
|
|
1514
|
+
import { EmptyState } from "@tangle-network/ui/primitives";
|
|
1515
|
+
import { Input } from "@tangle-network/ui/primitives";
|
|
1552
1516
|
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1553
1517
|
var TIER_LIMITS = {
|
|
1554
1518
|
free: 3,
|
|
@@ -2177,6 +2141,14 @@ function ProfileDetailDialog({
|
|
|
2177
2141
|
// src/pages/secrets-page.tsx
|
|
2178
2142
|
import * as React5 from "react";
|
|
2179
2143
|
import { Lock, Plus as Plus3, Trash2 as Trash23, Eye, EyeOff, AlertCircle as AlertCircle2, Key, Shield, CheckCircle, Users, ArrowRight } from "lucide-react";
|
|
2144
|
+
import {
|
|
2145
|
+
Dialog as Dialog2,
|
|
2146
|
+
DialogContent as DialogContent2,
|
|
2147
|
+
DialogDescription as DialogDescription2,
|
|
2148
|
+
DialogFooter as DialogFooter2,
|
|
2149
|
+
DialogHeader as DialogHeader2,
|
|
2150
|
+
DialogTitle as DialogTitle2
|
|
2151
|
+
} from "@tangle-network/ui/primitives";
|
|
2180
2152
|
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
2181
2153
|
function SecretsPage({ apiClient, className, teamSecretsHint }) {
|
|
2182
2154
|
const [secrets, setSecrets] = React5.useState([]);
|
|
@@ -2318,7 +2290,7 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
|
|
|
2318
2290
|
/* @__PURE__ */ jsx5(AlertCircle2, { className: "h-5 w-5 text-destructive shrink-0" }),
|
|
2319
2291
|
/* @__PURE__ */ jsx5("p", { className: "text-destructive text-sm font-medium", children: error })
|
|
2320
2292
|
] }),
|
|
2321
|
-
/* @__PURE__ */ jsx5(
|
|
2293
|
+
/* @__PURE__ */ jsx5(Dialog2, { open: isCreateOpen, onOpenChange: (open) => {
|
|
2322
2294
|
if (!open) {
|
|
2323
2295
|
setIsCreateOpen(false);
|
|
2324
2296
|
setNewName("");
|
|
@@ -2326,10 +2298,10 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
|
|
|
2326
2298
|
setCreateError(null);
|
|
2327
2299
|
setShowValue(false);
|
|
2328
2300
|
}
|
|
2329
|
-
}, children: /* @__PURE__ */ jsxs5(
|
|
2330
|
-
/* @__PURE__ */ jsxs5(
|
|
2331
|
-
/* @__PURE__ */ jsx5(
|
|
2332
|
-
/* @__PURE__ */ jsx5(
|
|
2301
|
+
}, children: /* @__PURE__ */ jsxs5(DialogContent2, { className: "max-w-md", children: [
|
|
2302
|
+
/* @__PURE__ */ jsxs5(DialogHeader2, { children: [
|
|
2303
|
+
/* @__PURE__ */ jsx5(DialogTitle2, { children: "Create Secret" }),
|
|
2304
|
+
/* @__PURE__ */ jsx5(DialogDescription2, { children: "Secrets are automatically exposed as environment variables across all your new sandboxes." })
|
|
2333
2305
|
] }),
|
|
2334
2306
|
/* @__PURE__ */ jsxs5(
|
|
2335
2307
|
"form",
|
|
@@ -2390,7 +2362,7 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
|
|
|
2390
2362
|
}
|
|
2391
2363
|
),
|
|
2392
2364
|
createError && /* @__PURE__ */ jsx5("p", { className: "mt-3 text-sm text-destructive", children: createError }),
|
|
2393
|
-
/* @__PURE__ */ jsxs5(
|
|
2365
|
+
/* @__PURE__ */ jsxs5(DialogFooter2, { children: [
|
|
2394
2366
|
/* @__PURE__ */ jsx5(
|
|
2395
2367
|
"button",
|
|
2396
2368
|
{
|
|
@@ -2417,18 +2389,18 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
|
|
|
2417
2389
|
)
|
|
2418
2390
|
] })
|
|
2419
2391
|
] }) }),
|
|
2420
|
-
/* @__PURE__ */ jsx5(
|
|
2392
|
+
/* @__PURE__ */ jsx5(Dialog2, { open: !!deleteTarget, onOpenChange: (open) => {
|
|
2421
2393
|
if (!open) setDeleteTarget(null);
|
|
2422
|
-
}, children: /* @__PURE__ */ jsxs5(
|
|
2423
|
-
/* @__PURE__ */ jsxs5(
|
|
2424
|
-
/* @__PURE__ */ jsx5(
|
|
2425
|
-
/* @__PURE__ */ jsxs5(
|
|
2394
|
+
}, children: /* @__PURE__ */ jsxs5(DialogContent2, { className: "max-w-sm", children: [
|
|
2395
|
+
/* @__PURE__ */ jsxs5(DialogHeader2, { children: [
|
|
2396
|
+
/* @__PURE__ */ jsx5(DialogTitle2, { children: "Delete Secret?" }),
|
|
2397
|
+
/* @__PURE__ */ jsxs5(DialogDescription2, { children: [
|
|
2426
2398
|
"This will permanently delete ",
|
|
2427
2399
|
/* @__PURE__ */ jsx5("span", { className: "font-mono font-bold text-foreground", children: deleteTarget }),
|
|
2428
2400
|
". Sandboxes using this secret will lose access to it."
|
|
2429
2401
|
] })
|
|
2430
2402
|
] }),
|
|
2431
|
-
/* @__PURE__ */ jsxs5(
|
|
2403
|
+
/* @__PURE__ */ jsxs5(DialogFooter2, { children: [
|
|
2432
2404
|
/* @__PURE__ */ jsx5(
|
|
2433
2405
|
"button",
|
|
2434
2406
|
{
|
|
@@ -2524,6 +2496,7 @@ function SecretsPage({ apiClient, className, teamSecretsHint }) {
|
|
|
2524
2496
|
|
|
2525
2497
|
// src/pages/templates-page.tsx
|
|
2526
2498
|
import { Layers as Layers2 } from "lucide-react";
|
|
2499
|
+
import { Skeleton as Skeleton3 } from "@tangle-network/ui/primitives";
|
|
2527
2500
|
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
2528
2501
|
function TemplatesPage({ templates, loading = false, onUseTemplate, className }) {
|
|
2529
2502
|
return /* @__PURE__ */ jsxs6("div", { className: cn("space-y-8", className), children: [
|
|
@@ -2531,7 +2504,7 @@ function TemplatesPage({ templates, loading = false, onUseTemplate, className })
|
|
|
2531
2504
|
/* @__PURE__ */ jsx6("h1", { className: "font-bold text-3xl text-foreground", children: "Templates" }),
|
|
2532
2505
|
/* @__PURE__ */ jsx6("p", { className: "mt-1 text-muted-foreground", children: "Pre-configured environments to get started quickly" })
|
|
2533
2506
|
] }),
|
|
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(
|
|
2507
|
+
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
2508
|
/* @__PURE__ */ jsx6(Layers2, { className: "mx-auto mb-3 h-10 w-10 text-muted-foreground" }),
|
|
2536
2509
|
/* @__PURE__ */ jsx6("p", { className: "text-sm font-medium text-foreground mb-1", children: "No templates available" }),
|
|
2537
2510
|
/* @__PURE__ */ jsx6("p", { className: "text-sm text-muted-foreground", children: "Check back later for pre-configured environments." })
|
|
@@ -2567,6 +2540,14 @@ import {
|
|
|
2567
2540
|
MemoryStick,
|
|
2568
2541
|
Layers as Layers3
|
|
2569
2542
|
} from "lucide-react";
|
|
2543
|
+
import {
|
|
2544
|
+
Dialog as Dialog3,
|
|
2545
|
+
DialogContent as DialogContent3,
|
|
2546
|
+
DialogDescription as DialogDescription3,
|
|
2547
|
+
DialogFooter as DialogFooter3,
|
|
2548
|
+
DialogHeader as DialogHeader3,
|
|
2549
|
+
DialogTitle as DialogTitle3
|
|
2550
|
+
} from "@tangle-network/ui/primitives";
|
|
2570
2551
|
import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
2571
2552
|
var SCRIPT_TYPE_META = {
|
|
2572
2553
|
bash: {
|
|
@@ -2937,7 +2918,7 @@ function StartupScriptsPage({ apiClient, className }) {
|
|
|
2937
2918
|
/* @__PURE__ */ jsx7(AlertCircle3, { className: "h-5 w-5 shrink-0 text-destructive" }),
|
|
2938
2919
|
/* @__PURE__ */ jsx7("p", { className: "text-sm font-medium text-destructive", children: error })
|
|
2939
2920
|
] }),
|
|
2940
|
-
/* @__PURE__ */ jsx7(
|
|
2921
|
+
/* @__PURE__ */ jsx7(Dialog3, { open: isDialogOpen, onOpenChange: setIsDialogOpen, children: /* @__PURE__ */ jsxs7(DialogContent3, { className: "max-w-2xl max-h-[90vh] overflow-y-auto", children: [
|
|
2941
2922
|
dialogStep === "picker" && /* @__PURE__ */ jsxs7(
|
|
2942
2923
|
"div",
|
|
2943
2924
|
{
|
|
@@ -2946,9 +2927,9 @@ function StartupScriptsPage({ apiClient, className }) {
|
|
|
2946
2927
|
transitionDir === "back" ? "slide-in-from-left-4" : "slide-in-from-right-4"
|
|
2947
2928
|
),
|
|
2948
2929
|
children: [
|
|
2949
|
-
/* @__PURE__ */ jsxs7(
|
|
2950
|
-
/* @__PURE__ */ jsx7(
|
|
2951
|
-
/* @__PURE__ */ jsx7(
|
|
2930
|
+
/* @__PURE__ */ jsxs7(DialogHeader3, { children: [
|
|
2931
|
+
/* @__PURE__ */ jsx7(DialogTitle3, { children: "New Startup Script" }),
|
|
2932
|
+
/* @__PURE__ */ jsx7(DialogDescription3, { children: "Start from a template or create a blank script." })
|
|
2952
2933
|
] }),
|
|
2953
2934
|
/* @__PURE__ */ jsxs7("div", { className: "space-y-4 py-2", children: [
|
|
2954
2935
|
/* @__PURE__ */ jsxs7("div", { children: [
|
|
@@ -3002,9 +2983,9 @@ function StartupScriptsPage({ apiClient, className }) {
|
|
|
3002
2983
|
transitionDir === "forward" ? "slide-in-from-right-4" : "slide-in-from-left-4"
|
|
3003
2984
|
),
|
|
3004
2985
|
children: [
|
|
3005
|
-
/* @__PURE__ */ jsxs7(
|
|
3006
|
-
/* @__PURE__ */ jsx7(
|
|
3007
|
-
/* @__PURE__ */ jsx7(
|
|
2986
|
+
/* @__PURE__ */ jsxs7(DialogHeader3, { children: [
|
|
2987
|
+
/* @__PURE__ */ jsx7(DialogTitle3, { children: editingScript ? "Edit Script" : "Create Startup Script" }),
|
|
2988
|
+
/* @__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
2989
|
] }),
|
|
3009
2990
|
/* @__PURE__ */ jsxs7("div", { className: "space-y-5 py-2", children: [
|
|
3010
2991
|
/* @__PURE__ */ jsxs7("div", { children: [
|
|
@@ -3280,7 +3261,7 @@ function StartupScriptsPage({ apiClient, className }) {
|
|
|
3280
3261
|
/* @__PURE__ */ jsx7("p", { className: "text-sm text-destructive", children: formError })
|
|
3281
3262
|
] })
|
|
3282
3263
|
] }),
|
|
3283
|
-
/* @__PURE__ */ jsxs7(
|
|
3264
|
+
/* @__PURE__ */ jsxs7(DialogFooter3, { className: "flex items-center justify-between sm:justify-between", children: [
|
|
3284
3265
|
/* @__PURE__ */ jsx7("div", { children: !editingScript && /* @__PURE__ */ jsxs7(
|
|
3285
3266
|
"button",
|
|
3286
3267
|
{
|
|
@@ -3320,16 +3301,16 @@ function StartupScriptsPage({ apiClient, className }) {
|
|
|
3320
3301
|
`form-${stepKey}`
|
|
3321
3302
|
)
|
|
3322
3303
|
] }) }),
|
|
3323
|
-
/* @__PURE__ */ jsx7(
|
|
3324
|
-
/* @__PURE__ */ jsxs7(
|
|
3325
|
-
/* @__PURE__ */ jsx7(
|
|
3326
|
-
/* @__PURE__ */ jsxs7(
|
|
3304
|
+
/* @__PURE__ */ jsx7(Dialog3, { open: !!deleteTarget, onOpenChange: () => setDeleteTarget(null), children: /* @__PURE__ */ jsxs7(DialogContent3, { className: "max-w-md", children: [
|
|
3305
|
+
/* @__PURE__ */ jsxs7(DialogHeader3, { children: [
|
|
3306
|
+
/* @__PURE__ */ jsx7(DialogTitle3, { children: "Delete Startup Script" }),
|
|
3307
|
+
/* @__PURE__ */ jsxs7(DialogDescription3, { children: [
|
|
3327
3308
|
"Are you sure you want to delete \u201C",
|
|
3328
3309
|
deleteTarget?.name,
|
|
3329
3310
|
"\u201D? This action cannot be undone."
|
|
3330
3311
|
] })
|
|
3331
3312
|
] }),
|
|
3332
|
-
/* @__PURE__ */ jsxs7(
|
|
3313
|
+
/* @__PURE__ */ jsxs7(DialogFooter3, { children: [
|
|
3333
3314
|
/* @__PURE__ */ jsx7(
|
|
3334
3315
|
"button",
|
|
3335
3316
|
{
|
|
@@ -3574,7 +3555,6 @@ var CATEGORY_DEFAULTS = {
|
|
|
3574
3555
|
cpuCores: 4,
|
|
3575
3556
|
ramGB: 16,
|
|
3576
3557
|
storageGB: 128,
|
|
3577
|
-
modelTier: "claude-sonnet",
|
|
3578
3558
|
systemPrompt: "You are a blockchain development assistant. Help with smart contract development, testing, and deployment. Follow security best practices and suggest gas optimizations where relevant.",
|
|
3579
3559
|
bare: false
|
|
3580
3560
|
},
|
|
@@ -3583,7 +3563,6 @@ var CATEGORY_DEFAULTS = {
|
|
|
3583
3563
|
cpuCores: 8,
|
|
3584
3564
|
ramGB: 32,
|
|
3585
3565
|
storageGB: 256,
|
|
3586
|
-
modelTier: "claude-sonnet",
|
|
3587
3566
|
systemPrompt: "You are an AI/ML development assistant. Help with model training, data processing, and experiment management. Suggest efficient approaches for the available compute resources.",
|
|
3588
3567
|
bare: false
|
|
3589
3568
|
},
|
|
@@ -3592,7 +3571,6 @@ var CATEGORY_DEFAULTS = {
|
|
|
3592
3571
|
cpuCores: 2,
|
|
3593
3572
|
ramGB: 4,
|
|
3594
3573
|
storageGB: 50,
|
|
3595
|
-
modelTier: "claude-sonnet",
|
|
3596
3574
|
systemPrompt: "You are a frontend development assistant. Help build modern, accessible, and performant user interfaces.",
|
|
3597
3575
|
bare: false
|
|
3598
3576
|
},
|
|
@@ -3601,7 +3579,6 @@ var CATEGORY_DEFAULTS = {
|
|
|
3601
3579
|
cpuCores: 4,
|
|
3602
3580
|
ramGB: 16,
|
|
3603
3581
|
storageGB: 128,
|
|
3604
|
-
modelTier: "claude-sonnet",
|
|
3605
3582
|
systemPrompt: "You are an infrastructure and DevOps assistant. Help with service configuration, deployment, monitoring, and operational best practices.",
|
|
3606
3583
|
bare: false
|
|
3607
3584
|
},
|
|
@@ -3610,7 +3587,6 @@ var CATEGORY_DEFAULTS = {
|
|
|
3610
3587
|
cpuCores: 4,
|
|
3611
3588
|
ramGB: 16,
|
|
3612
3589
|
storageGB: 128,
|
|
3613
|
-
modelTier: "claude-sonnet",
|
|
3614
3590
|
systemPrompt: "",
|
|
3615
3591
|
bare: false
|
|
3616
3592
|
}
|
package/dist/primitives.d.ts
CHANGED
|
@@ -1,54 +1,19 @@
|
|
|
1
|
-
export {
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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 {
|
|
19
|
+
export { Logo, type LogoProps, TangleKnot };
|