@tangle-network/ui 11.44.0 → 11.45.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 (304) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/_virtual/_rolldown/runtime.js +1 -2
  3. package/dist/auth/auth.d.ts +1 -3
  4. package/dist/auth/auth.js +1 -2
  5. package/dist/auth/login-layout.d.ts +1 -3
  6. package/dist/auth/login-layout.js +1 -2
  7. package/dist/chat/agent-timeline.d.ts +1 -3
  8. package/dist/chat/agent-timeline.js +1 -2
  9. package/dist/chat/chat-container.d.ts +1 -3
  10. package/dist/chat/chat-container.js +3 -4
  11. package/dist/chat/chat-message.d.ts +1 -3
  12. package/dist/chat/chat-message.js +1 -2
  13. package/dist/chat/message-author.d.ts +1 -3
  14. package/dist/chat/message-author.js +1 -2
  15. package/dist/chat/message-list.d.ts +1 -3
  16. package/dist/chat/message-list.js +1 -2
  17. package/dist/chat/synthetic-text.js +1 -2
  18. package/dist/chat/thinking-indicator.d.ts +1 -3
  19. package/dist/chat/thinking-indicator.js +1 -2
  20. package/dist/chat/transcript-text.d.ts +1 -3
  21. package/dist/chat/transcript-text.js +1 -2
  22. package/dist/chat/user-message.d.ts +1 -3
  23. package/dist/chat/user-message.js +1 -2
  24. package/dist/code-presentation.js +1 -2
  25. package/dist/editor/document-editor-pane.d.ts +1 -3
  26. package/dist/editor/document-editor-pane.js +3 -4
  27. package/dist/editor/editor-lazy.js +1 -2
  28. package/dist/editor/editor-loading.js +1 -2
  29. package/dist/editor/editor-peers.js +1 -2
  30. package/dist/editor/editor-provider.d.ts +1 -3
  31. package/dist/editor/editor-provider.js +1 -2
  32. package/dist/editor/editor-toolbar.d.ts +1 -3
  33. package/dist/editor/editor-toolbar.js +1 -2
  34. package/dist/editor/markdown-conversion.js +1 -2
  35. package/dist/editor/markdown-document-editor.js +1 -2
  36. package/dist/editor/source-markdown-editor.js +1 -2
  37. package/dist/editor/source-markdown.js +1 -2
  38. package/dist/editor/tiptap-editor.d.ts +0 -2
  39. package/dist/editor/tiptap-editor.js +1 -2
  40. package/dist/editor/use-editor.d.ts +1 -3
  41. package/dist/editor/use-editor.js +1 -2
  42. package/dist/files/file-artifact-pane.d.ts +1 -3
  43. package/dist/files/file-artifact-pane.js +6 -6
  44. package/dist/files/file-card.d.ts +1 -3
  45. package/dist/files/file-card.js +1 -2
  46. package/dist/files/file-format.d.ts +1 -3
  47. package/dist/files/file-format.js +1 -2
  48. package/dist/files/file-list.d.ts +1 -3
  49. package/dist/files/file-list.js +1 -2
  50. package/dist/files/file-preview.d.ts +1 -3
  51. package/dist/files/file-preview.js +1 -2
  52. package/dist/files/file-tabs.d.ts +8 -4
  53. package/dist/files/file-tabs.js +79 -15
  54. package/dist/files/file-tree.d.ts +1 -3
  55. package/dist/files/file-tree.js +1 -2
  56. package/dist/files/pdf-loader.d.ts +1 -3
  57. package/dist/files/pdf-loader.js +1 -2
  58. package/dist/files/pdf-viewer.d.ts +1 -3
  59. package/dist/files/pdf-viewer.js +1 -2
  60. package/dist/files/rich-file-tree.d.ts +1 -3
  61. package/dist/files/rich-file-tree.js +1 -2
  62. package/dist/hooks/use-auth.d.ts +1 -3
  63. package/dist/hooks/use-auth.js +1 -2
  64. package/dist/hooks/use-auto-scroll.d.ts +1 -3
  65. package/dist/hooks/use-auto-scroll.js +1 -2
  66. package/dist/hooks/use-dropdown-menu.d.ts +1 -2
  67. package/dist/hooks/use-dropdown-menu.js +1 -2
  68. package/dist/hooks/use-live-time.d.ts +1 -3
  69. package/dist/hooks/use-live-time.js +1 -2
  70. package/dist/hooks/use-realtime-session.d.ts +1 -3
  71. package/dist/hooks/use-realtime-session.js +1 -2
  72. package/dist/hooks/use-run-collapse-state.d.ts +1 -3
  73. package/dist/hooks/use-run-collapse-state.js +1 -2
  74. package/dist/hooks/use-run-groups.d.ts +1 -3
  75. package/dist/hooks/use-run-groups.js +1 -2
  76. package/dist/hooks/use-sdk-session.d.ts +1 -3
  77. package/dist/hooks/use-sdk-session.js +1 -2
  78. package/dist/hooks/use-sse-stream.d.ts +1 -3
  79. package/dist/hooks/use-sse-stream.js +1 -2
  80. package/dist/hooks/use-tool-call-stream.d.ts +1 -3
  81. package/dist/hooks/use-tool-call-stream.js +1 -2
  82. package/dist/lib/code-presentation.d.ts +1 -3
  83. package/dist/lib/code-presentation.js +1 -2
  84. package/dist/lib/control-presentation.d.ts +0 -2
  85. package/dist/lib/control-presentation.js +1 -2
  86. package/dist/lib/focus.d.ts +1 -3
  87. package/dist/lib/focus.js +1 -2
  88. package/dist/lib/interaction.d.ts +1 -3
  89. package/dist/lib/interaction.js +1 -2
  90. package/dist/lib/motion.d.ts +1 -3
  91. package/dist/lib/motion.js +1 -2
  92. package/dist/lib/optional-peer.js +1 -2
  93. package/dist/lib/series.d.ts +1 -3
  94. package/dist/lib/series.js +1 -2
  95. package/dist/lib/surface-motion.js +1 -2
  96. package/dist/lib/utils.d.ts +1 -3
  97. package/dist/lib/utils.js +1 -2
  98. package/dist/markdown/api-schema.d.ts +1 -3
  99. package/dist/markdown/api-schema.js +1 -2
  100. package/dist/markdown/code-block.d.ts +0 -2
  101. package/dist/markdown/code-block.js +1 -2
  102. package/dist/markdown/code-meta.d.ts +1 -3
  103. package/dist/markdown/code-meta.js +1 -2
  104. package/dist/markdown/markdown-table.d.ts +1 -3
  105. package/dist/markdown/markdown-table.js +1 -2
  106. package/dist/markdown/markdown.d.ts +1 -3
  107. package/dist/markdown/markdown.js +1 -2
  108. package/dist/nav.d.ts +0 -2
  109. package/dist/nav.js +1 -2
  110. package/dist/openui/openui-artifact-renderer.d.ts +1 -2
  111. package/dist/openui/openui-artifact-renderer.js +1 -2
  112. package/dist/openui/schema-compiled.js +1 -2
  113. package/dist/openui/schema-data.d.ts +1 -3
  114. package/dist/openui/schema-data.js +1 -2
  115. package/dist/openui-schema.d.ts +0 -2
  116. package/dist/openui-schema.js +1 -2
  117. package/dist/presentation.d.ts +0 -2
  118. package/dist/presentation.js +1 -2
  119. package/dist/primitives/alert-dialog.d.ts +0 -2
  120. package/dist/primitives/alert-dialog.js +1 -2
  121. package/dist/primitives/alert.d.ts +1 -3
  122. package/dist/primitives/alert.js +1 -2
  123. package/dist/primitives/artifact-pane.d.ts +1 -3
  124. package/dist/primitives/artifact-pane.js +1 -2
  125. package/dist/primitives/avatar.d.ts +0 -2
  126. package/dist/primitives/avatar.js +1 -2
  127. package/dist/primitives/badge.d.ts +0 -2
  128. package/dist/primitives/badge.js +1 -2
  129. package/dist/primitives/breadcrumb.d.ts +0 -2
  130. package/dist/primitives/breadcrumb.js +1 -2
  131. package/dist/primitives/button.d.ts +0 -2
  132. package/dist/primitives/button.js +1 -2
  133. package/dist/primitives/calendar.d.ts +0 -2
  134. package/dist/primitives/calendar.js +1 -2
  135. package/dist/primitives/card.d.ts +0 -2
  136. package/dist/primitives/card.js +1 -2
  137. package/dist/primitives/checkbox.d.ts +0 -2
  138. package/dist/primitives/checkbox.js +1 -2
  139. package/dist/primitives/chip.d.ts +0 -2
  140. package/dist/primitives/chip.js +1 -2
  141. package/dist/primitives/code-block.d.ts +0 -2
  142. package/dist/primitives/code-block.js +1 -2
  143. package/dist/primitives/collapsible.d.ts +0 -2
  144. package/dist/primitives/collapsible.js +1 -2
  145. package/dist/primitives/compliance-badge.d.ts +0 -2
  146. package/dist/primitives/compliance-badge.js +3 -4
  147. package/dist/primitives/context-menu.d.ts +0 -2
  148. package/dist/primitives/context-menu.js +1 -2
  149. package/dist/primitives/date-picker.d.ts +0 -2
  150. package/dist/primitives/date-picker.js +1 -2
  151. package/dist/primitives/dialog.d.ts +0 -2
  152. package/dist/primitives/dialog.js +3 -4
  153. package/dist/primitives/drop-zone.d.ts +1 -3
  154. package/dist/primitives/drop-zone.js +1 -2
  155. package/dist/primitives/dropdown-menu.d.ts +0 -2
  156. package/dist/primitives/dropdown-menu.js +1 -2
  157. package/dist/primitives/empty-state.d.ts +0 -2
  158. package/dist/primitives/empty-state.js +1 -2
  159. package/dist/primitives/field.d.ts +1 -3
  160. package/dist/primitives/field.js +1 -2
  161. package/dist/primitives/heading.d.ts +0 -2
  162. package/dist/primitives/heading.js +3 -4
  163. package/dist/primitives/help-text.d.ts +0 -2
  164. package/dist/primitives/help-text.js +1 -2
  165. package/dist/primitives/hover-card.d.ts +0 -2
  166. package/dist/primitives/hover-card.js +1 -2
  167. package/dist/primitives/icon-tile.d.ts +0 -2
  168. package/dist/primitives/icon-tile.js +1 -2
  169. package/dist/primitives/info-tip.js +1 -2
  170. package/dist/primitives/input.d.ts +0 -2
  171. package/dist/primitives/input.js +1 -2
  172. package/dist/primitives/label.d.ts +0 -2
  173. package/dist/primitives/label.js +1 -2
  174. package/dist/primitives/metric-chart.d.ts +0 -2
  175. package/dist/primitives/metric-chart.js +1 -2
  176. package/dist/primitives/metric-strip.d.ts +0 -2
  177. package/dist/primitives/metric-strip.js +1 -2
  178. package/dist/primitives/page-header.d.ts +0 -2
  179. package/dist/primitives/page-header.js +1 -2
  180. package/dist/primitives/page-shell.d.ts +1 -3
  181. package/dist/primitives/page-shell.js +1 -2
  182. package/dist/primitives/pagination.d.ts +1 -2
  183. package/dist/primitives/pagination.js +1 -2
  184. package/dist/primitives/popover.d.ts +0 -2
  185. package/dist/primitives/popover.js +1 -2
  186. package/dist/primitives/progress.d.ts +0 -2
  187. package/dist/primitives/progress.js +1 -2
  188. package/dist/primitives/radio-group.d.ts +0 -2
  189. package/dist/primitives/radio-group.js +1 -2
  190. package/dist/primitives/segmented-control.d.ts +1 -3
  191. package/dist/primitives/segmented-control.js +4 -5
  192. package/dist/primitives/select.d.ts +0 -2
  193. package/dist/primitives/select.js +1 -2
  194. package/dist/primitives/separator.d.ts +0 -2
  195. package/dist/primitives/separator.js +1 -2
  196. package/dist/primitives/series-sparkline.d.ts +0 -2
  197. package/dist/primitives/series-sparkline.js +1 -2
  198. package/dist/primitives/settings.d.ts +1 -3
  199. package/dist/primitives/settings.js +1 -2
  200. package/dist/primitives/sheet.d.ts +0 -2
  201. package/dist/primitives/sheet.js +3 -4
  202. package/dist/primitives/sidebar-drop-zone.d.ts +1 -3
  203. package/dist/primitives/sidebar-drop-zone.js +2 -3
  204. package/dist/primitives/skeleton.d.ts +0 -2
  205. package/dist/primitives/skeleton.js +1 -2
  206. package/dist/primitives/slider.d.ts +0 -2
  207. package/dist/primitives/slider.js +1 -2
  208. package/dist/primitives/stat-card.d.ts +0 -2
  209. package/dist/primitives/stat-card.js +1 -2
  210. package/dist/primitives/status-pill.d.ts +0 -2
  211. package/dist/primitives/status-pill.js +1 -2
  212. package/dist/primitives/switch.d.ts +0 -2
  213. package/dist/primitives/switch.js +1 -2
  214. package/dist/primitives/table.d.ts +0 -2
  215. package/dist/primitives/table.js +1 -2
  216. package/dist/primitives/tabs.d.ts +0 -2
  217. package/dist/primitives/tabs.js +1 -2
  218. package/dist/primitives/tag.d.ts +0 -2
  219. package/dist/primitives/tag.js +1 -2
  220. package/dist/primitives/terminal-display.d.ts +0 -2
  221. package/dist/primitives/terminal-display.js +1 -2
  222. package/dist/primitives/text-shimmer.d.ts +1 -3
  223. package/dist/primitives/text-shimmer.js +1 -2
  224. package/dist/primitives/theme-toggle.d.ts +1 -2
  225. package/dist/primitives/theme-toggle.js +1 -2
  226. package/dist/primitives/time-select.d.ts +0 -2
  227. package/dist/primitives/time-select.js +1 -2
  228. package/dist/primitives/toast.d.ts +1 -2
  229. package/dist/primitives/toast.js +1 -2
  230. package/dist/primitives/tone.d.ts +1 -3
  231. package/dist/primitives/tone.js +1 -2
  232. package/dist/primitives/toolbar.d.ts +0 -2
  233. package/dist/primitives/toolbar.js +1 -2
  234. package/dist/primitives/tooltip.d.ts +0 -2
  235. package/dist/primitives/tooltip.js +1 -2
  236. package/dist/primitives/upload-progress.d.ts +1 -3
  237. package/dist/primitives/upload-progress.js +1 -2
  238. package/dist/primitives/wizard.d.ts +1 -3
  239. package/dist/primitives/wizard.js +1 -2
  240. package/dist/redaction/redacted-document.d.ts +1 -3
  241. package/dist/redaction/redacted-document.js +1 -2
  242. package/dist/redaction.js +1 -2
  243. package/dist/run/approval-card.d.ts +1 -3
  244. package/dist/run/approval-card.js +1 -2
  245. package/dist/run/expandable-content.js +1 -2
  246. package/dist/run/expanded-tool-detail.d.ts +1 -3
  247. package/dist/run/expanded-tool-detail.js +1 -2
  248. package/dist/run/inline-thinking-item.d.ts +1 -3
  249. package/dist/run/inline-thinking-item.js +1 -2
  250. package/dist/run/inline-tool-item.d.ts +1 -3
  251. package/dist/run/inline-tool-item.js +1 -2
  252. package/dist/run/run-group.d.ts +1 -3
  253. package/dist/run/run-group.js +1 -2
  254. package/dist/run/run-item-primitives.d.ts +1 -3
  255. package/dist/run/run-item-primitives.js +1 -2
  256. package/dist/run/run-phase-list.d.ts +1 -3
  257. package/dist/run/run-phase-list.js +1 -2
  258. package/dist/run/run-row-shell.d.ts +1 -3
  259. package/dist/run/run-row-shell.js +1 -2
  260. package/dist/run/task-list.d.ts +1 -3
  261. package/dist/run/task-list.js +1 -2
  262. package/dist/run/tool-call-feed.d.ts +1 -3
  263. package/dist/run/tool-call-feed.js +1 -2
  264. package/dist/run/tool-call-step.d.ts +1 -3
  265. package/dist/run/tool-call-step.js +1 -2
  266. package/dist/stores/active-sessions-store.d.ts +1 -3
  267. package/dist/stores/active-sessions-store.js +1 -2
  268. package/dist/stores/chat-store.d.ts +1 -3
  269. package/dist/stores/chat-store.js +1 -2
  270. package/dist/tool-previews/command-preview.d.ts +1 -3
  271. package/dist/tool-previews/command-preview.js +1 -2
  272. package/dist/tool-previews/diff-preview.d.ts +1 -3
  273. package/dist/tool-previews/diff-preview.js +1 -2
  274. package/dist/tool-previews/glob-results-preview.d.ts +1 -3
  275. package/dist/tool-previews/glob-results-preview.js +1 -2
  276. package/dist/tool-previews/grep-results-preview.d.ts +1 -3
  277. package/dist/tool-previews/grep-results-preview.js +1 -2
  278. package/dist/tool-previews/preview-primitives.js +1 -2
  279. package/dist/tool-previews/question-preview.d.ts +1 -3
  280. package/dist/tool-previews/question-preview.js +1 -2
  281. package/dist/tool-previews/web-search-preview.d.ts +1 -3
  282. package/dist/tool-previews/web-search-preview.js +1 -2
  283. package/dist/tool-previews/write-file-preview.d.ts +1 -3
  284. package/dist/tool-previews/write-file-preview.js +1 -2
  285. package/dist/types/branding.d.ts +1 -3
  286. package/dist/types/message.d.ts +1 -3
  287. package/dist/types/parts.d.ts +1 -3
  288. package/dist/types/run.d.ts +1 -3
  289. package/dist/types/tool-display.d.ts +1 -3
  290. package/dist/utils/copy-text.d.ts +1 -3
  291. package/dist/utils/copy-text.js +1 -2
  292. package/dist/utils/format.d.ts +1 -3
  293. package/dist/utils/format.js +1 -2
  294. package/dist/utils/time-ago.d.ts +1 -3
  295. package/dist/utils/time-ago.js +1 -2
  296. package/dist/utils/tool-display.d.ts +1 -3
  297. package/dist/utils/tool-display.js +1 -2
  298. package/package.json +38 -38
  299. package/src/files/file-artifact-pane.tsx +1 -0
  300. package/src/files/file-tabs.test.tsx +66 -0
  301. package/src/files/file-tabs.tsx +77 -17
  302. package/src/primitives/heading.tsx +2 -2
  303. package/src/primitives/sidebar-drop-zone.tsx +1 -1
  304. package/src/styles/presentation.css +3 -3
