@tangle-network/ui 11.0.0 → 11.2.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.
Files changed (53) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/{artifact-pane-DvJyPWV4.d.ts → artifact-pane-DpuWcAiF.d.ts} +10 -1
  3. package/dist/chat.d.ts +8 -2
  4. package/dist/chat.js +5 -5
  5. package/dist/{chunk-52Y3FMFI.js → chunk-3M7BPSSW.js} +1 -1
  6. package/dist/chunk-4ORVXSMU.js +507 -0
  7. package/dist/{chunk-LELGOLFV.js → chunk-GGDYWMFF.js} +15 -7
  8. package/dist/{chunk-CCM2KRQH.js → chunk-HW4ROISY.js} +1 -1
  9. package/dist/{chunk-KBOD47AW.js → chunk-J3YZIQNI.js} +2 -2
  10. package/dist/{chunk-CSAIKY36.js → chunk-LTEKI7YJ.js} +12 -7
  11. package/dist/{chunk-KHO7DYXH.js → chunk-OTZWQJ5W.js} +107 -72
  12. package/dist/{chunk-FJBTCTZM.js → chunk-P5F43A65.js} +1 -1
  13. package/dist/{chunk-SZ44QDA6.js → chunk-RADUPP44.js} +12 -5
  14. package/dist/{chunk-HHYUPAOJ.js → chunk-SRAKCVPO.js} +49 -81
  15. package/dist/{document-editor-pane-DyDEX_Zm.d.ts → document-editor-pane-C3cYEDWZ.d.ts} +2 -2
  16. package/dist/{document-editor-pane-WCTA3ZOE.js → document-editor-pane-OQNGM4RJ.js} +3 -3
  17. package/dist/editor.d.ts +3 -3
  18. package/dist/editor.js +3 -3
  19. package/dist/files.d.ts +5 -3
  20. package/dist/files.js +3 -3
  21. package/dist/hooks.js +4 -4
  22. package/dist/index.d.ts +2 -2
  23. package/dist/index.js +9 -9
  24. package/dist/markdown.js +1 -1
  25. package/dist/openui.js +2 -2
  26. package/dist/primitives.d.ts +1 -1
  27. package/dist/primitives.js +1 -1
  28. package/dist/run.d.ts +4 -3
  29. package/dist/run.js +5 -5
  30. package/dist/sdk-hooks.js +4 -4
  31. package/package.json +1 -1
  32. package/src/chat/agent-timeline.stories.tsx +11 -0
  33. package/src/chat/agent-timeline.test.tsx +34 -0
  34. package/src/chat/agent-timeline.tsx +65 -12
  35. package/src/chat/chat-container.tsx +5 -0
  36. package/src/editor/document-editor-pane.stories.tsx +74 -0
  37. package/src/editor/document-editor-pane.tsx +10 -3
  38. package/src/files/file-artifact-pane.tsx +14 -2
  39. package/src/files/file-preview.stories.tsx +22 -1
  40. package/src/files/file-preview.tsx +2 -2
  41. package/src/markdown/markdown.stories.tsx +55 -1
  42. package/src/markdown/markdown.test.tsx +23 -0
  43. package/src/markdown/markdown.tsx +1 -1
  44. package/src/primitives/artifact-pane.tsx +52 -26
  45. package/src/run/expandable-content.test.tsx +52 -0
  46. package/src/run/expandable-content.tsx +73 -0
  47. package/src/run/expanded-tool-detail.tsx +17 -12
  48. package/src/run/inline-thinking-item.stories.tsx +30 -1
  49. package/src/run/inline-thinking-item.tsx +34 -70
  50. package/src/run/inline-tool-item.tsx +30 -116
  51. package/src/run/run-row-shell.test.tsx +38 -0
  52. package/src/run/run-row-shell.tsx +191 -0
  53. package/dist/chunk-INMWNFAS.js +0 -369
@@ -1,26 +1,26 @@
1
1
  import {
2
+ ExpandableContent,
2
3
  InlineToolItem,
3
- LiveDuration
4
- } from "./chunk-INMWNFAS.js";
4
+ RunRowShell
5
+ } from "./chunk-4ORVXSMU.js";
5
6
  import {
6
7
  formatDuration,
7
8
  truncateText
8
9
  } from "./chunk-ULDNFLIM.js";
9
10
  import {
10
11
  OpenUIArtifactRenderer
11
- } from "./chunk-52Y3FMFI.js";
12
+ } from "./chunk-3M7BPSSW.js";
12
13
  import {
13
14
  Markdown
14
- } from "./chunk-FJBTCTZM.js";
15
+ } from "./chunk-P5F43A65.js";
15
16
  import {
16
17
  cn
17
18
  } from "./chunk-RQHJBTEU.js";
18
19
 
19
20
  // src/run/inline-thinking-item.tsx
20
21
  import { memo, useEffect, useRef, useState } from "react";
