@tangle-network/ui 11.11.0 → 11.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +4 -1
  3. package/dist/{auth-DixfCMCk.js → auth-DOETfnd9.js} +2 -2
  4. package/dist/auth.js +1 -1
  5. package/dist/{button-uhNnwdsD.js → button-C87nEe2R.js} +1 -1
  6. package/dist/{chat-CPLL0Fd9.js → chat-D-9Fm8A4.js} +14 -9
  7. package/dist/chat.js +1 -1
  8. package/dist/{code-block-CngSn37j.js → code-block-B36KVUSN.js} +1 -1
  9. package/dist/{diff-preview-cySuqowW.js → diff-preview-BcK3nRXb.js} +2 -2
  10. package/dist/{document-editor-pane-Cz6oEF1o.js → document-editor-pane-BxlPjaTP.js} +3 -3
  11. package/dist/editor.js +1 -1
  12. package/dist/{files-CYlOo0mE.js → files-Bug33qCl.js} +5 -5
  13. package/dist/files.js +1 -1
  14. package/dist/{focus-Cw02pNSr.js → focus-BcE_SHqz.js} +2 -1
  15. package/dist/hooks.js +1 -1
  16. package/dist/{index-b56ew9aF.d.ts → index-BgUHilZm.d.ts} +2 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.js +16 -16
  19. package/dist/{markdown-BprL96Gl.js → markdown-BGqicV82.js} +1 -1
  20. package/dist/markdown.js +2 -2
  21. package/dist/{openui-artifact-renderer-DT4xbvWt.js → openui-artifact-renderer-DrU1AdVk.js} +4 -4
  22. package/dist/openui.js +1 -1
  23. package/dist/{primitives-DE-blUz-.js → primitives-Cb8GGVKr.js} +2 -2
  24. package/dist/primitives.js +5 -5
  25. package/dist/{run-group-D1InSdQu.js → run-group-BACLbCFl.js} +3 -3
  26. package/dist/run.js +3 -3
  27. package/dist/sdk-hooks.js +1 -1
  28. package/dist/{table-DHyqDPbU.js → table-Bss73DhB.js} +1 -1
  29. package/dist/{tabs-ujuqAdtb.js → tabs-BVHR6NkO.js} +1 -1
  30. package/dist/{tool-call-feed-C1W1N54c.js → tool-call-feed-Djt2q11V.js} +2 -2
  31. package/dist/{tool-call-step-Bi3_YJRV.js → tool-call-step-DNebqhmX.js} +2 -2
  32. package/dist/tool-previews.js +1 -1
  33. package/dist/{use-sse-stream-BjVBDbxK.js → use-sse-stream-BVgO1QBN.js} +1 -1
  34. package/dist/utils.d.ts +1 -1
  35. package/dist/utils.js +1 -1
  36. package/package.json +2 -2
  37. package/src/chat/agent-timeline.stories.tsx +15 -0
  38. package/src/chat/agent-timeline.tsx +10 -5
  39. package/src/lib/focus.ts +2 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @tangle-network/ui
2
2
 
3
+ ## 11.11.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 658ae83: Use each colored AgentTimeline card's tone foreground for its status detail and artifact text.
8
+ Keep neutral cards on the normal muted foreground.
9
+
10
+ ## 11.11.1
11
+
12
+ ### Patch Changes
13
+
14
+ - 1f0b651: Keep the native field fallback outline off borderless editors inside composite fields. The shared focusFieldWithin helper retains the rounded outer border and halo; standalone fields keep their own focus treatment.
15
+
3
16
  ## 11.11.0
4
17
 
5
18
  ### Minor Changes
package/README.md CHANGED
@@ -114,4 +114,7 @@ A TypeScript consumer resolves these entries through the emitted declarations, a
114
114
 
115
115
  Because the peers now resolve at first render rather than at build time, a missing one surfaces as a thrown error while React renders. Wrap the editors in an error boundary, so the install list reaches a surface you control instead of unmounting the tree.
116
116
 
117
- `nanostores` and `@nanostores/react` back `./stores`, and `react-router` backs `./nav`. Those two entries create their values at module scope, so they hold a static import and a consumer that imports them must install the peer. Every other entry stays free of all of these.
117
+ `nanostores` and `@nanostores/react` back `./stores`, and `react-router` backs `./nav`.
118
+ Those entries create values at module scope, so consumers must install their peers before importing them.
119
+ The package root also re-exports `./stores`, so a root import requires both nanostores peers.
120
+ Consumers that use only other subpath entries do not need these three peers.
@@ -1,6 +1,6 @@
1
- import { i as focusRing } from "./focus-Cw02pNSr.js";
1
+ import { i as focusRing } from "./focus-BcE_SHqz.js";
2
2
  import { t as cn } from "./utils-C_uf36nf.js";
3
- import { t as Button } from "./button-uhNnwdsD.js";
3
+ import { t as Button } from "./button-C87nEe2R.js";
4
4
  import { _ as AvatarFallback, a as DropdownMenuItem, g as Avatar, h as DropdownMenuTrigger, o as DropdownMenuLabel, r as DropdownMenuContent, t as DropdownMenu, u as DropdownMenuSeparator, v as AvatarImage } from "./dropdown-menu-BpcLa5vF.js";
5
5
  import "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
package/dist/auth.js CHANGED
@@ -1,2 +1,2 @@
1
- import { i as UserMenu, n as AuthHeader, r as GitHubLoginButton, t as LoginLayout } from "./auth-DixfCMCk.js";
1
+ import { i as UserMenu, n as AuthHeader, r as GitHubLoginButton, t as LoginLayout } from "./auth-DOETfnd9.js";
2
2
  export { AuthHeader, GitHubLoginButton, LoginLayout, UserMenu };
@@ -1,4 +1,4 @@
1
- import { i as focusRing } from "./focus-Cw02pNSr.js";
1
+ import { i as focusRing } from "./focus-BcE_SHqz.js";
2
2
  import { t as cn } from "./utils-C_uf36nf.js";
3
3
  import { Slot } from "@radix-ui/react-slot";
4
4
  import { cva } from "class-variance-authority";
@@ -1,11 +1,11 @@
1
- import { i as focusRing } from "./focus-Cw02pNSr.js";
1
+ import { i as focusRing } from "./focus-BcE_SHqz.js";
2
2
  import { t as cn } from "./utils-C_uf36nf.js";
3
3
  import { r as getToolDisplayMetadata } from "./tool-display-BAuAVa43.js";
4
4
  import { n as useRunCollapseState, r as useRunGroups, t as useAutoScroll } from "./use-auto-scroll-C5Pjeqon.js";
5
- import { n as ToolCallStep, t as ToolCallGroup } from "./tool-call-step-Bi3_YJRV.js";
6
- import { t as Markdown } from "./markdown-BprL96Gl.js";
7
- import { n as InlineThinkingItem, t as RunGroup } from "./run-group-D1InSdQu.js";
8
- import { t as OpenUIArtifactRenderer } from "./openui-artifact-renderer-DT4xbvWt.js";
5
+ import { n as ToolCallStep, t as ToolCallGroup } from "./tool-call-step-DNebqhmX.js";
6
+ import { t as Markdown } from "./markdown-BGqicV82.js";
7
+ import { n as InlineThinkingItem, t as RunGroup } from "./run-group-BACLbCFl.js";
8
+ import { t as OpenUIArtifactRenderer } from "./openui-artifact-renderer-DrU1AdVk.js";
9
9
  import { memo, useEffect, useMemo, useRef, useState } from "react";
10
10
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
11
11
  import { AlertTriangle, ArrowDown, CheckCircle2, CircleDot, FileText, Info } from "lucide-react";
