@tangle-network/sandbox-ui 0.122.2 → 0.123.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.
package/dist/styles.css CHANGED
@@ -300,6 +300,9 @@
300
300
  .inset-y-0 {
301
301
  inset-block: 0px;
302
302
  }
303
+ .-top-0\.5 {
304
+ top: calc(var(--spacing) * -0.5);
305
+ }
303
306
  .-top-1 {
304
307
  top: calc(var(--spacing) * -1);
305
308
  }
@@ -339,15 +342,9 @@
339
342
  .top-4 {
340
343
  top: calc(var(--spacing) * 4);
341
344
  }
342
- .top-14 {
343
- top: calc(var(--spacing) * 14);
344
- }
345
345
  .top-\[50\%\] {
346
346
  top: 50%;
347
347
  }
348
- .top-full {
349
- top: 100%;
350
- }
351
348
  .-right-0\.5 {
352
349
  right: calc(var(--spacing) * -0.5);
353
350
  }
@@ -441,9 +438,6 @@
441
438
  .z-20 {
442
439
  z-index: 20;
443
440
  }
444
- .z-30 {
445
- z-index: 30;
446
- }
447
441
  .z-40 {
448
442
  z-index: 40;
449
443
  }
@@ -930,6 +924,9 @@
930
924
  .h-auto {
931
925
  height: auto;
932
926
  }
927
+ .h-dvh {
928
+ height: 100dvh;
929
+ }
933
930
  .h-full {
934
931
  height: 100%;
935
932
  }
@@ -1464,6 +1461,9 @@
1464
1461
  .max-w-\[calc\(100vw-5rem\)\] {
1465
1462
  max-width: calc(100vw - 5rem);
1466
1463
  }
1464
+ .max-w-\[calc\(100vw-24px\)\] {
1465
+ max-width: calc(100vw - 24px);
1466
+ }
1467
1467
  .max-w-\[min\(640px\,calc\(100vw-2rem\)\)\] {
1468
1468
  max-width: min(640px, calc(100vw - 2rem));
1469
1469
  }
@@ -1629,6 +1629,10 @@
1629
1629
  --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
1630
1630
  translate: var(--tw-translate-x) var(--tw-translate-y);
1631
1631
  }
1632
+ .translate-y-0 {
1633
+ --tw-translate-y: 0px;
1634
+ translate: var(--tw-translate-x) var(--tw-translate-y);
1635
+ }
1632
1636
  .translate-y-\[-50\%\] {
1633
1637
  --tw-translate-y: -50%;
1634
1638
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -1778,6 +1782,9 @@
1778
1782
  .justify-start {
1779
1783
  justify-content: flex-start;
1780
1784
  }
1785
+ .gap-0 {
1786
+ gap: 0px;
1787
+ }
1781
1788
  .gap-0\.5 {
1782
1789
  gap: calc(var(--spacing) * 0.5);
1783
1790
  }
@@ -2071,6 +2078,10 @@
2071
2078
  border-style: var(--tw-border-style);
2072
2079
  border-width: 2px;
2073
2080
  }
2081
+ .border-y-0 {
2082
+ border-block-style: var(--tw-border-style);
2083
+ border-block-width: 0px;
2084
+ }
2074
2085
  .border-t {
2075
2086
  border-top-style: var(--tw-border-style);
2076
2087
  border-top-width: 1px;
@@ -3018,9 +3029,6 @@
3018
3029
  .pt-12 {
3019
3030
  padding-top: calc(var(--spacing) * 12);
3020
3031
  }
3021
- .pt-16 {
3022
- padding-top: calc(var(--spacing) * 16);
3023
- }
3024
3032
  .pr-1 {
3025
3033
  padding-right: var(--spacing);
3026
3034
  }
@@ -3834,6 +3842,9 @@
3834
3842
  --tw-ring-color: color-mix(in oklab, hsl(var(--primary)) 25%, transparent);
3835
3843
  }
3836
3844
  }
