@deepseek-ai/dsh-client-ui-primitives 0.2.0-rc.2 → 0.2.1-alpha.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
@@ -14,23 +14,24 @@ import css$8 from "./Switch.module.css";
14
14
  import css$9 from "./SegmentedControl.module.css";
15
15
  import css$10 from "./Checkbox.module.css";
16
16
  import css$11 from "./Input.module.css";
17
+ import css$12 from "./InlineEditor.module.css";
17
18
  import { createPortal } from "react-dom";
18
- import css$12 from "./ShortcutKeys.module.css";
19
- import css$13 from "./MenuSurface.module.css";
20
- import css$14 from "./Menu.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";
19
+ import css$13 from "./ShortcutKeys.module.css";
20
+ import css$14 from "./MenuSurface.module.css";
21
+ import css$15 from "./Menu.module.css";
22
+ import css$16 from "./MenuGroup.module.css";
23
+ import css$17 from "./Tooltip.module.css";
24
+ import css$18 from "./HoverCard.module.css";
25
+ import css$19 from "./Modal.module.css";
26
+ import css$20 from "./RiskConfirmation.module.css";
27
+ import css$21 from "./ConnectionIndicator.module.css";
28
+ import css$22 from "./FileTypeIcon.module.css";
28
29
  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";
29
- import css$22 from "./user-text.module.css";
30
+ import css$23 from "./user-text.module.css";
30
31
  import markdownCss from "./markdown/MarkdownText.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";
32
+ import css$24 from "./Toast.module.css";
33
+ import css$25 from "./settings-form/SettingsForm.module.css";
34
+ import css$26 from "./settings-form/fields.module.css";
34
35
  import { createSnapshotStore } from "@deepseek-ai/dsh-client-store";
35
36
  import { createCssVariablesTheme, createHighlighterCoreSync } from "shiki/core";
36
37
  import { createJavaScriptRegexEngine, defaultJavaScriptRegexConstructor } from "shiki/engine/javascript";
@@ -38,14 +39,15 @@ import langTs from "@shikijs/langs/typescript";
38
39
  import langBash from "@shikijs/langs/shellscript";
39
40
  import langJson from "@shikijs/langs/json";
40
41
  import { CODE_HIGHLIGHT_EXTENSIONS, languageForPath } from "@deepseek-ai/dsh-util-code-language";
41
- import css$26 from "./JsonTree.module.css";
42
+ import css$27 from "./JsonTree.module.css";
42
43
  import Anser from "anser";
43
- import css$27 from "./TerminalBlock.module.css";
44
+ import css$28 from "./TerminalBlock.module.css";
45
+ import css$29 from "./CommandText.module.css";
44
46
  import cardCss from "./CodeCard.module.css";
45
- import css$28 from "./ReadBlock.module.css";
47
+ import css$30 from "./ReadBlock.module.css";
46
48
  import { structuredPatch } from "diff";
47
- import css$29 from "./DiffBlock.module.css";
48
- import css$30 from "./SearchBlock.module.css";
49
+ import css$31 from "./DiffBlock.module.css";
50
+ import css$32 from "./SearchBlock.module.css";
49
51
  import { fromMarkdown } from "mdast-util-from-markdown";
50
52
  import { gfmFromMarkdown } from "mdast-util-gfm";
51
53
  import { mathFromMarkdown } from "mdast-util-math";
@@ -57,13 +59,13 @@ import { classifyCharacter } from "micromark-util-classify-character";
57
59
  import { codes, constants, types } from "micromark-util-symbol";
58
60
  import { factorySpace } from "micromark-factory-space";
59
61
  import { normalizeUri } from "micromark-util-sanitize-uri";
60
- import css$31 from "./markdown/CodeBlock.module.css";
62
+ import css$33 from "./markdown/CodeBlock.module.css";
61
63
  import katex from "katex";
62
- import css$32 from "./ImageLightbox.module.css";
63
- import css$33 from "./ImagePreview.module.css";
64
+ import css$34 from "./ImageLightbox.module.css";
65
+ import css$35 from "./ImagePreview.module.css";
64
66
  import "katex/dist/katex.min.css";
65
- import css$34 from "./WebBlock.module.css";
66
- import css$35 from "./markdown/JsonBlock.module.css";
67
+ import css$36 from "./WebBlock.module.css";
68
+ import css$37 from "./markdown/JsonBlock.module.css";
67
69
  //#region lib/types/icons/shared-artwork.js
68
70
  /**
69
71
  * Render new-conversation geometry — the bubble around a plus — for product icons.
@@ -3040,12 +3042,24 @@ const IconMicrophoneOutlineMedium = (props) => jsx(IconMicrophoneOutlineArtwork,
3040
3042
  //#region lib/types/StateDot.js
3041
3043
  /**
3042
3044
  * Pin the loader's CSS animations to document time zero. A CSS animation starts
3043
- * when its element is inserted, so loaders mounted at different moments rotate
3044
- * out of phase; one shared start time keeps every visible loader in step.
3045
+ * when its element is inserted and restarts when the element is moved or shown
3046
+ * again, so loaders started at different moments rotate out of phase; one shared
3047
+ * start time keeps every visible loader in step. Mount pins the first start; the
3048
+ * element's own `animationstart` listener pins each restart.
3045
3049
  * @param element - the mounted loader, or null on unmount.
3046
3050
  */
3047
3051
  function syncSpinner(element) {
3048
3052
  if (element === null) return;
3053
+ pinSpinner(element);
3054
+ element.addEventListener("animationstart", () => {
3055
+ pinSpinner(element);
3056
+ });
3057
+ }
3058
+ /**
3059
+ * Set every CSS animation in the loader's subtree to start at document time zero.
3060
+ * @param element - the mounted loader.
3061
+ */
3062
+ function pinSpinner(element) {
3049
3063
  const spinner = element;
3050
3064
  for (const animation of spinner.getAnimations?.({ subtree: true }) ?? []) animation.startTime = 0;
3051
3065
  }