@@ -120,26 +120,31 @@ const TONE_STYLES = {
120
120
  default: {
121
121
  card: "border-border bg-card",
122
122
  text: "text-foreground",
123
+ supportingText: "text-muted-foreground",
123
124
  icon: CircleDot
124
125
  },
125
126
  info: {
126
127
  card: "border-[var(--surface-info-border)] bg-[var(--surface-info-bg)]",
127
128
  text: "text-[var(--surface-info-text)]",
129
+ supportingText: "text-[var(--surface-info-text)]",
128
130
  icon: Info
129
131
  },
130
132
  success: {
131
133
  card: "border-[var(--surface-success-border)] bg-[var(--surface-success-bg)]",
132
134
  text: "text-[var(--surface-success-text)]",
135
+ supportingText: "text-[var(--surface-success-text)]",
133
136
  icon: CheckCircle2
134
137
  },
135
138
  warning: {
136
139
  card: "border-[var(--surface-warning-border)] bg-[var(--surface-warning-bg)]",
137
140
  text: "text-[var(--surface-warning-text)]",
141
+ supportingText: "text-[var(--surface-warning-text)]",
138
142
  icon: AlertTriangle
139
143
  },
140
144
  error: {
141
145
  card: "border-[var(--surface-danger-border)] bg-[var(--surface-danger-bg)]",
142
146
  text: "text-[var(--surface-danger-text)]",
147
+ supportingText: "text-[var(--surface-danger-text)]",
143
148
  icon: AlertTriangle
144
149
  }
145
150
  };
@@ -190,7 +195,7 @@ function StatusCard({ item }) {
190
195
  className: cn("text-sm font-medium", tone.text),
191
196
  children: item.label
192
197
  }), item.detail && /* @__PURE__ */ jsx("div", {
193
- className: "mt-0.5 text-sm text-muted-foreground",
198
+ className: cn("mt-0.5 text-sm", tone.supportingText),
194
199
  children: item.detail
195
200
  })]
196
201
  })]
@@ -212,15 +217,15 @@ function ArtifactCard({ item }) {
212
217
  className: "min-w-0 flex-1",
213
218
  children: [
214
219
  /* @__PURE__ */ jsx("div", {
215
- className: "text-sm font-medium text-foreground",
220
+ className: cn("text-sm font-medium", tone.text),
216
221
  children: item.title
217
222
  }),
218
223
  item.description && /* @__PURE__ */ jsx("div", {
219
- className: "mt-1 text-sm text-muted-foreground",
224
+ className: cn("mt-1 text-sm", tone.supportingText),
220
225
  children: item.description
221
226
  }),
222
227
  item.meta && /* @__PURE__ */ jsx("div", {
223
- className: "mt-2 flex flex-wrap items-center gap-2 text-xs text-muted-foreground",
228
+ className: cn("mt-2 flex flex-wrap items-center gap-2 text-xs", tone.supportingText),
224
229
  children: item.meta
225
230
  })
226
231
  ]
package/dist/chat.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as MessageList, i as ThinkingIndicator, n as ChatContainer, o as UserMessage, r as AgentTimeline, t as ChatMessage } from "./chat-CPLL0Fd9.js";
1
+ import { a as MessageList, i as ThinkingIndicator, n as ChatContainer, o as UserMessage, r as AgentTimeline, t as ChatMessage } from "./chat-D-9Fm8A4.js";
2
2
  export { AgentTimeline, ChatContainer, ChatMessage, MessageList, ThinkingIndicator, UserMessage };
@@ -1,4 +1,4 @@
1
- import { i as focusRing } from "./focus-Cw02pNSr.js";
1
+ import { i as focusRing } from "./focus-BcE_SHqz.js";
2
2
  import { t as cn } from "./utils-C_uf36nf.js";
3
3
  import { memo, useCallback, useEffect, useRef, useState } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
- import { i as focusRing } from "./focus-Cw02pNSr.js";
1
+ import { i as focusRing } from "./focus-BcE_SHqz.js";
2
2
  import { t as cn } from "./utils-C_uf36nf.js";
3
- import { n as CopyButton, t as CodeBlock } from "./code-block-CngSn37j.js";
3
+ import { n as CopyButton, t as CodeBlock } from "./code-block-B36KVUSN.js";
4
4
  import { a as getSyntaxLanguage } from "./file-format-BgXbr-Ib.js";
5
5
  import { memo, useMemo, useState } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,8 +1,8 @@
1
- import { i as focusRing } from "./focus-Cw02pNSr.js";
1
+ import { i as focusRing } from "./focus-BcE_SHqz.js";
2
2
  import { t as cn } from "./utils-C_uf36nf.js";
3
- import { i as TabsTrigger, n as TabsContent, r as TabsList, t as Tabs } from "./tabs-ujuqAdtb.js";
3
+ import { i as TabsTrigger, n as TabsContent, r as TabsList, t as Tabs } from "./tabs-BVHR6NkO.js";
4
4
  import { t as ArtifactPane } from "./artifact-pane-DMXT9a8U.js";
5
- import { t as Markdown } from "./markdown-BprL96Gl.js";
5
+ import { t as Markdown } from "./markdown-BGqicV82.js";
6
6
  import { Suspense, createContext, lazy, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  import { PencilLine, Save, Users, Wifi, WifiOff } from "lucide-react";
package/dist/editor.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as useCollaborators, c as useYjsState, d as EditorToolbar, f as EditorProvider, i as useCollaboratorPresence, l as CollaboratorsList, o as useDocumentChanges, p as useEditorContext, r as useAwareness, s as useEditorConnection, t as DocumentEditorPane, u as TiptapEditor } from "./document-editor-pane-Cz6oEF1o.js";
1
+ import { a as useCollaborators, c as useYjsState, d as EditorToolbar, f as EditorProvider, i as useCollaboratorPresence, l as CollaboratorsList, o as useDocumentChanges, p as useEditorContext, r as useAwareness, s as useEditorConnection, t as DocumentEditorPane, u as TiptapEditor } from "./document-editor-pane-BxlPjaTP.js";
2
2
  export { CollaboratorsList, DocumentEditorPane, EditorProvider, EditorToolbar, TiptapEditor, useAwareness, useCollaboratorPresence, useCollaborators, useDocumentChanges, useEditorConnection, useEditorContext, useYjsState };
@@ -1,11 +1,11 @@
1
- import { a as focusRingInset, i as focusRing } from "./focus-Cw02pNSr.js";
1
+ import { a as focusRingInset, i as focusRing } from "./focus-BcE_SHqz.js";
2
2
  import { t as cn } from "./utils-C_uf36nf.js";
3
- import { t as Button } from "./button-uhNnwdsD.js";
3
+ import { t as Button } from "./button-C87nEe2R.js";
4
4
  import { t as ArtifactPane } from "./artifact-pane-DMXT9a8U.js";
5
- import { n as CopyButton, t as CodeBlock } from "./code-block-CngSn37j.js";
5
+ import { n as CopyButton, t as CodeBlock } from "./code-block-B36KVUSN.js";
6
6
  import { t as formatBytes } from "./format-DfcLWqMa.js";
7
7
  import { i as getFormatLabel, n as fileExtension, o as resolveFilePreviewKind, r as getCodeLanguage, t as detectFileFormat } from "./file-format-BgXbr-Ib.js";
8
- import { t as Markdown } from "./markdown-BprL96Gl.js";
8
+ import { t as Markdown } from "./markdown-BGqicV82.js";
9
9
  import { Suspense, lazy, useEffect, useMemo, useState } from "react";
10
10
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
11
11
  import { ChevronRight, Download, File, FileCode, FileImage, FileJson, FileSpreadsheet, FileText, Folder, FolderOpen, Music, X } from "lucide-react";