3845
+ .ring-surface-container-low {
3846
+ --tw-ring-color: var(--md3-surface-container-low);
3847
+ }
3837
3848
  .outline-hidden {
3838
3849
  --tw-outline-style: none;
3839
3850
  outline-style: none;
@@ -3898,11 +3909,6 @@
3898
3909
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
3899
3910
  transition-duration: var(--tw-duration, var(--default-transition-duration));
3900
3911
  }
3901
- .transition-\[left\,width\] {
3902
- transition-property: left,width;
3903
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
3904
- transition-duration: var(--tw-duration, var(--default-transition-duration));
3905
- }
3906
3912
  .transition-\[margin-left\] {
3907
3913
  transition-property: margin-left;
3908
3914
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -4113,10 +4119,6 @@
4113
4119
  content: var(--tw-content);
4114
4120
  background-color: hsl(var(--primary));
4115
4121
  }
4116
- .last\:border-0:last-child {
4117
- border-style: var(--tw-border-style);
4118
- border-width: 0px;
4119
- }
4120
4122
  .last\:border-b-0:last-child {
4121
4123
  border-bottom-style: var(--tw-border-style);
4122
4124
  border-bottom-width: 0px;
@@ -4432,14 +4434,6 @@
4432
4434
  .hover\:bg-surface-container-highest:hover {
4433
4435
  background-color: var(--md3-surface-container-highest);
4434
4436
  }
4435
- .hover\:bg-white\/5:hover {
4436
- background-color: color-mix(in srgb, #fff 5%, transparent);
4437
- }
4438
- @supports (color: color-mix(in lab, red, red)) {
4439
- .hover\:bg-white\/5:hover {
4440
- background-color: color-mix(in oklab, var(--color-white) 5%, transparent);
4441
- }
4442
- }
4443
4437
  .hover\:bg-yellow-600\/30:hover {
4444
4438
  background-color: color-mix(in srgb, oklch(68.1% 0.162 75.834) 30%, transparent);
4445
4439
  }
@@ -5078,9 +5072,6 @@
5078
5072
  }
5079
5073
  }
