@tangle-network/sandbox-ui 0.113.4 → 0.113.5

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.
@@ -18,6 +18,7 @@ import {
18
18
  } from "@tangle-network/agent-interface";
19
19
  import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
20
20
  import { Brain, ChevronDown, Sparkles } from "lucide-react";
21
+ import { focusRing } from "@tangle-network/ui/utils";
21
22
  import { jsx, jsxs } from "react/jsx-runtime";
22
23
  var REASONING_LADDER = reasoningLadder;
23
24
  function ReasoningGlyph({ level }) {
@@ -87,7 +88,8 @@ function ReasoningLevelPicker({
87
88
  className: cn(
88
89
  "inline-flex h-8 items-center gap-1.5 rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container px-2.5",
89
90
  "text-xs font-medium text-foreground shadow-sm transition-colors",
90
- "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
91
+ "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high",
92
+ focusRing,
91
93
  "data-[state=open]:border-[var(--md3-outline-variant)] data-[state=open]:bg-surface-container-high",
92
94
  "disabled:cursor-not-allowed disabled:opacity-50",
93
95
  className,
@@ -224,6 +226,7 @@ var AnchoredPopover = React2.forwardRef(
224
226
  // src/chat/informative-lock.tsx
225
227
  import { Lock, Plus } from "lucide-react";
226
228
  import * as React3 from "react";
229
+ import { focusRing as focusRing2 } from "@tangle-network/ui/utils";
227
230
  import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
228
231
  function InformativeLock({
229
232
  children,
@@ -278,7 +281,8 @@ function InformativeLock({
278
281
  className: cn(
279
282
  "inline-flex h-8 items-center gap-1.5 rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container px-2.5 opacity-60",
280
283
  "text-xs font-medium text-foreground shadow-sm transition-colors",
281
- "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
284
+ "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high",
285
+ focusRing2,
282
286
  "data-[state=open]:border-[var(--md3-outline-variant)] data-[state=open]:bg-surface-container-high",
283
287
  triggerClassName
284
288
  ),
@@ -319,7 +323,8 @@ function InformativeLock({
319
323
  className: cn(
320
324
  "mt-3 flex w-full items-center justify-center gap-1.5 rounded-md px-2.5 py-2 text-sm font-medium text-foreground",
321
325
  "bg-primary/10 ring-1 ring-inset ring-primary/25 transition-colors",
322
- "hover:bg-primary/15 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring"
326
+ "hover:bg-primary/15",
327
+ focusRing2
323
328
  ),
324
329
  children: [
325
330
  /* @__PURE__ */ jsx3(Plus, { className: "h-4 w-4" }),
@@ -336,6 +341,7 @@ function InformativeLock({
336
341
  }
337
342
 
338
343
  // src/chat/agent-profile-picker.tsx
344
+ import { focusField, focusRing as focusRing3 } from "@tangle-network/ui/utils";
339
345
  import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
340
346
  function profileSubtitle(profile) {
341
347
  if (profile.description) return profile.description;
@@ -418,7 +424,8 @@ function AgentProfilePicker({
418
424
  className: cn(
419
425
  "inline-flex h-8 items-center gap-1.5 rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container px-2.5",
420
426
  "text-xs font-medium text-foreground shadow-sm transition-colors",
421
- "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
427
+ "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high",
428
+ focusRing3,
422
429
  "data-[state=open]:border-[var(--md3-outline-variant)] data-[state=open]:bg-surface-container-high",
423
430
  "disabled:cursor-not-allowed disabled:opacity-60",
424
431
  triggerClassName
@@ -576,7 +583,7 @@ function ProfileForm({
576
583
  value: name,
577
584
  onChange: (event) => setName(event.target.value),
578
585
  placeholder: "Agent name (e.g. Tax Reviewer)",
579
- className: "w-full rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container px-3 py-2 text-sm outline-none focus:border-primary"
586
+ className: `w-full rounded-lg border bg-surface-container px-3 py-2 text-sm ${focusField}`
580
587
  }
581
588
  ),
582
589
  capabilities.length > 0 && /* @__PURE__ */ jsxs3("div", { children: [
@@ -611,7 +618,7 @@ function ProfileForm({
611
618
  onChange: (event) => setInstructions(event.target.value),
612
619
  rows: 2,
613
620
  placeholder: "Instructions (optional) \u2014 how this agent should behave",
614
- className: "w-full resize-none rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container px-3 py-2 text-sm outline-none focus:border-primary"
621
+ className: `w-full resize-none rounded-lg border bg-surface-container px-3 py-2 text-sm ${focusField}`
615
622
  }
616
623
  ),
617
624
  /* @__PURE__ */ jsxs3("div", { className: "flex justify-end gap-2", children: [
@@ -650,6 +657,7 @@ import { modelProvider, snapHarnessToModel } from "@tangle-network/agent-interfa
650
657
  import * as React5 from "react";
651
658
  import { Sparkles as Sparkles2, Send, Square, X } from "lucide-react";
652
659
  import { ChatMessage } from "@tangle-network/ui/chat";
660
+ import { focusField as focusField2 } from "@tangle-network/ui/utils";
653
661
  import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
654
662
  function defaultScopeLabel(scope) {
655
663
  if (scope.label) return scope.label;
@@ -879,7 +887,7 @@ function ArtifactAgentDock({
879
887
  placeholder: `Ask about ${heading}\u2026`,
880
888
  rows: 2,
881
889
  disabled: !threadId,
882
- className: "min-h-[44px] flex-1 resize-none rounded-[20px] border border-[var(--md3-outline-variant)] bg-surface-dim px-3.5 py-2 text-sm text-foreground placeholder:text-muted-foreground transition-colors focus:outline-none focus:border-[var(--border-accent)] disabled:opacity-50"
890
+ className: `min-h-[44px] flex-1 resize-none rounded-[20px] border bg-surface-dim px-3.5 py-2 text-sm text-foreground placeholder:text-muted-foreground disabled:opacity-50 ${focusField2}`
883
891
  }
884
892
  ),
885
893
  sending ? /* @__PURE__ */ jsx5(
@@ -1,5 +1,6 @@
1
1
  // src/files/index.ts
2
2
  import {
3
+ CSV_PREVIEW_ROW_LIMIT,
3
4
  FileArtifactPane,
4
5
  FilePreview,
5
6
  FileTabs,
@@ -10,10 +11,13 @@ import {
10
11
  filterFileTree,
11
12
  getCodeLanguage,
12
13
  getFormatLabel,
13
- getSyntaxLanguage
14
+ getSyntaxLanguage,
15
+ parseCsv,
16
+ resolveFilePreviewKind
14
17
  } from "@tangle-network/ui/files";
15
18
 
16
19
  export {
20
+ CSV_PREVIEW_ROW_LIMIT,
17
21
  FileArtifactPane,
18
22
  FilePreview,
19
23
  FileTabs,
@@ -24,5 +28,7 @@ export {
24
28
  filterFileTree,
25
29
  getCodeLanguage,
26
30
  getFormatLabel,
27
- getSyntaxLanguage
31
+ getSyntaxLanguage,
32
+ parseCsv,
33
+ resolveFilePreviewKind
28
34
  };
@@ -3,6 +3,11 @@ import {
3
3
  TOOL_CATEGORY_ICONS,
4
4
  cn,
5
5
  copyText,
6
+ focusField,
7
+ focusFieldInvalid,
8
+ focusFieldWithin,
9
+ focusRing,
10
+ focusRingInset,
6
11
  formatBytes,
7
12
  formatDuration,
8
13
  formatUptime,
@@ -17,6 +22,11 @@ export {
17
22
  TOOL_CATEGORY_ICONS,
18
23
  cn,
19
24
  copyText,
25
+ focusField,
26
+ focusFieldInvalid,
27
+ focusFieldWithin,
28
+ focusRing,
29
+ focusRingInset,
20
30
  formatBytes,
21
31
  formatDuration,
22
32
  formatUptime,
@@ -428,6 +428,7 @@ function ConnectorActionList({
428
428
  import { Button as Button2, EmptyState, Input as Input2 } from "@tangle-network/ui/primitives";
429
429
  import { Blocks, ChevronRight as ChevronRight2, Search as Search2 } from "lucide-react";
430
430
  import { useEffect as useEffect2, useMemo as useMemo2, useState as useState3 } from "react";
431
+ import { focusField } from "@tangle-network/ui/utils";
431
432
  import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
432
433
  function optionsFor(entries, pick) {
433
434
  const map = /* @__PURE__ */ new Map();
@@ -469,7 +470,7 @@ function FilterSelect({
469
470
  value,
470
471
  onChange: (e) => onChange(e.target.value),
471
472
  "aria-label": ariaLabel,
472
- className: "rounded-lg border border-border bg-card px-3 py-2 text-foreground text-sm focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
473
+ className: `rounded-lg border bg-card px-3 py-2 text-foreground text-sm ${focusField}`,
473
474
  children: [
474
475
  /* @__PURE__ */ jsx3("option", { value: "", children: allLabel }),
475
476
  options.map((option) => /* @__PURE__ */ jsx3("option", { value: option.value, children: option.label }, option.value))
@@ -51,7 +51,14 @@ interface RailHeaderProps {
51
51
  brand?: React.ReactNode;
52
52
  /** Destination for the brand link. When set with `LinkComponent`, the brand is a link. */
53
53
  brandHref?: string;
54
- /** Optional middle content (e.g. a project/workspace switcher). Hidden when collapsed. */
54
+ /**
55
+ * Optional middle content (e.g. a project/workspace switcher).
56
+ *
57
+ * When `brand` is set, this is expanded-only — the collapsed rail has room
58
+ * for the mark alone. When `brand` is NOT set this content owns the rail top
59
+ * in BOTH states, so it is also rendered collapsed; read `useSidebar()` to
60
+ * swap in a compact mark there.
61
+ */
55
62
  children?: React.ReactNode;
56
63
  /** Whether the rail is collapsed (icon-only). */
57
64
  collapsed: boolean;
@@ -66,13 +73,6 @@ interface RailHeaderProps {
66
73
  LinkComponent?: React.ComponentType<any>;
67
74
  className?: string;
68
75
  }
69
- /**
70
- * The redesigned rail header. Expanded: brand (left) · optional middle · panel
71
- * toggle (right). Collapsed: only the brand mark, which morphs into the
72
- * expand button on hover (brand fades out, panel glyph fades in over the same
73
- * box) so the collapse affordance is discoverable without spending rail width.
74
- * Renders its own `h-14` bordered bar — drop it in at the top of {@link SidebarRail}.
75
- */
76
76
  declare function RailHeader({ brand, brandHref, children, collapsed, onToggle, collapsible, LinkComponent, className }: RailHeaderProps): React.JSX.Element;
77
77
  interface SidebarProps {
78
78
  children: React.ReactNode;
package/dist/dashboard.js CHANGED
@@ -60,7 +60,7 @@ import {
60
60
  chatCapableHarnesses,
61
61
  parseInsufficientBalance,
62
62
  useSidebar
63
- } from "./chunk-LDAKIKTV.js";
63
+ } from "./chunk-SX344CDB.js";
64
64
  import {
65
65
  BillingDashboard,
66
66
  InfoPanel,
@@ -69,7 +69,7 @@ import {
69
69
  UsageChart,
70
70
  formatPrice
71
71
  } from "./chunk-OMUIPJQZ.js";
72
- import "./chunk-2XPJ2XF7.js";
72
+ import "./chunk-ANSC5AFC.js";
73
73
  import {
74
74
  ModelBrandStack,
75
75
  canonicalModelId,
package/dist/files.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { FileArtifactPane, FileArtifactPaneProps, FileFormat, FileNode, FilePreview, FilePreviewProps, FileTabData, FileTabs, FileTabsProps, FileTree, FileTreeProps, FileTreeVisibilityOptions, RichFileTree, RichFileTreeGitEntry, RichFileTreeGitStatus, RichFileTreeProps, RichFileTreeThemeVars, detectFileFormat, fileExtension, filterFileTree, getCodeLanguage, getFormatLabel, getSyntaxLanguage } from '@tangle-network/ui/files';
1
+ export { CSV_PREVIEW_ROW_LIMIT, FileArtifactPane, FileArtifactPaneProps, FileFormat, FileNode, FilePreview, FilePreviewKind, FilePreviewProps, FileTabData, FileTabs, FileTabsProps, FileTree, FileTreeProps, FileTreeVisibilityOptions, RichFileTree, RichFileTreeGitEntry, RichFileTreeGitStatus, RichFileTreeProps, RichFileTreeThemeVars, detectFileFormat, fileExtension, filterFileTree, getCodeLanguage, getFormatLabel, getSyntaxLanguage, parseCsv, resolveFilePreviewKind } from '@tangle-network/ui/files';
2
2
  import '@tangle-network/ui/openui';
3
3
  import '@tangle-network/ui/run';
4
4
  import '@tangle-network/ui/utils';
package/dist/files.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import {
2
+ CSV_PREVIEW_ROW_LIMIT,
2
3
  FileArtifactPane,
3
4
  FilePreview,
4
5
  FileTabs,
@@ -9,10 +10,13 @@ import {
9
10
  filterFileTree,
10
11
  getCodeLanguage,
11
12
  getFormatLabel,
12
- getSyntaxLanguage
13
- } from "./chunk-PZVUIUUW.js";
13
+ getSyntaxLanguage,
14
+ parseCsv,
15
+ resolveFilePreviewKind
16
+ } from "./chunk-ULPLRBMF.js";
14
17
  import "./chunk-CZ7CSFO4.js";
15
18
  export {
19
+ CSV_PREVIEW_ROW_LIMIT,
16
20
  FileArtifactPane,
17
21
  FilePreview,
18
22
  FileTabs,
@@ -23,5 +27,7 @@ export {
23
27
  filterFileTree,
24
28
  getCodeLanguage,
25
29
  getFormatLabel,
26
- getSyntaxLanguage
30
+ getSyntaxLanguage,
31
+ parseCsv,
32
+ resolveFilePreviewKind
27
33
  };