@@ -640,7 +640,7 @@ function FileTabs({ tabs, activeId, onSelect, onClose, className }) {
640
640
  //#endregion
641
641
  //#region src/files/file-artifact-pane.tsx
642
642
  const LazyDocumentEditorPane = lazy(async () => {
643
- return { default: (await import("./document-editor-pane-Cz6oEF1o.js").then((n) => n.n)).DocumentEditorPane };
643
+ return { default: (await import("./document-editor-pane-BxlPjaTP.js").then((n) => n.n)).DocumentEditorPane };
644
644
  });
645
645
  /**
646
646
  * FileArtifactPane — opinionated artifact frame for file previews with tabs and
package/dist/files.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { a as getSyntaxLanguage, i as getFormatLabel, n as fileExtension, o as resolveFilePreviewKind, r as getCodeLanguage, t as detectFileFormat } from "./file-format-BgXbr-Ib.js";
2
- import { a as parseCsv, c as filterFileTree, i as FilePreview, n as FileTabs, o as RichFileTree, r as CSV_PREVIEW_ROW_LIMIT, s as FileTree, t as FileArtifactPane } from "./files-CYlOo0mE.js";
2
+ import { a as parseCsv, c as filterFileTree, i as FilePreview, n as FileTabs, o as RichFileTree, r as CSV_PREVIEW_ROW_LIMIT, s as FileTree, t as FileArtifactPane } from "./files-Bug33qCl.js";
3
3
  export { CSV_PREVIEW_ROW_LIMIT, FileArtifactPane, FilePreview, FileTabs, FileTree, RichFileTree, detectFileFormat, fileExtension, filterFileTree, getCodeLanguage, getFormatLabel, getSyntaxLanguage, parseCsv, resolveFilePreviewKind };
@@ -39,8 +39,9 @@ const focusField = "border-border transition-[border-color,box-shadow] duration-
39
39
  * therefore does not replace it. To style that container's focus differently,
40
40
  * compose your own classes instead of this helper. The field selector is
41
41
  * written out in full because Tailwind reads class names statically.
42
+ * Base styles use its marker class to clear the inner editor fallback outline.
42
43
  */
43
- const focusFieldWithin = "border-border transition-[border-color,box-shadow] duration-150 ease-out hover:border-[var(--border-strong)] has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:border-[var(--focus-border)] has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:ring-3 has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:ring-[var(--focus-halo)]";
44
+ const focusFieldWithin = "focus-field-within border-border transition-[border-color,box-shadow] duration-150 ease-out hover:border-[var(--border-strong)] has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:border-[var(--focus-border)] has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:ring-3 has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:ring-[var(--focus-halo)]";
44
45
  /** Error state for a field: a danger hairline and the same focus shape in danger. Compose after `focusField`. */
45
46
  const focusFieldInvalid = "border-[var(--surface-danger-border)] hover:border-[var(--surface-danger-border)] focus:border-[var(--focus-border-danger)] focus:ring-[var(--focus-halo-danger)]";
46
47
  const focusRingBase = "focus-visible:outline-1 focus-visible:outline-[var(--focus-border)] focus-visible:ring-4 focus-visible:ring-[var(--focus-halo)]";
package/dist/hooks.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { n as useRunCollapseState, r as useRunGroups, t as useAutoScroll } from "./use-auto-scroll-C5Pjeqon.js";
2
- import { a as useToolCallStream, i as useRealtimeSession, n as useSdkSession, o as useDropdownMenu, r as RealtimeSessionRegistry, t as useSSEStream } from "./use-sse-stream-BjVBDbxK.js";
2
+ import { a as useToolCallStream, i as useRealtimeSession, n as useSdkSession, o as useDropdownMenu, r as RealtimeSessionRegistry, t as useSSEStream } from "./use-sse-stream-BVgO1QBN.js";
3
3
  import * as React from "react";
4
4
  //#region src/hooks/use-live-time.ts
5
5
  /**
@@ -91,8 +91,9 @@ declare const focusField = "border-border transition-[border-color,box-shadow] d
91
91
  * therefore does not replace it. To style that container's focus differently,
92
92
  * compose your own classes instead of this helper. The field selector is
93
93
  * written out in full because Tailwind reads class names statically.
94
+ * Base styles use its marker class to clear the inner editor fallback outline.
94
95
  */
95
- declare const focusFieldWithin = "border-border transition-[border-color,box-shadow] duration-150 ease-out hover:border-[var(--border-strong)] has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:border-[var(--focus-border)] has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:ring-3 has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:ring-[var(--focus-halo)]";
96
+ declare const focusFieldWithin = "focus-field-within border-border transition-[border-color,box-shadow] duration-150 ease-out hover:border-[var(--border-strong)] has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:border-[var(--focus-border)] has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:ring-3 has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:ring-[var(--focus-halo)]";
96
97
  /** Error state for a field: a danger hairline and the same focus shape in danger. Compose after `focusField`. */
97
98
  declare const focusFieldInvalid = "border-[var(--surface-danger-border)] hover:border-[var(--surface-danger-border)] focus:border-[var(--focus-border-danger)] focus:ring-[var(--focus-halo-danger)]";
98
99
  /** Keyboard-only focus for a control: a 1px focus line with the halo beyond it. */
package/dist/index.d.ts CHANGED
@@ -20,7 +20,7 @@ import "./openui.js";
20
20
  import { n as MarkdownProps, t as Markdown } from "./index-Cq-EJzqW.js";
21
21
  import { addMessage, addParts, clearChat, isStreamingAtom, messagesAtom, partMapAtom, updatePart } from "./stores.js";
22
22
  import "./types.js";
23
- import { a as focusRingInset, c as getToolCategory, d as timeAgo, f as formatBytes, g as copyText, h as truncateText, i as focusRing, l as getToolDisplayMetadata, m as formatUptime, n as focusFieldInvalid, o as cn, p as formatDuration, r as focusFieldWithin, s as TOOL_CATEGORY_ICONS, t as focusField, u as getToolErrorText } from "./index-b56ew9aF.js";
23
+ import { a as focusRingInset, c as getToolCategory, d as timeAgo, f as formatBytes, g as copyText, h as truncateText, i as focusRing, l as getToolDisplayMetadata, m as formatUptime, n as focusFieldInvalid, o as cn, p as formatDuration, r as focusFieldWithin, s as TOOL_CATEGORY_ICONS, t as focusField, u as getToolErrorText } from "./index-BgUHilZm.js";
24
24
  import { a as WebSearchPreview, c as GlobResultsPreviewProps, d as WriteFilePreview, f as WriteFilePreviewProps, i as QuestionPreviewProps, l as GrepResultsPreview, m as CommandPreviewProps, n as DiffPreviewProps, o as WebSearchPreviewProps, p as CommandPreview, r as QuestionPreview, s as GlobResultsPreview, t as DiffPreview, u as GrepResultsPreviewProps } from "./index-2UntyjBb.js";
25
25
  import { a as RevealResult, i as RedactedDocumentProps, n as RedactedDocument, r as RedactedDocumentData, t as RedactedDocSegment } from "./index-COgqsFAQ.js";
26
26
  export { ActiveProjectActivity, ActiveSessionActivityOptions, ActiveSessionConnectionOptions, ActiveSessionConnectionState, ActiveSessionReconnectState, ActiveSessionRecord, ActiveSessionStatus, ActiveSessionTransportMode, ActiveSessionsState, AgentBranding, AgentStreamEvent, AgentTimeline, type AgentTimelineArtifactItem, type AgentTimelineCustomItem, type AgentTimelineItem, type AgentTimelineMessageItem, type AgentTimelineProps, type AgentTimelineStatusItem, type AgentTimelineTone, type AgentTimelineToolGroupItem, type AgentTimelineToolItem, AppendUserMessageOptions, ApplySdkEventOptions, ArtifactPane, type ArtifactPaneProps, AuthHeader, type AuthHeaderProps, AuthUser, AutomationStreamEvent, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, BeginAssistantMessageOptions, BotStreamEvent, Button, type ButtonProps, CSV_PREVIEW_ROW_LIMIT, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChatContainer, type ChatContainerProps, ChatMessage, type ChatMessageProps, CodeBlock, type CodeBlockProps, CommandPreview, type CommandPreviewProps, CompleteAssistantMessageOptions, ConnectionState, CopyButton, CustomToolRenderer, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DiffPreview, type DiffPreviewProps, DisplayVariant, DropZone, type DropZoneProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, ExpandedToolDetail, type ExpandedToolDetailProps, type FeedSegment, FileArtifactPane, type FileArtifactPaneProps, type FileFormat, type FileNode, FilePreview, type FilePreviewKind, type FilePreviewProps, type FileTabData, FileTabs, type FileTabsProps, FileTree, type FileTreeProps, type FileTreeVisibilityOptions, FilterField, type FilterFieldProps, FinalTextPart, GitHubLoginButton, type GitHubLoginButtonProps, GlobResultsPreview, type GlobResultsPreviewProps, GrepResultsPreview, type GrepResultsPreviewProps, GroupedMessage, InlineCode, type InlineCodeProps, InlineThinkingItem, type InlineThinkingItemProps, InlineToolItem, type InlineToolItemProps, Input, type InputProps, Label, LiveDuration, LoginLayout, type LoginLayoutProps, Logo, type LogoProps, Markdown, type MarkdownProps, MessageList, type MessageListProps, type MessageRole, MessageRun, MessageUser, Metric, type MetricProps, MetricStrip, type MetricStripProps, type OpenUIAction, type OpenUIActionsNode, OpenUIArtifactRenderer, type OpenUIArtifactRendererProps, type OpenUIBadgeNode, type OpenUICardNode, type OpenUICodeNode, type OpenUIComponentNode, type OpenUIGridNode, type OpenUIHeadingNode, type OpenUIKeyValueNode, type OpenUIMarkdownNode, type OpenUIPrimitive, type OpenUISeparatorNode, type OpenUIStackNode, type OpenUIStatNode, type OpenUITableNode, type OpenUITextNode, PageHeader, type PageHeaderProps, Progress, QuestionPreview, type QuestionPreviewProps, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, ReasoningPart, type RedactedDocSegment, RedactedDocument, type RedactedDocumentData, type RedactedDocumentProps, RegisterActiveSessionOptions, type RevealResult, RichFileTree, type RichFileTreeGitEntry, type RichFileTreeGitStatus, type RichFileTreeProps, type RichFileTreeThemeVars, Run, RunGroup, type RunGroupProps, RunRowShell, type RunRowShellProps, type RunRowStatus, RunRowStatusDot, RunStats, SSEEvent, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, SegmentedControl, type SegmentedControlOption, type SegmentedControlProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SessionMessage, SessionPart, SessionProjectKey, type SessionUser, SidebarDropZone, type SidebarDropZoneProps, Skeleton, SkeletonCard, SkeletonTable, StatCard, type StatCardProps, StatusPill, type StatusPillProps, type StatusTone, Switch, TOOL_CATEGORY_ICONS, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TangleKnot, TaskStreamEvent, TerminalCursor, TerminalDisplay, TerminalInput, TerminalLine, TerminalStreamEvent, TextPart, TextShimmer, type TextShimmerProps, Textarea, type TextareaProps, ThemeToggle, ThinkingIndicator, type ThinkingIndicatorProps, type Toast, ToastContainer, ToastProvider, type ToolCallData, ToolCallFeed, type ToolCallFeedProps, type ToolCallStatus, type ToolCallType, ToolCategory, ToolDisplayMetadata, ToolPart, ToolState, ToolStatus, ToolTime, Toolbar, type ToolbarProps, type UploadFile, UploadProgress, type UploadProgressProps, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, UserMenu, type UserMenuProps, UserMessage, type UserMessageProps, WebSearchPreview, type WebSearchPreviewProps, WriteFilePreview, type WriteFilePreviewProps, activeSessionsAtom, addMessage, addParts, badgeVariants, bumpActiveSessionActivity, buttonVariants, clearChat, cn, copyText, createAuthFetcher, detectFileFormat, fileExtension, filterFileTree, focusField, focusFieldInvalid, focusFieldWithin, focusRing, focusRingInset, formatBytes, formatDuration, formatUptime, getActiveSession, getAllActiveSessions, getAllProjectActivity, getCodeLanguage, getFormatLabel, getSessionsByActivity, getSessionsForNavbar, getSessionsForProject, getSyntaxLanguage, getToolCategory, getToolDisplayMetadata, getToolErrorText, getTotalRunningSessionCount, hasBackgroundRunningSessions, isStreamingAtom, messagesAtom, parseCsv, parseToolEvent, partMapAtom, registerActiveSession, resetActiveSessions, resolveFilePreviewKind, setActiveSessionAttention, setActiveSessionConnection, setActiveSessionError, setActiveSessionRunning, setForegroundActiveSession, timeAgo, truncateText, unregisterActiveSession, updateActiveSessionMeta, updatePart, useActiveSession, useActiveSessions, useActiveSessionsState, useApiKey, useAuth, useAutoScroll, useDropdownMenu, useHasBackgroundRunningSessions, useLiveTime, useNavbarSessions, useProjectActivity, useProjectSessions, useRealtimeSession, useRunCollapseState, useRunGroups, useSSEStream, useSdkSession, useSessionsByActivity, useTheme, useToast, useToolCallStream, useTotalRunningSessions };
package/dist/index.js CHANGED
@@ -1,30 +1,30 @@
1
- import { a as focusRingInset, i as focusRing, n as focusFieldInvalid, r as focusFieldWithin, t as focusField } from "./focus-Cw02pNSr.js";
1
+ import { a as focusRingInset, i as focusRing, n as focusFieldInvalid, r as focusFieldWithin, t as focusField } from "./focus-BcE_SHqz.js";
2
2
  import { t as cn } from "./utils-C_uf36nf.js";
3
- import { n as buttonVariants, t as Button } from "./button-uhNnwdsD.js";
4
- import { a as TableFooter, c as TableRow, d as Card, f as CardContent, g as CardTitle, h as CardHeader, i as TableCell, l as Badge, m as CardFooter, n as TableBody, o as TableHead, p as CardDescription, r as TableCaption, s as TableHeader, t as Table, u as badgeVariants } from "./table-DHyqDPbU.js";
5
- import { A as SegmentedControl, B as SelectValue, C as ToastProvider, D as SkeletonTable, E as SkeletonCard, F as SelectLabel, G as DialogContent, H as Textarea, I as SelectScrollDownButton, J as DialogHeader, K as DialogDescription, L as SelectScrollUpButton, M as SelectContent, N as SelectGroup, O as Switch, P as SelectItem, Q as DialogTrigger, R as SelectSeparator, S as ToastContainer, T as Skeleton, U as Dialog, V as Input, W as DialogClose, X as DialogPortal, Y as DialogOverlay, Z as DialogTitle, _ as TerminalInput, a as Metric, b as EmptyState, c as PageHeader, d as InlineCode, f as SidebarDropZone, g as TerminalDisplay, h as TerminalCursor, i as Toolbar, j as Select, k as Progress, l as ThemeToggle, m as DropZone, n as TangleKnot, o as MetricStrip, p as UploadProgress, q as DialogFooter, r as FilterField, s as StatusPill, t as Logo, u as useTheme, v as TerminalLine, w as useToast, x as Label, y as StatCard, z as SelectTrigger } from "./primitives-DE-blUz-.js";
3
+ import { n as buttonVariants, t as Button } from "./button-C87nEe2R.js";
4
+ import { a as TableFooter, c as TableRow, d as Card, f as CardContent, g as CardTitle, h as CardHeader, i as TableCell, l as Badge, m as CardFooter, n as TableBody, o as TableHead, p as CardDescription, r as TableCaption, s as TableHeader, t as Table, u as badgeVariants } from "./table-Bss73DhB.js";
5
+ import { A as SegmentedControl, B as SelectValue, C as ToastProvider, D as SkeletonTable, E as SkeletonCard, F as SelectLabel, G as DialogContent, H as Textarea, I as SelectScrollDownButton, J as DialogHeader, K as DialogDescription, L as SelectScrollUpButton, M as SelectContent, N as SelectGroup, O as Switch, P as SelectItem, Q as DialogTrigger, R as SelectSeparator, S as ToastContainer, T as Skeleton, U as Dialog, V as Input, W as DialogClose, X as DialogPortal, Y as DialogOverlay, Z as DialogTitle, _ as TerminalInput, a as Metric, b as EmptyState, c as PageHeader, d as InlineCode, f as SidebarDropZone, g as TerminalDisplay, h as TerminalCursor, i as Toolbar, j as Select, k as Progress, l as ThemeToggle, m as DropZone, n as TangleKnot, o as MetricStrip, p as UploadProgress, q as DialogFooter, r as FilterField, s as StatusPill, t as Logo, u as useTheme, v as TerminalLine, w as useToast, x as Label, y as StatCard, z as SelectTrigger } from "./primitives-Cb8GGVKr.js";
6
6
  import { _ as AvatarFallback, a as DropdownMenuItem, c as DropdownMenuRadioGroup, d as DropdownMenuShortcut, f as DropdownMenuSub, g as Avatar, h as DropdownMenuTrigger, i as DropdownMenuGroup, l as DropdownMenuRadioItem, m as DropdownMenuSubTrigger, n as DropdownMenuCheckboxItem, o as DropdownMenuLabel, p as DropdownMenuSubContent, r as DropdownMenuContent, s as DropdownMenuPortal, t as DropdownMenu, u as DropdownMenuSeparator, v as AvatarImage } from "./dropdown-menu-BpcLa5vF.js";
7
- import { i as TabsTrigger, n as TabsContent, r as TabsList, t as Tabs } from "./tabs-ujuqAdtb.js";
7
+ import { i as TabsTrigger, n as TabsContent, r as TabsList, t as Tabs } from "./tabs-BVHR6NkO.js";
8
8
  import { t as TextShimmer } from "./text-shimmer-BUUo6I-g.js";
9
9
  import { t as ArtifactPane } from "./artifact-pane-DMXT9a8U.js";
10
- import { n as CopyButton, t as CodeBlock } from "./code-block-CngSn37j.js";
10
+ import { n as CopyButton, t as CodeBlock } from "./code-block-B36KVUSN.js";
11
11
  import { i as getToolErrorText, n as getToolCategory, r as getToolDisplayMetadata, t as TOOL_CATEGORY_ICONS } from "./tool-display-BAuAVa43.js";
12
12
  import { n as useRunCollapseState, r as useRunGroups, t as useAutoScroll } from "./use-auto-scroll-C5Pjeqon.js";
13
13
  import { i as truncateText, n as formatDuration, r as formatUptime, t as formatBytes } from "./format-DfcLWqMa.js";
14
- import { a as GrepResultsPreview, i as GlobResultsPreview, n as QuestionPreview, o as WriteFilePreview, r as WebSearchPreview, s as CommandPreview, t as DiffPreview } from "./diff-preview-cySuqowW.js";
14
+ import { a as GrepResultsPreview, i as GlobResultsPreview, n as QuestionPreview, o as WriteFilePreview, r as WebSearchPreview, s as CommandPreview, t as DiffPreview } from "./diff-preview-BcK3nRXb.js";
15
15
  import { a as getSyntaxLanguage, i as getFormatLabel, n as fileExtension, o as resolveFilePreviewKind, r as getCodeLanguage, t as detectFileFormat } from "./file-format-BgXbr-Ib.js";
16
- import { a as RunRowStatusDot, i as RunRowShell, o as ExpandedToolDetail, r as InlineToolItem } from "./tool-call-step-Bi3_YJRV.js";
17
- import { t as Markdown } from "./markdown-BprL96Gl.js";
18
- import { n as InlineThinkingItem, t as RunGroup } from "./run-group-D1InSdQu.js";
19
- import { t as OpenUIArtifactRenderer } from "./openui-artifact-renderer-DT4xbvWt.js";
20
- import { a as MessageList, i as ThinkingIndicator, n as ChatContainer, o as UserMessage, r as AgentTimeline, t as ChatMessage } from "./chat-CPLL0Fd9.js";
16
+ import { a as RunRowStatusDot, i as RunRowShell, o as ExpandedToolDetail, r as InlineToolItem } from "./tool-call-step-DNebqhmX.js";
17
+ import { t as Markdown } from "./markdown-BGqicV82.js";
18
+ import { n as InlineThinkingItem, t as RunGroup } from "./run-group-BACLbCFl.js";
19
+ import { t as OpenUIArtifactRenderer } from "./openui-artifact-renderer-DrU1AdVk.js";
20
+ import { a as MessageList, i as ThinkingIndicator, n as ChatContainer, o as UserMessage, r as AgentTimeline, t as ChatMessage } from "./chat-D-9Fm8A4.js";
21
21
  import { t as LiveDuration } from "./run-ZsIKPA6J.js";
22
- import { n as parseToolEvent, t as ToolCallFeed } from "./tool-call-feed-C1W1N54c.js";
22
+ import { n as parseToolEvent, t as ToolCallFeed } from "./tool-call-feed-Djt2q11V.js";
23
23
  import "./openui.js";
24
- import { a as parseCsv, c as filterFileTree, i as FilePreview, n as FileTabs, o as RichFileTree, r as CSV_PREVIEW_ROW_LIMIT, s as FileTree, t as FileArtifactPane } from "./files-CYlOo0mE.js";
24
+ import { a as parseCsv, c as filterFileTree, i as FilePreview, n as FileTabs, o as RichFileTree, r as CSV_PREVIEW_ROW_LIMIT, s as FileTree, t as FileArtifactPane } from "./files-Bug33qCl.js";
25
25
  import "./markdown.js";
26
- import { i as UserMenu, n as AuthHeader, r as GitHubLoginButton, t as LoginLayout } from "./auth-DixfCMCk.js";
27
- import { a as useToolCallStream, i as useRealtimeSession, n as useSdkSession, o as useDropdownMenu, r as RealtimeSessionRegistry, t as useSSEStream } from "./use-sse-stream-BjVBDbxK.js";
26
+ import { i as UserMenu, n as AuthHeader, r as GitHubLoginButton, t as LoginLayout } from "./auth-DOETfnd9.js";
27
+ import { a as useToolCallStream, i as useRealtimeSession, n as useSdkSession, o as useDropdownMenu, r as RealtimeSessionRegistry, t as useSSEStream } from "./use-sse-stream-BVgO1QBN.js";
28
28
  import { C as useHasBackgroundRunningSessions, D as useSessionsByActivity, E as useProjectSessions, O as useTotalRunningSessions, S as useActiveSessionsState, T as useProjectActivity, _ as setForegroundActiveSession, a as getAllProjectActivity, b as useActiveSession, c as getSessionsForProject, d as registerActiveSession, f as resetActiveSessions, g as setActiveSessionRunning, h as setActiveSessionError, i as getAllActiveSessions, l as getTotalRunningSessionCount, m as setActiveSessionConnection, n as bumpActiveSessionActivity, o as getSessionsByActivity, p as setActiveSessionAttention, r as getActiveSession, s as getSessionsForNavbar, t as activeSessionsAtom, u as hasBackgroundRunningSessions, v as unregisterActiveSession, w as useNavbarSessions, x as useActiveSessions, y as updateActiveSessionMeta } from "./active-sessions-store-Gt1R0rFG.js";
29
29
  import { createAuthFetcher, useApiKey, useAuth, useLiveTime } from "./hooks.js";
30
30
  import { addMessage, addParts, clearChat, isStreamingAtom, messagesAtom, partMapAtom, updatePart } from "./stores.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cn } from "./utils-C_uf36nf.js";
2
- import { n as CopyButton, t as CodeBlock } from "./code-block-CngSn37j.js";
2
+ import { n as CopyButton, t as CodeBlock } from "./code-block-B36KVUSN.js";
3
3
  import { memo } from "react";
4
4
  import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
5
5
  import ReactMarkdown from "react-markdown";
package/dist/markdown.js CHANGED
@@ -1,3 +1,3 @@
1
- import { n as CopyButton, t as CodeBlock } from "./code-block-CngSn37j.js";
2
- import { t as Markdown } from "./markdown-BprL96Gl.js";
1
+ import { n as CopyButton, t as CodeBlock } from "./code-block-B36KVUSN.js";
2
+ import { t as Markdown } from "./markdown-BGqicV82.js";
3
3
  export { CodeBlock, CopyButton, Markdown };
@@ -1,8 +1,8 @@
1
1
  import { t as cn } from "./utils-C_uf36nf.js";
2
- import { t as Button } from "./button-uhNnwdsD.js";
3
- import { c as TableRow, d as Card, f as CardContent, g as CardTitle, h as CardHeader, i as TableCell, l as Badge, n as TableBody, o as TableHead, p as CardDescription, s as TableHeader, t as Table } from "./table-DHyqDPbU.js";
4
- import { t as CodeBlock } from "./code-block-CngSn37j.js";
5
- import { t as Markdown } from "./markdown-BprL96Gl.js";
2
+ import { t as Button } from "./button-C87nEe2R.js";
3
+ import { c as TableRow, d as Card, f as CardContent, g as CardTitle, h as CardHeader, i as TableCell, l as Badge, n as TableBody, o as TableHead, p as CardDescription, s as TableHeader, t as Table } from "./table-Bss73DhB.js";
4
+ import { t as CodeBlock } from "./code-block-B36KVUSN.js";
5
+ import { t as Markdown } from "./markdown-BGqicV82.js";
6
6
  import { Fragment } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  import { Minus } from "lucide-react";
package/dist/openui.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as OpenUIArtifactRenderer } from "./openui-artifact-renderer-DT4xbvWt.js";
1
+ import { t as OpenUIArtifactRenderer } from "./openui-artifact-renderer-DrU1AdVk.js";
2
2
  export { OpenUIArtifactRenderer };
