@deepseek-ai/dsh-client-ui-primitives 0.2.0-rc.1 → 0.2.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -18,18 +18,19 @@ import { createPortal } from "react-dom";
18
18
  import css$12 from "./ShortcutKeys.module.css";
19
19
  import css$13 from "./MenuSurface.module.css";
20
20
  import css$14 from "./Menu.module.css";
21
- import css$15 from "./Tooltip.module.css";
22
- import css$16 from "./HoverCard.module.css";
23
- import css$17 from "./Modal.module.css";
24
- import css$18 from "./RiskConfirmation.module.css";
25
- import css$19 from "./ConnectionIndicator.module.css";
26
- import css$20 from "./FileTypeIcon.module.css";
21
+ import css$15 from "./MenuGroup.module.css";
22
+ import css$16 from "./Tooltip.module.css";
23
+ import css$17 from "./HoverCard.module.css";
24
+ import css$18 from "./Modal.module.css";
25
+ import css$19 from "./RiskConfirmation.module.css";
26
+ import css$20 from "./ConnectionIndicator.module.css";
27
+ import css$21 from "./FileTypeIcon.module.css";
27
28
  import { siAliexpress, siApple, siBaidu, siBilibili, siCsdn, siDuckduckgo, siEbay, siFacebook, siGithub, siGitlab, siGoogle, siInstagram, siJuejin, siMdnwebdocs, siNetflix, siNpm, siPypi, siQq, siQuora, siReddit, siSinaweibo, siSpotify, siStackoverflow, siTaobao, siTelegram, siTiktok, siV2ex, siWechat, siWhatsapp, siWikipedia, siX, siYcombinator, siYoutube, siZhihu } from "simple-icons";
28
- import css$21 from "./user-text.module.css";
29
+ import css$22 from "./user-text.module.css";
29
30
  import markdownCss from "./markdown/MarkdownText.module.css";
30
- import css$22 from "./Toast.module.css";
31
- import css$23 from "./settings-form/SettingsForm.module.css";
32
- import css$24 from "./settings-form/fields.module.css";
31
+ import css$23 from "./Toast.module.css";
32
+ import css$24 from "./settings-form/SettingsForm.module.css";
33
+ import css$25 from "./settings-form/fields.module.css";
33
34
  import { createSnapshotStore } from "@deepseek-ai/dsh-client-store";
34
35
  import { createCssVariablesTheme, createHighlighterCoreSync } from "shiki/core";
35
36
  import { createJavaScriptRegexEngine, defaultJavaScriptRegexConstructor } from "shiki/engine/javascript";
@@ -37,14 +38,14 @@ import langTs from "@shikijs/langs/typescript";
37
38
  import langBash from "@shikijs/langs/shellscript";
38
39
  import langJson from "@shikijs/langs/json";
39
40
  import { CODE_HIGHLIGHT_EXTENSIONS, languageForPath } from "@deepseek-ai/dsh-util-code-language";
40
- import css$25 from "./JsonTree.module.css";
41
+ import css$26 from "./JsonTree.module.css";
41
42
  import Anser from "anser";
42
- import css$26 from "./TerminalBlock.module.css";
43
+ import css$27 from "./TerminalBlock.module.css";
43
44
  import cardCss from "./CodeCard.module.css";
44
- import css$27 from "./ReadBlock.module.css";
45
+ import css$28 from "./ReadBlock.module.css";
45
46
  import { structuredPatch } from "diff";
46
- import css$28 from "./DiffBlock.module.css";
47
- import css$29 from "./SearchBlock.module.css";
47
+ import css$29 from "./DiffBlock.module.css";
48
+ import css$30 from "./SearchBlock.module.css";
48
49
  import { fromMarkdown } from "mdast-util-from-markdown";
49
50
  import { gfmFromMarkdown } from "mdast-util-gfm";
50
51
  import { mathFromMarkdown } from "mdast-util-math";
@@ -56,13 +57,13 @@ import { classifyCharacter } from "micromark-util-classify-character";
56
57
  import { codes, constants, types } from "micromark-util-symbol";
57
58
  import { factorySpace } from "micromark-factory-space";
58
59
  import { normalizeUri } from "micromark-util-sanitize-uri";
59
- import css$30 from "./markdown/CodeBlock.module.css";
60
+ import css$31 from "./markdown/CodeBlock.module.css";
60
61
  import katex from "katex";
61
- import css$31 from "./ImageLightbox.module.css";
62
- import css$32 from "./ImagePreview.module.css";
62
+ import css$32 from "./ImageLightbox.module.css";
63
+ import css$33 from "./ImagePreview.module.css";
63
64
  import "katex/dist/katex.min.css";
64
- import css$33 from "./WebBlock.module.css";
65
- import css$34 from "./markdown/JsonBlock.module.css";
65
+ import css$34 from "./WebBlock.module.css";
66
+ import css$35 from "./markdown/JsonBlock.module.css";
66
67
  //#region lib/types/icons/shared-artwork.js
67
68
  /**
68
69
  * Render new-conversation geometry — the bubble around a plus — for product icons.
@@ -938,15 +939,15 @@ const IconThinkOutlineArtwork = ({ size = 16, className, strokeWidth }) => jsxs(
938
939
  strokeWidth,
939
940
  children: [
940
941
  jsx("path", {
941
- d: "M10.7554 5.24466C13.9891 8.4783 15.3769 12.3333 13.8552 13.8551C12.3335 15.3768 8.4785 13.989 5.24478 10.7553C2.01111 7.52165 0.623307 3.66664 2.14504 2.14491C3.66676 0.623189 7.52178 2.01099 10.7554 5.24466Z",
942
+ d: "M10.2854 5.71481C12.9673 8.39663 14.1182 11.5938 12.8562 12.8559C11.5942 14.1179 8.39706 12.9669 5.71518 10.2851C3.03333 7.60323 1.88236 4.40608 3.14441 3.14403C4.40644 1.882 7.6036 3.03297 10.2854 5.71481Z",
942
943
  stroke: "currentColor"
943
944
  }),
944
945
  jsx("path", {
945
- d: "M10.7554 10.7553C7.52178 13.989 3.66676 15.3768 2.14504 13.8551C0.623307 12.3333 2.01111 8.4783 5.24478 5.24466C8.4785 2.01099 12.3335 0.623189 13.8552 2.14491C15.3769 3.66664 13.9891 7.52165 10.7554 10.7553Z",
946
+ d: "M10.2854 10.2851C7.6036 12.9669 4.40644 14.1179 3.14441 12.8559C1.88236 11.5938 3.03333 8.39663 5.71518 5.71481C8.39706 3.03297 11.5942 1.882 12.8562 3.14403C14.1182 4.40608 12.9673 7.60323 10.2854 10.2851Z",
946
947
  stroke: "currentColor"
947
948
  }),
948
949
  jsx("path", {
949
- d: "M8.9587 8.00025C8.9587 8.52835 8.5306 8.95655 8.0024 8.95655C7.47429 8.95655 7.04614 8.52835 7.04614 8.00025C7.04614 7.47209 7.47429 7.04395 8.0024 7.04395C8.5306 7.04395 8.9587 7.47209 8.9587 8.00025Z",
950
+ d: "M8.86291 8.0002C8.86291 8.47549 8.47762 8.86087 8.00224 8.86087C7.52694 8.86087 7.1416 8.47549 7.1416 8.0002C7.1416 7.52485 7.52694 7.13953 8.00224 7.13953C8.47762 7.13953 8.86291 7.52485 8.86291 8.0002Z",
950
951
  fill: "currentColor"
951
952
  })
952
953
  ]
@@ -3183,6 +3184,7 @@ const DisclosureRow = memo(function DisclosureRow({ icon, title, open, expandabl
3183
3184
  children: [expandable && !rowExpands ? jsx("button", {
3184
3185
  type: "button",
3185
3186
  className: clsx(css$2.leading, leadingClassName),
3187
+ "aria-label": title,
3186
3188
  "aria-expanded": open,
3187
3189
  onClick: toggleFromLeading,
3188
3190
  children: leading
@@ -3521,20 +3523,22 @@ function Checkbox({ checked, onChange, label, disabled = false, title, className
3521
3523
  /**
3522
3524
  * Render a text input with an optional leading icon.
3523
3525
  * @param props.icon - optional 16px leading icon node.
3526
+ * @param ref - the native input, cleared when it unmounts.
3524
3527
  * @returns wrapper span containing the native input; input attributes pass through.
3525
3528
  */
3526
- function Input({ icon, className, ...rest }) {
3529
+ const Input = forwardRef(function Input({ icon, className, ...rest }, ref) {
3527
3530
  return jsxs("span", {
3528
3531
  className: clsx(css$11.wrap, className),
3529
3532
  children: [icon != null && jsx("span", {
3530
3533
  className: css$11.icon,
3531
3534
  children: icon
3532
3535
  }), jsx("input", {
3536
+ ref,
3533
3537
  className: css$11.input,
3534
3538
  ...rest
3535
3539
  })]
3536
3540
  });
3537
- }
3541
+ });
3538
3542
  //#endregion
3539
3543
  //#region lib/types/overlay-top-margin.js
3540
3544
  /** Shared viewport inset for overlays, derived from the desktop frame's reserved top strip. */
@@ -4269,6 +4273,125 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4269
4273
  });
4270
4274
  }
4271
4275
  //#endregion