5080
5074
  @media (width >= 64rem) {
5081
- .lg\:left-\[var\(--sb-content-margin\)\] {
5082
- left: var(--sb-content-margin);
5083
- }
5084
5075
  .lg\:col-span-1 {
5085
5076
  grid-column: span 1 / span 1;
5086
5077
  }
@@ -1,5 +1,5 @@
1
1
  import { t as cn$1 } from "./utils-DzWbktWG.js";
2
- import { s as PortsList } from "./dashboard-BpEeXRo1.js";
2
+ import { s as PortsList } from "./dashboard-C2VXLIQC.js";
3
3
  import { n as TerminalView } from "./terminal-DmSUfGha.js";
4
4
  import { RichFileTree } from "./files.js";
5
5
  import { n as PreviewView } from "./embedded-app-view-CMRPEvon.js";
@@ -1,3 +1,3 @@
1
- import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-D1YmTvf3.js";
1
+ import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-v1lfd9oE.js";
2
2
  import { a as PreviewReadiness, i as PreviewAccess, n as EmbeddedAppView, r as EmbeddedAppViewProps, t as EmbeddedApp } from "./embedded-app-view-B_vMTtJn.js";
3
3
  export { type ArtifactView, BRAND_PRISM_THEME, type ChangedFile, ChangesPane, type ChangesPaneProps, CodeSurface, type CodeSurfaceProps, CodeView, type CodeViewProps, type DiffStats, DiffStatsBadge, DiffView, type DiffViewProps, type EmbeddedApp, EmbeddedAppView, type EmbeddedAppViewProps, FileBreadcrumb, type FileBreadcrumbProps, GitStatusBadge, PanelHeader, type PanelHeaderProps, type PillTabItem, PillTabs, type PillTabsProps, type PreviewAccess, type PreviewReadiness, PreviewView, type PreviewViewProps, type SandboxArtifact, SandboxArtifactPane, type SandboxArtifactPaneProps, type SandboxArtifactTerminal, buildUnifiedPatch, computeDiffStats, resolveLanguage };
package/dist/workbench.js CHANGED
@@ -1,3 +1,3 @@
1
- import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-CggAsIMv.js";
1
+ import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-BAPaCOCB.js";
2
2
  import { n as PreviewView, t as EmbeddedAppView } from "./embedded-app-view-CMRPEvon.js";
3
3
  export { BRAND_PRISM_THEME, ChangesPane, CodeSurface, CodeView, DiffStatsBadge, DiffView, EmbeddedAppView, FileBreadcrumb, GitStatusBadge, PanelHeader, PillTabs, PreviewView, SandboxArtifactPane, buildUnifiedPatch, computeDiffStats, resolveLanguage };
@@ -1,4 +1,6 @@
1
1
  import { a as modelBrandFor, n as ModelBrandStack, t as ModelBrandIdentity } from "./model-brand-B9A4H9pJ.js";
2
+ import { ReactElement } from "react";
3
+ import { LucideIcon } from "lucide-react";
2
4
  import "@xyflow/react";
3
5
  import "@xyflow/react/dist/style.css";
4
6
  //#region src/workflows/model.d.ts
@@ -488,4 +490,167 @@ interface WorkflowGraphProps {
488
490
  //#region src/workflows/WorkflowGraphLazy.d.ts
489
491
  declare function WorkflowGraph(props: WorkflowGraphProps): import("react").JSX.Element;
490
492
  //#endregion
491
- export { type BuildWorkflowGraphOptions, type ModelBrandIdentity, ModelBrandStack, type WfEdge, type WfEdgeKind, type WfEdgeSpec, type WfGraph, type WfNode, type WfNodeData, type WfNodeState, type WfNodeStatus, type WfNodeTone, type WfProblem, type WfProblemSeverity, WorkflowGraph as WorkflowGraphLazy, type WorkflowGraphProps, modelBrandFor };
493
+ //#region src/workflows/node-ui.d.ts
494
+ export declare const STATUS_COLOR: Record<WfNodeStatus, string>;
495
+ export declare const STATUS_LABEL: Record<WfNodeStatus, string>;
496
+ /** Status pill styling — a tinted well in the status color. Built from the
497
+ * semantic surface trio (bg/border/text) so the pill keeps its contrast in both
498
+ * themes rather than washing out in one of them. */
499
+ export declare const STATUS_PILL: Record<WfNodeStatus, {
500
+ background: string;
501
+ color: string;
502
+ borderColor: string;
503
+ }>;
504
+ export declare const KIND_ICON: Record<string, LucideIcon>;
505
+ /** The status pill in a card's header — the one place the run state is spelled
506
+ * out in words. */
507
+ declare function StatusPill({ status }: {
508
+ status: WfNodeStatus;
509
+ }): import("react").JSX.Element;
510
+ /**
511
+ * A node's MARK, centered in a tile the caller sizes: the provider's brand logo
512
+ * when the step runs against a connector — the way n8n makes a node recognizable
513
+ * before a word of it is read — else the kind's glyph, tinted by tone. Both
514
+ * densities render the same mark at different sizes, so a node looks like itself
515
+ * whether it's an icon tile or a full card.
516
+ */
517
+ export declare function NodeMark({ kind, provider, model, accent, tile }: {
518
+ kind?: string;
519
+ provider?: string;
520
+ /** The model an agent runs, e.g. "anthropic/claude-sonnet-4-5". Its lab/host
521
+ * brand mark identifies the node far faster than a generic sparkle. */
522
+ model?: string;
523
+ accent: string;
524
+ /** Edge length of the square the mark is centered in. */
525
+ tile: number;
526
+ }): import("react").JSX.Element;
527
+ //#endregion
528
+ //#region src/workflows/naming.d.ts
529
+ /**
530
+ * Human-facing naming for workflow nodes. A definition addresses things by
531
+ * machine identifier — an action kind (`agent.run`), a hub action path
532
+ * (`github.pulls.reviews.create`), a profile slug (`pr-reviewer`) — and showing
533
+ * those verbatim on a node makes the graph read like a config file. These turn
534
+ * an identifier into the label a person would say out loud.
535
+ *
536
+ * Pure and dependency-free so the naming rules are unit-testable without the
537
+ * YAML parser or a render.
538
+ */
539
+ /** How the first word of a humanized identifier is cased. An initialism is
540
+ * ALWAYS upper-cased whichever is chosen — that is the whole point of the table
541
+ * above, and `.toLowerCase()`ing the result afterwards silently undoes it
542
+ * ("List API keys" → "list api keys"). */
543
+ type LeadCase = "sentence" | "lower" | "title";
544
+ /**
545
+ * Humanize a machine identifier: `pr-reviewer` → "PR reviewer", `sandbox.spawn`
546
+ * → "Sandbox spawn", `postMessage` → "Post message". Known initialisms are
547
+ * upper-cased wherever they appear; `lead` picks the case of the rest.
548
+ *
549
+ * - `sentence` (default): "Create issue comment" — a label or a title.
550
+ * - `lower`: "create issue comment" — a fragment that sits INSIDE a phrase
551
+ * ("On pull request"), where a capital would read as a new sentence. An
552
+ * initialism still wins: `ci_run_completed` → "CI run completed", never
553
+ * "cI run completed".
554
+ * - `title`: "Google Sheets" — a brand/proper name.
555
+ *
556
+ * An identifier that carries no word characters is returned verbatim rather than
557
+ * blanked.
558
+ */
559
+ export declare function humanizeIdentifier(id: string, lead?: LeadCase): string;
560
+ /** A model slug without its provider prefix (`anthropic/claude-sonnet-5` →
561
+ * `claude-sonnet-5`) — the vendor is noise on a card whose width is the scarce
562
+ * resource, and the full slug stays in the node's config for the detail view. */
563
+ export declare function shortModel(model: string): string;
564
+ /** The parts of a hub action path (`<provider>.<resource…>.<operation>`). */
565
+ interface ActionPathParts {
566
+ /** The connector the action runs against (`github`). */
567
+ provider: string;
568
+ /** The trailing verb (`create`). */
569
+ operation: string;
570
+ /** Everything between provider and operation (`pulls.reviews`), when present —
571
+ * a two-segment path (`slack.postMessage`) has no resource. */
572
+ resource?: string;
573
+ }
574
+ /** Split a hub action path into provider / resource / operation. Null when the
575
+ * value isn't a dotted path (a `${…}` expression, or a bare word), so callers
576
+ * fall back to showing it verbatim instead of inventing structure. */
577
+ export declare function parseActionPath(path: string): ActionPathParts | null;
578
+ /**
579
+ * The operation label for an action path, in n8n's `operation: resource` shape:
580
+ * `github.pulls.reviews.create` → "create: pulls.reviews", `slack.postMessage`
581
+ * → "post message". The provider names the node itself (its title + logo), so
582
+ * it is deliberately absent here. A path we can't split is shown verbatim.
583
+ */
584
+ export declare function actionPathLabel(path: string): string;
585
+ //#endregion
586
+ //#region src/workflows/node-output.d.ts
587
+ /** The recovered shape of an output preview. */
588
+ type OutputShape = {
589
+ kind: "empty";
590
+ } |
591
+ /** A shallow JSON object, flattened to top-level key/value pairs for a
592
+ * key-value render. `truncated` when more pairs exist than we kept. */
593
+ {
594
+ kind: "json";
595
+ entries: [string, string][];
596
+ truncated: boolean;
597
+ } |
598
+ /** Structured-looking text we won't key/value render — a JSON array, a nested
599
+ * object, or a fragment the host clamped mid-token so it won't parse. Shown in
600
+ * monospace so it still reads as data, not prose. */
601
+ {
602
+ kind: "code";
603
+ text: string;
604
+ } |
605
+ /** Free-form prose (agent output, a status line, an error message). */
606
+ {
607
+ kind: "text";
608
+ text: string;
609
+ };
610
+ /**
611
+ * Flatten an agent's markdown answer into the sentence a person would read out
612
+ * of it. On a two-line card preview the syntax IS the noise: a `## Heading` mid
613
+ * paragraph, a `**bold**` run and a bullet's `-` all survive the clamp while the
614
+ * words that carry the meaning get pushed past it. Stripping the markup (never
615
+ * the words) is what turns the preview back into prose — the full text, markup
616
+ * and all, is still rendered by the node's detail view.
617
+ *
618
+ * Structure-only lines (a fence, a table rule) are dropped; everything else keeps
619
+ * its text and is joined into one flowing line.
620
+ */
621
+ export declare function condenseText(text: string): string;
622
+ /**
623
+ * Recover the shape of an output preview string. Only text that *begins* like
624
+ * JSON (`{`/`[`) is parse-attempted, so ordinary prose starting with a brace-free
625
+ * sentence is never mis-parsed. A begins-like-JSON string that fails to parse
626
+ * (the host clamped it mid-value) still renders as `code`, not prose, so it keeps
627
+ * its monospace/data affordance.
628
+ *
629
+ * `condenseMarkdown` says the prose IS markdown and may be flattened for the
630
+ * preview ({@link condenseText}). It is OFF by default, and the caller must only
631
+ * turn it on for text an agent actually authored as markdown. Applied to anything
632
+ * else it does not merely look wrong — it silently REWRITES the text: a stack
633
+ * trace's `__init__.py` loses its underscores, and a shell glob `src/**` pairs
634
+ * with a later `**` and both vanish. An error message is the one string a person
635
+ * reads to find out what broke; it must reach them exactly as it was thrown.
636
+ */
637
+ export declare function classifyOutput(preview: string | undefined, condenseMarkdown?: boolean): OutputShape;
638
+ /**
639
+ * Render a classified output preview's CONTENT (no surrounding frame — each node
640
+ * design supplies its own container/label). `rows` caps the visible lines so the
641
+ * body stays within a card's reserved output space; `tone="error"` colors it for
642
+ * a failure message.
643
+ *
644
+ * `rows="none"` renders the body UNCLAMPED, for a container that scrolls or is
645
+ * sized by its content — a drawer, a detail panel, a selection overlay. It is a
646
+ * word rather than a large number because there is no number that means "do not
647
+ * clamp": a count outside {@link CLAMP_BY_ROWS} falls back to two lines, so
648
+ * `rows={99}` asks for everything and silently shows the least.
649
+ */
650
+ export declare function NodeOutputBody({ shape, rows, tone }: {
651
+ shape: OutputShape;
652
+ rows?: number | "none";
653
+ tone?: "default" | "error";
654
+ }): ReactElement | null;
655
+ //#endregion
656
+ export { type ActionPathParts, type BuildWorkflowGraphOptions, type LeadCase, type ModelBrandIdentity, ModelBrandStack, StatusPill as NodeStatusPill, type OutputShape, type WfEdge, type WfEdgeKind, type WfEdgeSpec, type WfGraph, type WfNode, type WfNodeData, type WfNodeState, type WfNodeStatus, type WfNodeTone, type WfProblem, type WfProblemSeverity, WorkflowGraph as WorkflowGraphLazy, type WorkflowGraphProps, modelBrandFor };
package/dist/workflows.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { r as modelBrandFor, t as ModelBrandStack } from "./model-brand-hMyDTUqB.js";
2
- import { a as buildWorkflowGraph, c as triggerNodeIndex, i as branchNodeId, n as TRIGGER_NODE_ID, r as actionNodeId, s as triggerNodeId } from "./model-I-NIxeM-.js";
2
+ import { A as actionPathLabel, C as branchNodeId, D as triggerNodeIndex, E as triggerNodeId, M as parseActionPath, N as shortModel, S as actionNodeId, a as NodeMark, c as STATUS_COLOR, f as StatusPill, i as KIND_ICON, j as humanizeIdentifier, l as STATUS_LABEL, n as classifyOutput, r as condenseText, t as NodeOutputBody, u as STATUS_PILL, w as buildWorkflowGraph, x as TRIGGER_NODE_ID } from "./node-output-D-fYilAu.js";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { Component, Suspense, lazy, useMemo, useState } from "react";
5
5
  //#region src/workflows/WorkflowGraphLazy.tsx
@@ -30,7 +30,7 @@ function retryImport(factory, retries = 2, delayMs = 350) {
30
30
  });
31
31
  }