@@ -1,6 +1,6 @@
1
- import { a as focusRingInset, i as focusRing, n as focusFieldInvalid, r as focusFieldWithin, t as focusField } from "./focus-Cw02pNSr.js";
1
+ import { a as focusRingInset, i as focusRing, n as focusFieldInvalid, r as focusFieldWithin, t as focusField } from "./focus-BcE_SHqz.js";
2
2
  import { t as cn } from "./utils-C_uf36nf.js";
3
- import { d as Card } from "./table-DHyqDPbU.js";
3
+ import { d as Card } from "./table-Bss73DhB.js";
4
4
  import { cva } from "class-variance-authority";
5
5
  import * as React from "react";
6
6
  import { useCallback, useEffect, useRef, useState } from "react";
@@ -1,9 +1,9 @@
1
- import { n as buttonVariants, t as Button } from "./button-uhNnwdsD.js";
2
- import { a as TableFooter, c as TableRow, d as Card, f as CardContent, g as CardTitle, h as CardHeader, i as TableCell, l as Badge, m as CardFooter, n as TableBody, o as TableHead, p as CardDescription, r as TableCaption, s as TableHeader, t as Table, u as badgeVariants } from "./table-DHyqDPbU.js";
3
- import { A as SegmentedControl, B as SelectValue, C as ToastProvider, D as SkeletonTable, E as SkeletonCard, F as SelectLabel, G as DialogContent, H as Textarea, I as SelectScrollDownButton, J as DialogHeader, K as DialogDescription, L as SelectScrollUpButton, M as SelectContent, N as SelectGroup, O as Switch, P as SelectItem, Q as DialogTrigger, R as SelectSeparator, S as ToastContainer, T as Skeleton, U as Dialog, V as Input, W as DialogClose, X as DialogPortal, Y as DialogOverlay, Z as DialogTitle, _ as TerminalInput, a as Metric, b as EmptyState, c as PageHeader, d as InlineCode, f as SidebarDropZone, g as TerminalDisplay, h as TerminalCursor, i as Toolbar, j as Select, k as Progress, l as ThemeToggle, m as DropZone, n as TangleKnot, o as MetricStrip, p as UploadProgress, q as DialogFooter, r as FilterField, s as StatusPill, t as Logo, u as useTheme, v as TerminalLine, w as useToast, x as Label, y as StatCard, z as SelectTrigger } from "./primitives-DE-blUz-.js";
1
+ import { n as buttonVariants, t as Button } from "./button-C87nEe2R.js";
2
+ import { a as TableFooter, c as TableRow, d as Card, f as CardContent, g as CardTitle, h as CardHeader, i as TableCell, l as Badge, m as CardFooter, n as TableBody, o as TableHead, p as CardDescription, r as TableCaption, s as TableHeader, t as Table, u as badgeVariants } from "./table-Bss73DhB.js";
3
+ import { A as SegmentedControl, B as SelectValue, C as ToastProvider, D as SkeletonTable, E as SkeletonCard, F as SelectLabel, G as DialogContent, H as Textarea, I as SelectScrollDownButton, J as DialogHeader, K as DialogDescription, L as SelectScrollUpButton, M as SelectContent, N as SelectGroup, O as Switch, P as SelectItem, Q as DialogTrigger, R as SelectSeparator, S as ToastContainer, T as Skeleton, U as Dialog, V as Input, W as DialogClose, X as DialogPortal, Y as DialogOverlay, Z as DialogTitle, _ as TerminalInput, a as Metric, b as EmptyState, c as PageHeader, d as InlineCode, f as SidebarDropZone, g as TerminalDisplay, h as TerminalCursor, i as Toolbar, j as Select, k as Progress, l as ThemeToggle, m as DropZone, n as TangleKnot, o as MetricStrip, p as UploadProgress, q as DialogFooter, r as FilterField, s as StatusPill, t as Logo, u as useTheme, v as TerminalLine, w as useToast, x as Label, y as StatCard, z as SelectTrigger } from "./primitives-Cb8GGVKr.js";
4
4
  import { _ as AvatarFallback, a as DropdownMenuItem, c as DropdownMenuRadioGroup, d as DropdownMenuShortcut, f as DropdownMenuSub, g as Avatar, h as DropdownMenuTrigger, i as DropdownMenuGroup, l as DropdownMenuRadioItem, m as DropdownMenuSubTrigger, n as DropdownMenuCheckboxItem, o as DropdownMenuLabel, p as DropdownMenuSubContent, r as DropdownMenuContent, s as DropdownMenuPortal, t as DropdownMenu, u as DropdownMenuSeparator, v as AvatarImage } from "./dropdown-menu-BpcLa5vF.js";
