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

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,22 +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 "./Tooltip.module.css";
22
- import css$16 from "./HoverCard.module.css";
23
- import css$17 from "./Modal.module.css";
24
- import css$18 from "./RiskConfirmation.module.css";
25
- import css$19 from "./ConnectionIndicator.module.css";
26
- import css$20 from "./FileTypeIcon.module.css";
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";
27
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";
28
- import css$21 from "./user-text.module.css";
30
+ import css$23 from "./user-text.module.css";
29
31
  import markdownCss from "./markdown/MarkdownText.module.css";
30
- import css$22 from "./Toast.module.css";
31
- import css$23 from "./settings-form/SettingsForm.module.css";
32
- import css$24 from "./settings-form/fields.module.css";
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";
33
35
  import { createSnapshotStore } from "@deepseek-ai/dsh-client-store";
34
36
  import { createCssVariablesTheme, createHighlighterCoreSync } from "shiki/core";
35
37
  import { createJavaScriptRegexEngine, defaultJavaScriptRegexConstructor } from "shiki/engine/javascript";
@@ -37,14 +39,14 @@ import langTs from "@shikijs/langs/typescript";
37
39
  import langBash from "@shikijs/langs/shellscript";
38
40
  import langJson from "@shikijs/langs/json";
39
41
  import { CODE_HIGHLIGHT_EXTENSIONS, languageForPath } from "@deepseek-ai/dsh-util-code-language";
40
- import css$25 from "./JsonTree.module.css";
42
+ import css$27 from "./JsonTree.module.css";
41
43
  import Anser from "anser";
42
- import css$26 from "./TerminalBlock.module.css";
44
+ import css$28 from "./TerminalBlock.module.css";
43
45
  import cardCss from "./CodeCard.module.css";
44
- import css$27 from "./ReadBlock.module.css";
46
+ import css$29 from "./ReadBlock.module.css";
45
47
  import { structuredPatch } from "diff";
46
- import css$28 from "./DiffBlock.module.css";
47
- import css$29 from "./SearchBlock.module.css";
48
+ import css$30 from "./DiffBlock.module.css";
49
+ import css$31 from "./SearchBlock.module.css";
48
50
  import { fromMarkdown } from "mdast-util-from-markdown";
49
51
  import { gfmFromMarkdown } from "mdast-util-gfm";
50
52
  import { mathFromMarkdown } from "mdast-util-math";
@@ -56,13 +58,13 @@ import { classifyCharacter } from "micromark-util-classify-character";
56
58
  import { codes, constants, types } from "micromark-util-symbol";
57
59
  import { factorySpace } from "micromark-factory-space";
58
60
  import { normalizeUri } from "micromark-util-sanitize-uri";
59
- import css$30 from "./markdown/CodeBlock.module.css";
61
+ import css$32 from "./markdown/CodeBlock.module.css";
60
62
  import katex from "katex";
61
- import css$31 from "./ImageLightbox.module.css";
62
- import css$32 from "./ImagePreview.module.css";
63
+ import css$33 from "./ImageLightbox.module.css";
64
+ import css$34 from "./ImagePreview.module.css";
63
65
  import "katex/dist/katex.min.css";
64
- import css$33 from "./WebBlock.module.css";
65
- import css$34 from "./markdown/JsonBlock.module.css";
66
+ import css$35 from "./WebBlock.module.css";
67
+ import css$36 from "./markdown/JsonBlock.module.css";
66
68
  //#region lib/types/icons/shared-artwork.js
67
69
  /**
68
70
  * Render new-conversation geometry — the bubble around a plus — for product icons.
@@ -938,15 +940,15 @@ const IconThinkOutlineArtwork = ({ size = 16, className, strokeWidth }) => jsxs(
938
940
  strokeWidth,
939
941
  children: [
940
942
  jsx("path", {
941
- d: "M10.7554 5.24466C13.9891 8.4783 15.3769 12.3333 13.8552 13.8551C12.3335 15.3768 8.4785 13.989 5.24478 10.7553C2.01111 7.52165 0.623307 3.66664 2.14504 2.14491C3.66676 0.623189 7.52178 2.01099 10.7554 5.24466Z",
943
+ d: "M10.2854 5.71481C12.9673 8.39663 14.1182 11.5938 12.8562 12.8559C11.5942 14.1179 8.39706 12.9669 5.71518 10.2851C3.03333 7.60323 1.88236 4.40608 3.14441 3.14403C4.40644 1.882 7.6036 3.03297 10.2854 5.71481Z",
942
944
  stroke: "currentColor"
943
945
  }),
944
946
  jsx("path", {
945
- d: "M10.7554 10.7553C7.52178 13.989 3.66676 15.3768 2.14504 13.8551C0.623307 12.3333 2.01111 8.4783 5.24478 5.24466C8.4785 2.01099 12.3335 0.623189 13.8552 2.14491C15.3769 3.66664 13.9891 7.52165 10.7554 10.7553Z",
947
+ d: "M10.2854 10.2851C7.6036 12.9669 4.40644 14.1179 3.14441 12.8559C1.88236 11.5938 3.03333 8.39663 5.71518 5.71481C8.39706 3.03297 11.5942 1.882 12.8562 3.14403C14.1182 4.40608 12.9673 7.60323 10.2854 10.2851Z",
946
948
  stroke: "currentColor"
947
949
  }),
948
950
  jsx("path", {
949
- d: "M8.9587 8.00025C8.9587 8.52835 8.5306 8.95655 8.0024 8.95655C7.47429 8.95655 7.04614 8.52835 7.04614 8.00025C7.04614 7.47209 7.47429 7.04395 8.0024 7.04395C8.5306 7.04395 8.9587 7.47209 8.9587 8.00025Z",
951
+ d: "M8.86291 8.0002C8.86291 8.47549 8.47762 8.86087 8.00224 8.86087C7.52694 8.86087 7.1416 8.47549 7.1416 8.0002C7.1416 7.52485 7.52694 7.13953 8.00224 7.13953C8.47762 7.13953 8.86291 7.52485 8.86291 8.0002Z",
950
952
  fill: "currentColor"
951
953
  })
952
954
  ]
@@ -3039,12 +3041,24 @@ const IconMicrophoneOutlineMedium = (props) => jsx(IconMicrophoneOutlineArtwork,
3039
3041
  //#region lib/types/StateDot.js
3040
3042
  /**
3041
3043
  * Pin the loader's CSS animations to document time zero. A CSS animation starts
3042
- * when its element is inserted, so loaders mounted at different moments rotate
3043
- * out of phase; one shared start time keeps every visible loader in step.
3044
+ * when its element is inserted and restarts when the element is moved or shown
3045
+ * again, so loaders started at different moments rotate out of phase; one shared
3046
+ * start time keeps every visible loader in step. Mount pins the first start; the
3047
+ * element's own `animationstart` listener pins each restart.
3044
3048
  * @param element - the mounted loader, or null on unmount.
3045
3049
  */
3046
3050
  function syncSpinner(element) {
3047
3051
  if (element === null) return;
3052
+ pinSpinner(element);
3053
+ element.addEventListener("animationstart", () => {
3054
+ pinSpinner(element);
3055
+ });
3056
+ }
3057
+ /**
3058
+ * Set every CSS animation in the loader's subtree to start at document time zero.
3059
+ * @param element - the mounted loader.
3060
+ */
3061
+ function pinSpinner(element) {
3048
3062
  const spinner = element;
3049
3063
  for (const animation of spinner.getAnimations?.({ subtree: true }) ?? []) animation.startTime = 0;
3050
3064
  }