32
32
  function lazyWorkflowGraph() {
33
- return lazy(() => retryImport(() => import("./WorkflowGraph-E2Gqe8sl.js").then((m) => ({ default: m.WorkflowGraph }))));
33
+ return lazy(() => retryImport(() => import("./WorkflowGraph-B4mkYGe3.js").then((m) => ({ default: m.WorkflowGraph }))));
34
34
  }
35
35
  var GraphErrorBoundary = class extends Component {
36
36
  state = { hasError: false };
@@ -81,4 +81,4 @@ function WorkflowGraph(props) {
81
81
  }, `${props.yaml}::${attempt}`);
82
82
  }
83
83
  //#endregion
84
- export { ModelBrandStack, TRIGGER_NODE_ID, WorkflowGraph as WorkflowGraphLazy, actionNodeId, branchNodeId, buildWorkflowGraph, modelBrandFor, triggerNodeId, triggerNodeIndex };
84
+ export { KIND_ICON, ModelBrandStack, NodeMark, NodeOutputBody, StatusPill as NodeStatusPill, STATUS_COLOR, STATUS_LABEL, STATUS_PILL, TRIGGER_NODE_ID, WorkflowGraph as WorkflowGraphLazy, actionNodeId, actionPathLabel, branchNodeId, buildWorkflowGraph, classifyOutput, condenseText, humanizeIdentifier, modelBrandFor, parseActionPath, shortModel, triggerNodeId, triggerNodeIndex };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.122.2",
3
+ "version": "0.123.0",
4
4
  "description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,25 +0,0 @@
