@tangle-network/sandbox-ui 0.134.4 → 0.134.6

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.
@@ -315,31 +315,73 @@ function profileSubtitle(profile) {
315
315
  * because the inline form needs its own focus and typing without the menu
316
316
  * stealing keystrokes.
317
317
  */
318
- function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate, onUpdate, onDelete, disabled, locked, lockReason, onNewChat, className, triggerClassName, popoverClassName, side = "top" }) {
318
+ function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate, onUpdate, onDelete, onEdit, onNew, disabled, locked, lockReason, onNewChat, className, triggerClassName, popoverClassName, side = "top" }) {
319
319
  const [open, setOpen] = React$1.useState(false);
320
- const [composing, setComposing] = React$1.useState(null);
320
+ const [composing, setComposingState] = React$1.useState(null);
321
+ const [saving, setSaving] = React$1.useState(false);
322
+ const [saveError, setSaveError] = React$1.useState(null);
323
+ const pendingSave = React$1.useRef(false);
324
+ const editorEpoch = React$1.useRef(0);
325
+ const setComposing = React$1.useCallback((next) => {
326
+ editorEpoch.current += 1;
327
+ pendingSave.current = false;
328
+ setSaving(false);
329
+ setSaveError(null);
330
+ setComposingState(next);
331
+ }, []);
332
+ React$1.useEffect(() => () => {
333
+ editorEpoch.current += 1;
334
+ }, []);
321
335
  const popoverRef = React$1.useRef(null);
322
336
  const ref = useClickOutside(() => {
337
+ if (pendingSave.current) return;
323
338
  setOpen(false);
324
339
  setComposing(null);
325
340
  }, [popoverRef]);
326
- const canAuthor = Boolean(capabilities && (onCreate || onUpdate));
341
+ const canAuthor = Boolean(onNew || capabilities && onCreate);
342
+ const editIn = (profile) => onEdit ? () => {
343
+ setOpen(false);
344
+ onEdit(profile.id);
345
+ } : onUpdate ? () => setComposing(profile) : void 0;
327
346
  const builtins = profiles.filter((profile) => profile.builtin);
328
347
  const custom = profiles.filter((profile) => !profile.builtin);
329
348
  const selectedName = profiles.find((profile) => profile.id === value)?.name ?? value;
330
349
  React$1.useEffect(() => {
331
- if (!locked) return;
350
+ if (!locked && !disabled) return;
332
351
  setOpen(false);
333
352
  setComposing(null);
334
- }, [locked]);
353
+ }, [
354
+ locked,
355
+ disabled,
356
+ setComposing
357
+ ]);
335
358
  function select(id) {
336
359
  onChange(id);
337
360
  setOpen(false);
338
361
  }
339
362
  async function save(draft) {
340
- if (draft.id) await onUpdate?.(draft.id, draft);
341
- else await onCreate?.(draft);
342
- setComposing(null);
363
+ if (pendingSave.current || locked || disabled) return;
364
+ const epoch = editorEpoch.current;
365
+ pendingSave.current = true;
366
+ setSaving(true);
367
+ setSaveError(null);
368
+ try {
369
+ if (draft.id) {
370
+ if (!onUpdate) throw new Error("Editing this agent is unavailable.");
371
+ await onUpdate(draft.id, draft);
372
+ } else {
373
+ if (!onCreate) throw new Error("Creating an agent is unavailable.");
374
+ await onCreate(draft);
375
+ }
376
+ if (editorEpoch.current === epoch) setComposing(null);
377
+ } catch (error) {
378
+ if (editorEpoch.current === epoch) setSaveError(error instanceof Error && error.message.trim() ? error.message : "Could not save this agent. Your draft is still here; try again.");
379
+ } finally {
380
+ if (editorEpoch.current === epoch) {
381
+ pendingSave.current = false;
382
+ setSaving(false);
383
+ }
384
+ }
343
385
  }
344
386
  if (locked && onNewChat) return /* @__PURE__ */ jsxs(InformativeLock, {
345
387
  ariaLabel: "Agent profile (locked)",
@@ -361,9 +403,13 @@ function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate,
361
403
  className: cn$1("relative inline-flex", className),
362
404
  children: [/* @__PURE__ */ jsxs("button", {
363
405
  type: "button",
364
- disabled: disabled || locked,
406
+ disabled: disabled || locked || saving,
365
407
  title: locked ? lockReason : void 0,
366
- onClick: () => setOpen((v) => !v),
408
+ onClick: () => {
409
+ if (pendingSave.current) return;
410
+ if (open) setComposing(null);
411
+ setOpen((v) => !v);
412
+ },
367
413
  className: cn$1("inline-flex h-8 items-center gap-1.5 rounded-lg border border-[var(--md3-outline-variant)] bg-surface-container px-2.5", "text-xs font-medium text-foreground shadow-sm transition-colors", "hover:border-[var(--md3-outline-variant)] hover:bg-surface-container-high", focusRing, "data-[state=open]:border-[var(--md3-outline-variant)] data-[state=open]:bg-surface-container-high", "disabled:cursor-not-allowed disabled:opacity-60", triggerClassName),
368
414
  "data-state": open ? "open" : "closed",
369
415
  "aria-label": "Agent profile",
@@ -375,7 +421,7 @@ function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate,
375
421
  }),
376
422
  !locked && /* @__PURE__ */ jsx(ChevronDown, { className: "ml-auto h-3.5 w-3.5 shrink-0 text-muted-foreground" })
377
423
  ]
378
- }), open && !locked && /* @__PURE__ */ jsx(AnchoredPopover, {
424
+ }), open && !locked && !disabled && /* @__PURE__ */ jsx(AnchoredPopover, {
379
425
  ref: popoverRef,
380
426
  anchorRef: ref,
381
427
  side,
@@ -384,7 +430,11 @@ function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate,
384
430
  children: composing ? /* @__PURE__ */ jsx(ProfileForm, {
385
431
  capabilities: capabilities ?? [],
386
432
  initial: composing === "new" ? void 0 : composing,
387
- onCancel: () => setComposing(null),
433
+ saving,
434
+ error: saveError,
435
+ onCancel: () => {
436
+ if (!pendingSave.current) setComposing(null);
437
+ },
388
438
  onSave: save
389
439
  }) : /* @__PURE__ */ jsxs("div", {
390
440
  className: "max-h-[min(60vh,420px)] overflow-y-auto",
@@ -394,7 +444,8 @@ function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate,
394
444
  active: profile.id === value,
395
445
  title: profile.name,
396
446
  subtitle: profileSubtitle(profile),
397
- onSelect: () => select(profile.id)
447
+ onSelect: () => select(profile.id),
448
+ onEdit: onEdit ? editIn(profile) : void 0
398
449
  }, profile.id)),
399
450
  custom.length > 0 && /* @__PURE__ */ jsx(SectionHeader, { children: "Your agents" }),
400
451
  custom.map((profile) => /* @__PURE__ */ jsx(ProfileRow, {
@@ -402,12 +453,17 @@ function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate,
402
453
  title: profile.name,
403
454
  subtitle: profileSubtitle(profile),
404
455
  onSelect: () => select(profile.id),
405
- onEdit: onUpdate ? () => setComposing(profile) : void 0,
456
+ onEdit: editIn(profile),
406
457
  onDelete: onDelete ? () => void onDelete(profile.id) : void 0
407
458
  }, profile.id)),
408
459
  canAuthor && /* @__PURE__ */ jsxs("button", {
409
460
  type: "button",
410
- onClick: () => setComposing("new"),
461
+ onClick: () => {
462
+ if (onNew) {
463
+ setOpen(false);
464
+ onNew();
465
+ } else setComposing("new");
466
+ },
411
467
  className: "mt-1 flex w-full items-center gap-2 rounded-md px-2.5 py-2 text-left text-sm text-[var(--accent-text)] transition-colors hover:bg-accent/40",
412
468
  children: [/* @__PURE__ */ jsx(Plus, { className: "h-4 w-4" }), " New agent…"]
413
469
  })
@@ -443,7 +499,7 @@ function ProfileRow({ active, title, subtitle, onSelect, onEdit, onDelete }) {
443
499
  })]
444
500
  })]
445
501
  }), (onEdit || onDelete) && /* @__PURE__ */ jsxs("span", {
446
- className: "flex shrink-0 items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100",
502
+ className: "flex shrink-0 items-center gap-1 opacity-100 transition-opacity [@media(hover:hover)]:opacity-0 group-hover:opacity-100 group-focus-within:opacity-100",
447
503
  children: [onEdit && /* @__PURE__ */ jsx("button", {
448
504
  type: "button",
449
505
  onClick: onEdit,
@@ -460,16 +516,18 @@ function ProfileRow({ active, title, subtitle, onSelect, onEdit, onDelete }) {
460
516
  })]
461
517
  });
462
518
  }