5
- import { i as TabsTrigger, n as TabsContent, r as TabsList, t as Tabs } from "./tabs-ujuqAdtb.js";
5
+ import { i as TabsTrigger, n as TabsContent, r as TabsList, t as Tabs } from "./tabs-BVHR6NkO.js";
6
6
  import { t as TextShimmer } from "./text-shimmer-BUUo6I-g.js";
7
7
  import { t as ArtifactPane } from "./artifact-pane-DMXT9a8U.js";
8
- import { n as CopyButton, t as CodeBlock } from "./code-block-CngSn37j.js";
8
+ import { n as CopyButton, t as CodeBlock } from "./code-block-B36KVUSN.js";
9
9
  export { ArtifactPane, Avatar, AvatarFallback, AvatarImage, Badge, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, CodeBlock, CopyButton, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropZone, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, FilterField, InlineCode, Input, Label, Logo, Metric, MetricStrip, PageHeader, Progress, SegmentedControl, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, SidebarDropZone, Skeleton, SkeletonCard, SkeletonTable, StatCard, StatusPill, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TangleKnot, TerminalCursor, TerminalDisplay, TerminalInput, TerminalLine, TextShimmer, Textarea, ThemeToggle, ToastContainer, ToastProvider, Toolbar, UploadProgress, badgeVariants, buttonVariants, useTheme, useToast };