@@ -1,6 +1,5 @@
1
1
  import { Collaborator, ConnectionState } from "./editor-provider.js";
2
2
  import { HocuspocusProvider } from "@hocuspocus/provider";
3
- //#region src/editor/use-editor.d.ts
4
3
  /**
5
4
  * Hook to get the current connection state and helpers.
6
5
  */
@@ -63,5 +62,4 @@ export declare function useAwareness(): {
63
62
  setLocalState: (state: Record<string, unknown>) => void;
64
63
  setLocalStateField: (field: string, value: unknown) => void;
65
64
  awareness: HocuspocusProvider["awareness"] | undefined;
66
- };
67
- //#endregion
65
+ };
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { useEditorContext } from "./editor-provider.js";
3
3
  import { useCallback, useEffect, useState } from "react";
4
- //#region src/editor/use-editor.ts
4
+ // src/editor/use-editor.ts
5
5
  /**
6
6
  * Hook to get the current connection state and helpers.
7
7
  */
@@ -154,5 +154,4 @@ function useAwareness() {
154
154
  awareness
155
155
  };
156
156
  }
157
- //#endregion
158
157
  export { useAwareness, useCollaboratorPresence, useCollaborators, useDocumentChanges, useEditorConnection, useYjsState };
@@ -2,7 +2,6 @@ import { ArtifactPaneProps } from "../primitives/artifact-pane.js";
2
2
  import { DocumentEditorBackend, DocumentEditorMode, DocumentEditorPaneCollaborationConfig } from "../editor/document-editor-pane.js";