4276
+ //#region lib/types/MenuGroup.js
4277
+ /** Accessible menu groups with shared sticky-heading presentation and viewport observation. */
4278
+ /**
4279
+ * Render a named group with an instance-owned heading id and an inaccessible position sentinel.
4280
+ * @param props - Caller-localized label and optional menu rows.
4281
+ * @returns A section named by its direct heading, followed by the supplied children.
4282
+ */
4283
+ function MenuGroup({ label, children }) {
4284
+ const headingId = useId();
4285
+ return jsxs("section", {
4286
+ role: "group",
4287
+ "aria-labelledby": headingId,
4288
+ "data-menu-group": "",
4289
+ className: css$15.group,
4290
+ children: [
4291
+ jsx("span", {
4292
+ "aria-hidden": "true",
4293
+ "data-menu-group-start": "",
4294
+ className: css$15.start
4295
+ }),
4296
+ jsx("div", {
4297
+ id: headingId,
4298
+ "data-menu-group-heading": "",
4299
+ className: css$15.heading,
4300
+ children: label
4301
+ }),
4302
+ children
4303
+ ]
4304
+ });
4305
+ }
4306
+ /**
4307
+ * Update heading backgrounds asynchronously from native intersection and viewport-size observations.
4308
+ * Headings remain transparent until observations identify a section crossing the viewport top.
4309
+ * Without IntersectionObserver or ResizeObserver, CSS sticky headings remain transparent.
4310
+ * Group membership is captured at setup; dispose before observing changed groups or the same viewport again.
4311
+ * @param viewport - Unpadded, borderless scroll container with direct MenuGroup children.
4312
+ * @returns Cleanup owning both intersection observers and the viewport resize observer; disconnects
4313
+ * them, ignores queued callbacks, and clears managed data-stuck attributes. No valid groups acquires nothing.
4314
+ */
4315
+ function observeStickyMenuGroups(viewport) {
4316
+ const groups = [...viewport.querySelectorAll(":scope > [data-menu-group]")].flatMap((section) => {
4317
+ const heading = section.querySelector(":scope > [data-menu-group-heading]");
4318
+ const start = section.querySelector(":scope > [data-menu-group-start]");
4319
+ return heading === null || start === null ? [] : [{
4320
+ section,
4321
+ heading,
4322
+ start,
4323
+ atTop: false,
4324
+ above: false,
4325
+ topTime: -Infinity,
4326
+ aboveTime: -Infinity
4327
+ }];
4328
+ });
4329
+ if (groups.length === 0 || typeof IntersectionObserver === "undefined" || typeof ResizeObserver === "undefined") return () => {};
4330
+ const sections = new Map(groups.map((group) => [group.section, group]));
4331
+ const starts = new Map(groups.map((group) => [group.start, group]));
4332
+ let disposed = false;
4333
+ let stripObserver;
4334
+ let viewportHeight;
4335
+ const render = (group) => {
4336
+ const stuck = group.atTop && group.above;
4337
+ if (group.heading.hasAttribute("data-stuck") !== stuck) group.heading.toggleAttribute("data-stuck", stuck);
4338
+ };
4339
+ const startObserver = new IntersectionObserver((entries) => {
4340
+ if (disposed) return;
4341
+ for (const entry of entries) {
4342
+ const group = starts.get(entry.target);
4343
+ if (!group || entry.rootBounds === null || entry.time < group.aboveTime) continue;
4344
+ group.above = entry.boundingClientRect.top < entry.rootBounds.top;
4345
+ group.aboveTime = entry.time;
4346
+ render(group);
4347
+ }
4348
+ }, {
4349
+ root: viewport,
4350
+ threshold: [0, 1]
4351
+ });
4352
+ for (const { start } of groups) startObserver.observe(start);
4353
+ const sizeObserver = new ResizeObserver((entries) => {
4354
+ if (disposed) return;
4355
+ for (const entry of entries) {
4356
+ if (entry.target !== viewport || entry.contentRect.height === viewportHeight) continue;
4357
+ viewportHeight = entry.contentRect.height;
4358
+ stripObserver?.disconnect();
4359
+ const observer = new IntersectionObserver((intersections) => {
4360
+ if (disposed || stripObserver !== observer) return;
4361
+ for (const intersection of intersections) {
4362
+ const group = sections.get(intersection.target);
4363
+ if (!group || intersection.rootBounds === null) continue;
4364
+ const top = intersection.rootBounds.top;
4365
+ if (intersection.time >= group.topTime) {
4366
+ group.atTop = intersection.isIntersecting && intersection.boundingClientRect.bottom > top;
4367
+ group.topTime = intersection.time;
4368
+ }
4369
+ if (intersection.time >= group.aboveTime) {
4370
+ group.above = intersection.boundingClientRect.top < top;
4371
+ group.aboveTime = intersection.time;
4372
+ }
4373
+ render(group);
4374
+ }
4375
+ }, {
4376
+ root: viewport,
4377
+ rootMargin: `0px 0px ${Math.min(1, viewportHeight) - viewportHeight}px 0px`,
4378
+ threshold: 0
4379
+ });
4380
+ stripObserver = observer;
4381
+ for (const { section } of groups) observer.observe(section);
4382
+ }
4383
+ });
4384
+ sizeObserver.observe(viewport);
4385
+ return () => {
4386
+ if (disposed) return;
4387
+ disposed = true;
4388
+ startObserver.disconnect();
4389
+ stripObserver?.disconnect();
4390
+ sizeObserver.disconnect();
4391
+ for (const { heading } of groups) if (heading.hasAttribute("data-stuck")) heading.removeAttribute("data-stuck");
4392
+ };
4393
+ }
4394
+ //#endregion
4272
4395
  //#region lib/types/useAnchoredMaxHeight.js