@@ -1,9 +1,9 @@
1
1
  import { t as cn } from "./utils-C_uf36nf.js";
2
2
  import { t as TextShimmer } from "./text-shimmer-BUUo6I-g.js";
3
3
  import { i as truncateText, n as formatDuration } from "./format-DfcLWqMa.js";
4
- import { i as RunRowShell, r as InlineToolItem, s as ExpandableContent } from "./tool-call-step-Bi3_YJRV.js";
5
- import { t as Markdown } from "./markdown-BprL96Gl.js";
6
- import { t as OpenUIArtifactRenderer } from "./openui-artifact-renderer-DT4xbvWt.js";
4
+ import { i as RunRowShell, r as InlineToolItem, s as ExpandableContent } from "./tool-call-step-DNebqhmX.js";
5
+ import { t as Markdown } from "./markdown-BGqicV82.js";
6
+ import { t as OpenUIArtifactRenderer } from "./openui-artifact-renderer-DrU1AdVk.js";
7
7
  import { memo, useEffect, useMemo, useRef, useState } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import { Bot, Brain, ChevronDown, ChevronRight, ClipboardList, FileEdit, FileSearch, Globe, Loader2, PencilLine, Search, Settings, Sparkles, Terminal } from "lucide-react";
package/dist/run.js CHANGED
@@ -1,5 +1,5 @@
1
- import { a as RunRowStatusDot, i as RunRowShell, o as ExpandedToolDetail, r as InlineToolItem } from "./tool-call-step-Bi3_YJRV.js";
2
- import { n as InlineThinkingItem, t as RunGroup } from "./run-group-D1InSdQu.js";
1
+ import { a as RunRowStatusDot, i as RunRowShell, o as ExpandedToolDetail, r as InlineToolItem } from "./tool-call-step-DNebqhmX.js";
2
+ import { n as InlineThinkingItem, t as RunGroup } from "./run-group-BACLbCFl.js";
3
3
  import { t as LiveDuration } from "./run-ZsIKPA6J.js";