21
- import * as Collapsible from "@radix-ui/react-collapsible";
22
- import { Brain, ChevronRight } from "lucide-react";
23
- import { jsx, jsxs } from "react/jsx-runtime";
22
+ import { Brain } from "lucide-react";
23
+ import { jsx } from "react/jsx-runtime";
24
24
  var InlineThinkingItem = memo(
25
25
  ({
26
26
  part,
@@ -33,7 +33,7 @@ var InlineThinkingItem = memo(
33
33
  const autoCollapsedRef = useRef(false);
34
34
  const startTime = part.time?.start;
35
35
  const endTime = part.time?.end;
36
- const durationMs = startTime && endTime ? endTime - startTime : void 0;
36
+ const durationMs = startTime != null && endTime != null ? endTime - startTime : void 0;
37
37
  const isActive = startTime != null && endTime == null;
38
38
  const preview = part.text ? truncateText(part.text, 120) : void 0;
39
39
  useEffect(() => {
@@ -50,72 +50,40 @@ var InlineThinkingItem = memo(
50
50
  return () => window.clearTimeout(timer);
51
51
  }
52
52
  }, [autoCollapse, durationMs, isActive]);
53
- return /* @__PURE__ */ jsx(Collapsible.Root, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxs(
54
- "div",
53
+ return /* @__PURE__ */ jsx(
54
+ RunRowShell,
55
55
  {
56
- className: cn(
57
- "overflow-hidden rounded-[var(--radius-lg)] border bg-card transition-colors",
58
- isActive ? "border-[var(--border-accent)]" : "border-border hover:border-[var(--border-accent)]",
59
- className
60
- ),
61
- children: [
62
- /* @__PURE__ */ jsx(Collapsible.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
63
- "button",
64
- {
65
- className: "flex w-full items-center gap-2.5 px-3 py-2 text-left text-sm cursor-pointer",
66
- children: [
67
- /* @__PURE__ */ jsx(
68
- "div",
69
- {
70
- className: cn(
71
- "flex h-6 w-6 shrink-0 items-center justify-center rounded-[var(--radius-sm)] border",
72
- isActive ? "border-[var(--border-accent)] bg-[var(--accent-surface-soft)] text-primary" : "border-border bg-muted text-muted-foreground"
73
- ),
74
- children: /* @__PURE__ */ jsx(Brain, { className: cn("h-3 w-3 shrink-0", isActive && "animate-pulse") })
75
- }
76
- ),
77
- /* @__PURE__ */ jsx("p", { className: "min-w-0 flex-1 truncate font-[var(--font-sans)] text-muted-foreground", children: preview ?? (isActive ? "Thinking\u2026" : "Reasoning") }),
78
- /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
79
- isActive && startTime ? /* @__PURE__ */ jsx(LiveDuration, { startTime }) : null,
80
- !isActive && durationMs != null ? /* @__PURE__ */ jsx("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", children: formatDuration(durationMs) }) : null,
81
- /* @__PURE__ */ jsx(
82
- ChevronRight,
83
- {
84
- className: cn(
85
- "h-3 w-3 text-muted-foreground transition-transform shrink-0",
86
- open && "rotate-90"
87
- )
88
- }
89
- )
90
- ] })
91
- ]
92
- }
93
- ) }),
94
- /* @__PURE__ */ jsx(Collapsible.Content, { className: "overflow-hidden data-[state=open]:animate-slideDown data-[state=closed]:animate-slideUp", children: part.text ? /* @__PURE__ */ jsx(
95
- "div",
96
- {
97
- className: cn(
98
- "max-h-60 overflow-y-auto border-t border-border bg-muted px-3 py-3 text-sm leading-relaxed text-muted-foreground",
99
- contentClassName
100
- ),
101
- children: /* @__PURE__ */ jsx(Markdown, { children: part.text })
102
- }
103
- ) : /* @__PURE__ */ jsx("div", { className: "border-t border-border bg-muted px-3 py-2.5 text-xs text-muted-foreground", children: "No reasoning text provided." }) })
104
- ]
56
+ icon: /* @__PURE__ */ jsx(Brain, { className: "h-3.5 w-3.5" }),
57
+ title: isActive ? "Thinking\u2026" : "Reasoning",
58
+ description: preview,
59
+ status: isActive ? "running" : "idle",
60
+ startTime,
61
+ durationMs,
62
+ open,
63
+ onOpenChange: setOpen,
64
+ className,
65
+ children: part.text ? /* @__PURE__ */ jsx(
66
+ ExpandableContent,
67
+ {
68
+ fadeClassName: "from-[var(--md3-surface-container)]",
69
+ className: contentClassName ? `px-3 py-3 ${contentClassName}` : "px-3 py-3",
70
+ children: /* @__PURE__ */ jsx("div", { className: "text-sm leading-relaxed text-foreground", children: /* @__PURE__ */ jsx(Markdown, { children: part.text }) })
71
+ }
72
+ ) : /* @__PURE__ */ jsx("div", { className: "px-3 py-2.5 text-xs text-muted-foreground", children: "No reasoning text provided." })
105
73
  }
106
- ) });
74
+ );
107
75
  }
108
76
  );
109
77
  InlineThinkingItem.displayName = "InlineThinkingItem";
110
78
 
111
79
  // src/run/run-group.tsx
112
80
  import { memo as memo2, useMemo } from "react";