1
- import { ArtifactPane as ArtifactPane$1, Avatar as Avatar$1, AvatarFallback as AvatarFallback$1, AvatarImage as AvatarImage$1, Badge as Badge$1, Button as Button$1, Card as Card$1, CardContent as CardContent$1, CardDescription as CardDescription$1, CardFooter, CardHeader as CardHeader$1, CardTitle as CardTitle$1, CodeBlock, CopyButton, Dialog as Dialog$1, DialogClose, DialogContent as DialogContent$1, DialogDescription as DialogDescription$1, DialogFooter as DialogFooter$1, DialogHeader as DialogHeader$1, DialogOverlay, DialogPortal, DialogTitle as DialogTitle$1, DialogTrigger, DropZone, DropdownMenu as DropdownMenu$1, DropdownMenuCheckboxItem, DropdownMenuContent as DropdownMenuContent$1, DropdownMenuGroup, DropdownMenuItem as DropdownMenuItem$1, DropdownMenuLabel as DropdownMenuLabel$1, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator as DropdownMenuSeparator$1, DropdownMenuShortcut, DropdownMenuSub as DropdownMenuSub$1, DropdownMenuSubContent as DropdownMenuSubContent$1, DropdownMenuSubTrigger as DropdownMenuSubTrigger$1, DropdownMenuTrigger as DropdownMenuTrigger$1, EmptyState as EmptyState$1, FilterField, Heading, InlineCode, Input as Input$1, Label as Label$1, Metric, MetricStrip, PageHeader, PageHeader as PageHeader$1, PageShell as PageShell$1, Progress as Progress$1, SegmentedControl, Select as Select$1, SelectContent as SelectContent$1, SelectGroup, SelectItem as SelectItem$1, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger as SelectTrigger$1, SelectValue as SelectValue$1, SidebarDropZone, Skeleton as Skeleton$1, SkeletonCard as SkeletonCard$1, SkeletonTable, StatCard as StatCard$1, StatusPill, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs as Tabs$1, TabsContent as TabsContent$1, TabsList as TabsList$1, TabsTrigger as TabsTrigger$1, TerminalCursor, TerminalDisplay, TerminalInput, TerminalLine, TextShimmer, Textarea as Textarea$1, ThemeToggle, ToastContainer, ToastProvider, Toolbar, UploadProgress, badgeVariants, buttonVariants, useTheme as useTheme$1, useToast } from "@tangle-network/ui/primitives";
2
- import { Logo, TangleKnot as TangleKnot$1 } from "@tangle-network/brand";
3
- import { jsx } from "react/jsx-runtime";
4
- //#region src/primitives/logo.tsx
5
- /** Keep the Sandbox wordmark API while Brand owns the mark and layout. */
6
- function Logo$1({ variant = "sandbox", size = "md", className, iconOnly = false }) {
7
- return /* @__PURE__ */ jsx(Logo, {
8
- size,
9
- variant: iconOnly ? "icon" : "full",
10
- suffix: variant === "sandbox" ? "Sandbox" : null,
11
- className
12
- });
13
- }
14
- Logo$1.displayName = "Logo";
15
- //#endregion
16
- //#region src/primitives/heading.tsx
17
- /** Compatibility name for the canonical nested (h2) page header. */
18
- function SectionTitle(props) {
19
- return /* @__PURE__ */ jsx(PageHeader, {
20
- ...props,
21
- level: 2
22
- });
23
- }
24
- //#endregion
25
- export { Select$1 as $, DropdownMenuItem$1 as A, TerminalInput as At, DropdownMenuTrigger$1 as B, buttonVariants as Bt, DialogTitle$1 as C, TableRow as Ct, DropdownMenuCheckboxItem as D, TabsTrigger$1 as Dt, DropdownMenu$1 as E, TabsList$1 as Et, DropdownMenuSeparator$1 as F, ToastContainer as Ft, Input$1 as G, TangleKnot$1 as Gt, FilterField as H, useToast as Ht, DropdownMenuShortcut as I, ToastProvider as It, MetricStrip as J, Label$1 as K, DropdownMenuSub$1 as L, Toolbar as Lt, DropdownMenuPortal as M, TextShimmer as Mt, DropdownMenuRadioGroup as N, Textarea$1 as Nt, DropdownMenuContent$1 as O, TerminalCursor as Ot, DropdownMenuRadioItem as P, ThemeToggle as Pt, SegmentedControl as Q, DropdownMenuSubContent$1 as R, UploadProgress as Rt, DialogPortal as S, TableHeader as St, DropZone as T, TabsContent$1 as Tt, Heading as U, SectionTitle as Ut, EmptyState$1 as V, useTheme$1 as Vt, InlineCode as W, Logo$1 as Wt, PageShell$1 as X, PageHeader$1 as Y, Progress$1 as Z, DialogContent$1 as _, TableBody as _t, Badge$1 as a, SelectScrollUpButton as at, DialogHeader$1 as b, TableFooter as bt, CardContent$1 as c, SelectValue$1 as ct, CardHeader$1 as d, SkeletonCard$1 as dt, SelectContent$1 as et, CardTitle$1 as f, SkeletonTable as ft, DialogClose as g, Table as gt, Dialog$1 as h, Switch as ht, AvatarImage$1 as i, SelectScrollDownButton as it, DropdownMenuLabel$1 as j, TerminalLine as jt, DropdownMenuGroup as k, TerminalDisplay as kt, CardDescription$1 as l, SidebarDropZone as lt, CopyButton as m, StatusPill as mt, Avatar$1 as n, SelectItem$1 as nt, Button$1 as o, SelectSeparator as ot, CodeBlock as p, StatCard$1 as pt, Metric as q, AvatarFallback$1 as r, SelectLabel as rt, Card$1 as s, SelectTrigger$1 as st, ArtifactPane$1 as t, SelectGroup as tt, CardFooter as u, Skeleton$1 as ut, DialogDescription$1 as v, TableCaption as vt, DialogTrigger as w, Tabs$1 as wt, DialogOverlay as x, TableHead as xt, DialogFooter$1 as y, TableCell as yt, DropdownMenuSubTrigger$1 as z, badgeVariants as zt };