4
- import { n as parseToolEvent, t as ToolCallFeed } from "./tool-call-feed-C1W1N54c.js";
4
+ import { n as parseToolEvent, t as ToolCallFeed } from "./tool-call-feed-Djt2q11V.js";
5
5
  export { ExpandedToolDetail, InlineThinkingItem, InlineToolItem, LiveDuration, RunGroup, RunRowShell, RunRowStatusDot, ToolCallFeed, parseToolEvent };
package/dist/sdk-hooks.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { n as useRunCollapseState, r as useRunGroups, t as useAutoScroll } from "./use-auto-scroll-C5Pjeqon.js";
2
- import { a as useToolCallStream, i as useRealtimeSession, n as useSdkSession, o as useDropdownMenu, r as RealtimeSessionRegistry, t as useSSEStream } from "./use-sse-stream-BjVBDbxK.js";
2
+ import { a as useToolCallStream, i as useRealtimeSession, n as useSdkSession, o as useDropdownMenu, r as RealtimeSessionRegistry, t as useSSEStream } from "./use-sse-stream-BVgO1QBN.js";
3
3
  export { RealtimeSessionRegistry, useAutoScroll, useDropdownMenu, useRealtimeSession, useRunCollapseState, useRunGroups, useSSEStream, useSdkSession, useToolCallStream };
@@ -1,4 +1,4 @@
1
- import { i as focusRing } from "./focus-Cw02pNSr.js";
1
+ import { i as focusRing } from "./focus-BcE_SHqz.js";
2
2
  import { t as cn } from "./utils-C_uf36nf.js";
3
3
  import { cva } from "class-variance-authority";
4
4
  import * as React from "react";
@@ -1,4 +1,4 @@
1
- import { i as focusRing } from "./focus-Cw02pNSr.js";
1
+ import { i as focusRing } from "./focus-BcE_SHqz.js";
2
2
  import { t as cn } from "./utils-C_uf36nf.js";
3
3
  import * as React from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
1
  import { t as cn } from "./utils-C_uf36nf.js";
