@tangle-network/sandbox-ui 0.91.5 → 0.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -214,9 +214,26 @@ function providerLabel(provider) {
214
214
 
215
215
  // src/workflows/model.ts
216
216
  import { parse as parseYaml } from "yaml";
217
+ var TRIGGER_NODE_ID = "trigger";
218
+ var TRIGGER_NODE_ID_PATTERN = new RegExp(`^${TRIGGER_NODE_ID}:(\\d+)$`);
219
+ function triggerNodeId(index) {
220
+ return index === 0 ? TRIGGER_NODE_ID : `${TRIGGER_NODE_ID}:${index}`;
221
+ }
222
+ function triggerNodeIndex(nodeId) {
223
+ if (nodeId === TRIGGER_NODE_ID) return 0;
224
+ const match = TRIGGER_NODE_ID_PATTERN.exec(nodeId);
225
+ return match ? Number(match[1]) : null;
226
+ }
227
+ function actionNodeId(index) {
228
+ return `a${index}`;
229
+ }
230
+ function branchNodeId(actionIndex, branchIndex) {
231
+ return `${actionNodeId(actionIndex)}-b${branchIndex}`;
232
+ }
217
233
  var NODE_W = 292;
218
234
  var RANK_SEP = 72;
219
235
  var CROSS_SEP = 24;
236
+ var EDGE_LABEL_LANE = 180;
220
237
  var CARD_CHROME = 20;
221
238
  var HEADER_ROW = 34;
222
239
  var DESCRIPTION_ROW = 40;
@@ -372,6 +389,50 @@ function describeActionBase(action) {
372
389
  tone: "structural"
373
390
  };
374
391
  }
392
+ case "script.run": {
393
+ const connections = Array.isArray(cfg.connections) ? cfg.connections.filter((c) => typeof c === "string") : [];
394
+ return {
395
+ title: "Script",
396
+ kind,
397
+ // What the box is GRANTED is the thing that distinguishes one script
398
+ // step from another at a glance; the timeout is a bound, and bounds read
399
+ // in the detail view with the rest of the config.
400
+ subtitle: connections.length > 0 ? `TypeScript \xB7 ${connections.length} connection${connections.length === 1 ? "" : "s"}` : "TypeScript",
401
+ // The head of the module — the same role the prompt plays on an agent:
402
+ // the text that says what this particular step actually does.
403
+ description: describeText(cfg.source),
404
+ isRoot: false,
405
+ tone: "action"
406
+ };
407
+ }
408
+ case "sandbox.snapshot":
409
+ return {
410
+ title: "Snapshot",
411
+ kind,
412
+ // WHICH sandbox is the only thing separating one snapshot step from
413
+ // another, and it is usually a `${steps…}` reference — so the subtitle
414
+ // reads as the step whose disk is being captured.
415
+ subtitle: str(cfg.sandbox) ?? "Capture a sandbox",
416
+ isRoot: false,
417
+ tone: "action"
418
+ };
419
+ case "trace.analyze": {
420
+ const kinds = Array.isArray(cfg.kinds) ? cfg.kinds.filter((k) => typeof k === "string") : [];
421
+ return {
422
+ title: "Trace analysis",
423
+ kind,
424
+ // The analysts that run ARE the step. The model it runs them on is
425
+ // incidental here (unlike agent.run, where the model IS the identity),
426
+ // so it stays in the config for the detail view and the node keeps its
427
+ // own glyph rather than borrowing a lab's brand mark.
428
+ subtitle: kinds.length > 0 ? describeText(
429
+ kinds.map((k) => humanizeIdentifier(k, "lower")).join(", ")
430
+ ) : "Default analysts",
431
+ description: describeText(cfg.trace),
432
+ isRoot: false,
433
+ tone: "action"
434
+ };
435
+ }
375
436
  default:
376
437
  return {
377
438
  // An action kind this version doesn't model yet still gets a readable
@@ -465,6 +526,18 @@ function describeTrigger(on) {
465
526
  sch
466
527
  );
467
528
  }
529
+ if (rec.webhook !== void 0) {
530
+ return withConfig(
531
+ {
532
+ title: "Webhook",
533
+ kind: "webhook",
534
+ subtitle: "On an inbound POST",
535
+ isRoot: true,
536
+ tone: "trigger"
537
+ },
538
+ asRecord(rec.webhook)
539
+ );
540
+ }
468
541
  const [kind] = Object.keys(rec);
469
542
  return withConfig(
470
543
  {
@@ -519,10 +592,74 @@ function layoutLayers(nodes, direction, rankSep, crossSep) {
519
592
  }
520
593
  return out;
521
594
  }
595
+ function classifyBackEdges(orderedIds, edges) {
596
+ const outgoing = /* @__PURE__ */ new Map();
597
+ const hasIncoming = /* @__PURE__ */ new Set();
598
+ for (const e of edges) {
599
+ const list = outgoing.get(e.source);
600
+ if (list) list.push(e);
601
+ else outgoing.set(e.source, [e]);
602
+ hasIncoming.add(e.target);
603
+ }
604
+ const walkOrder = [
605
+ ...orderedIds.filter((id) => !hasIncoming.has(id)),
606
+ ...orderedIds.filter((id) => hasIncoming.has(id))
607
+ ];
608
+ const back = /* @__PURE__ */ new Set();
609
+ const color = new Map(orderedIds.map((id) => [id, 0]));
610
+ for (const start of walkOrder) {
611
+ if (color.get(start) !== 0) continue;
612
+ color.set(start, 1);
613
+ const stack = [{ id: start, next: 0 }];
614
+ while (stack.length > 0) {
615
+ const frame = stack[stack.length - 1];
616
+ const out = outgoing.get(frame.id);
617
+ if (!out || frame.next >= out.length) {
618
+ color.set(frame.id, 2);
619
+ stack.pop();
620
+ continue;
621
+ }
622
+ const edge = out[frame.next];
623
+ frame.next += 1;
624
+ const target = color.get(edge.target);
625
+ if (target === 1) {
626
+ back.add(edge.id);
627
+ } else if (target === 0) {
628
+ color.set(edge.target, 1);
629
+ stack.push({ id: edge.target, next: 0 });
630
+ }
631
+ }
632
+ }
633
+ return back;
634
+ }
635
+ function rankByTopology(orderedIds, edges, backEdgeIds) {
636
+ const outgoing = /* @__PURE__ */ new Map();
637
+ const indegree = new Map(orderedIds.map((id) => [id, 0]));
638
+ for (const e of edges) {
639
+ if (backEdgeIds.has(e.id)) continue;
640
+ const list = outgoing.get(e.source);
641
+ if (list) list.push(e);
642
+ else outgoing.set(e.source, [e]);
643
+ indegree.set(e.target, (indegree.get(e.target) ?? 0) + 1);
644
+ }
645
+ const rank = new Map(orderedIds.map((id) => [id, 0]));
646
+ const queue = orderedIds.filter((id) => indegree.get(id) === 0);
647
+ for (let head = 0; head < queue.length; head += 1) {
648
+ const id = queue[head];
649
+ for (const e of outgoing.get(id) ?? []) {
650
+ rank.set(e.target, Math.max(rank.get(e.target) ?? 0, (rank.get(id) ?? 0) + 1));
651
+ const remaining = (indegree.get(e.target) ?? 0) - 1;
652
+ indegree.set(e.target, remaining);
653
+ if (remaining === 0) queue.push(e.target);
654
+ }
655
+ }
656
+ return rank;
657
+ }
522
658
  function buildWorkflowGraph(yaml, options) {
523
659
  const reserveRunState = options?.reserveRunState ?? false;
524
660
  const direction = options?.direction ?? "LR";
525
661
  const compact = options?.compact ?? false;
662
+ const declared = options?.edges;
526
663
  if (!yaml || yaml.trim() === "") {
527
664
  return { nodes: [], edges: [], error: "No definition" };
528
665
  }
@@ -534,7 +671,8 @@ function buildWorkflowGraph(yaml, options) {
534
671
  }
535
672
  const def = asRecord(parsed);
536
673
  const actions = Array.isArray(def.do) ? def.do : [];
537
- if (!def.on && actions.length === 0) {
674
+ const triggers = !def.on ? [] : Array.isArray(def.on) ? def.on : [def.on];
675
+ if (triggers.length === 0 && actions.length === 0) {
538
676
  return { nodes: [], edges: [], error: "Empty workflow" };
539
677
  }
540
678
  const logical = [];
@@ -547,24 +685,39 @@ function buildWorkflowGraph(yaml, options) {
547
685
  };
548
686
  logical.push({ id, data, width: dims.width, height: dims.height, rank: rank2 });
549
687
  };
550
- const addEdge = (source, target, kind) => {
551
- edges.push({ id: `${source}->${target}`, source, target, kind });
688
+ const edgeIds = /* @__PURE__ */ new Set();
689
+ const addEdge = (source, target, kind, whenLabel) => {
690
+ const id = `${source}->${target}`;
691
+ if (edgeIds.has(id)) return;
692
+ edgeIds.add(id);
693
+ edges.push({
694
+ id,
695
+ source,
696
+ target,
697
+ kind,
698
+ ...whenLabel ? { whenLabel } : {}
699
+ });
552
700
  };
553
701
  let rank = 0;
554
702
  let prevExits = [];
555
703
  const branchLeafIds = /* @__PURE__ */ new Set();
556
- if (def.on) {
557
- addNode("trigger", describeTrigger(def.on), rank, false);
558
- prevExits = ["trigger"];
704
+ const triggerIds = triggers.map((_, i) => triggerNodeId(i));
705
+ triggers.forEach((trigger, i) => {
706
+ addNode(triggerNodeId(i), describeTrigger(trigger), rank, false);
707
+ });
708
+ if (triggers.length > 0) {
709
+ prevExits = [...triggerIds];
559
710
  rank += 1;
560
711
  }
561
712
  actions.forEach((action, i) => {
562
- const id = `a${i}`;
713
+ const id = actionNodeId(i);
563
714
  const data = describeAction(action);
564
- if (i === 0 && !def.on) data.isRoot = true;
715
+ if (i === 0 && triggers.length === 0) data.isRoot = true;
565
716
  addNode(id, data, rank, reserveRunState);
566
- for (const from of prevExits) {
567
- addEdge(from, id, branchLeafIds.has(from) ? "join" : "spine");
717
+ if (!declared) {
718
+ for (const from of prevExits) {
719
+ addEdge(from, id, branchLeafIds.has(from) ? "join" : "spine");
720
+ }
568
721
  }
569
722
  const rec = asRecord(action);
570
723
  const children = "parallel" in rec ? Array.isArray(asRecord(rec.parallel).branches) ? asRecord(rec.parallel).branches : [] : "foreach" in rec ? (
@@ -575,7 +728,7 @@ function buildWorkflowGraph(yaml, options) {
575
728
  const branchRank = rank + 1;
576
729
  const branchIds = [];
577
730
  children.forEach((child, j) => {
578
- const cid = `${id}-b${j}`;
731
+ const cid = branchNodeId(i, j);
579
732
  addNode(cid, describeAction(child), branchRank, reserveRunState);
580
733
  addEdge(id, cid, "fork");
581
734
  branchIds.push(cid);
@@ -588,8 +741,43 @@ function buildWorkflowGraph(yaml, options) {
588
741
  rank += 1;
589
742
  }
590
743
  });
744
+ if (declared) {
745
+ const known = new Set(logical.map((n) => n.id));
746
+ for (const spec of declared) {
747
+ const missing = !known.has(spec.from) ? spec.from : !known.has(spec.to) ? spec.to : null;
748
+ if (missing !== null) {
749
+ return {
750
+ nodes: [],
751
+ edges: [],
752
+ error: `Declared topology names "${missing}", which this definition has no step for`
753
+ };
754
+ }
755
+ addEdge(spec.from, spec.to, "spine", spec.whenLabel);
756
+ }
757
+ const rootward = new Set(edges.map((e) => e.target));
758
+ for (const n of logical) {
759
+ if (triggerNodeIndex(n.id) !== null) continue;
760
+ if (rootward.has(n.id)) continue;
761
+ for (const triggerId of triggerIds) addEdge(triggerId, n.id, "spine");
762
+ }
763
+ const orderedIds = logical.map((n) => n.id);
764
+ const backEdgeIds = classifyBackEdges(orderedIds, edges);
765
+ for (const e of edges) {
766
+ if (backEdgeIds.has(e.id)) e.backEdge = true;
767
+ }
768
+ const rankById = rankByTopology(orderedIds, edges, backEdgeIds);
769
+ const incoming = new Set(edges.map((e) => e.target));
770
+ for (const n of logical) {
771
+ n.rank = rankById.get(n.id) ?? 0;
772
+ n.data = { ...n.data, isRoot: !incoming.has(n.id) };
773
+ }
774
+ }
775
+ const labelled = edges.some(
776
+ (e) => e.whenLabel !== void 0 || e.backEdge === true
777
+ );
778
+ const rankSep = labelled ? Math.max(geo.rankSep, EDGE_LABEL_LANE) : geo.rankSep;
591
779
  return {
592
- nodes: layoutLayers(logical, direction, geo.rankSep, geo.crossSep),
780
+ nodes: layoutLayers(logical, direction, rankSep, geo.crossSep),
593
781
  edges,
594
782
  error: null
595
783
  };
@@ -602,6 +790,11 @@ export {
602
790
  fmtTokens,
603
791
  shortModel,
604
792
  providerLabel,
793
+ TRIGGER_NODE_ID,
794
+ triggerNodeId,
795
+ triggerNodeIndex,
796
+ actionNodeId,
797
+ branchNodeId,
605
798
  COMPACT_TILE,
606
799
  COMPACT_NODE_SIZE,
607
800
  buildWorkflowGraph
package/dist/dashboard.js CHANGED
@@ -54,7 +54,7 @@ import {
54
54
  canAdminSandbox,
55
55
  parseInsufficientBalance,
56
56
  useSidebar
57
- } from "./chunk-H237JF3H.js";
57
+ } from "./chunk-UB3V2YAZ.js";
58
58
  import {
59
59
  BillingDashboard,
60
60
  InfoPanel,
package/dist/globals.css CHANGED
@@ -707,6 +707,10 @@
707
707
  width: calc(var(--spacing) * 9);
708
708
  height: calc(var(--spacing) * 9);
709
709
  }
710
+ .size-10 {
711
+ width: calc(var(--spacing) * 10);
712
+ height: calc(var(--spacing) * 10);
713
+ }
710
714
  .size-11 {
711
715
  width: calc(var(--spacing) * 11);
712
716
  height: calc(var(--spacing) * 11);
@@ -714,6 +718,9 @@
714
718
  .\!h-2 {
715
719
  height: calc(var(--spacing) * 2) !important;
716
720
  }
721
+ .\!h-2\.5 {
722
+ height: calc(var(--spacing) * 2.5) !important;
723
+ }
717
724
  .h-1 {
718
725
  height: var(--spacing);
719
726
  }
@@ -792,6 +799,9 @@
792
799
  .h-\[24rem\] {
793
800
  height: 24rem;
794
801
  }
802
+ .h-\[26rem\] {
803
+ height: 26rem;
804
+ }
795
805
  .h-\[28rem\] {
796
806
  height: 28rem;
797
807
  }
@@ -963,6 +973,9 @@
963
973
  .\!w-2 {
964
974
  width: calc(var(--spacing) * 2) !important;
965
975
  }
976
+ .\!w-2\.5 {
977
+ width: calc(var(--spacing) * 2.5) !important;
978
+ }
966
979
  .w-0 {
967
980
  width: 0px;
968
981
  }
@@ -1206,6 +1219,9 @@
1206
1219
  .max-w-6xl {
1207
1220
  max-width: var(--container-6xl);
1208
1221
  }
1222
+ .max-w-40 {
1223
+ max-width: calc(var(--spacing) * 40);
1224
+ }
1209
1225
  .max-w-\[14rem\] {
1210
1226
  max-width: 14rem;
1211
1227
  }
@@ -1221,6 +1237,9 @@
1221
1237
  .max-w-\[85\%\] {
1222
1238
  max-width: 85%;
1223
1239
  }
1240
+ .max-w-\[85vw\] {
1241
+ max-width: 85vw;
1242
+ }
1224
1243
  .max-w-\[90vw\] {
1225
1244
  max-width: 90vw;
1226
1245
  }
@@ -1445,6 +1464,9 @@
1445
1464
  .resize-y {
1446
1465
  resize: vertical;
1447
1466
  }
1467
+ .\[scrollbar-width\:none\] {
1468
+ scrollbar-width: none;
1469
+ }
1448
1470
  .\[scrollbar-gutter\:stable\] {
1449
1471
  scrollbar-gutter: stable;
1450
1472
  }
@@ -1685,6 +1707,12 @@
1685
1707
  .overflow-y-auto {
1686
1708
  overflow-y: auto;
1687
1709
  }
1710
+ .overscroll-x-contain {
1711
+ overscroll-behavior-x: contain;
1712
+ }
1713
+ .\!rounded-full {
1714
+ border-radius: calc(infinity * 1px) !important;
1715
+ }
1688
1716
  .rounded {
1689
1717
  border-radius: 0.25rem;
1690
1718
  }
@@ -1768,6 +1796,10 @@
1768
1796
  .rounded-bl-lg {
1769
1797
  border-bottom-left-radius: var(--radius-lg);
1770
1798
  }
1799
+ .\!border {
1800
+ border-style: var(--tw-border-style) !important;
1801
+ border-width: 1px !important;
1802
+ }
1771
1803
  .\!border-0 {
1772
1804
  border-style: var(--tw-border-style) !important;
1773
1805
  border-width: 0px !important;
@@ -1828,6 +1860,9 @@
1828
1860
  --tw-border-style: none;
1829
1861
  border-style: none;
1830
1862
  }
1863
+ .\!border-border {
1864
+ border-color: var(--color-border) !important;
1865
+ }
1831
1866
  .border-\[var\(--accent-text\)\] {
1832
1867
  border-color: var(--accent-text);
1833
1868
  }
@@ -2068,6 +2103,12 @@
2068
2103
  .border-b-primary {
2069
2104
  border-bottom-color: var(--color-primary);
2070
2105
  }
2106
+ .\!bg-muted-foreground\/70 {
2107
+ background-color: color-mix(in srgb, hsl(var(--muted-foreground)) 70%, transparent) !important;
2108
+ @supports (color: color-mix(in lab, red, red)) {
2109
+ background-color: color-mix(in oklab, var(--color-muted-foreground) 70%, transparent) !important;
2110
+ }
2111
+ }
2071
2112
  .\!bg-transparent {
2072
2113
  background-color: transparent !important;
2073
2114
  }
@@ -2287,6 +2328,12 @@
2287
2328
  background-color: color-mix(in oklab, var(--color-card) 80%, transparent);
2288
2329
  }
2289
2330
  }
2331
+ .bg-card\/90 {
2332
+ background-color: color-mix(in srgb, hsl(var(--card)) 90%, transparent);
2333
+ @supports (color: color-mix(in lab, red, red)) {
2334
+ background-color: color-mix(in oklab, var(--color-card) 90%, transparent);
2335
+ }
2336
+ }
2290
2337
  .bg-destructive {
2291
2338
  background-color: var(--color-destructive);
2292
2339
  }
@@ -3476,6 +3523,10 @@
3476
3523
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3477
3524
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3478
3525
  }
3526
+ .shadow-xl {
3527
+ --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3528
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3529
+ }
3479
3530
  .ring {
3480
3531
  --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
3481
3532
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -3654,6 +3705,9 @@
3654
3705
  -webkit-user-select: none;
3655
3706
  user-select: none;
3656
3707
  }
3708
+ .\[-ms-overflow-style\:none\] {
3709
+ -ms-overflow-style: none;
3710
+ }
3657
3711
  .ring-inset {
3658
3712
  --tw-ring-inset: inset;
3659
3713
  }
@@ -3873,6 +3927,9 @@
3873
3927
  border-color: color-mix(in oklab, var(--color-primary) 50%, transparent);
3874
3928
  }
3875
3929
  }
3930
+ .hover\:\!bg-primary:hover {
3931
+ background-color: var(--color-primary) !important;
3932
+ }
3876
3933
  .hover\:bg-\[var\(--accent-surface-soft\)\]:hover {
3877
3934
  background-color: var(--accent-surface-soft);
3878
3935
  }
@@ -4569,6 +4626,9 @@
4569
4626
  .md\:flex {
4570
4627
  display: flex;
4571
4628
  }
4629
+ .md\:hidden {
4630
+ display: none;
4631
+ }
4572
4632
  .md\:grid-cols-2 {
4573
4633
  grid-template-columns: repeat(2, minmax(0, 1fr));
4574
4634
  }
@@ -4687,6 +4747,9 @@
4687
4747
  .\[\&\:\:-moz-range-track\]\:bg-border::-moz-range-track {
4688
4748
  background-color: var(--color-border);
4689
4749
  }
4750
+ .\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar {
4751
+ display: none;
4752
+ }
4690
4753
  .\[\&\:\:-webkit-slider-runnable-track\]\:h-1\.5::-webkit-slider-runnable-track {
4691
4754
  height: calc(var(--spacing) * 1.5);
4692
4755
  }
package/dist/index.js CHANGED
@@ -91,7 +91,7 @@ import {
91
91
  snapHarnessToModel,
92
92
  snapModelToHarness,
93
93
  validateComposerFiles
94
- } from "./chunk-QMY3XVH3.js";
94
+ } from "./chunk-GUULFESL.js";
95
95
  import {
96
96
  TOOL_CATEGORY_ICONS,
97
97
  cn,
@@ -152,7 +152,7 @@ import {
152
152
  buildUnifiedPatch,
153
153
  computeDiffStats,
154
154
  resolveLanguage
155
- } from "./chunk-S6J6JIIP.js";
155
+ } from "./chunk-UKQOHN73.js";
156
156
  import {
157
157
  FileArtifactPane,
158
158
  FilePreview,
@@ -217,7 +217,7 @@ import {
217
217
  canAdminSandbox,
218
218
  parseInsufficientBalance,
219
219
  useSidebar
220
- } from "./chunk-H237JF3H.js";
220
+ } from "./chunk-UB3V2YAZ.js";
221
221
  import {
222
222
  BillingDashboard,
223
223
  InfoPanel,
package/dist/styles.css CHANGED
@@ -707,6 +707,10 @@
707
707
  width: calc(var(--spacing) * 9);
708
708
  height: calc(var(--spacing) * 9);
709
709
  }
710
+ .size-10 {
711
+ width: calc(var(--spacing) * 10);
712
+ height: calc(var(--spacing) * 10);
713
+ }
710
714
  .size-11 {
711
715
  width: calc(var(--spacing) * 11);
712
716
  height: calc(var(--spacing) * 11);
@@ -714,6 +718,9 @@
714
718
  .\!h-2 {
715
719
  height: calc(var(--spacing) * 2) !important;
716
720
  }
721
+ .\!h-2\.5 {
722
+ height: calc(var(--spacing) * 2.5) !important;
723
+ }
717
724
  .h-1 {
718
725
  height: var(--spacing);
719
726
  }
@@ -792,6 +799,9 @@
792
799
  .h-\[24rem\] {
793
800
  height: 24rem;
794
801
  }
802
+ .h-\[26rem\] {
803
+ height: 26rem;
804
+ }
795
805
  .h-\[28rem\] {
796
806
  height: 28rem;
797
807
  }
@@ -963,6 +973,9 @@
963
973
  .\!w-2 {
964
974
  width: calc(var(--spacing) * 2) !important;
965
975
  }
976
+ .\!w-2\.5 {
977
+ width: calc(var(--spacing) * 2.5) !important;
978
+ }
966
979
  .w-0 {
967
980
  width: 0px;
968
981
  }
@@ -1206,6 +1219,9 @@
1206
1219
  .max-w-6xl {
1207
1220
  max-width: var(--container-6xl);
1208
1221
  }
1222
+ .max-w-40 {
1223
+ max-width: calc(var(--spacing) * 40);
1224
+ }
1209
1225
  .max-w-\[14rem\] {
1210
1226
  max-width: 14rem;
1211
1227
  }
@@ -1221,6 +1237,9 @@
1221
1237
  .max-w-\[85\%\] {
1222
1238
  max-width: 85%;
1223
1239
  }
1240
+ .max-w-\[85vw\] {
1241
+ max-width: 85vw;
1242
+ }
1224
1243
  .max-w-\[90vw\] {
1225
1244
  max-width: 90vw;
1226
1245
  }
@@ -1445,6 +1464,9 @@
1445
1464
  .resize-y {
1446
1465
  resize: vertical;
1447
1466
  }
1467
+ .\[scrollbar-width\:none\] {
1468
+ scrollbar-width: none;
1469
+ }
1448
1470
  .\[scrollbar-gutter\:stable\] {
1449
1471
  scrollbar-gutter: stable;
1450
1472
  }
@@ -1685,6 +1707,12 @@
1685
1707
  .overflow-y-auto {
1686
1708
  overflow-y: auto;
1687
1709
  }
1710
+ .overscroll-x-contain {
1711
+ overscroll-behavior-x: contain;
1712
+ }
1713
+ .\!rounded-full {
1714
+ border-radius: calc(infinity * 1px) !important;
1715
+ }
1688
1716
  .rounded {
1689
1717
  border-radius: 0.25rem;
1690
1718
  }
@@ -1768,6 +1796,10 @@
1768
1796
  .rounded-bl-lg {
1769
1797
  border-bottom-left-radius: var(--radius-lg);
1770
1798
  }
1799
+ .\!border {
1800
+ border-style: var(--tw-border-style) !important;
1801
+ border-width: 1px !important;
1802
+ }
1771
1803
  .\!border-0 {
1772
1804
  border-style: var(--tw-border-style) !important;
1773
1805
  border-width: 0px !important;
@@ -1828,6 +1860,9 @@
1828
1860
  --tw-border-style: none;
1829
1861
  border-style: none;
1830
1862
  }
1863
+ .\!border-border {
1864
+ border-color: var(--color-border) !important;
1865
+ }
1831
1866
  .border-\[var\(--accent-text\)\] {
1832
1867
  border-color: var(--accent-text);
1833
1868
  }
@@ -2068,6 +2103,12 @@
2068
2103
  .border-b-primary {
2069
2104
  border-bottom-color: var(--color-primary);
2070
2105
  }
2106
+ .\!bg-muted-foreground\/70 {
2107
+ background-color: color-mix(in srgb, hsl(var(--muted-foreground)) 70%, transparent) !important;
2108
+ @supports (color: color-mix(in lab, red, red)) {
2109
+ background-color: color-mix(in oklab, var(--color-muted-foreground) 70%, transparent) !important;
2110
+ }
2111
+ }
2071
2112
  .\!bg-transparent {
2072
2113
  background-color: transparent !important;
2073
2114
  }
@@ -2287,6 +2328,12 @@
2287
2328
  background-color: color-mix(in oklab, var(--color-card) 80%, transparent);
2288
2329
  }
2289
2330
  }
2331
+ .bg-card\/90 {
2332
+ background-color: color-mix(in srgb, hsl(var(--card)) 90%, transparent);
2333
+ @supports (color: color-mix(in lab, red, red)) {
2334
+ background-color: color-mix(in oklab, var(--color-card) 90%, transparent);
2335
+ }
2336
+ }
2290
2337
  .bg-destructive {
2291
2338
  background-color: var(--color-destructive);
2292
2339
  }
@@ -3476,6 +3523,10 @@
3476
3523
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3477
3524
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3478
3525
  }
3526
+ .shadow-xl {
3527
+ --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3528
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3529
+ }
3479
3530
  .ring {
3480
3531
  --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
3481
3532
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -3654,6 +3705,9 @@
3654
3705
  -webkit-user-select: none;
3655
3706
  user-select: none;
3656
3707
  }
3708
+ .\[-ms-overflow-style\:none\] {
3709
+ -ms-overflow-style: none;
3710
+ }
3657
3711
  .ring-inset {
3658
3712
  --tw-ring-inset: inset;
3659
3713
  }
@@ -3873,6 +3927,9 @@
3873
3927
  border-color: color-mix(in oklab, var(--color-primary) 50%, transparent);
3874
3928
  }
3875
3929
  }