463
- function ProfileForm({ capabilities, initial, onCancel, onSave }) {
519
+ function ProfileForm({ capabilities, initial, saving, error, onCancel, onSave }) {
464
520
  const [name, setName] = React$1.useState(initial?.name ?? "");
465
521
  const [caps, setCaps] = React$1.useState(initial?.capabilities ? [...initial.capabilities] : capabilities.map((c) => c.id));
466
522
  const [instructions, setInstructions] = React$1.useState(initial?.instructions ?? "");
467
523
  const toggle = (id) => setCaps((prev) => prev.includes(id) ? prev.filter((c) => c !== id) : [...prev, id]);
468
524
  return /* @__PURE__ */ jsxs("div", {
469
525
  className: "space-y-3 p-2.5",
526
+ "aria-busy": saving,
470
527
  children: [
471
528
  /* @__PURE__ */ jsx("input", {
472
529
  autoFocus: true,
530
+ disabled: saving,
473
531
  value: name,
474
532
  onChange: (event) => setName(event.target.value),
475
533
  placeholder: "Agent name (e.g. Tax Reviewer)",
@@ -484,6 +542,7 @@ function ProfileForm({ capabilities, initial, onCancel, onSave }) {
484
542
  className: "flex cursor-pointer items-start gap-2 rounded-md px-2 py-1.5 hover:bg-accent/40",
485
543
  children: [/* @__PURE__ */ jsx("input", {
486
544
  type: "checkbox",
545
+ disabled: saving,
487
546
  checked: caps.includes(cap.id),
488
547
  onChange: () => toggle(cap.id),
489
548
  className: "mt-0.5"
@@ -500,30 +559,37 @@ function ProfileForm({ capabilities, initial, onCancel, onSave }) {
500
559
  }, cap.id))
501
560
  })] }),
502
561
  /* @__PURE__ */ jsx("textarea", {
562
+ disabled: saving,
503
563
  value: instructions,
504
564
  onChange: (event) => setInstructions(event.target.value),
505
565
  rows: 2,
506
566
  placeholder: "Instructions (optional) — how this agent should behave",
507
567
  className: `w-full resize-none rounded-lg border bg-surface-container px-3 py-2 text-sm ${focusField}`
508
568
  }),
569
+ error && /* @__PURE__ */ jsx("p", {
570
+ role: "alert",
571
+ className: "text-sm text-destructive",
572
+ children: error
573
+ }),
509
574
  /* @__PURE__ */ jsxs("div", {
510
575
  className: "flex justify-end gap-2",
511
576
  children: [/* @__PURE__ */ jsx("button", {
512
577
  type: "button",
578
+ disabled: saving,
513
579
  onClick: onCancel,
514
580
  className: "rounded-lg px-3 py-1.5 text-sm text-muted-foreground hover:bg-accent/40",
515
581
  children: "Cancel"
516
582
  }), /* @__PURE__ */ jsx("button", {
517
583
  type: "button",
518
- disabled: !name.trim(),
519
- onClick: () => onSave({
584
+ disabled: saving || !name.trim(),
585
+ onClick: () => void onSave({
520
586
  id: initial?.id,
521
587
  name: name.trim(),
522
588
  capabilities: caps,
523
589
  instructions: instructions.trim()
524
590
  }),
525
591
  className: "rounded-lg bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90 disabled:opacity-40",
526
- children: "Save agent"
592
+ children: saving ? "Saving agent…" : "Save agent"
527
593
  })]
528
594
  })
529
595
  ]
package/dist/chat.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as ArtifactDockMessage, B as AgentProfilePickerProps, C as ThinkingIndicatorProps, D as ArtifactAgentDock, E as isViewerMessage, F as snapHarnessToModel, G as ReasoningLevelPicker, H as HARNESS_REASONING_OPTIONS, I as AgentProfileCapability, K as ReasoningLevelPickerProps, L as AgentProfileDraft, M as ArtifactKind, N as ArtifactScope, O as ArtifactAgentDockProps, P as modelProvider, R as AgentProfileOption, S as ThinkingIndicator, T as UserMessageProps, U as ReasoningLevel, V as DEFAULT_REASONING_LEVEL_OPTIONS, W as ReasoningLevelOption, _ as MessageAuthorProps, a as AgentTimelineMessageItem, b as MessageRole, c as AgentTimelineTone, d as ChatAuthor, f as ChatContainer, g as MessageAuthor, h as ChatMessageProps, i as AgentTimelineItem, j as ArtifactDockStreamEvent, k as ArtifactAgentDockTransport, l as AgentTimelineToolGroupItem, m as ChatMessage, n as AgentTimelineArtifactItem, o as AgentTimelineProps, p as ChatContainerProps, r as AgentTimelineCustomItem, s as AgentTimelineStatusItem, t as AgentTimeline, u as AgentTimelineToolItem, v as MessageList, w as UserMessage, x as TRANSCRIPT_TEXT, y as MessageListProps, z as AgentProfilePicker } from "./index-04xUKbln.js";
1
+ import { A as ArtifactDockMessage, B as AgentProfilePickerProps, C as ThinkingIndicatorProps, D as ArtifactAgentDock, E as isViewerMessage, F as snapHarnessToModel, G as ReasoningLevelPicker, H as HARNESS_REASONING_OPTIONS, I as AgentProfileCapability, K as ReasoningLevelPickerProps, L as AgentProfileDraft, M as ArtifactKind, N as ArtifactScope, O as ArtifactAgentDockProps, P as modelProvider, R as AgentProfileOption, S as ThinkingIndicator, T as UserMessageProps, U as ReasoningLevel, V as DEFAULT_REASONING_LEVEL_OPTIONS, W as ReasoningLevelOption, _ as MessageAuthorProps, a as AgentTimelineMessageItem, b as MessageRole, c as AgentTimelineTone, d as ChatAuthor, f as ChatContainer, g as MessageAuthor, h as ChatMessageProps, i as AgentTimelineItem, j as ArtifactDockStreamEvent, k as ArtifactAgentDockTransport, l as AgentTimelineToolGroupItem, m as ChatMessage, n as AgentTimelineArtifactItem, o as AgentTimelineProps, p as ChatContainerProps, r as AgentTimelineCustomItem, s as AgentTimelineStatusItem, t as AgentTimeline, u as AgentTimelineToolItem, v as MessageList, w as UserMessage, x as TRANSCRIPT_TEXT, y as MessageListProps, z as AgentProfilePicker } from "./index-QBCEflyf.js";
2
2
  export { type AgentProfileCapability, type AgentProfileDraft, type AgentProfileOption, AgentProfilePicker, type AgentProfilePickerProps, AgentTimeline, type AgentTimelineArtifactItem, type AgentTimelineCustomItem, type AgentTimelineItem, type AgentTimelineMessageItem, type AgentTimelineProps, type AgentTimelineStatusItem, type AgentTimelineTone, type AgentTimelineToolGroupItem, type AgentTimelineToolItem, ArtifactAgentDock, type ArtifactAgentDockProps, type ArtifactAgentDockTransport, type ArtifactDockMessage, type ArtifactDockStreamEvent, type ArtifactKind, type ArtifactScope, type ChatAuthor, ChatContainer, type ChatContainerProps, ChatMessage, type ChatMessageProps, DEFAULT_REASONING_LEVEL_OPTIONS, HARNESS_REASONING_OPTIONS, MessageAuthor, type MessageAuthorProps, MessageList, type MessageListProps, type MessageRole, type ReasoningLevel, type ReasoningLevelOption, ReasoningLevelPicker, type ReasoningLevelPickerProps, TRANSCRIPT_TEXT, ThinkingIndicator, type ThinkingIndicatorProps, UserMessage, type UserMessageProps, isViewerMessage, modelProvider, snapHarnessToModel };
package/dist/chat.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as MessageList, c as UserMessage, d as modelProvider, f as snapHarnessToModel, g as ReasoningLevelPicker, h as HARNESS_REASONING_OPTIONS, i as MessageAuthor, l as isViewerMessage, m as DEFAULT_REASONING_LEVEL_OPTIONS, n as ChatContainer, o as TRANSCRIPT_TEXT, p as AgentProfilePicker, r as ChatMessage, s as ThinkingIndicator, t as AgentTimeline, u as ArtifactAgentDock } from "./chat-DRkKyE8E.js";
1
+ import { a as MessageList, c as UserMessage, d as modelProvider, f as snapHarnessToModel, g as ReasoningLevelPicker, h as HARNESS_REASONING_OPTIONS, i as MessageAuthor, l as isViewerMessage, m as DEFAULT_REASONING_LEVEL_OPTIONS, n as ChatContainer, o as TRANSCRIPT_TEXT, p as AgentProfilePicker, r as ChatMessage, s as ThinkingIndicator, t as AgentTimeline, u as ArtifactAgentDock } from "./chat-_aHUfqtH.js";
2
2
  export { AgentProfilePicker, AgentTimeline, ArtifactAgentDock, ChatContainer, ChatMessage, DEFAULT_REASONING_LEVEL_OPTIONS, HARNESS_REASONING_OPTIONS, MessageAuthor, MessageList, ReasoningLevelPicker, TRANSCRIPT_TEXT, ThinkingIndicator, UserMessage, isViewerMessage, modelProvider, snapHarnessToModel };
@@ -155,10 +155,21 @@ function useSidebar() {
155
155
  * the whole nav would re-stagger on a collapse that moved nothing off screen.
156
156
  * One element type, both states.
157
157
  */
158
- function RailTooltip({ label, children, disabled, className }) {
158
+ function RailTooltip({ label, description, children, disabled, className }) {
159
159
  const ref = React$1.useRef(null);
160
+ const tooltipRef = React$1.useRef(null);
160
161
  const timer = React$1.useRef(null);
161
162
  const [coords, setCoords] = React$1.useState(null);
163
+ React$1.useLayoutEffect(() => {
164
+ if (!description || !coords || !tooltipRef.current) return;
165
+ const { offsetWidth: width, offsetHeight: height } = tooltipRef.current;
166
+ const left = Math.max(8, Math.min(coords.left, window.innerWidth - width - 8));
167
+ const top = Math.max(height / 2 + 8, Math.min(coords.top, window.innerHeight - height / 2 - 8));
168
+ if (left !== coords.left || top !== coords.top) setCoords({
169
+ left,
170
+ top
171
+ });
172
+ }, [coords, description]);
162
173
  React$1.useEffect(() => () => {
163
174
  if (timer.current) clearTimeout(timer.current);
164
175
  }, []);
@@ -202,11 +213,18 @@ function RailTooltip({ label, children, disabled, className }) {
202
213
  transform: "translateY(-50%)"
203
214
  },
204
215
  className: "pointer-events-none z-[70]",
205
- children: /* @__PURE__ */ jsx("span", {
216
+ children: /* @__PURE__ */ jsxs("span", {
217
+ ref: tooltipRef,
206
218
  role: "tooltip",
207
219
  "aria-hidden": "true",
208
- className: cn$1("agent-pop-in block whitespace-nowrap px-2 py-1 text-xs font-medium text-popover-foreground", "rounded-md border border-[var(--md3-outline-variant)] bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]"),
209
- children: label
220
+ className: cn$1("agent-pop-in block px-2 py-1 text-xs font-medium text-popover-foreground", description ? "w-max max-w-[min(16rem,calc(100vw-1rem))]" : "whitespace-nowrap", "rounded-md border border-[var(--md3-outline-variant)] bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]"),
221
+ children: [/* @__PURE__ */ jsx("span", {
222
+ className: description ? "block break-words" : "block whitespace-nowrap",
223
+ children: label
224
+ }), description ? /* @__PURE__ */ jsx("span", {
225
+ className: "mt-0.5 block font-normal leading-snug text-muted-foreground",
226
+ children: description
227
+ }) : null]
210
228
  })
211
229
  }), document.body)]
212
230
  });
@@ -430,12 +448,14 @@ function RailSeparator({ className }) {
430
448
  return /* @__PURE__ */ jsx("div", { className: cn$1("my-2 h-px w-10 bg-[var(--md3-outline-variant)]", className) });
431
449
  }
432
450
  const defaultBadgeLabel = (count) => `${count} new`;
433
- function RailButton({ icon: Icon, label, isActive, badge, badgeLabel = defaultBadgeLabel, onClick, className, showLabel, asChild, children, variant = "normal", style }) {
451
+ function RailButton({ icon: Icon, label, isActive, badge, badgeLabel = defaultBadgeLabel, onClick, className, showLabel, description, asChild, children, variant = "normal", style }) {
434
452
  const classes = cn$1("relative flex shrink-0 items-center justify-center rounded-md transition-colors", MOTION_CONTROL, showLabel ? "w-full justify-start px-2.5 h-9 gap-2.5" : "w-9 h-9 justify-center", focusRing, variant === "primary" || isActive ? "bg-[var(--accent-surface-strong)] text-[var(--accent-text)] font-medium ring-1 ring-inset ring-[var(--border-accent)]" : "text-muted-foreground hover:bg-[var(--accent-surface-soft)] hover:text-foreground", className);
435
453
  const hasBadge = badge !== void 0 && badge > 0;
436
454
  const badgeDot = hasBadge && !showLabel && badge > 9;
437
455
  const badgeDescription = hasBadge ? badgeLabel(badge) : void 0;
438
456
  const tooltipLabel = hasBadge ? `${label} · ${badgeDescription}` : label;
457
+ const accessibleDescription = [badgeDescription, description].filter(Boolean).join(". ") || void 0;
458
+ const tooltipDisabled = showLabel && !description;
439
459
  const content = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("span", {
440
460
  className: "relative flex shrink-0 items-center justify-center",
441
461
  children: [/* @__PURE__ */ jsx(Icon, { className: "h-[17px] w-[17px] shrink-0" }), badgeDot ? /* @__PURE__ */ jsx("span", {
@@ -457,7 +477,7 @@ function RailButton({ icon: Icon, label, isActive, badge, badgeLabel = defaultBa
457
477
  const merged = React$1.cloneElement(child, {
458
478
  className: cn$1(classes, child.props.className),
459
479
  "aria-label": child.props["aria-label"] ?? label,
460
- "aria-description": child.props["aria-description"] ?? badgeDescription,
480
+ "aria-description": child.props["aria-description"] ?? accessibleDescription,
461
481
  "aria-current": child.props["aria-current"] ?? (isActive ? "page" : void 0),
462
482
  style: {
463
483
  ...child.props.style,
@@ -466,20 +486,22 @@ function RailButton({ icon: Icon, label, isActive, badge, badgeLabel = defaultBa
466
486
  }, content);
467
487
  return /* @__PURE__ */ jsx(RailTooltip, {
468
488
  label: tooltipLabel,
469
- disabled: showLabel,
489
+ description,
490
+ disabled: tooltipDisabled,
470
491
  className: showLabel ? "w-full" : void 0,
471
492
  children: merged
472
493
  });
473
494
  }
474
495
  return /* @__PURE__ */ jsx(RailTooltip, {
475
496
  label: tooltipLabel,
476
- disabled: showLabel,
497
+ description,
498
+ disabled: tooltipDisabled,
477
499
  className: showLabel ? "w-full" : void 0,
478
500
  children: /* @__PURE__ */ jsx("button", {
479
501
  type: "button",
480
502
  onClick,
481
503
  "aria-label": label,
482
- "aria-description": badgeDescription,
504
+ "aria-description": accessibleDescription,
483
505
  className: classes,
484
506
  style,
485
507
  children: content
@@ -493,7 +515,7 @@ function RailButton({ icon: Icon, label, isActive, badge, badgeLabel = defaultBa
493
515
  * item inside it. Use for a single "door" (e.g. Studio) that fronts several
494
516
  * related destinations without permanently spending rail height on them.
495
517
  */
496
- function RailFlyout({ icon: Icon, label, isActive, showLabel, title, children, className, style }) {
518
+ function RailFlyout({ icon: Icon, label, description, isActive, showLabel, title, children, className, style }) {
497
519
  const [open, setOpen] = React$1.useState(false);
498
520
  const ref = React$1.useRef(null);
499
521
  React$1.useEffect(() => {
@@ -518,11 +540,13 @@ function RailFlyout({ icon: Icon, label, isActive, showLabel, title, children, c
518
540
  style,
519
541
  children: [/* @__PURE__ */ jsx(RailTooltip, {
520
542
  label,
521
- disabled: showLabel || open,
543
+ description,
544
+ disabled: open || showLabel && !description,
522
545
  className: showLabel ? "w-full" : void 0,
523
546
  children: /* @__PURE__ */ jsxs("button", {
524
547
  type: "button",
525
548
  "aria-label": label,
549
+ "aria-description": description,
526
550
  "aria-haspopup": "menu",
527
551
  "aria-expanded": open,
528
552
  onClick: () => setOpen((v) => !v),
@@ -542,10 +566,17 @@ function RailFlyout({ icon: Icon, label, isActive, showLabel, title, children, c
542
566
  if (e.target.closest("a,button")) setOpen(false);
543
567
  },
544
568
  className: cn$1("absolute left-full top-0 z-50 ml-2 min-w-[12rem] p-1.5", "agent-pop-in", "rounded-md border border-[var(--md3-outline-variant)] bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]"),
545
- children: [/* @__PURE__ */ jsx("p", {
546
- className: "px-2 pb-1 pt-1 text-sm font-semibold uppercase tracking-wider text-muted-foreground/70 select-none",
547
- children: title ?? label
548
- }), children]
569
+ children: [
570
+ /* @__PURE__ */ jsx("p", {
571
+ className: "px-2 pb-1 pt-1 text-sm font-semibold uppercase tracking-wider text-muted-foreground/70 select-none",
572
+ children: title ?? label
573
+ }),
574
+ description && /* @__PURE__ */ jsx("p", {
575
+ className: "px-2 pb-2 text-xs text-muted-foreground",
576
+ children: description
577
+ }),
578
+ children
579
+ ]
549
580
  })]
550
581
  });
551
582
  }
@@ -609,7 +640,7 @@ function SubItemsSkeleton() {
609
640
  * Sub-items can be fixed (`subItems`) or lazy (`loadSubItems`, with a loading
610
641
  * skeleton). Used for e.g. a "History" entry fronting recent sessions.
611
642
  */
612
- function RailExpandable({ icon: Icon, label, href, isActive, showLabel, subItems, loadSubItems, activeSubIds, emptyLabel = "Nothing here yet", defaultOpen, onNavigate, LinkComponent, className, style }) {
643
+ function RailExpandable({ icon: Icon, label, description, href, isActive, showLabel, subItems, loadSubItems, activeSubIds, emptyLabel = "Nothing here yet", defaultOpen, onNavigate, LinkComponent, className, style }) {
613
644
  const Link = LinkComponent ?? DefaultLink$2;
614
645
  const [open, setOpen] = React$1.useState(defaultOpen ?? false);
615
646
  const { items, loading, ensureLoaded } = useExpandableItems(subItems, loadSubItems);
@@ -738,12 +769,14 @@ function RailExpandable({ icon: Icon, label, href, isActive, showLabel, subItems
738
769
  to: href,
739
770
  onClick: onNavigate,
740
771
  "aria-label": label,
772
+ "aria-description": description,
741
773
  "aria-current": rowCurrent,
742
774
  className: triggerClasses,
743
775
  children: /* @__PURE__ */ jsx(Icon, { className: "h-[17px] w-[17px] shrink-0" })
744
776
  }) : /* @__PURE__ */ jsx("button", {
745
777
  type: "button",
746
778
  "aria-label": label,
779
+ "aria-description": description,
747
780
  "aria-haspopup": "menu",
748
781
  "aria-expanded": open,
749
782
  className: triggerClasses,
@@ -763,13 +796,20 @@ function RailExpandable({ icon: Icon, label, href, isActive, showLabel, subItems
763
796
  if (e.target.closest("a")) setOpen(false);
764
797
  },
765
798
  className: cn$1("agent-pop-in z-[70] flex w-60 flex-col overflow-hidden p-1.5", "rounded-md border border-[var(--md3-outline-variant)] bg-surface-container-highest shadow-[0_8px_30px_rgba(0,0,0,0.45)] ring-1 ring-[#ffffff14]"),
766
- children: [/* @__PURE__ */ jsx("p", {
767
- className: "shrink-0 px-2 pb-1 pt-1 text-sm font-semibold uppercase tracking-wider text-muted-foreground/70 select-none",
768
- children: label
769
- }), /* @__PURE__ */ jsx("div", {
770
- className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto",
771
- children: list
772
- })]
799
+ children: [
800
+ /* @__PURE__ */ jsx("p", {
801
+ className: "shrink-0 px-2 pb-1 pt-1 text-sm font-semibold uppercase tracking-wider text-muted-foreground/70 select-none",
802
+ children: label
803
+ }),
804
+ description && /* @__PURE__ */ jsx("p", {
805
+ className: "shrink-0 px-2 pb-2 text-xs text-muted-foreground",
806
+ children: description
807
+ }),
808
+ /* @__PURE__ */ jsx("div", {
809
+ className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto",
810
+ children: list
811
+ })
812
+ ]
773
813
  }), document.body)]
774
814
  });
775
815
  }
@@ -786,41 +826,50 @@ function RailExpandable({ icon: Icon, label, href, isActive, showLabel, subItems
786
826
  return /* @__PURE__ */ jsxs("div", {
787
827
  className: cn$1("w-full", className),
788
828
  style,
789
- children: [/* @__PURE__ */ jsxs("div", {
790
- className: cn$1("group/exp relative flex h-9 w-full items-center rounded-md transition-colors", MOTION_CONTROL, isActive ? "bg-[var(--accent-surface-strong)] text-[var(--accent-text)] font-medium ring-1 ring-inset ring-[var(--border-accent)]" : "text-muted-foreground hover:bg-[var(--accent-surface-soft)] hover:text-foreground"),
791
- children: [/* @__PURE__ */ jsxs("button", {
792
- type: "button",
793
- onClick: toggle,
794
- "aria-expanded": open,
795
- "aria-controls": discloseId,
796
- "aria-label": open ? `Collapse ${label}` : `Expand ${label}`,
797
- className: `flex h-9 w-12 shrink-0 items-center gap-1 rounded-md pl-2 pr-1 ${focusRing}`,
798
- children: [/* @__PURE__ */ jsx(Icon, {
799
- className: "h-[17px] w-[17px] shrink-0",
800
- "aria-hidden": true
801
- }), /* @__PURE__ */ jsx(ChevronRightIcon, {
802
- className: cn$1("h-3.5 w-3.5 shrink-0 transition-transform", MOTION_CONTROL, open && "rotate-90"),
803
- "aria-hidden": true
829
+ children: [/* @__PURE__ */ jsx(RailTooltip, {
830
+ label,
831
+ description,
832
+ disabled: !description,
833
+ className: "w-full",
834
+ children: /* @__PURE__ */ jsxs("div", {
835
+ className: cn$1("group/exp relative flex h-9 w-full items-center rounded-md transition-colors", MOTION_CONTROL, isActive ? "bg-[var(--accent-surface-strong)] text-[var(--accent-text)] font-medium ring-1 ring-inset ring-[var(--border-accent)]" : "text-muted-foreground hover:bg-[var(--accent-surface-soft)] hover:text-foreground"),
836
+ children: [/* @__PURE__ */ jsxs("button", {
837
+ type: "button",
838
+ onClick: toggle,
839
+ "aria-expanded": open,
840
+ "aria-controls": discloseId,
841
+ "aria-label": open ? `Collapse ${label}` : `Expand ${label}`,
842
+ "aria-description": description,
843
+ className: `flex h-9 w-12 shrink-0 items-center gap-1 rounded-md pl-2 pr-1 ${focusRing}`,
844
+ children: [/* @__PURE__ */ jsx(Icon, {
845
+ className: "h-[17px] w-[17px] shrink-0",
846
+ "aria-hidden": true
847
+ }), /* @__PURE__ */ jsx(ChevronRightIcon, {
848
+ className: cn$1("h-3.5 w-3.5 shrink-0 transition-transform", MOTION_CONTROL, open && "rotate-90"),
849
+ "aria-hidden": true
850
+ })]
851
+ }), href ? /* @__PURE__ */ jsx(Link, {
852
+ href,
853
+ to: href,
854
+ onClick: onNavigate,
855
+ "aria-current": rowCurrent,
856
+ "aria-description": description,
857
+ className: "flex h-9 min-w-0 flex-1 items-center pr-2.5 text-sm font-medium",
858
+ children: /* @__PURE__ */ jsx("span", {
859
+ className: "truncate",
860
+ children: label
861
+ })
862
+ }) : /* @__PURE__ */ jsx("button", {
863
+ type: "button",
864
+ onClick: toggle,
865
+ "aria-description": description,
866
+ className: "flex h-9 min-w-0 flex-1 items-center pr-2.5 text-left text-sm font-medium",
867
+ children: /* @__PURE__ */ jsx("span", {
868
+ className: "truncate",
869
+ children: label
870
+ })
804
871
  })]
805
- }), href ? /* @__PURE__ */ jsx(Link, {
806
- href,
807
- to: href,
808
- onClick: onNavigate,
809
- "aria-current": rowCurrent,
810
- className: "flex h-9 min-w-0 flex-1 items-center pr-2.5 text-sm font-medium",
811
- children: /* @__PURE__ */ jsx("span", {
812
- className: "truncate",
813
- children: label
814
- })
815
- }) : /* @__PURE__ */ jsx("button", {
816
- type: "button",
817
- onClick: toggle,
818
- className: "flex h-9 min-w-0 flex-1 items-center pr-2.5 text-left text-sm font-medium",
819
- children: /* @__PURE__ */ jsx("span", {
820
- className: "truncate",
821
- children: label
822
- })
823
- })]
872
+ })
824
873
  }), /* @__PURE__ */ jsx("div", {
825
874
  ref: discloseRef,
826
875
  id: discloseId,
@@ -2877,6 +2926,7 @@ function SidebarLayoutInner({ children, navItems, activeId, panel, logo, logoHre
2877
2926
  if (item.expandable) return /* @__PURE__ */ jsx(RailExpandable, {
2878
2927
  icon: item.icon,
2879
2928
  label: item.label,
2929
+ description: item.description,
2880
2930
  href: item.href,
2881
2931
  isActive: activeId === item.id,
2882
2932
  showLabel: showLabels,
@@ -2894,6 +2944,7 @@ function SidebarLayoutInner({ children, navItems, activeId, panel, logo, logoHre
2894
2944
  return /* @__PURE__ */ jsx(RailFlyout, {
2895
2945
  icon: item.icon,
2896
2946
  label: item.label,
2947
+ description: item.description,
2897
2948
  title: item.label,
2898
2949
  showLabel: showLabels,
2899
2950
  isActive: activeId === item.id || item.flyoutItems.some((f) => activeSet.has(f.id)),
@@ -2921,6 +2972,7 @@ function SidebarLayoutInner({ children, navItems, activeId, panel, logo, logoHre
2921
2972
  label: item.label,
2922
2973
  badge: item.badge,
2923
2974
  badgeLabel: item.badgeLabel,
2975
+ description: item.description,
2924
2976
  isActive: panelOpen,
2925
2977
  onClick: () => {
2926
2978
  togglePanel();
@@ -2933,6 +2985,7 @@ function SidebarLayoutInner({ children, navItems, activeId, panel, logo, logoHre
2933
2985
  label: item.label,
2934
2986
  badge: item.badge,
2935
2987
  badgeLabel: item.badgeLabel,
2988
+ description: item.description,
2936
2989
  isActive: activeId === item.id,
2937
2990
  showLabel: showLabels,
2938
2991
  variant: item.variant,
@@ -1,4 +1,4 @@
1
- import { $ as SandboxTable, $t as Sidebar, A as MetricChartPoint, At as SIDEBAR_TOTAL_WIDTH, B as ProductVariant, Bt as RailButton, C as UsageSummary, Ct as OutOfCreditsModal, D as SystemLogsViewerProps, Dt as SIDEBAR_PANEL_WIDTH, E as SystemLogsViewer, Et as SIDEBAR_MOBILE_WIDTH, F as SidebarLayoutProps, Ft as RailTooltipProps, G as HARNESS_OPTIONS, Gt as RailFlyout, H as HarnessBrand, Ht as RailExpandable, I as DashboardLayout, It as McpServer, J as HarnessType, Jt as RailHeaderProps, K as HarnessPicker, Kt as RailFlyoutProps, L as DashboardLayoutProps, Lt as AppearanceController, M as SidebarLayout, Mt as SidebarProviderProps, N as SidebarLayoutFlyoutItem, Nt as useSidebar, O as MetricAreaChart, Ot as SIDEBAR_RAIL_LABELED_WIDTH, P as SidebarLayoutNavItem, Pt as RailTooltip, Q as BackendSelectorProps, Qt as RailSeparatorProps, R as DashboardUser, Rt as ProfileAvatar, S as GitStatusData, St as InsufficientBalance, T as UsageSummaryProps, Tt as parseInsufficientBalance, U as HarnessLogo, Ut as RailExpandableProps, V as HARNESS_BRAND, Vt as RailButtonProps, W as HarnessLogoProps, Wt as RailExpandableSubItem, X as Backend, Xt as RailModeButtonProps, Y as chatCapableHarnesses, Yt as RailModeButton, Z as BackendSelector, Zt as RailSeparator, _ as PortsList, _t as ResourceSnapshotItem, a as PromoBanner, an as SidebarPanelHeader, at as NewSandboxCard, b as GitPanel, bt as ResourceMeterProps, c as SnapshotList, cn as SidebarProps, ct as SandboxCardData, d as ProcessList, dn as SidebarRailFooterProps, dt as TeamRole, en as SidebarContent, et as SandboxTableProps, f as ProcessListProps, fn as SidebarRailNav, ft as canAdminSandbox, g as ExposedPort, gn as ThemeMode, gt as ResourceSnapshot, h as TemplateCardProps, hn as SidebarUser, ht as ActivityItem, i as SandboxPageShellProps, in as SidebarPanelContentProps, it as sandboxStatus, j as MetricChartTone, jt as SidebarProvider, k as MetricAreaChartProps, kt as SIDEBAR_RAIL_WIDTH, l as SnapshotListProps, ln as SidebarRail, lt as SandboxCardProps, m as TemplateCardData, mn as SidebarRailProps, mt as ActivityFeedProps, n as DashboardPageHeaderProps, nn as SidebarPanel, nt as SandboxStatusPill, o as PromoBannerProps, on as SidebarPanelHeaderProps, ot as NewSandboxCardProps, p as TemplateCard, pn as SidebarRailNavProps, pt as ActivityFeed, q as HarnessPickerProps, qt as RailHeader, r as SandboxPageShell, rn as SidebarPanelContent, rt as SandboxStatusPillProps, s as SnapshotInfo, sn as SidebarPanelProps, st as SandboxCard, t as DashboardPageHeader, tn as SidebarContentProps, tt as SANDBOX_STATUS, u as ProcessInfo, un as SidebarRailFooter, ut as SandboxStatus, v as PortsListProps, vt as ResourceSnapshotProps, w as UsageSummaryData, wt as OutOfCreditsModalProps, x as GitPanelProps, xt as INSUFFICIENT_BALANCE_CODE, y as GitCommitData, yt as ResourceMeter, z as NavItem, zt as ProfileAvatarProps } from "./index-DQzli0pf.js";
1
+ import { $ as SandboxTable, $t as Sidebar, A as MetricChartPoint, At as SIDEBAR_TOTAL_WIDTH, B as ProductVariant, Bt as RailButton, C as UsageSummary, Ct as OutOfCreditsModal, D as SystemLogsViewerProps, Dt as SIDEBAR_PANEL_WIDTH, E as SystemLogsViewer, Et as SIDEBAR_MOBILE_WIDTH, F as SidebarLayoutProps, Ft as RailTooltipProps, G as HARNESS_OPTIONS, Gt as RailFlyout, H as HarnessBrand, Ht as RailExpandable, I as DashboardLayout, It as McpServer, J as HarnessType, Jt as RailHeaderProps, K as HarnessPicker, Kt as RailFlyoutProps, L as DashboardLayoutProps, Lt as AppearanceController, M as SidebarLayout, Mt as SidebarProviderProps, N as SidebarLayoutFlyoutItem, Nt as useSidebar, O as MetricAreaChart, Ot as SIDEBAR_RAIL_LABELED_WIDTH, P as SidebarLayoutNavItem, Pt as RailTooltip, Q as BackendSelectorProps, Qt as RailSeparatorProps, R as DashboardUser, Rt as ProfileAvatar, S as GitStatusData, St as InsufficientBalance, T as UsageSummaryProps, Tt as parseInsufficientBalance, U as HarnessLogo, Ut as RailExpandableProps, V as HARNESS_BRAND, Vt as RailButtonProps, W as HarnessLogoProps, Wt as RailExpandableSubItem, X as Backend, Xt as RailModeButtonProps, Y as chatCapableHarnesses, Yt as RailModeButton, Z as BackendSelector, Zt as RailSeparator, _ as PortsList, _t as ResourceSnapshotItem, a as PromoBanner, an as SidebarPanelHeader, at as NewSandboxCard, b as GitPanel, bt as ResourceMeterProps, c as SnapshotList, cn as SidebarProps, ct as SandboxCardData, d as ProcessList, dn as SidebarRailFooterProps, dt as TeamRole, en as SidebarContent, et as SandboxTableProps, f as ProcessListProps, fn as SidebarRailNav, ft as canAdminSandbox, g as ExposedPort, gn as ThemeMode, gt as ResourceSnapshot, h as TemplateCardProps, hn as SidebarUser, ht as ActivityItem, i as SandboxPageShellProps, in as SidebarPanelContentProps, it as sandboxStatus, j as MetricChartTone, jt as SidebarProvider, k as MetricAreaChartProps, kt as SIDEBAR_RAIL_WIDTH, l as SnapshotListProps, ln as SidebarRail, lt as SandboxCardProps, m as TemplateCardData, mn as SidebarRailProps, mt as ActivityFeedProps, n as DashboardPageHeaderProps, nn as SidebarPanel, nt as SandboxStatusPill, o as PromoBannerProps, on as SidebarPanelHeaderProps, ot as NewSandboxCardProps, p as TemplateCard, pn as SidebarRailNavProps, pt as ActivityFeed, q as HarnessPickerProps, qt as RailHeader, r as SandboxPageShell, rn as SidebarPanelContent, rt as SandboxStatusPillProps, s as SnapshotInfo, sn as SidebarPanelProps, st as SandboxCard, t as DashboardPageHeader, tn as SidebarContentProps, tt as SANDBOX_STATUS, u as ProcessInfo, un as SidebarRailFooter, ut as SandboxStatus, v as PortsListProps, vt as ResourceSnapshotProps, w as UsageSummaryData, wt as OutOfCreditsModalProps, x as GitPanelProps, xt as INSUFFICIENT_BALANCE_CODE, y as GitCommitData, yt as ResourceMeter, z as NavItem, zt as ProfileAvatarProps } from "./index-AVDzT8Jw.js";
2
2
  import { a as canonicalModelId, i as ProviderMark, n as ModelBrandStack, o as modelBrandFor, r as ModelInfo, t as ModelBrandIdentity } from "./model-brand-B57CV8Lg.js";
3
3
  import { a as PricingPageProps, c as BillingBalance, d as BillingSubscription, f as BillingUsage, i as PricingPage, l as BillingDashboard, n as UsageChartProps, o as PricingTier, r as UsageDataPoint, s as formatPrice, t as UsageChart, u as BillingDashboardProps } from "./usage-chart-BjM8ShvX.js";
4
4
  export { ActivityFeed, type ActivityFeedProps, type ActivityItem, type AppearanceController, type Backend, BackendSelector, type BackendSelectorProps, type BillingBalance, BillingDashboard, type BillingDashboardProps, type BillingSubscription, type BillingUsage, DashboardLayout, type DashboardLayoutProps, DashboardPageHeader, type DashboardPageHeaderProps, type SnapshotInfo as DashboardSnapshotInfo, type DashboardUser, type ExposedPort, type GitCommitData, GitPanel, type GitPanelProps, type GitStatusData, HARNESS_BRAND, HARNESS_OPTIONS, type HarnessBrand, HarnessLogo, type HarnessLogoProps, HarnessPicker, type HarnessPickerProps, type HarnessType, INSUFFICIENT_BALANCE_CODE, type InsufficientBalance, type McpServer, MetricAreaChart, type MetricAreaChartProps, type MetricChartPoint, type MetricChartTone, type ModelBrandIdentity, ModelBrandStack, type ModelInfo, type NavItem, NewSandboxCard, type NewSandboxCardProps, OutOfCreditsModal, type OutOfCreditsModalProps, PortsList, type PortsListProps, PricingPage, type PricingPageProps, type PricingTier, type ProcessInfo, ProcessList, type ProcessListProps, type ProductVariant, ProfileAvatar, type ProfileAvatarProps, PromoBanner, type PromoBannerProps, ProviderMark, RailButton, type RailButtonProps, RailExpandable, type RailExpandableProps, type RailExpandableSubItem, RailFlyout, type RailFlyoutProps, RailHeader, type RailHeaderProps, RailModeButton, type RailModeButtonProps, RailSeparator, type RailSeparatorProps, RailTooltip, type RailTooltipProps, ResourceMeter, type ResourceMeterProps, ResourceSnapshot, type ResourceSnapshotItem, type ResourceSnapshotProps, SANDBOX_STATUS, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, type SandboxCardData, type SandboxCardProps, SandboxPageShell, type SandboxPageShellProps, type SandboxStatus, SandboxStatusPill, type SandboxStatusPillProps, SandboxTable, type SandboxTableProps, Sidebar, SidebarContent, type SidebarContentProps, SidebarLayout, type SidebarLayoutFlyoutItem, type SidebarLayoutNavItem, type SidebarLayoutProps, SidebarPanel, SidebarPanelContent, type SidebarPanelContentProps, SidebarPanelHeader, type SidebarPanelHeaderProps, type SidebarPanelProps, type SidebarProps, SidebarProvider, type SidebarProviderProps, SidebarRail, SidebarRailFooter, type SidebarRailFooterProps, SidebarRailNav, type SidebarRailNavProps, type SidebarRailProps, type SidebarUser, SnapshotList, type SnapshotListProps, SystemLogsViewer, type SystemLogsViewerProps, type TeamRole, TemplateCard, type TemplateCardData, type TemplateCardProps, type ThemeMode, UsageChart, type UsageChartProps, type UsageDataPoint, UsageSummary, type UsageSummaryData, type UsageSummaryProps, canAdminSandbox, canonicalModelId, chatCapableHarnesses, formatPrice, modelBrandFor, parseInsufficientBalance, sandboxStatus, useSidebar };
package/dist/dashboard.js CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-A-7sV4Na.js";
1
+ import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-Ba7DlJHW.js";
2
2
  import { i as modelBrandFor, n as ProviderMark, r as canonicalModelId, t as ModelBrandStack } from "./model-brand-BSr9on8C.js";
3
3
  import { a as formatPrice, i as PricingPage, n as SandboxPageShell, o as BillingDashboard, r as UsageChart, t as DashboardPageHeader } from "./page-layout-2IRtfx51.js";
4
4
  export { ActivityFeed, BackendSelector, BillingDashboard, DashboardLayout, DashboardPageHeader, GitPanel, HARNESS_BRAND, HARNESS_OPTIONS, HarnessLogo, HarnessPicker, INSUFFICIENT_BALANCE_CODE, MetricAreaChart, ModelBrandStack, NewSandboxCard, OutOfCreditsModal, PortsList, PricingPage, ProcessList, ProfileAvatar, PromoBanner, ProviderMark, RailButton, RailExpandable, RailFlyout, RailHeader, RailModeButton, RailSeparator, RailTooltip, ResourceMeter, ResourceSnapshot, SANDBOX_STATUS, SIDEBAR_MOBILE_WIDTH, SIDEBAR_PANEL_WIDTH, SIDEBAR_RAIL_LABELED_WIDTH, SIDEBAR_RAIL_WIDTH, SIDEBAR_TOTAL_WIDTH, SandboxCard, SandboxPageShell, SandboxStatusPill, SandboxTable, Sidebar, SidebarContent, SidebarLayout, SidebarPanel, SidebarPanelContent, SidebarPanelHeader, SidebarProvider, SidebarRail, SidebarRailFooter, SidebarRailNav, SnapshotList, SystemLogsViewer, TemplateCard, UsageChart, UsageSummary, canAdminSandbox, canonicalModelId, chatCapableHarnesses, formatPrice, modelBrandFor, parseInsufficientBalance, sandboxStatus, useSidebar };
package/dist/globals.css CHANGED
@@ -1548,6 +1548,9 @@
1548
1548
  .max-w-\[calc\(100vw-24px\)\] {
1549
1549
  max-width: calc(100vw - 24px);
1550
1550
  }
1551
+ .max-w-\[min\(16rem\,calc\(100vw-1rem\)\)\] {
1552
+ max-width: min(16rem, calc(100vw - 1rem));
1553
+ }
1551
1554
  .max-w-\[min\(640px\,calc\(100vw-2rem\)\)\] {
1552
1555
  max-width: min(640px, calc(100vw - 2rem));
1553
1556
  }
@@ -6102,6 +6105,11 @@
6102
6105
  .tangle-prose .\[\.tangle-prose_\&\]\:no-underline\! {
6103
6106
  text-decoration-line: none !important;
6104
6107
  }
6108
+ @media (hover:hover) {
6109
+ .\[\@media\(hover\:hover\)\]\:opacity-0 {
6110
+ opacity: 0%;
6111
+ }
6112
+ }
6105
6113
  @media (pointer:coarse) {
6106
6114
  .\[\@media\(pointer\:coarse\)\]\:min-h-10 {
6107
6115
  min-height: calc(var(--spacing) * 10);
@@ -106,6 +106,13 @@ interface RailButtonProps {
106
106
  className?: string;
107
107
  /** Show label text next to icon (for mobile drawer) */
108
108
  showLabel?: boolean;
109
+ /**
110
+ * One line saying what the destination is for, e.g. "Every past agent run".
111
+ * Shown in the hover tooltip under the label (the labeled rail shows the
112
+ * tooltip only when a description exists) and announced as the link's
113
+ * accessible description, so an unfamiliar nav item explains itself.
114
+ */
115
+ description?: string;
109
116
  /**
110
117
  * Render the rail-button styling onto a single child element (e.g. a router
111
118
  * `<Link>`) instead of an inner `<button>`. The child receives the button
@@ -128,12 +135,14 @@ interface RailButtonProps {
128
135
  */
129
136
  style?: React$1.CSSProperties;
130
137
  }
131
- declare function RailButton({ icon: Icon, label, isActive, badge, badgeLabel, onClick, className, showLabel, asChild, children, variant, style }: RailButtonProps): React$1.JSX.Element;
138
+ declare function RailButton({ icon: Icon, label, isActive, badge, badgeLabel, onClick, className, showLabel, description, asChild, children, variant, style }: RailButtonProps): React$1.JSX.Element;
132
139
  interface RailFlyoutProps {
133
140
  icon: React$1.ComponentType<{
134
141
  className?: string;
135
142
  }>;
136
143
  label: string;
144
+ /** Explains this destination in accessible text and its tooltip or open flyout. */
145
+ description?: string;
137
146
  /** Highlight the trigger (e.g. when a child route is active). */
138
147
  isActive?: boolean;
139
148
  /** Show the label text beside the icon (labeled rail) vs. icon-only. */
@@ -153,7 +162,7 @@ interface RailFlyoutProps {
153
162
  * item inside it. Use for a single "door" (e.g. Studio) that fronts several
154
163
  * related destinations without permanently spending rail height on them.
155
164
  */
156
- declare function RailFlyout({ icon: Icon, label, isActive, showLabel, title, children, className, style }: RailFlyoutProps): React$1.JSX.Element;
165
+ declare function RailFlyout({ icon: Icon, label, description, isActive, showLabel, title, children, className, style }: RailFlyoutProps): React$1.JSX.Element;
157
166
  /** A single entry in a sub-item's hover actions menu (kebab). */
158
167
  interface RailSubItemAction {
159
168
  id: string;
@@ -191,6 +200,8 @@ interface RailExpandableProps {
191
200
  className?: string;
192
201
  }>;
193
202
  label: string;
203
+ /** Explains this destination in accessible text and its tooltip or open flyout. */
204
+ description?: string;
194
205
  /** Destination for the row itself. Clicking the label navigates here. */
195
206
  href?: string;
196
207
  /** Highlight the row (e.g. its own route or a child route is active). */
@@ -222,7 +233,7 @@ interface RailExpandableProps {
222
233
  * Sub-items can be fixed (`subItems`) or lazy (`loadSubItems`, with a loading
223
234
  * skeleton). Used for e.g. a "History" entry fronting recent sessions.
224
235
  */
225
- declare function RailExpandable({ icon: Icon, label, href, isActive, showLabel, subItems, loadSubItems, activeSubIds, emptyLabel, defaultOpen, onNavigate, LinkComponent, className, style }: RailExpandableProps): React$1.JSX.Element;
236
+ declare function RailExpandable({ icon: Icon, label, description, href, isActive, showLabel, subItems, loadSubItems, activeSubIds, emptyLabel, defaultOpen, onNavigate, LinkComponent, className, style }: RailExpandableProps): React$1.JSX.Element;
226
237
  interface RailModeButtonProps {
227
238
  mode: string;
228
239
  icon: React$1.ComponentType<{
@@ -294,6 +305,8 @@ interface McpServer {
294
305
  interface RailTooltipProps {
295
306
  /** Tooltip text shown to the right of the trigger. */
296
307
  label: string;
308
+ /** A second, quieter line under the label that may wrap, e.g. what a nav item is for. */
309
+ description?: string;
297
310
  /** The trigger element (icon button / link). */
298
311
  children: React$1.ReactNode;
299
312
  /** Disable the tooltip (e.g. when the rail is expanded and the label is inline). */
@@ -317,7 +330,7 @@ interface RailTooltipProps {
317
330
  * the whole nav would re-stagger on a collapse that moved nothing off screen.
318
331
  * One element type, both states.
319
332
  */
320
- declare function RailTooltip({ label, children, disabled, className }: RailTooltipProps): React$1.JSX.Element;
333
+ declare function RailTooltip({ label, description, children, disabled, className }: RailTooltipProps): React$1.JSX.Element;
321
334
  //#endregion
322
335
  //#region src/dashboard/sidebar-context.d.ts
323
336
  /** Width constants (px) — Tangle Quiet density (ChatGPT-minimal) */
@@ -906,6 +919,8 @@ interface SidebarLayoutNavItem {
906
919
  icon: React$1.ComponentType<{
907
920
  className?: string;
908
921
  }>;
922
+ /** @see {@link RailButtonProps.description} — one line saying what this destination is for. */
923
+ description?: string;
909
924
  /** Destination for link items. Omit when `togglesPanel` or `flyoutItems` is set. */
910
925
  href?: string;
911
926
  /** Render this item as the panel toggle instead of a link. */
@@ -1,4 +1,4 @@
1
- import { g as ExposedPort } from "./index-DQzli0pf.js";
1
+ import { g as ExposedPort } from "./index-AVDzT8Jw.js";
2
2
  import { D as RichFileTreeGitStatus, E as RichFileTreeGitEntry } from "./index-BoHOpP2_.js";
3
3
  import { a as PreviewReadiness, i as PreviewAccess } from "./embedded-app-view-B_vMTtJn.js";
4
4
  import * as React$1 from "react";
@@ -100,9 +100,20 @@ interface AgentProfilePickerProps {
100
100
  * selection-only picker (the New / edit / delete affordances stay hidden).
101
101
  */
102
102
  capabilities?: ReadonlyArray<AgentProfileCapability>;
103
+ /** Resolve after commit; reject write failures to retain the draft and show its error. Do not reject a post-commit refresh failure. */
103
104
  onCreate?: (draft: AgentProfileDraft) => void | Promise<void>;
105
+ /** Same commit/rejection contract as onCreate. */
104
106
  onUpdate?: (id: string, draft: AgentProfileDraft) => void | Promise<void>;
105
107
  onDelete?: (id: string) => void | Promise<void>;
108
+ /**
109
+ * Open the host's full profile editor for this profile instead of the inline
110
+ * name-and-persona form. When set, every row (built-in modes included) gets
111
+ * an edit action that closes the menu and calls this; `onUpdate` is then
112
+ * unused by the menu.
113
+ */
114
+ onEdit?: (id: string) => void;
115
+ /** Open the host's editor for a new profile instead of the inline form. */
116
+ onNew?: () => void;
106
117
  disabled?: boolean;
107
118
  /** Keep the pinned profile visible while preventing profile selection. */
108
119
  locked?: boolean;
@@ -127,7 +138,7 @@ interface AgentProfilePickerProps {
127
138
  * because the inline form needs its own focus and typing without the menu
128
139
  * stealing keystrokes.
129
140
  */
130
- declare function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate, onUpdate, onDelete, disabled, locked, lockReason, onNewChat, className, triggerClassName, popoverClassName, side }: AgentProfilePickerProps): React$1.JSX.Element;
141
+ declare function AgentProfilePicker({ value, onChange, profiles, capabilities, onCreate, onUpdate, onDelete, onEdit, onNew, disabled, locked, lockReason, onNewChat, className, triggerClassName, popoverClassName, side }: AgentProfilePickerProps): React$1.JSX.Element;
131
142
  //#endregion
132
143
  //#region src/chat/artifact-agent-dock.d.ts
133
144
  type ArtifactKind = string;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { a as LoginLayout, c as UserMenu, d as TangleLoginButtonProps, i as GitHubLoginButtonProps, l as UserMenuProps, n as AuthHeaderProps, o as LoginLayoutProps, r as GitHubLoginButton, s as SessionUser, t as AuthHeader, u as TangleLoginButton } from "./index-DvmZLMT1.js";
2
- import { A as ArtifactDockMessage, B as AgentProfilePickerProps, C as ThinkingIndicatorProps, D as ArtifactAgentDock, E as isViewerMessage, F as snapHarnessToModel, G as ReasoningLevelPicker, H as HARNESS_REASONING_OPTIONS, I as AgentProfileCapability, K as ReasoningLevelPickerProps, L as AgentProfileDraft, M as ArtifactKind, N as ArtifactScope, O as ArtifactAgentDockProps, P as modelProvider, R as AgentProfileOption, S as ThinkingIndicator, T as UserMessageProps, U as ReasoningLevel, V as DEFAULT_REASONING_LEVEL_OPTIONS, W as ReasoningLevelOption, _ as MessageAuthorProps, a as AgentTimelineMessageItem, b as MessageRole, c as AgentTimelineTone, d as ChatAuthor, f as ChatContainer, g as MessageAuthor, h as ChatMessageProps, i as AgentTimelineItem, j as ArtifactDockStreamEvent, k as ArtifactAgentDockTransport, l as AgentTimelineToolGroupItem, m as ChatMessage, n as AgentTimelineArtifactItem, o as AgentTimelineProps, p as ChatContainerProps, r as AgentTimelineCustomItem, s as AgentTimelineStatusItem, t as AgentTimeline, u as AgentTimelineToolItem, v as MessageList, w as UserMessage, x as TRANSCRIPT_TEXT, y as MessageListProps, z as AgentProfilePicker } from "./index-04xUKbln.js";
2
+ import { A as ArtifactDockMessage, B as AgentProfilePickerProps, C as ThinkingIndicatorProps, D as ArtifactAgentDock, E as isViewerMessage, F as snapHarnessToModel, G as ReasoningLevelPicker, H as HARNESS_REASONING_OPTIONS, I as AgentProfileCapability, K as ReasoningLevelPickerProps, L as AgentProfileDraft, M as ArtifactKind, N as ArtifactScope, O as ArtifactAgentDockProps, P as modelProvider, R as AgentProfileOption, S as ThinkingIndicator, T as UserMessageProps, U as ReasoningLevel, V as DEFAULT_REASONING_LEVEL_OPTIONS, W as ReasoningLevelOption, _ as MessageAuthorProps, a as AgentTimelineMessageItem, b as MessageRole, c as AgentTimelineTone, d as ChatAuthor, f as ChatContainer, g as MessageAuthor, h as ChatMessageProps, i as AgentTimelineItem, j as ArtifactDockStreamEvent, k as ArtifactAgentDockTransport, l as AgentTimelineToolGroupItem, m as ChatMessage, n as AgentTimelineArtifactItem, o as AgentTimelineProps, p as ChatContainerProps, r as AgentTimelineCustomItem, s as AgentTimelineStatusItem, t as AgentTimeline, u as AgentTimelineToolItem, v as MessageList, w as UserMessage, x as TRANSCRIPT_TEXT, y as MessageListProps, z as AgentProfilePicker } from "./index-QBCEflyf.js";
3
3
  import { a as SharedMessagingRouteViewState, i as AgentTargetSummary, n as AgentMessagingConnection, r as AgentMessagingConnectionProps, t as AgentEnrollmentViewState } from "./index-ClRHbsoX.js";
4
- import { $ as SandboxTable, $t as Sidebar, A as MetricChartPoint, At as SIDEBAR_TOTAL_WIDTH, B as ProductVariant, Bt as RailButton, C as UsageSummary, Ct as OutOfCreditsModal, D as SystemLogsViewerProps, Dt as SIDEBAR_PANEL_WIDTH, E as SystemLogsViewer, Et as SIDEBAR_MOBILE_WIDTH, F as SidebarLayoutProps, Ft as RailTooltipProps, G as HARNESS_OPTIONS, Gt as RailFlyout, H as HarnessBrand, Ht as RailExpandable, I as DashboardLayout, It as McpServer, J as HarnessType, Jt as RailHeaderProps, K as HarnessPicker, Kt as RailFlyoutProps, L as DashboardLayoutProps, Lt as AppearanceController, M as SidebarLayout, Mt as SidebarProviderProps, N as SidebarLayoutFlyoutItem, Nt as useSidebar, O as MetricAreaChart, Ot as SIDEBAR_RAIL_LABELED_WIDTH, P as SidebarLayoutNavItem, Pt as RailTooltip, Q as BackendSelectorProps, Qt as RailSeparatorProps, R as DashboardUser, Rt as ProfileAvatar, S as GitStatusData, St as InsufficientBalance, T as UsageSummaryProps, Tt as parseInsufficientBalance, U as HarnessLogo, Ut as RailExpandableProps, V as HARNESS_BRAND, Vt as RailButtonProps, W as HarnessLogoProps, Wt as RailExpandableSubItem, X as Backend, Xt as RailModeButtonProps, Y as chatCapableHarnesses, Yt as RailModeButton, Z as BackendSelector, Zt as RailSeparator, _ as PortsList, _t as ResourceSnapshotItem, a as PromoBanner, an as SidebarPanelHeader, at as NewSandboxCard, b as GitPanel, bt as ResourceMeterProps, c as SnapshotList, cn as SidebarProps, ct as SandboxCardData, d as ProcessList, dn as SidebarRailFooterProps, dt as TeamRole, en as SidebarContent, et as SandboxTableProps, f as ProcessListProps, fn as SidebarRailNav, ft as canAdminSandbox, g as ExposedPort, gn as ThemeMode, gt as ResourceSnapshot, h as TemplateCardProps, hn as SidebarUser, ht as ActivityItem, i as SandboxPageShellProps, in as SidebarPanelContentProps, it as sandboxStatus, j as MetricChartTone, jt as SidebarProvider, k as MetricAreaChartProps, kt as SIDEBAR_RAIL_WIDTH, l as SnapshotListProps, ln as SidebarRail, lt as SandboxCardProps, m as TemplateCardData, mn as SidebarRailProps, mt as ActivityFeedProps, n as DashboardPageHeaderProps, nn as SidebarPanel, nt as SandboxStatusPill, o as PromoBannerProps, on as SidebarPanelHeaderProps, ot as NewSandboxCardProps, p as TemplateCard, pn as SidebarRailNavProps, pt as ActivityFeed, q as HarnessPickerProps, qt as RailHeader, r as SandboxPageShell, rn as SidebarPanelContent, rt as SandboxStatusPillProps, s as SnapshotInfo, sn as SidebarPanelProps, st as SandboxCard, t as DashboardPageHeader, tn as SidebarContentProps, tt as SANDBOX_STATUS, u as ProcessInfo, un as SidebarRailFooter, ut as SandboxStatus, v as PortsListProps, vt as ResourceSnapshotProps, w as UsageSummaryData, wt as OutOfCreditsModalProps, x as GitPanelProps, xt as INSUFFICIENT_BALANCE_CODE, y as GitCommitData, yt as ResourceMeter, z as NavItem, zt as ProfileAvatarProps } from "./index-DQzli0pf.js";
4
+ import { $ as SandboxTable, $t as Sidebar, A as MetricChartPoint, At as SIDEBAR_TOTAL_WIDTH, B as ProductVariant, Bt as RailButton, C as UsageSummary, Ct as OutOfCreditsModal, D as SystemLogsViewerProps, Dt as SIDEBAR_PANEL_WIDTH, E as SystemLogsViewer, Et as SIDEBAR_MOBILE_WIDTH, F as SidebarLayoutProps, Ft as RailTooltipProps, G as HARNESS_OPTIONS, Gt as RailFlyout, H as HarnessBrand, Ht as RailExpandable, I as DashboardLayout, It as McpServer, J as HarnessType, Jt as RailHeaderProps, K as HarnessPicker, Kt as RailFlyoutProps, L as DashboardLayoutProps, Lt as AppearanceController, M as SidebarLayout, Mt as SidebarProviderProps, N as SidebarLayoutFlyoutItem, Nt as useSidebar, O as MetricAreaChart, Ot as SIDEBAR_RAIL_LABELED_WIDTH, P as SidebarLayoutNavItem, Pt as RailTooltip, Q as BackendSelectorProps, Qt as RailSeparatorProps, R as DashboardUser, Rt as ProfileAvatar, S as GitStatusData, St as InsufficientBalance, T as UsageSummaryProps, Tt as parseInsufficientBalance, U as HarnessLogo, Ut as RailExpandableProps, V as HARNESS_BRAND, Vt as RailButtonProps, W as HarnessLogoProps, Wt as RailExpandableSubItem, X as Backend, Xt as RailModeButtonProps, Y as chatCapableHarnesses, Yt as RailModeButton, Z as BackendSelector, Zt as RailSeparator, _ as PortsList, _t as ResourceSnapshotItem, a as PromoBanner, an as SidebarPanelHeader, at as NewSandboxCard, b as GitPanel, bt as ResourceMeterProps, c as SnapshotList, cn as SidebarProps, ct as SandboxCardData, d as ProcessList, dn as SidebarRailFooterProps, dt as TeamRole, en as SidebarContent, et as SandboxTableProps, f as ProcessListProps, fn as SidebarRailNav, ft as canAdminSandbox, g as ExposedPort, gn as ThemeMode, gt as ResourceSnapshot, h as TemplateCardProps, hn as SidebarUser, ht as ActivityItem, i as SandboxPageShellProps, in as SidebarPanelContentProps, it as sandboxStatus, j as MetricChartTone, jt as SidebarProvider, k as MetricAreaChartProps, kt as SIDEBAR_RAIL_WIDTH, l as SnapshotListProps, ln as SidebarRail, lt as SandboxCardProps, m as TemplateCardData, mn as SidebarRailProps, mt as ActivityFeedProps, n as DashboardPageHeaderProps, nn as SidebarPanel, nt as SandboxStatusPill, o as PromoBannerProps, on as SidebarPanelHeaderProps, ot as NewSandboxCardProps, p as TemplateCard, pn as SidebarRailNavProps, pt as ActivityFeed, q as HarnessPickerProps, qt as RailHeader, r as SandboxPageShell, rn as SidebarPanelContent, rt as SandboxStatusPillProps, s as SnapshotInfo, sn as SidebarPanelProps, st as SandboxCard, t as DashboardPageHeader, tn as SidebarContentProps, tt as SANDBOX_STATUS, u as ProcessInfo, un as SidebarRailFooter, ut as SandboxStatus, v as PortsListProps, vt as ResourceSnapshotProps, w as UsageSummaryData, wt as OutOfCreditsModalProps, x as GitPanelProps, xt as INSUFFICIENT_BALANCE_CODE, y as GitCommitData, yt as ResourceMeter, z as NavItem, zt as ProfileAvatarProps } from "./index-AVDzT8Jw.js";
5
5
  import { a as canonicalModelId, i as ProviderMark, n as ModelBrandStack, o as modelBrandFor, r as ModelInfo, t as ModelBrandIdentity } from "./model-brand-B57CV8Lg.js";
6
6
  import { a as PricingPageProps, c as BillingBalance, d as BillingSubscription, f as BillingUsage, i as PricingPage, l as BillingDashboard, n as UsageChartProps, o as PricingTier, r as UsageDataPoint, s as formatPrice, t as UsageChart, u as BillingDashboardProps } from "./usage-chart-BjM8ShvX.js";
7
7
  import { A as configurePdfViewer, C as PdfViewerConfig, D as RichFileTreeGitStatus, E as RichFileTreeGitEntry, F as getFormatLabel, I as getSyntaxLanguage, L as parseCsv, M as fileExtension, N as filterFileTree, O as RichFileTreeProps, P as getCodeLanguage, R as resolveFilePreviewKind, S as PdfViewer, T as RichFileTree, _ as FileTabsProps, a as FileCardProps, b as FileTreeVisibilityOptions, c as FileList, d as FileNode, f as FilePreview, g as FileTabs, h as FileTabData, i as FileCard, j as detectFileFormat, k as RichFileTreeThemeVars, l as FileListItem, m as FilePreviewProps, n as FileArtifactPane, o as FileDetails, p as FilePreviewKind, r as FileArtifactPaneProps, s as FileFormat, t as CSV_PREVIEW_ROW_LIMIT, u as FileListProps, v as FileTree, w as PdfViewerProps, x as FileUploader, y as FileTreeProps } from "./index-BoHOpP2_.js";
@@ -11,7 +11,7 @@ import { d as useSessionStream, l as UseSessionStreamOptions, n as UseSidecarAut
11
11
  import { AgentStreamEvent, AppendUserMessageOptions, ApplySdkEventOptions, AuthUser, AutomationStreamEvent, BeginAssistantMessageOptions, BotStreamEvent, CompleteAssistantMessageOptions, RealtimeSessionOptions, RealtimeSessionRegistry, RealtimeSessionRegistryProps, RealtimeSessionState, RealtimeSessionTarget, SSEEvent, SandboxMetrics, SdkSessionAttachment, SdkSessionEvent, SdkSessionSeed, SidecarMetricsPayload, TaskStreamEvent, TerminalStreamEvent, UseAuthOptions, UseAuthResult, UseRunGroupsOptions, UseSSEStreamOptions, UseSSEStreamResult, UseSandboxMetricsOptions, UseSandboxMetricsResult, UseSdkSessionOptions, UseSdkSessionReturn, UseToolCallStreamReturn, createAuthFetcher, useApiKey, useAuth, useAutoScroll, useCreateSession, useDeleteSession, useDropdownMenu, useLiveTime, useRealtimeSession, useRenameSession, useRunCollapseState, useRunGroups, useSSEStream, useSandboxMetrics, useSdkSession, useSessions, useToolCallStream } from "./hooks.js";
12
12
  import { $ as ContextMenuRadioGroup, $n as Table, $r as TangleKnot, $t as MetricProps, A as Card, An as Sheet, Ar as Toolbar, At as DropdownMenuRadioItem, B as ChipProps, Bn as SidebarDropZone, Br as buttonVariants, Bt as FilterFieldProps, C as BadgeProps, Cn as SelectLabel, Cr as TimeSelect, Ct as DropdownMenuCheckboxItem, D as Calendar, Dn as SelectTrigger, Dr as ToastProvider, Dt as DropdownMenuLabel, E as CATEGORY_TONES, En as SelectSeparator, Er as ToastContainer, Et as DropdownMenuItem, F as CardTitle, Fn as SheetHeader, Fr as TooltipTrigger, Ft as DropdownMenuSubTrigger, G as CollapsibleTrigger, Gn as Slider, Gr as toneFor, Gt as IconTile, H as CodeBlockProps, Hn as Skeleton, Hr as initialsOf, Ht as HeadingVariant, I as CardTitleProps, In as SheetOverlay, Ir as UploadFile, It as DropdownMenuTrigger, J as ContextMenuContent, Jn as StatusPill, Jr as HeadingProps, Jt as InlineCodeProps, K as ContextMenu, Kn as StatCard, Kr as useTheme, Kt as IconTileProps, L as CategoryTone, Ln as SheetPortal, Lr as UploadProgress, Lt as EmptyState, M as CardDescription, Mn as SheetContent, Mr as Tooltip, Mt as DropdownMenuShortcut, N as CardFooter, Nn as SheetDescription, Nr as TooltipContent, Nt as DropdownMenuSub, O as CalendarDate, On as SelectValue, Or as Tone, Ot as DropdownMenuPortal, P as CardHeader, Pn as SheetFooter, Pr as TooltipProvider, Pt as DropdownMenuSubContent, Q as ContextMenuPortal, Qn as TONE_CLASSES, Qr as LogoProps, Qt as Metric, R as Checkbox, Rn as SheetTitle, Rr as UploadProgressProps, Rt as EmptyStateProps, S as Badge, Sn as SelectItem, Sr as ThemeToggle, St as DropdownMenu, T as ButtonProps, Tn as SelectScrollUpButton, Tr as Toast, Tt as DropdownMenuGroup, U as Collapsible, Un as SkeletonCard, Ur as localToday, Ut as HelpText, V as CodeBlock, Vn as SidebarDropZoneProps, Vr as formatCalendarDate, Vt as Heading, W as CollapsibleContent, Wn as SkeletonTable, Wr as parseCalendarDate, Wt as HelpTextProps, X as ContextMenuItem, Xn as StatusTone, Xr as SectionTitleProps, Xt as InputProps, Y as ContextMenuGroup, Yn as StatusPillProps, Yr as SectionTitle, Yt as Input, Z as ContextMenuLabel, Zn as Switch, Zr as Logo, Zt as Label, _n as SegmentedControlOption, _t as DialogPortal, a as AlertDialogCancel, an as PageShellProps, ar as TableHeader, at as ContextMenuSubTrigger, b as AvatarFallback, bn as SelectContent, br as Textarea, bt as DropZone, c as AlertDialogFooter, cn as Popover, cr as Tabs, ct as DatePicker, d as AlertDialogPortal, dn as PopoverContent, dr as TabsTrigger, dt as DialogClose, en as MetricStrip, er as TableBody, et as ContextMenuRadioItem, f as AlertDialogTitle, fn as PopoverTrigger, fr as Tag, ft as DialogContent, g as AlertTone, gn as SegmentedControl, gt as DialogOverlay, h as AlertTitle, hn as RadioGroupItem, hr as TerminalDisplay, ht as DialogHeader, i as AlertDialogAction, in as PageShell, ir as TableHead, it as ContextMenuSubContent, j as CardContent, jn as SheetClose, jr as ToolbarProps, jt as DropdownMenuSeparator, k as CalendarProps, kn as Separator, kr as ToneClasses, kt as DropdownMenuRadioGroup, l as AlertDialogHeader, ln as PopoverAnchor, lr as TabsContent, lt as DatePickerProps, m as AlertProps, mn as RadioGroup, mt as DialogFooter, n as AlertDescription, nn as PageHeader, nr as TableCell, nt as ContextMenuShortcut, o as AlertDialogContent, on as Pagination, or as TableProps, ot as ContextMenuTrigger, p as AlertDialogTrigger, pn as Progress, pr as TagProps, pt as DialogDescription, q as ContextMenuCheckboxItem, qn as StatCardProps, qr as useToast, qt as InlineCode, r as AlertDialog, rn as PageHeaderProps, rr as TableFooter, rt as ContextMenuSub, s as AlertDialogDescription, sn as PaginationProps, sr as TableRow, st as CopyButton, t as Alert, tn as MetricStripProps, tr as TableCaption, tt as ContextMenuSeparator, u as AlertDialogOverlay, un as PopoverClose, ur as TabsList, ut as Dialog, vn as SegmentedControlProps, vr as TextShimmer, vt as DialogTitle, w as Button, wn as SelectScrollDownButton, wr as TimeSelectProps, wt as DropdownMenuContent, x as AvatarImage, xn as SelectGroup, xr as TextareaProps, xt as DropZoneProps, y as Avatar, yn as Select, yr as TextShimmerProps, yt as DialogTrigger, z as Chip, zn as SheetTrigger, zr as badgeVariants, zt as FilterField } from "./index-BqRlajlc.js";
13
13
  import { $ as StatusBar, A as createShellShouldRevalidate, B as SessionSidebarVariant, C as SandboxWorkbenchLayoutOptions, D as SandboxWorkbenchSessionProps, E as SandboxWorkbenchProps, F as SessionSidebarFilter, G as dispatchSessionCreated, H as SessionCreatedDetail, I as SessionSidebarGroupBy, J as RuntimePaneProps, K as useOptimisticSessionItems, L as SessionSidebarItem, M as formatRelativeAge, N as SessionSidebar, O as ShellShouldRevalidateArgs, P as SessionSidebarBadge, Q as ContextBadge, R as SessionSidebarLink, S as SandboxWorkbenchFileArtifact, T as SandboxWorkbenchOpenUIArtifact, U as SessionOptimisticController, V as SESSION_CREATED_EVENT, W as UseOptimisticSessionItemsOptions, X as TerminalPanel, Y as TerminalLine, Z as TerminalProps, _ as TaskBoardItem, _t as WorkspaceSurfaceTitle, a as WorkspaceFilesPane, at as DirectoryPaneProps, b as SandboxWorkbenchArtifact, bt as WorkspaceLayoutProps, c as ApprovalConfidenceStat, ct as ShellHeader, d as ApprovalQueueProps, dt as WorkspacePaneHeaderProps, et as StatusBarProps, f as CalendarEvent, ft as WorkspaceSurface, g as TaskBoardColumn, gt as WorkspaceSurfaceProps, h as TaskBoard, ht as WorkspaceSurfaceHeadingLevel, i as WorkspaceArtifactViewProps, it as DirectoryPane, j as shellShouldRevalidate, k as ShellShouldRevalidateOptions, l as ApprovalItem, lt as ShellHeaderProps, m as CalendarViewProps, mt as WorkspaceSurfaceFrameProps, n as ArtifactPaneProps, nt as StatusBanner, o as WorkspaceFilesPaneProps, ot as SHELL_HEADER_HEIGHT, p as CalendarView, pt as WorkspaceSurfaceFrame, q as RuntimePane, r as WorkspaceArtifactView, rt as StatusBannerProps, s as WorkspaceFilesPreview, st as SHELL_INSET_GUTTER, t as ArtifactPane, tt as BannerType, u as ApprovalQueue, ut as WorkspacePaneHeader, v as TaskBoardProps, vt as WorkspaceSurfaceTitleProps, w as SandboxWorkbenchMarkdownArtifact, x as SandboxWorkbenchCustomArtifact, y as SandboxWorkbench, yt as WorkspaceLayout, z as SessionSidebarProps } from "./index-C61CTrhx.js";
14
- import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-CzSwq_cU.js";
14
+ import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-ByzdHyte.js";
15
15
  import { a as PreviewReadiness, i as PreviewAccess, n as EmbeddedAppView, r as EmbeddedAppViewProps, t as EmbeddedApp } from "./embedded-app-view-B_vMTtJn.js";
16
16
  import { OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, OpenUIAction, OpenUIActionsNode, OpenUIArtifactRenderer, OpenUIArtifactRendererProps, OpenUIBadgeNode, OpenUICardNode, OpenUICodeNode, OpenUIComponentNode, OpenUIGridNode, OpenUIHeadingNode, OpenUIKeyValueNode, OpenUIMarkdownNode, OpenUIPrimitive, OpenUISchemaIssue, OpenUISchemaValidation, OpenUISeparatorNode, OpenUIStackNode, OpenUIStatNode, OpenUITableNode, OpenUITextNode, findUnsupportedOpenUINode, validateOpenUIJsonArtifact, validateOpenUIJsonNode } from "./openui.js";
17
17
  import { ApprovalCard, ApprovalCardProps, ApprovalDiffFile, ApprovalDiffSummary, ApprovalPlanStep, ExpandedToolDetail, ExpandedToolDetailProps, FeedSegment, InlineThinkingItem, InlineThinkingItemProps, InlineToolItem, InlineToolItemProps, LiveDuration, RunGroup, RunGroupProps, RunPhase, RunPhaseList, RunRowShell, RunRowShellProps, RunRowStatus, RunRowStatusDot, TaskList, TaskListItem, TaskListProps, TaskStatus, ToolCallData, ToolCallFeed, ToolCallFeedProps, ToolCallStatus, ToolCallType, parseToolEvent, showsTaskPriority, taskProgress, taskStatus } from "./run.js";
package/dist/index.js CHANGED
@@ -1,16 +1,16 @@
1
- import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-D3IKFGHo.js";
1
+ import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-Ai6g85oA.js";
2
2
  import { $ as DialogClose, $n as formatCalendarDate, $t as SelectSeparator, A as Chip, An as Tabs, At as Input, B as ContextMenuLabel, Bn as Textarea, Bt as PopoverContent, C as Card, Cn as TableBody, Ct as DropdownMenuTrigger, D as CardHeader, Dn as TableHead, Dt as HelpText, E as CardFooter, En as TableFooter, Et as Heading, F as ContextMenu, Ft as PageShell, G as ContextMenuShortcut, Gn as Toolbar, Gt as SegmentedControl, H as ContextMenuRadioGroup, Hn as TimeSelect, Ht as Progress, I as ContextMenuCheckboxItem, In as TerminalDisplay, It as Pagination, J as ContextMenuSubTrigger, Jn as TooltipProvider, Jt as SelectGroup, K as ContextMenuSub, Kn as Tooltip, Kt as Select, L as ContextMenuContent, Lt as Popover, M as Collapsible, Mn as TabsList, Mt as Metric, N as CollapsibleContent, Nn as TabsTrigger, Nt as MetricStrip, O as CardTitle, On as TableHeader, Ot as IconTile, P as CollapsibleTrigger, Pn as Tag, Pt as PageHeader, Q as Dialog, Qn as buttonVariants, Qt as SelectScrollUpButton, R as ContextMenuGroup, Rt as PopoverAnchor, S as Calendar, Sn as Table, St as DropdownMenuSubTrigger, T as CardDescription, Tn as TableCell, Tt as FilterField, U as ContextMenuRadioItem, Un as ToastContainer, Ut as RadioGroup, V as ContextMenuPortal, Vn as ThemeToggle, Vt as PopoverTrigger, W as ContextMenuSeparator, Wn as ToastProvider, Wt as RadioGroupItem, X as CopyButton, Xn as UploadProgress, Xt as SelectLabel, Y as ContextMenuTrigger, Yn as TooltipTrigger, Yt as SelectItem, Z as DatePicker, Zn as badgeVariants, Zt as SelectScrollDownButton, _ as AvatarFallback, _n as Slider, _t as DropdownMenuRadioItem, a as AlertDialogCancel, an as SheetContent, ar as useToast, at as DialogPortal, b as Button, bn as Switch, bt as DropdownMenuSub, c as AlertDialogFooter, cn as SheetHeader, cr as TangleKnot, ct as DropZone, d as AlertDialogPortal, dn as SheetTitle, dt as DropdownMenuContent, en as SelectTrigger, er as initialsOf, et as DialogContent, f as AlertDialogTitle, fn as SheetTrigger, ft as DropdownMenuGroup, g as Avatar, gn as SkeletonTable, gt as DropdownMenuRadioGroup, hn as SkeletonCard, ht as DropdownMenuPortal, i as AlertDialogAction, in as SheetClose, ir as useTheme, it as DialogOverlay, j as CodeBlock, jn as TabsContent, jt as Label, k as Checkbox, kn as TableRow, kt as InlineCode, l as AlertDialogHeader, ln as SheetOverlay, lt as DropdownMenu, m as AlertTitle, mn as Skeleton, mt as DropdownMenuLabel, n as AlertDescription, nn as Separator, nr as parseCalendarDate, nt as DialogFooter, o as AlertDialogContent, on as SheetDescription, or as SectionTitle, ot as DialogTitle, p as AlertDialogTrigger, pn as SidebarDropZone, pt as DropdownMenuItem, q as ContextMenuSubContent, qn as TooltipContent, qt as SelectContent, r as AlertDialog, rn as Sheet, rr as toneFor, rt as DialogHeader, s as AlertDialogDescription, sn as SheetFooter, sr as Logo, st as DialogTrigger, t as Alert, tn as SelectValue, tr as localToday, tt as DialogDescription, u as AlertDialogOverlay, un as SheetPortal, ut as DropdownMenuCheckboxItem, v as AvatarImage, vn as StatCard, vt as DropdownMenuSeparator, w as CardContent, wn as TableCaption, wt as EmptyState, x as CATEGORY_TONES, xn as TONE_CLASSES, xt as DropdownMenuSubContent, y as Badge, yn as StatusPill, yt as DropdownMenuShortcut, z as ContextMenuItem, zn as TextShimmer, zt as PopoverClose } from "./primitives-DSpl1Thf.js";
3
3
  import { i as WorkspacePaneHeader, n as SHELL_INSET_GUTTER, r as ShellHeader, t as SHELL_HEADER_HEIGHT } from "./shell-header-CTh3oV_e.js";
4
4
  import { C as WorkspaceSurfaceTitle, S as WorkspaceSurfaceFrame, _ as StatusBar, a as TaskBoard, b as WorkspaceLayout, c as createShellShouldRevalidate, d as SESSION_CREATED_EVENT, f as dispatchSessionCreated, g as TerminalPanel, h as RuntimePane, i as CalendarView, l as shellShouldRevalidate, m as formatRelativeAge, n as WorkspaceFilesPane, o as SandboxWorkbench, p as useOptimisticSessionItems, r as ApprovalQueue, s as WorkspaceArtifactView, t as ArtifactPane, u as SessionSidebar, v as StatusBanner, x as WorkspaceSurface, y as DirectoryPane } from "./workspace-ElQALzwV.js";
5
5
  import { i as VaultTree, n as filterFileNodes, r as VAULT_TREE_CHILD_PAGE, t as fileTreeFromPaths } from "./tree-data-DtoCNNBJ.js";
6
- import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-A-7sV4Na.js";
6
+ import { $ as useSidebar, A as parseInsufficientBalance, B as SidebarPanel, C as SandboxStatusPill, D as ResourceMeter, E as ResourceSnapshot, F as RailHeader, G as SidebarRailNav, H as SidebarPanelHeader, I as RailModeButton, J as SIDEBAR_PANEL_WIDTH, K as RailTooltip, L as RailSeparator, M as RailButton, N as RailExpandable, O as INSUFFICIENT_BALANCE_CODE, P as RailFlyout, Q as SidebarProvider, R as Sidebar, S as SANDBOX_STATUS, T as ActivityFeed, U as SidebarRail, V as SidebarPanelContent, W as SidebarRailFooter, X as SIDEBAR_RAIL_WIDTH, Y as SIDEBAR_RAIL_LABELED_WIDTH, Z as SIDEBAR_TOTAL_WIDTH, _ as BackendSelector, a as PortsList, b as SandboxCard, c as SystemLogsViewer, d as DashboardLayout, f as HARNESS_OPTIONS, g as HarnessLogo, h as HARNESS_BRAND, i as TemplateCard, j as ProfileAvatar, k as OutOfCreditsModal, l as MetricAreaChart, m as chatCapableHarnesses, n as SnapshotList, o as GitPanel, p as HarnessPicker, q as SIDEBAR_MOBILE_WIDTH, r as ProcessList, s as UsageSummary, t as PromoBanner, u as SidebarLayout, v as SandboxTable, w as sandboxStatus, x as canAdminSandbox, y as NewSandboxCard, z as SidebarContent } from "./dashboard-Ba7DlJHW.js";
7
7
  import { i as modelBrandFor, n as ProviderMark, r as canonicalModelId, t as ModelBrandStack } from "./model-brand-BSr9on8C.js";
8
8
  import { a as formatPrice, i as PricingPage, n as SandboxPageShell, o as BillingDashboard, r as UsageChart, t as DashboardPageHeader } from "./page-layout-2IRtfx51.js";
9
9
  import { t as usePtySession } from "./use-pty-session-Bf4hBLXJ.js";
10
10
  import { CSV_PREVIEW_ROW_LIMIT, FileArtifactPane, FileCard, FileList, FilePreview, FileTabs, FileTree, PdfViewer, RichFileTree, configurePdfViewer, detectFileFormat, fileExtension, filterFileTree, getCodeLanguage, getFormatLabel, getSyntaxLanguage, parseCsv, resolveFilePreviewKind } from "./files.js";
11
11
  import { n as PreviewView, t as EmbeddedAppView } from "./embedded-app-view-CYb9hevq.js";
12
12
  import { OPENUI_NODE_JSON_SCHEMA, OPENUI_NODE_TYPES, OpenUIArtifactRenderer, findUnsupportedOpenUINode, validateOpenUIJsonArtifact, validateOpenUIJsonNode } from "./openui.js";
13
- import { a as MessageList, c as UserMessage, d as modelProvider, f as snapHarnessToModel, g as ReasoningLevelPicker, h as HARNESS_REASONING_OPTIONS, i as MessageAuthor, l as isViewerMessage, m as DEFAULT_REASONING_LEVEL_OPTIONS, n as ChatContainer, o as TRANSCRIPT_TEXT, p as AgentProfilePicker, r as ChatMessage, s as ThinkingIndicator, t as AgentTimeline, u as ArtifactAgentDock } from "./chat-DRkKyE8E.js";
13
+ import { a as MessageList, c as UserMessage, d as modelProvider, f as snapHarnessToModel, g as ReasoningLevelPicker, h as HARNESS_REASONING_OPTIONS, i as MessageAuthor, l as isViewerMessage, m as DEFAULT_REASONING_LEVEL_OPTIONS, n as ChatContainer, o as TRANSCRIPT_TEXT, p as AgentProfilePicker, r as ChatMessage, s as ThinkingIndicator, t as AgentTimeline, u as ArtifactAgentDock } from "./chat-_aHUfqtH.js";
14
14
  import { ApprovalCard, ApprovalDiffSummary, ExpandedToolDetail, InlineThinkingItem, InlineToolItem, LiveDuration, RunGroup, RunPhaseList, RunRowShell, RunRowStatusDot, TaskList, ToolCallFeed, parseToolEvent, showsTaskPriority, taskProgress, taskStatus } from "./run.js";
15
15
  import "./vault-tree.js";
16
16
  import { a as TangleLoginButton, i as UserMenu, n as GitHubLoginButton, r as LoginLayout, t as AuthHeader } from "./auth-CWe17Hly.js";
package/dist/styles.css CHANGED
@@ -1548,6 +1548,9 @@
1548
1548
  .max-w-\[calc\(100vw-24px\)\] {
1549
1549
  max-width: calc(100vw - 24px);
1550
1550
  }
1551
+ .max-w-\[min\(16rem\,calc\(100vw-1rem\)\)\] {
1552
+ max-width: min(16rem, calc(100vw - 1rem));
1553
+ }
1551
1554
  .max-w-\[min\(640px\,calc\(100vw-2rem\)\)\] {
1552
1555
  max-width: min(640px, calc(100vw - 2rem));
1553
1556
  }
@@ -6102,6 +6105,11 @@
6102
6105
  .tangle-prose .\[\.tangle-prose_\&\]\:no-underline\! {
6103
6106
  text-decoration-line: none !important;
6104
6107
  }
6108
+ @media (hover:hover) {
6109
+ .\[\@media\(hover\:hover\)\]\:opacity-0 {
6110
+ opacity: 0%;
6111
+ }
6112
+ }
6105
6113
  @media (pointer:coarse) {
6106
6114
  .\[\@media\(pointer\:coarse\)\]\:min-h-10 {
6107
6115
  min-height: calc(var(--spacing) * 10);
@@ -1,5 +1,5 @@
1
1
  import { t as cn$1 } from "./utils-DzWbktWG.js";
2
- import { a as PortsList } from "./dashboard-A-7sV4Na.js";
2
+ import { a as PortsList } from "./dashboard-Ba7DlJHW.js";
3
3
  import { n as TerminalView } from "./terminal-DmSUfGha.js";
4
4
  import { RichFileTree } from "./files.js";
5
5
  import { n as PreviewView } from "./embedded-app-view-CYb9hevq.js";
@@ -1,3 +1,3 @@
1
- import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-CzSwq_cU.js";
1
+ import { A as SandboxArtifactTerminal, C as ChangesPane, D as ChangesPaneProps, E as ChangedFile, O as SandboxArtifact, S as PillTabsProps, T as ArtifactView, _ as DiffStats, a as PreviewView, b as PillTabItem, c as DiffViewProps, d as FileBreadcrumb, f as FileBreadcrumbProps, g as PanelHeaderProps, h as PanelHeader, i as resolveLanguage, k as SandboxArtifactPaneProps, l as CodeView, m as GitStatusBadge, n as CodeSurface, o as PreviewViewProps, p as DiffStatsBadge, r as CodeSurfaceProps, s as DiffView, t as BRAND_PRISM_THEME, u as CodeViewProps, v as buildUnifiedPatch, w as SandboxArtifactPane, x as PillTabs, y as computeDiffStats } from "./index-ByzdHyte.js";
2
2
  import { a as PreviewReadiness, i as PreviewAccess, n as EmbeddedAppView, r as EmbeddedAppViewProps, t as EmbeddedApp } from "./embedded-app-view-B_vMTtJn.js";
3
3
  export { type ArtifactView, BRAND_PRISM_THEME, type ChangedFile, ChangesPane, type ChangesPaneProps, CodeSurface, type CodeSurfaceProps, CodeView, type CodeViewProps, type DiffStats, DiffStatsBadge, DiffView, type DiffViewProps, type EmbeddedApp, EmbeddedAppView, type EmbeddedAppViewProps, FileBreadcrumb, type FileBreadcrumbProps, GitStatusBadge, PanelHeader, type PanelHeaderProps, type PillTabItem, PillTabs, type PillTabsProps, type PreviewAccess, type PreviewReadiness, PreviewView, type PreviewViewProps, type SandboxArtifact, SandboxArtifactPane, type SandboxArtifactPaneProps, type SandboxArtifactTerminal, buildUnifiedPatch, computeDiffStats, resolveLanguage };
package/dist/workbench.js CHANGED
@@ -1,3 +1,3 @@
1
- import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-D3IKFGHo.js";
1
+ import { a as computeDiffStats, c as BRAND_PRISM_THEME, d as DiffStatsBadge, f as GitStatusBadge, i as buildUnifiedPatch, l as CodeSurface, m as PillTabs, n as SandboxArtifactPane, o as CodeView, p as PanelHeader, r as DiffView, s as FileBreadcrumb, t as ChangesPane, u as resolveLanguage } from "./workbench-Ai6g85oA.js";
2
2
  import { n as PreviewView, t as EmbeddedAppView } from "./embedded-app-view-CYb9hevq.js";
3
3
  export { BRAND_PRISM_THEME, ChangesPane, CodeSurface, CodeView, DiffStatsBadge, DiffView, EmbeddedAppView, FileBreadcrumb, GitStatusBadge, PanelHeader, PillTabs, PreviewView, SandboxArtifactPane, buildUnifiedPatch, computeDiffStats, resolveLanguage };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox-ui",
3
- "version": "0.134.4",
3
+ "version": "0.134.6",
4
4
  "license": "MIT",
5
5
  "description": "Unified UI component library for Tangle Sandbox — primitives, chat, dashboard, terminal, editor, and workspace components",
6
6
  "repository": {