2
- import { n as ToolCallStep, t as ToolCallGroup } from "./tool-call-step-Bi3_YJRV.js";
3
- import { t as Markdown } from "./markdown-BprL96Gl.js";
2
+ import { n as ToolCallStep, t as ToolCallGroup } from "./tool-call-step-DNebqhmX.js";
3
+ import { t as Markdown } from "./markdown-BGqicV82.js";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/run/tool-call-feed.tsx
6
6
  /**
@@ -1,9 +1,9 @@
1
1
  import { t as cn } from "./utils-C_uf36nf.js";
2
2
  import { t as TextShimmer } from "./text-shimmer-BUUo6I-g.js";
3
- import { t as CodeBlock } from "./code-block-CngSn37j.js";
3
+ import { t as CodeBlock } from "./code-block-B36KVUSN.js";
4
4
  import { i as getToolErrorText, n as getToolCategory, r as getToolDisplayMetadata } from "./tool-display-BAuAVa43.js";
5
5
  import { n as formatDuration } from "./format-DfcLWqMa.js";
6
- import { a as GrepResultsPreview, i as GlobResultsPreview, n as QuestionPreview, o as WriteFilePreview, r as WebSearchPreview, s as CommandPreview, t as DiffPreview } from "./diff-preview-cySuqowW.js";
6
+ import { a as GrepResultsPreview, i as GlobResultsPreview, n as QuestionPreview, o as WriteFilePreview, r as WebSearchPreview, s as CommandPreview, t as DiffPreview } from "./diff-preview-BcK3nRXb.js";
7
7
  import { memo, useEffect, useRef, useState } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import { AlertCircle, ArrowLeft, ArrowRight, Bot, ChevronRight, ClipboardList, FileEdit, FileSearch, FileText, Globe, Loader2, PencilLine, Search, Settings, Terminal } from "lucide-react";
@@ -1,2 +1,2 @@
1
- import { a as GrepResultsPreview, i as GlobResultsPreview, n as QuestionPreview, o as WriteFilePreview, r as WebSearchPreview, s as CommandPreview, t as DiffPreview } from "./diff-preview-cySuqowW.js";
1
+ import { a as GrepResultsPreview, i as GlobResultsPreview, n as QuestionPreview, o as WriteFilePreview, r as WebSearchPreview, s as CommandPreview, t as DiffPreview } from "./diff-preview-BcK3nRXb.js";
2
2
  export { CommandPreview, DiffPreview, GlobResultsPreview, GrepResultsPreview, QuestionPreview, WebSearchPreview, WriteFilePreview };
@@ -1,4 +1,4 @@
1
- import { n as parseToolEvent } from "./tool-call-feed-C1W1N54c.js";
1
+ import { n as parseToolEvent } from "./tool-call-feed-Djt2q11V.js";
2
2
  import { _ as setForegroundActiveSession, d as registerActiveSession, g as setActiveSessionRunning, h as setActiveSessionError, m as setActiveSessionConnection, n as bumpActiveSessionActivity, p as setActiveSessionAttention, v as unregisterActiveSession, y as updateActiveSessionMeta } from "./active-sessions-store-Gt1R0rFG.js";
3
3
  import * as React from "react";
4
4
  import { createElement, useCallback, useEffect, useMemo, useRef, useState } from "react";
package/dist/utils.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as focusRingInset, c as getToolCategory, d as timeAgo, f as formatBytes, g as copyText, h as truncateText, i as focusRing, l as getToolDisplayMetadata, m as formatUptime, n as focusFieldInvalid, o as cn, p as formatDuration, r as focusFieldWithin, s as TOOL_CATEGORY_ICONS, t as focusField, u as getToolErrorText } from "./index-b56ew9aF.js";
1
+ import { a as focusRingInset, c as getToolCategory, d as timeAgo, f as formatBytes, g as copyText, h as truncateText, i as focusRing, l as getToolDisplayMetadata, m as formatUptime, n as focusFieldInvalid, o as cn, p as formatDuration, r as focusFieldWithin, s as TOOL_CATEGORY_ICONS, t as focusField, u as getToolErrorText } from "./index-BgUHilZm.js";
2
2
  export { TOOL_CATEGORY_ICONS, cn, copyText, focusField, focusFieldInvalid, focusFieldWithin, focusRing, focusRingInset, formatBytes, formatDuration, formatUptime, getToolCategory, getToolDisplayMetadata, getToolErrorText, timeAgo, truncateText };
package/dist/utils.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as focusRingInset, i as focusRing, n as focusFieldInvalid, r as focusFieldWithin, t as focusField } from "./focus-Cw02pNSr.js";
1
+ import { a as focusRingInset, i as focusRing, n as focusFieldInvalid, r as focusFieldWithin, t as focusField } from "./focus-BcE_SHqz.js";
2
2
  import { t as cn } from "./utils-C_uf36nf.js";
3
3
  import { i as getToolErrorText, n as getToolCategory, r as getToolDisplayMetadata, t as TOOL_CATEGORY_ICONS } from "./tool-display-BAuAVa43.js";
4
4
  import { i as truncateText, n as formatDuration, r as formatUptime, t as formatBytes } from "./format-DfcLWqMa.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/ui",
3
- "version": "11.11.0",
3
+ "version": "11.11.2",
4
4
  "description": "Generic React UI components for Tangle products — primitives, chat, run, files, editor, markdown.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -134,7 +134,7 @@
134
134
  "peerDependencies": {
135
135
  "@hocuspocus/provider": ">=2.15.0 <5.0.0",
136
136
  "@nanostores/react": ">=0.8.4 <3.0.0",
137
- "@tangle-network/brand": "^1.8.1",
137
+ "@tangle-network/brand": "^1.8.2",
138
138
  "@tiptap/core": ">=3.20.4 <4.0.0",
139
139
  "@tiptap/extension-collaboration": ">=3.20.4 <4.0.0",
140
140
  "@tiptap/extension-collaboration-caret": ">=3.7.0 <4.0.0",
@@ -450,6 +450,21 @@ export const StatusTones: Story = {
450
450
  },
451
451
  }
452
452
 
453
+ export const ErrorArtifact: Story = {
454
+ args: {
455
+ items: [
456
+ {
457
+ id: 'artifact-error',
458
+ kind: 'artifact',
459
+ title: 'Build output',
460
+ description: 'The compiler stopped before writing the bundle.',
461
+ meta: 'Exit code 1',
462
+ tone: 'error',
463
+ },
464
+ ],
465
+ },
466
+ }
467
+
453
468
  // ---------------------------------------------------------------------------
454
469
  // Full transcript through ChatContainer — the real consumer path. Tool titles
455
470
  // and descriptions come from `getToolDisplayMetadata`, so this story shows the
@@ -101,30 +101,35 @@ export interface AgentTimelineProps {
101
101
  collapseAfter?: number;
102
102
  }
103
103
 
104
- const TONE_STYLES: Record<AgentTimelineTone, { card: string; text: string; icon: typeof Info }> = {
104
+ const TONE_STYLES: Record<AgentTimelineTone, { card: string; text: string; supportingText: string; icon: typeof Info }> = {
105
105
  default: {
106
106
  card: "border-border bg-card",
107
107
  text: "text-foreground",
108
+ supportingText: "text-muted-foreground",
108
109
  icon: CircleDot,
109
110
  },
110
111
  info: {
111
112
  card: "border-[var(--surface-info-border)] bg-[var(--surface-info-bg)]",
112
113
  text: "text-[var(--surface-info-text)]",
114
+ supportingText: "text-[var(--surface-info-text)]",
113
115
  icon: Info,
114
116
  },
115
117
  success: {
116
118
  card: "border-[var(--surface-success-border)] bg-[var(--surface-success-bg)]",
117
119
  text: "text-[var(--surface-success-text)]",
120
+ supportingText: "text-[var(--surface-success-text)]",
118
121
  icon: CheckCircle2,
119
122
  },
120
123
  warning: {
121
124
  card: "border-[var(--surface-warning-border)] bg-[var(--surface-warning-bg)]",
122
125
  text: "text-[var(--surface-warning-text)]",
126
+ supportingText: "text-[var(--surface-warning-text)]",
123
127
  icon: AlertTriangle,
124
128
  },
125
129
  error: {
126
130
  card: "border-[var(--surface-danger-border)] bg-[var(--surface-danger-bg)]",
127
131
  text: "text-[var(--surface-danger-text)]",
132
+ supportingText: "text-[var(--surface-danger-text)]",
128
133
  icon: AlertTriangle,
129
134
  },
130
135
  };
@@ -191,7 +196,7 @@ function StatusCard({ item }: { item: AgentTimelineStatusItem }) {
191
196
  <div className="min-w-0">
192
197
  <div className={cn("text-sm font-medium", tone.text)}>{item.label}</div>
193
198
  {item.detail && (
194
- <div className="mt-0.5 text-sm text-muted-foreground">{item.detail}</div>
199
+ <div className={cn("mt-0.5 text-sm", tone.supportingText)}>{item.detail}</div>
195
200
  )}
196
201
  </div>
197
202
  </div>
@@ -208,12 +213,12 @@ function ArtifactCard({ item }: { item: AgentTimelineArtifactItem }) {
208
213
  {item.icon ?? <FileText className="h-4 w-4" />}
209
214
  </div>
210
215
  <div className="min-w-0 flex-1">
211
- <div className="text-sm font-medium text-foreground">{item.title}</div>
216
+ <div className={cn("text-sm font-medium", tone.text)}>{item.title}</div>
212
217
  {item.description && (
213
- <div className="mt-1 text-sm text-muted-foreground">{item.description}</div>
218
+ <div className={cn("mt-1 text-sm", tone.supportingText)}>{item.description}</div>
214
219
  )}
215
220
  {item.meta && (
216
- <div className="mt-2 flex flex-wrap items-center gap-2 text-xs text-muted-foreground">
221
+ <div className={cn("mt-2 flex flex-wrap items-center gap-2 text-xs", tone.supportingText)}>
217
222
  {item.meta}
218
223
  </div>
219
224
  )}
package/src/lib/focus.ts CHANGED
@@ -41,9 +41,10 @@ export const focusField =
41
41
  * therefore does not replace it. To style that container's focus differently,
42
42
  * compose your own classes instead of this helper. The field selector is
43
43
  * written out in full because Tailwind reads class names statically.
44
+ * Base styles use its marker class to clear the inner editor fallback outline.
44
45
  */
45
46
  export const focusFieldWithin =
46
- "border-border transition-[border-color,box-shadow] duration-150 ease-out hover:border-[var(--border-strong)] has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:border-[var(--focus-border)] has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:ring-3 has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:ring-[var(--focus-halo)]";
47
+ "focus-field-within border-border transition-[border-color,box-shadow] duration-150 ease-out hover:border-[var(--border-strong)] has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:border-[var(--focus-border)] has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:ring-3 has-[:is(textarea,select,[contenteditable]:not([contenteditable=false]),input:not([type=button],[type=submit],[type=reset],[type=image],[type=checkbox],[type=radio],[type=range],[type=color],[type=file])):focus]:ring-[var(--focus-halo)]";
47
48
 
48
49
  /** Error state for a field: a danger hairline and the same focus shape in danger. Compose after `focusField`. */
49
50
  export const focusFieldInvalid =