3
3
  import { FilePreviewProps } from "./file-preview.js";
4
4
  import { FileTabData } from "./file-tabs.js";
5
- //#region src/files/file-artifact-pane.d.ts
6
5
  export interface FileArtifactPaneEditorOptions {
7
6
  enabled?: boolean;
8
7
  /** Persisted baseline when content is the current draft. */
@@ -45,5 +44,4 @@ export interface FileArtifactPaneProps extends Omit<FilePreviewProps, "className
45
44
  * PDF, video, audio, CSV, spreadsheet, markdown, code, text) renders here too;
46
45
  * `onDownload` drives both the header button and the body's download cards.
47
46
  */
48
- export declare function FileArtifactPane({ filename, content, blobUrl, mimeType, size, onClose, onDownload, urlTransform, path, tabs, activeTabId, onTabSelect, onTabClose, eyebrow, meta, toolbar, footer, className, headerClassName, hideTitleBlock, editor }: FileArtifactPaneProps): import("react").JSX.Element;
49
- //#endregion
47
+ export declare function FileArtifactPane({ filename, content, blobUrl, mimeType, size, onClose, onDownload, urlTransform, path, tabs, activeTabId, onTabSelect, onTabClose, eyebrow, meta, toolbar, footer, className, headerClassName, hideTitleBlock, editor }: FileArtifactPaneProps): import("react").JSX.Element;
@@ -1,4 +1,4 @@
1
- import { focusRing } from "../lib/focus.js";
1
+ import "../lib/focus.js";
2
2
  import { ArtifactPane } from "../primitives/artifact-pane.js";