@@ -3183,6 +3197,7 @@ const DisclosureRow = memo(function DisclosureRow({ icon, title, open, expandabl
3183
3197
  children: [expandable && !rowExpands ? jsx("button", {
3184
3198
  type: "button",
3185
3199
  className: clsx(css$2.leading, leadingClassName),
3200
+ "aria-label": title,
3186
3201
  "aria-expanded": open,
3187
3202
  onClick: toggleFromLeading,
3188
3203
  children: leading
@@ -3521,19 +3536,75 @@ function Checkbox({ checked, onChange, label, disabled = false, title, className
3521
3536
  /**
3522
3537
  * Render a text input with an optional leading icon.
3523
3538
  * @param props.icon - optional 16px leading icon node.
3539
+ * @param ref - the native input, cleared when it unmounts.
3524
3540
  * @returns wrapper span containing the native input; input attributes pass through.
3525
3541
  */
3526
- function Input({ icon, className, ...rest }) {
3542
+ const Input = forwardRef(function Input({ icon, className, ...rest }, ref) {
3527
3543
  return jsxs("span", {
3528
3544
  className: clsx(css$11.wrap, className),
3529
3545
  children: [icon != null && jsx("span", {
3530
3546
  className: css$11.icon,
3531
3547
  children: icon
3532
3548
  }), jsx("input", {
3549
+ ref,
3533
3550
  className: css$11.input,
3534
3551
  ...rest
3535
3552
  })]
3536
3553
  });
3554
+ });
3555
+ //#endregion
3556
+ //#region lib/types/InlineEditor.js
3557
+ /** Multi-line inline editor for short saved-on-Enter drafts such as queued messages and goals. */
3558
+ /**
3559
+ * Render an autofocused textarea that grows with its text up to six lines, then scrolls.
3560
+ * A textarea rather than an input: HTML strips newlines from single-line input values.
3561
+ * Enter saves, Shift+Enter breaks the line, Enter during IME composition does nothing,
3562
+ * and Escape cancels.
3563
+ * @param props.value - current draft text.
3564
+ * @param props.label - localized accessible name.
3565
+ * @param props.onChange - receives the edited text.
3566
+ * @param props.onSave - called for a plain Enter.
3567
+ * @param props.onCancel - called for Escape.
3568
+ * @param props.className - extra class for the editor's placement.
3569
+ * @returns the textarea.
3570
+ */
3571
+ function InlineEditor({ value, label, onChange, onSave, onCancel, className }) {
3572
+ const ref = useRef(null);
3573
+ useLayoutEffect(() => {
3574
+ const node = ref.current;
3575
+ const fit = () => {
3576
+ node.style.height = "auto";
3577
+ node.style.height = `${node.scrollHeight + node.offsetHeight - node.clientHeight}px`;
3578
+ };
3579
+ fit();
3580
+ const observer = new ResizeObserver(fit);
3581
+ observer.observe(node);
3582
+ return () => {
3583
+ observer.disconnect();
3584
+ };
3585
+ }, [value]);
3586
+ const onKeyDown = (event) => {
3587
+ if (event.key === "Escape") {
3588
+ onCancel();
3589
+ return;
3590
+ }
3591
+ const composing = event.nativeEvent.isComposing || Reflect.get(event.nativeEvent, "keyCode") === 229;
3592
+ if (event.key !== "Enter" || event.shiftKey || composing) return;
3593
+ event.preventDefault();
3594
+ onSave();
3595
+ };
3596
+ return jsx("textarea", {
3597
+ ref,
3598
+ autoFocus: true,
3599
+ rows: 1,
3600
+ className: clsx(css$12.editor, className),
3601
+ "aria-label": label,
3602
+ value,
3603
+ onChange: (event) => {
3604
+ onChange(event.currentTarget.value);
3605
+ },
3606
+ onKeyDown
3607
+ });
3537
3608
  }
3538
3609
  //#endregion
3539
3610
  //#region lib/types/overlay-top-margin.js
@@ -3758,9 +3829,9 @@ function useModalLayer(dialog, open, onClose) {
3758
3829
  */
3759
3830
  function ShortcutKeys({ keys, variant = "plain", className }) {
3760
3831
  return jsx("span", {
3761
- className: clsx(css$12.keys, variant === "tooltip" && css$12.tooltip, variant === "tooltip" && keys.includes("+") && css$12.joined, className),
3832
+ className: clsx(css$13.keys, variant === "tooltip" && css$13.tooltip, variant === "tooltip" && keys.includes("+") && css$13.joined, className),
3762
3833
  children: keys.map((key, index) => jsx("kbd", {
3763
- className: key === "+" ? css$12.separator : css$12.key,
3834
+ className: key === "+" ? css$13.separator : css$13.key,
3764
3835
  children: key
3765
3836
  }, index))
3766
3837
  });
@@ -3786,20 +3857,20 @@ const MenuSurface = forwardRef(function MenuSurface({ compact = false, className
3786
3857
  ...props,
3787
3858
  ref,
3788
3859
  "data-menu-material": "translucent",
3789
- className: clsx(css$13.surface, compact && css$13.compact, className),
3860
+ className: clsx(css$14.surface, compact && css$14.compact, className),
3790
3861
  style: {
3791
3862
  ...style,
3792
3863
  ...anchorStyle
3793
3864
  },
3794
3865
  children: [jsx("div", {
3795
3866
  "aria-hidden": "true",
3796
- className: css$13.material
3867
+ className: css$14.material
3797
3868
  }), children]
3798
3869
  }), createPortal(jsx("div", {
3799
3870
  ref: backingRef,
3800
3871
  "aria-hidden": "true",
3801
3872
  "data-menu-backing": "",
3802
- className: clsx(css$13.backing, compact && css$13.compact),
3873
+ className: clsx(css$14.backing, compact && css$14.compact),
3803
3874
  style: {
3804
3875
  ...anchorStyle,
3805
3876
  visibility: style?.visibility
@@ -3825,32 +3896,32 @@ const MenuSurface = forwardRef(function MenuSurface({ compact = false, className
3825
3896
  */
3826
3897
  function MenuItemButton({ children, shortcut, icon, disabled = false, danger = false, separatorBefore = false, onSelect }) {
3827
3898
  return jsxs("div", {
3828
- className: css$14.itemWrap,
3899
+ className: css$15.itemWrap,
3829
3900
  children: [separatorBefore && jsx("div", {
3830
- className: css$14.separator,
3901
+ className: css$15.separator,
3831
3902
  role: "separator"
3832
3903
  }), jsxs("button", {
3833
3904
  type: "button",
3834
3905
  role: "menuitem",
3835
- className: clsx(css$14.item, danger && css$14.danger),
3906
+ className: clsx(css$15.item, danger && css$15.danger),
3836
3907
  disabled,
3837
3908
  "aria-keyshortcuts": shortcut?.aria,
3838
3909
  onClick: onSelect,
3839
3910
  children: [
3840
3911
  icon !== void 0 && jsx("span", {
3841
- className: css$14.itemIcon,
3912
+ className: css$15.itemIcon,
3842
3913
  children: icon
3843
3914
  }),
3844
3915
  jsx("span", {
3845
- className: css$14.itemLabel,
3916
+ className: css$15.itemLabel,
3846
3917
  children
3847
3918
  }),
3848
3919
  shortcut !== void 0 && jsx("span", {
3849
3920
  "aria-hidden": "true",
3850
- className: css$14.shortcut,
3921
+ className: css$15.shortcut,
3851
3922
  children: jsx(ShortcutKeys, {
3852
3923
  keys: shortcut.keys,
3853
- className: css$14.shortcutKeys
3924
+ className: css$15.shortcutKeys
3854
3925
  })
3855
3926
  })
3856
3927
  ]
@@ -4137,11 +4208,11 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4137
4208
  const scrollable = !items.some((entry) => !isSeparator(entry) && !isLabel(entry) && entry.submenu !== void 0 && entry.submenu.length > 0);
4138
4209
  const renderEntry = (entry) => {
4139
4210
  if (isSeparator(entry)) return jsx("div", {
4140
- className: css$14.separator,
4211
+ className: css$15.separator,
4141
4212
  role: "separator"
4142
4213
  }, entry.id);
4143
4214
  if (isLabel(entry)) return jsx("div", {
4144
- className: css$14.label,
4215
+ className: css$15.label,
4145
4216
  role: "presentation",
4146
4217
  children: entry.text
4147
4218
  }, entry.id);
@@ -4149,7 +4220,7 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4149
4220
  const subOpen = hasSub && openSubmenuId === entry.id;
4150
4221
  const selected = entry.id === selectedId || selectedIds?.includes(entry.id) === true;
4151
4222
  return jsxs("div", {
4152
- className: css$14.itemWrap,
4223
+ className: css$15.itemWrap,
4153
4224
  onMouseEnter: hasSub ? () => {
4154
4225
  setOpenSubmenuId(entry.id);
4155
4226
  } : void 0,
@@ -4159,7 +4230,7 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4159
4230
  children: [jsxs("button", {
4160
4231
  type: "button",
4161
4232
  role: "menuitem",
4162
- className: clsx(css$14.item, selected && (selection === "fill" ? css$14.selectedFill : css$14.selected), entry.danger === true && css$14.danger),
4233
+ className: clsx(css$15.item, selected && (selection === "fill" ? css$15.selectedFill : css$15.selected), entry.danger === true && css$15.danger),
4163
4234
  disabled: entry.disabled,
4164
4235
  "aria-keyshortcuts": entry.shortcut?.aria,
4165
4236
  "aria-haspopup": hasSub ? "menu" : void 0,
@@ -4176,31 +4247,31 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4176
4247
  },
4177
4248
  children: [
4178
4249
  entry.icon !== void 0 && jsx("span", {
4179
- className: css$14.itemIcon,
4250
+ className: css$15.itemIcon,
4180
4251
  children: entry.icon
4181
4252
  }),
4182
4253
  jsx("span", {
4183
- className: css$14.itemLabel,
4254
+ className: css$15.itemLabel,
4184
4255
  children: entry.label
4185
4256
  }),
4186
4257
  entry.shortcut !== void 0 && jsx("span", {
4187
4258
  "aria-hidden": "true",
4188
- className: css$14.shortcut,
4259
+ className: css$15.shortcut,
4189
4260
  children: jsx(ShortcutKeys, {
4190
4261
  keys: entry.shortcut.keys,
4191
- className: css$14.shortcutKeys
4262
+ className: css$15.shortcutKeys
4192
4263
  })
4193
4264
  }),
4194
- selected && selection === "check" && jsx(IconCheckOutlineRegular, { className: css$14.check })
4265
+ selected && selection === "check" && jsx(IconCheckOutlineRegular, { className: css$15.check })
4195
4266
  ]
4196
4267
  }), subOpen && entry.submenu !== void 0 && jsx(MenuSurface, {
4197
4268
  compact,
4198
- className: clsx(css$14.submenu, compact && css$14.compactList),
4269
+ className: clsx(css$15.submenu, compact && css$15.compactList),
4199
4270
  role: "menu",
4200
4271
  children: entry.submenu.map((sub) => jsxs("button", {
4201
4272
  type: "button",
4202
4273
  role: "menuitem",
4203
- className: css$14.item,
4274
+ className: css$15.item,
4204
4275
  disabled: sub.disabled,
4205
4276
  "aria-keyshortcuts": sub.shortcut?.aria,
4206
4277
  onClick: () => {
@@ -4209,19 +4280,19 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4209
4280
  },
4210
4281
  children: [
4211
4282
  sub.icon !== void 0 && jsx("span", {
4212
- className: css$14.itemIcon,
4283
+ className: css$15.itemIcon,
4213
4284
  children: sub.icon
4214
4285
  }),
4215
4286
  jsx("span", {
4216
- className: css$14.itemLabel,
4287
+ className: css$15.itemLabel,
4217
4288
  children: sub.label
4218
4289
  }),
4219
4290
  sub.shortcut !== void 0 && jsx("span", {
4220
4291
  "aria-hidden": "true",
4221
- className: css$14.shortcut,
4292
+ className: css$15.shortcut,
4222
4293
  children: jsx(ShortcutKeys, {
4223
4294
  keys: sub.shortcut.keys,
4224
- className: css$14.shortcutKeys
4295
+ className: css$15.shortcutKeys
4225
4296
  })
4226
4297
  })
4227
4298
  ]
@@ -4238,7 +4309,7 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4238
4309
  const list = open && jsxs(MenuSurface, {
4239
4310
  compact,
4240
4311
  ref: listRef,
4241
- 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),
4312
+ 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),
4242
4313
  style: portal ? fixedPos ?? MEASURE_STYLE : void 0,
4243
4314
  role: "menu",
4244
4315
  onClick: (e) => {
@@ -4249,18 +4320,18 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4249
4320
  onMouseOver: collapseSubmenuFrom,
4250
4321
  onFocus: collapseSubmenuFrom,
4251
4322
  children: [jsxs("div", {
4252
- className: css$14.viewport,
4323
+ className: css$15.viewport,
4253
4324
  role: "presentation",
4254
4325
  children: [items.map(renderEntry), children]
4255
4326
  }), footer !== void 0 && footer.length > 0 && jsx("div", {
4256
- className: css$14.footer,
4327
+ className: css$15.footer,
4257
4328
  role: "presentation",
4258
4329
  children: footer.map(renderEntry)
4259
4330
  })]
4260
4331
  });
4261
4332
  return jsxs("span", {
4262
4333
  ref: rootRef,
4263
- className: clsx(css$14.root, className),
4334
+ className: clsx(css$15.root, className),
4264
4335
  onPointerEnter: closeOnPointerLeave ? cancelClose : void 0,
4265
4336
  onPointerLeave: closeOnPointerLeave ? () => {
4266
4337
  if (open) armClose();
@@ -4269,6 +4340,125 @@ function Menu({ open, anchor, items = [], children, selectedId, selectedIds, onS
4269
4340
  });
4270
4341
  }
4271
4342
  //#endregion
4343
+ //#region lib/types/MenuGroup.js
4344
+ /** Accessible menu groups with shared sticky-heading presentation and viewport observation. */
4345
+ /**
4346
+ * Render a named group with an instance-owned heading id and an inaccessible position sentinel.
4347
+ * @param props - Caller-localized label and optional menu rows.
4348
+ * @returns A section named by its direct heading, followed by the supplied children.
4349
+ */
4350
+ function MenuGroup({ label, children }) {
4351
+ const headingId = useId();
4352
+ return jsxs("section", {
4353
+ role: "group",
4354
+ "aria-labelledby": headingId,
4355
+ "data-menu-group": "",
4356
+ className: css$16.group,
4357
+ children: [
4358
+ jsx("span", {
4359
+ "aria-hidden": "true",
4360
+ "data-menu-group-start": "",
4361
+ className: css$16.start
4362
+ }),
4363
+ jsx("div", {
4364
+ id: headingId,
4365
+ "data-menu-group-heading": "",
4366
+ className: css$16.heading,
4367
+ children: label
4368
+ }),
4369
+ children
4370
+ ]
4371
+ });
4372
+ }
4373
+ /**
4374
+ * Update heading backgrounds asynchronously from native intersection and viewport-size observations.
4375
+ * Headings remain transparent until observations identify a section crossing the viewport top.
4376
+ * Without IntersectionObserver or ResizeObserver, CSS sticky headings remain transparent.
4377
+ * Group membership is captured at setup; dispose before observing changed groups or the same viewport again.
4378
+ * @param viewport - Unpadded, borderless scroll container with direct MenuGroup children.
4379
+ * @returns Cleanup owning both intersection observers and the viewport resize observer; disconnects
4380
+ * them, ignores queued callbacks, and clears managed data-stuck attributes. No valid groups acquires nothing.
4381
+ */
4382
+ function observeStickyMenuGroups(viewport) {
4383
+ const groups = [...viewport.querySelectorAll(":scope > [data-menu-group]")].flatMap((section) => {
4384
+ const heading = section.querySelector(":scope > [data-menu-group-heading]");
4385
+ const start = section.querySelector(":scope > [data-menu-group-start]");
4386
+ return heading === null || start === null ? [] : [{
4387
+ section,
4388
+ heading,
4389
+ start,
4390
+ atTop: false,
4391
+ above: false,
4392
+ topTime: -Infinity,
4393
+ aboveTime: -Infinity
4394
+ }];
4395
+ });
4396
+ if (groups.length === 0 || typeof IntersectionObserver === "undefined" || typeof ResizeObserver === "undefined") return () => {};
4397
+ const sections = new Map(groups.map((group) => [group.section, group]));
4398
+ const starts = new Map(groups.map((group) => [group.start, group]));
4399
+ let disposed = false;
4400
+ let stripObserver;
4401
+ let viewportHeight;
4402
+ const render = (group) => {
4403
+ const stuck = group.atTop && group.above;
4404
+ if (group.heading.hasAttribute("data-stuck") !== stuck) group.heading.toggleAttribute("data-stuck", stuck);
4405
+ };
4406
+ const startObserver = new IntersectionObserver((entries) => {
4407
+ if (disposed) return;
4408
+ for (const entry of entries) {
4409
+ const group = starts.get(entry.target);
4410
+ if (!group || entry.rootBounds === null || entry.time < group.aboveTime) continue;
4411
+ group.above = entry.boundingClientRect.top < entry.rootBounds.top;
4412
+ group.aboveTime = entry.time;
4413
+ render(group);
4414
+ }
4415
+ }, {
4416
+ root: viewport,
4417
+ threshold: [0, 1]
4418
+ });
4419
+ for (const { start } of groups) startObserver.observe(start);
4420
+ const sizeObserver = new ResizeObserver((entries) => {
4421
+ if (disposed) return;
4422
+ for (const entry of entries) {
4423
+ if (entry.target !== viewport || entry.contentRect.height === viewportHeight) continue;
4424
+ viewportHeight = entry.contentRect.height;
4425
+ stripObserver?.disconnect();
4426
+ const observer = new IntersectionObserver((intersections) => {
4427
+ if (disposed || stripObserver !== observer) return;
4428
+ for (const intersection of intersections) {
4429
+ const group = sections.get(intersection.target);
4430
+ if (!group || intersection.rootBounds === null) continue;
4431
+ const top = intersection.rootBounds.top;
4432
+ if (intersection.time >= group.topTime) {
4433
+ group.atTop = intersection.isIntersecting && intersection.boundingClientRect.bottom > top;
4434
+ group.topTime = intersection.time;
4435
+ }
4436
+ if (intersection.time >= group.aboveTime) {
4437
+ group.above = intersection.boundingClientRect.top < top;
4438
+ group.aboveTime = intersection.time;
4439
+ }
4440
+ render(group);
4441
+ }
4442
+ }, {
4443
+ root: viewport,
4444
+ rootMargin: `0px 0px ${Math.min(1, viewportHeight) - viewportHeight}px 0px`,
4445
+ threshold: 0
4446
+ });
4447
+ stripObserver = observer;
4448
+ for (const { section } of groups) observer.observe(section);
4449
+ }
4450
+ });
4451
+ sizeObserver.observe(viewport);
4452
+ return () => {
4453
+ if (disposed) return;
4454
+ disposed = true;
4455
+ startObserver.disconnect();
4456
+ stripObserver?.disconnect();
4457
+ sizeObserver.disconnect();
4458
+ for (const { heading } of groups) if (heading.hasAttribute("data-stuck")) heading.removeAttribute("data-stuck");
4459
+ };
4460
+ }
4461
+ //#endregion
4272
4462
  //#region lib/types/useAnchoredMaxHeight.js
4273
4463
  /**
4274
4464
  * Viewport-fit hook for bottom-anchored overlays (slash menu, popupSelect):
@@ -4703,7 +4893,7 @@ function Tooltip({ label, shortcutKeys, side = "right", align = "center", delayM
4703
4893
  const content = visible && !suppressed && jsxs("span", {
4704
4894
  ref: bubble,
4705
4895
  id: openOnClick ? id : void 0,
4706
- className: css$15.bubble,
4896
+ className: css$17.bubble,
4707
4897
  "data-side": side,
4708
4898
  "data-portal": portal || void 0,
4709
4899
  "data-pinned": pinned || void 0,
@@ -4718,7 +4908,7 @@ function Tooltip({ label, shortcutKeys, side = "right", align = "center", delayM
4718
4908
  role: "tooltip",
4719
4909
  "aria-label": shortcutKeys?.length ? [resolvedLabel, shortcutKeys.join(" ")].filter(Boolean).join(" ") : void 0,
4720
4910
  children: [resolvedLabel && jsx("span", {
4721
- className: css$15.label,
4911
+ className: css$17.label,
4722
4912
  children: resolvedLabel
4723
4913
  }), shortcutKeys !== void 0 && shortcutKeys.length > 0 && jsx(ShortcutKeys, {
4724
4914
  keys: shortcutKeys,
@@ -4986,7 +5176,7 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
4986
5176
  };
4987
5177
  const card = open && pos !== null && !suppressed && jsx("div", {
4988
5178
  ref: cardRef,
4989
- className: clsx(css$16.card, variant === "preview" && css$16.preview, inline && css$16.media, copyable && css$16.copyable, copied && css$16.feedback),
5179
+ className: clsx(css$18.card, variant === "preview" && css$18.preview, inline && css$18.media, copyable && css$18.copyable, copied && css$18.feedback),
4990
5180
  "data-closing": closing || void 0,
4991
5181
  style: {
4992
5182
  ...pos,
@@ -5009,14 +5199,14 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
5009
5199
  copy(copyText);
5010
5200
  } : void 0,
5011
5201
  children: copied ? jsx("span", {
5012
- className: css$16.copied,
5202
+ className: css$18.copied,
5013
5203
  "aria-hidden": "true",
5014
5204
  children: copiedLabel
5015
5205
  }) : content
5016
5206
  });
5017
5207
  return jsxs("span", {
5018
5208
  ref: rootRef,
5019
- className: clsx(css$16.root, inline && css$16.inline),
5209
+ className: clsx(css$18.root, inline && css$18.inline),
5020
5210
  onFocus: inline ? (event) => {
5021
5211
  if (!disabled && event.target.matches(":focus-visible")) {
5022
5212
  cancelClose();
@@ -5054,7 +5244,7 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
5054
5244
  children: anchor
5055
5245
  }),
5056
5246
  open && !suppressed && copyable && jsx("span", {
5057
- className: css$16.status,
5247
+ className: css$18.status,
5058
5248
  role: "status",
5059
5249
  children: copied ? copiedLabel : ""
5060
5250
  }),
@@ -5089,11 +5279,11 @@ function Modal({ open, onClose, title, closeLabel, description, children, footer
5089
5279
  useModalLayer(dialog, open, onClose);
5090
5280
  if (!open) return null;
5091
5281
  return createPortal(jsxs("div", {
5092
- className: css$17.root,
5282
+ className: css$19.root,
5093
5283
  role: "presentation",
5094
5284
  onKeyDownCapture,
5095
5285
  children: [jsx("div", {
5096
- className: css$17.mask,
5286
+ className: css$19.mask,
5097
5287
  style: backdropBlur ? void 0 : { backdropFilter: "none" },
5098
5288
  "aria-hidden": "true",
5099
5289
  onClick: onClose
@@ -5101,37 +5291,37 @@ function Modal({ open, onClose, title, closeLabel, description, children, footer
5101
5291
  ref: dialog,
5102
5292
  tabIndex: -1,
5103
5293
  "data-shortcut-modal": shortcutModal,
5104
- className: clsx(css$17.dialog, className),
5294
+ className: clsx(css$19.dialog, className),
5105
5295
  role: "dialog",
5106
5296
  "aria-modal": "true",
5107
5297
  "aria-label": title,
5108
5298
  children: headless ? children : jsxs(Fragment, { children: [jsxs("div", {
5109
- className: clsx(css$17.content, contentClassName),
5299
+ className: clsx(css$19.content, contentClassName),
5110
5300
  children: [
5111
5301
  jsxs("div", {
5112
- className: css$17.header,
5302
+ className: css$19.header,
5113
5303
  children: [jsx("h2", {
5114
- className: css$17.title,
5304
+ className: css$19.title,
5115
5305
  children: title
5116
5306
  }), jsx("button", {
5117
5307
  type: "button",
5118
- className: css$17.close,
5308
+ className: css$19.close,
5119
5309
  "aria-label": closeLabel,
5120
5310
  onClick: onClose,
5121
5311
  children: jsx(IconCloseOutlineRegular, { size: 14 })
5122
5312
  })]
5123
5313
  }),
5124
5314
  description !== void 0 && description !== "" && jsx("p", {
5125
- className: css$17.description,
5315
+ className: css$19.description,
5126
5316
  children: description
5127
5317
  }),
5128
5318
  children !== void 0 && jsx("div", {
5129
- className: css$17.body,
5319
+ className: css$19.body,
5130
5320
  children
5131
5321
  })
5132
5322
  ]
5133
5323
  }), footer !== void 0 && jsx("div", {
5134
- className: css$17.footer,
5324
+ className: css$19.footer,
5135
5325
  children: footer
5136
5326
  })] })
5137
5327
  })]
@@ -5153,28 +5343,28 @@ function RiskConfirmation({ open, title, description, acknowledgeLabel, cancelLa
5153
5343
  onClose: onCancel,
5154
5344
  title,
5155
5345
  closeLabel,
5156
- className: css$18.confirmation ?? "",
5157
- contentClassName: css$18.confirmationContent ?? "",
5346
+ className: css$20.confirmation ?? "",
5347
+ contentClassName: css$20.confirmationContent ?? "",
5158
5348
  footer: jsxs(Fragment, { children: [jsx(Button, {
5159
5349
  variant: "outline",
5160
- className: css$18.modalAction,
5350
+ className: css$20.modalAction,
5161
5351
  onClick: onCancel,
5162
5352
  children: cancelLabel
5163
5353
  }), jsx(Button, {
5164
5354
  variant: "primary",
5165
- className: css$18.confirmAction,
5355
+ className: css$20.confirmAction,
5166
5356
  disabled: disabled || !acknowledged,
5167
5357
  onClick: onConfirm,
5168
5358
  children: confirmLabel
5169
5359
  })] }),
5170
5360
  children: [jsxs("div", {
5171
- className: css$18.warning,
5361
+ className: css$20.warning,
5172
5362
  children: [jsx(IconWarningOutlineRegular, {
5173
5363
  size: 18,
5174
- className: css$18.warningIcon
5364
+ className: css$20.warningIcon
5175
5365
  }), jsx("p", { children: description })]
5176
5366
  }), jsxs("label", {
5177
- className: css$18.acknowledgement,
5367
+ className: css$20.acknowledgement,
5178
5368
  children: [jsx("input", {
5179
5369
  type: "checkbox",
5180
5370
  checked: acknowledged,
@@ -5222,44 +5412,44 @@ function ConnectionIndicator({ state, disconnectedLabel, connectingLabel, recove
5222
5412
  };
5223
5413
  }, [state, rendered]);
5224
5414
  if (rendered === void 0) return null;
5225
- const leavingClass = leaving ? ` ${css$19.leaving}` : "";
5415
+ const leavingClass = leaving ? ` ${css$21.leaving}` : "";
5226
5416
  if (rendered === "recovered") return jsxs("div", {
5227
- className: `${css$19.indicator} ${css$19.success}${leavingClass}`,
5417
+ className: `${css$21.indicator} ${css$21.success}${leavingClass}`,
5228
5418
  role: "status",
5229
5419
  "aria-label": recoveredLabel,
5230
5420
  children: [jsx("span", {
5231
- className: css$19.icon,
5421
+ className: css$21.icon,
5232
5422
  "aria-hidden": "true",
5233
5423
  children: jsx(IconCheckOutlineRegular, { size: 14 })
5234
5424
  }), jsx("span", {
5235
- className: css$19.label,
5425
+ className: css$21.label,
5236
5426
  children: recoveredLabel
5237
5427
  })]
5238
5428
  });
5239
5429
  const connecting = rendered === "connecting";
5240
5430
  return jsxs("button", {
5241
5431
  type: "button",
5242
- className: `${css$19.indicator} ${css$19.warning}${leavingClass}`,
5432
+ className: `${css$21.indicator} ${css$21.warning}${leavingClass}`,
5243
5433
  "data-phase": rendered,
5244
5434
  "aria-label": connecting ? restartActionLabel : reconnectActionLabel,
5245
5435
  onClick: onReconnect,
5246
5436
  children: [jsx("span", {
5247
- className: css$19.icon,
5437
+ className: css$21.icon,
5248
5438
  "aria-hidden": "true",
5249
5439
  children: connecting ? jsx(StateDot, { state: "ongoing" }) : jsx(IconRefreshOutlineRegular, { size: 14 })
5250
5440
  }), jsx("span", {
5251
- className: css$19.label,
5441
+ className: css$21.label,
5252
5442
  children: connecting ? jsxs(Fragment, { children: [connectingLabel, jsxs("span", {
5253
- className: css$19.dots,
5443
+ className: css$21.dots,
5254
5444
  "aria-hidden": "true",
5255
5445
  children: [
5256
5446
  jsx("span", { children: "." }),
5257
5447
  jsx("span", {
5258
- className: css$19.secondDot,
5448
+ className: css$21.secondDot,
5259
5449
  children: "."
5260
5450
  }),
5261
5451
  jsx("span", {
5262
- className: css$19.thirdDot,
5452
+ className: css$21.thirdDot,
5263
5453
  children: "."
5264
5454
  })
5265
5455
  ]
@@ -6290,7 +6480,7 @@ function FileTypeIcon(props) {
6290
6480
  type: resolvedType,
6291
6481
  size,
6292
6482
  className
6293
- }) : glyph(resolvedType, size, clsx(css$20.icon, css$20[resolvedType], className));
6483
+ }) : glyph(resolvedType, size, clsx(css$22.icon, css$22[resolvedType], className));
6294
6484
  }
6295
6485
  //#endregion
6296
6486
  //#region lib/types/SiteGlyph.js
@@ -6619,7 +6809,7 @@ function projectUserText(text, sessionLabels, slashNames = [], slashKind = "skil
6619
6809
  let cursor = 0;
6620
6810
  const pushPlain = (from, to) => {
6621
6811
  parts.push(jsx("span", {
6622
- className: css$21.plainRun,
6812
+ className: css$23.plainRun,
6623
6813
  children: text.slice(from, to)
6624
6814
  }, `t${from}`));
6625
6815
  };
@@ -6632,14 +6822,14 @@ function projectUserText(text, sessionLabels, slashNames = [], slashKind = "skil
6632
6822
  const contents = jsxs(Fragment, { children: [referenceKind !== void 0 && jsx(ReferenceIconRegular, {
6633
6823
  kind: referenceKind,
6634
6824
  size: 16,
6635
- className: css$21.refIcon
6825
+ className: css$23.refIcon
6636
6826
  }), displayLabel] });
6637
6827
  const open = references === void 0 ? void 0 : referenceKind === "file" ? () => {
6638
6828
  references.openFile(label.slice(1).replace(/^"|"$/gu, ""));
6639
6829
  } : referenceKind === void 0 && slashKind === "skill" ? () => {
6640
6830
  references.openSkill(label.slice(1));
6641
6831
  } : void 0;
6642
- const className = clsx(css$21.refChip, referenceKind === void 0 && css$21.slashChip);
6832
+ const className = clsx(css$23.refChip, referenceKind === void 0 && css$23.slashChip);
6643
6833
  parts.push(open === void 0 ? jsx("span", {
6644
6834
  className,
6645
6835
  "data-ref-chip": referenceKind ?? slashKind,
@@ -6659,7 +6849,7 @@ function projectUserText(text, sessionLabels, slashNames = [], slashKind = "skil
6659
6849
  cursor = end;
6660
6850
  }
6661
6851
  if (parts.length === 0) return jsx("span", {
6662
- className: css$21.plainRun,
6852
+ className: css$23.plainRun,
6663
6853
  children: text
6664
6854
  });
6665
6855
  if (cursor < text.length) pushPlain(cursor, text.length);
@@ -6732,25 +6922,25 @@ function Toast({ text, icon, tone, anchor, holdMs = HOLD_MS, actions, onDone })
6732
6922
  };
6733
6923
  }, [anchor]);
6734
6924
  return createPortal(jsxs("div", {
6735
- className: css$22.toast,
6925
+ className: css$24.toast,
6736
6926
  role: "alert",
6737
6927
  style: {
6738
6928
  ...left === null ? {} : { left },
6739
6929
  "--dsh-toast-hold": `${String(holdMs)}ms`
6740
6930
  },
6741
6931
  children: [tone === "success" ? jsx("span", {
6742
- className: `${css$22.icon} ${css$22.success}`,
6932
+ className: `${css$24.icon} ${css$24.success}`,
6743
6933
  "aria-hidden": true,
6744
6934
  children: jsx(IconCheckCircleOutlineRegular, {})
6745
6935
  }) : icon !== void 0 && jsx("span", {
6746
- className: css$22.icon,
6936
+ className: css$24.icon,
6747
6937
  "aria-hidden": true,
6748
6938
  children: icon
6749
6939
  }), jsxs("span", {
6750
- className: css$22.text,
6940
+ className: css$24.text,
6751
6941
  children: [text, actions?.map((action) => jsxs(Fragment$1, { children: [action.prefix, jsx("button", {
6752
6942
  type: "button",
6753
- className: css$22.action,
6943
+ className: css$24.action,
6754
6944
  onClick: action.onClick,
6755
6945
  children: action.label
6756
6946
  })] }, action.label))]
@@ -6800,29 +6990,29 @@ function SettingsForm(props) {
6800
6990
  discard.current();
6801
6991
  }, []);
6802
6992
  if (!state.available) return jsx("p", {
6803
- className: css$23.unavailable,
6993
+ className: css$25.unavailable,
6804
6994
  role: "status",
6805
6995
  children: labels.unavailable
6806
6996
  });
6807
6997
  const blocked = !state.dirty || state.invalid || state.saving;
6808
6998
  return jsxs("div", {
6809
- className: css$23.form,
6999
+ className: css$25.form,
6810
7000
  children: [
6811
7001
  !state.writable ? jsx("p", {
6812
- className: css$23.readOnly,
7002
+ className: css$25.readOnly,
6813
7003
  role: "status",
6814
7004
  children: labels.readOnly
6815
7005
  }) : null,
6816
7006
  props.children,
6817
7007
  jsxs("div", {
6818
- className: css$23.footer,
7008
+ className: css$25.footer,
6819
7009
  children: [state.failed ? jsx("p", {
6820
- className: css$23.failed,
7010
+ className: css$25.failed,
6821
7011
  role: "status",
6822
7012
  children: labels.saveFailed
6823
7013
  }) : null, jsx("button", {
6824
7014
  type: "button",
6825
- className: css$23.save,
7015
+ className: css$25.save,
6826
7016
  disabled: blocked,
6827
7017
  onClick: props.onSave,
6828
7018
  children: state.saving ? labels.saving : labels.save
@@ -6854,19 +7044,19 @@ function SettingsValueField(props) {
6854
7044
  const hasMessage = props.invalid || Boolean(props.hint);
6855
7045
  const description = [hasMessage ? messageId : "", helpOpen ? helpId : ""].filter(Boolean).join(" ");
6856
7046
  return jsxs("div", {
6857
- className: css$24.field,
7047
+ className: css$26.field,
6858
7048
  children: [
6859
7049
  jsxs("div", {
6860
- className: css$24.head,
7050
+ className: css$26.head,
6861
7051
  children: [jsxs("div", {
6862
- className: css$24.labelGroup,
7052
+ className: css$26.labelGroup,
6863
7053
  children: [jsx("label", {
6864
- className: css$24.label,
7054
+ className: css$26.label,
6865
7055
  htmlFor: props.id,
6866
7056
  children: props.label
6867
7057
  }), props.help !== void 0 ? jsx("button", {
6868
7058
  type: "button",
6869
- className: css$24.helpButton,
7059
+ className: css$26.helpButton,
6870
7060
  "aria-label": props.help.label,
6871
7061
  "aria-expanded": helpOpen,
6872
7062
  "aria-controls": helpId,
@@ -6876,13 +7066,13 @@ function SettingsValueField(props) {
6876
7066
  children: jsx(IconInfoOutlineRegular, { size: 12 })
6877
7067
  }) : null]
6878
7068
  }), props.overridden ? jsxs("span", {
6879
- className: css$24.badges,
7069
+ className: css$26.badges,
6880
7070
  children: [jsx(Tag, {
6881
7071
  tone: "neutral",
6882
7072
  children: props.overriddenLabel
6883
7073
  }), jsx("button", {
6884
7074
  type: "button",
6885
- className: css$24.reset,
7075
+ className: css$26.reset,
6886
7076
  disabled: props.disabled,
6887
7077
  onClick: props.onReset,
6888
7078
  children: props.resetLabel
@@ -6891,7 +7081,7 @@ function SettingsValueField(props) {
6891
7081
  }),
6892
7082
  jsx("input", {
6893
7083
  id: props.id,
6894
- className: css$24.input,
7084
+ className: css$26.input,
6895
7085
  type: "text",
6896
7086
  ...props.numeric === true ? { inputMode: "numeric" } : {},
6897
7087
  ...props.invalid ? { "aria-invalid": true } : {},
@@ -6905,12 +7095,12 @@ function SettingsValueField(props) {
6905
7095
  }),
6906
7096
  hasMessage ? jsx("p", {
6907
7097
  id: messageId,
6908
- className: props.invalid ? css$24.invalid : css$24.hint,
7098
+ className: props.invalid ? css$26.invalid : css$26.hint,
6909
7099
  children: props.invalid ? props.invalidLabel : props.hint
6910
7100
  }) : null,
6911
7101
  props.help !== void 0 && helpOpen ? jsx("div", {
6912
7102
  id: helpId,
6913
- className: css$24.help,
7103
+ className: css$26.help,
6914
7104
  role: "region",
6915
7105
  "aria-label": props.help.label,
6916
7106
  children: props.help.content
@@ -6928,16 +7118,16 @@ function SettingsValueField(props) {
6928
7118
  */
6929
7119
  function SettingsSecretField(props) {
6930
7120
  return jsxs("div", {
6931
- className: css$24.field,
7121
+ className: css$26.field,
6932
7122
  children: [
6933
7123
  jsxs("div", {
6934
- className: css$24.head,
7124
+ className: css$26.head,
6935
7125
  children: [jsx("label", {
6936
- className: css$24.label,
7126
+ className: css$26.label,
6937
7127
  htmlFor: props.id,
6938
7128
  children: props.label
6939
7129
  }), jsx("span", {
6940
- className: css$24.badges,
7130
+ className: css$26.badges,
6941
7131
  children: jsx(Tag, {
6942
7132
  tone: props.configured ? "neutral" : "quiet",
6943
7133
  children: props.stateLabel
@@ -6946,7 +7136,7 @@ function SettingsSecretField(props) {
6946
7136
  }),
6947
7137
  jsx("input", {
6948
7138
  id: props.id,
6949
- className: css$24.input,
7139
+ className: css$26.input,
6950
7140
  type: "password",
6951
7141
  autoComplete: "new-password",
6952
7142
  value: props.text,
@@ -6956,7 +7146,7 @@ function SettingsSecretField(props) {
6956
7146
  }
6957
7147
  }),
6958
7148
  jsx("p", {
6959
- className: css$24.hint,
7149
+ className: css$26.hint,
6960
7150
  children: props.hint
6961
7151
  })
6962
7152
  ]
@@ -8022,7 +8212,7 @@ function JsonCopyAction({ store, target, persistent, labels, onCopy, onClose })
8022
8212
  const object = typeof target.value === "object" && target.value !== null;
8023
8213
  const copyTitle = state === "copied" ? labels.copied : state === "failed" ? labels.copyFailed : object ? labels.copyPrettyJson : labels.copyValue;
8024
8214
  return jsx("span", {
8025
- className: css$25.copySlot,
8215
+ className: css$27.copySlot,
8026
8216
  children: (persistent || snapshot !== void 0) && jsx(Menu, {
8027
8217
  open: snapshot?.menuOpen === true,
8028
8218
  compact: true,
@@ -8031,7 +8221,7 @@ function JsonCopyAction({ store, target, persistent, labels, onCopy, onClose })
8031
8221
  anchor: jsx("button", {
8032
8222
  ref: buttonRef,
8033
8223
  type: "button",
8034
- className: css$25.actionButton,
8224
+ className: css$27.actionButton,
8035
8225
  "data-json-copy-button": true,
8036
8226
  "data-state": state,
8037
8227
  "aria-label": copyTitle,
@@ -8070,35 +8260,35 @@ function bracketOf(value) {
8070
8260
  }
8071
8261
  function previewPrimitive(value) {
8072
8262
  if (value === null) return jsx("span", {
8073
- className: css$25.keywordValue,
8263
+ className: css$27.keywordValue,
8074
8264
  children: "null"
8075
8265
  });
8076
8266
  if (typeof value === "string") return jsx("span", {
8077
- className: css$25.stringValue,
8267
+ className: css$27.stringValue,
8078
8268
  children: JSON.stringify(value)
8079
8269
  });
8080
8270
  if (typeof value === "number") return jsx("span", {
8081
- className: css$25.numberValue,
8271
+ className: css$27.numberValue,
8082
8272
  children: String(value)
8083
8273
  });
8084
8274
  if (typeof value === "boolean") return jsx("span", {
8085
- className: css$25.keywordValue,
8275
+ className: css$27.keywordValue,
8086
8276
  children: String(value)
8087
8277
  });
8088
8278
  if (typeof value === "bigint") return jsx("span", {
8089
- className: css$25.otherValue,
8279
+ className: css$27.otherValue,
8090
8280
  children: value.toString()
8091
8281
  });
8092
8282
  if (typeof value === "undefined") return jsx("span", {
8093
- className: css$25.otherValue,
8283
+ className: css$27.otherValue,
8094
8284
  children: "undefined"
8095
8285
  });
8096
8286
  if (typeof value === "symbol") return jsx("span", {
8097
- className: css$25.otherValue,
8287
+ className: css$27.otherValue,
8098
8288
  children: value.description ?? "Symbol"
8099
8289
  });
8100
8290
  if (typeof value === "function") return jsx("span", {
8101
- className: css$25.otherValue,
8291
+ className: css$27.otherValue,
8102
8292
  children: value.name || "Function"
8103
8293
  });
8104
8294
  return null;
@@ -8112,71 +8302,71 @@ function previewValue(value, depth) {
8112
8302
  const [open, close] = bracketOf(value);
8113
8303
  return jsxs(Fragment, { children: [
8114
8304
  jsx("span", {
8115
- className: css$25.punctuation,
8305
+ className: css$27.punctuation,
8116
8306
  children: open
8117
8307
  }),
8118
8308
  depth >= PREVIEW_DEPTH_LIMIT ? jsx("span", {
8119
- className: css$25.previewEllipsis,
8309
+ className: css$27.previewEllipsis,
8120
8310
  children: "…"
8121
8311
  }) : visible.map(([key, item], index) => jsxs("span", { children: [
8122
8312
  index > 0 && jsx("span", {
8123
- className: css$25.punctuation,
8313
+ className: css$27.punctuation,
8124
8314
  children: ", "
8125
8315
  }),
8126
8316
  !array && jsxs(Fragment, { children: [jsx("span", {
8127
- className: css$25.previewProperty,
8317
+ className: css$27.previewProperty,
8128
8318
  children: key
8129
8319
  }), jsx("span", {
8130
- className: css$25.punctuation,
8320
+ className: css$27.punctuation,
8131
8321
  children: ": "
8132
8322
  })] }),
8133
8323
  previewValue(item, depth + 1)
8134
8324
  ] }, key)),
8135
8325
  depth < PREVIEW_DEPTH_LIMIT && entries.length > limit && jsx("span", {
8136
- className: css$25.previewEllipsis,
8326
+ className: css$27.previewEllipsis,
8137
8327
  children: ", …"
8138
8328
  }),
8139
8329
  jsx("span", {
8140
- className: css$25.punctuation,
8330
+ className: css$27.punctuation,
8141
8331
  children: close
8142
8332
  })
8143
8333
  ] });
8144
8334
  }
8145
8335
  function primitiveValue(value) {
8146
8336
  if (value === null) return jsx("span", {
8147
- className: css$25.keywordValue,
8337
+ className: css$27.keywordValue,
8148
8338
  children: "null"
8149
8339
  });
8150
8340
  if (typeof value === "string") return jsx("span", {
8151
- className: css$25.stringValue,
8341
+ className: css$27.stringValue,
8152
8342
  children: JSON.stringify(value)
8153
8343
  });
8154
8344
  if (typeof value === "boolean") return jsx("span", {
8155
- className: css$25.keywordValue,
8345
+ className: css$27.keywordValue,
8156
8346
  children: String(value)
8157
8347
  });
8158
8348
  if (typeof value === "number") return jsx("span", {
8159
- className: css$25.numberValue,
8349
+ className: css$27.numberValue,
8160
8350
  children: String(value)
8161
8351
  });
8162
8352
  if (typeof value === "bigint") return jsx("span", {
8163
- className: css$25.numberValue,
8353
+ className: css$27.numberValue,
8164
8354
  children: `${value.toString()}n`
8165
8355
  });
8166
8356
  if (value instanceof Date) return jsx("span", {
8167
- className: css$25.otherValue,
8357
+ className: css$27.otherValue,
8168
8358
  children: value.toISOString()
8169
8359
  });
8170
8360
  if (typeof value === "function") return jsxs("span", {
8171
- className: css$25.otherValue,
8361
+ className: css$27.otherValue,
8172
8362
  children: ["function() ", "{ }"]
8173
8363
  });
8174
8364
  if (typeof value === "undefined") return jsx("span", {
8175
- className: css$25.otherValue,
8365
+ className: css$27.otherValue,
8176
8366
  children: "undefined"
8177
8367
  });
8178
8368
  return jsx("span", {
8179
- className: css$25.otherValue,
8369
+ className: css$27.otherValue,
8180
8370
  children: value.toString()
8181
8371
  });
8182
8372
  }
@@ -8204,7 +8394,7 @@ function moveFocus(button, direction) {
8204
8394
  function NodeField({ field, expandable, onToggle }) {
8205
8395
  if (field === void 0) return null;
8206
8396
  return jsxs("span", {
8207
- className: clsx(css$25.label, expandable && css$25.clickableLabel),
8397
+ className: clsx(css$27.label, expandable && css$27.clickableLabel),
8208
8398
  onClick: expandable ? onToggle : void 0,
8209
8399
  children: [fieldText(field), ":"]
8210
8400
  });
@@ -8241,7 +8431,7 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8241
8431
  if (!expanded) return;
8242
8432
  const raw = rawRef.current;
8243
8433
  const clips = [];
8244
- const tree = raw.closest(`.${css$25.root}`);
8434
+ const tree = raw.closest(`.${css$27.root}`);
8245
8435
  for (let parent = tree.parentElement; parent !== null; parent = parent.parentElement) if (/auto|scroll|hidden|clip/.test(getComputedStyle(parent).overflowY)) clips.push(parent);
8246
8436
  const measure = () => {
8247
8437
  let top = 0;
@@ -8270,33 +8460,33 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8270
8460
  if (expanded) {
8271
8461
  const fieldId = `${contentsId}-field`;
8272
8462
  return jsxs("div", {
8273
- className: css$25.stringField,
8463
+ className: css$27.stringField,
8274
8464
  "data-expanded": true,
8275
8465
  children: [
8276
8466
  field !== void 0 && jsxs("span", {
8277
8467
  id: fieldId,
8278
- className: css$25.label,
8468
+ className: css$27.label,
8279
8469
  children: [fieldText(field), ":"]
8280
8470
  }),
8281
8471
  jsx("pre", {
8282
8472
  ref: rawRef,
8283
8473
  id: contentsId,
8284
- className: css$25.stringRaw,
8474
+ className: css$27.stringRaw,
8285
8475
  "data-wrap": wrapped,
8286
8476
  tabIndex: 0,
8287
8477
  "aria-labelledby": field === void 0 ? void 0 : fieldId,
8288
8478
  children: value
8289
8479
  }),
8290
8480
  !lastElement && jsx("span", {
8291
- className: css$25.punctuation,
8481
+ className: css$27.punctuation,
8292
8482
  children: ","
8293
8483
  }),
8294
8484
  jsxs("div", {
8295
- className: css$25.stringActions,
8485
+ className: css$27.stringActions,
8296
8486
  children: [
8297
8487
  stringWrapping !== void 0 && jsx("button", {
8298
8488
  type: "button",
8299
- className: css$25.actionButton,
8489
+ className: css$27.actionButton,
8300
8490
  "aria-label": stringWrapping.label,
8301
8491
  title: stringWrapping.label,
8302
8492
  "aria-pressed": wrapped,
@@ -8310,7 +8500,7 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8310
8500
  }),
8311
8501
  jsx("button", {
8312
8502
  type: "button",
8313
- className: css$25.actionButton,
8503
+ className: css$27.actionButton,
8314
8504
  "aria-label": labels.collapseNode,
8315
8505
  title: labels.collapseNode,
8316
8506
  "aria-expanded": true,
@@ -8335,18 +8525,18 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8335
8525
  });
8336
8526
  }
8337
8527
  return jsxs(Fragment, { children: [renderCopy?.(), jsx("span", {
8338
- className: css$25.stringField,
8528
+ className: css$27.stringField,
8339
8529
  "data-expanded": expanded,
8340
8530
  children: jsxs("span", {
8341
8531
  ref: contentRef,
8342
8532
  id: contentsId,
8343
- className: css$25.stringText,
8533
+ className: css$27.stringText,
8344
8534
  children: [
8345
8535
  truncated && jsx("span", {
8346
- className: css$25.stringToggleSlot,
8536
+ className: css$27.stringToggleSlot,
8347
8537
  children: jsxs("button", {
8348
8538
  type: "button",
8349
- className: css$25.stringToggle,
8539
+ className: css$27.stringToggle,
8350
8540
  "aria-label": labels.expandNode,
8351
8541
  "aria-expanded": false,
8352
8542
  "aria-controls": contentsId,
@@ -8361,12 +8551,12 @@ function JsonString({ collapsedStringLines, stringWrapping, field, labels, lastE
8361
8551
  })
8362
8552
  }),
8363
8553
  field !== void 0 && jsxs("span", {
8364
- className: css$25.label,
8554
+ className: css$27.label,
8365
8555
  children: [fieldText(field), ":"]
8366
8556
  }),
8367
8557
  primitiveValue(value),
8368
8558
  !lastElement && jsx("span", {
8369
- className: css$25.punctuation,
8559
+ className: css$27.punctuation,
8370
8560
  children: ","
8371
8561
  })
8372
8562
  ]
@@ -8397,7 +8587,7 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8397
8587
  }
8398
8588
  };
8399
8589
  const row = (children, ariaExpanded) => jsxs("div", {
8400
- className: css$25.row,
8590
+ className: css$27.row,
8401
8591
  role: "treeitem",
8402
8592
  "aria-expanded": ariaExpanded,
8403
8593
  onMouseOver: (event) => {
@@ -8432,7 +8622,7 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8432
8622
  }),
8433
8623
  primitiveValue(value),
8434
8624
  !lastElement && jsx("span", {
8435
- className: css$25.punctuation,
8625
+ className: css$27.punctuation,
8436
8626
  children: ","
8437
8627
  })
8438
8628
  ] }));
@@ -8444,22 +8634,22 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8444
8634
  onToggle: toggle
8445
8635
  }),
8446
8636
  jsx("span", {
8447
- className: css$25.punctuation,
8637
+ className: css$27.punctuation,
8448
8638
  children: open
8449
8639
  }),
8450
8640
  jsx("span", {
8451
- className: css$25.punctuation,
8641
+ className: css$27.punctuation,
8452
8642
  children: close
8453
8643
  }),
8454
8644
  !lastElement && jsx("span", {
8455
- className: css$25.punctuation,
8645
+ className: css$27.punctuation,
8456
8646
  children: ","
8457
8647
  })
8458
8648
  ] }));
8459
8649
  return row(jsxs(Fragment, { children: [
8460
8650
  jsx("span", {
8461
8651
  ref: expanderRef,
8462
- className: clsx(css$25.expander, expanded ? css$25.collapseIcon : css$25.expandIcon),
8652
+ className: clsx(css$27.expander, expanded ? css$27.collapseIcon : css$27.expandIcon),
8463
8653
  "data-json-expander": true,
8464
8654
  role: "button",
8465
8655
  "aria-label": expanded ? labels.collapseNode : labels.expandNode,
@@ -8473,7 +8663,7 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8473
8663
  onKeyDown: onExpanderKeyDown
8474
8664
  }),
8475
8665
  jsxs("span", {
8476
- className: css$25.summary,
8666
+ className: css$27.summary,
8477
8667
  children: [
8478
8668
  jsx(NodeField, {
8479
8669
  field,
@@ -8481,11 +8671,11 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8481
8671
  onToggle: toggle
8482
8672
  }),
8483
8673
  jsx("span", {
8484
- className: css$25.preview,
8674
+ className: css$27.preview,
8485
8675
  children: previewValue(value, 0)
8486
8676
  }),
8487
8677
  !lastElement && jsx("span", {
8488
- className: css$25.punctuation,
8678
+ className: css$27.punctuation,
8489
8679
  children: ","
8490
8680
  })
8491
8681
  ]
@@ -8493,7 +8683,7 @@ function JsonTreeNode({ collapsedStringLines, stringWrapping, field, initialExpa
8493
8683
  expanded && jsx("ul", {
8494
8684
  id: contentsId,
8495
8685
  role: "group",
8496
- className: css$25.children,
8686
+ className: css$27.children,
8497
8687
  children: entries.map(([key, item], index) => jsx(JsonTreeNode, {
8498
8688
  collapsedStringLines,
8499
8689
  stringWrapping,
@@ -8625,17 +8815,17 @@ function JsonTree({ data, label, className, collapsedStringLines = 3, stringWrap
8625
8815
  onClose: clearCopyTarget
8626
8816
  }) : void 0;
8627
8817
  return jsx("div", {
8628
- className: clsx(css$25.root, className),
8818
+ className: clsx(css$27.root, className),
8629
8819
  style: { "--json-tree-collapsed-lines": collapsedStringLines },
8630
8820
  onMouseOver: handleRootMouseOver,
8631
8821
  onMouseLeave: () => {
8632
8822
  if (!copyStore.get()?.menuOpen) clearCopyTarget();
8633
8823
  },
8634
8824
  children: expandTopLevel ? jsxs("div", {
8635
- className: css$25.expandedTopLevel,
8825
+ className: css$27.expandedTopLevel,
8636
8826
  children: [
8637
8827
  jsxs("div", {
8638
- className: clsx(css$25.row, css$25.topLevelBracket),
8828
+ className: clsx(css$27.row, css$27.topLevelBracket),
8639
8829
  "data-json-root-row": true,
8640
8830
  onMouseOver: (event) => {
8641
8831
  event.stopPropagation();
@@ -8648,13 +8838,13 @@ function JsonTree({ data, label, className, collapsedStringLines = 3, stringWrap
8648
8838
  path: [],
8649
8839
  value: data
8650
8840
  }), jsx("span", {
8651
- className: css$25.punctuation,
8841
+ className: css$27.punctuation,
8652
8842
  children: rootOpen
8653
8843
  })]
8654
8844
  }),
8655
8845
  jsx("div", {
8656
8846
  "aria-label": label,
8657
- className: clsx(css$25.container, css$25.expandedTopLevelContainer),
8847
+ className: clsx(css$27.container, css$27.expandedTopLevelContainer),
8658
8848
  role: "tree",
8659
8849
  children: rootEntries.map(([key, value], index) => jsx(JsonTreeNode, {
8660
8850
  collapsedStringLines,
@@ -8672,16 +8862,16 @@ function JsonTree({ data, label, className, collapsedStringLines = 3, stringWrap
8672
8862
  }, key))
8673
8863
  }),
8674
8864
  jsx("div", {
8675
- className: clsx(css$25.row, css$25.topLevelBracket),
8865
+ className: clsx(css$27.row, css$27.topLevelBracket),
8676
8866
  children: jsx("span", {
8677
- className: css$25.punctuation,
8867
+ className: css$27.punctuation,
8678
8868
  children: rootClose
8679
8869
  })
8680
8870
  })
8681
8871
  ]
8682
8872
  }) : jsx("div", {
8683
8873
  "aria-label": label,
8684
- className: css$25.container,
8874
+ className: css$27.container,
8685
8875
  role: "tree",
8686
8876
  children: jsx(JsonTreeNode, {
8687
8877
  collapsedStringLines,
@@ -9244,67 +9434,67 @@ function TerminalBlock({ command, cwd, home, output, exitCode, signal, running =
9244
9434
  const { hidden, capped, headLines, tailLines } = headTailCap(lines.length, maxLines, expanded);
9245
9435
  const body = !running || !empty;
9246
9436
  return jsxs("div", {
9247
- className: clsx(css$26.block, className),
9437
+ className: clsx(css$28.block, className),
9248
9438
  "data-terminal": "",
9249
9439
  "data-running": running ? "" : void 0,
9250
9440
  "data-body": body ? "" : void 0,
9251
9441
  children: [jsxs("div", {
9252
- className: css$26.header,
9442
+ className: css$28.header,
9253
9443
  children: [
9254
9444
  jsxs("div", {
9255
- className: css$26.prompt,
9445
+ className: css$28.prompt,
9256
9446
  children: [runStateDot && jsx("span", {
9257
- className: css$26.runStateLabel,
9447
+ className: css$28.runStateLabel,
9258
9448
  children: state.label
9259
9449
  }), commandLines.map((line, index) => jsxs("div", {
9260
- className: css$26.promptLine,
9450
+ className: css$28.promptLine,
9261
9451
  children: [
9262
9452
  index === 0 && runStateDot && jsx(StateDot, {
9263
9453
  state: state.state,
9264
- className: css$26.runState
9454
+ className: css$28.runState
9265
9455
  }),
9266
9456
  jsx("span", {
9267
- className: css$26.cwd,
9457
+ className: css$28.cwd,
9268
9458
  children: index > 0 || cwd === void 0 ? "$" : promptLabel(cwd, home)
9269
9459
  }),
9270
9460
  jsx("span", {
9271
- className: css$26.command,
9461
+ className: css$28.command,
9272
9462
  children: line
9273
9463
  })
9274
9464
  ]
9275
9465
  }, index))]
9276
9466
  }),
9277
9467
  status !== void 0 && jsx(Pill, {
9278
- className: css$26.status,
9468
+ className: css$28.status,
9279
9469
  children: status
9280
9470
  }),
9281
9471
  (copyText !== void 0 || !running && !empty) && jsx("button", {
9282
9472
  type: "button",
9283
- className: css$26.copyButton,
9473
+ className: css$28.copyButton,
9284
9474
  onClick: onCopy,
9285
9475
  children: copied ? copy.copied : copy.copy
9286
9476
  })
9287
9477
  ]
9288
9478
  }), body && (empty ? jsx("div", {
9289
- className: css$26.empty,
9479
+ className: css$28.empty,
9290
9480
  children: copy.noOutput
9291
9481
  }) : jsxs("div", {
9292
- className: css$26.output,
9482
+ className: css$28.output,
9293
9483
  children: [
9294
9484
  (capped ? lines.slice(0, headLines) : lines).map((line, index) => jsx("div", {
9295
- className: css$26.line,
9485
+ className: css$28.line,
9296
9486
  children: renderLine$1(line)
9297
9487
  }, index)),
9298
9488
  hidden > 0 && jsx("button", {
9299
9489
  type: "button",
9300
- className: css$26.expand,
9490
+ className: css$28.expand,
9301
9491
  "aria-expanded": expanded,
9302
9492
  "aria-label": expanded ? copy.collapseAria : copy.expandAria(hidden),
9303
9493
  onClick: onToggle,
9304
9494
  children: expanded ? copy.collapse : copy.expand(hidden)
9305
9495
  }),
9306
9496
  capped && lines.slice(lines.length - tailLines).map((line, index) => jsx("div", {
9307
- className: css$26.line,
9497
+ className: css$28.line,
9308
9498
  children: renderLine$1(line)
9309
9499
  }, index))
9310
9500
  ]
@@ -9507,13 +9697,13 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
9507
9697
  const tailLines = maxLines - headLines;
9508
9698
  const windowed = lines.length < totalLines;
9509
9699
  const rows = (slice) => slice.map(([line, spans]) => jsxs("div", {
9510
- className: css$27.line,
9700
+ className: css$29.line,
9511
9701
  children: [jsx("span", {
9512
- className: css$27.gutter,
9702
+ className: css$29.gutter,
9513
9703
  "aria-hidden": true,
9514
9704
  children: line.number
9515
9705
  }), jsx("span", {
9516
- className: css$27.content,
9706
+ className: css$29.content,
9517
9707
  children: spans === void 0 ? line.text : renderSpans(spans)
9518
9708
  })]
9519
9709
  }, line.number));
@@ -9521,7 +9711,7 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
9521
9711
  const paired = lines.map((line, index) => [line, highlighted?.[index]]);
9522
9712
  return jsxs("div", {
9523
9713
  ref: rootRef,
9524
- className: clsx(cardCss.card, css$27.block, className),
9714
+ className: clsx(cardCss.card, css$29.block, className),
9525
9715
  "data-read": "",
9526
9716
  "data-code-wrap": wrapped,
9527
9717
  style: gutterStyle,
@@ -9543,7 +9733,7 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
9543
9733
  children: [
9544
9734
  rows(capped ? paired.slice(0, headLines) : paired),
9545
9735
  hidden > 0 && jsx(FoldToggle, {
9546
- className: css$27.expand,
9736
+ className: css$29.expand,
9547
9737
  expanded,
9548
9738
  hidden,
9549
9739
  labels,
@@ -9565,11 +9755,11 @@ function assertNever(value) {
9565
9755
  }
9566
9756
  /** The dim class per row kind (path/gap chrome vs the diff's own +/- colors). */
9567
9757
  const ROW_CLASS = {
9568
- path: css$28.path,
9569
- del: css$28.del,
9570
- add: css$28.add,
9571
- context: css$28.context,
9572
- gap: css$28.gap
9758
+ path: css$30.path,
9759
+ del: css$30.del,
9760
+ add: css$30.add,
9761
+ context: css$30.context,
9762
+ gap: css$30.gap
9573
9763
  };
9574
9764
  /** Bound synchronous edit-graph search; one replacement consumes two edits. */
9575
9765
  const MAX_DIFF_EDIT_LENGTH = 256;
@@ -9703,7 +9893,7 @@ function DiffBlock({ diffs, labels, maxLines = 16, className }) {
9703
9893
  const head = capped ? rows.slice(0, headLines) : rows;
9704
9894
  const tail = capped ? rows.slice(rows.length - tailLines) : [];
9705
9895
  return jsxs("div", {
9706
- className: clsx(cardCss.card, css$28.block, className),
9896
+ className: clsx(cardCss.card, css$30.block, className),
9707
9897
  "data-diff": "",
9708
9898
  "data-code-wrap": wrapped,
9709
9899
  children: [jsx(CodeToolbar, {
@@ -9718,21 +9908,21 @@ function DiffBlock({ diffs, labels, maxLines = 16, className }) {
9718
9908
  setWrapped((value) => !value);
9719
9909
  }
9720
9910
  }), jsxs("div", {
9721
- className: css$28.body,
9911
+ className: css$30.body,
9722
9912
  children: [
9723
9913
  head.map((row, index) => jsx("div", {
9724
- className: clsx(css$28.line, ROW_CLASS[row.kind]),
9914
+ className: clsx(css$30.line, ROW_CLASS[row.kind]),
9725
9915
  children: row.text
9726
9916
  }, index)),
9727
9917
  hidden > 0 && jsx(FoldToggle, {
9728
- className: css$28.expand,
9918
+ className: css$30.expand,
9729
9919
  expanded,
9730
9920
  hidden,
9731
9921
  labels,
9732
9922
  onToggle
9733
9923
  }),
9734
9924
  tail.map((row, index) => jsx("div", {
9735
- className: clsx(css$28.line, ROW_CLASS[row.kind]),
9925
+ className: clsx(css$30.line, ROW_CLASS[row.kind]),
9736
9926
  children: row.text
9737
9927
  }, index))
9738
9928
  ]
@@ -9862,56 +10052,56 @@ function SearchBlock(props) {
9862
10052
  const tail = tailHeader === void 0 ? naturalTail : naturalTail.slice(1);
9863
10053
  const renderRow = (row) => {
9864
10054
  if (row.type === "path") return jsx("div", {
9865
- className: css$29.line,
10055
+ className: css$31.line,
9866
10056
  children: row.path
9867
10057
  });
9868
10058
  if (row.type === "match") return jsxs("div", {
9869
- className: css$29.line,
10059
+ className: css$31.line,
9870
10060
  children: [jsxs("span", {
9871
- className: css$29.lineNumber,
10061
+ className: css$31.lineNumber,
9872
10062
  children: [row.lineNumber, ": "]
9873
10063
  }), row.line]
9874
10064
  });
9875
10065
  return jsxs("button", {
9876
10066
  type: "button",
9877
- className: css$29.fileHeader,
10067
+ className: css$31.fileHeader,
9878
10068
  "aria-expanded": !row.collapsed,
9879
10069
  onClick: () => {
9880
10070
  toggleFile(row.index);
9881
10071
  },
9882
10072
  children: [jsx("span", {
9883
- className: css$29.filePath,
10073
+ className: css$31.filePath,
9884
10074
  children: row.path
9885
10075
  }), jsx("span", {
9886
- className: css$29.fileCount,
10076
+ className: css$31.fileCount,
9887
10077
  children: row.count
9888
10078
  })]
9889
10079
  });
9890
10080
  };
9891
10081
  return jsxs("div", {
9892
- className: clsx(css$29.block, className),
10082
+ className: clsx(css$31.block, className),
9893
10083
  "data-search": props.kind,
9894
10084
  children: [jsxs("div", {
9895
- className: css$29.header,
10085
+ className: css$31.header,
9896
10086
  children: [jsx("span", {
9897
- className: css$29.summary,
10087
+ className: css$31.summary,
9898
10088
  children: summaryText(props, shown, truncated, total)
9899
10089
  }), !empty && jsx("button", {
9900
10090
  type: "button",
9901
- className: css$29.copyButton,
10091
+ className: css$31.copyButton,
9902
10092
  onClick: onCopy,
9903
10093
  children: copied ? props.labels.copied : props.labels.copy
9904
10094
  })]
9905
10095
  }), empty ? jsx("div", {
9906
- className: css$29.empty,
10096
+ className: css$31.empty,
9907
10097
  children: props.labels.noResults
9908
10098
  }) : jsxs("div", {
9909
- className: css$29.body,
10099
+ className: css$31.body,
9910
10100
  children: [
9911
10101
  head.map((row) => jsx("div", { children: renderRow(row) }, rowKey(row))),
9912
10102
  hidden > 0 && jsx("button", {
9913
10103
  type: "button",
9914
- className: css$29.expand,
10104
+ className: css$31.expand,
9915
10105
  "aria-expanded": expanded,
9916
10106
  "aria-label": expanded ? props.labels.collapseAria : props.labels.expandAria(hidden),
9917
10107
  onClick: onToggle,
@@ -10741,7 +10931,7 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
10741
10931
  });
10742
10932
  }, [copied, trimmed]);
10743
10933
  const body = streamedBody !== void 0 ? streamedBody : html === void 0 ? jsx("pre", {
10744
- className: css$30.plain,
10934
+ className: css$32.plain,
10745
10935
  children: jsx("code", { children: sourceLines === void 0 ? trimmed : sourceLines.map((line, index) => jsxs(Fragment$1, { children: [index > 0 && "\n", jsx("span", {
10746
10936
  className: "line",
10747
10937
  children: line
@@ -10749,12 +10939,12 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
10749
10939
  }) : jsx("div", { dangerouslySetInnerHTML: { __html: html } });
10750
10940
  return jsxs("div", {
10751
10941
  ref: rootRef,
10752
- className: clsx(css$30.block, "md-code-block", lineNumbers && css$30.numbered, toolbarLabels !== void 0 && css$30.card, className),
10942
+ className: clsx(css$32.block, "md-code-block", lineNumbers && css$32.numbered, toolbarLabels !== void 0 && css$32.card, className),
10753
10943
  "data-line-numbers": lineNumbers || void 0,
10754
10944
  "data-code-wrap": toolbarLabels === void 0 ? void 0 : wrapped,
10755
10945
  style: sourceLines === void 0 ? void 0 : { "--dsl-code-block-line-number-width": `${Math.max(2, String(sourceLines.length).length)}ch` },
10756
10946
  children: [showHeader && jsx("div", {
10757
- className: css$30.bannerWrap,
10947
+ className: css$32.bannerWrap,
10758
10948
  children: toolbarLabels !== void 0 ? jsx(CodeToolbar, {
10759
10949
  lang,
10760
10950
  labels: toolbarLabels,
@@ -10767,16 +10957,16 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
10767
10957
  setWrapped((value) => !value);
10768
10958
  } : void 0
10769
10959
  }) : jsxs("div", {
10770
- className: css$30.banner,
10960
+ className: css$32.banner,
10771
10961
  "data-code-block-banner": true,
10772
10962
  children: [jsx("div", {
10773
- className: css$30.infostring,
10963
+ className: css$32.infostring,
10774
10964
  children: lang ?? ""
10775
10965
  }), jsx("div", {
10776
- className: css$30.action,
10966
+ className: css$32.action,
10777
10967
  children: jsx("button", {
10778
10968
  type: "button",
10779
- className: css$30.copyButton,
10969
+ className: css$32.copyButton,
10780
10970
  onClick: onCopy,
10781
10971
  children: copied ? copiedLabel : copyLabel
10782
10972
  })
@@ -10784,7 +10974,7 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
10784
10974
  })
10785
10975
  }), jsx("div", {
10786
10976
  ref: contentRef,
10787
- className: css$30.content,
10977
+ className: css$32.content,
10788
10978
  "data-code-block-content": true,
10789
10979
  children: body
10790
10980
  })]
@@ -10974,25 +11164,25 @@ function ImageLightbox({ src, alt, labels, onClose }) {
10974
11164
  };
10975
11165
  }, [onClose]);
10976
11166
  return createPortal(jsxs("div", {
10977
- className: css$31.backdrop,
11167
+ className: css$33.backdrop,
10978
11168
  role: "dialog",
10979
11169
  "aria-modal": "true",
10980
11170
  "aria-label": labels.dialog,
10981
11171
  children: [
10982
11172
  jsx("div", {
10983
- className: css$31.mask,
11173
+ className: css$33.mask,
10984
11174
  "aria-hidden": "true",
10985
11175
  onMouseDown: onClose
10986
11176
  }),
10987
11177
  jsx("img", {
10988
- className: css$31.image,
11178
+ className: css$33.image,
10989
11179
  src,
10990
11180
  alt
10991
11181
  }),
10992
11182
  jsx("button", {
10993
11183
  ref: closeRef,
10994
11184
  type: "button",
10995
- className: css$31.close,
11185
+ className: css$33.close,
10996
11186
  "aria-label": labels.close,
10997
11187
  onClick: onClose,
10998
11188
  children: jsx(IconCloseOutlineRegular, { size: 16 })
@@ -11019,14 +11209,14 @@ function ImagePreview({ src, alt, loadingLabel, failedLabel }) {
11019
11209
  function Preview({ src, alt, loadingLabel, failedLabel }) {
11020
11210
  const [state, setState] = useState("loading");
11021
11211
  return jsxs("span", {
11022
- className: css$32.frame,
11212
+ className: css$34.frame,
11023
11213
  children: [state !== "failed" && jsx("img", {
11024
11214
  src,
11025
11215
  alt,
11026
11216
  loading: "lazy",
11027
11217
  decoding: "async",
11028
11218
  referrerPolicy: "no-referrer",
11029
- className: css$32.image,
11219
+ className: css$34.image,
11030
11220
  "data-ready": state === "ready" || void 0,
11031
11221
  onLoad: () => {
11032
11222
  setState("ready");
@@ -11035,7 +11225,7 @@ function Preview({ src, alt, loadingLabel, failedLabel }) {
11035
11225
  setState("failed");
11036
11226
  }
11037
11227
  }), state !== "ready" && jsxs("span", {
11038
- className: css$32.status,
11228
+ className: css$34.status,
11039
11229
  role: "status",
11040
11230
  children: [state === "loading" && jsx(IconLoadingOutlineRegular, { size: 16 }), jsx("span", { children: state === "loading" ? loadingLabel : failedLabel })]
11041
11231
  })]
@@ -11774,7 +11964,7 @@ function SafeLink({ url, label, className }) {
11774
11964
  children: [jsx(LinkIconMedium, {
11775
11965
  kind: "url",
11776
11966
  href,
11777
- className: css$33.linkIcon
11967
+ className: css$35.linkIcon
11778
11968
  }), label]
11779
11969
  });
11780
11970
  }
@@ -11789,20 +11979,20 @@ function SafeLink({ url, label, className }) {
11789
11979
  */
11790
11980
  function SourceItem({ source, ordinal }) {
11791
11981
  return jsxs("li", {
11792
- className: css$33.source,
11982
+ className: css$35.source,
11793
11983
  value: ordinal,
11794
11984
  children: [
11795
11985
  jsx(SafeLink, {
11796
11986
  url: source.url,
11797
11987
  label: linkLabel(source.url, source.title),
11798
- className: css$33.sourceLink
11988
+ className: css$35.sourceLink
11799
11989
  }),
11800
11990
  source.snippet !== void 0 && source.snippet !== "" && jsx("div", {
11801
- className: css$33.snippet,
11991
+ className: css$35.snippet,
11802
11992
  children: source.snippet
11803
11993
  }),
11804
11994
  source.publishedAt !== void 0 && source.publishedAt !== "" && jsx("div", {
11805
- className: css$33.published,
11995
+ className: css$35.published,
11806
11996
  children: source.publishedAt
11807
11997
  })
11808
11998
  ]
@@ -11817,28 +12007,28 @@ function SourceItem({ source, ordinal }) {
11817
12007
  function WebSearchBlock({ answer, sources, truncated, labels, className }) {
11818
12008
  const empty = (answer === void 0 || answer === "") && sources.length === 0;
11819
12009
  return jsxs("div", {
11820
- className: clsx(css$33.block, className),
12010
+ className: clsx(css$35.block, className),
11821
12011
  "data-web": "search",
11822
12012
  children: [
11823
12013
  answer !== void 0 && answer !== "" && jsx("div", {
11824
- className: css$33.answer,
12014
+ className: css$35.answer,
11825
12015
  children: jsx(MarkdownText, {
11826
12016
  text: answer,
11827
12017
  labels: labels.markdown
11828
12018
  })
11829
12019
  }),
11830
12020
  empty ? jsx("div", {
11831
- className: css$33.empty,
12021
+ className: css$35.empty,
11832
12022
  children: labels.noResults
11833
12023
  }) : jsx("ol", {
11834
- className: css$33.sources,
12024
+ className: css$35.sources,
11835
12025
  children: sources.map((source, index) => jsx(SourceItem, {
11836
12026
  source,
11837
12027
  ordinal: index + 1
11838
12028
  }, index))
11839
12029
  }),
11840
12030
  truncated && jsx("div", {
11841
- className: css$33.truncated,
12031
+ className: css$35.truncated,
11842
12032
  children: labels.sourcesTruncated
11843
12033
  })
11844
12034
  ]
@@ -11851,23 +12041,23 @@ function WebSearchBlock({ answer, sources, truncated, labels, className }) {
11851
12041
  */
11852
12042
  function WebFetchBlock({ url, statusCode, truncated, labels, className }) {
11853
12043
  return jsxs("div", {
11854
- className: clsx(css$33.block, css$33.fetch, className),
12044
+ className: clsx(css$35.block, css$35.fetch, className),
11855
12045
  "data-web": "fetch",
11856
12046
  children: [jsx(SafeLink, {
11857
12047
  url,
11858
12048
  label: url,
11859
- className: css$33.fetchUrl
12049
+ className: css$35.fetchUrl
11860
12050
  }), jsxs("div", {
11861
- className: css$33.fetchMeta,
12051
+ className: css$35.fetchMeta,
11862
12052
  children: [jsxs("span", {
11863
- className: css$33.status,
12053
+ className: css$35.status,
11864
12054
  children: [
11865
12055
  labels.http,
11866
12056
  " ",
11867
12057
  statusCode
11868
12058
  ]
11869
12059
  }), truncated && jsx("span", {
11870
- className: css$33.truncated,
12060
+ className: css$35.truncated,
11871
12061
  children: labels.contentTruncated
11872
12062
  })]
11873
12063
  })]
@@ -11901,10 +12091,10 @@ function JsonBlock({ label, payload, defaultOpen = false, truncatedLabel }) {
11901
12091
  truncatedLabel
11902
12092
  ]);
11903
12093
  return jsxs("div", {
11904
- className: css$34.root,
12094
+ className: css$36.root,
11905
12095
  children: [jsxs("button", {
11906
12096
  type: "button",
11907
- className: css$34.toggle,
12097
+ className: css$36.toggle,
11908
12098
  onClick: () => {
11909
12099
  setOpen((v) => !v);
11910
12100
  },
@@ -11914,7 +12104,7 @@ function JsonBlock({ label, payload, defaultOpen = false, truncatedLabel }) {
11914
12104
  label
11915
12105
  ]
11916
12106
  }), open && jsx("pre", {
11917
- className: css$34.body,
12107
+ className: css$36.body,
11918
12108
  children: body
11919
12109
  })]
11920
12110
  });
@@ -12255,6 +12445,6 @@ function GuideArtworkFiles({ size = 36, className }) {
12255
12445
  });
12256
12446
  }
12257
12447
  //#endregion
12258
- export { BrandWordmark, Button, CODE_HIGHLIGHT_EXTENSIONS, Checkbox, CodeBlock, ConnectionIndicator, DEFAULT_DIFF_MAX_LINES, DEFAULT_READ_MAX_LINES, DEFAULT_SEARCH_MAX_LINES, DEFAULT_TERMINAL_MAX_LINES, DiffBlock, DisclosureRow, FISH_LOGO_PATH, FISH_LOGO_VIEWBOX, FileTypeIcon, FishLogo, GuideArtworkBrowser, GuideArtworkFiles, HoverCard, ICON_MEDIUM_STROKE, ICON_REGULAR_STROKE, IconAgentPresetOutlineMedium, IconAgentPresetOutlineRegular, IconAlarmClockOutlineMedium, IconAlarmClockOutlineRegular, IconApiOutlineMedium, IconApiOutlineRegular, IconArchiveCheckOutlineMedium, IconArchiveCheckOutlineRegular, IconArchiveOffOutlineMedium, IconArchiveOffOutlineRegular, IconArchiveOutlineMedium, IconArchiveOutlineRegular, IconBranchOutlineMedium, IconBranchOutlineRegular, IconBrowseOutlineMedium, IconBrowseOutlineRegular, IconCheckCircleFillMedium, IconCheckCircleFillRegular, IconCheckCircleOutlineMedium, IconCheckCircleOutlineRegular, IconCheckOutlineMedium, IconCheckOutlineRegular, IconChecklistOutlineMedium, IconChecklistOutlineRegular, IconChevronDownOutlineMedium, IconChevronDownOutlineRegular, IconChevronLeftOutlineMedium, IconChevronLeftOutlineRegular, IconChevronRightOutlineMedium, IconChevronRightOutlineRegular, IconChevronUpOutlineMedium, IconChevronUpOutlineRegular, IconChevronsUpDownOutlineMedium, IconChevronsUpDownOutlineRegular, IconClockOutlineMedium, IconClockOutlineRegular, IconCloseCircleFillMedium, IconCloseCircleFillRegular, IconCloseFillMedium, IconCloseFillRegular, IconCloseOutlineMedium, IconCloseOutlineRegular, IconCodeOutlineMedium, IconCodeOutlineRegular, IconCompactOutlineMedium, IconCompactOutlineRegular, IconCompareSplitOutlineMedium, IconCompareSplitOutlineRegular, IconContextInjectionOutlineMedium, IconContextInjectionOutlineRegular, IconCopyOutlineMedium, IconCopyOutlineRegular, IconCordisPluginOutlineMedium, IconCordisPluginOutlineRegular, IconDarkOutlineMedium, IconDarkOutlineRegular, IconDataOutlineMedium, IconDataOutlineRegular, IconDatabaseOutlineMedium, IconDatabaseOutlineRegular, IconDeliverDocMedium, IconDeliverDocRegular, IconDislikeFillMedium, IconDislikeFillRegular, IconDislikeOutlineMedium, IconDislikeOutlineRegular, IconDownloadOutlineMedium, IconDownloadOutlineRegular, IconEditOutlineMedium, IconEditOutlineRegular, IconEllipsisOutlineMedium, IconEllipsisOutlineRegular, IconEnhanceOutlineMedium, IconEnhanceOutlineRegular, IconFlatListOutlineMedium, IconFlatListOutlineRegular, IconFolderCloseMedium, IconFolderCloseRegular, IconFolderOpenMedium, IconFolderOpenOutlineMedium, IconFolderOpenOutlineRegular, IconFolderOpenRegular, IconFollowsystemOutlineMedium, IconFollowsystemOutlineRegular, IconFullscreenOutlineMedium, IconFullscreenOutlineRegular, IconGaugeOutlineMedium, IconGaugeOutlineRegular, IconGlobeOutlineMedium, IconGlobeOutlineRegular, IconGoalOutlineMedium, IconGoalOutlineRegular, IconInfoOutlineMedium, IconInfoOutlineRegular, IconInspectOutlineMedium, IconInspectOutlineRegular, IconLightOutlineMedium, IconLightOutlineRegular, IconLikeFillMedium, IconLikeFillRegular, IconLikeOutlineMedium, IconLikeOutlineRegular, IconLinkOutlineMedium, IconLinkOutlineRegular, IconListPenOutlineMedium, IconListPenOutlineRegular, IconLoadingOutlineMedium, IconLoadingOutlineRegular, IconMicrophoneOutlineMedium, IconMicrophoneOutlineRegular, IconNewChatOutlineMedium, IconNewChatOutlineRegular, IconNowrapFillMedium, IconNowrapFillRegular, IconPanelLeftOutlineMedium, IconPanelLeftOutlineRegular, IconPaperPlaneOutlineMedium, IconPaperPlaneOutlineRegular, IconPaperclipOutlineMedium, IconPaperclipOutlineRegular, IconPauseOutlineMedium, IconPauseOutlineRegular, IconPersonalizationOutlineMedium, IconPersonalizationOutlineRegular, IconPinFillMedium, IconPinFillRegular, IconPinOutlineMedium, IconPinOutlineRegular, IconPlanOutlineMedium, IconPlanOutlineRegular, IconPlayOutlineMedium, IconPlayOutlineRegular, IconPluginPinwheelOutlineMedium, IconPluginPinwheelOutlineRegular, IconPlusOutlineMedium, IconPlusOutlineRegular, IconProjectAddOutlineMedium, IconProjectAddOutlineRegular, IconQuestionOutlineMedium, IconQuestionOutlineRegular, IconQueueOutlineMedium, IconQueueOutlineRegular, IconRefreshOutlineMedium, IconRefreshOutlineRegular, IconRightUpOutlineMedium, IconRightUpOutlineRegular, IconSearchOutlineMedium, IconSearchOutlineRegular, IconSendOutlineMedium, IconSendOutlineRegular, IconSettingsOutlineMedium, IconSettingsOutlineRegular, IconShareOutlineMedium, IconShareOutlineRegular, IconShieldOutlineMedium, IconShieldOutlineRegular, IconSkillOutlineMedium, IconSkillOutlineRegular, IconSlidersTwoOutlineMedium, IconSlidersTwoOutlineRegular, IconSparkleMedium, IconSparkleRegular, IconStopFillMedium, IconStopFillRegular, IconThinkOutlineMedium, IconThinkOutlineRegular, IconTrashOutlineMedium, IconTrashOutlineRegular, IconTreeCornerMedium, IconTreeCornerRegular, IconTriangleRightFillMedium, IconTriangleRightFillRegular, IconUnarchiveOutlineMedium, IconUnarchiveOutlineRegular, IconUserOutlineMedium, IconUserOutlineRegular, IconUsersOutlineMedium, IconUsersOutlineRegular, IconWarningOutlineMedium, IconWarningOutlineRegular, IconWarningTriangleOutlineMedium, IconWarningTriangleOutlineRegular, IconWorkspaceTreeOutlineMedium, IconWorkspaceTreeOutlineRegular, IconWrapFillMedium, IconWrapFillRegular, IconWrapLinesOutlineMedium, IconWrapLinesOutlineRegular, ImageLightbox, Input, JsonBlock, JsonTree, LinkIconMedium, LinkIconRegular, MarkdownDelegateProvider, MarkdownText, Menu, MenuItemButton, MenuSurface, Modal, PathLabel, PermissionIconFullAccessMedium, PermissionIconFullAccessRegular, PermissionIconReadOnlyMedium, PermissionIconReadOnlyRegular, PermissionIconWorkspaceWriteMedium, PermissionIconWorkspaceWriteRegular, Pill, PluginArtworkDefault, PluginArtworkLoop, PluginArtworkSearch, PluginArtworkSubagent, PluginArtworkTerminal, ReadBlock, ReferenceIconMedium, ReferenceIconRegular, RiskConfirmation, SHIELD_OUTLINE_PATH, SearchBlock, SegmentedControl, SegmentedTabs, SettingsForm, SettingsFormModel, SettingsSecretField, SettingsValueField, ShortcutKeys, StateDot, Switch, Tag, TerminalBlock, TextShimmer, Toast, Tooltip, WebBlock, classifyFileType, classifyLinkPath, closeTopModal, diffTotals, extractMarkdownPlainText, fileExtension, fileSizeText, focusWithoutRing, isBehindModal, isDarwinDesktop, languageForPath, modalSelector, observeComposition, pointerModality, projectUserText, rankByName, relativeTime, settingsNumberField, settingsTextField, useAnchoredMaxHeight, useAnchoredPosition, useCodeHighlighter, useDismissOnOutsidePointer, useModalLayer, writeClipboard };
12448
+ 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, 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 };
12259
12449
 
12260
12450
  //# sourceMappingURL=index.js.map