113
- import * as Collapsible2 from "@radix-ui/react-collapsible";
81
+ import * as Collapsible from "@radix-ui/react-collapsible";
114
82
  import {
115
83
  Bot,
116
84
  Loader2,
117
85
  ChevronDown,
118
- ChevronRight as ChevronRight2,
86
+ ChevronRight,
119
87
  Terminal,
120
88
  FileEdit,
121
89
  FileSearch,
@@ -126,14 +94,14 @@ import {
126
94
  Settings,
127
95
  Sparkles
128
96
  } from "lucide-react";
129
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
97
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
130
98
  function SpineRow({
131
99
  accentClassName,
132
100
  isLast,
133
101
  children
134
102
  }) {
135
- return /* @__PURE__ */ jsxs2("div", { className: "grid grid-cols-[1.25rem_minmax(0,1fr)] gap-x-3", children: [
136
- /* @__PURE__ */ jsxs2("div", { className: "relative flex justify-center", children: [
103
+ return /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[1.25rem_minmax(0,1fr)] gap-x-3", children: [
104
+ /* @__PURE__ */ jsxs("div", { className: "relative flex justify-center", children: [
137
105
  !isLast && /* @__PURE__ */ jsx2("span", { className: "absolute top-3.5 bottom-[-0.75rem] left-1/2 w-px -translate-x-1/2 bg-[var(--border-subtle)]" }),
138
106
  /* @__PURE__ */ jsx2(
139
107
  "span",
@@ -163,10 +131,10 @@ function AssistantShell({
163
131
  isStreaming,
164
132
  children
165
133
  }) {
166
- return /* @__PURE__ */ jsxs2("div", { className: "flex flex-col gap-1", children: [
167
- /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2 px-1 font-medium text-muted-foreground text-xs", children: [
134
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
135
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-1 font-medium text-muted-foreground text-xs", children: [
168
136
  /* @__PURE__ */ jsx2("span", { children: branding.label }),
169
- isStreaming ? /* @__PURE__ */ jsxs2("span", { className: "inline-flex items-center gap-1.5", children: [
137
+ isStreaming ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
170
138
  /* @__PURE__ */ jsx2(Loader2, { className: "h-3 w-3 animate-spin" }),
171
139
  "Thinking"
172
140
  ] }) : null
@@ -321,7 +289,7 @@ var RunGroup = memo2(
321
289
  if (!isStreaming) {
322
290
  return null;
323
291
  }
324
- return /* @__PURE__ */ jsx2(AssistantShell, { branding, isStreaming: true, children: /* @__PURE__ */ jsx2("div", { className: "flex items-center gap-2 px-0.5 py-0.5 text-sm text-[var(--text-muted)]", children: /* @__PURE__ */ jsxs2("span", { className: "flex gap-[5px]", children: [
292
+ return /* @__PURE__ */ jsx2(AssistantShell, { branding, isStreaming: true, children: /* @__PURE__ */ jsx2("div", { className: "flex items-center gap-2 px-0.5 py-0.5 text-sm text-[var(--text-muted)]", children: /* @__PURE__ */ jsxs("span", { className: "flex gap-[5px]", children: [
325
293
  /* @__PURE__ */ jsx2("span", { className: "h-2 w-2 animate-bounce rounded-full bg-[var(--brand-glow)]", style: { animationDelay: "0ms" } }),
326
294
  /* @__PURE__ */ jsx2("span", { className: "h-2 w-2 animate-bounce rounded-full bg-[var(--brand-glow)]", style: { animationDelay: "150ms" } }),
327
295
  /* @__PURE__ */ jsx2("span", { className: "h-2 w-2 animate-bounce rounded-full bg-[var(--brand-glow)]", style: { animationDelay: "300ms" } })
@@ -344,7 +312,7 @@ var RunGroup = memo2(
344
312
  const schema = extractOpenUISchema(toolPart.state.output);
345
313
  const summary = getOpenUISummary(toolPart.state.output);
346
314
  if (toolPart.state.status === "completed" && schema) {
347
- return /* @__PURE__ */ jsxs2(
315
+ return /* @__PURE__ */ jsxs(
348
316
  "div",
349
317
  {
350
318
  className: "overflow-hidden rounded-[var(--radius-lg)] border border-[var(--border-subtle)] bg-[var(--md3-surface-container)]",
@@ -357,7 +325,7 @@ var RunGroup = memo2(
357
325
  );
358
326
  }
359
327
  if (toolPart.state.status === "running") {
360
- return /* @__PURE__ */ jsxs2(
328
+ return /* @__PURE__ */ jsxs(
361
329
  "div",
362
330
  {
363
331
  className: "flex items-center gap-2 rounded-[var(--radius-lg)] border border-[var(--border-subtle)] bg-[var(--md3-surface-container)] px-4 py-3 text-sm text-muted-foreground",
@@ -385,24 +353,24 @@ var RunGroup = memo2(
385
353
  if (part.type === "text") return "bg-primary";
386
354
  return "bg-[var(--border-hover)]";
387
355
  };
388
- return /* @__PURE__ */ jsx2(Collapsible2.Root, { open: !collapsed, onOpenChange: () => onToggle(), children: /* @__PURE__ */ jsxs2("div", { className: "flex flex-col gap-1", children: [
389
- /* @__PURE__ */ jsxs2("div", { className: "flex items-start gap-2", children: [
390
- /* @__PURE__ */ jsx2(Collapsible2.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs2(
356
+ return /* @__PURE__ */ jsx2(Collapsible.Root, { open: !collapsed, onOpenChange: () => onToggle(), children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
357
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2", children: [
358
+ /* @__PURE__ */ jsx2(Collapsible.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
391
359
  "button",
392
360
  {
393
361
  type: "button",
394
362
  className: "group flex min-w-0 flex-1 items-center gap-2 rounded-md px-1 py-0.5 text-left transition-colors hover:bg-[var(--surface-container-high)]/40",
395
363
  children: [
396
- collapsed ? /* @__PURE__ */ jsx2(ChevronRight2, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }) : /* @__PURE__ */ jsx2(ChevronDown, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }),
364
+ collapsed ? /* @__PURE__ */ jsx2(ChevronRight, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }) : /* @__PURE__ */ jsx2(ChevronDown, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }),
397
365
  /* @__PURE__ */ jsx2("span", { className: cn("font-semibold text-sm", branding.textClass), children: branding.label }),
398
366
  renderSummary(run) ? /* @__PURE__ */ jsx2("span", { className: "text-[11px] text-muted-foreground", children: renderSummary(run) }) : null,
399
367
  collapsed && run.summaryText ? /* @__PURE__ */ jsx2("span", { className: "min-w-0 truncate text-[11px] text-foreground/70", children: run.summaryText }) : null,
400
- /* @__PURE__ */ jsxs2("span", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [
368
+ /* @__PURE__ */ jsxs("span", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [
401
369
  /* @__PURE__ */ jsx2(CategoryBadges, { categories: stats.toolCategories }),
402
- isStreaming ? /* @__PURE__ */ jsxs2("span", { className: "inline-flex items-center gap-1 rounded-full border border-[var(--border-accent)] bg-[var(--accent-surface-soft)] px-2 py-px text-[10px] font-semibold uppercase text-[var(--accent-text)]", children: [
370
+ isStreaming ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 rounded-full border border-[var(--border-accent)] bg-[var(--accent-surface-soft)] px-2 py-px text-[10px] font-semibold uppercase text-[var(--accent-text)]", children: [
403
371
  /* @__PURE__ */ jsx2(Loader2, { className: "h-2.5 w-2.5 animate-spin" }),
404
372
  "Running"
405
- ] }) : /* @__PURE__ */ jsxs2("span", { className: "inline-flex items-center gap-1 rounded-full border border-border px-2 py-px text-[10px] font-semibold uppercase text-muted-foreground", children: [
373
+ ] }) : /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 rounded-full border border-border px-2 py-px text-[10px] font-semibold uppercase text-muted-foreground", children: [
406
374
  /* @__PURE__ */ jsx2(Sparkles, { className: "h-2.5 w-2.5" }),
407
375
  "Done"
408
376
  ] })
@@ -413,7 +381,7 @@ var RunGroup = memo2(
413
381
  headerActions ? /* @__PURE__ */ jsx2("div", { className: "flex shrink-0 flex-wrap items-center justify-end gap-1.5 pt-1", children: headerActions }) : null
414
382
  ] }),
415
383
  collapsed && run.summaryText ? /* @__PURE__ */ jsx2("div", { className: "line-clamp-2 pl-6 text-sm leading-6 text-muted-foreground", children: run.summaryText }) : null,
416
- /* @__PURE__ */ jsx2(Collapsible2.Content, { className: "overflow-hidden data-[state=open]:animate-slideDown data-[state=closed]:animate-slideUp", children: /* @__PURE__ */ jsx2("div", { className: "pt-1.5", children: rows.map(({ part, msgId, index }, rowIndex) => {
384
+ /* @__PURE__ */ jsx2(Collapsible.Content, { className: "overflow-hidden data-[state=open]:animate-slideDown data-[state=closed]:animate-slideUp", children: /* @__PURE__ */ jsx2("div", { className: "pt-1.5", children: rows.map(({ part, msgId, index }, rowIndex) => {
417
385
  const key = `${msgId}-${index}`;
418
386
  const isLast = rowIndex === rows.length - 1;
419
387
  let node = null;
@@ -423,12 +391,12 @@ var RunGroup = memo2(
423
391
  const schema = extractOpenUISchema(toolPart.state.output);
424
392
  const summary = getOpenUISummary(toolPart.state.output);
425
393
  if (toolPart.state.status === "completed" && schema) {
426
- node = /* @__PURE__ */ jsxs2("div", { className: "overflow-hidden rounded-[var(--radius-lg)] border border-[var(--border-subtle)] bg-[var(--md3-surface-container)]", children: [
394
+ node = /* @__PURE__ */ jsxs("div", { className: "overflow-hidden rounded-[var(--radius-lg)] border border-[var(--border-subtle)] bg-[var(--md3-surface-container)]", children: [
427
395
  summary ? /* @__PURE__ */ jsx2("div", { className: "border-b border-[var(--border-subtle)] px-4 py-3 text-sm leading-6 text-foreground", children: summary }) : null,
428
396
  /* @__PURE__ */ jsx2("div", { className: "p-4", children: /* @__PURE__ */ jsx2(OpenUIArtifactRenderer, { schema }) })
429
397
  ] });
430
398
  } else if (toolPart.state.status === "running") {
431
- node = /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-3 rounded-[var(--radius-lg)] border border-[var(--border-subtle)] bg-[var(--md3-surface-container)] px-4 py-3 text-sm text-muted-foreground", children: [
399
+ node = /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 rounded-[var(--radius-lg)] border border-[var(--border-subtle)] bg-[var(--md3-surface-container)] px-4 py-3 text-sm text-muted-foreground", children: [
432
400
  /* @__PURE__ */ jsx2(Loader2, { className: "h-4 w-4 animate-spin text-primary" }),
433
401
  "Building view\u2026"
434
402
  ] });
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { a as ArtifactPaneProps } from './artifact-pane-DvJyPWV4.js';
3
+ import { a as ArtifactPaneProps } from './artifact-pane-DpuWcAiF.js';
4
4
  import { HocuspocusProvider } from '@hocuspocus/provider';
5
5
  import * as Y from 'yjs';
6
6
 
@@ -119,6 +119,6 @@ interface DocumentEditorPaneProps extends Omit<ArtifactPaneProps, "children" | "
119
119
  * DocumentEditorPane — reusable markdown document surface with preview/edit
120
120
  * modes and optional collaborative editing backed by Yjs/Hocuspocus.
121
121
  */
122
- declare function DocumentEditorPane({ eyebrow, title, subtitle, meta, headerActions, footer, className, contentClassName, tabs, toolbar, markdown, mode, defaultMode, onModeChange, backend, placeholder, autoFocus, readOnly, onChange, onSave, saving, saveLabel, previewClassName, editorClassName, collaboration, }: DocumentEditorPaneProps): react_jsx_runtime.JSX.Element;
122
+ declare function DocumentEditorPane({ eyebrow, title, subtitle, meta, headerActions, footer, className, contentClassName, headerClassName, hideTitleBlock, tabs, toolbar, markdown, mode, defaultMode, onModeChange, backend, placeholder, autoFocus, readOnly, onChange, onSave, saving, saveLabel, previewClassName, editorClassName, collaboration, }: DocumentEditorPaneProps): react_jsx_runtime.JSX.Element;
123
123
 
124
124
  export { type Collaborator as C, type DocumentEditorBackend as D, type EditorContextValue as E, type ConnectionState as a, type DocumentEditorMode as b, DocumentEditorPane as c, type DocumentEditorPaneCollaborationConfig as d, type DocumentEditorPaneProps as e, EditorProvider as f, type EditorProviderProps as g, type EditorTokenRefreshResult as h, type EditorUser as i, useEditorContext as u };
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import {
3
3
  DocumentEditorPane
4
- } from "./chunk-SZ44QDA6.js";
4
+ } from "./chunk-RADUPP44.js";
5
5
  import "./chunk-Q56BYXQF.js";
6
- import "./chunk-CSAIKY36.js";
7
- import "./chunk-FJBTCTZM.js";
6
+ import "./chunk-LTEKI7YJ.js";
7
+ import "./chunk-P5F43A65.js";
8
8
  import "./chunk-WUQDUBJG.js";
9
9
  import "./chunk-RQHJBTEU.js";
10
10
  export {
package/dist/editor.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { C as Collaborator, a as ConnectionState } from './document-editor-pane-DyDEX_Zm.js';
2
- export { D as DocumentEditorBackend, b as DocumentEditorMode, c as DocumentEditorPane, d as DocumentEditorPaneCollaborationConfig, e as DocumentEditorPaneProps, E as EditorContextValue, f as EditorProvider, g as EditorProviderProps, h as EditorTokenRefreshResult, i as EditorUser, u as useEditorContext } from './document-editor-pane-DyDEX_Zm.js';
1
+ import { C as Collaborator, a as ConnectionState } from './document-editor-pane-C3cYEDWZ.js';
2
+ export { D as DocumentEditorBackend, b as DocumentEditorMode, c as DocumentEditorPane, d as DocumentEditorPaneCollaborationConfig, e as DocumentEditorPaneProps, E as EditorContextValue, f as EditorProvider, g as EditorProviderProps, h as EditorTokenRefreshResult, i as EditorUser, u as useEditorContext } from './document-editor-pane-C3cYEDWZ.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import { Editor } from '@tiptap/react';
5
5
  import { HocuspocusProvider } from '@hocuspocus/provider';
6
6
  import 'react';
7
- import './artifact-pane-DvJyPWV4.js';
7
+ import './artifact-pane-DpuWcAiF.js';
8
8
  import 'yjs';
9
9
 
10
10
  /**
package/dist/editor.js CHANGED
@@ -11,10 +11,10 @@ import {
11
11
  useEditorConnection,
12
12
  useEditorContext,
13
13
  useYjsState
14
- } from "./chunk-SZ44QDA6.js";
14
+ } from "./chunk-RADUPP44.js";
15
15
  import "./chunk-Q56BYXQF.js";
16
- import "./chunk-CSAIKY36.js";
17
- import "./chunk-FJBTCTZM.js";
16
+ import "./chunk-LTEKI7YJ.js";
17
+ import "./chunk-P5F43A65.js";
18
18
  import "./chunk-WUQDUBJG.js";
19
19
  import "./chunk-RQHJBTEU.js";
20
20
  export {
package/dist/files.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { GitStatusEntry, ContextMenuItem, ContextMenuOpenContext, GitStatus } from '@pierre/trees';
3
3
  import { ReactNode, CSSProperties } from 'react';
4
- import { b as DocumentEditorMode, D as DocumentEditorBackend, d as DocumentEditorPaneCollaborationConfig } from './document-editor-pane-DyDEX_Zm.js';
5
- import { a as ArtifactPaneProps } from './artifact-pane-DvJyPWV4.js';
4
+ import { b as DocumentEditorMode, D as DocumentEditorBackend, d as DocumentEditorPaneCollaborationConfig } from './document-editor-pane-C3cYEDWZ.js';
5
+ import { a as ArtifactPaneProps } from './artifact-pane-DpuWcAiF.js';
6
6
  import '@hocuspocus/provider';
7
7
  import 'yjs';
8
8
 
@@ -164,13 +164,15 @@ interface FileArtifactPaneProps extends Omit<FilePreviewProps, "className"> {
164
164
  toolbar?: ArtifactPaneProps["toolbar"];
165
165
  footer?: ArtifactPaneProps["footer"];
166
166
  className?: string;
167
+ headerClassName?: ArtifactPaneProps["headerClassName"];
168
+ hideTitleBlock?: ArtifactPaneProps["hideTitleBlock"];
167
169
  editor?: FileArtifactPaneEditorOptions;
168
170
  }
169
171
  /**
170
172
  * FileArtifactPane — opinionated artifact frame for file previews with tabs and
171
173
  * header actions.
172
174
  */
173
- declare function FileArtifactPane({ filename, content, blobUrl, mimeType, onClose, onDownload, path, tabs, activeTabId, onTabSelect, onTabClose, eyebrow, meta, toolbar, footer, className, editor, }: FileArtifactPaneProps): react_jsx_runtime.JSX.Element;
175
+ declare function FileArtifactPane({ filename, content, blobUrl, mimeType, onClose, onDownload, path, tabs, activeTabId, onTabSelect, onTabClose, eyebrow, meta, toolbar, footer, className, headerClassName, hideTitleBlock, editor, }: FileArtifactPaneProps): react_jsx_runtime.JSX.Element;
174
176
 
175
177
  /**
176
178
  * Shared file-format detection for every file surface — the preview pane, the
package/dist/files.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  FileTree,
6
6
  RichFileTree,
7
7
  filterFileTree
8
- } from "./chunk-LELGOLFV.js";
8
+ } from "./chunk-GGDYWMFF.js";
9
9
  import {
10
10
  detectFileFormat,
11
11
  fileExtension,
@@ -13,8 +13,8 @@ import {
13
13
  getFormatLabel,
14
14
  getSyntaxLanguage
15
15
  } from "./chunk-ZRVH3WCA.js";
16
- import "./chunk-CSAIKY36.js";
17
- import "./chunk-FJBTCTZM.js";
16
+ import "./chunk-LTEKI7YJ.js";
17
+ import "./chunk-P5F43A65.js";
18
18
  import "./chunk-WUQDUBJG.js";
19
19
  import "./chunk-RQHJBTEU.js";
20
20
  export {
package/dist/hooks.js CHANGED
@@ -11,19 +11,19 @@ import {
11
11
  useSSEStream,
12
12
  useSdkSession,
13
13
  useToolCallStream
14
- } from "./chunk-CCM2KRQH.js";
14
+ } from "./chunk-HW4ROISY.js";
15
15
  import "./chunk-OEX7NZE3.js";
16
16
  import {
17
17
  useAutoScroll,
18
18
  useRunCollapseState,
19
19
  useRunGroups
20
20
  } from "./chunk-AZWDI2JG.js";
21
- import "./chunk-KBOD47AW.js";
22
- import "./chunk-INMWNFAS.js";
21
+ import "./chunk-J3YZIQNI.js";
22
+ import "./chunk-4ORVXSMU.js";
23
23
  import "./chunk-ULDNFLIM.js";
24
24
  import "./chunk-AAUNOHVL.js";
25
25
  import "./chunk-ZRVH3WCA.js";
26
- import "./chunk-FJBTCTZM.js";
26
+ import "./chunk-P5F43A65.js";
27
27
  import "./chunk-WUQDUBJG.js";
28
28
  import "./chunk-RQHJBTEU.js";
29
29
  export {
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { B as Button, a as ButtonProps, b as buttonVariants } from './button-CMQuQEW_.js';
2
2
  export { Avatar, AvatarFallback, AvatarImage, Badge, BadgeProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, 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, useTheme, useToast } from './primitives.js';
3
3
  export { Logo, LogoProps, TangleKnot } from '@tangle-network/brand';
4
- export { A as ArtifactPane, a as ArtifactPaneProps } from './artifact-pane-DvJyPWV4.js';
4
+ export { A as ArtifactPane, a as ArtifactPaneProps } from './artifact-pane-DpuWcAiF.js';
5
5
  export { AgentTimeline, AgentTimelineArtifactItem, AgentTimelineCustomItem, AgentTimelineItem, AgentTimelineMessageItem, AgentTimelineProps, AgentTimelineStatusItem, AgentTimelineTone, AgentTimelineToolGroupItem, AgentTimelineToolItem, ChatContainer, ChatContainerProps, ChatMessage, ChatMessageProps, MessageList, MessageListProps, MessageRole, ThinkingIndicator, ThinkingIndicatorProps, UserMessage, UserMessageProps } from './chat.js';
6
6
  export { ExpandedToolDetail, ExpandedToolDetailProps, InlineThinkingItem, InlineThinkingItemProps, InlineToolItem, InlineToolItemProps, LiveDuration, RunGroup, RunGroupProps } from './run.js';
7
7
  export { F as FeedSegment, T as ToolCallData, a as ToolCallFeed, b as ToolCallFeedProps, c as ToolCallStatus, d as ToolCallType, p as parseToolEvent } from './tool-call-feed-D9iofJgW.js';
@@ -34,7 +34,7 @@ import '@radix-ui/react-progress';
34
34
  import '@radix-ui/react-switch';
35
35
  import '@radix-ui/react-label';
36
36
  import '@pierre/trees';
37
- import './document-editor-pane-DyDEX_Zm.js';
37
+ import './document-editor-pane-C3cYEDWZ.js';
38
38
  import '@hocuspocus/provider';
39
39
  import 'yjs';
40
40
  import 'nanostores';
package/dist/index.js CHANGED
@@ -17,7 +17,7 @@ import {
17
17
  useSSEStream,
18
18
  useSdkSession,
19
19
  useToolCallStream
20
- } from "./chunk-CCM2KRQH.js";
20
+ } from "./chunk-HW4ROISY.js";
21
21
  import {
22
22
  addMessage,
23
23
  addParts,
@@ -137,7 +137,7 @@ import {
137
137
  MessageList,
138
138
  ThinkingIndicator,
139
139
  UserMessage
140
- } from "./chunk-KHO7DYXH.js";
140
+ } from "./chunk-OTZWQJ5W.js";
141
141
  import {
142
142
  useAutoScroll,
143
143
  useRunCollapseState,
@@ -147,16 +147,16 @@ import "./chunk-47XH56SV.js";
147
147
  import {
148
148
  ToolCallFeed,
149
149
  parseToolEvent
150
- } from "./chunk-KBOD47AW.js";
150
+ } from "./chunk-J3YZIQNI.js";
151
151
  import {
152
152
  InlineThinkingItem,
153
153
  RunGroup
154
- } from "./chunk-HHYUPAOJ.js";
154
+ } from "./chunk-SRAKCVPO.js";
155
155
  import {
156
156
  ExpandedToolDetail,
157
157
  InlineToolItem,
158
158
  LiveDuration
159
- } from "./chunk-INMWNFAS.js";
159
+ } from "./chunk-4ORVXSMU.js";
160
160
  import {
161
161
  TOOL_CATEGORY_ICONS,
162
162
  formatBytes,
@@ -179,7 +179,7 @@ import {
179
179
  import "./chunk-RQGKSCEZ.js";
180
180
  import {
181
181
  OpenUIArtifactRenderer
182
- } from "./chunk-52Y3FMFI.js";
182
+ } from "./chunk-3M7BPSSW.js";
183
183
  import {
184
184
  Badge,
185
185
  Card,
@@ -210,7 +210,7 @@ import {
210
210
  FileTree,
211
211
  RichFileTree,
212
212
  filterFileTree
213
- } from "./chunk-LELGOLFV.js";
213
+ } from "./chunk-GGDYWMFF.js";
214
214
  import {
215
215
  detectFileFormat,
216
216
  fileExtension,
@@ -226,11 +226,11 @@ import {
226
226
  } from "./chunk-Q56BYXQF.js";
227
227
  import {
228
228
  ArtifactPane
229
- } from "./chunk-CSAIKY36.js";
229
+ } from "./chunk-LTEKI7YJ.js";
230
230
  import "./chunk-5Z5ZYMOJ.js";
231
231
  import {
232
232
  Markdown
233
- } from "./chunk-FJBTCTZM.js";
233
+ } from "./chunk-P5F43A65.js";
234
234
  import {
235
235
  CodeBlock,
236
236
  CopyButton
package/dist/markdown.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import "./chunk-5Z5ZYMOJ.js";
2
2
  import {
3
3
  Markdown
4
- } from "./chunk-FJBTCTZM.js";
4
+ } from "./chunk-P5F43A65.js";
5
5
  import {
6
6
  CodeBlock,
7
7
  CopyButton
package/dist/openui.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import "./chunk-RQGKSCEZ.js";
2
2
  import {
3
3
  OpenUIArtifactRenderer
4
- } from "./chunk-52Y3FMFI.js";
4
+ } from "./chunk-3M7BPSSW.js";
5
5
  import "./chunk-GYPQXTJU.js";
6
6
  import "./chunk-MKTSMWVD.js";
7
- import "./chunk-FJBTCTZM.js";
7
+ import "./chunk-P5F43A65.js";
8
8
  import "./chunk-WUQDUBJG.js";
9
9
  import "./chunk-RQHJBTEU.js";
10
10
  export {
@@ -13,7 +13,7 @@ import * as ProgressPrimitive from '@radix-ui/react-progress';
13
13
  import * as SwitchPrimitives from '@radix-ui/react-switch';
14
14
  import * as LabelPrimitive from '@radix-ui/react-label';
15
15
  export { Logo, LogoProps, TangleKnot } from '@tangle-network/brand';
16
- export { A as ArtifactPane, a as ArtifactPaneProps } from './artifact-pane-DvJyPWV4.js';
16
+ export { A as ArtifactPane, a as ArtifactPaneProps } from './artifact-pane-DpuWcAiF.js';
17
17
  export { C as CodeBlock, a as CodeBlockProps, b as CopyButton } from './code-block-0kSpWMnf.js';
18
18
 
19
19
  declare const Card: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & {
@@ -96,7 +96,7 @@ import {
96
96
  } from "./chunk-Q56BYXQF.js";
97
97
  import {
98
98
  ArtifactPane
99
- } from "./chunk-CSAIKY36.js";
99
+ } from "./chunk-LTEKI7YJ.js";
100
100
  import {
101
101
  CodeBlock,
102
102
  CopyButton
package/dist/run.d.ts CHANGED
@@ -41,9 +41,10 @@ interface InlineToolItemProps {
41
41
  description?: string;
42
42
  }
43
43
  /**
44
- * Compact single-line tool call display (32px height).
45
- * Shows icon, title, description, duration, and status indicator.
46
- * Expands on click to show ExpandedToolDetail.
44
+ * Compact single-line tool call display. Shows a category icon, title,
45
+ * description, duration and status, and expands on click to show
46
+ * ExpandedToolDetail. Rendered through the shared RunRowShell so it stays
47
+ * consistent with the reasoning row.
47
48
  */
48
49
  declare const InlineToolItem: React.MemoExoticComponent<({ part, renderToolDetail, groupPosition, className, contentClassName, actions, title: titleOverride, description: descriptionOverride, }: InlineToolItemProps) => react_jsx_runtime.JSX.Element>;
49
50
 
package/dist/run.js CHANGED
@@ -2,23 +2,23 @@ import "./chunk-47XH56SV.js";
2
2
  import {
3
3
  ToolCallFeed,
4
4
  parseToolEvent
5
- } from "./chunk-KBOD47AW.js";
5
+ } from "./chunk-J3YZIQNI.js";
6
6
  import {
7
7
  InlineThinkingItem,
8
8
  RunGroup
9
- } from "./chunk-HHYUPAOJ.js";
9
+ } from "./chunk-SRAKCVPO.js";
10
10
  import {
11
11
  ExpandedToolDetail,
12
12
  InlineToolItem,
13
13
  LiveDuration
14
- } from "./chunk-INMWNFAS.js";
14
+ } from "./chunk-4ORVXSMU.js";
15
15
  import "./chunk-ULDNFLIM.js";
16
16
  import "./chunk-AAUNOHVL.js";
17
- import "./chunk-52Y3FMFI.js";
17
+ import "./chunk-3M7BPSSW.js";
18
18
  import "./chunk-GYPQXTJU.js";
19
19
  import "./chunk-MKTSMWVD.js";
20
20
  import "./chunk-ZRVH3WCA.js";
21
- import "./chunk-FJBTCTZM.js";
21
+ import "./chunk-P5F43A65.js";
22
22
  import "./chunk-WUQDUBJG.js";
23
23
  import "./chunk-RQHJBTEU.js";
24
24
  export {
package/dist/sdk-hooks.js CHANGED
@@ -5,19 +5,19 @@ import {
5
5
  useSSEStream,
6
6
  useSdkSession,
7
7
  useToolCallStream
8
- } from "./chunk-CCM2KRQH.js";
8
+ } from "./chunk-HW4ROISY.js";
9
9
  import "./chunk-OEX7NZE3.js";
10
10
  import {
11
11
  useAutoScroll,
12
12
  useRunCollapseState,
13
13
  useRunGroups
14
14
  } from "./chunk-AZWDI2JG.js";
15
- import "./chunk-KBOD47AW.js";
16
- import "./chunk-INMWNFAS.js";
15
+ import "./chunk-J3YZIQNI.js";
16
+ import "./chunk-4ORVXSMU.js";
17
17
  import "./chunk-ULDNFLIM.js";
18
18
  import "./chunk-AAUNOHVL.js";
19
19
  import "./chunk-ZRVH3WCA.js";
20
- import "./chunk-FJBTCTZM.js";
20
+ import "./chunk-P5F43A65.js";
21
21
  import "./chunk-WUQDUBJG.js";
22
22
  import "./chunk-RQHJBTEU.js";
23
23
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/ui",
3
- "version": "11.0.0",
3
+ "version": "11.2.0",
4
4
  "description": "Generic React UI components for Tangle products — primitives, chat, run, files, editor, markdown.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -164,6 +164,17 @@ export const CodingSession: Story = {
164
164
  },
165
165
  }
166
166
 
167
+ // ---------------------------------------------------------------------------
168
+ // Long session collapsed to the first N spine rows behind a toggle
169
+ // ---------------------------------------------------------------------------
170
+
171
+ export const Collapsed: Story = {
172
+ args: {
173
+ items: codingSession,
174
+ collapseAfter: 3,
175
+ },
176
+ }
177
+
167
178
  // ---------------------------------------------------------------------------
168
179
  // Session with thinking indicator active
169
180
  // ---------------------------------------------------------------------------