3
3
  import { detectFileFormat } from "./file-format.js";
4
4
  import { FilePreview } from "./file-preview.js";
@@ -6,7 +6,7 @@ import { FileTabs } from "./file-tabs.js";
6
6
  import { Suspense, lazy } from "react";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
8
  import { Download, X } from "lucide-react";
9
- //#region src/files/file-artifact-pane.tsx
9
+ // src/files/file-artifact-pane.tsx
10
10
  const LazyDocumentEditorPane = lazy(async () => {
11
11
  return { default: (await import("../editor/document-editor-pane.js")).DocumentEditorPane };
12
12
  });
@@ -21,20 +21,21 @@ function FileArtifactPane({ filename, content, blobUrl, mimeType, size, onClose,
21
21
  tabs,
22
22
  activeId: activeTabId,
23
23
  onSelect: onTabSelect,
24
- onClose: onTabClose
24
+ onClose: onTabClose,
25
+ className: "shadow-none"
25
26
  }) : void 0;
26
27
  const isEditableMarkdown = (detectFileFormat(filename, mimeType) === "markdown" || (path ? detectFileFormat(path, mimeType) === "markdown" : false)) && editor?.enabled;
27
28
  const headerActions = onDownload || onClose ? /* @__PURE__ */ jsxs(Fragment$1, { children: [onDownload && /* @__PURE__ */ jsx("button", {
28
29
  type: "button",
29
30
  "aria-label": `Download ${filename}`,
30
31
  onClick: onDownload,
31
- className: `rounded-[var(--radius-sm)] p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground ${focusRing}`,
32
+ className: `rounded-[var(--radius-sm)] p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-1 focus-visible:outline-[var(--focus-border)] focus-visible:ring-4 focus-visible:ring-[var(--focus-halo)] focus-visible:outline-offset-0`,
32
33
  children: /* @__PURE__ */ jsx(Download, { className: "h-4 w-4" })
33
34
  }), onClose && /* @__PURE__ */ jsx("button", {
34
35
  type: "button",
35
36
  "aria-label": `Close ${filename}`,
36
37
  onClick: onClose,
37
- className: `rounded-[var(--radius-sm)] p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground ${focusRing}`,
38
+ className: `rounded-[var(--radius-sm)] p-1.5 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-1 focus-visible:outline-[var(--focus-border)] focus-visible:ring-4 focus-visible:ring-[var(--focus-halo)] focus-visible:outline-offset-0`,
38
39
  children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
39
40
  })] }) : void 0;
40
41
  if (isEditableMarkdown) return /* @__PURE__ */ jsx(Suspense, {
@@ -111,5 +112,4 @@ function FileArtifactPane({ filename, content, blobUrl, mimeType, size, onClose,
111
112
  })
112
113
  });
113
114
  }
114
- //#endregion
115
115
  export { FileArtifactPane };
@@ -1,6 +1,5 @@
1
1
  import "../primitives/icon-tile.js";
2
2
  import * as React from "react";
3
- //#region src/files/file-card.d.ts
4
3
  /** Who added a file, as a reader of the list should see them. */
5
4
  export interface FileUploader {
6
5
  name: string;
@@ -26,5 +25,4 @@ export interface FileCardProps extends FileDetails, Omit<React.HTMLAttributes<HT
26
25
  /** Further buttons after Download, such as Open or Delete. */
27
26
  actions?: React.ReactNode;
28
27
  }
29
- export declare const FileCard: React.ForwardRefExoticComponent<FileCardProps & React.RefAttributes<HTMLDivElement>>;
30
- //#endregion
28
+ export declare const FileCard: React.ForwardRefExoticComponent<FileCardProps & React.RefAttributes<HTMLDivElement>>;
@@ -6,7 +6,7 @@ import { getFormatLabel, resolveFilePreviewKind } from "./file-format.js";
6
6
  import * as React from "react";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
8
  import { Download, File, FileAudio, FileCode, FileImage, FileJson, FileSpreadsheet, FileText, FileVideo } from "lucide-react";
9
- //#region src/files/file-card.tsx
9
+ // src/files/file-card.tsx
10
10
  /**
11
11
  * FileCard — one file, described: its kind, name, size, date and uploader,
12
12
  * with Download and any actions the host adds. FilePreview shows it for a file
@@ -158,5 +158,4 @@ const FileCard = React.forwardRef(({ filename, mimeType, size, date, uploader, d
158
158
  ]
159
159
  }));
160
160
  FileCard.displayName = "FileCard";
161
- //#endregion
162
161
  export { FactSeparator, FileCard, FileFacts, FileKindTile, uploaderLabel };
@@ -1,4 +1,3 @@
1
- //#region src/files/file-format.d.ts
2
1
  /**
3
2
  * Shared file-format detection for every file surface — the preview pane, the
4
3
  * artifact pane, and code rendering. Centralising extension/MIME → format logic
@@ -47,5 +46,4 @@ export declare function getSyntaxLanguage(filename: string): string | undefined;
47
46
  * a MIME type on an extensionless file (where the extension can't reveal it);
48
47
  * any other code format keys off the extension.
49
48
  */
