@workerdeck/ui 0.12.0 → 0.15.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 (32) hide show
  1. package/README.md +19 -0
  2. package/build/{SessionPanel-NQ8ksCfj.mjs → SessionPanel-DI1NO4l8.mjs} +223 -163
  3. package/build/SessionPanel-DI1NO4l8.mjs.map +1 -0
  4. package/build/{SessionPanel-Dy9lQrOV.d.mts → SessionPanel-J2U8v88q.d.mts} +86 -8
  5. package/build/index.d.mts +118 -7
  6. package/build/index.mjs +355 -169
  7. package/build/index.mjs.map +1 -1
  8. package/build/workspace.d.mts +13 -1
  9. package/build/workspace.mjs +7 -2
  10. package/build/workspace.mjs.map +1 -1
  11. package/package.json +4 -4
  12. package/src/components/agent/Composer.tsx +112 -37
  13. package/src/components/agent/EngineIcon.tsx +97 -0
  14. package/src/components/agent/Loader.tsx +4 -1
  15. package/src/components/agent/Message.tsx +12 -5
  16. package/src/components/agent/QuestionPrompt.tsx +1 -1
  17. package/src/components/agent/SessionBrowser.tsx +266 -138
  18. package/src/components/agent/SessionPanel.tsx +149 -48
  19. package/src/components/agent/SessionWorkspace.tsx +17 -0
  20. package/src/components/agent/StatusBar.tsx +58 -12
  21. package/src/components/agent/Transcript.tsx +2 -3
  22. package/src/components/agent/line-prompt.tsx +2 -2
  23. package/src/components/agent/transcript-variant.tsx +14 -0
  24. package/src/components/ui/Badge.tsx +6 -1
  25. package/src/components/ui/Empty.tsx +56 -0
  26. package/src/components/ui/Menu.tsx +1 -1
  27. package/src/components/ui/Select.tsx +1 -1
  28. package/src/components/ui/Splitter.tsx +14 -0
  29. package/src/components/ui/Tooltip.tsx +1 -1
  30. package/src/index.ts +11 -1
  31. package/src/styles/theme.css +77 -15
  32. package/build/SessionPanel-NQ8ksCfj.mjs.map +0 -1
@@ -2,7 +2,7 @@ import * as _$react from "react";
2
2
  import { ReactNode } from "react";
3
3
  import { LucideIcon } from "lucide-react";
4
4
  import { ModelOption, PermissionMode } from "@workerdeck/protocol";
5
- import { ConnectionState, TranscriptState } from "@workerdeck/react";
5
+ import { ConnectionState, TranscriptState, UseToolCallHostOptions } from "@workerdeck/react";
6
6
  import { WorkerDeckClient } from "@workerdeck/client";
7
7
 
8
8
  //#region src/components/agent/PermissionModeSelect.d.ts
@@ -127,6 +127,19 @@ declare function TranscriptDensityProvider({
127
127
  children: ReactNode;
128
128
  }): _$react.JSX.Element;
129
129
  declare function useTranscriptDensity(): TranscriptDensity;
130
+ /**
131
+ * The typeface the panel runs in.
132
+ *
133
+ * `sans` is the host's UI font; `mono` repoints the sans token at the mono stack
134
+ * for the panel's subtree (see the `[data-agent-font='mono']` rule in
135
+ * `theme.css`), so the transcript reads as part of a terminal rather than as a
136
+ * web app beside one.
137
+ *
138
+ * No context and no hook, unlike variant and density: nothing branches on it in
139
+ * JS. It is one attribute on the panel root and the cascade does the rest, which
140
+ * is also what keeps it from leaking past the panel.
141
+ */
142
+ type TranscriptFont = 'sans' | 'mono';
130
143
  //#endregion
131
144
  //#region src/components/agent/SessionPanel.d.ts