@@ -3153,7 +3167,7 @@ const TextShimmer = memo(function TextShimmer({ children, active = false, classN
3153
3167
  * @param props - Visual content, controlled state, and interaction policy.
3154
3168
  * @returns the disclosure row.
3155
3169
  */
3156
- const DisclosureRow = memo(function DisclosureRow({ icon, title, open, expandable, onToggle, running = false, expandOnRowClick = false, previewChevron = expandable, keepContentWhenOpen = false, collapsedContent, children, className, rowClassName, contentClassName, contentLayoutClassName, leadingClassName, chevronClassName, titleClassName }) {
3170
+ const DisclosureRow = memo(function DisclosureRow({ icon, title, open, expandable, onToggle, running = false, expandOnRowClick = false, previewChevron = expandable, keepContentWhenOpen = false, collapsedContent, headerAccessory, children, className, rowClassName, contentClassName, contentLayoutClassName, leadingClassName, chevronClassName, titleClassName }) {
3157
3171
  const rowExpands = expandable && expandOnRowClick;
3158
3172
  const toggleFromLeading = (event) => {
3159
3173
  event.stopPropagation();
@@ -3173,33 +3187,38 @@ const DisclosureRow = memo(function DisclosureRow({ icon, title, open, expandabl
3173
3187
  className: clsx(css$2.root, className),
3174
3188
  "data-open": open || void 0,
3175
3189
  children: [jsxs("div", {
3176
- className: clsx(css$2.row, rowClassName),
3177
- "data-disclosure-row": true,
3178
- "data-expandable": rowExpands || void 0,
3179
- role: rowExpands ? "button" : void 0,
3180
- tabIndex: rowExpands ? 0 : void 0,
3181
- "aria-expanded": rowExpands ? open : void 0,
3182
- onClick: rowExpands ? onToggle : void 0,
3183
- onKeyDown: rowExpands ? toggleFromKeyboard : void 0,
3184
- children: [expandable && !rowExpands ? jsx("button", {
3185
- type: "button",
3186
- className: clsx(css$2.leading, leadingClassName),
3187
- "aria-label": title,
3188
- "aria-expanded": open,
3189
- onClick: toggleFromLeading,
3190
- children: leading
3191
- }) : jsx("span", {
3192
- className: clsx(css$2.leading, leadingClassName),
3193
- children: leading
3194
- }), jsxs(TextShimmer, {
3195
- active: running,
3196
- className: contentClassName,
3197
- contentClassName: contentLayoutClassName,
3198
- children: [jsx(TextShimmer, {
3199
- className: clsx(css$2.title, titleClassName),
3200
- children: title
3201
- }), (keepContentWhenOpen || !open) && collapsedContent]
3202
- })]
3190
+ className: css$2.header,
3191
+ "data-disclosure-header": true,
3192
+ "data-has-accessory": !!headerAccessory || void 0,
3193
+ children: [jsxs("div", {
3194
+ className: clsx(css$2.row, rowClassName),
3195
+ "data-disclosure-row": true,
3196
+ "data-expandable": rowExpands || void 0,
3197
+ role: rowExpands ? "button" : void 0,
3198
+ tabIndex: rowExpands ? 0 : void 0,
3199
+ "aria-expanded": rowExpands ? open : void 0,
3200
+ onClick: rowExpands ? onToggle : void 0,
3201
+ onKeyDown: rowExpands ? toggleFromKeyboard : void 0,
3202
+ children: [expandable && !rowExpands ? jsx("button", {
3203
+ type: "button",
3204
+ className: clsx(css$2.leading, leadingClassName),
3205
+ "aria-label": title,
3206
+ "aria-expanded": open,
3207
+ onClick: toggleFromLeading,
3208
+ children: leading
3209
+ }) : jsx("span", {
3210
+ className: clsx(css$2.leading, leadingClassName),
3211
+ children: leading
3212
+ }), jsxs(TextShimmer, {
3213
+ active: running,
3214
+ className: contentClassName,
3215
+ contentClassName: contentLayoutClassName,
3216
+ children: [jsx(TextShimmer, {
3217
+ className: clsx(css$2.title, titleClassName),
3218
+ children: title
3219
+ }), (keepContentWhenOpen || !open) && collapsedContent]
3220
+ })]
3221
+ }), headerAccessory]
3203
3222
  }), open && children]
3204
3223
  });
3205
3224
  });
@@ -3540,6 +3559,60 @@ const Input = forwardRef(function Input({ icon, className, ...rest }, ref) {
3540
3559
  });
3541
3560
  });
3542
3561
  //#endregion
3562
+ //#region lib/types/InlineEditor.js
3563
+ /** Multi-line inline editor for short saved-on-Enter drafts such as queued messages and goals. */
3564
+ /**
3565
+ * Render an autofocused textarea that grows with its text up to six lines, then scrolls.
3566
+ * A textarea rather than an input: HTML strips newlines from single-line input values.
3567
+ * Enter saves, Shift+Enter breaks the line, Enter during IME composition does nothing,
3568
+ * and Escape cancels.
3569
+ * @param props.value - current draft text.
3570
+ * @param props.label - localized accessible name.
3571
+ * @param props.onChange - receives the edited text.
3572
+ * @param props.onSave - called for a plain Enter.
3573
+ * @param props.onCancel - called for Escape.
3574
+ * @param props.className - extra class for the editor's placement.
3575
+ * @returns the textarea.
3576
+ */
3577
+ function InlineEditor({ value, label, onChange, onSave, onCancel, className }) {
3578
+ const ref = useRef(null);
3579
+ useLayoutEffect(() => {
3580
+ const node = ref.current;
3581
+ const fit = () => {
3582
+ node.style.height = "auto";
3583
+ node.style.height = `${node.scrollHeight + node.offsetHeight - node.clientHeight}px`;
3584
+ };
3585
+ fit();
3586
+ const observer = new ResizeObserver(fit);
3587
+ observer.observe(node);
3588
+ return () => {
3589
+ observer.disconnect();
3590
+ };
3591
+ }, [value]);
3592
+ const onKeyDown = (event) => {
3593
+ if (event.key === "Escape") {
3594
+ onCancel();
3595
+ return;
3596
+ }
3597
+ const composing = event.nativeEvent.isComposing || Reflect.get(event.nativeEvent, "keyCode") === 229;
3598
+ if (event.key !== "Enter" || event.shiftKey || composing) return;
3599
+ event.preventDefault();
3600
+ onSave();
3601
+ };
3602
+ return jsx("textarea", {
3603
+ ref,
3604
+ autoFocus: true,
3605
+ rows: 1,
3606
+ className: clsx(css$12.editor, className),
3607
+ "aria-label": label,
3608
+ value,
3609
+ onChange: (event) => {
3610
+ onChange(event.currentTarget.value);
3611
+ },
3612
+ onKeyDown
3613
+ });
3614
+ }
3615
+ //#endregion
3543
3616
  //#region lib/types/overlay-top-margin.js
3544
3617
  /** Shared viewport inset for overlays, derived from the desktop frame's reserved top strip. */
3545
3618
  /**
@@ -3762,9 +3835,9 @@ function useModalLayer(dialog, open, onClose) {
3762
3835
  */
3763
3836
  function ShortcutKeys({ keys, variant = "plain", className }) {
3764
3837
  return jsx("span", {
3765
- className: clsx(css$12.keys, variant === "tooltip" && css$12.tooltip, variant === "tooltip" && keys.includes("+") && css$12.joined, className),
3838
+ className: clsx(css$13.keys, variant === "tooltip" && css$13.tooltip, variant === "tooltip" && keys.includes("+") && css$13.joined, className),
3766
3839
  children: keys.map((key, index) => jsx("kbd", {
3767
- className: key === "+" ? css$12.separator : css$12.key,
3840
+ className: key === "+" ? css$13.separator : css$13.key,
3768
3841
  children: key
3769
3842
  }, index))
3770
3843
  });
@@ -3790,20 +3863,20 @@ const MenuSurface = forwardRef(function MenuSurface({ compact = false, className
3790
3863
  ...props,
3791
3864
  ref,
3792
3865
  "data-menu-material": "translucent",
3793
- className: clsx(css$13.surface, compact && css$13.compact, className),
3866
+ className: clsx(css$14.surface, compact && css$14.compact, className),
3794
3867
  style: {
3795
3868
  ...style,
3796
3869
  ...anchorStyle
3797
3870
  },
3798
3871
  children: [jsx("div", {
3799
3872
  "aria-hidden": "true",
3800
- className: css$13.material
3873
+ className: css$14.material
3801
3874
  }), children]
3802
3875
  }), createPortal(jsx("div", {
3803
3876
  ref: backingRef,
3804
3877
  "aria-hidden": "true",
3805
3878
  "data-menu-backing": "",
3806
- className: clsx(css$13.backing, compact && css$13.compact),
3879
+ className: clsx(css$14.backing, compact && css$14.compact),
3807
3880
  style: {
3808
3881
  ...anchorStyle,
3809
3882
  visibility: style?.visibility
@@ -3829,32 +3902,32 @@ const MenuSurface = forwardRef(function MenuSurface({ compact = false, className
3829
3902
  */
3830
3903
  function MenuItemButton({ children, shortcut, icon, disabled = false, danger = false, separatorBefore = false, onSelect }) {
3831
3904
  return jsxs("div", {
3832
- className: css$14.itemWrap,
3905
+ className: css$15.itemWrap,
3833
3906
  children: [separatorBefore && jsx("div", {
3834
- className: css$14.separator,
3907
+ className: css$15.separator,
3835
3908
  role: "separator"
3836
3909
  }), jsxs("button", {
3837
3910
  type: "button",
3838
3911
  role: "menuitem",
3839
- className: clsx(css$14.item, danger && css$14.danger),
3912
+ className: clsx(css$15.item, danger && css$15.danger),
3840
3913
  disabled,
3841
3914
  "aria-keyshortcuts": shortcut?.aria,
3842
3915
  onClick: onSelect,
3843
3916
  children: [
3844
3917
  icon !== void 0 && jsx("span", {
3845
- className: css$14.itemIcon,
3918
+ className: css$15.itemIcon,
3846
3919
  children: icon
3847
3920
  }),
3848
3921
  jsx("span", {
3849
- className: css$14.itemLabel,
3922
+ className: css$15.itemLabel,
3850
3923
  children
3851
3924
  }),
3852
3925
  shortcut !== void 0 && jsx("span", {
3853
3926
  "aria-hidden": "true",
3854
- className: css$14.shortcut,
3927
+ className: css$15.shortcut,
3855
3928
  children: jsx(ShortcutKeys, {
3856
3929
  keys: shortcut.keys,
3857
- className: css$14.shortcutKeys
3930
+ className: css$15.shortcutKeys
3858
3931
  })
3859
3932
  })
3860
3933
  ]
@@ -4141,11 +4214,11 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4141
4214
  const scrollable = !items.some((entry) => !isSeparator(entry) && !isLabel(entry) && entry.submenu !== void 0 && entry.submenu.length > 0);
4142
4215
  const renderEntry = (entry) => {
4143
4216
  if (isSeparator(entry)) return jsx("div", {
4144
- className: css$14.separator,
4217
+ className: css$15.separator,
4145
4218
  role: "separator"
4146
4219
  }, entry.id);
4147
4220
  if (isLabel(entry)) return jsx("div", {
4148
- className: css$14.label,
4221
+ className: css$15.label,
4149
4222
  role: "presentation",
4150
4223
  children: entry.text
4151
4224
  }, entry.id);
@@ -4153,7 +4226,7 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4153
4226
  const subOpen = hasSub && openSubmenuId === entry.id;
4154
4227
  const selected = entry.id === selectedId || selectedIds?.includes(entry.id) === true;
4155
4228
  return jsxs("div", {
4156
- className: css$14.itemWrap,
4229
+ className: css$15.itemWrap,
4157
4230
  onMouseEnter: hasSub ? () => {
4158
4231
  setOpenSubmenuId(entry.id);
4159
4232
  } : void 0,
@@ -4163,7 +4236,7 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4163
4236
  children: [jsxs("button", {
4164
4237
  type: "button",
4165
4238
  role: "menuitem",
4166
- className: clsx(css$14.item, selected && (selection === "fill" ? css$14.selectedFill : css$14.selected), entry.danger === true && css$14.danger),
4239
+ className: clsx(css$15.item, selected && (selection === "fill" ? css$15.selectedFill : css$15.selected), entry.danger === true && css$15.danger),
4167
4240
  disabled: entry.disabled,
4168
4241
  "aria-keyshortcuts": entry.shortcut?.aria,
4169
4242
  "aria-haspopup": hasSub ? "menu" : void 0,
@@ -4180,31 +4253,31 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4180
4253
  },
4181
4254
  children: [
4182
4255
  entry.icon !== void 0 && jsx("span", {
4183
- className: css$14.itemIcon,
4256
+ className: css$15.itemIcon,
4184
4257
  children: entry.icon
4185
4258
  }),
4186
4259
  jsx("span", {
4187
- className: css$14.itemLabel,
4260
+ className: css$15.itemLabel,
4188
4261
  children: entry.label
4189
4262
  }),
4190
4263
  entry.shortcut !== void 0 && jsx("span", {
4191
4264
  "aria-hidden": "true",
4192
- className: css$14.shortcut,
4265
+ className: css$15.shortcut,
4193
4266
  children: jsx(ShortcutKeys, {
4194
4267
  keys: entry.shortcut.keys,
4195
- className: css$14.shortcutKeys
4268
+ className: css$15.shortcutKeys
4196
4269
  })
4197
4270
  }),
4198
- selected && selection === "check" && jsx(IconCheckOutlineRegular, { className: css$14.check })
4271
+ selected && selection === "check" && jsx(IconCheckOutlineRegular, { className: css$15.check })
4199
4272
  ]
4200
4273
  }), subOpen && entry.submenu !== void 0 && jsx(MenuSurface, {
4201
4274
  compact,
4202
- className: clsx(css$14.submenu, compact && css$14.compactList),
4275
+ className: clsx(css$15.submenu, compact && css$15.compactList),
4203
4276
  role: "menu",
4204
4277
  children: entry.submenu.map((sub) => jsxs("button", {
4205
4278
  type: "button",
4206
4279
  role: "menuitem",
4207
- className: css$14.item,
4280
+ className: css$15.item,
4208
4281
  disabled: sub.disabled,
4209
4282
  "aria-keyshortcuts": sub.shortcut?.aria,
4210
4283
  onClick: () => {
@@ -4213,19 +4286,19 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4213
4286
  },
4214
4287
  children: [
4215
4288
  sub.icon !== void 0 && jsx("span", {
4216
- className: css$14.itemIcon,
4289
+ className: css$15.itemIcon,
4217
4290
  children: sub.icon
4218
4291
  }),
4219
4292
  jsx("span", {
4220
- className: css$14.itemLabel,
4293
+ className: css$15.itemLabel,
4221
4294
  children: sub.label
4222
4295
  }),
4223
4296
  sub.shortcut !== void 0 && jsx("span", {
4224
4297
  "aria-hidden": "true",
4225
- className: css$14.shortcut,
4298
+ className: css$15.shortcut,
4226
4299
  children: jsx(ShortcutKeys, {
4227
4300
  keys: sub.shortcut.keys,
4228
- className: css$14.shortcutKeys
4301
+ className: css$15.shortcutKeys
4229
4302
  })
4230
4303
  })
4231
4304
  ]
@@ -4242,7 +4315,7 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4242
4315
  const list = open && jsxs(MenuSurface, {
4243
4316
  compact,
4244
4317
  ref: listRef,
4245
- className: clsx(css$14.list, listClassName, dense && css$14.denseList, compact && css$14.compactList, scrollable && css$14.scrollable, portal && css$14.portal, side === "top" && !portal && css$14.sideTop, align === "end" && !portal && css$14.alignEnd),
4318
+ className: clsx(css$15.list, listClassName, dense && css$15.denseList, compact && css$15.compactList, scrollable && css$15.scrollable, portal && css$15.portal, side === "top" && !portal && css$15.sideTop, align === "end" && !portal && css$15.alignEnd),
4246
4319
  style: portal ? fixedPos ?? MEASURE_STYLE : void 0,
4247
4320
  role: "menu",
4248
4321
  onClick: (e) => {
@@ -4253,18 +4326,18 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4253
4326
  onMouseOver: collapseSubmenuFrom,
4254
4327
  onFocus: collapseSubmenuFrom,
4255
4328
  children: [jsxs("div", {
4256
- className: css$14.viewport,
4329
+ className: css$15.viewport,
4257
4330
  role: "presentation",
4258
4331
  children: [items.map(renderEntry), children]
4259
4332
  }), footer !== void 0 && footer.length > 0 && jsx("div", {
4260
- className: css$14.footer,
4333
+ className: css$15.footer,
4261
4334
  role: "presentation",
4262
4335
  children: footer.map(renderEntry)
4263
4336
  })]
4264
4337
  });
4265
4338
  return jsxs("span", {
4266
4339
  ref: rootRef,
4267
- className: clsx(css$14.root, className),
4340
+ className: clsx(css$15.root, className),
4268
4341
  onPointerEnter: closeOnPointerLeave ? cancelClose : void 0,
4269
4342
  onPointerLeave: closeOnPointerLeave ? () => {
4270
4343
  if (open) armClose();
@@ -4286,17 +4359,17 @@ function MenuGroup({ label, children }) {
4286
4359
  role: "group",
4287
4360
  "aria-labelledby": headingId,
4288
4361
  "data-menu-group": "",
4289
- className: css$15.group,
4362
+ className: css$16.group,
4290
4363
  children: [
4291
4364
  jsx("span", {
4292
4365
  "aria-hidden": "true",
4293
4366
  "data-menu-group-start": "",
4294
- className: css$15.start
4367
+ className: css$16.start
4295
4368
  }),
4296
4369
  jsx("div", {
4297
4370
  id: headingId,
4298
4371
  "data-menu-group-heading": "",
4299
- className: css$15.heading,
4372
+ className: css$16.heading,
4300
4373
  children: label
4301
4374
  }),
4302
4375
  children
@@ -4826,7 +4899,7 @@ function Tooltip({ label, shortcutKeys, side = "right", align = "center", delayM
4826
4899
  const content = visible && !suppressed && jsxs("span", {
4827
4900
  ref: bubble,
4828
4901
  id: openOnClick ? id : void 0,
4829
- className: css$16.bubble,
4902
+ className: css$17.bubble,
4830
4903
  "data-side": side,
4831
4904
  "data-portal": portal || void 0,
4832
4905
  "data-pinned": pinned || void 0,
@@ -4841,7 +4914,7 @@ function Tooltip({ label, shortcutKeys, side = "right", align = "center", delayM
4841
4914
  role: "tooltip",
4842
4915
  "aria-label": shortcutKeys?.length ? [resolvedLabel, shortcutKeys.join(" ")].filter(Boolean).join(" ") : void 0,
4843
4916
  children: [resolvedLabel && jsx("span", {
4844
- className: css$16.label,
4917
+ className: css$17.label,
4845
4918
  children: resolvedLabel
4846
4919
  }), shortcutKeys !== void 0 && shortcutKeys.length > 0 && jsx(ShortcutKeys, {
4847
4920
  keys: shortcutKeys,
@@ -5109,7 +5182,7 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
5109
5182
  };
5110
5183
  const card = open && pos !== null && !suppressed && jsx("div", {
5111
5184
  ref: cardRef,
5112
- className: clsx(css$17.card, variant === "preview" && css$17.preview, inline && css$17.media, copyable && css$17.copyable, copied && css$17.feedback),
5185
+ className: clsx(css$18.card, variant === "preview" && css$18.preview, inline && css$18.media, copyable && css$18.copyable, copied && css$18.feedback),
5113
5186
  "data-closing": closing || void 0,
5114
5187
  style: {
5115
5188
  ...pos,
@@ -5132,14 +5205,14 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
5132
5205
  copy(copyText);
5133
5206
  } : void 0,
5134
5207
  children: copied ? jsx("span", {
5135
- className: css$17.copied,
5208
+ className: css$18.copied,
5136
5209
  "aria-hidden": "true",
5137
5210
  children: copiedLabel
5138
5211
  }) : content
5139
5212
  });
5140
5213
  return jsxs("span", {
5141
5214
  ref: rootRef,
5142
- className: clsx(css$17.root, inline && css$17.inline),
5215
+ className: clsx(css$18.root, inline && css$18.inline),
5143
5216
  onFocus: inline ? (event) => {
5144
5217
  if (!disabled && event.target.matches(":focus-visible")) {
5145
5218
  cancelClose();
@@ -5177,7 +5250,7 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
5177
5250
  children: anchor
5178
5251
  }),
5179
5252
  open && !suppressed && copyable && jsx("span", {
5180
- className: css$17.status,
5253
+ className: css$18.status,
5181
5254
  role: "status",
5182
5255
  children: copied ? copiedLabel : ""
5183
5256
  }),
@@ -5212,11 +5285,11 @@ function Modal({ open, onClose, title, closeLabel, description, children, footer
5212
5285
  useModalLayer(dialog, open, onClose);
5213
5286
  if (!open) return null;
5214
5287
  return createPortal(jsxs("div", {
5215
- className: css$18.root,
5288
+ className: css$19.root,
5216
5289
  role: "presentation",
5217
5290
  onKeyDownCapture,
5218
5291
  children: [jsx("div", {
5219
- className: css$18.mask,
5292
+ className: css$19.mask,
5220
5293
  style: backdropBlur ? void 0 : { backdropFilter: "none" },
5221
5294
  "aria-hidden": "true",
5222
5295
  onClick: onClose
@@ -5224,37 +5297,37 @@ function Modal({ open, onClose, title, closeLabel, description, children, footer
5224
5297
  ref: dialog,
5225
5298
  tabIndex: -1,
5226
5299
  "data-shortcut-modal": shortcutModal,
5227
- className: clsx(css$18.dialog, className),
5300
+ className: clsx(css$19.dialog, className),
5228
5301
  role: "dialog",
5229
5302
  "aria-modal": "true",
5230
5303
  "aria-label": title,
5231
5304
  children: headless ? children : jsxs(Fragment, { children: [jsxs("div", {
5232
- className: clsx(css$18.content, contentClassName),
5305
+ className: clsx(css$19.content, contentClassName),
5233
5306
  children: [
5234
5307
  jsxs("div", {
5235
- className: css$18.header,
5308
+ className: css$19.header,
5236
5309
  children: [jsx("h2", {
5237
- className: css$18.title,
5310
+ className: css$19.title,
5238
5311
  children: title
5239
5312
  }), jsx("button", {
5240
5313
  type: "button",
5241
- className: css$18.close,
5314
+ className: css$19.close,
5242
5315
  "aria-label": closeLabel,
5243
5316
  onClick: onClose,
5244
5317
  children: jsx(IconCloseOutlineRegular, { size: 14 })
5245
5318
  })]
5246
5319
  }),
5247
5320
  description !== void 0 && description !== "" && jsx("p", {
5248
- className: css$18.description,
5321
+ className: css$19.description,
5249
5322
  children: description
5250
5323
  }),
5251
5324
  children !== void 0 && jsx("div", {
5252
- className: css$18.body,
5325
+ className: css$19.body,
5253
5326
  children
5254
5327
  })
5255
5328
  ]
5256
5329
  }), footer !== void 0 && jsx("div", {
5257
- className: css$18.footer,
5330
+ className: css$19.footer,
5258
5331
  children: footer
5259
5332
  })] })
5260
5333
  })]
@@ -5276,28 +5349,28 @@ function RiskConfirmation({ open, title, description, acknowledgeLabel, cancelLa
5276
5349
  onClose: onCancel,
5277
5350
  title,
5278
5351
  closeLabel,
5279
- className: css$19.confirmation ?? "",
5280
- contentClassName: css$19.confirmationContent ?? "",
5352
+ className: css$20.confirmation ?? "",
5353
+ contentClassName: css$20.confirmationContent ?? "",
5281
5354
  footer: jsxs(Fragment, { children: [jsx(Button, {
5282
5355
  variant: "outline",
5283
- className: css$19.modalAction,
5356
+ className: css$20.modalAction,
5284
5357
  onClick: onCancel,
5285
5358
  children: cancelLabel
5286
5359
  }), jsx(Button, {
5287
5360
  variant: "primary",
5288
- className: css$19.confirmAction,
5361
+ className: css$20.confirmAction,
5289
5362
  disabled: disabled || !acknowledged,
5290
5363
  onClick: onConfirm,
5291
5364
  children: confirmLabel
5292
5365
  })] }),
5293
5366
  children: [jsxs("div", {
5294
- className: css$19.warning,
5367
+ className: css$20.warning,
5295
5368
  children: [jsx(IconWarningOutlineRegular, {
5296
5369
  size: 18,
5297
- className: css$19.warningIcon
5370
+ className: css$20.warningIcon
5298
5371
  }), jsx("p", { children: description })]
5299
5372
  }), jsxs("label", {
5300
- className: css$19.acknowledgement,
5373
+ className: css$20.acknowledgement,
5301
5374
  children: [jsx("input", {
5302
5375
  type: "checkbox",
5303
5376
  checked: acknowledged,
@@ -5345,44 +5418,44 @@ function ConnectionIndicator({ state, disconnectedLabel, connectingLabel, recove
5345
5418
  };
5346
5419
  }, [state, rendered]);
5347
5420
  if (rendered === void 0) return null;
5348
- const leavingClass = leaving ? ` ${css$20.leaving}` : "";
5421
+ const leavingClass = leaving ? ` ${css$21.leaving}` : "";
5349
5422
  if (rendered === "recovered") return jsxs("div", {
5350
- className: `${css$20.indicator} ${css$20.success}${leavingClass}`,
5423
+ className: `${css$21.indicator} ${css$21.success}${leavingClass}`,
5351
5424
  role: "status",
5352
5425
  "aria-label": recoveredLabel,
5353
5426
  children: [jsx("span", {
5354
- className: css$20.icon,
5427
+ className: css$21.icon,
5355
5428
  "aria-hidden": "true",
5356
5429
  children: jsx(IconCheckOutlineRegular, { size: 14 })
5357
5430
  }), jsx("span", {
5358
- className: css$20.label,
5431
+ className: css$21.label,
5359
5432
  children: recoveredLabel
5360
5433
  })]
5361
5434
  });
5362
5435
  const connecting = rendered === "connecting";
5363
5436
  return jsxs("button", {
5364
5437
  type: "button",
5365
- className: `${css$20.indicator} ${css$20.warning}${leavingClass}`,
5438
+ className: `${css$21.indicator} ${css$21.warning}${leavingClass}`,
5366
5439
  "data-phase": rendered,
5367
5440
  "aria-label": connecting ? restartActionLabel : reconnectActionLabel,
5368
5441
  onClick: onReconnect,
5369
5442
  children: [jsx("span", {
5370
- className: css$20.icon,
5443
+ className: css$21.icon,
5371
5444
  "aria-hidden": "true",
5372
5445
  children: connecting ? jsx(StateDot, { state: "ongoing" }) : jsx(IconRefreshOutlineRegular, { size: 14 })
5373
5446
  }), jsx("span", {
5374
- className: css$20.label,
5447
+ className: css$21.label,
5375
5448
  children: connecting ? jsxs(Fragment, { children: [connectingLabel, jsxs("span", {
5376
- className: css$20.dots,
5449
+ className: css$21.dots,
5377
5450
  "aria-hidden": "true",
5378
5451
  children: [
5379
5452
  jsx("span", { children: "." }),
5380
5453
  jsx("span", {
5381
- className: css$20.secondDot,
5454
+ className: css$21.secondDot,
5382
5455
  children: "."
5383
5456
  }),
5384
5457
  jsx("span", {
5385
- className: css$20.thirdDot,
5458
+ className: css$21.thirdDot,
5386
5459
  children: "."
5387
5460
  })
5388
5461
  ]
@@ -6413,7 +6486,7 @@ function FileTypeIcon(props) {
6413
6486
  type: resolvedType,
6414
6487
  size,
6415
6488
  className
6416
- }) : glyph(resolvedType, size, clsx(css$21.icon, css$21[resolvedType], className));
6489
+ }) : glyph(resolvedType, size, clsx(css$22.icon, css$22[resolvedType], className));
6417
6490
  }
6418
6491
  //#endregion
6419
6492
  //#region lib/types/SiteGlyph.js
@@ -6742,7 +6815,7 @@ function projectUserText(text, sessionLabels, slashNames = [], slashKind = "skil
6742
6815
  let cursor = 0;
6743
6816
  const pushPlain = (from, to) => {
6744
6817
  parts.push(jsx("span", {
6745
- className: css$22.plainRun,
6818
+ className: css$23.plainRun,
6746
6819
  children: text.slice(from, to)
6747
6820
  }, `t${from}`));
6748
6821
  };
@@ -6755,14 +6828,14 @@ function projectUserText(text, sessionLabels, slashNames = [], slashKind = "skil
6755
6828
  const contents = jsxs(Fragment, { children: [referenceKind !== void 0 && jsx(ReferenceIconRegular, {
6756
6829
  kind: referenceKind,
6757
6830
  size: 16,
6758
- className: css$22.refIcon
6831
+ className: css$23.refIcon
6759
6832
  }), displayLabel] });
6760
6833
  const open = references === void 0 ? void 0 : referenceKind === "file" ? () => {
6761
6834
  references.openFile(label.slice(1).replace(/^"|"$/gu, ""));
6762
6835
  } : referenceKind === void 0 && slashKind === "skill" ? () => {
6763
6836
  references.openSkill(label.slice(1));
6764
6837
  } : void 0;
6765
- const className = clsx(css$22.refChip, referenceKind === void 0 && css$22.slashChip);
6838
+ const className = clsx(css$23.refChip, referenceKind === void 0 && css$23.slashChip);
6766
6839
  parts.push(open === void 0 ? jsx("span", {
6767
6840
  className,
6768
6841
  "data-ref-chip": referenceKind ?? slashKind,
@@ -6782,7 +6855,7 @@ function projectUserText(text, sessionLabels, slashNames = [], slashKind = "skil
6782
6855
  cursor = end;
6783
6856
  }
6784
6857
  if (parts.length === 0) return jsx("span", {
6785
- className: css$22.plainRun,
6858
+ className: css$23.plainRun,
6786
6859
  children: text
6787
6860
  });
6788
6861
  if (cursor < text.length) pushPlain(cursor, text.length);
@@ -6855,25 +6928,25 @@ function Toast({ text, icon, tone, anchor, holdMs = HOLD_MS, actions, onDone })
6855
6928
  };
6856
6929
  }, [anchor]);
6857
6930
  return createPortal(jsxs("div", {
6858
- className: css$23.toast,
6931
+ className: css$24.toast,
6859
6932
  role: "alert",
6860
6933
  style: {
6861
6934
  ...left === null ? {} : { left },
6862
6935
  "--dsh-toast-hold": `${String(holdMs)}ms`
6863
6936
  },
6864
6937
  children: [tone === "success" ? jsx("span", {
6865
- className: `${css$23.icon} ${css$23.success}`,
6938
+ className: `${css$24.icon} ${css$24.success}`,
6866
6939
  "aria-hidden": true,
6867
6940
  children: jsx(IconCheckCircleOutlineRegular, {})
6868
6941
  }) : icon !== void 0 && jsx("span", {
6869
- className: css$23.icon,
6942
+ className: css$24.icon,
6870
6943
  "aria-hidden": true,
6871
6944
  children: icon
6872
6945
  }), jsxs("span", {
6873
- className: css$23.text,
6946
+ className: css$24.text,
6874
6947
  children: [text, actions?.map((action) => jsxs(Fragment$1, { children: [action.prefix, jsx("button", {
6875
6948
  type: "button",
6876
- className: css$23.action,
6949
+ className: css$24.action,
6877
6950
  onClick: action.onClick,
6878
6951
  children: action.label
6879
6952
  })] }, action.label))]
@@ -6923,29 +6996,29 @@ function SettingsForm(props) {
6923
6996
  discard.current();
6924
6997
  }, []);
6925
6998
  if (!state.available) return jsx("p", {
6926
- className: css$24.unavailable,
6999
+ className: css$25.unavailable,
6927
7000
  role: "status",
6928
7001
  children: labels.unavailable
6929
7002
  });
6930
7003
  const blocked = !state.dirty || state.invalid || state.saving;
6931
7004
  return jsxs("div", {
6932
- className: css$24.form,
7005
+ className: css$25.form,
6933
7006
  children: [
6934
7007
  !state.writable ? jsx("p", {
6935
- className: css$24.readOnly,
7008
+ className: css$25.readOnly,
6936
7009
  role: "status",
6937
7010
  children: labels.readOnly
6938
7011
  }) : null,
6939
7012
  props.children,
6940
7013
  jsxs("div", {
6941
- className: css$24.footer,
7014
+ className: css$25.footer,
6942
7015
  children: [state.failed ? jsx("p", {
6943
- className: css$24.failed,
7016
+ className: css$25.failed,
6944
7017
  role: "status",
6945
7018
  children: labels.saveFailed
6946
7019
  }) : null, jsx("button", {
6947
7020
  type: "button",
6948
- className: css$24.save,
7021
+ className: css$25.save,
6949
7022
  disabled: blocked,
6950
7023
  onClick: props.onSave,
6951
7024
  children: state.saving ? labels.saving : labels.save
@@ -6977,19 +7050,19 @@ function SettingsValueField(props) {
6977
7050
  const hasMessage = props.invalid || Boolean(props.hint);
6978
7051
  const description = [hasMessage ? messageId : "", helpOpen ? helpId : ""].filter(Boolean).join(" ");
6979
7052
  return jsxs("div", {
6980
- className: css$25.field,
7053
+ className: css$26.field,
6981
7054
  children: [
6982
7055
  jsxs("div", {
6983
- className: css$25.head,
7056
+ className: css$26.head,
6984
7057
  children: [jsxs("div", {
6985
- className: css$25.labelGroup,
7058
+ className: css$26.labelGroup,
6986
7059
  children: [jsx("label", {
6987
- className: css$25.label,
7060
+ className: css$26.label,
6988
7061
  htmlFor: props.id,
6989
7062
  children: props.label
6990
7063
  }), props.help !== void 0 ? jsx("button", {
6991
7064
  type: "button",
6992
- className: css$25.helpButton,
7065
+ className: css$26.helpButton,
6993
7066
  "aria-label": props.help.label,
6994
7067
  "aria-expanded": helpOpen,
6995
7068
  "aria-controls": helpId,
@@ -6999,13 +7072,13 @@ function SettingsValueField(props) {
6999
7072
  children: jsx(IconInfoOutlineRegular, { size: 12 })
7000
7073
  }) : null]
7001
7074
  }), props.overridden ? jsxs("span", {
7002
- className: css$25.badges,
7075
+ className: css$26.badges,
7003
7076
  children: [jsx(Tag, {
7004
7077
  tone: "neutral",
7005
7078
  children: props.overriddenLabel
7006
7079
  }), jsx("button", {
7007
7080
  type: "button",
7008
- className: css$25.reset,
7081
+ className: css$26.reset,
7009
7082
  disabled: props.disabled,
7010
7083
  onClick: props.onReset,
7011
7084
  children: props.resetLabel
@@ -7014,7 +7087,7 @@ function SettingsValueField(props) {
7014
7087
  }),
7015
7088
  jsx("input", {
7016
7089
  id: props.id,
7017
- className: css$25.input,
7090
+ className: css$26.input,
7018
7091
  type: "text",
7019
7092
  ...props.numeric === true ? { inputMode: "numeric" } : {},
7020
7093
  ...props.invalid ? { "aria-invalid": true } : {},
@@ -7028,12 +7101,12 @@ function SettingsValueField(props) {
7028
7101
  }),
7029
7102
  hasMessage ? jsx("p", {
7030
7103
  id: messageId,
7031
- className: props.invalid ? css$25.invalid : css$25.hint,
7104
+ className: props.invalid ? css$26.invalid : css$26.hint,
7032
7105
  children: props.invalid ? props.invalidLabel : props.hint
7033
7106
  }) : null,
7034
7107
  props.help !== void 0 && helpOpen ? jsx("div", {
7035
7108
  id: helpId,
7036
- className: css$25.help,
7109
+ className: css$26.help,
7037
7110
  role: "region",
7038
7111
  "aria-label": props.help.label,
7039
7112
  children: props.help.content
@@ -7051,16 +7124,16 @@ function SettingsValueField(props) {
7051
7124
  */
7052
7125
  function SettingsSecretField(props) {
7053
7126
  return jsxs("div", {
7054
- className: css$25.field,
7127
+ className: css$26.field,
7055
7128
  children: [
7056
7129
  jsxs("div", {
7057
- className: css$25.head,
7130
+ className: css$26.head,
7058
7131
  children: [jsx("label", {
7059
- className: css$25.label,
7132
+ className: css$26.label,
7060
7133
  htmlFor: props.id,
7061
7134
  children: props.label
7062
7135
  }), jsx("span", {
7063
- className: css$25.badges,
7136
+ className: css$26.badges,
7064
7137
  children: jsx(Tag, {
7065
7138
  tone: props.configured ? "neutral" : "quiet",
7066
7139
  children: props.stateLabel
@@ -7069,7 +7142,7 @@ function SettingsSecretField(props) {
7069
7142
  }),
7070
7143
  jsx("input", {
7071
7144
  id: props.id,
7072
- className: css$25.input,
7145
+ className: css$26.input,
7073
7146
  type: "password",
7074
7147
  autoComplete: "new-password",
7075
7148
  value: props.text,
@@ -7079,7 +7152,7 @@ function SettingsSecretField(props) {
7079
7152
  }
7080
7153
  }),
7081
7154
  jsx("p", {
7082
- className: css$25.hint,
7155
+ className: css$26.hint,
7083
7156
  children: props.hint
7084
7157
  })
7085
7158
  ]
@@ -7633,6 +7706,15 @@ const regexEngine = createJavaScriptRegexEngine({
7633
7706
  forgiving: true,
7634
7707
  regexConstructor: (pattern) => defaultJavaScriptRegexConstructor(pattern, { lazyCompileLength: Number.POSITIVE_INFINITY })
7635
7708
  });
7709
+ /**
7710
+ * Lines at least this many UTF-16 units long render as one uncolored token.
7711
+ * With the JavaScript regex engine, scanning one JavaScript string-literal
7712
+ * line costs about 70 ms at 1,000 units, 300 ms at 2,000, 600 ms at 5,000 and
7713
+ * 2.5 s at 10,000, so this cap keeps one line within a few frames. A skipped
7714
+ * line leaves the grammar state unchanged: a multi-line construct that opens
7715
+ * or closes on it colors the following lines as if the line were absent.
7716
+ */
7717
+ const TOKENIZE_MAX_LINE_LENGTH = 1e3;
7636
7718
  let singleton;
7637
7719
  /** Representative paths through every boot grammar, compiled before user content is timed. */
7638
7720
  const BOOT_GRAMMAR_WARMUPS = [
@@ -7740,7 +7822,8 @@ function highlightToHtml(code, lang) {
7740
7822
  if (!ensureGrammar(resolved)) return void 0;
7741
7823
  return highlighter().codeToHtml(code, {
7742
7824
  lang: resolved,
7743
- theme: "css-variables"
7825
+ theme: "css-variables",
7826
+ tokenizeMaxLineLength: TOKENIZE_MAX_LINE_LENGTH
7744
7827
  });
7745
7828
  }
7746
7829
  /** vscode-textmate FontStyle bits shiki folds into `text-decoration` values. */
@@ -7833,6 +7916,7 @@ var StreamingHighlightSession = class {
7833
7916
  return highlighter().codeToTokensBase(text, {
7834
7917
  lang: resolved,
7835
7918
  theme: "css-variables",
7919
+ tokenizeMaxLineLength: TOKENIZE_MAX_LINE_LENGTH,
7836
7920
  ...this.state === void 0 ? {} : { grammarState: this.state }
7837
7921
  });
7838
7922
  }
@@ -7912,7 +7996,8 @@ function highlightLines(code, lang) {
7912
7996
  if (!ensureGrammar(resolved)) return void 0;
7913
7997
  const { tokens } = highlighter().codeToTokens(code, {
7914
7998
  lang: resolved,
7915
- theme: "css-variables"
7999
+ theme: "css-variables",
8000
+ tokenizeMaxLineLength: TOKENIZE_MAX_LINE_LENGTH
7916
8001
  });
7917
8002
  const last = tokens[tokens.length - 1];
7918
8003
  return (tokens.length > 1 && last !== void 0 && last.length === 0 ? tokens.slice(0, -1) : tokens).map((line) => line.map((token) => ({
@@ -8145,7 +8230,7 @@ function JsonCopyAction({ store, target, persistent, labels, onCopy, onClose })
8145
8230
  const object = typeof target.value === "object" && target.value !== null;
8146
8231
  const copyTitle = state === "copied" ? labels.copied : state === "failed" ? labels.copyFailed : object ? labels.copyPrettyJson : labels.copyValue;
8147
8232
  return jsx("span", {
8148
- className: css$26.copySlot,
8233
+ className: css$27.copySlot,
8149
8234
  children: (persistent || snapshot !== void 0) && jsx(Menu, {
8150
8235
  open: snapshot?.menuOpen === true,
8151
8236
  compact: true,
@@ -8154,7 +8239,7 @@ function JsonCopyAction({ store, target, persistent, labels, onCopy, onClose })
8154
8239
  anchor: jsx("button", {
8155
8240
  ref: buttonRef,
8156
8241
  type: "button",
8157
- className: css$26.actionButton,
8242
+ className: css$27.actionButton,
8158
8243
  "data-json-copy-button": true,
8159
8244
  "data-state": state,
8160
8245
  "aria-label": copyTitle,
@@ -8193,35 +8278,35 @@ function bracketOf(value) {
8193
8278
  }
8194
8279
  function previewPrimitive(value) {
8195
8280
  if (value === null) return jsx("span", {
8196
- className: css$26.keywordValue,
8281
+ className: css$27.keywordValue,
8197
8282
  children: "null"
8198
8283
  });
8199
8284
  if (typeof value === "string") return jsx("span", {
8200
- className: css$26.stringValue,
8285
+ className: css$27.stringValue,
8201
8286
  children: JSON.stringify(value)
8202
8287
  });
8203
8288
  if (typeof value === "number") return jsx("span", {
8204
- className: css$26.numberValue,
8289
+ className: css$27.numberValue,
8205
8290
  children: String(value)
8206
8291
  });
8207
8292
  if (typeof value === "boolean") return jsx("span", {
8208
- className: css$26.keywordValue,
8293
+ className: css$27.keywordValue,
8209
8294
  children: String(value)
8210
8295
  });
8211
8296
  if (typeof value === "bigint") return jsx("span", {
8212
- className: css$26.otherValue,
8297
+ className: css$27.otherValue,
8213
8298
  children: value.toString()
8214
8299
  });
8215
8300
  if (typeof value === "undefined") return jsx("span", {
8216
- className: css$26.otherValue,
8301
+ className: css$27.otherValue,
8217
8302
  children: "undefined"
8218
8303
  });
8219
8304
  if (typeof value === "symbol") return jsx("span", {
8220
- className: css$26.otherValue,
8305
+ className: css$27.otherValue,
8221
8306
  children: value.description ?? "Symbol"
8222
8307
  });
8223
8308
  if (typeof value === "function") return jsx("span", {
8224
- className: css$26.otherValue,
8309
+ className: css$27.otherValue,
8225
8310
  children: value.name || "Function"
8226
8311
  });
8227
8312
  return null;
@@ -8235,71 +8320,71 @@ function previewValue(value, depth) {
8235
8320
  const [open, close] = bracketOf(value);
8236
8321
  return jsxs(Fragment, { children: [
8237
8322
  jsx("span", {
8238
- className: css$26.punctuation,
8323
+ className: css$27.punctuation,
8239
8324
  children: open
8240
8325
  }),
8241
8326
  depth >= PREVIEW_DEPTH_LIMIT ? jsx("span", {
8242
- className: css$26.previewEllipsis,
8327
+ className: css$27.previewEllipsis,
8243
8328
  children: "…"
8244
8329
  }) : visible.map(([key, item], index) => jsxs("span", { children: [
8245
8330
  index > 0 && jsx("span", {
8246
- className: css$26.punctuation,
8331
+ className: css$27.punctuation,
8247
8332
  children: ", "
8248
8333
  }),
8249
8334
  !array && jsxs(Fragment, { children: [jsx("span", {
8250
- className: css$26.previewProperty,
8335
+ className: css$27.previewProperty,
8251
8336
  children: key
8252
8337
  }), jsx("span", {
8253
- className: css$26.punctuation,
8338
+ className: css$27.punctuation,
8254
8339
  children: ": "
8255
8340
  })] }),
8256
8341
  previewValue(item, depth + 1)
8257
8342
  ] }, key)),
8258
8343
  depth < PREVIEW_DEPTH_LIMIT && entries.length > limit && jsx("span", {
8259
- className: css$26.previewEllipsis,
8344
+ className: css$27.previewEllipsis,
8260
8345
  children: ", …"
8261
8346
  }),
8262
8347
  jsx("span", {
8263
- className: css$26.punctuation,
8348
+ className: css$27.punctuation,
8264
8349
  children: close
8265
8350
  })
8266
8351
  ] });
8267
8352
  }
8268
8353
  function primitiveValue(value) {
8269
8354
  if (value === null) return jsx("span", {
8270
- className: css$26.keywordValue,
8355
+ className: css$27.keywordValue,
8271
8356
  children: "null"
8272
8357
  });
8273
8358
  if (typeof value === "string") return jsx("span", {
8274
- className: css$26.stringValue,
8359
+ className: css$27.stringValue,
8275
8360
  children: JSON.stringify(value)
8276
8361
  });
8277
8362
  if (typeof value === "boolean") return jsx("span", {
8278
- className: css$26.keywordValue,
8363
+ className: css$27.keywordValue,
8279
8364
  children: String(value)
8280
8365
  });
8281
8366
  if (typeof value === "number") return jsx("span", {
8282
- className: css$26.numberValue,
8367
+ className: css$27.numberValue,
8283
8368
  children: String(value)
8284
8369
  });
8285
8370
  if (typeof value === "bigint") return jsx("span", {
8286
- className: css$26.numberValue,
8371
+ className: css$27.numberValue,
8287
8372
  children: `${value.toString()}n`
8288
8373
  });
8289
8374
  if (value instanceof Date) return jsx("span", {
8290
- className: css$26.otherValue,
8375
+ className: css$27.otherValue,
8291
8376
  children: value.toISOString()
8292
8377
  });
8293
8378
  if (typeof value === "function") return jsxs("span", {
8294
- className: css$26.otherValue,
8379
+ className: css$27.otherValue,
8295
8380
  children: ["function() ", "{ }"]
8296
8381
  });
8297
8382
  if (typeof value === "undefined") return jsx("span", {
8298
- className: css$26.otherValue,
8383
+ className: css$27.otherValue,
8299
8384
  children: "undefined"
8300
8385
  });
8301
8386
  return jsx("span", {
8302
- className: css$26.otherValue,
8387
+ className: css$27.otherValue,
8303
8388
  children: value.toString()
8304
8389
  });
8305
8390
  }
@@ -8327,7 +8412,7 @@ function moveFocus(button, direction) {
8327
8412
  function NodeField({ field, expandable, onToggle }) {
8328
8413
  if (field === void 0) return null;
8329
8414
  return jsxs("span", {
8330
- className: clsx(css$26.label, expandable && css$26.clickableLabel),
8415
+ className: clsx(css$27.label, expandable && css$27.clickableLabel),
8331
8416
  onClick: expandable ? onToggle : void 0,
8332
8417
  children: [fieldText(field), ":"]
8333
8418
  });
@@ -8364,7 +8449,7 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8364
8449
  if (!expanded) return;
8365
8450
  const raw = rawRef.current;
8366
8451
  const clips = [];
8367
- const tree = raw.closest(`.${css$26.root}`);
8452
+ const tree = raw.closest(`.${css$27.root}`);
8368
8453
  for (let parent = tree.parentElement; parent !== null; parent = parent.parentElement) if (/auto|scroll|hidden|clip/.test(getComputedStyle(parent).overflowY)) clips.push(parent);
8369
8454
  const measure = () => {
8370
8455
  let top = 0;
@@ -8393,33 +8478,33 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8393
8478
  if (expanded) {
8394
8479
  const fieldId = `${contentsId}-field`;
8395
8480
  return jsxs("div", {
8396
- className: css$26.stringField,
8481
+ className: css$27.stringField,
8397
8482
  "data-expanded": true,
8398
8483
  children: [
8399
8484
  field !== void 0 && jsxs("span", {
8400
8485
  id: fieldId,
8401
- className: css$26.label,
8486
+ className: css$27.label,
8402
8487
  children: [fieldText(field), ":"]
8403
8488
  }),
8404
8489
  jsx("pre", {
8405
8490
  ref: rawRef,
8406
8491
  id: contentsId,
8407
- className: css$26.stringRaw,
8492
+ className: css$27.stringRaw,
8408
8493
  "data-wrap": wrapped,
8409
8494
  tabIndex: 0,
8410
8495
  "aria-labelledby": field === void 0 ? void 0 : fieldId,
8411
8496
  children: value
8412
8497
  }),
8413
8498
  !lastElement && jsx("span", {
8414
- className: css$26.punctuation,
8499
+ className: css$27.punctuation,
8415
8500
  children: ","
8416
8501
  }),
8417
8502
  jsxs("div", {
8418
- className: css$26.stringActions,
8503
+ className: css$27.stringActions,
8419
8504
  children: [
8420
8505
  stringWrapping !== void 0 && jsx("button", {
8421
8506
  type: "button",
8422
- className: css$26.actionButton,
8507
+ className: css$27.actionButton,
8423
8508
  "aria-label": stringWrapping.label,
8424
8509
  title: stringWrapping.label,
8425
8510
  "aria-pressed": wrapped,
@@ -8433,7 +8518,7 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8433
8518
  }),
8434
8519
  jsx("button", {
8435
8520
  type: "button",
8436
- className: css$26.actionButton,
8521
+ className: css$27.actionButton,
8437
8522
  "aria-label": labels.collapseNode,
8438
8523
  title: labels.collapseNode,
8439
8524
  "aria-expanded": true,
@@ -8458,18 +8543,18 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8458
8543
  });
8459
8544
  }
8460
8545
  return jsxs(Fragment, { children: [renderCopy?.(), jsx("span", {
8461
- className: css$26.stringField,
8546
+ className: css$27.stringField,
8462
8547
  "data-expanded": expanded,
8463
8548
  children: jsxs("span", {
8464
8549
  ref: contentRef,
8465
8550
  id: contentsId,
8466
- className: css$26.stringText,
8551
+ className: css$27.stringText,
8467
8552
  children: [
8468
8553
  truncated && jsx("span", {
8469
- className: css$26.stringToggleSlot,
8554
+ className: css$27.stringToggleSlot,
8470
8555
  children: jsxs("button", {
8471
8556
  type: "button",
8472
- className: css$26.stringToggle,
8557
+ className: css$27.stringToggle,
8473
8558
  "aria-label": labels.expandNode,
8474
8559
  "aria-expanded": false,
8475
8560
  "aria-controls": contentsId,
@@ -8484,12 +8569,12 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8484
8569
  })
8485
8570
  }),
8486
8571
  field !== void 0 && jsxs("span", {
8487
- className: css$26.label,
8572
+ className: css$27.label,
8488
8573
  children: [fieldText(field), ":"]
8489
8574
  }),
8490
8575
  primitiveValue(value),
8491
8576
  !lastElement && jsx("span", {
8492
- className: css$26.punctuation,
8577
+ className: css$27.punctuation,
8493
8578
  children: ","
8494
8579
  })
8495
8580
  ]
@@ -8520,7 +8605,7 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8520
8605
  }
8521
8606
  };
8522
8607
  const row = (children, ariaExpanded) => jsxs("div", {
8523
- className: css$26.row,
8608
+ className: css$27.row,
8524
8609
  role: "treeitem",
8525
8610
  "aria-expanded": ariaExpanded,
8526
8611
  onMouseOver: (event) => {
@@ -8555,7 +8640,7 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8555
8640
  }),
8556
8641
  primitiveValue(value),
8557
8642
  !lastElement && jsx("span", {
8558
- className: css$26.punctuation,
8643
+ className: css$27.punctuation,
8559
8644
  children: ","
8560
8645
  })
8561
8646
  ] }));
@@ -8567,22 +8652,22 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8567
8652
  onToggle: toggle
8568
8653
  }),
8569
8654
  jsx("span", {
8570
- className: css$26.punctuation,
8655
+ className: css$27.punctuation,
8571
8656
  children: open
8572
8657
  }),
8573
8658
  jsx("span", {
8574
- className: css$26.punctuation,
8659
+ className: css$27.punctuation,
8575
8660
  children: close
8576
8661
  }),
8577
8662
  !lastElement && jsx("span", {
8578
- className: css$26.punctuation,
8663
+ className: css$27.punctuation,
8579
8664
  children: ","
8580
8665
  })
8581
8666
  ] }));
8582
8667
  return row(jsxs(Fragment, { children: [
8583
8668
  jsx("span", {
8584
8669
  ref: expanderRef,
8585
- className: clsx(css$26.expander, expanded ? css$26.collapseIcon : css$26.expandIcon),
8670
+ className: clsx(css$27.expander, expanded ? css$27.collapseIcon : css$27.expandIcon),
8586
8671
  "data-json-expander": true,
8587
8672
  role: "button",
8588
8673
  "aria-label": expanded ? labels.collapseNode : labels.expandNode,
@@ -8596,7 +8681,7 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8596
8681
  onKeyDown: onExpanderKeyDown
8597
8682
  }),
8598
8683
  jsxs("span", {
8599
- className: css$26.summary,
8684
+ className: css$27.summary,
8600
8685
  children: [
8601
8686
  jsx(NodeField, {
8602
8687
  field,
@@ -8604,11 +8689,11 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8604
8689
  onToggle: toggle
8605
8690
  }),
8606
8691
  jsx("span", {
8607
- className: css$26.preview,
8692
+ className: css$27.preview,
8608
8693
  children: previewValue(value, 0)
8609
8694
  }),
8610
8695
  !lastElement && jsx("span", {
8611
- className: css$26.punctuation,
8696
+ className: css$27.punctuation,
8612
8697
  children: ","
8613
8698
  })
8614
8699
  ]
@@ -8616,7 +8701,7 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8616
8701
  expanded && jsx("ul", {
8617
8702
  id: contentsId,
8618
8703
  role: "group",
8619
- className: css$26.children,
8704
+ className: css$27.children,
8620
8705
  children: entries.map(([key, item], index) => jsx(JsonTreeNode, {
8621
8706
  collapsedStringLines,
8622
8707
  stringWrapping,
@@ -8748,17 +8833,17 @@ function JsonTree({ data, label, className, collapsedStringLines = 3, stringWrap
8748
8833
  onClose: clearCopyTarget
8749
8834
  }) : void 0;
8750
8835
  return jsx("div", {
8751
- className: clsx(css$26.root, className),
8836
+ className: clsx(css$27.root, className),
8752
8837
  style: { "--json-tree-collapsed-lines": collapsedStringLines },
8753
8838
  onMouseOver: handleRootMouseOver,
8754
8839
  onMouseLeave: () => {
8755
8840
  if (!copyStore.get()?.menuOpen) clearCopyTarget();
8756
8841
  },
8757
8842
  children: expandTopLevel ? jsxs("div", {
8758
- className: css$26.expandedTopLevel,
8843
+ className: css$27.expandedTopLevel,
8759
8844
  children: [
8760
8845
  jsxs("div", {
8761
- className: clsx(css$26.row, css$26.topLevelBracket),
8846
+ className: clsx(css$27.row, css$27.topLevelBracket),
8762
8847
  "data-json-root-row": true,
8763
8848
  onMouseOver: (event) => {
8764
8849
  event.stopPropagation();
@@ -8771,13 +8856,13 @@ function JsonTree({ data, label, className, collapsedStringLines = 3, stringWrap
8771
8856
  path: [],
8772
8857
  value: data
8773
8858
  }), jsx("span", {
8774
- className: css$26.punctuation,
8859
+ className: css$27.punctuation,
8775
8860
  children: rootOpen
8776
8861
  })]
8777
8862
  }),
8778
8863
  jsx("div", {
8779
8864
  "aria-label": label,
8780
- className: clsx(css$26.container, css$26.expandedTopLevelContainer),
8865
+ className: clsx(css$27.container, css$27.expandedTopLevelContainer),
8781
8866
  role: "tree",
8782
8867
  children: rootEntries.map(([key, value], index) => jsx(JsonTreeNode, {
8783
8868
  collapsedStringLines,
@@ -8795,16 +8880,16 @@ function JsonTree({ data, label, className, collapsedStringLines = 3, stringWrap
8795
8880
  }, key))
8796
8881
  }),
8797
8882
  jsx("div", {
8798
- className: clsx(css$26.row, css$26.topLevelBracket),
8883
+ className: clsx(css$27.row, css$27.topLevelBracket),
8799
8884
  children: jsx("span", {
8800
- className: css$26.punctuation,
8885
+ className: css$27.punctuation,
8801
8886
  children: rootClose
8802
8887
  })
8803
8888
  })
8804
8889
  ]
8805
8890
  }) : jsx("div", {
8806
8891
  "aria-label": label,
8807
- className: css$26.container,
8892
+ className: css$27.container,
8808
8893
  role: "tree",
8809
8894
  children: jsx(JsonTreeNode, {
8810
8895
  collapsedStringLines,
@@ -9266,6 +9351,44 @@ function useCopyFeedback(text) {
9266
9351
  };
9267
9352
  }
9268
9353
  //#endregion
9354
+ //#region lib/types/CommandText.js
9355
+ /** Selectable command text with keyboard access while horizontally overflowing. */
9356
+ /**
9357
+ * Render command text without adding Tab stops for content that fits.
9358
+ * @param props - Text, localized scrollport name, and owner styling.
9359
+ * @returns A horizontal text scrollport, named and keyboard-focusable only when overflowing.
9360
+ */
9361
+ function CommandText({ text, label, className }) {
9362
+ const ref = useRef(null);
9363
+ const [overflow, setOverflow] = useState(false);
9364
+ useLayoutEffect(() => {
9365
+ const element = ref.current;
9366
+ /* v8 ignore next -- the span is rendered unconditionally. */
9367
+ if (element === null) return void 0;
9368
+ const measure = () => {
9369
+ setOverflow(element.scrollWidth > element.clientWidth);
9370
+ };
9371
+ measure();
9372
+ const observer = typeof ResizeObserver === "undefined" ? void 0 : new ResizeObserver(measure);
9373
+ observer?.observe(element);
9374
+ const fonts = "fonts" in element.ownerDocument ? element.ownerDocument.fonts : void 0;
9375
+ fonts?.addEventListener("loadingdone", measure);
9376
+ return () => {
9377
+ observer?.disconnect();
9378
+ fonts?.removeEventListener("loadingdone", measure);
9379
+ };
9380
+ }, [text]);
9381
+ return jsx("span", {
9382
+ ref,
9383
+ className: clsx(css$29.text, className),
9384
+ "data-command-text": true,
9385
+ tabIndex: overflow ? 0 : void 0,
9386
+ role: overflow ? "group" : void 0,
9387
+ "aria-label": overflow ? label : void 0,
9388
+ children: text
9389
+ });
9390
+ }
9391
+ //#endregion
9269
9392
  //#region lib/types/TerminalBlock.js
9270
9393
  /** Output lines shown before the height cap collapses the middle. */
9271
9394
  const DEFAULT_TERMINAL_MAX_LINES = 16;
@@ -9367,67 +9490,68 @@ function TerminalBlock({ command, cwd, home, output, exitCode, signal, running =
9367
9490
  const { hidden, capped, headLines, tailLines } = headTailCap(lines.length, maxLines, expanded);
9368
9491
  const body = !running || !empty;
9369
9492
  return jsxs("div", {
9370
- className: clsx(css$27.block, className),
9493
+ className: clsx(css$28.block, className),
9371
9494
  "data-terminal": "",
9372
9495
  "data-running": running ? "" : void 0,
9373
9496
  "data-body": body ? "" : void 0,
9374
9497
  children: [jsxs("div", {
9375
- className: css$27.header,
9498
+ className: css$28.header,
9376
9499
  children: [
9377
9500
  jsxs("div", {
9378
- className: css$27.prompt,
9501
+ className: css$28.prompt,
9379
9502
  children: [runStateDot && jsx("span", {
9380
- className: css$27.runStateLabel,
9503
+ className: css$28.runStateLabel,
9381
9504
  children: state.label
9382
9505
  }), commandLines.map((line, index) => jsxs("div", {
9383
- className: css$27.promptLine,
9506
+ className: css$28.promptLine,
9384
9507
  children: [
9385
9508
  index === 0 && runStateDot && jsx(StateDot, {
9386
9509
  state: state.state,
9387
- className: css$27.runState
9510
+ className: css$28.runState
9388
9511
  }),
9389
9512
  jsx("span", {
9390
- className: css$27.cwd,
9513
+ className: css$28.cwd,
9391
9514
  children: index > 0 || cwd === void 0 ? "$" : promptLabel(cwd, home)
9392
9515
  }),
9393
- jsx("span", {
9394
- className: css$27.command,
9395
- children: line
9516
+ jsx(CommandText, {
9517
+ className: css$28.command,
9518
+ text: line,
9519
+ label: copy.commandLine(index + 1)
9396
9520
  })
9397
9521
  ]
9398
9522
  }, index))]
9399
9523
  }),
9400
9524
  status !== void 0 && jsx(Pill, {
9401
- className: css$27.status,
9525
+ className: css$28.status,
9402
9526
  children: status
9403
9527
  }),
9404
9528
  (copyText !== void 0 || !running && !empty) && jsx("button", {
9405
9529
  type: "button",
9406
- className: css$27.copyButton,
9530
+ className: css$28.copyButton,
9407
9531
  onClick: onCopy,
9408
9532
  children: copied ? copy.copied : copy.copy
9409
9533
  })
9410
9534
  ]
9411
9535
  }), body && (empty ? jsx("div", {
9412
- className: css$27.empty,
9536
+ className: css$28.empty,
9413
9537
  children: copy.noOutput
9414
9538
  }) : jsxs("div", {
9415
- className: css$27.output,
9539
+ className: css$28.output,
9416
9540
  children: [
9417
9541
  (capped ? lines.slice(0, headLines) : lines).map((line, index) => jsx("div", {
9418
- className: css$27.line,
9542
+ className: css$28.line,
9419
9543
  children: renderLine$1(line)
9420
9544
  }, index)),
9421
9545
  hidden > 0 && jsx("button", {
9422
9546
  type: "button",
9423
- className: css$27.expand,
9547
+ className: css$28.expand,
9424
9548
  "aria-expanded": expanded,
9425
9549
  "aria-label": expanded ? copy.collapseAria : copy.expandAria(hidden),
9426
9550
  onClick: onToggle,
9427
9551
  children: expanded ? copy.collapse : copy.expand(hidden)
9428
9552
  }),
9429
9553
  capped && lines.slice(lines.length - tailLines).map((line, index) => jsx("div", {
9430
- className: css$27.line,
9554
+ className: css$28.line,
9431
9555
  children: renderLine$1(line)
9432
9556
  }, index))
9433
9557
  ]
@@ -9630,13 +9754,13 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
9630
9754
  const tailLines = maxLines - headLines;
9631
9755
  const windowed = lines.length < totalLines;
9632
9756
  const rows = (slice) => slice.map(([line, spans]) => jsxs("div", {
9633
- className: css$28.line,
9757
+ className: css$30.line,
9634
9758
  children: [jsx("span", {
9635
- className: css$28.gutter,
9759
+ className: css$30.gutter,
9636
9760
  "aria-hidden": true,
9637
9761
  children: line.number
9638
9762
  }), jsx("span", {
9639
- className: css$28.content,
9763
+ className: css$30.content,
9640
9764
  children: spans === void 0 ? line.text : renderSpans(spans)
9641
9765
  })]
9642
9766
  }, line.number));
@@ -9644,7 +9768,7 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
9644
9768
  const paired = lines.map((line, index) => [line, highlighted?.[index]]);
9645
9769
  return jsxs("div", {
9646
9770
  ref: rootRef,
9647
- className: clsx(cardCss.card, css$28.block, className),
9771
+ className: clsx(cardCss.card, css$30.block, className),
9648
9772
  "data-read": "",
9649
9773
  "data-code-wrap": wrapped,
9650
9774
  style: gutterStyle,
@@ -9666,7 +9790,7 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
9666
9790
  children: [
9667
9791
  rows(capped ? paired.slice(0, headLines) : paired),
9668
9792
  hidden > 0 && jsx(FoldToggle, {
9669
- className: css$28.expand,
9793
+ className: css$30.expand,
9670
9794
  expanded,
9671
9795
  hidden,
9672
9796
  labels,
@@ -9688,11 +9812,11 @@ function assertNever(value) {
9688
9812
  }
9689
9813
  /** The dim class per row kind (path/gap chrome vs the diff's own +/- colors). */
9690
9814
  const ROW_CLASS = {
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
9815
+ path: css$31.path,
9816
+ del: css$31.del,
9817
+ add: css$31.add,
9818
+ context: css$31.context,
9819
+ gap: css$31.gap
9696
9820
  };
9697
9821
  /** Bound synchronous edit-graph search; one replacement consumes two edits. */
9698
9822
  const MAX_DIFF_EDIT_LENGTH = 256;
@@ -9826,7 +9950,7 @@ function DiffBlock({ diffs, labels, maxLines = 16, className }) {
9826
9950
  const head = capped ? rows.slice(0, headLines) : rows;
9827
9951
  const tail = capped ? rows.slice(rows.length - tailLines) : [];
9828
9952
  return jsxs("div", {
9829
- className: clsx(cardCss.card, css$29.block, className),
9953
+ className: clsx(cardCss.card, css$31.block, className),
9830
9954
  "data-diff": "",
9831
9955
  "data-code-wrap": wrapped,
9832
9956
  children: [jsx(CodeToolbar, {
@@ -9841,21 +9965,21 @@ function DiffBlock({ diffs, labels, maxLines = 16, className }) {
9841
9965
  setWrapped((value) => !value);
9842
9966
  }
9843
9967
  }), jsxs("div", {
9844
- className: css$29.body,
9968
+ className: css$31.body,
9845
9969
  children: [
9846
9970
  head.map((row, index) => jsx("div", {
9847
- className: clsx(css$29.line, ROW_CLASS[row.kind]),
9971
+ className: clsx(css$31.line, ROW_CLASS[row.kind]),
9848
9972
  children: row.text
9849
9973
  }, index)),
9850
9974
  hidden > 0 && jsx(FoldToggle, {
9851
- className: css$29.expand,
9975
+ className: css$31.expand,
9852
9976
  expanded,
9853
9977
  hidden,
9854
9978
  labels,
9855
9979
  onToggle
9856
9980
  }),
9857
9981
  tail.map((row, index) => jsx("div", {
9858
- className: clsx(css$29.line, ROW_CLASS[row.kind]),
9982
+ className: clsx(css$31.line, ROW_CLASS[row.kind]),
9859
9983
  children: row.text
9860
9984
  }, index))
9861
9985
  ]
@@ -9985,56 +10109,56 @@ function SearchBlock(props) {
9985
10109
  const tail = tailHeader === void 0 ? naturalTail : naturalTail.slice(1);
9986
10110
  const renderRow = (row) => {
9987
10111
  if (row.type === "path") return jsx("div", {
9988
- className: css$30.line,
10112
+ className: css$32.line,
9989
10113
  children: row.path
9990
10114
  });
9991
10115
  if (row.type === "match") return jsxs("div", {
9992
- className: css$30.line,
10116
+ className: css$32.line,
9993
10117
  children: [jsxs("span", {
9994
- className: css$30.lineNumber,
10118
+ className: css$32.lineNumber,
9995
10119
  children: [row.lineNumber, ": "]
9996
10120
  }), row.line]
9997
10121
  });
9998
10122
  return jsxs("button", {
9999
10123
  type: "button",
10000
- className: css$30.fileHeader,
10124
+ className: css$32.fileHeader,
10001
10125
  "aria-expanded": !row.collapsed,
10002
10126
  onClick: () => {
10003
10127
  toggleFile(row.index);
10004
10128
  },
10005
10129
  children: [jsx("span", {
10006
- className: css$30.filePath,
10130
+ className: css$32.filePath,
10007
10131
  children: row.path
10008
10132
  }), jsx("span", {
10009
- className: css$30.fileCount,
10133
+ className: css$32.fileCount,
10010
10134
  children: row.count
10011
10135
  })]
10012
10136
  });
10013
10137
  };
10014
10138
  return jsxs("div", {
10015
- className: clsx(css$30.block, className),
10139
+ className: clsx(css$32.block, className),
10016
10140
  "data-search": props.kind,
10017
10141
  children: [jsxs("div", {
10018
- className: css$30.header,
10142
+ className: css$32.header,
10019
10143
  children: [jsx("span", {
10020
- className: css$30.summary,
10144
+ className: css$32.summary,
10021
10145
  children: summaryText(props, shown, truncated, total)
10022
10146
  }), !empty && jsx("button", {
10023
10147
  type: "button",
10024
- className: css$30.copyButton,
10148
+ className: css$32.copyButton,
10025
10149
  onClick: onCopy,
10026
10150
  children: copied ? props.labels.copied : props.labels.copy
10027
10151
  })]
10028
10152
  }), empty ? jsx("div", {
10029
- className: css$30.empty,
10153
+ className: css$32.empty,
10030
10154
  children: props.labels.noResults
10031
10155
  }) : jsxs("div", {
10032
- className: css$30.body,
10156
+ className: css$32.body,
10033
10157
  children: [
10034
10158
  head.map((row) => jsx("div", { children: renderRow(row) }, rowKey(row))),
10035
10159
  hidden > 0 && jsx("button", {
10036
10160
  type: "button",
10037
- className: css$30.expand,
10161
+ className: css$32.expand,
10038
10162
  "aria-expanded": expanded,
10039
10163
  "aria-label": expanded ? props.labels.collapseAria : props.labels.expandAria(hidden),
10040
10164
  onClick: onToggle,
@@ -10864,7 +10988,7 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
10864
10988
  });
10865
10989
  }, [copied, trimmed]);
10866
10990
  const body = streamedBody !== void 0 ? streamedBody : html === void 0 ? jsx("pre", {
10867
- className: css$31.plain,
10991
+ className: css$33.plain,
10868
10992
  children: jsx("code", { children: sourceLines === void 0 ? trimmed : sourceLines.map((line, index) => jsxs(Fragment$1, { children: [index > 0 && "\n", jsx("span", {
10869
10993
  className: "line",
10870
10994
  children: line
@@ -10872,12 +10996,12 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
10872
10996
  }) : jsx("div", { dangerouslySetInnerHTML: { __html: html } });
10873
10997
  return jsxs("div", {
10874
10998
  ref: rootRef,
10875
- className: clsx(css$31.block, "md-code-block", lineNumbers && css$31.numbered, toolbarLabels !== void 0 && css$31.card, className),
10999
+ className: clsx(css$33.block, "md-code-block", lineNumbers && css$33.numbered, toolbarLabels !== void 0 && css$33.card, className),
10876
11000
  "data-line-numbers": lineNumbers || void 0,
10877
11001
  "data-code-wrap": toolbarLabels === void 0 ? void 0 : wrapped,
10878
11002
  style: sourceLines === void 0 ? void 0 : { "--dsl-code-block-line-number-width": `${Math.max(2, String(sourceLines.length).length)}ch` },
10879
11003
  children: [showHeader && jsx("div", {
10880
- className: css$31.bannerWrap,
11004
+ className: css$33.bannerWrap,
10881
11005
  children: toolbarLabels !== void 0 ? jsx(CodeToolbar, {
10882
11006
  lang,
10883
11007
  labels: toolbarLabels,
@@ -10890,16 +11014,16 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
10890
11014
  setWrapped((value) => !value);
10891
11015
  } : void 0
10892
11016
  }) : jsxs("div", {
10893
- className: css$31.banner,
11017
+ className: css$33.banner,
10894
11018
  "data-code-block-banner": true,
10895
11019
  children: [jsx("div", {
10896
- className: css$31.infostring,
11020
+ className: css$33.infostring,
10897
11021
  children: lang ?? ""
10898
11022
  }), jsx("div", {
10899
- className: css$31.action,
11023
+ className: css$33.action,
10900
11024
  children: jsx("button", {
10901
11025
  type: "button",
10902
- className: css$31.copyButton,
11026
+ className: css$33.copyButton,
10903
11027
  onClick: onCopy,
10904
11028
  children: copied ? copiedLabel : copyLabel
10905
11029
  })
@@ -10907,7 +11031,7 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
10907
11031
  })
10908
11032
  }), jsx("div", {
10909
11033
  ref: contentRef,
10910
- className: css$31.content,
11034
+ className: css$33.content,
10911
11035
  "data-code-block-content": true,
10912
11036
  children: body
10913
11037
  })]
@@ -11096,31 +11220,34 @@ function ImageLightbox({ src, alt, labels, onClose }) {
11096
11220
  restoreRef.current?.focus();
11097
11221
  };
11098
11222
  }, [onClose]);
11099
- return createPortal(jsxs("div", {
11100
- className: css$32.backdrop,
11223
+ return createPortal(jsx("div", {
11224
+ className: css$34.backdrop,
11101
11225
  role: "dialog",
11102
11226
  "aria-modal": "true",
11103
11227
  "aria-label": labels.dialog,
11104
- children: [
11105
- jsx("div", {
11106
- className: css$32.mask,
11107
- "aria-hidden": "true",
11108
- onMouseDown: onClose
11109
- }),
11110
- jsx("img", {
11111
- className: css$32.image,
11112
- src,
11113
- alt
11114
- }),
11115
- jsx("button", {
11116
- ref: closeRef,
11117
- type: "button",
11118
- className: css$32.close,
11119
- "aria-label": labels.close,
11120
- onClick: onClose,
11121
- children: jsx(IconCloseOutlineRegular, { size: 16 })
11122
- })
11123
- ]
11228
+ children: jsxs("div", {
11229
+ className: css$34.stage,
11230
+ children: [
11231
+ jsx("div", {
11232
+ className: css$34.mask,
11233
+ "aria-hidden": "true",
11234
+ onMouseDown: onClose
11235
+ }),
11236
+ jsx("img", {
11237
+ className: css$34.image,
11238
+ src,
11239
+ alt
11240
+ }),
11241
+ jsx("button", {
11242
+ ref: closeRef,
11243
+ type: "button",
11244
+ className: css$34.close,
11245
+ "aria-label": labels.close,
11246
+ onClick: onClose,
11247
+ children: jsx(IconCloseOutlineRegular, { size: 16 })
11248
+ })
11249
+ ]
11250
+ })
11124
11251
  }), document.body);
11125
11252
  }
11126
11253
  //#endregion
@@ -11142,14 +11269,14 @@ function ImagePreview({ src, alt, loadingLabel, failedLabel }) {
11142
11269
  function Preview({ src, alt, loadingLabel, failedLabel }) {
11143
11270
  const [state, setState] = useState("loading");
11144
11271
  return jsxs("span", {
11145
- className: css$33.frame,
11272
+ className: css$35.frame,
11146
11273
  children: [state !== "failed" && jsx("img", {
11147
11274
  src,
11148
11275
  alt,
11149
11276
  loading: "lazy",
11150
11277
  decoding: "async",
11151
11278
  referrerPolicy: "no-referrer",
11152
- className: css$33.image,
11279
+ className: css$35.image,
11153
11280
  "data-ready": state === "ready" || void 0,
11154
11281
  onLoad: () => {
11155
11282
  setState("ready");
@@ -11158,7 +11285,7 @@ function Preview({ src, alt, loadingLabel, failedLabel }) {
11158
11285
  setState("failed");
11159
11286
  }
11160
11287
  }), state !== "ready" && jsxs("span", {
11161
- className: css$33.status,
11288
+ className: css$35.status,
11162
11289
  role: "status",
11163
11290
  children: [state === "loading" && jsx(IconLoadingOutlineRegular, { size: 16 }), jsx("span", { children: state === "loading" ? loadingLabel : failedLabel })]
11164
11291
  })]
@@ -11897,7 +12024,7 @@ function SafeLink({ url, label, className }) {
11897
12024
  children: [jsx(LinkIconMedium, {
11898
12025
  kind: "url",
11899
12026
  href,
11900
- className: css$34.linkIcon
12027
+ className: css$36.linkIcon
11901
12028
  }), label]
11902
12029
  });
11903
12030
  }
@@ -11912,20 +12039,20 @@ function SafeLink({ url, label, className }) {
11912
12039
  */
11913
12040
  function SourceItem({ source, ordinal }) {
11914
12041
  return jsxs("li", {
11915
- className: css$34.source,
12042
+ className: css$36.source,
11916
12043
  value: ordinal,
11917
12044
  children: [
11918
12045
  jsx(SafeLink, {
11919
12046
  url: source.url,
11920
12047
  label: linkLabel(source.url, source.title),
11921
- className: css$34.sourceLink
12048
+ className: css$36.sourceLink
11922
12049
  }),
11923
12050
  source.snippet !== void 0 && source.snippet !== "" && jsx("div", {
11924
- className: css$34.snippet,
12051
+ className: css$36.snippet,
11925
12052
  children: source.snippet
11926
12053
  }),
11927
12054
  source.publishedAt !== void 0 && source.publishedAt !== "" && jsx("div", {
11928
- className: css$34.published,
12055
+ className: css$36.published,
11929
12056
  children: source.publishedAt
11930
12057
  })
11931
12058
  ]
@@ -11940,28 +12067,28 @@ function SourceItem({ source, ordinal }) {
11940
12067
  function WebSearchBlock({ answer, sources, truncated, labels, className }) {
11941
12068
  const empty = (answer === void 0 || answer === "") && sources.length === 0;
11942
12069
  return jsxs("div", {
11943
- className: clsx(css$34.block, className),
12070
+ className: clsx(css$36.block, className),
11944
12071
  "data-web": "search",
11945
12072
  children: [
11946
12073
  answer !== void 0 && answer !== "" && jsx("div", {
11947
- className: css$34.answer,
12074
+ className: css$36.answer,
11948
12075
  children: jsx(MarkdownText, {
11949
12076
  text: answer,
11950
12077
  labels: labels.markdown
11951
12078
  })
11952
12079
  }),
11953
12080
  empty ? jsx("div", {
11954
- className: css$34.empty,
12081
+ className: css$36.empty,
11955
12082
  children: labels.noResults
11956
12083
  }) : jsx("ol", {
11957
- className: css$34.sources,
12084
+ className: css$36.sources,
11958
12085
  children: sources.map((source, index) => jsx(SourceItem, {
11959
12086
  source,
11960
12087
  ordinal: index + 1
11961
12088
  }, index))
11962
12089
  }),
11963
12090
  truncated && jsx("div", {
11964
- className: css$34.truncated,
12091
+ className: css$36.truncated,
11965
12092
  children: labels.sourcesTruncated
11966
12093
  })
11967
12094
  ]
@@ -11974,23 +12101,23 @@ function WebSearchBlock({ answer, sources, truncated, labels, className }) {
11974
12101
  */
11975
12102
  function WebFetchBlock({ url, statusCode, truncated, labels, className }) {
11976
12103
  return jsxs("div", {
11977
- className: clsx(css$34.block, css$34.fetch, className),
12104
+ className: clsx(css$36.block, css$36.fetch, className),
11978
12105
  "data-web": "fetch",
11979
12106
  children: [jsx(SafeLink, {
11980
12107
  url,
11981
12108
  label: url,
11982
- className: css$34.fetchUrl
12109
+ className: css$36.fetchUrl
11983
12110
  }), jsxs("div", {
11984
- className: css$34.fetchMeta,
12111
+ className: css$36.fetchMeta,
11985
12112
  children: [jsxs("span", {
11986
- className: css$34.status,
12113
+ className: css$36.status,
11987
12114
  children: [
11988
12115
  labels.http,
11989
12116
  " ",
11990
12117
  statusCode
11991
12118
  ]
11992
12119
  }), truncated && jsx("span", {
11993
- className: css$34.truncated,
12120
+ className: css$36.truncated,
11994
12121
  children: labels.contentTruncated
11995
12122
  })]
11996
12123
  })]
@@ -12024,10 +12151,10 @@ function JsonBlock({ label, payload, defaultOpen = false, truncatedLabel }) {
12024
12151
  truncatedLabel
12025
12152
  ]);
12026
12153
  return jsxs("div", {
12027
- className: css$35.root,
12154
+ className: css$37.root,
12028
12155
  children: [jsxs("button", {
12029
12156
  type: "button",
12030
- className: css$35.toggle,
12157
+ className: css$37.toggle,
12031
12158
  onClick: () => {
12032
12159
  setOpen((v) => !v);
12033
12160
  },
@@ -12037,7 +12164,7 @@ function JsonBlock({ label, payload, defaultOpen = false, truncatedLabel }) {
12037
12164
  label
12038
12165
  ]
12039
12166
  }), open && jsx("pre", {
12040
- className: css$35.body,
12167
+ className: css$37.body,
12041
12168
  children: body
12042
12169
  })]
12043
12170
  });
@@ -12378,6 +12505,6 @@ function GuideArtworkFiles({ size = 36, className }) {
12378
12505
  });
12379
12506
  }
12380
12507
  //#endregion
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 };
12508
+ export { BrandWordmark, Button, CODE_HIGHLIGHT_EXTENSIONS, Checkbox, CodeBlock, CommandText, 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, InlineEditor, 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 };
12382
12509
 
12383
12510
  //# sourceMappingURL=index.js.map