3930
+ .hover\:\!bg-primary:hover {
3931
+ background-color: var(--color-primary) !important;
3932
+ }
3876
3933
  .hover\:bg-\[var\(--accent-surface-soft\)\]:hover {
3877
3934
  background-color: var(--accent-surface-soft);
3878
3935
  }
@@ -4569,6 +4626,9 @@
4569
4626
  .md\:flex {
4570
4627
  display: flex;
4571
4628
  }
4629
+ .md\:hidden {
4630
+ display: none;
4631
+ }
4572
4632
  .md\:grid-cols-2 {
4573
4633
  grid-template-columns: repeat(2, minmax(0, 1fr));
4574
4634
  }
@@ -4687,6 +4747,9 @@
4687
4747
  .\[\&\:\:-moz-range-track\]\:bg-border::-moz-range-track {
4688
4748
  background-color: var(--color-border);
4689
4749
  }
4750
+ .\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar {
4751
+ display: none;
4752
+ }
4690
4753
  .\[\&\:\:-webkit-slider-runnable-track\]\:h-1\.5::-webkit-slider-runnable-track {
4691
4754
  height: calc(var(--spacing) * 1.5);
4692
4755
  }
package/dist/workbench.js CHANGED
@@ -12,9 +12,9 @@ import {
12
12
  buildUnifiedPatch,
13
13
  computeDiffStats,
14
14
  resolveLanguage
15
- } from "./chunk-S6J6JIIP.js";
15
+ } from "./chunk-UKQOHN73.js";
16
16
  import "./chunk-3J6FG3FJ.js";
17
- import "./chunk-H237JF3H.js";
17
+ import "./chunk-UB3V2YAZ.js";
18
18
  import "./chunk-OMUIPJQZ.js";
19
19
  import "./chunk-WYMAC3T3.js";
20
20
  import "./chunk-KEYPUGS3.js";