4273
4396
  /**
4274
4397
  * Viewport-fit hook for bottom-anchored overlays (slash menu, popupSelect):
@@ -4703,7 +4826,7 @@ function Tooltip({ label, shortcutKeys, side = "right", align = "center", delayM
4703
4826
  const content = visible && !suppressed && jsxs("span", {
4704
4827
  ref: bubble,
4705
4828
  id: openOnClick ? id : void 0,
4706
- className: css$15.bubble,
4829
+ className: css$16.bubble,
4707
4830
  "data-side": side,
4708
4831
  "data-portal": portal || void 0,
4709
4832
  "data-pinned": pinned || void 0,
@@ -4718,7 +4841,7 @@ function Tooltip({ label, shortcutKeys, side = "right", align = "center", delayM
4718
4841
  role: "tooltip",
4719
4842
  "aria-label": shortcutKeys?.length ? [resolvedLabel, shortcutKeys.join(" ")].filter(Boolean).join(" ") : void 0,
4720
4843
  children: [resolvedLabel && jsx("span", {
4721
- className: css$15.label,
4844
+ className: css$16.label,
4722
4845
  children: resolvedLabel
4723
4846
  }), shortcutKeys !== void 0 && shortcutKeys.length > 0 && jsx(ShortcutKeys, {
4724
4847
  keys: shortcutKeys,
@@ -4986,7 +5109,7 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
4986
5109
  };
4987
5110
  const card = open && pos !== null && !suppressed && jsx("div", {
4988
5111
  ref: cardRef,
4989
- className: clsx(css$16.card, variant === "preview" && css$16.preview, inline && css$16.media, copyable && css$16.copyable, copied && css$16.feedback),
5112
+ className: clsx(css$17.card, variant === "preview" && css$17.preview, inline && css$17.media, copyable && css$17.copyable, copied && css$17.feedback),
4990
5113
  "data-closing": closing || void 0,
4991
5114
  style: {
4992
5115
  ...pos,
@@ -5009,14 +5132,14 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
5009
5132
  copy(copyText);
5010
5133
  } : void 0,
5011
5134
  children: copied ? jsx("span", {
5012
- className: css$16.copied,
5135
+ className: css$17.copied,
5013
5136
  "aria-hidden": "true",
5014
5137
  children: copiedLabel
5015
5138
  }) : content
5016
5139
  });
5017
5140
  return jsxs("span", {
5018
5141
  ref: rootRef,
5019
- className: clsx(css$16.root, inline && css$16.inline),
5142
+ className: clsx(css$17.root, inline && css$17.inline),
5020
5143
  onFocus: inline ? (event) => {
5021
5144
  if (!disabled && event.target.matches(":focus-visible")) {
5022
5145
  cancelClose();
@@ -5054,7 +5177,7 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
5054
5177
  children: anchor
5055
5178
  }),
5056
5179
  open && !suppressed && copyable && jsx("span", {
5057
- className: css$16.status,
5180
+ className: css$17.status,
5058
5181
  role: "status",
5059
5182
  children: copied ? copiedLabel : ""
5060
5183
  }),
@@ -5089,11 +5212,11 @@ function Modal({ open, onClose, title, closeLabel, description, children, footer
5089
5212
  useModalLayer(dialog, open, onClose);
5090
5213
  if (!open) return null;
5091
5214
  return createPortal(jsxs("div", {
5092
- className: css$17.root,
5215
+ className: css$18.root,
5093
5216
  role: "presentation",
5094
5217
  onKeyDownCapture,
5095
5218
  children: [jsx("div", {
5096
- className: css$17.mask,
5219
+ className: css$18.mask,
5097
5220
  style: backdropBlur ? void 0 : { backdropFilter: "none" },
5098
5221
  "aria-hidden": "true",
5099
5222
  onClick: onClose
@@ -5101,37 +5224,37 @@ function Modal({ open, onClose, title, closeLabel, description, children, footer
5101
5224
  ref: dialog,
5102
5225
  tabIndex: -1,
5103
5226
  "data-shortcut-modal": shortcutModal,
5104
- className: clsx(css$17.dialog, className),
5227
+ className: clsx(css$18.dialog, className),
5105
5228
  role: "dialog",
5106
5229
  "aria-modal": "true",
5107
5230
  "aria-label": title,
5108
5231
  children: headless ? children : jsxs(Fragment, { children: [jsxs("div", {
5109
- className: clsx(css$17.content, contentClassName),
5232
+ className: clsx(css$18.content, contentClassName),
5110
5233
  children: [
5111
5234
  jsxs("div", {
5112
- className: css$17.header,
5235
+ className: css$18.header,
5113
5236
  children: [jsx("h2", {
5114
- className: css$17.title,
5237
+ className: css$18.title,
5115
5238
  children: title
5116
5239
  }), jsx("button", {
5117
5240
  type: "button",
5118
- className: css$17.close,
5241
+ className: css$18.close,
5119
5242
  "aria-label": closeLabel,
5120
5243
  onClick: onClose,
5121
5244
  children: jsx(IconCloseOutlineRegular, { size: 14 })
5122
5245
  })]
5123
5246
  }),
5124
5247
  description !== void 0 && description !== "" && jsx("p", {
5125
- className: css$17.description,
5248
+ className: css$18.description,
5126
5249
  children: description
5127
5250
  }),
5128
5251
  children !== void 0 && jsx("div", {
5129
- className: css$17.body,
5252
+ className: css$18.body,
5130
5253
  children
5131
5254
  })
5132
5255
  ]
5133
5256
  }), footer !== void 0 && jsx("div", {
5134
- className: css$17.footer,
5257
+ className: css$18.footer,
5135
5258
  children: footer
5136
5259
  })] })
5137
5260
  })]
@@ -5153,28 +5276,28 @@ function RiskConfirmation({ open, title, description, acknowledgeLabel, cancelLa
5153
5276
  onClose: onCancel,
5154
5277
  title,
5155
5278
  closeLabel,
5156
- className: css$18.confirmation ?? "",
5157
- contentClassName: css$18.confirmationContent ?? "",
5279
+ className: css$19.confirmation ?? "",
5280
+ contentClassName: css$19.confirmationContent ?? "",
5158
5281
  footer: jsxs(Fragment, { children: [jsx(Button, {
5159
5282
  variant: "outline",
5160
- className: css$18.modalAction,
5283
+ className: css$19.modalAction,
5161
5284
  onClick: onCancel,
5162
5285
  children: cancelLabel
5163
5286
  }), jsx(Button, {
5164
5287
  variant: "primary",
5165
- className: css$18.confirmAction,
5288
+ className: css$19.confirmAction,
5166
5289
  disabled: disabled || !acknowledged,
5167
5290
  onClick: onConfirm,
5168
5291
  children: confirmLabel
5169
5292
  })] }),
5170
5293
  children: [jsxs("div", {
5171
- className: css$18.warning,
5294
+ className: css$19.warning,
5172
5295
  children: [jsx(IconWarningOutlineRegular, {
5173
5296
  size: 18,
5174
- className: css$18.warningIcon
5297
+ className: css$19.warningIcon
5175
5298
  }), jsx("p", { children: description })]
5176
5299
  }), jsxs("label", {
5177
- className: css$18.acknowledgement,
5300
+ className: css$19.acknowledgement,
5178
5301
  children: [jsx("input", {
5179
5302
  type: "checkbox",
5180
5303
  checked: acknowledged,
@@ -5222,44 +5345,44 @@ function ConnectionIndicator({ state, disconnectedLabel, connectingLabel, recove
5222
5345
  };
5223
5346
  }, [state, rendered]);
5224
5347
  if (rendered === void 0) return null;
5225
- const leavingClass = leaving ? ` ${css$19.leaving}` : "";
5348
+ const leavingClass = leaving ? ` ${css$20.leaving}` : "";
5226
5349
  if (rendered === "recovered") return jsxs("div", {
5227
- className: `${css$19.indicator} ${css$19.success}${leavingClass}`,
5350
+ className: `${css$20.indicator} ${css$20.success}${leavingClass}`,
5228
5351
  role: "status",
5229
5352
  "aria-label": recoveredLabel,
5230
5353
  children: [jsx("span", {
5231
- className: css$19.icon,
5354
+ className: css$20.icon,
5232
5355
  "aria-hidden": "true",
5233
5356
  children: jsx(IconCheckOutlineRegular, { size: 14 })
5234
5357
  }), jsx("span", {
5235
- className: css$19.label,
5358
+ className: css$20.label,
5236
5359
  children: recoveredLabel
5237
5360
  })]
5238
5361
  });
5239
5362
  const connecting = rendered === "connecting";
5240
5363
  return jsxs("button", {
5241
5364
  type: "button",
5242
- className: `${css$19.indicator} ${css$19.warning}${leavingClass}`,
5365
+ className: `${css$20.indicator} ${css$20.warning}${leavingClass}`,
5243
5366
  "data-phase": rendered,
5244
5367
  "aria-label": connecting ? restartActionLabel : reconnectActionLabel,
5245
5368
  onClick: onReconnect,
5246
5369
  children: [jsx("span", {
5247
- className: css$19.icon,
5370
+ className: css$20.icon,
5248
5371
  "aria-hidden": "true",
5249
5372
  children: connecting ? jsx(StateDot, { state: "ongoing" }) : jsx(IconRefreshOutlineRegular, { size: 14 })
5250
5373
  }), jsx("span", {
5251
- className: css$19.label,
5374
+ className: css$20.label,
5252
5375
  children: connecting ? jsxs(Fragment, { children: [connectingLabel, jsxs("span", {
5253
- className: css$19.dots,
5376
+ className: css$20.dots,
5254
5377
  "aria-hidden": "true",
5255
5378
  children: [
5256
5379
  jsx("span", { children: "." }),
5257
5380
  jsx("span", {
5258
- className: css$19.secondDot,
5381
+ className: css$20.secondDot,
5259
5382
  children: "."
5260
5383
  }),
5261
5384
  jsx("span", {
5262
- className: css$19.thirdDot,
5385
+ className: css$20.thirdDot,
5263
5386
  children: "."
5264
5387
  })
5265
5388
  ]
@@ -6290,7 +6413,7 @@ function FileTypeIcon(props) {
6290
6413
  type: resolvedType,
6291
6414
  size,
6292
6415
  className
6293
- }) : glyph(resolvedType, size, clsx(css$20.icon, css$20[resolvedType], className));
6416
+ }) : glyph(resolvedType, size, clsx(css$21.icon, css$21[resolvedType], className));
6294
6417
  }
6295
6418
  //#endregion
6296
6419
  //#region lib/types/SiteGlyph.js
@@ -6619,7 +6742,7 @@ function projectUserText(text, sessionLabels, slashNames = [], slashKind = "skil
6619
6742
  let cursor = 0;
6620
6743
  const pushPlain = (from, to) => {
6621
6744
  parts.push(jsx("span", {
6622
- className: css$21.plainRun,
6745
+ className: css$22.plainRun,
6623
6746
  children: text.slice(from, to)
6624
6747
  }, `t${from}`));
6625
6748
  };
@@ -6632,14 +6755,14 @@ function projectUserText(text, sessionLabels, slashNames = [], slashKind = "skil
6632
6755
  const contents = jsxs(Fragment, { children: [referenceKind !== void 0 && jsx(ReferenceIconRegular, {
6633
6756
  kind: referenceKind,
6634
6757
  size: 16,
6635
- className: css$21.refIcon
6758
+ className: css$22.refIcon
6636
6759
  }), displayLabel] });
6637
6760
  const open = references === void 0 ? void 0 : referenceKind === "file" ? () => {
6638
6761
  references.openFile(label.slice(1).replace(/^"|"$/gu, ""));
6639
6762
  } : referenceKind === void 0 && slashKind === "skill" ? () => {
6640
6763
  references.openSkill(label.slice(1));
6641
6764
  } : void 0;
6642
- const className = clsx(css$21.refChip, referenceKind === void 0 && css$21.slashChip);
6765
+ const className = clsx(css$22.refChip, referenceKind === void 0 && css$22.slashChip);
6643
6766
  parts.push(open === void 0 ? jsx("span", {
6644
6767
  className,
6645
6768
  "data-ref-chip": referenceKind ?? slashKind,
@@ -6659,7 +6782,7 @@ function projectUserText(text, sessionLabels, slashNames = [], slashKind = "skil
6659
6782
  cursor = end;
6660
6783
  }
6661
6784
  if (parts.length === 0) return jsx("span", {
6662
- className: css$21.plainRun,
6785
+ className: css$22.plainRun,
6663
6786
  children: text
6664
6787
  });
6665
6788
  if (cursor < text.length) pushPlain(cursor, text.length);
@@ -6732,25 +6855,25 @@ function Toast({ text, icon, tone, anchor, holdMs = HOLD_MS, actions, onDone })
6732
6855
  };
6733
6856
  }, [anchor]);
6734
6857
  return createPortal(jsxs("div", {
6735
- className: css$22.toast,
6858
+ className: css$23.toast,
6736
6859
  role: "alert",
6737
6860
  style: {
6738
6861
  ...left === null ? {} : { left },
6739
6862
  "--dsh-toast-hold": `${String(holdMs)}ms`
6740
6863
  },
6741
6864
  children: [tone === "success" ? jsx("span", {
6742
- className: `${css$22.icon} ${css$22.success}`,
6865
+ className: `${css$23.icon} ${css$23.success}`,
6743
6866
  "aria-hidden": true,
6744
6867
  children: jsx(IconCheckCircleOutlineRegular, {})
6745
6868
  }) : icon !== void 0 && jsx("span", {
6746
- className: css$22.icon,
6869
+ className: css$23.icon,
6747
6870
  "aria-hidden": true,
6748
6871
  children: icon
6749
6872
  }), jsxs("span", {
6750
- className: css$22.text,
6873
+ className: css$23.text,
6751
6874
  children: [text, actions?.map((action) => jsxs(Fragment$1, { children: [action.prefix, jsx("button", {
6752
6875
  type: "button",
6753
- className: css$22.action,
6876
+ className: css$23.action,
6754
6877
  onClick: action.onClick,
6755
6878
  children: action.label
6756
6879
  })] }, action.label))]
@@ -6800,29 +6923,29 @@ function SettingsForm(props) {
6800
6923
  discard.current();
6801
6924
  }, []);
6802
6925
  if (!state.available) return jsx("p", {
6803
- className: css$23.unavailable,
6926
+ className: css$24.unavailable,
6804
6927
  role: "status",
6805
6928
  children: labels.unavailable
6806
6929
  });
6807
6930
  const blocked = !state.dirty || state.invalid || state.saving;
6808
6931
  return jsxs("div", {
6809
- className: css$23.form,
6932
+ className: css$24.form,
6810
6933
  children: [
6811
6934
  !state.writable ? jsx("p", {
6812
- className: css$23.readOnly,
6935
+ className: css$24.readOnly,
6813
6936
  role: "status",
6814
6937
  children: labels.readOnly
6815
6938
  }) : null,
6816
6939
  props.children,
6817
6940
  jsxs("div", {
6818
- className: css$23.footer,
6941
+ className: css$24.footer,
6819
6942
  children: [state.failed ? jsx("p", {
6820
- className: css$23.failed,
6943
+ className: css$24.failed,
6821
6944
  role: "status",
6822
6945
  children: labels.saveFailed
6823
6946
  }) : null, jsx("button", {
6824
6947
  type: "button",
6825
- className: css$23.save,
6948
+ className: css$24.save,
6826
6949
  disabled: blocked,
6827
6950
  onClick: props.onSave,
6828
6951
  children: state.saving ? labels.saving : labels.save
@@ -6854,19 +6977,19 @@ function SettingsValueField(props) {
6854
6977
  const hasMessage = props.invalid || Boolean(props.hint);
6855
6978
  const description = [hasMessage ? messageId : "", helpOpen ? helpId : ""].filter(Boolean).join(" ");
6856
6979
  return jsxs("div", {
6857
- className: css$24.field,
6980
+ className: css$25.field,
6858
6981
  children: [
6859
6982
  jsxs("div", {
6860
- className: css$24.head,
6983
+ className: css$25.head,
6861
6984
  children: [jsxs("div", {
6862
- className: css$24.labelGroup,
6985
+ className: css$25.labelGroup,
6863
6986
  children: [jsx("label", {
6864
- className: css$24.label,
6987
+ className: css$25.label,
6865
6988
  htmlFor: props.id,
6866
6989
  children: props.label
6867
6990
  }), props.help !== void 0 ? jsx("button", {
6868
6991
  type: "button",
6869
- className: css$24.helpButton,
6992
+ className: css$25.helpButton,
6870
6993
  "aria-label": props.help.label,
6871
6994
  "aria-expanded": helpOpen,
6872
6995
  "aria-controls": helpId,
@@ -6876,13 +6999,13 @@ function SettingsValueField(props) {
6876
6999
  children: jsx(IconInfoOutlineRegular, { size: 12 })
6877
7000
  }) : null]
6878
7001
  }), props.overridden ? jsxs("span", {
6879
- className: css$24.badges,
7002
+ className: css$25.badges,
6880
7003
  children: [jsx(Tag, {
6881
7004
  tone: "neutral",
6882
7005
  children: props.overriddenLabel
6883
7006
  }), jsx("button", {
6884
7007
  type: "button",
6885
- className: css$24.reset,
7008
+ className: css$25.reset,
6886
7009
  disabled: props.disabled,
6887
7010
  onClick: props.onReset,
6888
7011
  children: props.resetLabel
@@ -6891,7 +7014,7 @@ function SettingsValueField(props) {
6891
7014
  }),
6892
7015
  jsx("input", {
6893
7016
  id: props.id,
6894
- className: css$24.input,
7017
+ className: css$25.input,
6895
7018
  type: "text",
6896
7019
  ...props.numeric === true ? { inputMode: "numeric" } : {},
6897
7020
  ...props.invalid ? { "aria-invalid": true } : {},
@@ -6905,12 +7028,12 @@ function SettingsValueField(props) {
6905
7028
  }),
6906
7029
  hasMessage ? jsx("p", {
6907
7030
  id: messageId,
6908
- className: props.invalid ? css$24.invalid : css$24.hint,
7031
+ className: props.invalid ? css$25.invalid : css$25.hint,
6909
7032
  children: props.invalid ? props.invalidLabel : props.hint
6910
7033
  }) : null,
6911
7034
  props.help !== void 0 && helpOpen ? jsx("div", {
6912
7035
  id: helpId,
6913
- className: css$24.help,
7036
+ className: css$25.help,
6914
7037
  role: "region",
6915
7038
  "aria-label": props.help.label,
6916
7039
  children: props.help.content
@@ -6928,16 +7051,16 @@ function SettingsValueField(props) {
6928
7051
  */