132
145
  interface SessionPanelProps {
@@ -172,6 +185,17 @@ interface SessionPanelProps {
172
185
  * take the menu, or it has nowhere left to go.
173
186
  */
174
187
  statusSurface?: 'internal' | 'external';
188
+ /**
189
+ * Which end of the panel the status bar sits at. Default `top`.
190
+ *
191
+ * `bottom` is the editor convention — VS Code's status bar runs along the
192
+ * foot of the window — and suits a host where the panel *is* the editor area
193
+ * and the chrome above it already belongs to the app. Placement only; the bar
194
+ * is the same bar, with the same `⋯` menu in its trailing slot, so this
195
+ * composes with {@link statusSurface} rather than competing with it (external
196
+ * still means "there isn't one").
197
+ */
198
+ statusPlacement?: 'top' | 'bottom';
175
199
  /** Where `panelSurface: 'external'` routes opens. Absent = the affordances
176
200
  * (status-bar clicks, `/mcp`) become inert rather than half-working. */
177
201
  onOpenPanel?: (panel: SessionSurfacePanel) => void;
@@ -194,18 +218,36 @@ interface SessionPanelProps {
194
218
  * dock is allowed to be roomy.
195
219
  */
196
220
  transcriptDensity?: TranscriptDensity;
221
+ /**
222
+ * The panel's typeface — `'sans'` (default, the host's UI font) or `'mono'`,
223
+ * which repoints the sans token at the mono stack **for this subtree only**.
224
+ *
225
+ * The third reader preference beside variant and density, and the same kind of
226
+ * thing: how a transcript should read is a property of the person reading it.
227
+ * Scoped to the panel because that is the whole claim — a monospace agent view
228
+ * next to an ordinary app, not a monospace app.
229
+ */
230
+ transcriptFont?: TranscriptFont;
197
231
  /**
198
232
  * Where the session's own controls — model and permission mode — live.
199
233
  * `'internal'` (default) draws them in the composer's toolbar row.
200
- * `'external'` draws neither, and the composer collapses to a single line
201
- * with its attach/send buttons beside the field: the embedder renders the
202
- * pickers in its own chrome (VS Code's status bar, where a click opens a
203
- * QuickPick) and drives them through {@link onControls}.
234
+ * `'status'` draws them in the panel's OWN status bar, beside the readings
235
+ * they act on; the composer collapses to a single line either way. That is
236
+ * VS Code's arrangement without VS Code a host whose panel carries a status
237
+ * bar of its own (`statusPlacement: 'bottom'`) gets the same streamlined
238
+ * shape without having to host the pickers itself.
239
+ * `'external'` draws neither: the embedder renders the pickers in its own
240
+ * chrome (VS Code's window status bar, where a click opens a QuickPick) and
241
+ * drives them through {@link onControls}.
242
+ *
243
+ * `'status'` needs a status bar to put them in — with
244
+ * `statusSurface: 'external'` there is none, and the two together would hide
245
+ * the controls entirely, so that combination falls back to the composer.
204
246
  *
205
247
  * The options themselves ride {@link SessionVitals} — an embedder must not
206
248
  * attach a second time to learn what the models are.
207
249
  */
208
- controlsSurface?: 'internal' | 'external';
250
+ controlsSurface?: 'internal' | 'external' | 'status';
209
251
  /**
210
252
  * Handed the session's setters once the panel is live, and `undefined` on
211
253
  * unmount. The counterpart to `controlsSurface: 'external'`: vitals carry the
@@ -238,6 +280,38 @@ interface SessionPanelProps {
238
280
  itemCount: number;
239
281
  since?: number;
240
282
  };
283
+ /**
284
+ * A viewer, not a seat at the session: transcript, status bar and panels as
285
+ * usual, but no composer and no approval prompts.
286
+ *
287
+ * For a surface that is *about* a run rather than in it — the dashboard's job
288
+ * detail, where the session belongs to the queue and typing into it would be a
289
+ * second operator arriving mid-run. Deliberately not "disabled controls": a
290
+ * greyed-out composer says the session is busy, an absent one says this screen
291
+ * does not drive it. The attach is still live and read paths are untouched,
292
+ * so the transcript streams and the file tree browses.
293
+ *
294
+ * It does **not** claim to be an authorization boundary. Anything holding this
295
+ * client can still send; what it removes is the affordance, and the honest
296
+ * enforcement lives on the gateway.
297
+ */
298
+ readOnly?: boolean;
299
+ /**
300
+ * Options for the browser tool host this panel runs on its own attach — or
301
+ * `false` to run none at all.
302
+ *
303
+ * The panel hosts server-bridged tool calls itself, because the bridge asks
304
+ * the *first attached client* and the panel owns the session's one attach: an
305
+ * embedder subscribing to the same handle separately would find this host
306
+ * already answering, and refusing, anything outside its allow-list. So the
307
+ * options come through here.
308
+ *
309
+ * Merged over the defaults, which host `eval_script` alone. Widening `tools`
310
+ * is a real grant — this tab will execute what the gateway asks it to for
311
+ * every name in the list — so it names them explicitly rather than accepting
312
+ * a wildcard.
313
+ */
314
+ toolHost?: UseToolCallHostOptions | false;
241
315
  className?: string;
242
316
  }
243
317
  /** What an embedder needs to *change* a session it doesn't own the attach for. */
@@ -304,16 +378,20 @@ declare function SessionPanel({
304
378
  header,
305
379
  panelSurface,
306
380
  statusSurface,
381
+ statusPlacement,
307
382
  onOpenPanel,
308
383
  onVitals,
309
384
  transcriptVariant,
310
385
  transcriptDensity,
386
+ transcriptFont,
311
387
  controlsSurface,
312
388
  onControls,
313
389
  focusComposerOnClick,
314
390
  unseen,
391
+ readOnly,
392
+ toolHost,
315
393
  className
316
394
  }: SessionPanelProps): _$react.JSX.Element;
317
395
  //#endregion
318
- export { permissionModeChoices as _, SessionVitals as a, TranscriptVariant as c, useTranscriptVariant as d, PERMISSION_MODES as f, PermissionModeSelectProps as g, PermissionModeSelect as h, SessionSurfacePanel as i, TranscriptVariantProvider as l, PermissionModeMeta as m, SessionPanel as n, TranscriptDensity as o, PermissionModeChoice as p, SessionPanelProps as r, TranscriptDensityProvider as s, SessionControls as t, useTranscriptDensity as u, permissionModeMeta as v };
319
- //# sourceMappingURL=SessionPanel-Dy9lQrOV.d.mts.map
396
+ export { PermissionModeSelectProps as _, SessionVitals as a, TranscriptFont as c, useTranscriptDensity as d, useTranscriptVariant as f, PermissionModeSelect as g, PermissionModeMeta as h, SessionSurfacePanel as i, TranscriptVariant as l, PermissionModeChoice as m, SessionPanel as n, TranscriptDensity as o, PERMISSION_MODES as p, SessionPanelProps as r, TranscriptDensityProvider as s, SessionControls as t, TranscriptVariantProvider as u, permissionModeChoices as v, permissionModeMeta as y };
397
+ //# sourceMappingURL=SessionPanel-J2U8v88q.d.mts.map
package/build/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as formatDuration, c as formatRelativeTime, d as rateLimitWindowSeconds, f as toolInputPreview, i as formatCountdown, l as formatTokens, n as formatBytes, o as formatRateLimitWindow, r as formatCost, s as formatRateLimitWindowLong, t as formatAgoPrecise, u as friendlyModel } from "./format-ljc3lKpA.mjs";
2
- import { _ as permissionModeChoices, a as SessionVitals, c as TranscriptVariant, d as useTranscriptVariant, f as PERMISSION_MODES, g as PermissionModeSelectProps, h as PermissionModeSelect, i as SessionSurfacePanel, l as TranscriptVariantProvider, m as PermissionModeMeta, n as SessionPanel, o as TranscriptDensity, p as PermissionModeChoice, r as SessionPanelProps, s as TranscriptDensityProvider, t as SessionControls, u as useTranscriptDensity, v as permissionModeMeta } from "./SessionPanel-Dy9lQrOV.mjs";
2
+ import { _ as PermissionModeSelectProps, a as SessionVitals, c as TranscriptFont, d as useTranscriptDensity, f as useTranscriptVariant, g as PermissionModeSelect, h as PermissionModeMeta, i as SessionSurfacePanel, l as TranscriptVariant, m as PermissionModeChoice, n as SessionPanel, o as TranscriptDensity, p as PERMISSION_MODES, r as SessionPanelProps, s as TranscriptDensityProvider, t as SessionControls, u as TranscriptVariantProvider, v as permissionModeChoices, y as permissionModeMeta } from "./SessionPanel-J2U8v88q.mjs";
3
3
  import * as _$react from "react";
4
4
  import { ButtonHTMLAttributes, FunctionComponent, HTMLAttributes, InputHTMLAttributes, ReactElement, ReactNode, Ref, RefObject, TextareaHTMLAttributes } from "react";
5
5
  import { VariantProps } from "class-variance-authority";
@@ -22,7 +22,7 @@ import { WorkerDeckClient } from "@workerdeck/client";
22
22
 
23
23
  //#region src/components/ui/Button.d.ts
24
24
  declare const buttonVariants: (props?: ({
25
- variant?: "default" | "link" | "outline" | "secondary" | "ghost" | "destructive" | null | undefined;
25
+ variant?: "default" | "outline" | "secondary" | "ghost" | "destructive" | "link" | null | undefined;
26
26
  size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-sm" | null | undefined;
27
27
  } & _$class_variance_authority_types0.ClassProp) | undefined) => string;
28
28
  interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {}
@@ -218,6 +218,12 @@ interface SplitterProps {
218
218
  max: number;
219
219
  /** Keyboard step. */
220
220
  step?: number;
221
+ /**
222
+ * Size to snap back to on a double-click — the convention every pane divider
223
+ * that can be dragged is expected to honour. Omit and a double-click does
224
+ * nothing, which is the honest behaviour when there is no default to mean.
225
+ */
226
+ defaultValue?: number;
221
227
  /** Set when dragging the splitter *away* from the origin should shrink the
222
228
  * controlled pane — i.e. the pane is on the right or the bottom. */
223
229
  inverted?: boolean;
@@ -249,11 +255,49 @@ declare function Splitter({
249
255
  min,
250
256
  max,
251
257
  step,
258
+ defaultValue,
252
259
  inverted,
253
260
  'aria-label': label,
254
261
  className
255
262
  }: SplitterProps): _$react.JSX.Element;
256
263
  //#endregion
264
+ //#region src/components/ui/Empty.d.ts
265
+ /**
266
+ * A view with nothing in it: icon, title, description, and at most one action.
267
+ *
268
+ * Centered and given room, because an empty view is the first thing a new
269
+ * install shows and a flush-left sentence in the top corner reads like a bug
270
+ * report. It lives here rather than in one client because every panel that can
271
+ * be empty should be empty the same way — the extension's views and the
272
+ * dashboard's four sidebars are the same shape of thing.
273
+ *
274
+ * **At most one action, and never one the view header already offers.** Creating
275
+ * a session and adding a gateway are the `+` in the native title bar, exclusively
276
+ * — so those empty states point at it in words rather than growing a second
277
+ * button that does the same thing two inches lower. A button here is for the way
278
+ * out of a state the header has no answer to: clearing a filter, widening a
279
+ * scope.
280
+ */
281
+ declare function Empty({
282
+ icon,
283
+ title,
284
+ description,
285
+ action,
286
+ onAction
287
+ }: {
288
+ icon: ReactNode;
289
+ title: string;
290
+ description?: ReactNode;
291
+ action?: string;
292
+ onAction?: () => void;
293
+ }): _$react.JSX.Element;
294
+ /** A key or icon named inline in an empty state's description — "use the + above". */
295
+ declare function EmptyKey({
296
+ children
297
+ }: {
298
+ children: ReactNode;
299
+ }): _$react.JSX.Element;
300
+ //#endregion
257
301
  //#region src/components/ui/ProgressRing.d.ts
258
302
  interface ProgressRingProps {
259
303
  /** Filled share, 0–100 (clamped). */
@@ -815,9 +859,12 @@ interface MessageProps extends HTMLAttributes<HTMLDivElement> {
815
859
  /**
816
860
  * One chat turn row.
817
861
  *
818
- * `cards`: user messages sit right in a bubble; assistant content is flat,
819
- * full-width (the AI-chat convention assistant output is the page, user input
820
- * is quoted).
862
+ * `cards`: user messages sit in a bubble, assistant content is flat and
863
+ * full-width. Both are **left-aligned**: the transcript is a log read top to
864
+ * bottom, and an editor-shaped host (a full-width session view beside a sessions
865
+ * rail) has no right edge to anchor to — a bubble drifting right in a 1600px
866
+ * column separates a prompt from the reply it produced. The bubble alone is
867
+ * enough to say who spoke.
821
868
  *
822
869
  * `lines`: both are left-aligned full-width line items behind a gutter glyph —
823
870
  * `❯` for what was typed, `●` for what the model said. No bubble: a prompt is
@@ -1144,8 +1191,18 @@ interface StatusBarProps {
1144
1191
  onOpenStatus?: () => void;
1145
1192
  onOpenContext?: () => void;
1146
1193
  onOpenUsage?: () => void;
1147
- /** Trailing slot — the session-actions menu, in the panel's top-right. */
1194
+ /**
1195
+ * The session's own controls (model, permission mode), for
1196
+ * `controlsSurface: 'status'`. They sit at the end of the readings cluster —
1197
+ * status, context, usage, then what you can *change* — rather than out by the
1198
+ * actions menu, because they belong with the session facts they act on.
1199
+ */
1200
+ controls?: ReactNode;
1201
+ /** Trailing slot — the session-actions menu, at the bar's trailing edge. */
1148
1202
  actions?: ReactNode;
1203
+ /** Which edge the bar sits on, so its separating rule goes on the other side.
1204
+ * Placement is the panel's decision; this only styles it. */
1205
+ placement?: 'top' | 'bottom';
1149
1206
  className?: string;
1150
1207
  }
1151
1208
  declare function StatusBar({
@@ -1155,7 +1212,9 @@ declare function StatusBar({
1155
1212
  onOpenStatus,
1156
1213
  onOpenContext,
1157
1214
  onOpenUsage,
1215
+ controls,
1158
1216
  actions,
1217
+ placement,
1159
1218
  className
1160
1219
  }: StatusBarProps): _$react.JSX.Element;
1161
1220
  //#endregion
@@ -1394,8 +1453,37 @@ interface SessionBrowserProps {
1394
1453
  onRename?: (row: SessionRow, title: string) => void;
1395
1454
  /** Rendered when nothing at all exists (as opposed to nothing matching). */
1396
1455
  emptyState?: React.ReactNode;
1456
+ /**
1457
+ * Whether the search + facet bar is shown. Defaults to `true` — a list that
1458
+ * *is* the screen shows its controls.
1459
+ *
1460
+ * A host with somewhere better to put the toggle (a view title bar) passes
1461
+ * `false` and owns the boolean itself, the way the VS Code extension does: the
1462
+ * key lives where the commands do. Two rules come with it, and they are why
1463
+ * this hides only the bar and nothing else — **closing the bar never clears
1464
+ * the filters**, and the subset line below it renders either way, so a list
1465
+ * filtered by a control you can't currently see still says so.
1466
+ */
1467
+ showControls?: boolean;
1397
1468
  className?: string;
1398
1469
  }
1470
+ /**
1471
+ * How a list row is drawn, in one place, so `SidebarRow` in `web` matches this
1472
+ * exactly rather than approximating it — the dashboard's other three sidebars
1473
+ * are that component, and a sessions list that hovered differently from the
1474
+ * gateways list beside it would read as a different product.
1475
+ *
1476
+ * Two rules are load-bearing:
1477
+ *
1478
+ * - **Fill means hover, and only hover.** It stays on the row whether or not
1479
+ * the row is selected, because a selected row still has to answer the
1480
+ * pointer. Selection gets the gutter instead.
1481
+ * - **`ml-0` on the selected row is not cosmetic.** It hands the accent border
1482
+ * the 4px the margin was holding, so the text does not shift sideways as a
1483
+ * row becomes the selected one. The squared left corners are what let the bar
1484
+ * sit flush against the sidebar edge.
1485
+ */
1486
+ declare function rowShapeClass(active: boolean): string;
1399
1487
  declare function SessionBrowser({
1400
1488
  rows,
1401
1489
  config,
@@ -1406,8 +1494,31 @@ declare function SessionBrowser({
1406
1494
  onDelete,
1407
1495
  onRename,
1408
1496
  emptyState,
1497
+ showControls,
1409
1498
  className
1410
1499
  }: SessionBrowserProps): _$react.JSX.Element;
1500
+ /**
1501
+ * State as one glyph on the right edge — a ringing bell when it wants a human, a
1502
+ * spinner while it works, a moon when it is only sleeping. Replaces the text
1503
+ * badge: in a sidebar the word costs more room than it earns, and the states
1504
+ * that matter are the two you can recognise without reading.
1505
+ */
1506
+ declare function SessionStatusIcon({
1507
+ row
1508
+ }: {
1509
+ row: SessionRow;
1510
+ }): _$react.JSX.Element;
1511
+ //#endregion
1512
+ //#region src/components/agent/EngineIcon.d.ts
1513
+ declare function EngineIcon({
1514
+ engine,
1515
+ model,
1516
+ className
1517
+ }: {
1518
+ engine: string;
1519
+ model?: string;
1520
+ className?: string;
1521
+ }): _$react.JSX.Element;
1411
1522
  //#endregion
1412
1523
  //#region src/components/agent/SessionEmptyState.d.ts
1413
1524
  interface SessionEmptyStateProps {
@@ -1511,5 +1622,5 @@ declare function toolIcon(toolName: string): LucideIcon;
1511
1622
  */
1512
1623
  declare function isMutatingTool(toolName: string): boolean;
1513
1624
  //#endregion
1514
- export { AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogTitle, AlertDialogTrigger, Badge, type BadgeProps, Button, type ButtonProps, Card, CardContent, CardHeader, CardTitle, type ChipSegment, CodeBlock, type CodeBlockProps, Composer, type ComposerFileMatch, type ComposerHandle, type ComposerProps, ContextDialog, type ContextDialogProps, Conversation, ConversationContent, type ConversationProps, ConversationScrollButton, CopyButton, type CopyButtonProps, Dialog, DialogBody, DialogClose, DialogContent, DialogHeader, DialogRow, DialogTrigger, FileCard, type FileCardProps, type FileDeliveredItem, HostFilesDialog, type HostFilesDialogProps, Input, Loader, McpDialog, type McpDialogProps, Menu, MenuContent, MenuItem, MenuSeparator, MenuTrigger, Message, MessageContent, type MessageProps, ModelSelect, type ModelSelectProps, PERMISSION_MODES, type PermissionModeChoice, type PermissionModeMeta, PermissionModeSelect, type PermissionModeSelectProps, PermissionPrompt, type PermissionPromptProps, ProgressRing, type ProgressRingProps, PromptArea, type PromptAreaHandle, type PromptAreaProps, PromptTokenText, QUESTION_BEHAVIORS, type QuestionBehaviorMeta, QuestionPrompt, type QuestionPromptProps, Reasoning, type ReasoningProps, Response, type ResponseProps, STATUS_META, type Segment, Select, SelectContent, SelectItem, SelectItemText, SelectTrigger, SelectValue, SessionBrowser, type SessionBrowserProps, type SessionControls, SessionEmptyState, type SessionEmptyStateProps, SessionInfoDialog, type SessionInfoDialogProps, SessionList, SessionListItem, type SessionListItemProps, type SessionListProps, SessionPanel, type SessionPanelProps, type SessionSurfacePanel, type SessionVitals, SkillsDialog, type SkillsDialogProps, Spinner, Splitter, type SplitterProps, StatusBar, type StatusBarProps, type TextSegment, Textarea, Tip, Toaster, ToolCallCard, type ToolCallCardProps, type ToolCallItem, TooltipContent, TooltipProvider, Transcript, type TranscriptDensity, TranscriptDensityProvider, type TranscriptProps, type TranscriptVariant, TranscriptVariantProvider, type TriggerConfig, type TriggerSuggestion, UsageDialog, type UsageDialogProps, badgeVariants, buttonVariants, cn, commandTrigger, copyText, formatAgoPrecise, formatBytes, formatCost, formatCountdown, formatDuration, formatRateLimitWindow, formatRateLimitWindowLong, formatRelativeTime, formatTokens, friendlyModel, getChipsByTrigger, hashtagTrigger, isMutatingTool, isSegmentsEmpty, mentionTrigger, parseUserQuestions, permissionModeChoices, permissionModeMeta, plainTextToSegments, rateLimitWindowSeconds, segmentsToPlainText, skillPrompt, toast, toolIcon, toolInputPreview, usePromptAreaState, useTranscriptDensity, useTranscriptVariant };
1625
+ export { AlertDialog, AlertDialogClose, AlertDialogContent, AlertDialogDescription, AlertDialogTitle, AlertDialogTrigger, Badge, type BadgeProps, Button, type ButtonProps, Card, CardContent, CardHeader, CardTitle, type ChipSegment, CodeBlock, type CodeBlockProps, Composer, type ComposerFileMatch, type ComposerHandle, type ComposerProps, ContextDialog, type ContextDialogProps, Conversation, ConversationContent, type ConversationProps, ConversationScrollButton, CopyButton, type CopyButtonProps, Dialog, DialogBody, DialogClose, DialogContent, DialogHeader, DialogRow, DialogTrigger, Empty, EmptyKey, EngineIcon, FileCard, type FileCardProps, type FileDeliveredItem, HostFilesDialog, type HostFilesDialogProps, Input, Loader, McpDialog, type McpDialogProps, Menu, MenuContent, MenuItem, MenuSeparator, MenuTrigger, Message, MessageContent, type MessageProps, ModelSelect, type ModelSelectProps, PERMISSION_MODES, type PermissionModeChoice, type PermissionModeMeta, PermissionModeSelect, type PermissionModeSelectProps, PermissionPrompt, type PermissionPromptProps, ProgressRing, type ProgressRingProps, PromptArea, type PromptAreaHandle, type PromptAreaProps, PromptTokenText, QUESTION_BEHAVIORS, type QuestionBehaviorMeta, QuestionPrompt, type QuestionPromptProps, Reasoning, type ReasoningProps, Response, type ResponseProps, STATUS_META, type Segment, Select, SelectContent, SelectItem, SelectItemText, SelectTrigger, SelectValue, SessionBrowser, type SessionBrowserProps, type SessionControls, SessionEmptyState, type SessionEmptyStateProps, SessionInfoDialog, type SessionInfoDialogProps, SessionList, SessionListItem, type SessionListItemProps, type SessionListProps, SessionPanel, type SessionPanelProps, SessionStatusIcon, type SessionSurfacePanel, type SessionVitals, SkillsDialog, type SkillsDialogProps, Spinner, Splitter, type SplitterProps, StatusBar, type StatusBarProps, type TextSegment, Textarea, Tip, Toaster, ToolCallCard, type ToolCallCardProps, type ToolCallItem, TooltipContent, TooltipProvider, Transcript, type TranscriptDensity, TranscriptDensityProvider, type TranscriptFont, type TranscriptProps, type TranscriptVariant, TranscriptVariantProvider, type TriggerConfig, type TriggerSuggestion, UsageDialog, type UsageDialogProps, badgeVariants, buttonVariants, cn, commandTrigger, copyText, formatAgoPrecise, formatBytes, formatCost, formatCountdown, formatDuration, formatRateLimitWindow, formatRateLimitWindowLong, formatRelativeTime, formatTokens, friendlyModel, getChipsByTrigger, hashtagTrigger, isMutatingTool, isSegmentsEmpty, mentionTrigger, parseUserQuestions, permissionModeChoices, permissionModeMeta, plainTextToSegments, rateLimitWindowSeconds, rowShapeClass, segmentsToPlainText, skillPrompt, toast, toolIcon, toolInputPreview, usePromptAreaState, useTranscriptDensity, useTranscriptVariant };
1515
1626
  //# sourceMappingURL=index.d.mts.map