50
- export declare function getCodeLanguage(filename: string, format: FileFormat | FilePreviewKind): string | undefined;
51
- //#endregion
49
+ export declare function getCodeLanguage(filename: string, format: FileFormat | FilePreviewKind): string | undefined;
@@ -1,4 +1,4 @@
1
- //#region src/files/file-format.ts
1
+ // src/files/file-format.ts
2
2
  const IMAGE_EXTENSIONS = [
3
3
  "png",
4
4
  "jpg",
@@ -156,5 +156,4 @@ function getCodeLanguage(filename, format) {
156
156
  if (format === "json" || format === "yaml") return format;
157
157
  return getSyntaxLanguage(filename);
158
158
  }
159
- //#endregion
160
159
  export { detectFileFormat, fileExtension, getCodeLanguage, getFormatLabel, getSyntaxLanguage, resolveFilePreviewKind };
@@ -1,6 +1,5 @@
1
1
  import { FileDetails } from "./file-card.js";
2
2
  import * as React from "react";
3
- //#region src/files/file-list.d.ts
4
3
  export interface FileListItem extends FileDetails {
5
4
  /** Stable key, and what `activeId` matches. */
6
5
  id: string;
@@ -21,5 +20,4 @@ export interface FileListProps<T extends FileListItem = FileListItem> extends Om
21
20
  /** Shown in place of the list when `files` is empty. */
22
21
  empty?: React.ReactNode;
23
22
  }
24
- export declare function FileList<T extends FileListItem>({ files, onOpen, onDownload, onDelete, activeId, empty, className, ...props }: FileListProps<T>): React.JSX.Element;
25
- //#endregion
23
+ export declare function FileList<T extends FileListItem>({ files, onOpen, onDownload, onDelete, activeId, empty, className, ...props }: FileListProps<T>): React.JSX.Element;
@@ -5,7 +5,7 @@ import { FactSeparator, FileFacts, FileKindTile, uploaderLabel } from "./file-ca
5
5
  import "react";
6
6
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
7
7
  import { Download, Trash2 } from "lucide-react";
8
- //#region src/files/file-list.tsx
8
+ // src/files/file-list.tsx
9
9
  function FileList({ files, onOpen, onDownload, onDelete, activeId, empty = "No files yet.", className, ...props }) {
10
10
  if (files.length === 0) return /* @__PURE__ */ jsx("div", {
11
11
  className: cn("rounded-[var(--radius-md)] border border-border bg-card px-4 py-10 text-center text-sm text-muted-foreground", className),
@@ -84,5 +84,4 @@ function FileList({ files, onOpen, onDownload, onDelete, activeId, empty = "No f
84
84
  })
85
85
  });
86
86
  }
87
- //#endregion
88
87
  export { FileList };
@@ -1,5 +1,4 @@
1
1
  import { UrlTransform } from "react-markdown";
2
- //#region src/files/file-preview.d.ts
3
2
  export interface FilePreviewProps {
4
3
  filename: string;
5
4
  content?: string;
@@ -23,5 +22,4 @@ export declare const CSV_PREVIEW_ROW_LIMIT = 500;
23
22
  * a trailing line break add no row.
24
23
  */
25
24
  export declare function parseCsv(content: string): string[][];
26
- export declare function FilePreview({ filename, content, blobUrl, mimeType, size, urlTransform, onClose, onDownload, hideHeader, className }: FilePreviewProps): import("react").JSX.Element;
27
- //#endregion
25
+ export declare function FilePreview({ filename, content, blobUrl, mimeType, size, urlTransform, onClose, onDownload, hideHeader, className }: FilePreviewProps): import("react").JSX.Element;
@@ -8,7 +8,7 @@ import { PdfViewer } from "./pdf-viewer.js";
8
8
  import { useState } from "react";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
10
10
  import { Download, Music, X } from "lucide-react";
11
- //#region src/files/file-preview.tsx
11
+ // src/files/file-preview.tsx
12
12
  /**
13
13
  * FilePreview — universal file renderer.
14
14
  *
@@ -309,5 +309,4 @@ function FilePreview({ filename, content, blobUrl, mimeType, size, urlTransform,
309
309
  })]
310
310
  });
311
311
  }
312
- //#endregion
313
312
  export { CSV_PREVIEW_ROW_LIMIT, FilePreview, parseCsv };
@@ -1,6 +1,9 @@
1
- //#region src/files/file-tabs.d.ts
2
1
  /**
3
- * FileTabs — tab bar for open files in the preview panel.
2
+ * FileTabs: one tab per open file. The strip sits on its host's chrome plane and
3
+ * draws its baseline as an inset shadow (a host whose border is the baseline
4
+ * passes `shadow-none`); the active tab paints the card plane over it, so it
5
+ * joins the content below. A long name is cut in the middle, keeping its end
6
+ * and extension. Arrow keys, Home and End move the selection; Delete closes.
4
7
  */
5
8
  export interface FileTabData {
6
9
  id: string;
@@ -13,7 +16,8 @@ export interface FileTabsProps {
13
16
  activeId?: string;
14
17
  onSelect: (id: string) => void;
15
18
  onClose: (id: string) => void;
19
+ /** Accessible name of the tab list. Defaults to "Open files". */
20
+ label?: string;
16
21
  className?: string;
17
22
  }
18
- export declare function FileTabs({ tabs, activeId, onSelect, onClose, className }: FileTabsProps): import("react").JSX.Element | null;
19
- //#endregion
23
+ export declare function FileTabs({ tabs, activeId, onSelect, onClose, label, className }: FileTabsProps): import("react").JSX.Element | null;
@@ -1,10 +1,16 @@
1
- import { focusRing, focusRingInset } from "../lib/focus.js";
1
+ import { controlMotion } from "../lib/motion.js";
2
+ import { focusRingInset } from "../lib/focus.js";
2
3
  import { cn } from "../lib/utils.js";
4
+ import { useEffect, useRef } from "react";
3
5
  import { jsx, jsxs } from "react/jsx-runtime";
4
6
  import { FileCode, FileSpreadsheet, FileText, X } from "lucide-react";
5
- //#region src/files/file-tabs.tsx
7
+ // src/files/file-tabs.tsx
6
8
  /**
7
- * FileTabs — tab bar for open files in the preview panel.
9
+ * FileTabs: one tab per open file. The strip sits on its host's chrome plane and
10
+ * draws its baseline as an inset shadow (a host whose border is the baseline
11
+ * passes `shadow-none`); the active tab paints the card plane over it, so it
12
+ * joins the content below. A long name is cut in the middle, keeping its end
13
+ * and extension. Arrow keys, Home and End move the selection; Delete closes.
8
14
  */
9
15
  function getTabIcon(name) {
10
16
  const ext = name.split(".").pop()?.toLowerCase() || "";
@@ -12,37 +18,95 @@ function getTabIcon(name) {
12
18
  if (["csv", "xlsx"].includes(ext)) return FileSpreadsheet;
13
19
  return FileCode;
14
20
  }
15
- function FileTabs({ tabs, activeId, onSelect, onClose, className }) {
21
+ /** A long name keeps its extension and the characters before it after the ellipsis. */
22
+ function splitName(name) {
23
+ if (name.length <= 18) return [name, ""];
24
+ const dot = name.lastIndexOf(".");
25
+ const keep = Math.min(Math.max((dot > 0 ? name.length - dot : 0) + 6, 8), 12);
26
+ return [name.slice(0, -keep), name.slice(-keep)];
27
+ }
28
+ function FileTabs({ tabs, activeId, onSelect, onClose, label = "Open files", className }) {
29
+ const stripRef = useRef(null);
30
+ useEffect(() => {
31
+ const strip = stripRef.current;
32
+ const tab = strip?.querySelector("[aria-selected=\"true\"]")?.parentElement;
33
+ if (strip && tab) strip.scrollLeft = Math.min(tab.offsetLeft, Math.max(strip.scrollLeft, tab.offsetLeft + tab.offsetWidth - strip.clientWidth));
34
+ }, [activeId, tabs.length]);
16
35
  if (tabs.length === 0) return null;
36
+ const tabButtons = () => [...stripRef.current?.querySelectorAll("[role=\"tab\"]") ?? []];
37
+ const onKeyDown = (event) => {
38
+ const at = tabButtons().indexOf(event.target);
39
+ const last = tabs.length - 1;
40
+ const next = {
41
+ ArrowRight: at === last ? 0 : at + 1,
42
+ ArrowLeft: at === 0 ? last : at - 1,
43
+ Home: 0,
44
+ End: last
45
+ }[event.key];
46
+ if (at < 0 || next === void 0 && event.key !== "Delete") return;
47
+ event.preventDefault();
48
+ if (next !== void 0) {
49
+ tabButtons()[next]?.focus();
50
+ onSelect(tabs[next].id);
51
+ return;
52
+ }
53
+ onClose(tabs[at].id);
54
+ requestAnimationFrame(() => (tabButtons().find((tab) => tab.getAttribute("aria-selected") === "true") ?? tabButtons().at(-1))?.focus());
55
+ };
17
56
  return /* @__PURE__ */ jsx("div", {
18
- className: cn("flex items-center border-b border-border bg-background overflow-x-auto", className),
57
+ ref: stripRef,
58
+ role: "tablist",
59
+ "aria-label": label,
60
+ onKeyDown,
61
+ className: cn("relative flex h-10 min-w-0 items-end gap-1 overflow-x-auto px-2 shadow-[inset_0_-1px_0_hsl(var(--border))] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden", className),
19
62
  children: tabs.map((tab) => {
20
63
  const isActive = tab.id === activeId;
21
64
  const Icon = getTabIcon(tab.name);
65
+ const [head, tail] = splitName(tab.name);
22
66
  return /* @__PURE__ */ jsxs("div", {
23
- className: cn("group flex items-center border-r border-border shrink-0", isActive ? "bg-card text-foreground border-b-2 border-b-primary" : "text-muted-foreground hover:bg-muted/50"),
67
+ title: tab.path,
68
+ className: cn("group relative flex h-[calc(100%-0.375rem)] max-w-72 shrink-0 items-center rounded-t-lg border border-b-0 text-sm", controlMotion, isActive ? "border-border bg-card text-foreground" : "border-transparent text-muted-foreground hover:bg-[var(--ix-hover-bg)] hover:text-foreground"),
24
69
  children: [/* @__PURE__ */ jsxs("button", {
25
70
  type: "button",
71
+ role: "tab",
72
+ "aria-selected": isActive,
73
+ "aria-label": tab.dirty ? `${tab.name}, unsaved changes` : tab.name,
74
+ tabIndex: isActive || !activeId && tab === tabs[0] ? 0 : -1,
26
75
  onClick: () => onSelect(tab.id),
27
- className: cn("flex min-w-0 items-center gap-1.5 px-3 py-1.5 text-xs transition-colors hover:text-foreground", focusRingInset),
76
+ className: cn("flex h-full min-w-0 items-center gap-1.5 rounded-t-lg pl-3 pr-1", focusRingInset),
28
77
  children: [
29
- /* @__PURE__ */ jsx(Icon, { className: "h-3 w-3 shrink-0" }),
30
- /* @__PURE__ */ jsx("span", {
31
- className: "max-w-[120px] truncate",
32
- children: tab.name
78
+ /* @__PURE__ */ jsx(Icon, {
79
+ "aria-hidden": true,
80
+ className: "size-3.5 shrink-0 text-muted-foreground"
81
+ }),
82
+ /* @__PURE__ */ jsxs("span", {
83
+ className: "flex min-w-0",
84
+ children: [/* @__PURE__ */ jsx("span", {
85
+ className: "overflow-hidden text-ellipsis whitespace-pre",
86
+ children: head
87
+ }), tail && /* @__PURE__ */ jsx("span", {
88
+ className: "shrink-0 whitespace-pre",
89
+ children: tail
90
+ })]
33
91
  }),
34
- tab.dirty && /* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-primary" })
92
+ tab.dirty && /* @__PURE__ */ jsx("span", {
93
+ "aria-hidden": true,
94
+ className: "size-1.5 shrink-0 rounded-full bg-[var(--accent-text)]"
95
+ })
35
96
  ]
36
97
  }), /* @__PURE__ */ jsx("button", {
37
98
  type: "button",
99
+ tabIndex: -1,
38
100
  "aria-label": `Close ${tab.name}`,
39
101
  onClick: () => onClose(tab.id),
40
- className: cn("mr-1 rounded p-0.5 opacity-0 transition-opacity hover:bg-accent focus-visible:opacity-100 group-hover:opacity-100", focusRing),
41
- children: /* @__PURE__ */ jsx(X, { className: "h-2.5 w-2.5" })
102
+ className: cn("mr-1.5 grid size-5 shrink-0 place-items-center rounded-md text-muted-foreground hover:bg-[var(--ix-hover-bg)] hover:text-foreground", controlMotion, !isActive && "opacity-0 group-focus-within:opacity-100 group-hover:opacity-100"),
103
+ children: /* @__PURE__ */ jsx(X, {
104
+ "aria-hidden": true,
105
+ className: "size-3"
106
+ })
42
107
  })]
43
108
  }, tab.id);
44
109
  })
45
110
  });
46
111
  }
47
- //#endregion
48
112
  export { FileTabs };
@@ -1,4 +1,3 @@
1
- //#region src/files/file-tree.d.ts
2
1
  /**
3
2
  * FileTree — directory browser with file type icons.
4
3
  *
@@ -27,5 +26,4 @@ export interface FileTreeVisibilityOptions {
27
26
  isVisible?: (node: FileNode) => boolean;
28
27
  }
29
28
  export declare function filterFileTree(root: FileNode, visibility?: FileTreeVisibilityOptions): FileNode | null;
30
- export declare function FileTree({ root, selectedPath, onSelect, className, defaultExpanded, visibility }: FileTreeProps): import("react").JSX.Element | null;
31
- //#endregion
29
+ export declare function FileTree({ root, selectedPath, onSelect, className, defaultExpanded, visibility }: FileTreeProps): import("react").JSX.Element | null;
@@ -2,7 +2,7 @@ import { cn } from "../lib/utils.js";
2
2
  import { useState } from "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { ChevronRight, File, FileCode, FileImage, FileJson, FileSpreadsheet, FileText, Folder, FolderOpen } from "lucide-react";
5
- //#region src/files/file-tree.tsx
5
+ // src/files/file-tree.tsx
6
6
  /**
7
7
  * FileTree — directory browser with file type icons.
8
8
  *
@@ -131,5 +131,4 @@ function FileTree({ root, selectedPath, onSelect, className, defaultExpanded = t
131
131
  })
132
132
  });
133
133
  }
134
- //#endregion
135
134
  export { FileTree, filterFileTree };
@@ -1,5 +1,4 @@
1
1
  import "pdfjs-dist";
2
- //#region src/files/pdf-loader.d.ts
3
2
  export interface PdfViewerConfig {
4
3
  /**
5
4
  * URL of `pdfjs-dist/legacy/build/pdf.worker.min.mjs` from the installed
@@ -18,5 +17,4 @@ export interface PdfViewerConfig {
18
17
  * the first `PdfViewer` renders; a worker set afterwards applies only when no
19
18
  * document has loaded the main-thread worker yet.
20
19
  */
21
- export declare function configurePdfViewer(next: PdfViewerConfig): void;
22
- //#endregion
20
+ export declare function configurePdfViewer(next: PdfViewerConfig): void;
@@ -1,5 +1,5 @@
1
1
  import { isMissingPeerError, rethrow } from "../lib/optional-peer.js";
2
- //#region src/files/pdf-loader.ts
2
+ // src/files/pdf-loader.ts
3
3
  let config = {};
4
4
  /**
5
5
  * Sets the page-wide pdf.js worker and asset locations. Call it once, before
@@ -78,5 +78,4 @@ function pdfAssetParams() {
78
78
  iccUrl: `${base}iccs/`
79
79
  };
80
80
  }
81
- //#endregion
82
81
  export { MissingPdfjsError, asMissingPdfjsError, configurePdfViewer, isMissingPdfjsError, loadPdfjs, pdfAssetParams };
@@ -1,4 +1,3 @@
1
- //#region src/files/pdf-viewer.d.ts
2
1
  /**
3
2
  * PdfViewer — renders a PDF's pages to canvas with pdf.js, so a document reads
4
3
  * the same in every browser, phones included. A continuous column of pages
@@ -28,5 +27,4 @@ export interface PdfViewerProps {
28
27
  /** Give the viewer a height; it scrolls its pages inside it. */
29
28
  className?: string;
30
29
  }
31
- export declare function PdfViewer({ src, filename, size, onDownload, className }: PdfViewerProps): import("react").JSX.Element;
32
- //#endregion
30
+ export declare function PdfViewer({ src, filename, size, onDownload, className }: PdfViewerProps): import("react").JSX.Element;
@@ -8,7 +8,7 @@ import { isMissingPdfjsError, loadPdfjs, pdfAssetParams } from "./pdf-loader.js"
8
8
  import { memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
9
9
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
10
10
  import { ChevronLeft, ChevronRight, Download, Info, LoaderCircle, ZoomIn, ZoomOut } from "lucide-react";
11
- //#region src/files/pdf-viewer.tsx
11
+ // src/files/pdf-viewer.tsx
12
12
  /**
13
13
  * PdfViewer — renders a PDF's pages to canvas with pdf.js, so a document reads
14
14
  * the same in every browser, phones included. A continuous column of pages
@@ -563,5 +563,4 @@ const PdfPage = memo(function PdfPage({ doc, pageNumber, pageCount, zoom, placeh
563
563
  })]
564
564
  });
565
565
  });
566
- //#endregion
567
566
  export { PdfViewer };
@@ -1,7 +1,6 @@
1
1
  import { FileNode } from "./file-tree.js";
2
2
  import { CSSProperties, ReactNode } from "react";
3
3
  import { ContextMenuItem, ContextMenuOpenContext, GitStatus, GitStatusEntry } from "@pierre/trees";
4
- //#region src/files/rich-file-tree.d.ts
5
4
  /**
6
5
  * Re-export Pierre's git-status union under a stable name so consumers
7
6
  * don't import directly from the dep. If we ever swap the underlying
@@ -58,5 +57,4 @@ export interface RichFileTreeThemeVars {
58
57
  /** Muted (parent path, breadcrumb) foreground. */
59
58
  mutedFg: string;
60
59
  }
61
- export declare function RichFileTree({ root, paths, selectedPath, onSelect, search, initialExpansion, gitStatus, renderContextMenu, header, themeOverrides, className, style, height }: RichFileTreeProps): import("react").JSX.Element;
62
- //#endregion
60
+ export declare function RichFileTree({ root, paths, selectedPath, onSelect, search, initialExpansion, gitStatus, renderContextMenu, header, themeOverrides, className, style, height }: RichFileTreeProps): import("react").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  import { useEffect, useMemo, useRef } from "react";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { FileTree, useFileTree } from "@pierre/trees/react";
4
- //#region src/files/rich-file-tree.tsx
4
+ // src/files/rich-file-tree.tsx
5
5
  /**
6
6
  * RichFileTree — feature-rich file browser built on @pierre/trees.
7
7
  *
@@ -141,5 +141,4 @@ function RichFileTree({ root, paths, selectedPath, onSelect, search = true, init
141
141
  style: themeStyle
142
142
  });
143
143
  }
144
- //#endregion
145
144
  export { RichFileTree };
@@ -1,4 +1,3 @@
1
- //#region src/hooks/use-auth.d.ts
2
1
  export interface AuthUser {
3
2
  customer_id: string;
4
3
  email: string;
@@ -36,5 +35,4 @@ export declare function createAuthFetcher(_apiBaseUrl: string): <T = unknown>(ur
36
35
  * Hook to get the API key from localStorage.
37
36
  * For backwards compatibility with API key-based auth.
38
37
  */
39
- export declare function useApiKey(): string | null;
40
- //#endregion
38
+ export declare function useApiKey(): string | null;
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import * as React from "react";
3
- //#region src/hooks/use-auth.ts
3
+ // src/hooks/use-auth.ts
4
4
  /**
5
5
  * Hook for managing authentication state.
6
6
  * Fetches user session from the API and provides loading/error states.
@@ -87,5 +87,4 @@ function useApiKey() {
87
87
  }, []);
88
88
  return apiKey;
89
89
  }
90
- //#endregion
91
90
  export { createAuthFetcher, useApiKey, useAuth };
@@ -1,5 +1,4 @@
1
1
  import { RefObject } from "react";
2
- //#region src/hooks/use-auto-scroll.d.ts
3
2
  /**
4
3
  * Scroll-to-bottom behaviour: sticks to the bottom while streaming,
5
4
  * pauses when user scrolls up, resumes when user scrolls back down.
@@ -7,5 +6,4 @@ import { RefObject } from "react";
7
6
  export declare function useAutoScroll(containerRef: RefObject<HTMLElement | null>, deps?: unknown[]): {
8
7
  isAtBottom: boolean;
9
8
  scrollToBottom: () => void;
10
- };
11
- //#endregion
9
+ };
@@ -1,5 +1,5 @@
1
1
  import { useCallback, useEffect, useRef, useState } from "react";
2
- //#region src/hooks/use-auto-scroll.ts
2
+ // src/hooks/use-auto-scroll.ts
3
3
  const BOTTOM_THRESHOLD = 40;
4
4
  /**
5
5
  * Scroll-to-bottom behaviour: sticks to the bottom while streaming,
@@ -44,5 +44,4 @@ function useAutoScroll(containerRef, deps = []) {
44
44
  }, [containerRef])
45
45
  };
46
46
  }
47
- //#endregion
48
47
  export { useAutoScroll };
@@ -1,4 +1,3 @@
1
- //#region src/hooks/use-dropdown-menu.d.ts
2
1
  interface UseDropdownMenuOptions {
3
2
  closeOnEsc?: boolean;
4
3
  }
@@ -9,4 +8,4 @@ export declare function useDropdownMenu(options?: UseDropdownMenuOptions): {
9
8
  toggle: () => void;
10
9
  close: () => void;
11
10
  };
12
- //#endregion
11
+ export {};
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useRef, useState } from "react";
2
- //#region src/hooks/use-dropdown-menu.ts
2
+ // src/hooks/use-dropdown-menu.ts
3
3
  function useDropdownMenu(options) {
4
4
  const closeOnEsc = options?.closeOnEsc ?? true;
5
5
  const [open, setOpen] = useState(false);
@@ -27,5 +27,4 @@ function useDropdownMenu(options) {
27
27
  close: () => setOpen(false)
28
28
  };
29
29
  }
30
- //#endregion
31
30
  export { useDropdownMenu };
@@ -1,7 +1,5 @@
1
- //#region src/hooks/use-live-time.d.ts
2
1
  /**
3
2
  * Returns `Date.now()` and re-renders every `intervalMs` so derived
4
3
  * values like "uptime" tick forward without polling upstream data.
5
4
  */
6
- export declare function useLiveTime(intervalMs?: number): number;
7
- //#endregion
5
+ export declare function useLiveTime(intervalMs?: number): number;
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import * as React from "react";
3
- //#region src/hooks/use-live-time.ts
3
+ // src/hooks/use-live-time.ts
4
4
  /**
5
5
  * Returns `Date.now()` and re-renders every `intervalMs` so derived
6
6
  * values like "uptime" tick forward without polling upstream data.
@@ -18,5 +18,4 @@ function useLiveTime(intervalMs = 1e3) {
18
18
  }, [intervalMs]);
19
19
  return now;
20
20
  }
21
- //#endregion
22
21
  export { useLiveTime };
@@ -1,6 +1,5 @@
1
1
  import { SdkSessionEvent } from "./use-sdk-session.js";
2
2
  import { ActiveSessionConnectionState, ActiveSessionTransportMode, RegisterActiveSessionOptions } from "../stores/active-sessions-store.js";
3
- //#region src/hooks/use-realtime-session.d.ts
4
3
  export interface RealtimeSessionOptions extends RegisterActiveSessionOptions {
5
4
  connectUrl?: string | null;
6
5
  enabled?: boolean;
@@ -28,5 +27,4 @@ export interface RealtimeSessionRegistryProps {
28
27
  sessions: RealtimeSessionTarget[];
29
28
  }
30
29
  export declare function useRealtimeSession({ sessionId, projectId, projectLabel, title, href, metadata, connectUrl, enabled, foreground, keepRegistered, reconnect, reconnectIntervalMs, maxReconnectAttempts, transportMode, onEvent, onOpen, onClose, onError }: RealtimeSessionOptions): RealtimeSessionState;
31
- export declare function RealtimeSessionRegistry({ sessions }: RealtimeSessionRegistryProps): import("react").FunctionComponentElement<RealtimeSessionTarget>[];
32
- //#endregion
30
+ export declare function RealtimeSessionRegistry({ sessions }: RealtimeSessionRegistryProps): import("react").FunctionComponentElement<RealtimeSessionTarget>[];
@@ -1,6 +1,6 @@
1
1
  import { bumpActiveSessionActivity, registerActiveSession, setActiveSessionAttention, setActiveSessionConnection, setActiveSessionError, setActiveSessionRunning, setForegroundActiveSession, unregisterActiveSession, updateActiveSessionMeta } from "../stores/active-sessions-store.js";
2
2
  import { createElement, useEffect, useMemo, useRef, useState } from "react";
3
- //#region src/hooks/use-realtime-session.ts
3
+ // src/hooks/use-realtime-session.ts
4
4
  function parseEvent(message) {
5
5
  try {
6
6
  const parsed = JSON.parse(message);
@@ -231,5 +231,4 @@ function RealtimeSessionRegistry({ sessions }) {
231
231
  ...session
232
232
  }));
233
233
  }
234
- //#endregion
235
234
  export { RealtimeSessionRegistry, useRealtimeSession };
@@ -1,5 +1,4 @@
1
1
  import { Run } from "../types/run.js";
2
- //#region src/hooks/use-run-collapse-state.d.ts
3
2
  /**
4
3
  * Manages per-run collapse state with auto-collapse after run completion.
5
4
  *
@@ -9,5 +8,4 @@ import { Run } from "../types/run.js";
9
8
  export declare function useRunCollapseState(runs: Run[]): {
10
9
  isCollapsed: (runId: string) => boolean;
11
10
  toggleCollapse: (runId: string) => void;
12
- };
13
- //#endregion
11
+ };
@@ -1,5 +1,5 @@
1
1
  import { useCallback, useState } from "react";
2
- //#region src/hooks/use-run-collapse-state.ts
2
+ // src/hooks/use-run-collapse-state.ts
3
3
  /**
4
4
  * Manages per-run collapse state with auto-collapse after run completion.
5
5
  *
@@ -20,5 +20,4 @@ function useRunCollapseState(runs) {
20
20
  }, [])
21
21
  };
22
22
  }
23
- //#endregion
24
23
  export { useRunCollapseState };