@workerdeck/ui 0.13.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.
package/README.md CHANGED
@@ -150,3 +150,22 @@ lose by forgetting a second mount isn't one.
150
150
  `2h 10m`) with no React in the graph — for a host that renders session readings outside
151
151
  React, like an extension host drawing them into a window status bar, and wants them spelled
152
152
  exactly as the panel spells them.
153
+
154
+ ## Rules you cannot infer from the types
155
+
156
+ - **Remount `SessionPanel` by key when the session id changes**, and never let its position in the
157
+ tree change otherwise: a remount drops the WebSocket attach and the whole transcript. That is why
158
+ the workspace keeps the panel's child index across the editor appearing and disappearing.
159
+ - **The panel owns the session's one attach.** External chrome reads live values through
160
+ `onVitals` and changes them through `onControls`; opening a second attach to render a status bar
161
+ means the tool bridge may ask the wrong client.
162
+ - **`transcriptVariant` and `transcriptDensity` ride context, not props.** A row component composed
163
+ by hand still gets the right treatment; restyling `data-slot`s from outside is not the seam.
164
+ - **`statusSurface: 'external'` takes the `⋯` menu's only home with it.** Combining it with
165
+ `panelSurface: 'internal'` needs a *function* `header` to receive the menu, or those panels
166
+ become unreachable.
167
+ - **Keep `monaco-editor` unreachable from `src/index.ts`.** Tree-shaking does not cover it: Vite
168
+ resolves Monaco's worker `new URL(...)`s while *transforming* the module, before shaking, and
169
+ emits megabytes of worker assets it never retracts. That is what the `/workspace` entry point is
170
+ for, and why Vite hosts need `optimizeDeps: { exclude: ['monaco-editor'] }`.
171
+
@@ -102,7 +102,7 @@ function Badge({ className, variant = "neutral", mono, dot, children, ...props }
102
102
  ...props,
103
103
  children: [dot ? /* @__PURE__ */ jsx("span", {
104
104
  "aria-hidden": true,
105
- className: "size-1.5 rounded-full bg-current"
105
+ className: "size-1.5 shrink-0 self-center rounded-full bg-current"
106
106
  }) : null, children]
107
107
  });
108
108
  }