6929
7052
  function SettingsSecretField(props) {
6930
7053
  return jsxs("div", {
6931
- className: css$24.field,
7054
+ className: css$25.field,
6932
7055
  children: [
6933
7056
  jsxs("div", {
6934
- className: css$24.head,
7057
+ className: css$25.head,
6935
7058
  children: [jsx("label", {
6936
- className: css$24.label,
7059
+ className: css$25.label,
6937
7060
  htmlFor: props.id,
6938
7061
  children: props.label
6939
7062
  }), jsx("span", {
6940
- className: css$24.badges,
7063
+ className: css$25.badges,
6941
7064
  children: jsx(Tag, {
6942
7065
  tone: props.configured ? "neutral" : "quiet",
6943
7066
  children: props.stateLabel
@@ -6946,7 +7069,7 @@ function SettingsSecretField(props) {
6946
7069
  }),
6947
7070
  jsx("input", {
6948
7071
  id: props.id,
6949
- className: css$24.input,
7072
+ className: css$25.input,
6950
7073
  type: "password",
6951
7074
  autoComplete: "new-password",
6952
7075
  value: props.text,
@@ -6956,7 +7079,7 @@ function SettingsSecretField(props) {
6956
7079
  }
6957
7080
  }),
6958
7081
  jsx("p", {
6959
- className: css$24.hint,
7082
+ className: css$25.hint,
6960
7083
  children: props.hint
6961
7084
  })
6962
7085
  ]
@@ -8022,7 +8145,7 @@ function JsonCopyAction({ store, target, persistent, labels, onCopy, onClose })
8022
8145
  const object = typeof target.value === "object" && target.value !== null;
8023
8146
  const copyTitle = state === "copied" ? labels.copied : state === "failed" ? labels.copyFailed : object ? labels.copyPrettyJson : labels.copyValue;
8024
8147
  return jsx("span", {
8025
- className: css$25.copySlot,
8148
+ className: css$26.copySlot,
8026
8149
  children: (persistent || snapshot !== void 0) && jsx(Menu, {
8027
8150
  open: snapshot?.menuOpen === true,
8028
8151
  compact: true,
@@ -8031,7 +8154,7 @@ function JsonCopyAction({ store, target, persistent, labels, onCopy, onClose })
8031
8154
  anchor: jsx("button", {
8032
8155
  ref: buttonRef,
8033
8156
  type: "button",
8034
- className: css$25.actionButton,
8157
+ className: css$26.actionButton,
8035
8158
  "data-json-copy-button": true,
8036
8159
  "data-state": state,
8037
8160
  "aria-label": copyTitle,
@@ -8070,35 +8193,35 @@ function bracketOf(value) {
8070
8193
  }
8071
8194
  function previewPrimitive(value) {
8072
8195
  if (value === null) return jsx("span", {
8073
- className: css$25.keywordValue,
8196
+ className: css$26.keywordValue,
8074
8197
  children: "null"
8075
8198
  });
8076
8199
  if (typeof value === "string") return jsx("span", {
8077
- className: css$25.stringValue,
8200
+ className: css$26.stringValue,
8078
8201
  children: JSON.stringify(value)
8079
8202
  });
8080
8203
  if (typeof value === "number") return jsx("span", {
8081
- className: css$25.numberValue,
8204
+ className: css$26.numberValue,
8082
8205
  children: String(value)
8083
8206
  });
8084
8207
  if (typeof value === "boolean") return jsx("span", {
8085
- className: css$25.keywordValue,
8208
+ className: css$26.keywordValue,
8086
8209
  children: String(value)
8087
8210
  });
8088
8211
  if (typeof value === "bigint") return jsx("span", {
8089
- className: css$25.otherValue,
8212
+ className: css$26.otherValue,
8090
8213
  children: value.toString()
8091
8214
  });
8092
8215
  if (typeof value === "undefined") return jsx("span", {
8093
- className: css$25.otherValue,
8216
+ className: css$26.otherValue,
8094
8217
  children: "undefined"
8095
8218
  });
8096
8219
  if (typeof value === "symbol") return jsx("span", {
8097
- className: css$25.otherValue,
8220
+ className: css$26.otherValue,
8098
8221
  children: value.description ?? "Symbol"
8099
8222
  });
8100
8223
  if (typeof value === "function") return jsx("span", {
8101
- className: css$25.otherValue,
8224
+ className: css$26.otherValue,
8102
8225
  children: value.name || "Function"
8103
8226
  });
8104
8227
  return null;
@@ -8112,71 +8235,71 @@ function previewValue(value, depth) {
8112
8235
  const [open, close] = bracketOf(value);
8113
8236
  return jsxs(Fragment, { children: [
8114
8237
  jsx("span", {
8115
- className: css$25.punctuation,
8238
+ className: css$26.punctuation,
8116
8239
  children: open
8117
8240
  }),
8118
8241
  depth >= PREVIEW_DEPTH_LIMIT ? jsx("span", {
8119
- className: css$25.previewEllipsis,
8242
+ className: css$26.previewEllipsis,
8120
8243
  children: "…"
8121
8244
  }) : visible.map(([key, item], index) => jsxs("span", { children: [
8122
8245
  index > 0 && jsx("span", {
8123
- className: css$25.punctuation,
8246
+ className: css$26.punctuation,
8124
8247
  children: ", "
8125
8248
  }),
8126
8249
  !array && jsxs(Fragment, { children: [jsx("span", {
8127
- className: css$25.previewProperty,
8250
+ className: css$26.previewProperty,
8128
8251
  children: key
8129
8252
  }), jsx("span", {
8130
- className: css$25.punctuation,
8253
+ className: css$26.punctuation,
8131
8254
  children: ": "
8132
8255
  })] }),
8133
8256
  previewValue(item, depth + 1)
8134
8257
  ] }, key)),
8135
8258
  depth < PREVIEW_DEPTH_LIMIT && entries.length > limit && jsx("span", {
8136
- className: css$25.previewEllipsis,
8259
+ className: css$26.previewEllipsis,
8137
8260
  children: ", …"
8138
8261
  }),
8139
8262
  jsx("span", {
8140
- className: css$25.punctuation,
8263
+ className: css$26.punctuation,
8141
8264
  children: close
8142
8265
  })
8143
8266
  ] });
8144
8267
  }
8145
8268
  function primitiveValue(value) {
8146
8269
  if (value === null) return jsx("span", {
8147
- className: css$25.keywordValue,
8270
+ className: css$26.keywordValue,
8148
8271
  children: "null"
8149
8272
  });
8150
8273
  if (typeof value === "string") return jsx("span", {
8151
- className: css$25.stringValue,
8274
+ className: css$26.stringValue,
8152
8275
  children: JSON.stringify(value)
8153
8276
  });
8154
8277
  if (typeof value === "boolean") return jsx("span", {
8155
- className: css$25.keywordValue,
8278
+ className: css$26.keywordValue,
8156
8279
  children: String(value)
8157
8280
  });
8158
8281
  if (typeof value === "number") return jsx("span", {
8159
- className: css$25.numberValue,
8282
+ className: css$26.numberValue,
8160
8283
  children: String(value)
8161
8284
  });
8162
8285
  if (typeof value === "bigint") return jsx("span", {
8163
- className: css$25.numberValue,
8286
+ className: css$26.numberValue,
8164
8287
  children: `${value.toString()}n`
8165
8288
  });
8166
8289
  if (value instanceof Date) return jsx("span", {
8167
- className: css$25.otherValue,
8290
+ className: css$26.otherValue,
8168
8291
  children: value.toISOString()
8169
8292
  });
8170
8293
  if (typeof value === "function") return jsxs("span", {
8171
- className: css$25.otherValue,
8294
+ className: css$26.otherValue,
8172
8295
  children: ["function() ", "{ }"]
8173
8296
  });
8174
8297
  if (typeof value === "undefined") return jsx("span", {
8175
- className: css$25.otherValue,
8298
+ className: css$26.otherValue,
8176
8299
  children: "undefined"
8177
8300
  });
8178
8301
  return jsx("span", {
8179
- className: css$25.otherValue,
8302
+ className: css$26.otherValue,
8180
8303
  children: value.toString()
8181
8304
  });
8182
8305
  }
@@ -8204,7 +8327,7 @@ function moveFocus(button, direction) {
8204
8327
  function NodeField({ field, expandable, onToggle }) {
8205
8328
  if (field === void 0) return null;
8206
8329
  return jsxs("span", {
8207
- className: clsx(css$25.label, expandable && css$25.clickableLabel),
8330
+ className: clsx(css$26.label, expandable && css$26.clickableLabel),
8208
8331
  onClick: expandable ? onToggle : void 0,
8209
8332
  children: [fieldText(field), ":"]
8210
8333
  });
@@ -8241,7 +8364,7 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8241
8364
  if (!expanded) return;
8242
8365
  const raw = rawRef.current;
8243
8366
  const clips = [];
8244
- const tree = raw.closest(`.${css$25.root}`);
8367
+ const tree = raw.closest(`.${css$26.root}`);
8245
8368
  for (let parent = tree.parentElement; parent !== null; parent = parent.parentElement) if (/auto|scroll|hidden|clip/.test(getComputedStyle(parent).overflowY)) clips.push(parent);
8246
8369
  const measure = () => {
8247
8370
  let top = 0;
@@ -8270,33 +8393,33 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8270
8393
  if (expanded) {
8271
8394
  const fieldId = `${contentsId}-field`;
8272
8395
  return jsxs("div", {
8273
- className: css$25.stringField,
8396
+ className: css$26.stringField,
8274
8397
  "data-expanded": true,
8275
8398
  children: [
8276
8399
  field !== void 0 && jsxs("span", {
8277
8400
  id: fieldId,
8278
- className: css$25.label,
8401
+ className: css$26.label,
8279
8402
  children: [fieldText(field), ":"]
8280
8403
  }),
8281
8404
  jsx("pre", {
8282
8405
  ref: rawRef,
8283
8406
  id: contentsId,
8284
- className: css$25.stringRaw,
8407
+ className: css$26.stringRaw,
8285
8408
  "data-wrap": wrapped,
8286
8409
  tabIndex: 0,
8287
8410
  "aria-labelledby": field === void 0 ? void 0 : fieldId,
8288
8411
  children: value
8289
8412
  }),
8290
8413
  !lastElement && jsx("span", {
8291
- className: css$25.punctuation,
8414
+ className: css$26.punctuation,
8292
8415
  children: ","
8293
8416
  }),
8294
8417
  jsxs("div", {
8295
- className: css$25.stringActions,
8418
+ className: css$26.stringActions,
8296
8419
  children: [
8297
8420
  stringWrapping !== void 0 && jsx("button", {
8298
8421
  type: "button",
8299
- className: css$25.actionButton,
8422
+ className: css$26.actionButton,
8300
8423
  "aria-label": stringWrapping.label,
8301
8424
  title: stringWrapping.label,
8302
8425
  "aria-pressed": wrapped,
@@ -8310,7 +8433,7 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8310
8433
  }),
8311
8434
  jsx("button", {
8312
8435
  type: "button",
8313
- className: css$25.actionButton,
8436
+ className: css$26.actionButton,
8314
8437
  "aria-label": labels.collapseNode,
8315
8438
  title: labels.collapseNode,
8316
8439
  "aria-expanded": true,
@@ -8335,18 +8458,18 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8335
8458
  });
8336
8459
  }
8337
8460
  return jsxs(Fragment, { children: [renderCopy?.(), jsx("span", {
8338
- className: css$25.stringField,
8461
+ className: css$26.stringField,
8339
8462
  "data-expanded": expanded,
8340
8463
  children: jsxs("span", {
8341
8464
  ref: contentRef,
8342
8465
  id: contentsId,
8343
- className: css$25.stringText,
8466
+ className: css$26.stringText,
8344
8467
  children: [
8345
8468
  truncated && jsx("span", {
8346
- className: css$25.stringToggleSlot,
8469
+ className: css$26.stringToggleSlot,
8347
8470
  children: jsxs("button", {
8348
8471
  type: "button",
8349
- className: css$25.stringToggle,
8472
+ className: css$26.stringToggle,
8350
8473
  "aria-label": labels.expandNode,
8351
8474
  "aria-expanded": false,
8352
8475
  "aria-controls": contentsId,
@@ -8361,12 +8484,12 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8361
8484
  })
8362
8485
  }),
8363
8486
  field !== void 0 && jsxs("span", {
8364
- className: css$25.label,
8487
+ className: css$26.label,
8365
8488
  children: [fieldText(field), ":"]
8366
8489
  }),
8367
8490
  primitiveValue(value),
8368
8491
  !lastElement && jsx("span", {
8369
- className: css$25.punctuation,
8492
+ className: css$26.punctuation,
8370
8493
  children: ","
8371
8494
  })
8372
8495
  ]
@@ -8397,7 +8520,7 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8397
8520
  }
8398
8521
  };
8399
8522
  const row = (children, ariaExpanded) => jsxs("div", {
8400
- className: css$25.row,
8523
+ className: css$26.row,
8401
8524
  role: "treeitem",
8402
8525
  "aria-expanded": ariaExpanded,
8403
8526
  onMouseOver: (event) => {
@@ -8432,7 +8555,7 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8432
8555
  }),
8433
8556
  primitiveValue(value),
8434
8557
  !lastElement && jsx("span", {
8435
- className: css$25.punctuation,
8558
+ className: css$26.punctuation,
8436
8559
  children: ","
8437
8560
  })
8438
8561
  ] }));
@@ -8444,22 +8567,22 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8444
8567
  onToggle: toggle
8445
8568
  }),
8446
8569
  jsx("span", {
8447
- className: css$25.punctuation,
8570
+ className: css$26.punctuation,
8448
8571
  children: open
8449
8572
  }),
8450
8573
  jsx("span", {
8451
- className: css$25.punctuation,
8574
+ className: css$26.punctuation,
8452
8575
  children: close
8453
8576
  }),
8454
8577
  !lastElement && jsx("span", {
8455
- className: css$25.punctuation,
8578
+ className: css$26.punctuation,
8456
8579
  children: ","
8457
8580
  })
8458
8581
  ] }));
8459
8582
  return row(jsxs(Fragment, { children: [
8460
8583
  jsx("span", {
8461
8584
  ref: expanderRef,
8462
- className: clsx(css$25.expander, expanded ? css$25.collapseIcon : css$25.expandIcon),
8585
+ className: clsx(css$26.expander, expanded ? css$26.collapseIcon : css$26.expandIcon),
8463
8586
  "data-json-expander": true,
8464
8587
  role: "button",
8465
8588
  "aria-label": expanded ? labels.collapseNode : labels.expandNode,
@@ -8473,7 +8596,7 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8473
8596
  onKeyDown: onExpanderKeyDown
8474
8597
  }),
8475
8598
  jsxs("span", {
8476
- className: css$25.summary,
8599
+ className: css$26.summary,
8477
8600
  children: [
8478
8601
  jsx(NodeField, {
8479
8602
  field,
@@ -8481,11 +8604,11 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8481
8604
  onToggle: toggle
8482
8605
  }),
8483
8606
  jsx("span", {
8484
- className: css$25.preview,
8607
+ className: css$26.preview,
8485
8608
  children: previewValue(value, 0)
8486
8609
  }),
8487
8610
  !lastElement && jsx("span", {
8488
- className: css$25.punctuation,
8611
+ className: css$26.punctuation,
8489
8612
  children: ","
8490
8613
  })
8491
8614
  ]
@@ -8493,7 +8616,7 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8493
8616
  expanded && jsx("ul", {
8494
8617
  id: contentsId,
8495
8618
  role: "group",
8496
- className: css$25.children,
8619
+ className: css$26.children,
8497
8620
  children: entries.map(([key, item], index) => jsx(JsonTreeNode, {
8498
8621
  collapsedStringLines,
8499
8622
  stringWrapping,
@@ -8625,17 +8748,17 @@ function JsonTree({ data, label, className, collapsedStringLines = 3, stringWrap
8625
8748
  onClose: clearCopyTarget
8626
8749
  }) : void 0;
8627
8750
  return jsx("div", {
8628
- className: clsx(css$25.root, className),
8751
+ className: clsx(css$26.root, className),
8629
8752
  style: { "--json-tree-collapsed-lines": collapsedStringLines },
8630
8753
  onMouseOver: handleRootMouseOver,
8631
8754
  onMouseLeave: () => {
8632
8755
  if (!copyStore.get()?.menuOpen) clearCopyTarget();
8633
8756
  },
8634
8757
  children: expandTopLevel ? jsxs("div", {
8635
- className: css$25.expandedTopLevel,
8758
+ className: css$26.expandedTopLevel,
8636
8759
  children: [
8637
8760
  jsxs("div", {
8638
- className: clsx(css$25.row, css$25.topLevelBracket),
8761
+ className: clsx(css$26.row, css$26.topLevelBracket),
8639
8762
  "data-json-root-row": true,
8640
8763
  onMouseOver: (event) => {
8641
8764
  event.stopPropagation();
@@ -8648,13 +8771,13 @@ function JsonTree({ data, label, className, collapsedStringLines = 3, stringWrap
8648
8771
  path: [],
8649
8772
  value: data
8650
8773
  }), jsx("span", {
8651
- className: css$25.punctuation,
8774
+ className: css$26.punctuation,
8652
8775
  children: rootOpen
8653
8776
  })]
8654
8777
  }),
8655
8778
  jsx("div", {
8656
8779
  "aria-label": label,
8657
- className: clsx(css$25.container, css$25.expandedTopLevelContainer),
8780
+ className: clsx(css$26.container, css$26.expandedTopLevelContainer),
8658
8781
  role: "tree",
8659
8782
  children: rootEntries.map(([key, value], index) => jsx(JsonTreeNode, {
8660
8783
  collapsedStringLines,
@@ -8672,16 +8795,16 @@ function JsonTree({ data, label, className, collapsedStringLines = 3, stringWrap
8672
8795
  }, key))
8673
8796
  }),
8674
8797
  jsx("div", {
8675
- className: clsx(css$25.row, css$25.topLevelBracket),
8798
+ className: clsx(css$26.row, css$26.topLevelBracket),
8676
8799
  children: jsx("span", {
8677
- className: css$25.punctuation,
8800
+ className: css$26.punctuation,
8678
8801
  children: rootClose
8679
8802
  })
8680
8803
  })
8681
8804
  ]
8682
8805
  }) : jsx("div", {
8683
8806
  "aria-label": label,
8684
- className: css$25.container,
8807
+ className: css$26.container,
8685
8808
  role: "tree",
8686
8809
  children: jsx(JsonTreeNode, {
8687
8810
  collapsedStringLines,
@@ -9244,67 +9367,67 @@ function TerminalBlock({ command, cwd, home, output, exitCode, signal, running =
9244
9367
  const { hidden, capped, headLines, tailLines } = headTailCap(lines.length, maxLines, expanded);
9245
9368
  const body = !running || !empty;
9246
9369
  return jsxs("div", {
9247
- className: clsx(css$26.block, className),
9370
+ className: clsx(css$27.block, className),
9248
9371
  "data-terminal": "",
9249
9372
  "data-running": running ? "" : void 0,
9250
9373
  "data-body": body ? "" : void 0,
9251
9374
  children: [jsxs("div", {
9252
- className: css$26.header,
9375
+ className: css$27.header,
9253
9376
  children: [
9254
9377
  jsxs("div", {
9255
- className: css$26.prompt,
9378
+ className: css$27.prompt,
9256
9379
  children: [runStateDot && jsx("span", {
9257
- className: css$26.runStateLabel,
9380
+ className: css$27.runStateLabel,
9258
9381
  children: state.label
9259
9382
  }), commandLines.map((line, index) => jsxs("div", {
9260
- className: css$26.promptLine,
9383
+ className: css$27.promptLine,
9261
9384
  children: [
9262
9385
  index === 0 && runStateDot && jsx(StateDot, {
9263
9386
  state: state.state,
9264
- className: css$26.runState
9387
+ className: css$27.runState
9265
9388
  }),
9266
9389
  jsx("span", {
9267
- className: css$26.cwd,
9390
+ className: css$27.cwd,
9268
9391
  children: index > 0 || cwd === void 0 ? "$" : promptLabel(cwd, home)
9269
9392
  }),
9270
9393
  jsx("span", {
9271
- className: css$26.command,
9394
+ className: css$27.command,
9272
9395
  children: line
9273
9396
  })
9274
9397
  ]
9275
9398
  }, index))]
9276
9399
  }),
9277
9400
  status !== void 0 && jsx(Pill, {
9278
- className: css$26.status,
9401
+ className: css$27.status,
9279
9402
  children: status
9280
9403
  }),
9281
9404
  (copyText !== void 0 || !running && !empty) && jsx("button", {
9282
9405
  type: "button",
9283
- className: css$26.copyButton,
9406
+ className: css$27.copyButton,
9284
9407
  onClick: onCopy,
9285
9408
  children: copied ? copy.copied : copy.copy
9286
9409
  })
9287
9410
  ]
9288
9411
  }), body && (empty ? jsx("div", {
9289
- className: css$26.empty,
9412
+ className: css$27.empty,
9290
9413
  children: copy.noOutput
9291
9414
  }) : jsxs("div", {
9292
- className: css$26.output,
9415
+ className: css$27.output,
9293
9416
  children: [
9294
9417
  (capped ? lines.slice(0, headLines) : lines).map((line, index) => jsx("div", {
9295
- className: css$26.line,
9418
+ className: css$27.line,
9296
9419
  children: renderLine$1(line)
9297
9420
  }, index)),
9298
9421
  hidden > 0 && jsx("button", {
9299
9422
  type: "button",
9300
- className: css$26.expand,
9423
+ className: css$27.expand,
9301
9424
  "aria-expanded": expanded,
9302
9425
  "aria-label": expanded ? copy.collapseAria : copy.expandAria(hidden),
9303
9426
  onClick: onToggle,
9304
9427
  children: expanded ? copy.collapse : copy.expand(hidden)
9305
9428
  }),
9306
9429
  capped && lines.slice(lines.length - tailLines).map((line, index) => jsx("div", {
9307
- className: css$26.line,
9430
+ className: css$27.line,
9308
9431
  children: renderLine$1(line)
9309
9432
  }, index))
9310
9433
  ]
@@ -9507,13 +9630,13 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
9507
9630
  const tailLines = maxLines - headLines;
9508
9631
  const windowed = lines.length < totalLines;
9509
9632
  const rows = (slice) => slice.map(([line, spans]) => jsxs("div", {
9510
- className: css$27.line,
9633
+ className: css$28.line,
9511
9634
  children: [jsx("span", {
9512
- className: css$27.gutter,
9635
+ className: css$28.gutter,
9513
9636
  "aria-hidden": true,
9514
9637
  children: line.number
9515
9638
  }), jsx("span", {
9516
- className: css$27.content,
9639
+ className: css$28.content,
9517
9640
  children: spans === void 0 ? line.text : renderSpans(spans)
9518
9641
  })]
9519
9642
  }, line.number));
@@ -9521,7 +9644,7 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
9521
9644
  const paired = lines.map((line, index) => [line, highlighted?.[index]]);
9522
9645
  return jsxs("div", {
9523
9646
  ref: rootRef,
9524
- className: clsx(cardCss.card, css$27.block, className),
9647
+ className: clsx(cardCss.card, css$28.block, className),
9525
9648
  "data-read": "",
9526
9649
  "data-code-wrap": wrapped,
9527
9650
  style: gutterStyle,
@@ -9543,7 +9666,7 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
9543
9666
  children: [
9544
9667
  rows(capped ? paired.slice(0, headLines) : paired),
9545
9668
  hidden > 0 && jsx(FoldToggle, {
9546
- className: css$27.expand,
9669
+ className: css$28.expand,
9547
9670
  expanded,
9548
9671
  hidden,
9549
9672
  labels,
@@ -9565,11 +9688,11 @@ function assertNever(value) {
9565
9688
  }
9566
9689
  /** The dim class per row kind (path/gap chrome vs the diff's own +/- colors). */
9567
9690
  const ROW_CLASS = {
9568
- path: css$28.path,
9569
- del: css$28.del,
9570
- add: css$28.add,
9571
- context: css$28.context,
9572
- gap: css$28.gap
9691
+ path: css$29.path,
9692
+ del: css$29.del,
9693
+ add: css$29.add,
9694
+ context: css$29.context,
9695
+ gap: css$29.gap
9573
9696
  };
9574
9697
  /** Bound synchronous edit-graph search; one replacement consumes two edits. */
9575
9698
  const MAX_DIFF_EDIT_LENGTH = 256;
@@ -9703,7 +9826,7 @@ function DiffBlock({ diffs, labels, maxLines = 16, className }) {
9703
9826
  const head = capped ? rows.slice(0, headLines) : rows;
9704
9827
  const tail = capped ? rows.slice(rows.length - tailLines) : [];
9705
9828
  return jsxs("div", {
9706
- className: clsx(cardCss.card, css$28.block, className),
9829
+ className: clsx(cardCss.card, css$29.block, className),
9707
9830
  "data-diff": "",
9708
9831
  "data-code-wrap": wrapped,
9709
9832
  children: [jsx(CodeToolbar, {
@@ -9718,21 +9841,21 @@ function DiffBlock({ diffs, labels, maxLines = 16, className }) {
9718
9841
  setWrapped((value) => !value);
9719
9842
  }
9720
9843
  }), jsxs("div", {
9721
- className: css$28.body,
9844
+ className: css$29.body,
9722
9845
  children: [
9723
9846
  head.map((row, index) => jsx("div", {
9724
- className: clsx(css$28.line, ROW_CLASS[row.kind]),
9847
+ className: clsx(css$29.line, ROW_CLASS[row.kind]),
9725
9848
  children: row.text
9726
9849
  }, index)),
9727
9850
  hidden > 0 && jsx(FoldToggle, {
9728
- className: css$28.expand,
9851
+ className: css$29.expand,
9729
9852
  expanded,
9730
9853
  hidden,
9731
9854
  labels,
9732
9855
  onToggle
9733
9856
  }),
9734
9857
  tail.map((row, index) => jsx("div", {
9735
- className: clsx(css$28.line, ROW_CLASS[row.kind]),
9858
+ className: clsx(css$29.line, ROW_CLASS[row.kind]),
9736
9859
  children: row.text
9737
9860
  }, index))
9738
9861
  ]
@@ -9862,56 +9985,56 @@ function SearchBlock(props) {
9862
9985
  const tail = tailHeader === void 0 ? naturalTail : naturalTail.slice(1);
9863
9986
  const renderRow = (row) => {
9864
9987
  if (row.type === "path") return jsx("div", {
9865
- className: css$29.line,
9988
+ className: css$30.line,
9866
9989
  children: row.path
9867
9990
  });
9868
9991
  if (row.type === "match") return jsxs("div", {
9869
- className: css$29.line,
9992
+ className: css$30.line,
9870
9993
  children: [jsxs("span", {
9871
- className: css$29.lineNumber,
9994
+ className: css$30.lineNumber,
9872
9995
  children: [row.lineNumber, ": "]
9873
9996
  }), row.line]
9874
9997
  });
9875
9998
  return jsxs("button", {
9876
9999
  type: "button",
9877
- className: css$29.fileHeader,
10000
+ className: css$30.fileHeader,
9878
10001
  "aria-expanded": !row.collapsed,
9879
10002
  onClick: () => {
9880
10003
  toggleFile(row.index);
9881
10004
  },
9882
10005
  children: [jsx("span", {
9883
- className: css$29.filePath,
10006
+ className: css$30.filePath,
9884
10007
  children: row.path
9885
10008
  }), jsx("span", {
9886
- className: css$29.fileCount,
10009
+ className: css$30.fileCount,
9887
10010
  children: row.count
9888
10011
  })]
9889
10012
  });
9890
10013
  };
9891
10014
  return jsxs("div", {
9892
- className: clsx(css$29.block, className),
10015
+ className: clsx(css$30.block, className),
9893
10016
  "data-search": props.kind,
9894
10017
  children: [jsxs("div", {
9895
- className: css$29.header,
10018
+ className: css$30.header,
9896
10019
  children: [jsx("span", {
9897
- className: css$29.summary,
10020
+ className: css$30.summary,
9898
10021
  children: summaryText(props, shown, truncated, total)
9899
10022
  }), !empty && jsx("button", {
9900
10023
  type: "button",
9901
- className: css$29.copyButton,
10024
+ className: css$30.copyButton,
9902
10025
  onClick: onCopy,
9903
10026
  children: copied ? props.labels.copied : props.labels.copy
9904
10027
  })]
9905
10028
  }), empty ? jsx("div", {
9906
- className: css$29.empty,
10029
+ className: css$30.empty,
9907
10030
  children: props.labels.noResults
9908
10031
  }) : jsxs("div", {
9909
- className: css$29.body,
10032
+ className: css$30.body,
9910
10033
  children: [
9911
10034
  head.map((row) => jsx("div", { children: renderRow(row) }, rowKey(row))),
9912
10035
  hidden > 0 && jsx("button", {
9913
10036
  type: "button",
9914
- className: css$29.expand,
10037
+ className: css$30.expand,
9915
10038
  "aria-expanded": expanded,
9916
10039
  "aria-label": expanded ? props.labels.collapseAria : props.labels.expandAria(hidden),
9917
10040
  onClick: onToggle,
@@ -10741,7 +10864,7 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
10741
10864
  });
10742
10865
  }, [copied, trimmed]);
10743
10866
  const body = streamedBody !== void 0 ? streamedBody : html === void 0 ? jsx("pre", {
10744
- className: css$30.plain,
10867
+ className: css$31.plain,
10745
10868
  children: jsx("code", { children: sourceLines === void 0 ? trimmed : sourceLines.map((line, index) => jsxs(Fragment$1, { children: [index > 0 && "\n", jsx("span", {
10746
10869
  className: "line",
10747
10870
  children: line
@@ -10749,12 +10872,12 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
10749
10872
  }) : jsx("div", { dangerouslySetInnerHTML: { __html: html } });
10750
10873
  return jsxs("div", {
10751
10874
  ref: rootRef,
10752
- className: clsx(css$30.block, "md-code-block", lineNumbers && css$30.numbered, toolbarLabels !== void 0 && css$30.card, className),
10875
+ className: clsx(css$31.block, "md-code-block", lineNumbers && css$31.numbered, toolbarLabels !== void 0 && css$31.card, className),
10753
10876
  "data-line-numbers": lineNumbers || void 0,
10754
10877
  "data-code-wrap": toolbarLabels === void 0 ? void 0 : wrapped,
10755
10878
  style: sourceLines === void 0 ? void 0 : { "--dsl-code-block-line-number-width": `${Math.max(2, String(sourceLines.length).length)}ch` },
10756
10879
  children: [showHeader && jsx("div", {
10757
- className: css$30.bannerWrap,
10880
+ className: css$31.bannerWrap,
10758
10881
  children: toolbarLabels !== void 0 ? jsx(CodeToolbar, {
10759
10882
  lang,
10760
10883
  labels: toolbarLabels,
@@ -10767,16 +10890,16 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
10767
10890
  setWrapped((value) => !value);
10768
10891
  } : void 0
10769
10892
  }) : jsxs("div", {
10770
- className: css$30.banner,
10893
+ className: css$31.banner,
10771
10894
  "data-code-block-banner": true,
10772
10895
  children: [jsx("div", {
10773
- className: css$30.infostring,
10896
+ className: css$31.infostring,
10774
10897
  children: lang ?? ""
10775
10898
  }), jsx("div", {
10776
- className: css$30.action,
10899
+ className: css$31.action,
10777
10900
  children: jsx("button", {
10778
10901
  type: "button",
10779
- className: css$30.copyButton,
10902
+ className: css$31.copyButton,
10780
10903
  onClick: onCopy,
10781
10904
  children: copied ? copiedLabel : copyLabel
10782
10905
  })
@@ -10784,7 +10907,7 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
10784
10907
  })
10785
10908
  }), jsx("div", {
10786
10909
  ref: contentRef,
10787
- className: css$30.content,
10910
+ className: css$31.content,
10788
10911
  "data-code-block-content": true,
10789
10912
  children: body
10790
10913
  })]
@@ -10974,25 +11097,25 @@ function ImageLightbox({ src, alt, labels, onClose }) {
10974
11097
  };
10975
11098
  }, [onClose]);
10976
11099
  return createPortal(jsxs("div", {
10977
- className: css$31.backdrop,
11100
+ className: css$32.backdrop,
10978
11101
  role: "dialog",
10979
11102
  "aria-modal": "true",
10980
11103
  "aria-label": labels.dialog,
10981
11104
  children: [
10982
11105
  jsx("div", {
10983
- className: css$31.mask,
11106
+ className: css$32.mask,
10984
11107
  "aria-hidden": "true",
10985
11108
  onMouseDown: onClose
10986
11109
  }),
10987
11110
  jsx("img", {
10988
- className: css$31.image,
11111
+ className: css$32.image,
10989
11112
  src,
10990
11113
  alt
10991
11114
  }),
10992
11115
  jsx("button", {
10993
11116
  ref: closeRef,
10994
11117
  type: "button",
10995
- className: css$31.close,
11118
+ className: css$32.close,
10996
11119
  "aria-label": labels.close,
10997
11120
  onClick: onClose,
10998
11121
  children: jsx(IconCloseOutlineRegular, { size: 16 })
@@ -11019,14 +11142,14 @@ function ImagePreview({ src, alt, loadingLabel, failedLabel }) {
11019
11142
  function Preview({ src, alt, loadingLabel, failedLabel }) {
11020
11143
  const [state, setState] = useState("loading");
11021
11144
  return jsxs("span", {
11022
- className: css$32.frame,
11145
+ className: css$33.frame,
11023
11146
  children: [state !== "failed" && jsx("img", {
11024
11147
  src,
11025
11148
  alt,
11026
11149
  loading: "lazy",
11027
11150
  decoding: "async",
11028
11151
  referrerPolicy: "no-referrer",
11029
- className: css$32.image,
11152
+ className: css$33.image,
11030
11153
  "data-ready": state === "ready" || void 0,
11031
11154
  onLoad: () => {
11032
11155
  setState("ready");
@@ -11035,7 +11158,7 @@ function Preview({ src, alt, loadingLabel, failedLabel }) {
11035
11158
  setState("failed");
11036
11159
  }
11037
11160
  }), state !== "ready" && jsxs("span", {
11038
- className: css$32.status,
11161
+ className: css$33.status,
11039
11162
  role: "status",
11040
11163
  children: [state === "loading" && jsx(IconLoadingOutlineRegular, { size: 16 }), jsx("span", { children: state === "loading" ? loadingLabel : failedLabel })]
11041
11164
  })]
@@ -11774,7 +11897,7 @@ function SafeLink({ url, label, className }) {
11774
11897
  children: [jsx(LinkIconMedium, {
11775
11898
  kind: "url",
11776
11899
  href,
11777
- className: css$33.linkIcon
11900
+ className: css$34.linkIcon
11778
11901
  }), label]
11779
11902
  });
11780
11903
  }
@@ -11789,20 +11912,20 @@ function SafeLink({ url, label, className }) {
11789
11912
  */
11790
11913
  function SourceItem({ source, ordinal }) {
11791
11914
  return jsxs("li", {
11792
- className: css$33.source,
11915
+ className: css$34.source,
11793
11916
  value: ordinal,
11794
11917
  children: [
11795
11918
  jsx(SafeLink, {
11796
11919
  url: source.url,
11797
11920
  label: linkLabel(source.url, source.title),
11798
- className: css$33.sourceLink
11921
+ className: css$34.sourceLink
11799
11922
  }),
11800
11923
  source.snippet !== void 0 && source.snippet !== "" && jsx("div", {
11801
- className: css$33.snippet,
11924
+ className: css$34.snippet,
11802
11925
  children: source.snippet
11803
11926
  }),
11804
11927
  source.publishedAt !== void 0 && source.publishedAt !== "" && jsx("div", {
11805
- className: css$33.published,
11928
+ className: css$34.published,
11806
11929
  children: source.publishedAt
11807
11930
  })
11808
11931
  ]
@@ -11817,28 +11940,28 @@ function SourceItem({ source, ordinal }) {
11817
11940
  function WebSearchBlock({ answer, sources, truncated, labels, className }) {
11818
11941
  const empty = (answer === void 0 || answer === "") && sources.length === 0;
11819
11942
  return jsxs("div", {
11820
- className: clsx(css$33.block, className),
11943
+ className: clsx(css$34.block, className),
11821
11944
  "data-web": "search",
11822
11945
  children: [
11823
11946
  answer !== void 0 && answer !== "" && jsx("div", {
11824
- className: css$33.answer,
11947
+ className: css$34.answer,
11825
11948
  children: jsx(MarkdownText, {
11826
11949
  text: answer,
11827
11950
  labels: labels.markdown
11828
11951
  })
11829
11952
  }),
11830
11953
  empty ? jsx("div", {
11831
- className: css$33.empty,
11954
+ className: css$34.empty,
11832
11955
  children: labels.noResults
11833
11956
  }) : jsx("ol", {
11834
- className: css$33.sources,
11957
+ className: css$34.sources,
11835
11958
  children: sources.map((source, index) => jsx(SourceItem, {
11836
11959
  source,
11837
11960
  ordinal: index + 1
11838
11961
  }, index))
11839
11962
  }),
11840
11963
  truncated && jsx("div", {
11841
- className: css$33.truncated,
11964
+ className: css$34.truncated,
11842
11965
  children: labels.sourcesTruncated
11843
11966
  })
11844
11967
  ]
@@ -11851,23 +11974,23 @@ function WebSearchBlock({ answer, sources, truncated, labels, className }) {
11851
11974
  */
11852
11975
  function WebFetchBlock({ url, statusCode, truncated, labels, className }) {
11853
11976
  return jsxs("div", {
11854
- className: clsx(css$33.block, css$33.fetch, className),
11977
+ className: clsx(css$34.block, css$34.fetch, className),
11855
11978
  "data-web": "fetch",
11856
11979
  children: [jsx(SafeLink, {
11857
11980
  url,
11858
11981
  label: url,
11859
- className: css$33.fetchUrl
11982
+ className: css$34.fetchUrl
11860
11983
  }), jsxs("div", {
11861
- className: css$33.fetchMeta,
11984
+ className: css$34.fetchMeta,
11862
11985
  children: [jsxs("span", {
11863
- className: css$33.status,
11986
+ className: css$34.status,
11864
11987
  children: [
11865
11988
  labels.http,
11866
11989
  " ",
11867
11990
  statusCode
11868
11991
  ]
11869
11992
  }), truncated && jsx("span", {
11870
- className: css$33.truncated,
11993
+ className: css$34.truncated,
11871
11994
  children: labels.contentTruncated
11872
11995
  })]
11873
11996
  })]
@@ -11901,10 +12024,10 @@ function JsonBlock({ label, payload, defaultOpen = false, truncatedLabel }) {
11901
12024
  truncatedLabel
11902
12025
  ]);
11903
12026
  return jsxs("div", {
11904
- className: css$34.root,
12027
+ className: css$35.root,
11905
12028
  children: [jsxs("button", {
11906
12029
  type: "button",
11907
- className: css$34.toggle,
12030
+ className: css$35.toggle,
11908
12031
  onClick: () => {
11909
12032
  setOpen((v) => !v);
11910
12033
  },
@@ -11914,7 +12037,7 @@ function JsonBlock({ label, payload, defaultOpen = false, truncatedLabel }) {
11914
12037
  label
11915
12038
  ]
11916
12039
  }), open && jsx("pre", {
11917
- className: css$34.body,
12040
+ className: css$35.body,
11918
12041
  children: body
11919
12042
  })]
11920
12043
  });
@@ -12255,6 +12378,6 @@ function GuideArtworkFiles({ size = 36, className }) {
12255
12378
  });
12256
12379
  }
12257
12380
  //#endregion
12258
- export { BrandWordmark, Button, CODE_HIGHLIGHT_EXTENSIONS, Checkbox, CodeBlock, ConnectionIndicator, DEFAULT_DIFF_MAX_LINES, DEFAULT_READ_MAX_LINES, DEFAULT_SEARCH_MAX_LINES, DEFAULT_TERMINAL_MAX_LINES, DiffBlock, DisclosureRow, FISH_LOGO_PATH, FISH_LOGO_VIEWBOX, FileTypeIcon, FishLogo, GuideArtworkBrowser, GuideArtworkFiles, HoverCard, ICON_MEDIUM_STROKE, ICON_REGULAR_STROKE, IconAgentPresetOutlineMedium, IconAgentPresetOutlineRegular, IconAlarmClockOutlineMedium, IconAlarmClockOutlineRegular, IconApiOutlineMedium, IconApiOutlineRegular, IconArchiveCheckOutlineMedium, IconArchiveCheckOutlineRegular, IconArchiveOffOutlineMedium, IconArchiveOffOutlineRegular, IconArchiveOutlineMedium, IconArchiveOutlineRegular, IconBranchOutlineMedium, IconBranchOutlineRegular, IconBrowseOutlineMedium, IconBrowseOutlineRegular, IconCheckCircleFillMedium, IconCheckCircleFillRegular, IconCheckCircleOutlineMedium, IconCheckCircleOutlineRegular, IconCheckOutlineMedium, IconCheckOutlineRegular, IconChecklistOutlineMedium, IconChecklistOutlineRegular, IconChevronDownOutlineMedium, IconChevronDownOutlineRegular, IconChevronLeftOutlineMedium, IconChevronLeftOutlineRegular, IconChevronRightOutlineMedium, IconChevronRightOutlineRegular, IconChevronUpOutlineMedium, IconChevronUpOutlineRegular, IconChevronsUpDownOutlineMedium, IconChevronsUpDownOutlineRegular, IconClockOutlineMedium, IconClockOutlineRegular, IconCloseCircleFillMedium, IconCloseCircleFillRegular, IconCloseFillMedium, IconCloseFillRegular, IconCloseOutlineMedium, IconCloseOutlineRegular, IconCodeOutlineMedium, IconCodeOutlineRegular, IconCompactOutlineMedium, IconCompactOutlineRegular, IconCompareSplitOutlineMedium, IconCompareSplitOutlineRegular, IconContextInjectionOutlineMedium, IconContextInjectionOutlineRegular, IconCopyOutlineMedium, IconCopyOutlineRegular, IconCordisPluginOutlineMedium, IconCordisPluginOutlineRegular, IconDarkOutlineMedium, IconDarkOutlineRegular, IconDataOutlineMedium, IconDataOutlineRegular, IconDatabaseOutlineMedium, IconDatabaseOutlineRegular, IconDeliverDocMedium, IconDeliverDocRegular, IconDislikeFillMedium, IconDislikeFillRegular, IconDislikeOutlineMedium, IconDislikeOutlineRegular, IconDownloadOutlineMedium, IconDownloadOutlineRegular, IconEditOutlineMedium, IconEditOutlineRegular, IconEllipsisOutlineMedium, IconEllipsisOutlineRegular, IconEnhanceOutlineMedium, IconEnhanceOutlineRegular, IconFlatListOutlineMedium, IconFlatListOutlineRegular, IconFolderCloseMedium, IconFolderCloseRegular, IconFolderOpenMedium, IconFolderOpenOutlineMedium, IconFolderOpenOutlineRegular, IconFolderOpenRegular, IconFollowsystemOutlineMedium, IconFollowsystemOutlineRegular, IconFullscreenOutlineMedium, IconFullscreenOutlineRegular, IconGaugeOutlineMedium, IconGaugeOutlineRegular, IconGlobeOutlineMedium, IconGlobeOutlineRegular, IconGoalOutlineMedium, IconGoalOutlineRegular, IconInfoOutlineMedium, IconInfoOutlineRegular, IconInspectOutlineMedium, IconInspectOutlineRegular, IconLightOutlineMedium, IconLightOutlineRegular, IconLikeFillMedium, IconLikeFillRegular, IconLikeOutlineMedium, IconLikeOutlineRegular, IconLinkOutlineMedium, IconLinkOutlineRegular, IconListPenOutlineMedium, IconListPenOutlineRegular, IconLoadingOutlineMedium, IconLoadingOutlineRegular, IconMicrophoneOutlineMedium, IconMicrophoneOutlineRegular, IconNewChatOutlineMedium, IconNewChatOutlineRegular, IconNowrapFillMedium, IconNowrapFillRegular, IconPanelLeftOutlineMedium, IconPanelLeftOutlineRegular, IconPaperPlaneOutlineMedium, IconPaperPlaneOutlineRegular, IconPaperclipOutlineMedium, IconPaperclipOutlineRegular, IconPauseOutlineMedium, IconPauseOutlineRegular, IconPersonalizationOutlineMedium, IconPersonalizationOutlineRegular, IconPinFillMedium, IconPinFillRegular, IconPinOutlineMedium, IconPinOutlineRegular, IconPlanOutlineMedium, IconPlanOutlineRegular, IconPlayOutlineMedium, IconPlayOutlineRegular, IconPluginPinwheelOutlineMedium, IconPluginPinwheelOutlineRegular, IconPlusOutlineMedium, IconPlusOutlineRegular, IconProjectAddOutlineMedium, IconProjectAddOutlineRegular, IconQuestionOutlineMedium, IconQuestionOutlineRegular, IconQueueOutlineMedium, IconQueueOutlineRegular, IconRefreshOutlineMedium, IconRefreshOutlineRegular, IconRightUpOutlineMedium, IconRightUpOutlineRegular, IconSearchOutlineMedium, IconSearchOutlineRegular, IconSendOutlineMedium, IconSendOutlineRegular, IconSettingsOutlineMedium, IconSettingsOutlineRegular, IconShareOutlineMedium, IconShareOutlineRegular, IconShieldOutlineMedium, IconShieldOutlineRegular, IconSkillOutlineMedium, IconSkillOutlineRegular, IconSlidersTwoOutlineMedium, IconSlidersTwoOutlineRegular, IconSparkleMedium, IconSparkleRegular, IconStopFillMedium, IconStopFillRegular, IconThinkOutlineMedium, IconThinkOutlineRegular, IconTrashOutlineMedium, IconTrashOutlineRegular, IconTreeCornerMedium, IconTreeCornerRegular, IconTriangleRightFillMedium, IconTriangleRightFillRegular, IconUnarchiveOutlineMedium, IconUnarchiveOutlineRegular, IconUserOutlineMedium, IconUserOutlineRegular, IconUsersOutlineMedium, IconUsersOutlineRegular, IconWarningOutlineMedium, IconWarningOutlineRegular, IconWarningTriangleOutlineMedium, IconWarningTriangleOutlineRegular, IconWorkspaceTreeOutlineMedium, IconWorkspaceTreeOutlineRegular, IconWrapFillMedium, IconWrapFillRegular, IconWrapLinesOutlineMedium, IconWrapLinesOutlineRegular, ImageLightbox, Input, JsonBlock, JsonTree, LinkIconMedium, LinkIconRegular, MarkdownDelegateProvider, MarkdownText, Menu, MenuItemButton, MenuSurface, Modal, PathLabel, PermissionIconFullAccessMedium, PermissionIconFullAccessRegular, PermissionIconReadOnlyMedium, PermissionIconReadOnlyRegular, PermissionIconWorkspaceWriteMedium, PermissionIconWorkspaceWriteRegular, Pill, PluginArtworkDefault, PluginArtworkLoop, PluginArtworkSearch, PluginArtworkSubagent, PluginArtworkTerminal, ReadBlock, ReferenceIconMedium, ReferenceIconRegular, RiskConfirmation, SHIELD_OUTLINE_PATH, SearchBlock, SegmentedControl, SegmentedTabs, SettingsForm, SettingsFormModel, SettingsSecretField, SettingsValueField, ShortcutKeys, StateDot, Switch, Tag, TerminalBlock, TextShimmer, Toast, Tooltip, WebBlock, classifyFileType, classifyLinkPath, closeTopModal, diffTotals, extractMarkdownPlainText, fileExtension, fileSizeText, focusWithoutRing, isBehindModal, isDarwinDesktop, languageForPath, modalSelector, observeComposition, pointerModality, projectUserText, rankByName, relativeTime, settingsNumberField, settingsTextField, useAnchoredMaxHeight, useAnchoredPosition, useCodeHighlighter, useDismissOnOutsidePointer, useModalLayer, writeClipboard };
12381
+ export { BrandWordmark, Button, CODE_HIGHLIGHT_EXTENSIONS, Checkbox, CodeBlock, ConnectionIndicator, DEFAULT_DIFF_MAX_LINES, DEFAULT_READ_MAX_LINES, DEFAULT_SEARCH_MAX_LINES, DEFAULT_TERMINAL_MAX_LINES, DiffBlock, DisclosureRow, FISH_LOGO_PATH, FISH_LOGO_VIEWBOX, FileTypeIcon, FishLogo, GuideArtworkBrowser, GuideArtworkFiles, HoverCard, ICON_MEDIUM_STROKE, ICON_REGULAR_STROKE, IconAgentPresetOutlineMedium, IconAgentPresetOutlineRegular, IconAlarmClockOutlineMedium, IconAlarmClockOutlineRegular, IconApiOutlineMedium, IconApiOutlineRegular, IconArchiveCheckOutlineMedium, IconArchiveCheckOutlineRegular, IconArchiveOffOutlineMedium, IconArchiveOffOutlineRegular, IconArchiveOutlineMedium, IconArchiveOutlineRegular, IconBranchOutlineMedium, IconBranchOutlineRegular, IconBrowseOutlineMedium, IconBrowseOutlineRegular, IconCheckCircleFillMedium, IconCheckCircleFillRegular, IconCheckCircleOutlineMedium, IconCheckCircleOutlineRegular, IconCheckOutlineMedium, IconCheckOutlineRegular, IconChecklistOutlineMedium, IconChecklistOutlineRegular, IconChevronDownOutlineMedium, IconChevronDownOutlineRegular, IconChevronLeftOutlineMedium, IconChevronLeftOutlineRegular, IconChevronRightOutlineMedium, IconChevronRightOutlineRegular, IconChevronUpOutlineMedium, IconChevronUpOutlineRegular, IconChevronsUpDownOutlineMedium, IconChevronsUpDownOutlineRegular, IconClockOutlineMedium, IconClockOutlineRegular, IconCloseCircleFillMedium, IconCloseCircleFillRegular, IconCloseFillMedium, IconCloseFillRegular, IconCloseOutlineMedium, IconCloseOutlineRegular, IconCodeOutlineMedium, IconCodeOutlineRegular, IconCompactOutlineMedium, IconCompactOutlineRegular, IconCompareSplitOutlineMedium, IconCompareSplitOutlineRegular, IconContextInjectionOutlineMedium, IconContextInjectionOutlineRegular, IconCopyOutlineMedium, IconCopyOutlineRegular, IconCordisPluginOutlineMedium, IconCordisPluginOutlineRegular, IconDarkOutlineMedium, IconDarkOutlineRegular, IconDataOutlineMedium, IconDataOutlineRegular, IconDatabaseOutlineMedium, IconDatabaseOutlineRegular, IconDeliverDocMedium, IconDeliverDocRegular, IconDislikeFillMedium, IconDislikeFillRegular, IconDislikeOutlineMedium, IconDislikeOutlineRegular, IconDownloadOutlineMedium, IconDownloadOutlineRegular, IconEditOutlineMedium, IconEditOutlineRegular, IconEllipsisOutlineMedium, IconEllipsisOutlineRegular, IconEnhanceOutlineMedium, IconEnhanceOutlineRegular, IconFlatListOutlineMedium, IconFlatListOutlineRegular, IconFolderCloseMedium, IconFolderCloseRegular, IconFolderOpenMedium, IconFolderOpenOutlineMedium, IconFolderOpenOutlineRegular, IconFolderOpenRegular, IconFollowsystemOutlineMedium, IconFollowsystemOutlineRegular, IconFullscreenOutlineMedium, IconFullscreenOutlineRegular, IconGaugeOutlineMedium, IconGaugeOutlineRegular, IconGlobeOutlineMedium, IconGlobeOutlineRegular, IconGoalOutlineMedium, IconGoalOutlineRegular, IconInfoOutlineMedium, IconInfoOutlineRegular, IconInspectOutlineMedium, IconInspectOutlineRegular, IconLightOutlineMedium, IconLightOutlineRegular, IconLikeFillMedium, IconLikeFillRegular, IconLikeOutlineMedium, IconLikeOutlineRegular, IconLinkOutlineMedium, IconLinkOutlineRegular, IconListPenOutlineMedium, IconListPenOutlineRegular, IconLoadingOutlineMedium, IconLoadingOutlineRegular, IconMicrophoneOutlineMedium, IconMicrophoneOutlineRegular, IconNewChatOutlineMedium, IconNewChatOutlineRegular, IconNowrapFillMedium, IconNowrapFillRegular, IconPanelLeftOutlineMedium, IconPanelLeftOutlineRegular, IconPaperPlaneOutlineMedium, IconPaperPlaneOutlineRegular, IconPaperclipOutlineMedium, IconPaperclipOutlineRegular, IconPauseOutlineMedium, IconPauseOutlineRegular, IconPersonalizationOutlineMedium, IconPersonalizationOutlineRegular, IconPinFillMedium, IconPinFillRegular, IconPinOutlineMedium, IconPinOutlineRegular, IconPlanOutlineMedium, IconPlanOutlineRegular, IconPlayOutlineMedium, IconPlayOutlineRegular, IconPluginPinwheelOutlineMedium, IconPluginPinwheelOutlineRegular, IconPlusOutlineMedium, IconPlusOutlineRegular, IconProjectAddOutlineMedium, IconProjectAddOutlineRegular, IconQuestionOutlineMedium, IconQuestionOutlineRegular, IconQueueOutlineMedium, IconQueueOutlineRegular, IconRefreshOutlineMedium, IconRefreshOutlineRegular, IconRightUpOutlineMedium, IconRightUpOutlineRegular, IconSearchOutlineMedium, IconSearchOutlineRegular, IconSendOutlineMedium, IconSendOutlineRegular, IconSettingsOutlineMedium, IconSettingsOutlineRegular, IconShareOutlineMedium, IconShareOutlineRegular, IconShieldOutlineMedium, IconShieldOutlineRegular, IconSkillOutlineMedium, IconSkillOutlineRegular, IconSlidersTwoOutlineMedium, IconSlidersTwoOutlineRegular, IconSparkleMedium, IconSparkleRegular, IconStopFillMedium, IconStopFillRegular, IconThinkOutlineMedium, IconThinkOutlineRegular, IconTrashOutlineMedium, IconTrashOutlineRegular, IconTreeCornerMedium, IconTreeCornerRegular, IconTriangleRightFillMedium, IconTriangleRightFillRegular, IconUnarchiveOutlineMedium, IconUnarchiveOutlineRegular, IconUserOutlineMedium, IconUserOutlineRegular, IconUsersOutlineMedium, IconUsersOutlineRegular, IconWarningOutlineMedium, IconWarningOutlineRegular, IconWarningTriangleOutlineMedium, IconWarningTriangleOutlineRegular, IconWorkspaceTreeOutlineMedium, IconWorkspaceTreeOutlineRegular, IconWrapFillMedium, IconWrapFillRegular, IconWrapLinesOutlineMedium, IconWrapLinesOutlineRegular, ImageLightbox, Input, JsonBlock, JsonTree, LinkIconMedium, LinkIconRegular, MarkdownDelegateProvider, MarkdownText, Menu, MenuGroup, MenuItemButton, MenuSurface, Modal, PathLabel, PermissionIconFullAccessMedium, PermissionIconFullAccessRegular, PermissionIconReadOnlyMedium, PermissionIconReadOnlyRegular, PermissionIconWorkspaceWriteMedium, PermissionIconWorkspaceWriteRegular, Pill, PluginArtworkDefault, PluginArtworkLoop, PluginArtworkSearch, PluginArtworkSubagent, PluginArtworkTerminal, ReadBlock, ReferenceIconMedium, ReferenceIconRegular, RiskConfirmation, SHIELD_OUTLINE_PATH, SearchBlock, SegmentedControl, SegmentedTabs, SettingsForm, SettingsFormModel, SettingsSecretField, SettingsValueField, ShortcutKeys, StateDot, Switch, Tag, TerminalBlock, TextShimmer, Toast, Tooltip, WebBlock, classifyFileType, classifyLinkPath, closeTopModal, diffTotals, extractMarkdownPlainText, fileExtension, fileSizeText, focusWithoutRing, isBehindModal, isDarwinDesktop, languageForPath, modalSelector, observeComposition, observeStickyMenuGroups, pointerModality, projectUserText, rankByName, relativeTime, settingsNumberField, settingsTextField, useAnchoredMaxHeight, useAnchoredPosition, useCodeHighlighter, useDismissOnOutsidePointer, useModalLayer, writeClipboard };
12259
12382
 
12260
12383
  //# sourceMappingURL=index.js.map