@@ -401,7 +401,7 @@ function CodeBlock({ code, label, copyable = true, variant = "panel", className
401
401
  * Keyboard-operable and announced as a separator, because a pane you can only
402
402
  * size by dragging is a pane some people cannot size.
403
403
  */
404
- function Splitter({ orientation, value, onValueChange, min, max, step = 16, inverted, "aria-label": label, className }) {
404
+ function Splitter({ orientation, value, onValueChange, min, max, step = 16, defaultValue, inverted, "aria-label": label, className }) {
405
405
  const drag = useRef(null);
406
406
  const vertical = orientation === "vertical";
407
407
  const clamp = useCallback((next) => Math.min(max, Math.max(min, next)), [min, max]);
@@ -425,6 +425,9 @@ function Splitter({ orientation, value, onValueChange, min, max, step = 16, inve
425
425
  drag.current = null;
426
426
  if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);
427
427
  };
428
+ const onDoubleClick = () => {
429
+ if (defaultValue !== void 0) onValueChange(clamp(defaultValue));
430
+ };
428
431
  const onKeyDown = (event) => {
429
432
  const grow = vertical ? "ArrowRight" : "ArrowDown";
430
433
  const shrink = vertical ? "ArrowLeft" : "ArrowUp";
@@ -449,6 +452,7 @@ function Splitter({ orientation, value, onValueChange, min, max, step = 16, inve
449
452
  onPointerMove,
450
453
  onPointerUp: endDrag,
451
454
  onPointerCancel: endDrag,
455
+ onDoubleClick,
452
456
  onKeyDown,
453
457
  className: cn("group relative shrink-0 touch-none bg-border transition-colors", "hover:bg-border-strong focus-visible:bg-accent focus-visible:outline-none", vertical ? "w-px cursor-col-resize" : "h-px cursor-row-resize", className),
454
458
  children: /* @__PURE__ */ jsx("span", {
@@ -4530,7 +4534,7 @@ function Composer({ onSend, onInterrupt, busy, disabled, placeholder = "Message
4530
4534
  e.target.value = "";
4531
4535
  }
4532
4536
  }) : null;
4533
- const attach = !!attachments && !attachments.disabled ? /* @__PURE__ */ jsxs(Fragment$1, { children: [fileField, inline ? /* @__PURE__ */ jsx(GlyphButton, {
4537
+ const attach = !!attachments && !attachments.disabled ? /* @__PURE__ */ jsxs(Fragment$1, { children: [fileField, lines ? /* @__PURE__ */ jsx(GlyphButton, {
4534
4538
  label: "Attach files",
4535
4539
  disabled,
4536
4540
  onClick: () => fileInput.current?.click(),
@@ -4544,7 +4548,7 @@ function Composer({ onSend, onInterrupt, busy, disabled, placeholder = "Message
4544
4548
  children: /* @__PURE__ */ jsx(Paperclip, { className: "size-4" })
4545
4549
  })] }) : null;
4546
4550
  const interrupting = busy && !canSend;
4547
- const submitButton = inline ? /* @__PURE__ */ jsx(GlyphButton, {
4551
+ const submitButton = lines ? /* @__PURE__ */ jsx(GlyphButton, {
4548
4552
  label: interrupting ? "Interrupt" : "Send",
4549
4553
  disabled: !interrupting && !canSend,
4550
4554
  onClick: interrupting ? onInterrupt : submit,
@@ -4565,24 +4569,81 @@ function Composer({ onSend, onInterrupt, busy, disabled, placeholder = "Message
4565
4569
  onClick: submit,
4566
4570
  children: /* @__PURE__ */ jsx(ArrowUp, { className: "size-4" })
4567
4571
  });
4572
+ const dropHandlers = {
4573
+ onDragOver: (e) => {
4574
+ if (attachments && !attachments.disabled) {
4575
+ e.preventDefault();
4576
+ setDragging(true);
4577
+ }
4578
+ },
4579
+ onDragLeave: () => setDragging(false),
4580
+ onDrop: (e) => {
4581
+ if (!attachments || attachments.disabled) return;
4582
+ e.preventDefault();
4583
+ setDragging(false);
4584
+ pick(e.dataTransfer.files);
4585
+ }
4586
+ };
4587
+ const errorRow = attachments?.error ? /* @__PURE__ */ jsxs("div", {
4588
+ className: cn("mx-auto mt-1 flex w-full max-w-[var(--wd-content-max-w,48rem)] items-center gap-2 text-label text-danger", lines && "px-2"),
4589
+ children: [
4590
+ /* @__PURE__ */ jsx(TriangleAlert, { className: "size-3 shrink-0" }),
4591
+ /* @__PURE__ */ jsx("span", {
4592
+ className: "min-w-0 flex-1",
4593
+ children: attachments.error
4594
+ }),
4595
+ /* @__PURE__ */ jsx("button", {
4596
+ type: "button",
4597
+ onClick: attachments.dismissError,
4598
+ "aria-label": "Dismiss",
4599
+ className: "shrink-0 opacity-70 hover:opacity-100",
4600
+ children: /* @__PURE__ */ jsx(X, { className: "size-3" })
4601
+ })
4602
+ ]
4603
+ }) : null;
4604
+ if (lines) return /* @__PURE__ */ jsxs("div", {
4605
+ "data-slot": "composer",
4606
+ className: cn("shrink-0", className),
4607
+ children: [/* @__PURE__ */ jsx("div", {
4608
+ ...dropHandlers,
4609
+ className: cn("flex min-h-[38px] flex-col justify-center", "border-t border-border bg-bg transition-colors", "focus-within:border-t-accent", dragging && "border-t-accent", disabled && "opacity-60"),
4610
+ children: /* @__PURE__ */ jsxs("div", {
4611
+ className: "mx-auto w-full max-w-[var(--wd-content-max-w,48rem)] px-2 py-1",
4612
+ children: [
4613
+ staged.length > 0 && attachments ? /* @__PURE__ */ jsx(AttachmentStrip, { attachments }) : null,
4614
+ /* @__PURE__ */ jsxs("div", {
4615
+ className: "flex items-end gap-1",
4616
+ children: [
4617
+ attach,
4618
+ /* @__PURE__ */ jsx(PromptArea, {
4619
+ ...bind,
4620
+ triggers,
4621
+ onSubmit: submit,
4622
+ disabled,
4623
+ placeholder: disabled ? "Session ended" : placeholder,
4624
+ minHeight: 20,
4625
+ maxHeight: 192,
4626
+ "aria-label": "Message the agent",
4627
+ className: "min-w-0 flex-1 py-0.5 text-body-sm text-text",
4628
+ onImagePaste: (file) => attachments?.add([file])
4629
+ }),
4630
+ submitButton
4631
+ ]
4632
+ }),
4633
+ toolbar ? /* @__PURE__ */ jsx("div", {
4634
+ className: "flex min-w-0 items-center gap-1 pt-1",
4635
+ children: toolbar
4636
+ }) : null
4637
+ ]
4638
+ })
4639
+ }), errorRow]
4640
+ });
4568
4641
  return /* @__PURE__ */ jsxs("div", {
4569
4642
  "data-slot": "composer",
4570
4643
  className: cn("px-3 pb-3", className),
4571
4644
  children: [/* @__PURE__ */ jsxs("div", {
4572
- onDragOver: (e) => {
4573
- if (attachments && !attachments.disabled) {
4574
- e.preventDefault();
4575
- setDragging(true);
4576
- }
4577
- },
4578
- onDragLeave: () => setDragging(false),
4579
- onDrop: (e) => {
4580
- if (!attachments || attachments.disabled) return;
4581
- e.preventDefault();
4582
- setDragging(false);
4583
- pick(e.dataTransfer.files);
4584
- },
4585
- className: cn("mx-auto w-full max-w-[var(--wd-content-max-w,48rem)] overflow-hidden border border-border bg-bg", "transition-colors", lines ? "rounded-sm focus-within:border-accent" : cn("rounded-lg shadow-(--shadow-xs)", "focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/30"), dragging && (lines ? "border-accent" : "border-ring ring-2 ring-ring/30"), disabled && "opacity-60"),
4645
+ ...dropHandlers,
4646
+ className: cn("mx-auto w-full max-w-[var(--wd-content-max-w,48rem)] overflow-hidden border border-border bg-bg", "transition-colors rounded-lg shadow-(--shadow-xs)", "focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/30", dragging && "border-ring ring-2 ring-ring/30", disabled && "opacity-60"),
4586
4647
  children: [staged.length > 0 && attachments ? /* @__PURE__ */ jsx(AttachmentStrip, { attachments }) : null, inline ? /* @__PURE__ */ jsxs("div", {
4587
4648
  className: "flex items-end gap-1 p-1",
4588
4649
  children: [
@@ -4619,23 +4680,7 @@ function Composer({ onSend, onInterrupt, busy, disabled, placeholder = "Message
4619
4680
  children: [attach, toolbar]
4620
4681
  }), submitButton]
4621
4682
  })] })]
4622
- }), attachments?.error ? /* @__PURE__ */ jsxs("div", {
4623
- className: "mx-auto mt-1 flex w-full max-w-[var(--wd-content-max-w,48rem)] items-center gap-2 text-label text-danger",
4624
- children: [
4625
- /* @__PURE__ */ jsx(TriangleAlert, { className: "size-3 shrink-0" }),
4626
- /* @__PURE__ */ jsx("span", {
4627
- className: "min-w-0 flex-1",
4628
- children: attachments.error
4629
- }),
4630
- /* @__PURE__ */ jsx("button", {
4631
- type: "button",
4632
- onClick: attachments.dismissError,
4633
- "aria-label": "Dismiss",
4634
- className: "shrink-0 opacity-70 hover:opacity-100",
4635
- children: /* @__PURE__ */ jsx(X, { className: "size-3" })
4636
- })
4637
- ]
4638
- }) : null]
4683
+ }), errorRow]
4639
4684
  });
4640
4685
  }
4641
4686
  /**
@@ -6680,14 +6725,17 @@ function RateLimitMeter({ label, info, now }) {
6680
6725
  ]
6681
6726
  }),
6682
6727
  children: /* @__PURE__ */ jsxs("span", {
6683
- className: cn("inline-flex cursor-default items-center gap-1 font-mono text-label", info.status === "rejected" ? "text-danger" : utilizationColor(pct ?? 0)),
6728
+ className: cn("cursor-default font-mono text-label whitespace-nowrap", info.status === "rejected" ? "text-danger" : utilizationColor(pct ?? 0)),
6684
6729
  children: [
6685
- /* @__PURE__ */ jsx(ProgressRing, { value: pct ?? 0 }),
6730
+ /* @__PURE__ */ jsx(ProgressRing, {
6731
+ value: pct ?? 0,
6732
+ className: "mr-1 inline-block align-middle"
6733
+ }),
6686
6734
  label,
6687
6735
  pct !== void 0 ? ` ${pct.toFixed(0)}%` : "",
6688
6736
  resetsAtMs !== void 0 ? /* @__PURE__ */ jsxs("span", {
6689
6737
  className: "text-fg-4",
6690
- children: ["· ", formatCountdown(resetsAtMs, now)]
6738
+ children: [" · ", formatCountdown(resetsAtMs, now)]
6691
6739
  }) : null
6692
6740
  ]
6693
6741
  })
@@ -6701,11 +6749,11 @@ function Slot({ onClick, hint, children }) {
6701
6749
  type: "button",
6702
6750
  onClick,
6703
6751
  "aria-label": hint,
6704
- className: "rounded-md px-1 py-0.5 transition-colors outline-none hover:bg-surface-hover focus-visible:bg-surface-hover",
6752
+ className: "rounded-md py-0.5 leading-4 transition-colors outline-none hover:bg-surface-hover focus-visible:bg-surface-hover",
6705
6753
  children
6706
6754
  });
6707
6755
  }
6708
- function StatusBar({ state, connected, connection, onOpenStatus, onOpenContext, onOpenUsage, actions, placement = "top", className }) {
6756
+ function StatusBar({ state, connected, connection, onOpenStatus, onOpenContext, onOpenUsage, controls, actions, placement = "top", className }) {
6709
6757
  const meta = STATUS_META[state.status];
6710
6758
  const now = useNow();
6711
6759
  const session = state.rateLimits?.five_hour;
@@ -6713,7 +6761,7 @@ function StatusBar({ state, connected, connection, onOpenStatus, onOpenContext,
6713
6761
  const link = connection ?? (connected === false ? "reconnecting" : "live");
6714
6762
  return /* @__PURE__ */ jsxs("div", {
6715
6763
  "data-slot": "status-bar",
6716
- className: cn("flex items-center gap-2 border-border bg-surface px-3 py-1.5", placement === "bottom" ? "border-t" : "border-b", className),
6764
+ className: cn("flex h-[38px] items-baseline gap-2 border-border bg-surface p-1.5", placement === "bottom" ? "border-t" : "border-b", className),
6717
6765
  children: [
6718
6766
  /* @__PURE__ */ jsx(Slot, {
6719
6767
  onClick: onOpenStatus,
@@ -6721,11 +6769,13 @@ function StatusBar({ state, connected, connection, onOpenStatus, onOpenContext,
6721
6769
  children: link === "live" ? /* @__PURE__ */ jsxs(Badge, {
6722
6770
  variant: meta.variant,
6723
6771
  dot: !meta.busy,
6724
- children: [meta.busy ? /* @__PURE__ */ jsx(Spinner, { className: "size-3 text-current" }) : null, meta.label]
6772
+ className: "items-baseline",
6773
+ children: [meta.busy ? /* @__PURE__ */ jsx(Spinner, { className: "size-3 self-center text-current" }) : null, meta.label]
6725
6774
  }) : /* @__PURE__ */ jsxs(Badge, {
6726
6775
  variant: link === "offline" ? "danger" : "warning",
6727
6776
  dot: false,
6728
- children: [link === "offline" ? /* @__PURE__ */ jsx(WifiOff, { className: "size-3 text-current" }) : /* @__PURE__ */ jsx(RefreshCw, { className: "size-3 animate-spin text-current" }), link === "offline" ? "Offline" : "Reconnecting…"]
6777
+ className: "items-baseline",
6778
+ children: [link === "offline" ? /* @__PURE__ */ jsx(WifiOff, { className: "size-3 self-center text-current" }) : /* @__PURE__ */ jsx(RefreshCw, { className: "size-3 animate-spin self-center text-current" }), link === "offline" ? "Offline" : "Reconnecting…"]
6729
6779
  })
6730
6780
  }),
6731
6781
  state.capabilities.contextUsage && state.contextUsage ? /* @__PURE__ */ jsx(Slot, {
@@ -6737,7 +6787,7 @@ function StatusBar({ state, connected, connection, onOpenStatus, onOpenContext,
6737
6787
  onClick: onOpenUsage,
6738
6788
  hint: "Plan usage",
6739
6789
  children: /* @__PURE__ */ jsxs("span", {
6740
- className: "inline-flex items-center gap-2",
6790
+ className: "inline-flex items-baseline gap-2",
6741
6791
  children: [session ? /* @__PURE__ */ jsx(RateLimitMeter, {
6742
6792
  label: "Session",
6743
6793
  info: session,
@@ -6749,6 +6799,7 @@ function StatusBar({ state, connected, connection, onOpenStatus, onOpenContext,
6749
6799
  }) : null]
6750
6800
  })
6751
6801
  }) : null,
6802
+ controls,
6752
6803
  /* @__PURE__ */ jsx("span", { className: "flex-1" }),
6753
6804
  /* @__PURE__ */ jsx("span", {
6754
6805
  className: "font-mono text-label text-fg-3",
@@ -7017,7 +7068,7 @@ function Message({ from, className, children, ...props }) {
7017
7068
  className: cn("flex w-full", lines ? cn("flex-row gap-2", from === "user" && "-mx-1 rounded-sm bg-surface px-1") : "flex-col items-start gap-1", className),
7018
7069
  ...props,
7019
7070
  children: lines ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(LineGlyph, {
7020
- className: from === "user" ? "text-fg-2" : "text-fg-3",
7071
+ className: from === "user" ? "text-accent" : "text-fg-3",
7021
7072
  children: from === "user" ? "❯" : "●"
7022
7073
  }), /* @__PURE__ */ jsx("div", {
7023
7074
  className: "flex min-w-0 flex-1 flex-col gap-1",
@@ -8052,10 +8103,11 @@ const INTERACTIVE = [
8052
8103
  * the engine name — an absent capability hides the control instead of offering
8053
8104
  * one that can only fail.
8054
8105
  */
8055
- function SessionPanel({ client, sessionId, header, panelSurface = "internal", statusSurface = "internal", statusPlacement = "top", onOpenPanel, onVitals, transcriptVariant = "cards", transcriptDensity = "comfortable", controlsSurface = "internal", onControls, focusComposerOnClick = false, unseen, readOnly = false, className }) {
8106
+ function SessionPanel({ client, sessionId, header, panelSurface = "internal", statusSurface = "internal", statusPlacement = "top", onOpenPanel, onVitals, transcriptVariant = "cards", transcriptDensity = "comfortable", transcriptFont = "sans", controlsSurface = "internal", onControls, focusComposerOnClick = false, unseen, readOnly = false, toolHost, className }) {
8056
8107
  const external = panelSurface === "external";
8057
8108
  const statusExternal = statusSurface === "external";
8058
- const controlsExternal = controlsSurface === "external";
8109
+ const controlsInStatus = controlsSurface === "status" && !statusExternal;
8110
+ const controlsExternal = controlsSurface === "external" || controlsInStatus;
8059
8111
  const [protocolError, setProtocolError] = useState(void 0);
8060
8112
  const [panel, setPanel] = useState();
8061
8113
  const { state, connection, protocolMismatch, models, effectiveModel, handle, send, approve, deny, interrupt, setModel, setPermissionMode, reconnectNow } = useClaudeSession(client, sessionId, { onProtocolError: setProtocolError });
@@ -8078,7 +8130,7 @@ function SessionPanel({ client, sessionId, header, panelSurface = "internal", st
8078
8130
  document.addEventListener("visibilitychange", onVisible);
8079
8131
  return () => document.removeEventListener("visibilitychange", onVisible);
8080
8132
  }, [reconnectNow]);
8081
- useToolCallHost(handle);
8133
+ useToolCallHost(handle, toolHost === false ? { enabled: false } : toolHost);
8082
8134
  const capabilities = state.capabilities;
8083
8135
  const onVitalsRef = useRef(onVitals);
8084
8136
  onVitalsRef.current = onVitals;
@@ -8204,10 +8256,25 @@ function SessionPanel({ client, sessionId, header, panelSurface = "internal", st
8204
8256
  ] })] });
8205
8257
  const menu = external ? null : actionsMenu;
8206
8258
  const headerTakesActions = typeof header === "function";
8259
+ const sessionControls = /* @__PURE__ */ jsxs(Fragment$1, { children: [models.length ? /* @__PURE__ */ jsx(ModelSelect, {
8260
+ models,
8261
+ model: effectiveModel,
8262
+ onModelChange: setModel,
8263
+ disabled: ended,
8264
+ className: controlsInStatus ? "h-5" : void 0
8265
+ }) : null, state.permissionMode ? /* @__PURE__ */ jsx(PermissionModeSelect, {
8266
+ mode: state.permissionMode,
8267
+ onModeChange: setPermissionMode,
8268
+ modes: capabilities.permissionModes,
8269
+ canBypass: state.session?.canBypassPermissions,
8270
+ disabled: ended,
8271
+ className: controlsInStatus ? "h-5" : void 0
8272
+ }) : null] });
8207
8273
  const statusBar = statusExternal ? null : /* @__PURE__ */ jsx(StatusBar, {
8208
8274
  state,
8209
8275
  connection,
8210
8276
  placement: statusPlacement,
8277
+ controls: controlsInStatus && !readOnly ? sessionControls : void 0,
8211
8278
  onOpenStatus: external && !onOpenPanel ? void 0 : () => openPanel("info"),
8212
8279
  onOpenContext: external && !onOpenPanel ? void 0 : () => openPanel("context"),
8213
8280
  onOpenUsage: external && !onOpenPanel ? void 0 : () => openPanel("usage"),
@@ -8225,6 +8292,7 @@ function SessionPanel({ client, sessionId, header, panelSurface = "internal", st
8225
8292
  value: transcriptDensity,
8226
8293
  children: /* @__PURE__ */ jsxs("div", {
8227
8294
  "data-slot": "session-panel",
8295
+ "data-agent-font": transcriptFont,
8228
8296
  onClick: handleClick,
8229
8297
  className: cn("flex h-full min-h-0 flex-col overflow-hidden bg-bg", className),
8230
8298
  children: [
@@ -8323,18 +8391,7 @@ function SessionPanel({ client, sessionId, header, panelSurface = "internal", st
8323
8391
  limit: 8
8324
8392
  }) : void 0,
8325
8393
  layout: controlsExternal ? "inline" : "stacked",
8326
- toolbar: controlsExternal ? void 0 : /* @__PURE__ */ jsxs(Fragment$1, { children: [models.length ? /* @__PURE__ */ jsx(ModelSelect, {
8327
- models,
8328
- model: effectiveModel,
8329
- onModelChange: setModel,
8330
- disabled: ended
8331
- }) : null, state.permissionMode ? /* @__PURE__ */ jsx(PermissionModeSelect, {
8332
- mode: state.permissionMode,
8333
- onModeChange: setPermissionMode,
8334
- modes: capabilities.permissionModes,
8335
- canBypass: state.session?.canBypassPermissions,
8336
- disabled: ended
8337
- }) : null] })
8394
+ toolbar: controlsExternal ? void 0 : sessionControls
8338
8395
  }),
8339
8396
  statusPlacement === "bottom" ? statusBar : null,
8340
8397
  !external ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
@@ -8474,4 +8531,4 @@ function Notice({ level, onDismiss, children }) {
8474
8531
  //#endregion
8475
8532
  export { Tip as $, SkillsDialog as A, commandTrigger as B, isMutatingTool as C, Button as Ct, permissionModeChoices as D, PermissionModeSelect as E, skillPrompt as F, plainTextToSegments as G, mentionTrigger as H, TranscriptDensityProvider as I, Splitter as J, segmentsToPlainText as K, TranscriptVariantProvider as L, HostFilesDialog as M, ContextDialog as N, permissionModeMeta as O, Composer as P, copyText as Q, useTranscriptDensity as R, Response as S, badgeVariants as St, PERMISSION_MODES as T, cn as Tt, usePromptAreaState as U, hashtagTrigger as V, PromptArea as W, Spinner as X, CodeBlock as Y, CopyButton as Z, SessionInfoDialog as _, SelectItemText as _t, SessionEmptyState as a, DialogContent as at, parseUserQuestions as b, Input as bt, Message as c, DialogTrigger as ct, FileCard as d, MenuItem as dt, TooltipContent as et, Conversation as f, MenuSeparator as ft, STATUS_META as g, SelectItem as gt, StatusBar as h, SelectContent as ht, ToolCallCard as i, DialogClose as it, McpDialog as j, ModelSelect as k, MessageContent as l, Menu$1 as lt, ConversationScrollButton as m, Select$1 as mt, UsageDialog as n, Dialog$1 as nt, Reasoning as o, DialogHeader as ot, ConversationContent as p, MenuTrigger as pt, ProgressRing as q, Transcript as r, DialogBody as rt, PromptTokenText as s, DialogRow as st, SessionPanel as t, TooltipProvider as tt, Loader as u, MenuContent as ut, QUESTION_BEHAVIORS as v, SelectTrigger as vt, toolIcon as w, buttonVariants as wt, PermissionPrompt as x, Badge as xt, QuestionPrompt as y, SelectValue as yt, useTranscriptVariant as z };
8476
8533
 
8477
- //# sourceMappingURL=SessionPanel-CKQa4i0Y.mjs.map
8534
+ //# sourceMappingURL=SessionPanel-DI1NO4l8.mjs.map