@deepseek-ai/dsh-client-ui-primitives 0.2.1-alpha.1 → 0.2.1-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.i18n.yaml +10 -10
- package/README.md +12 -7
- package/README.zh.md +12 -7
- package/lib/CommandText.module.css +12 -0
- package/lib/DisclosureRow.module.css +15 -0
- package/lib/ImageLightbox.module.css +12 -4
- package/lib/TerminalBlock.module.css +5 -12
- package/lib/index.js +719 -586
- package/lib/types/CommandText.d.ts +16 -0
- package/lib/types/DisclosureRow.d.ts +4 -2
- package/lib/types/HoverCard.d.ts +5 -2
- package/lib/types/HoverCardGroup.d.ts +23 -0
- package/lib/types/PermissionIcon.d.ts +12 -0
- package/lib/types/TerminalBlock.d.ts +10 -2
- package/lib/types/Tooltip.d.ts +2 -2
- package/lib/types/index.d.ts +5 -2
- package/lib/types/user-text.d.ts +23 -31
- package/package.json +10 -12
package/lib/index.js
CHANGED
|
@@ -20,15 +20,15 @@ import css$13 from "./ShortcutKeys.module.css";
|
|
|
20
20
|
import css$14 from "./MenuSurface.module.css";
|
|
21
21
|
import css$15 from "./Menu.module.css";
|
|
22
22
|
import css$16 from "./MenuGroup.module.css";
|
|
23
|
-
import css$17 from "./
|
|
24
|
-
import css$18 from "./
|
|
25
|
-
import css$19 from "./
|
|
26
|
-
import css$20 from "./
|
|
27
|
-
import css$21 from "./
|
|
28
|
-
import css$22 from "./FileTypeIcon.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";
|
|
29
28
|
import { siAliexpress, siApple, siBaidu, siBilibili, siCsdn, siDuckduckgo, siEbay, siFacebook, siGithub, siGitlab, siGoogle, siInstagram, siJuejin, siMdnwebdocs, siNetflix, siNpm, siPypi, siQq, siQuora, siReddit, siSinaweibo, siSpotify, siStackoverflow, siTaobao, siTelegram, siTiktok, siV2ex, siWechat, siWhatsapp, siWikipedia, siX, siYcombinator, siYoutube, siZhihu } from "simple-icons";
|
|
30
|
-
import css$
|
|
29
|
+
import css$22 from "./user-text.module.css";
|
|
31
30
|
import markdownCss from "./markdown/MarkdownText.module.css";
|
|
31
|
+
import css$23 from "./Tooltip.module.css";
|
|
32
32
|
import css$24 from "./Toast.module.css";
|
|
33
33
|
import css$25 from "./settings-form/SettingsForm.module.css";
|
|
34
34
|
import css$26 from "./settings-form/fields.module.css";
|
|
@@ -42,11 +42,12 @@ import { CODE_HIGHLIGHT_EXTENSIONS, languageForPath } from "@deepseek-ai/dsh-uti
|
|
|
42
42
|
import css$27 from "./JsonTree.module.css";
|
|
43
43
|
import Anser from "anser";
|
|
44
44
|
import css$28 from "./TerminalBlock.module.css";
|
|
45
|
+
import css$29 from "./CommandText.module.css";
|
|
45
46
|
import cardCss from "./CodeCard.module.css";
|
|
46
|
-
import css$
|
|
47
|
+
import css$30 from "./ReadBlock.module.css";
|
|
47
48
|
import { structuredPatch } from "diff";
|
|
48
|
-
import css$
|
|
49
|
-
import css$
|
|
49
|
+
import css$31 from "./DiffBlock.module.css";
|
|
50
|
+
import css$32 from "./SearchBlock.module.css";
|
|
50
51
|
import { fromMarkdown } from "mdast-util-from-markdown";
|
|
51
52
|
import { gfmFromMarkdown } from "mdast-util-gfm";
|
|
52
53
|
import { mathFromMarkdown } from "mdast-util-math";
|
|
@@ -58,13 +59,13 @@ import { classifyCharacter } from "micromark-util-classify-character";
|
|
|
58
59
|
import { codes, constants, types } from "micromark-util-symbol";
|
|
59
60
|
import { factorySpace } from "micromark-factory-space";
|
|
60
61
|
import { normalizeUri } from "micromark-util-sanitize-uri";
|
|
61
|
-
import css$
|
|
62
|
+
import css$33 from "./markdown/CodeBlock.module.css";
|
|
62
63
|
import katex from "katex";
|
|
63
|
-
import css$
|
|
64
|
-
import css$
|
|
64
|
+
import css$34 from "./ImageLightbox.module.css";
|
|
65
|
+
import css$35 from "./ImagePreview.module.css";
|
|
65
66
|
import "katex/dist/katex.min.css";
|
|
66
|
-
import css$
|
|
67
|
-
import css$
|
|
67
|
+
import css$36 from "./WebBlock.module.css";
|
|
68
|
+
import css$37 from "./markdown/JsonBlock.module.css";
|
|
68
69
|
//#region lib/types/icons/shared-artwork.js
|
|
69
70
|
/**
|
|
70
71
|
* Render new-conversation geometry — the bubble around a plus — for product icons.
|
|
@@ -3166,7 +3167,7 @@ const TextShimmer = memo(function TextShimmer({ children, active = false, classN
|
|
|
3166
3167
|
* @param props - Visual content, controlled state, and interaction policy.
|
|
3167
3168
|
* @returns the disclosure row.
|
|
3168
3169
|
*/
|
|
3169
|
-
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 }) {
|
|
3170
3171
|
const rowExpands = expandable && expandOnRowClick;
|
|
3171
3172
|
const toggleFromLeading = (event) => {
|
|
3172
3173
|
event.stopPropagation();
|
|
@@ -3186,33 +3187,38 @@ const DisclosureRow = memo(function DisclosureRow({ icon, title, open, expandabl
|
|
|
3186
3187
|
className: clsx(css$2.root, className),
|
|
3187
3188
|
"data-open": open || void 0,
|
|
3188
3189
|
children: [jsxs("div", {
|
|
3189
|
-
className:
|
|
3190
|
-
"data-disclosure-
|
|
3191
|
-
"data-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
"
|
|
3202
|
-
|
|
3203
|
-
|
|
3204
|
-
|
|
3205
|
-
|
|
3206
|
-
|
|
3207
|
-
|
|
3208
|
-
|
|
3209
|
-
|
|
3210
|
-
|
|
3211
|
-
|
|
3212
|
-
|
|
3213
|
-
|
|
3214
|
-
|
|
3215
|
-
|
|
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]
|
|
3216
3222
|
}), open && children]
|
|
3217
3223
|
});
|
|
3218
3224
|
});
|
|
@@ -4640,318 +4646,70 @@ async function writeClipboard(text) {
|
|
|
4640
4646
|
}
|
|
4641
4647
|
}
|
|
4642
4648
|
//#endregion
|
|
4643
|
-
//#region lib/types/
|
|
4644
|
-
/**
|
|
4645
|
-
|
|
4646
|
-
|
|
4647
|
-
*
|
|
4648
|
-
*
|
|
4649
|
-
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4654
|
-
|
|
4655
|
-
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4659
|
-
|
|
4660
|
-
|
|
4661
|
-
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
|
|
4670
|
-
|
|
4671
|
-
|
|
4672
|
-
|
|
4673
|
-
|
|
4674
|
-
|
|
4675
|
-
|
|
4676
|
-
|
|
4677
|
-
|
|
4678
|
-
|
|
4679
|
-
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
|
|
4685
|
-
|
|
4686
|
-
|
|
4687
|
-
|
|
4688
|
-
|
|
4689
|
-
}
|
|
4690
|
-
keyFocusOrigin = event.composedPath()[0];
|
|
4691
|
-
if (!FOCUS_NAVIGATION.has(event.key) && !event.key.startsWith("Arrow")) return;
|
|
4692
|
-
pointerOwnsFocus = false;
|
|
4693
|
-
publish();
|
|
4694
|
-
}, true);
|
|
4695
|
-
window.addEventListener("focusin", (event) => {
|
|
4696
|
-
if (keyFocusOrigin === void 0 || event.composedPath()[0] === keyFocusOrigin) return;
|
|
4697
|
-
keyFocusOrigin = void 0;
|
|
4698
|
-
if (!pointerOwnsFocus) return;
|
|
4699
|
-
pointerOwnsFocus = false;
|
|
4700
|
-
publish();
|
|
4701
|
-
}, true);
|
|
4702
|
-
window.addEventListener("blur", () => {
|
|
4703
|
-
keyFocusOrigin = void 0;
|
|
4704
|
-
});
|
|
4705
|
-
}
|
|
4706
|
-
//#endregion
|
|
4707
|
-
//#region lib/types/Tooltip.js
|
|
4708
|
-
/** Anchor-preserving tooltips; an optional body portal escapes clipping containers and stacking contexts that cap the bubble's z-index. */
|
|
4709
|
-
/**
|
|
4710
|
-
* Suppression channel for enclosing tooltip and hover-card anchors: a visible
|
|
4711
|
-
* tooltip within an anchor withdraws the enclosing preview while its bubble is shown.
|
|
4712
|
-
*/
|
|
4713
|
-
const TooltipSuppression = createContext(null);
|
|
4714
|
-
/**
|
|
4715
|
-
* Attach a hover/focus tooltip to an anchor element.
|
|
4716
|
-
* @param props.label - bubble text, or a resolver evaluated only while visible; an empty string shows only shortcut keys.
|
|
4717
|
-
* @param props.shortcutKeys - effective key labels rendered as platform-formatted keycaps after optional text.
|
|
4718
|
-
* @param props.side - placement relative to the anchor (default 'right').
|
|
4719
|
-
* @param props.align - horizontal anchor-edge alignment for 'bottom'/'top' bubbles: 'end' pins
|
|
4720
|
-
* the bubble's right edge to the anchor's (for anchors beside other hover surfaces the centered
|
|
4721
|
-
* bubble would overlap); default 'center'. Ignored for side 'right'.
|
|
4722
|
-
* @param props.portal - render the bubble under document.body, so an ancestor's clipping or its
|
|
4723
|
-
* stacking context (which confines the bubble's z-index to that context) cannot hide it.
|
|
4724
|
-
* @param props.delayMs - hover delay in milliseconds (default 0).
|
|
4725
|
-
* @param props.focusDelayMs - keyboard focus delay in milliseconds (default 0); blur, click,
|
|
4726
|
-
* mouse leave, disabling, and unmount cancel a pending show.
|
|
4727
|
-
* @param props.gap - anchor-to-bubble distance in pixels for 'bottom'/'top' bubbles (default 8);
|
|
4728
|
-
* ignored for side 'right'.
|
|
4729
|
-
* @param props.disabled - suppress the bubble while true; the anchor renders identically so
|
|
4730
|
-
* toggling never remounts it (which would cut its CSS transitions).
|
|
4731
|
-
* @param props.maxWidth - bubble width cap in pixels, for labels long enough that the default
|
|
4732
|
-
* half-viewport cap would render a slab wider than the surface the anchor sits on.
|
|
4733
|
-
* @param props.openOnClick - clicking also pins the bubble for reading; another click, Escape,
|
|
4734
|
-
* Tab, or an outside pointerdown dismisses it. Defaults to false for ordinary action tooltips.
|
|
4735
|
-
* @param props.children - a single anchor element; its own ref (callback or object) is forwarded alongside the tooltip's.
|
|
4736
|
-
* @returns the cloned anchor plus a fixed-position bubble, optionally portaled to the body.
|
|
4737
|
-
* The bubble stays hidden until ResizeObserver supplies its size for viewport fitting; clicking the
|
|
4738
|
-
* anchor dismisses the bubble unless openOnClick is enabled, and focus arriving after a pointer
|
|
4739
|
-
* interaction (a closing menu refocusing its trigger) never raises it.
|
|
4740
|
-
*/
|
|
4741
|
-
function Tooltip({ label, shortcutKeys, side = "right", align = "center", delayMs = 0, focusDelayMs = 0, gap = 8, disabled = false, portal = false, maxWidth, openOnClick = false, children }) {
|
|
4742
|
-
const id = useId();
|
|
4743
|
-
const [pinned, setPinned] = useState(false);
|
|
4744
|
-
const anchor = useRef(null);
|
|
4745
|
-
const childRef = children.ref;
|
|
4746
|
-
const mergedRef = useCallback((el) => {
|
|
4747
|
-
anchor.current = el;
|
|
4748
|
-
if (typeof childRef === "function") childRef(el);
|
|
4749
|
-
else if (childRef != null) childRef.current = el;
|
|
4750
|
-
}, [childRef]);
|
|
4751
|
-
const [pos, setPos] = useState(null);
|
|
4752
|
-
const bubble = useRef(null);
|
|
4753
|
-
const resolvedLabel = pos === null ? null : typeof label === "function" ? label() : label;
|
|
4754
|
-
const y = pos === null ? 0 : side === "right" ? pos.top + (pos.bottom - pos.top) / 2 : side === "top" ? pos.top - gap : pos.bottom + gap;
|
|
4755
|
-
const showTimer = useRef(null);
|
|
4756
|
-
const triggers = useRef({
|
|
4757
|
-
hover: false,
|
|
4758
|
-
focus: false
|
|
4759
|
-
});
|
|
4760
|
-
const suppressAncestors = useContext(TooltipSuppression);
|
|
4761
|
-
const [suppressed, setSuppressed] = useState(false);
|
|
4762
|
-
const announce = useCallback((active) => {
|
|
4763
|
-
suppressAncestors?.(active);
|
|
4764
|
-
}, [suppressAncestors]);
|
|
4765
|
-
const visible = pos !== null && !disabled;
|
|
4766
|
-
useEffect(() => {
|
|
4767
|
-
const el = bubble.current;
|
|
4768
|
-
if (pos === null || !visible || suppressed || el === null) return;
|
|
4769
|
-
const edgeMargin = 12;
|
|
4770
|
-
let size;
|
|
4771
|
-
let placement = side;
|
|
4772
|
-
const fit = () => {
|
|
4773
|
-
if (size === void 0) return;
|
|
4774
|
-
const { inlineSize: width, blockSize: height } = size;
|
|
4775
|
-
const offset = side === "right" ? 0 : align === "end" ? width : width / 2;
|
|
4776
|
-
const left = Math.max(edgeMargin, Math.min(pos.x - offset, window.innerWidth - edgeMargin - width));
|
|
4777
|
-
const fitsBelow = pos.bottom + gap + height <= window.innerHeight - edgeMargin;
|
|
4778
|
-
const fitsAbove = pos.top - gap - height >= edgeMargin;
|
|
4779
|
-
if (placement === "bottom" && !fitsBelow && fitsAbove) placement = "top";
|
|
4780
|
-
else if (placement === "top" && !fitsAbove && fitsBelow) placement = "bottom";
|
|
4781
|
-
el.style.left = `${left + offset}px`;
|
|
4782
|
-
el.style.top = `${placement === "right" ? (pos.top + pos.bottom) / 2 : placement === "top" ? pos.top - gap : pos.bottom + gap}px`;
|
|
4783
|
-
el.dataset.side = placement;
|
|
4784
|
-
el.style.visibility = "visible";
|
|
4785
|
-
};
|
|
4786
|
-
const observer = new ResizeObserver((entries) => {
|
|
4787
|
-
size = entries[0]?.borderBoxSize[0];
|
|
4788
|
-
fit();
|
|
4789
|
-
});
|
|
4790
|
-
observer.observe(el, { box: "border-box" });
|
|
4791
|
-
window.addEventListener("resize", fit);
|
|
4792
|
-
return () => {
|
|
4793
|
-
observer.disconnect();
|
|
4794
|
-
window.removeEventListener("resize", fit);
|
|
4795
|
-
};
|
|
4796
|
-
}, [
|
|
4797
|
-
align,
|
|
4798
|
-
gap,
|
|
4799
|
-
pos,
|
|
4800
|
-
side,
|
|
4801
|
-
suppressed,
|
|
4802
|
-
visible
|
|
4803
|
-
]);
|
|
4804
|
-
useEffect(() => {
|
|
4805
|
-
announce(visible);
|
|
4806
|
-
return () => {
|
|
4807
|
-
announce(false);
|
|
4808
|
-
};
|
|
4809
|
-
}, [announce, visible]);
|
|
4810
|
-
const cancelShow = useCallback(() => {
|
|
4811
|
-
if (showTimer.current === null) return;
|
|
4812
|
-
clearTimeout(showTimer.current);
|
|
4813
|
-
showTimer.current = null;
|
|
4814
|
-
}, []);
|
|
4815
|
-
useEffect(() => {
|
|
4816
|
-
if (pinned && (disabled || !openOnClick)) setPinned(false);
|
|
4817
|
-
if (disabled) {
|
|
4818
|
-
cancelShow();
|
|
4819
|
-
triggers.current = {
|
|
4820
|
-
hover: false,
|
|
4821
|
-
focus: false
|
|
4822
|
-
};
|
|
4823
|
-
setPos(null);
|
|
4824
|
-
}
|
|
4825
|
-
return cancelShow;
|
|
4826
|
-
}, [
|
|
4827
|
-
cancelShow,
|
|
4828
|
-
disabled,
|
|
4829
|
-
openOnClick,
|
|
4830
|
-
pinned
|
|
4831
|
-
]);
|
|
4832
|
-
const show = () => {
|
|
4833
|
-
if (disabled) return;
|
|
4834
|
-
const el = anchor.current;
|
|
4835
|
-
/* v8 ignore next -- the ref is attached by event time: events fire on the cloned anchor. */
|
|
4836
|
-
if (el === null) return;
|
|
4837
|
-
const r = el.getBoundingClientRect();
|
|
4838
|
-
setPos({
|
|
4839
|
-
x: side === "right" ? r.right + 10 : align === "end" ? r.right : r.left + r.width / 2,
|
|
4840
|
-
top: r.top,
|
|
4841
|
-
bottom: r.bottom
|
|
4842
|
-
});
|
|
4843
|
-
announce(true);
|
|
4844
|
-
};
|
|
4845
|
-
const showAfterDelay = (delay) => {
|
|
4846
|
-
cancelShow();
|
|
4847
|
-
if (delay <= 0) {
|
|
4848
|
-
show();
|
|
4849
|
-
return;
|
|
4850
|
-
}
|
|
4851
|
-
showTimer.current = setTimeout(() => {
|
|
4852
|
-
showTimer.current = null;
|
|
4853
|
-
show();
|
|
4854
|
-
}, delay);
|
|
4855
|
-
};
|
|
4856
|
-
const withdraw = useCallback(() => {
|
|
4857
|
-
setPinned(false);
|
|
4858
|
-
setPos(null);
|
|
4859
|
-
announce(false);
|
|
4860
|
-
}, [announce]);
|
|
4861
|
-
const hide = () => {
|
|
4862
|
-
cancelShow();
|
|
4863
|
-
if (!triggers.current.hover && !triggers.current.focus && !pinned) withdraw();
|
|
4864
|
-
};
|
|
4865
|
-
const dismiss = useCallback(() => {
|
|
4866
|
-
cancelShow();
|
|
4867
|
-
triggers.current = {
|
|
4868
|
-
hover: false,
|
|
4869
|
-
focus: false
|
|
4870
|
-
};
|
|
4871
|
-
withdraw();
|
|
4872
|
-
}, [cancelShow, withdraw]);
|
|
4873
|
-
useDismissOnOutsidePointer(anchor, openOnClick && visible, dismiss, bubble);
|
|
4874
|
-
useEffect(() => {
|
|
4875
|
-
if (!openOnClick || !visible) return;
|
|
4876
|
-
const onKeyDown = (event) => {
|
|
4877
|
-
if (event.key !== "Escape" && event.key !== "Tab") return;
|
|
4878
|
-
if (event.key === "Escape") {
|
|
4879
|
-
event.preventDefault();
|
|
4880
|
-
event.stopPropagation();
|
|
4649
|
+
//#region lib/types/HoverCardGroup.js
|
|
4650
|
+
/** Private coordination shared only by opted-in HoverCards inside one mounted group. */
|
|
4651
|
+
const HoverCardGroupContext = createContext(null);
|
|
4652
|
+
/**
|
|
4653
|
+
* Share first-display dwell across a list and its active portal, including the card's existing pointer grace.
|
|
4654
|
+
* @param props.children - list contents, including opted-in HoverCards.
|
|
4655
|
+
* @param props.className - classes for the physical list container.
|
|
4656
|
+
* @returns the list container and its private hover coordinator.
|
|
4657
|
+
*/
|
|
4658
|
+
function HoverCardGroup({ children, className }) {
|
|
4659
|
+
const [group] = useState(() => {
|
|
4660
|
+
let pointer = "outside";
|
|
4661
|
+
let warm = false;
|
|
4662
|
+
let active = null;
|
|
4663
|
+
return {
|
|
4664
|
+
isWarm: () => warm,
|
|
4665
|
+
enter: (overCard) => {
|
|
4666
|
+
pointer = overCard ? "card" : "list";
|
|
4667
|
+
if (overCard) warm = true;
|
|
4668
|
+
},
|
|
4669
|
+
leave: () => {
|
|
4670
|
+
pointer = "outside";
|
|
4671
|
+
if (active === null) warm = false;
|
|
4672
|
+
},
|
|
4673
|
+
containsCard: (target) => target instanceof Node && active !== null && active.element.contains(target),
|
|
4674
|
+
shown: (owner, dismiss, element) => {
|
|
4675
|
+
if (pointer === "card") {
|
|
4676
|
+
pointer = "outside";
|
|
4677
|
+
warm = false;
|
|
4678
|
+
}
|
|
4679
|
+
if (pointer === "list") warm = true;
|
|
4680
|
+
const previous = active;
|
|
4681
|
+
active = {
|
|
4682
|
+
owner,
|
|
4683
|
+
dismiss,
|
|
4684
|
+
element
|
|
4685
|
+
};
|
|
4686
|
+
if (previous !== null && previous.owner !== owner) previous.dismiss();
|
|
4687
|
+
},
|
|
4688
|
+
release: (owner) => {
|
|
4689
|
+
if (active?.owner !== owner) return;
|
|
4690
|
+
active = null;
|
|
4691
|
+
if (pointer !== "list") {
|
|
4692
|
+
pointer = "outside";
|
|
4693
|
+
warm = false;
|
|
4694
|
+
}
|
|
4881
4695
|
}
|
|
4882
|
-
dismiss();
|
|
4883
|
-
};
|
|
4884
|
-
document.addEventListener("keydown", onKeyDown, true);
|
|
4885
|
-
return () => {
|
|
4886
|
-
document.removeEventListener("keydown", onKeyDown, true);
|
|
4887
4696
|
};
|
|
4888
|
-
}, [
|
|
4889
|
-
dismiss,
|
|
4890
|
-
openOnClick,
|
|
4891
|
-
visible
|
|
4892
|
-
]);
|
|
4893
|
-
const content = visible && !suppressed && jsxs("span", {
|
|
4894
|
-
ref: bubble,
|
|
4895
|
-
id: openOnClick ? id : void 0,
|
|
4896
|
-
className: css$17.bubble,
|
|
4897
|
-
"data-side": side,
|
|
4898
|
-
"data-portal": portal || void 0,
|
|
4899
|
-
"data-pinned": pinned || void 0,
|
|
4900
|
-
"data-align": align,
|
|
4901
|
-
"data-has-shortcut": shortcutKeys?.length ? true : void 0,
|
|
4902
|
-
style: {
|
|
4903
|
-
left: pos.x,
|
|
4904
|
-
top: y,
|
|
4905
|
-
visibility: "hidden",
|
|
4906
|
-
...maxWidth === void 0 ? {} : { maxWidth }
|
|
4907
|
-
},
|
|
4908
|
-
role: "tooltip",
|
|
4909
|
-
"aria-label": shortcutKeys?.length ? [resolvedLabel, shortcutKeys.join(" ")].filter(Boolean).join(" ") : void 0,
|
|
4910
|
-
children: [resolvedLabel && jsx("span", {
|
|
4911
|
-
className: css$17.label,
|
|
4912
|
-
children: resolvedLabel
|
|
4913
|
-
}), shortcutKeys !== void 0 && shortcutKeys.length > 0 && jsx(ShortcutKeys, {
|
|
4914
|
-
keys: shortcutKeys,
|
|
4915
|
-
variant: "tooltip"
|
|
4916
|
-
})]
|
|
4917
4697
|
});
|
|
4918
|
-
return
|
|
4919
|
-
value:
|
|
4920
|
-
children:
|
|
4921
|
-
|
|
4922
|
-
|
|
4923
|
-
|
|
4924
|
-
|
|
4925
|
-
triggers.current.hover = true;
|
|
4926
|
-
showAfterDelay(delayMs);
|
|
4927
|
-
},
|
|
4928
|
-
onMouseLeave: (e) => {
|
|
4929
|
-
children.props.onMouseLeave?.(e);
|
|
4930
|
-
triggers.current.hover = false;
|
|
4931
|
-
cancelShow();
|
|
4932
|
-
if (!pinned) withdraw();
|
|
4698
|
+
return jsx(HoverCardGroupContext.Provider, {
|
|
4699
|
+
value: group,
|
|
4700
|
+
children: jsx("div", {
|
|
4701
|
+
className,
|
|
4702
|
+
onPointerOverCapture: (event) => {
|
|
4703
|
+
const overCard = group.containsCard(event.target);
|
|
4704
|
+
if (event.currentTarget.contains(event.target) || overCard) group.enter(overCard);
|
|
4933
4705
|
},
|
|
4934
|
-
|
|
4935
|
-
|
|
4936
|
-
|
|
4937
|
-
|
|
4938
|
-
if (openOnClick && !disabled && !pinned) {
|
|
4939
|
-
setPinned(true);
|
|
4940
|
-
show();
|
|
4941
|
-
} else withdraw();
|
|
4706
|
+
onPointerOutCapture: (event) => {
|
|
4707
|
+
const fromGroup = event.currentTarget.contains(event.target) || group.containsCard(event.target);
|
|
4708
|
+
const intoGroup = event.relatedTarget instanceof Node && event.currentTarget.contains(event.relatedTarget) || group.containsCard(event.relatedTarget);
|
|
4709
|
+
if (fromGroup && !intoGroup) group.leave();
|
|
4942
4710
|
},
|
|
4943
|
-
|
|
4944
|
-
|
|
4945
|
-
if (pointerModality()) return;
|
|
4946
|
-
triggers.current.focus = true;
|
|
4947
|
-
showAfterDelay(focusDelayMs);
|
|
4948
|
-
},
|
|
4949
|
-
onBlur: (e) => {
|
|
4950
|
-
children.props.onBlur?.(e);
|
|
4951
|
-
triggers.current.focus = false;
|
|
4952
|
-
hide();
|
|
4953
|
-
}
|
|
4954
|
-
}), portal ? content !== false && createPortal(content, document.body) : content]
|
|
4711
|
+
children
|
|
4712
|
+
})
|
|
4955
4713
|
});
|
|
4956
4714
|
}
|
|
4957
4715
|
//#endregion
|
|
@@ -4964,7 +4722,7 @@ const INLINE_PREVIEW_WIDTH = 300;
|
|
|
4964
4722
|
const ANCHOR_GAP = 8;
|
|
4965
4723
|
const VIEWPORT_MARGIN = 8;
|
|
4966
4724
|
/**
|
|
4967
|
-
* Render an anchor with a hover-triggered preview card
|
|
4725
|
+
* Render an anchor with a hover-triggered preview card independently of nested tooltips.
|
|
4968
4726
|
* @param props.anchor - the hover target (rendered in place inside a wrapper span).
|
|
4969
4727
|
* @param props.content - card content; the pointer may rest on it, so it is
|
|
4970
4728
|
* readable and selectable, but it carries no dismissal affordance of its own.
|
|
@@ -4974,13 +4732,15 @@ const VIEWPORT_MARGIN = 8;
|
|
|
4974
4732
|
* @param props.widthAnchorRef - optional element whose width and horizontal position size the preview.
|
|
4975
4733
|
* @param props.inline - keep the anchor in prose; show a contained preview on hover or keyboard focus.
|
|
4976
4734
|
* @param props.disabled - suppress opening; turning true dismisses an open card.
|
|
4735
|
+
* @param props.grouped - share first-display dwell across the surrounding list and active portal.
|
|
4736
|
+
* Group replacement removes the previous card immediately, including a fading preview.
|
|
4977
4737
|
* @param props.copyText - optional primary value copied by activation and
|
|
4978
4738
|
* included in the card's accessible name.
|
|
4979
4739
|
* @param props.copyLabel - localized accessible activation-label prefix.
|
|
4980
4740
|
* @param props.copiedLabel - localized visible success label.
|
|
4981
4741
|
* @returns anchor wrapper with the conditional portaled card.
|
|
4982
4742
|
*/
|
|
4983
|
-
function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyText, copyLabel, copiedLabel, variant = "compact", widthAnchorRef, inline = false }) {
|
|
4743
|
+
function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, grouped = false, copyText, copyLabel, copiedLabel, variant = "compact", widthAnchorRef, inline = false }) {
|
|
4984
4744
|
const rootRef = useRef(null);
|
|
4985
4745
|
const cardRef = useRef(null);
|
|
4986
4746
|
const timerRef = useRef(null);
|
|
@@ -4995,7 +4755,9 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
|
|
|
4995
4755
|
const [pos, setPos] = useState(null);
|
|
4996
4756
|
const positioned = pos !== null;
|
|
4997
4757
|
const [copied, setCopied] = useState(false);
|
|
4998
|
-
const
|
|
4758
|
+
const parentGroup = useContext(HoverCardGroupContext);
|
|
4759
|
+
const group = grouped ? parentGroup : null;
|
|
4760
|
+
const [groupOwner] = useState(() => Symbol("hover-card"));
|
|
4999
4761
|
const clearCopied = useCallback(() => {
|
|
5000
4762
|
if (copyTimerRef.current !== null) {
|
|
5001
4763
|
clearTimeout(copyTimerRef.current);
|
|
@@ -5010,12 +4772,36 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
|
|
|
5010
4772
|
setPhase((current) => variant === "preview" && current !== "closed" ? "closing" : "closed");
|
|
5011
4773
|
}, [clearCopied, variant]);
|
|
5012
4774
|
const { arm: armClose, cancel: cancelClose } = usePointerGrace(close);
|
|
5013
|
-
const clearTimer = () => {
|
|
4775
|
+
const clearTimer = useCallback(() => {
|
|
5014
4776
|
if (timerRef.current !== null) {
|
|
5015
4777
|
clearTimeout(timerRef.current);
|
|
5016
4778
|
timerRef.current = null;
|
|
5017
4779
|
}
|
|
5018
|
-
};
|
|
4780
|
+
}, []);
|
|
4781
|
+
const dismissImmediately = useCallback(() => {
|
|
4782
|
+
clearTimer();
|
|
4783
|
+
cancelClose();
|
|
4784
|
+
copyEpochRef.current += 1;
|
|
4785
|
+
clearCopied();
|
|
4786
|
+
setPhase("closed");
|
|
4787
|
+
}, [
|
|
4788
|
+
clearTimer,
|
|
4789
|
+
cancelClose,
|
|
4790
|
+
clearCopied
|
|
4791
|
+
]);
|
|
4792
|
+
const groupVisible = open && positioned;
|
|
4793
|
+
useLayoutEffect(() => {
|
|
4794
|
+
if (!groupVisible || group === null) return;
|
|
4795
|
+
group.shown(groupOwner, dismissImmediately, cardRef.current);
|
|
4796
|
+
return () => {
|
|
4797
|
+
group.release(groupOwner);
|
|
4798
|
+
};
|
|
4799
|
+
}, [
|
|
4800
|
+
group,
|
|
4801
|
+
groupOwner,
|
|
4802
|
+
groupVisible,
|
|
4803
|
+
dismissImmediately
|
|
4804
|
+
]);
|
|
5019
4805
|
useEffect(() => {
|
|
5020
4806
|
if (!closing) return;
|
|
5021
4807
|
const timer = setTimeout(() => {
|
|
@@ -5140,7 +4926,7 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
|
|
|
5140
4926
|
inline
|
|
5141
4927
|
]);
|
|
5142
4928
|
useLayoutEffect(() => {
|
|
5143
|
-
if (!open || pos === null || variant === "preview" || inline
|
|
4929
|
+
if (!open || pos === null || variant === "preview" || inline) return;
|
|
5144
4930
|
/* v8 ignore next -- the card is mounted whenever pos is set, so the ref is attached here. */
|
|
5145
4931
|
const h = cardRef.current?.offsetHeight ?? 0;
|
|
5146
4932
|
if (pos.top + h > window.innerHeight - VIEWPORT_MARGIN) setPos({
|
|
@@ -5151,8 +4937,7 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
|
|
|
5151
4937
|
open,
|
|
5152
4938
|
pos,
|
|
5153
4939
|
variant,
|
|
5154
|
-
inline
|
|
5155
|
-
suppressed
|
|
4940
|
+
inline
|
|
5156
4941
|
]);
|
|
5157
4942
|
const copy = async (text) => {
|
|
5158
4943
|
if (copied || copyingRef.current) return;
|
|
@@ -5174,9 +4959,9 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
|
|
|
5174
4959
|
cancelClose();
|
|
5175
4960
|
close();
|
|
5176
4961
|
};
|
|
5177
|
-
const card = open && pos !== null &&
|
|
4962
|
+
const card = open && pos !== null && jsx("div", {
|
|
5178
4963
|
ref: cardRef,
|
|
5179
|
-
className: clsx(css$
|
|
4964
|
+
className: clsx(css$17.card, variant === "preview" && css$17.preview, inline && css$17.media, copyable && css$17.copyable, copied && css$17.feedback),
|
|
5180
4965
|
"data-closing": closing || void 0,
|
|
5181
4966
|
style: {
|
|
5182
4967
|
...pos,
|
|
@@ -5199,14 +4984,14 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
|
|
|
5199
4984
|
copy(copyText);
|
|
5200
4985
|
} : void 0,
|
|
5201
4986
|
children: copied ? jsx("span", {
|
|
5202
|
-
className: css$
|
|
4987
|
+
className: css$17.copied,
|
|
5203
4988
|
"aria-hidden": "true",
|
|
5204
4989
|
children: copiedLabel
|
|
5205
4990
|
}) : content
|
|
5206
4991
|
});
|
|
5207
4992
|
return jsxs("span", {
|
|
5208
4993
|
ref: rootRef,
|
|
5209
|
-
className: clsx(css$
|
|
4994
|
+
className: clsx(css$17.root, inline && css$17.inline),
|
|
5210
4995
|
onFocus: inline ? (event) => {
|
|
5211
4996
|
if (!disabled && event.target.matches(":focus-visible")) {
|
|
5212
4997
|
cancelClose();
|
|
@@ -5228,7 +5013,8 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
|
|
|
5228
5013
|
return;
|
|
5229
5014
|
}
|
|
5230
5015
|
clearTimer();
|
|
5231
|
-
|
|
5016
|
+
if (group?.isWarm()) setPhase("open");
|
|
5017
|
+
else timerRef.current = setTimeout(() => {
|
|
5232
5018
|
setPhase("open");
|
|
5233
5019
|
}, openDelayMs);
|
|
5234
5020
|
},
|
|
@@ -5239,12 +5025,9 @@ function HoverCard({ anchor, content, openDelayMs = 500, disabled = false, copyT
|
|
|
5239
5025
|
onPointerDownCapture: dismissFromAnchor,
|
|
5240
5026
|
onClickCapture: dismissFromAnchor,
|
|
5241
5027
|
children: [
|
|
5242
|
-
|
|
5243
|
-
|
|
5244
|
-
|
|
5245
|
-
}),
|
|
5246
|
-
open && !suppressed && copyable && jsx("span", {
|
|
5247
|
-
className: css$18.status,
|
|
5028
|
+
anchor,
|
|
5029
|
+
open && copyable && jsx("span", {
|
|
5030
|
+
className: css$17.status,
|
|
5248
5031
|
role: "status",
|
|
5249
5032
|
children: copied ? copiedLabel : ""
|
|
5250
5033
|
}),
|
|
@@ -5279,11 +5062,11 @@ function Modal({ open, onClose, title, closeLabel, description, children, footer
|
|
|
5279
5062
|
useModalLayer(dialog, open, onClose);
|
|
5280
5063
|
if (!open) return null;
|
|
5281
5064
|
return createPortal(jsxs("div", {
|
|
5282
|
-
className: css$
|
|
5065
|
+
className: css$18.root,
|
|
5283
5066
|
role: "presentation",
|
|
5284
5067
|
onKeyDownCapture,
|
|
5285
5068
|
children: [jsx("div", {
|
|
5286
|
-
className: css$
|
|
5069
|
+
className: css$18.mask,
|
|
5287
5070
|
style: backdropBlur ? void 0 : { backdropFilter: "none" },
|
|
5288
5071
|
"aria-hidden": "true",
|
|
5289
5072
|
onClick: onClose
|
|
@@ -5291,37 +5074,37 @@ function Modal({ open, onClose, title, closeLabel, description, children, footer
|
|
|
5291
5074
|
ref: dialog,
|
|
5292
5075
|
tabIndex: -1,
|
|
5293
5076
|
"data-shortcut-modal": shortcutModal,
|
|
5294
|
-
className: clsx(css$
|
|
5077
|
+
className: clsx(css$18.dialog, className),
|
|
5295
5078
|
role: "dialog",
|
|
5296
5079
|
"aria-modal": "true",
|
|
5297
5080
|
"aria-label": title,
|
|
5298
5081
|
children: headless ? children : jsxs(Fragment, { children: [jsxs("div", {
|
|
5299
|
-
className: clsx(css$
|
|
5082
|
+
className: clsx(css$18.content, contentClassName),
|
|
5300
5083
|
children: [
|
|
5301
5084
|
jsxs("div", {
|
|
5302
|
-
className: css$
|
|
5085
|
+
className: css$18.header,
|
|
5303
5086
|
children: [jsx("h2", {
|
|
5304
|
-
className: css$
|
|
5087
|
+
className: css$18.title,
|
|
5305
5088
|
children: title
|
|
5306
5089
|
}), jsx("button", {
|
|
5307
5090
|
type: "button",
|
|
5308
|
-
className: css$
|
|
5091
|
+
className: css$18.close,
|
|
5309
5092
|
"aria-label": closeLabel,
|
|
5310
5093
|
onClick: onClose,
|
|
5311
5094
|
children: jsx(IconCloseOutlineRegular, { size: 14 })
|
|
5312
5095
|
})]
|
|
5313
5096
|
}),
|
|
5314
5097
|
description !== void 0 && description !== "" && jsx("p", {
|
|
5315
|
-
className: css$
|
|
5098
|
+
className: css$18.description,
|
|
5316
5099
|
children: description
|
|
5317
5100
|
}),
|
|
5318
5101
|
children !== void 0 && jsx("div", {
|
|
5319
|
-
className: css$
|
|
5102
|
+
className: css$18.body,
|
|
5320
5103
|
children
|
|
5321
5104
|
})
|
|
5322
5105
|
]
|
|
5323
5106
|
}), footer !== void 0 && jsx("div", {
|
|
5324
|
-
className: css$
|
|
5107
|
+
className: css$18.footer,
|
|
5325
5108
|
children: footer
|
|
5326
5109
|
})] })
|
|
5327
5110
|
})]
|
|
@@ -5343,28 +5126,28 @@ function RiskConfirmation({ open, title, description, acknowledgeLabel, cancelLa
|
|
|
5343
5126
|
onClose: onCancel,
|
|
5344
5127
|
title,
|
|
5345
5128
|
closeLabel,
|
|
5346
|
-
className: css$
|
|
5347
|
-
contentClassName: css$
|
|
5129
|
+
className: css$19.confirmation ?? "",
|
|
5130
|
+
contentClassName: css$19.confirmationContent ?? "",
|
|
5348
5131
|
footer: jsxs(Fragment, { children: [jsx(Button, {
|
|
5349
5132
|
variant: "outline",
|
|
5350
|
-
className: css$
|
|
5133
|
+
className: css$19.modalAction,
|
|
5351
5134
|
onClick: onCancel,
|
|
5352
5135
|
children: cancelLabel
|
|
5353
5136
|
}), jsx(Button, {
|
|
5354
5137
|
variant: "primary",
|
|
5355
|
-
className: css$
|
|
5138
|
+
className: css$19.confirmAction,
|
|
5356
5139
|
disabled: disabled || !acknowledged,
|
|
5357
5140
|
onClick: onConfirm,
|
|
5358
5141
|
children: confirmLabel
|
|
5359
5142
|
})] }),
|
|
5360
5143
|
children: [jsxs("div", {
|
|
5361
|
-
className: css$
|
|
5144
|
+
className: css$19.warning,
|
|
5362
5145
|
children: [jsx(IconWarningOutlineRegular, {
|
|
5363
5146
|
size: 18,
|
|
5364
|
-
className: css$
|
|
5147
|
+
className: css$19.warningIcon
|
|
5365
5148
|
}), jsx("p", { children: description })]
|
|
5366
5149
|
}), jsxs("label", {
|
|
5367
|
-
className: css$
|
|
5150
|
+
className: css$19.acknowledgement,
|
|
5368
5151
|
children: [jsx("input", {
|
|
5369
5152
|
type: "checkbox",
|
|
5370
5153
|
checked: acknowledged,
|
|
@@ -5412,44 +5195,44 @@ function ConnectionIndicator({ state, disconnectedLabel, connectingLabel, recove
|
|
|
5412
5195
|
};
|
|
5413
5196
|
}, [state, rendered]);
|
|
5414
5197
|
if (rendered === void 0) return null;
|
|
5415
|
-
const leavingClass = leaving ? ` ${css$
|
|
5198
|
+
const leavingClass = leaving ? ` ${css$20.leaving}` : "";
|
|
5416
5199
|
if (rendered === "recovered") return jsxs("div", {
|
|
5417
|
-
className: `${css$
|
|
5200
|
+
className: `${css$20.indicator} ${css$20.success}${leavingClass}`,
|
|
5418
5201
|
role: "status",
|
|
5419
5202
|
"aria-label": recoveredLabel,
|
|
5420
5203
|
children: [jsx("span", {
|
|
5421
|
-
className: css$
|
|
5204
|
+
className: css$20.icon,
|
|
5422
5205
|
"aria-hidden": "true",
|
|
5423
5206
|
children: jsx(IconCheckOutlineRegular, { size: 14 })
|
|
5424
5207
|
}), jsx("span", {
|
|
5425
|
-
className: css$
|
|
5208
|
+
className: css$20.label,
|
|
5426
5209
|
children: recoveredLabel
|
|
5427
5210
|
})]
|
|
5428
5211
|
});
|
|
5429
5212
|
const connecting = rendered === "connecting";
|
|
5430
5213
|
return jsxs("button", {
|
|
5431
5214
|
type: "button",
|
|
5432
|
-
className: `${css$
|
|
5215
|
+
className: `${css$20.indicator} ${css$20.warning}${leavingClass}`,
|
|
5433
5216
|
"data-phase": rendered,
|
|
5434
5217
|
"aria-label": connecting ? restartActionLabel : reconnectActionLabel,
|
|
5435
5218
|
onClick: onReconnect,
|
|
5436
5219
|
children: [jsx("span", {
|
|
5437
|
-
className: css$
|
|
5220
|
+
className: css$20.icon,
|
|
5438
5221
|
"aria-hidden": "true",
|
|
5439
5222
|
children: connecting ? jsx(StateDot, { state: "ongoing" }) : jsx(IconRefreshOutlineRegular, { size: 14 })
|
|
5440
5223
|
}), jsx("span", {
|
|
5441
|
-
className: css$
|
|
5224
|
+
className: css$20.label,
|
|
5442
5225
|
children: connecting ? jsxs(Fragment, { children: [connectingLabel, jsxs("span", {
|
|
5443
|
-
className: css$
|
|
5226
|
+
className: css$20.dots,
|
|
5444
5227
|
"aria-hidden": "true",
|
|
5445
5228
|
children: [
|
|
5446
5229
|
jsx("span", { children: "." }),
|
|
5447
5230
|
jsx("span", {
|
|
5448
|
-
className: css$
|
|
5231
|
+
className: css$20.secondDot,
|
|
5449
5232
|
children: "."
|
|
5450
5233
|
}),
|
|
5451
5234
|
jsx("span", {
|
|
5452
|
-
className: css$
|
|
5235
|
+
className: css$20.thirdDot,
|
|
5453
5236
|
children: "."
|
|
5454
5237
|
})
|
|
5455
5238
|
]
|
|
@@ -5691,6 +5474,28 @@ function FullAccessArtwork({ size = 16, className, strokeWidth }) {
|
|
|
5691
5474
|
]
|
|
5692
5475
|
});
|
|
5693
5476
|
}
|
|
5477
|
+
function AutoReviewArtwork({ size = 16, className, strokeWidth }) {
|
|
5478
|
+
return jsxs("svg", {
|
|
5479
|
+
width: size,
|
|
5480
|
+
height: size,
|
|
5481
|
+
className,
|
|
5482
|
+
viewBox: "0 0 16 16",
|
|
5483
|
+
fill: "none",
|
|
5484
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
5485
|
+
"aria-hidden": "true",
|
|
5486
|
+
strokeWidth,
|
|
5487
|
+
children: [jsx("path", {
|
|
5488
|
+
d: "M6.59624 2.14853C7.50155 1.80917 8.49914 1.80919 9.40444 2.14859L13.9245 3.84317V7.11961C13.9245 11.6089 10.5565 13.5975 8.00035 14.5779C5.44423 13.5975 2.07544 11.6089 2.07544 7.11961V3.84317L6.59624 2.14853Z",
|
|
5489
|
+
stroke: "currentColor",
|
|
5490
|
+
strokeLinejoin: "round"
|
|
5491
|
+
}), jsx("path", {
|
|
5492
|
+
d: "M5.75 10.15L8 4.95L10.25 10.15M6.43 8.59H9.57",
|
|
5493
|
+
stroke: "currentColor",
|
|
5494
|
+
strokeLinecap: "round",
|
|
5495
|
+
strokeLinejoin: "round"
|
|
5496
|
+
})]
|
|
5497
|
+
});
|
|
5498
|
+
}
|
|
5694
5499
|
/**
|
|
5695
5500
|
* Render the read-only permission icon with a one-pixel stroke.
|
|
5696
5501
|
* @param props - Size and optional class.
|
|
@@ -5757,6 +5562,28 @@ function PermissionIconFullAccessMedium(props) {
|
|
|
5757
5562
|
strokeWidth: ICON_MEDIUM_STROKE
|
|
5758
5563
|
});
|
|
5759
5564
|
}
|
|
5565
|
+
/**
|
|
5566
|
+
* Render the auto-review permission icon with a one-pixel stroke.
|
|
5567
|
+
* @param props - Size and optional class.
|
|
5568
|
+
* @returns The regular decorative permission glyph.
|
|
5569
|
+
*/
|
|
5570
|
+
function PermissionIconAutoReviewRegular(props) {
|
|
5571
|
+
return jsx(AutoReviewArtwork, {
|
|
5572
|
+
...props,
|
|
5573
|
+
strokeWidth: 1
|
|
5574
|
+
});
|
|
5575
|
+
}
|
|
5576
|
+
/**
|
|
5577
|
+
* Render the auto-review permission icon with a 1.3px stroke.
|
|
5578
|
+
* @param props - Size and optional class.
|
|
5579
|
+
* @returns The medium decorative permission glyph.
|
|
5580
|
+
*/
|
|
5581
|
+
function PermissionIconAutoReviewMedium(props) {
|
|
5582
|
+
return jsx(AutoReviewArtwork, {
|
|
5583
|
+
...props,
|
|
5584
|
+
strokeWidth: ICON_MEDIUM_STROKE
|
|
5585
|
+
});
|
|
5586
|
+
}
|
|
5760
5587
|
//#endregion
|
|
5761
5588
|
//#region lib/types/ReferenceIcon.js
|
|
5762
5589
|
/**
|
|
@@ -6480,7 +6307,7 @@ function FileTypeIcon(props) {
|
|
|
6480
6307
|
type: resolvedType,
|
|
6481
6308
|
size,
|
|
6482
6309
|
className
|
|
6483
|
-
}) : glyph(resolvedType, size, clsx(css$
|
|
6310
|
+
}) : glyph(resolvedType, size, clsx(css$21.icon, css$21[resolvedType], className));
|
|
6484
6311
|
}
|
|
6485
6312
|
//#endregion
|
|
6486
6313
|
//#region lib/types/SiteGlyph.js
|
|
@@ -6749,111 +6576,362 @@ function LinkIconMedium(props) {
|
|
|
6749
6576
|
}
|
|
6750
6577
|
//#endregion
|
|
6751
6578
|
//#region lib/types/user-text.js
|
|
6752
|
-
/**
|
|
6753
|
-
|
|
6754
|
-
|
|
6755
|
-
|
|
6756
|
-
|
|
6757
|
-
|
|
6758
|
-
|
|
6759
|
-
|
|
6760
|
-
|
|
6761
|
-
|
|
6762
|
-
|
|
6763
|
-
|
|
6764
|
-
*
|
|
6765
|
-
*
|
|
6766
|
-
|
|
6767
|
-
|
|
6768
|
-
|
|
6769
|
-
|
|
6770
|
-
|
|
6771
|
-
|
|
6772
|
-
|
|
6773
|
-
|
|
6774
|
-
|
|
6775
|
-
|
|
6776
|
-
|
|
6579
|
+
/**
|
|
6580
|
+
* Render an uninterpreted inline text run.
|
|
6581
|
+
* @param props - text retained verbatim from the caller's document.
|
|
6582
|
+
* @returns one inline run without Markdown or reference recognition.
|
|
6583
|
+
*/
|
|
6584
|
+
function UserTextRun({ text }) {
|
|
6585
|
+
return jsx("span", {
|
|
6586
|
+
className: css$22.plainRun,
|
|
6587
|
+
children: text
|
|
6588
|
+
});
|
|
6589
|
+
}
|
|
6590
|
+
/**
|
|
6591
|
+
* Render a reference label or its explicitly supplied activation action.
|
|
6592
|
+
* Text selection and repeated pointer clicks do not activate the reference.
|
|
6593
|
+
* @param props - resolved visual fields and optional action from the owning renderer.
|
|
6594
|
+
* @returns an inline label, or a keyboard-accessible button when activation is supplied.
|
|
6595
|
+
*/
|
|
6596
|
+
function ReferenceChip({ appearance, label, title, onActivate }) {
|
|
6597
|
+
const slash = appearance === "skill" || appearance === "command";
|
|
6598
|
+
const contents = jsxs(Fragment, { children: [!slash && jsx(ReferenceIconRegular, {
|
|
6599
|
+
kind: appearance,
|
|
6600
|
+
size: 16,
|
|
6601
|
+
className: css$22.refIcon
|
|
6602
|
+
}), label] });
|
|
6603
|
+
const className = clsx(css$22.refChip, slash && css$22.slashChip);
|
|
6604
|
+
return onActivate === void 0 ? jsx("span", {
|
|
6605
|
+
className,
|
|
6606
|
+
"data-ref-chip": appearance,
|
|
6607
|
+
title,
|
|
6608
|
+
children: contents
|
|
6609
|
+
}) : jsx("button", {
|
|
6610
|
+
type: "button",
|
|
6611
|
+
className: clsx(className, markdownCss.fileMention),
|
|
6612
|
+
"data-ref-chip": appearance,
|
|
6613
|
+
title,
|
|
6614
|
+
onClick: (event) => {
|
|
6615
|
+
if (event.detail > 1 || event.detail !== 0 && event.currentTarget.ownerDocument.getSelection()?.isCollapsed === false) return;
|
|
6616
|
+
onActivate();
|
|
6617
|
+
},
|
|
6618
|
+
children: contents
|
|
6619
|
+
});
|
|
6620
|
+
}
|
|
6621
|
+
//#endregion
|
|
6622
|
+
//#region lib/types/input-modality.js
|
|
6623
|
+
/**
|
|
6624
|
+
* Document-wide input tracking shared by tooltips and focus-ring styles.
|
|
6625
|
+
* Tooltips follow the last input; rings follow navigation or a key followed by
|
|
6626
|
+
* focus on a different control. Modifiers and refocusing alone keep rings silent.
|
|
6627
|
+
* Module-level listeners live for the document lifetime; Node imports are inert.
|
|
6628
|
+
*/
|
|
6629
|
+
/** Modality values published on the document element. */
|
|
6630
|
+
const INPUT_MODALITY = {
|
|
6631
|
+
pointer: "pointer",
|
|
6632
|
+
keyboard: "keyboard"
|
|
6633
|
+
};
|
|
6634
|
+
/** Attribute carrying whether focus navigation last owned focus. */
|
|
6635
|
+
const INPUT_MODALITY_ATTRIBUTE = "data-input-modality";
|
|
6636
|
+
const FOCUS_NAVIGATION = new Set([
|
|
6637
|
+
"Tab",
|
|
6638
|
+
"Home",
|
|
6639
|
+
"End",
|
|
6640
|
+
"PageUp",
|
|
6641
|
+
"PageDown"
|
|
6642
|
+
]);
|
|
6643
|
+
let pointer = false;
|
|
6644
|
+
let pointerOwnsFocus = false;
|
|
6645
|
+
let keyFocusOrigin;
|
|
6646
|
+
function publish() {
|
|
6647
|
+
document.documentElement.setAttribute(INPUT_MODALITY_ATTRIBUTE, pointerOwnsFocus ? INPUT_MODALITY.pointer : INPUT_MODALITY.keyboard);
|
|
6648
|
+
}
|
|
6649
|
+
/**
|
|
6650
|
+
* Whether the last input came from a pointer, independently of ring visibility.
|
|
6651
|
+
* @returns True after pointer input; false after any key.
|
|
6652
|
+
*/
|
|
6653
|
+
function pointerModality() {
|
|
6654
|
+
return pointer;
|
|
6655
|
+
}
|
|
6656
|
+
if (typeof window !== "undefined") {
|
|
6657
|
+
window.addEventListener("pointerdown", () => {
|
|
6658
|
+
pointer = true;
|
|
6659
|
+
pointerOwnsFocus = true;
|
|
6660
|
+
keyFocusOrigin = void 0;
|
|
6661
|
+
publish();
|
|
6662
|
+
}, true);
|
|
6663
|
+
window.addEventListener("keydown", (event) => {
|
|
6664
|
+
pointer = false;
|
|
6665
|
+
if (event.isComposing) {
|
|
6666
|
+
keyFocusOrigin = void 0;
|
|
6667
|
+
return;
|
|
6668
|
+
}
|
|
6669
|
+
keyFocusOrigin = event.composedPath()[0];
|
|
6670
|
+
if (!FOCUS_NAVIGATION.has(event.key) && !event.key.startsWith("Arrow")) return;
|
|
6671
|
+
pointerOwnsFocus = false;
|
|
6672
|
+
publish();
|
|
6673
|
+
}, true);
|
|
6674
|
+
window.addEventListener("focusin", (event) => {
|
|
6675
|
+
if (keyFocusOrigin === void 0 || event.composedPath()[0] === keyFocusOrigin) return;
|
|
6676
|
+
keyFocusOrigin = void 0;
|
|
6677
|
+
if (!pointerOwnsFocus) return;
|
|
6678
|
+
pointerOwnsFocus = false;
|
|
6679
|
+
publish();
|
|
6680
|
+
}, true);
|
|
6681
|
+
window.addEventListener("blur", () => {
|
|
6682
|
+
keyFocusOrigin = void 0;
|
|
6683
|
+
});
|
|
6684
|
+
}
|
|
6685
|
+
//#endregion
|
|
6686
|
+
//#region lib/types/Tooltip.js
|
|
6687
|
+
/** Anchor-preserving tooltips; an optional body portal escapes clipping containers and stacking contexts that cap the bubble's z-index. */
|
|
6688
|
+
/**
|
|
6689
|
+
* Suppression channel for nested tooltips: a visible descendant tooltip
|
|
6690
|
+
* withdraws the enclosing tooltip while its bubble is shown.
|
|
6691
|
+
*/
|
|
6692
|
+
const TooltipSuppression = createContext(null);
|
|
6693
|
+
/**
|
|
6694
|
+
* Attach a hover/focus tooltip to an anchor element.
|
|
6695
|
+
* @param props.label - bubble text, or a resolver evaluated only while visible; an empty string shows only shortcut keys.
|
|
6696
|
+
* @param props.shortcutKeys - effective key labels rendered as platform-formatted keycaps after optional text.
|
|
6697
|
+
* @param props.side - placement relative to the anchor (default 'right').
|
|
6698
|
+
* @param props.align - horizontal anchor-edge alignment for 'bottom'/'top' bubbles: 'end' pins
|
|
6699
|
+
* the bubble's right edge to the anchor's (for anchors beside other hover surfaces the centered
|
|
6700
|
+
* bubble would overlap); default 'center'. Ignored for side 'right'.
|
|
6701
|
+
* @param props.portal - render the bubble under document.body, so an ancestor's clipping or its
|
|
6702
|
+
* stacking context (which confines the bubble's z-index to that context) cannot hide it.
|
|
6703
|
+
* @param props.delayMs - hover delay in milliseconds (default 0).
|
|
6704
|
+
* @param props.focusDelayMs - keyboard focus delay in milliseconds (default 0); blur, click,
|
|
6705
|
+
* mouse leave, disabling, and unmount cancel a pending show.
|
|
6706
|
+
* @param props.gap - anchor-to-bubble distance in pixels for 'bottom'/'top' bubbles (default 8);
|
|
6707
|
+
* ignored for side 'right'.
|
|
6708
|
+
* @param props.disabled - suppress the bubble while true; the anchor renders identically so
|
|
6709
|
+
* toggling never remounts it (which would cut its CSS transitions).
|
|
6710
|
+
* @param props.maxWidth - bubble width cap in pixels, for labels long enough that the default
|
|
6711
|
+
* half-viewport cap would render a slab wider than the surface the anchor sits on.
|
|
6712
|
+
* @param props.openOnClick - clicking also pins the bubble for reading; another click, Escape,
|
|
6713
|
+
* Tab, or an outside pointerdown dismisses it. Defaults to false for ordinary action tooltips.
|
|
6714
|
+
* @param props.children - a single anchor element; its own ref (callback or object) is forwarded alongside the tooltip's.
|
|
6715
|
+
* @returns the cloned anchor plus a fixed-position bubble, optionally portaled to the body.
|
|
6716
|
+
* The bubble stays hidden until ResizeObserver supplies its size for viewport fitting; clicking the
|
|
6717
|
+
* anchor dismisses the bubble unless openOnClick is enabled, and focus arriving after a pointer
|
|
6718
|
+
* interaction (a closing menu refocusing its trigger) never raises it.
|
|
6719
|
+
*/
|
|
6720
|
+
function Tooltip({ label, shortcutKeys, side = "right", align = "center", delayMs = 0, focusDelayMs = 0, gap = 8, disabled = false, portal = false, maxWidth, openOnClick = false, children }) {
|
|
6721
|
+
const id = useId();
|
|
6722
|
+
const [pinned, setPinned] = useState(false);
|
|
6723
|
+
const anchor = useRef(null);
|
|
6724
|
+
const childRef = children.ref;
|
|
6725
|
+
const mergedRef = useCallback((el) => {
|
|
6726
|
+
anchor.current = el;
|
|
6727
|
+
if (typeof childRef === "function") childRef(el);
|
|
6728
|
+
else if (childRef != null) childRef.current = el;
|
|
6729
|
+
}, [childRef]);
|
|
6730
|
+
const [pos, setPos] = useState(null);
|
|
6731
|
+
const bubble = useRef(null);
|
|
6732
|
+
const resolvedLabel = pos === null ? null : typeof label === "function" ? label() : label;
|
|
6733
|
+
const y = pos === null ? 0 : side === "right" ? pos.top + (pos.bottom - pos.top) / 2 : side === "top" ? pos.top - gap : pos.bottom + gap;
|
|
6734
|
+
const showTimer = useRef(null);
|
|
6735
|
+
const triggers = useRef({
|
|
6736
|
+
hover: false,
|
|
6737
|
+
focus: false
|
|
6777
6738
|
});
|
|
6778
|
-
|
|
6779
|
-
|
|
6780
|
-
|
|
6781
|
-
|
|
6782
|
-
|
|
6783
|
-
|
|
6784
|
-
|
|
6785
|
-
|
|
6786
|
-
|
|
6787
|
-
|
|
6788
|
-
|
|
6739
|
+
const suppressAncestors = useContext(TooltipSuppression);
|
|
6740
|
+
const [suppressed, setSuppressed] = useState(false);
|
|
6741
|
+
const announce = useCallback((active) => {
|
|
6742
|
+
suppressAncestors?.(active);
|
|
6743
|
+
}, [suppressAncestors]);
|
|
6744
|
+
const visible = pos !== null && !disabled;
|
|
6745
|
+
useEffect(() => {
|
|
6746
|
+
const el = bubble.current;
|
|
6747
|
+
if (pos === null || !visible || suppressed || el === null) return;
|
|
6748
|
+
const edgeMargin = 12;
|
|
6749
|
+
let size;
|
|
6750
|
+
let placement = side;
|
|
6751
|
+
const fit = () => {
|
|
6752
|
+
if (size === void 0) return;
|
|
6753
|
+
const { inlineSize: width, blockSize: height } = size;
|
|
6754
|
+
const offset = side === "right" ? 0 : align === "end" ? width : width / 2;
|
|
6755
|
+
const left = Math.max(edgeMargin, Math.min(pos.x - offset, window.innerWidth - edgeMargin - width));
|
|
6756
|
+
const fitsBelow = pos.bottom + gap + height <= window.innerHeight - edgeMargin;
|
|
6757
|
+
const fitsAbove = pos.top - gap - height >= edgeMargin;
|
|
6758
|
+
if (placement === "bottom" && !fitsBelow && fitsAbove) placement = "top";
|
|
6759
|
+
else if (placement === "top" && !fitsAbove && fitsBelow) placement = "bottom";
|
|
6760
|
+
el.style.left = `${left + offset}px`;
|
|
6761
|
+
el.style.top = `${placement === "right" ? (pos.top + pos.bottom) / 2 : placement === "top" ? pos.top - gap : pos.bottom + gap}px`;
|
|
6762
|
+
el.dataset.side = placement;
|
|
6763
|
+
el.style.visibility = "visible";
|
|
6764
|
+
};
|
|
6765
|
+
const observer = new ResizeObserver((entries) => {
|
|
6766
|
+
size = entries[0]?.borderBoxSize[0];
|
|
6767
|
+
fit();
|
|
6768
|
+
});
|
|
6769
|
+
observer.observe(el, { box: "border-box" });
|
|
6770
|
+
window.addEventListener("resize", fit);
|
|
6771
|
+
return () => {
|
|
6772
|
+
observer.disconnect();
|
|
6773
|
+
window.removeEventListener("resize", fit);
|
|
6774
|
+
};
|
|
6775
|
+
}, [
|
|
6776
|
+
align,
|
|
6777
|
+
gap,
|
|
6778
|
+
pos,
|
|
6779
|
+
side,
|
|
6780
|
+
suppressed,
|
|
6781
|
+
visible
|
|
6782
|
+
]);
|
|
6783
|
+
useEffect(() => {
|
|
6784
|
+
announce(visible);
|
|
6785
|
+
return () => {
|
|
6786
|
+
announce(false);
|
|
6787
|
+
};
|
|
6788
|
+
}, [announce, visible]);
|
|
6789
|
+
const cancelShow = useCallback(() => {
|
|
6790
|
+
if (showTimer.current === null) return;
|
|
6791
|
+
clearTimeout(showTimer.current);
|
|
6792
|
+
showTimer.current = null;
|
|
6793
|
+
}, []);
|
|
6794
|
+
useEffect(() => {
|
|
6795
|
+
if (pinned && (disabled || !openOnClick)) setPinned(false);
|
|
6796
|
+
if (disabled) {
|
|
6797
|
+
cancelShow();
|
|
6798
|
+
triggers.current = {
|
|
6799
|
+
hover: false,
|
|
6800
|
+
focus: false
|
|
6801
|
+
};
|
|
6802
|
+
setPos(null);
|
|
6789
6803
|
}
|
|
6790
|
-
|
|
6791
|
-
|
|
6792
|
-
|
|
6793
|
-
|
|
6794
|
-
|
|
6795
|
-
|
|
6796
|
-
|
|
6797
|
-
|
|
6798
|
-
if (
|
|
6799
|
-
|
|
6800
|
-
|
|
6801
|
-
|
|
6802
|
-
|
|
6803
|
-
|
|
6804
|
+
return cancelShow;
|
|
6805
|
+
}, [
|
|
6806
|
+
cancelShow,
|
|
6807
|
+
disabled,
|
|
6808
|
+
openOnClick,
|
|
6809
|
+
pinned
|
|
6810
|
+
]);
|
|
6811
|
+
const show = () => {
|
|
6812
|
+
if (disabled) return;
|
|
6813
|
+
const el = anchor.current;
|
|
6814
|
+
/* v8 ignore next -- the ref is attached by event time: events fire on the cloned anchor. */
|
|
6815
|
+
if (el === null) return;
|
|
6816
|
+
const r = el.getBoundingClientRect();
|
|
6817
|
+
setPos({
|
|
6818
|
+
x: side === "right" ? r.right + 10 : align === "end" ? r.right : r.left + r.width / 2,
|
|
6819
|
+
top: r.top,
|
|
6820
|
+
bottom: r.bottom
|
|
6804
6821
|
});
|
|
6805
|
-
|
|
6806
|
-
const rankOf = (range) => range.kind === "session" ? 0 : 1;
|
|
6807
|
-
ranges.sort((a, b) => a.start - b.start || rankOf(a) - rankOf(b) || b.end - a.end);
|
|
6808
|
-
const parts = [];
|
|
6809
|
-
let cursor = 0;
|
|
6810
|
-
const pushPlain = (from, to) => {
|
|
6811
|
-
parts.push(jsx("span", {
|
|
6812
|
-
className: css$23.plainRun,
|
|
6813
|
-
children: text.slice(from, to)
|
|
6814
|
-
}, `t${from}`));
|
|
6822
|
+
announce(true);
|
|
6815
6823
|
};
|
|
6816
|
-
|
|
6817
|
-
|
|
6818
|
-
|
|
6819
|
-
|
|
6820
|
-
|
|
6821
|
-
|
|
6822
|
-
|
|
6823
|
-
|
|
6824
|
-
|
|
6825
|
-
|
|
6826
|
-
|
|
6827
|
-
|
|
6828
|
-
|
|
6829
|
-
|
|
6830
|
-
|
|
6831
|
-
|
|
6832
|
-
|
|
6833
|
-
|
|
6834
|
-
|
|
6835
|
-
|
|
6836
|
-
|
|
6837
|
-
|
|
6838
|
-
|
|
6839
|
-
|
|
6840
|
-
|
|
6841
|
-
|
|
6842
|
-
|
|
6843
|
-
|
|
6844
|
-
|
|
6845
|
-
|
|
6824
|
+
const showAfterDelay = (delay) => {
|
|
6825
|
+
cancelShow();
|
|
6826
|
+
if (delay <= 0) {
|
|
6827
|
+
show();
|
|
6828
|
+
return;
|
|
6829
|
+
}
|
|
6830
|
+
showTimer.current = setTimeout(() => {
|
|
6831
|
+
showTimer.current = null;
|
|
6832
|
+
show();
|
|
6833
|
+
}, delay);
|
|
6834
|
+
};
|
|
6835
|
+
const withdraw = useCallback(() => {
|
|
6836
|
+
setPinned(false);
|
|
6837
|
+
setPos(null);
|
|
6838
|
+
announce(false);
|
|
6839
|
+
}, [announce]);
|
|
6840
|
+
const hide = () => {
|
|
6841
|
+
cancelShow();
|
|
6842
|
+
if (!triggers.current.hover && !triggers.current.focus && !pinned) withdraw();
|
|
6843
|
+
};
|
|
6844
|
+
const dismiss = useCallback(() => {
|
|
6845
|
+
cancelShow();
|
|
6846
|
+
triggers.current = {
|
|
6847
|
+
hover: false,
|
|
6848
|
+
focus: false
|
|
6849
|
+
};
|
|
6850
|
+
withdraw();
|
|
6851
|
+
}, [cancelShow, withdraw]);
|
|
6852
|
+
useDismissOnOutsidePointer(anchor, openOnClick && visible, dismiss, bubble);
|
|
6853
|
+
useEffect(() => {
|
|
6854
|
+
if (!openOnClick || !visible) return;
|
|
6855
|
+
const onKeyDown = (event) => {
|
|
6856
|
+
if (event.key !== "Escape" && event.key !== "Tab") return;
|
|
6857
|
+
if (event.key === "Escape") {
|
|
6858
|
+
event.preventDefault();
|
|
6859
|
+
event.stopPropagation();
|
|
6860
|
+
}
|
|
6861
|
+
dismiss();
|
|
6862
|
+
};
|
|
6863
|
+
document.addEventListener("keydown", onKeyDown, true);
|
|
6864
|
+
return () => {
|
|
6865
|
+
document.removeEventListener("keydown", onKeyDown, true);
|
|
6866
|
+
};
|
|
6867
|
+
}, [
|
|
6868
|
+
dismiss,
|
|
6869
|
+
openOnClick,
|
|
6870
|
+
visible
|
|
6871
|
+
]);
|
|
6872
|
+
const content = visible && !suppressed && jsxs("span", {
|
|
6873
|
+
ref: bubble,
|
|
6874
|
+
id: openOnClick ? id : void 0,
|
|
6875
|
+
className: css$23.bubble,
|
|
6876
|
+
"data-side": side,
|
|
6877
|
+
"data-portal": portal || void 0,
|
|
6878
|
+
"data-pinned": pinned || void 0,
|
|
6879
|
+
"data-align": align,
|
|
6880
|
+
"data-has-shortcut": shortcutKeys?.length ? true : void 0,
|
|
6881
|
+
style: {
|
|
6882
|
+
left: pos.x,
|
|
6883
|
+
top: y,
|
|
6884
|
+
visibility: "hidden",
|
|
6885
|
+
...maxWidth === void 0 ? {} : { maxWidth }
|
|
6886
|
+
},
|
|
6887
|
+
role: "tooltip",
|
|
6888
|
+
"aria-label": shortcutKeys?.length ? [resolvedLabel, shortcutKeys.join(" ")].filter(Boolean).join(" ") : void 0,
|
|
6889
|
+
children: [resolvedLabel && jsx("span", {
|
|
6890
|
+
className: css$23.label,
|
|
6891
|
+
children: resolvedLabel
|
|
6892
|
+
}), shortcutKeys !== void 0 && shortcutKeys.length > 0 && jsx(ShortcutKeys, {
|
|
6893
|
+
keys: shortcutKeys,
|
|
6894
|
+
variant: "tooltip"
|
|
6895
|
+
})]
|
|
6896
|
+
});
|
|
6897
|
+
return jsxs(TooltipSuppression.Provider, {
|
|
6898
|
+
value: setSuppressed,
|
|
6899
|
+
children: [cloneElement(children, {
|
|
6900
|
+
ref: mergedRef,
|
|
6901
|
+
"aria-describedby": openOnClick && visible ? [children.props["aria-describedby"], id].filter(Boolean).join(" ") : children.props["aria-describedby"],
|
|
6902
|
+
onMouseEnter: (e) => {
|
|
6903
|
+
children.props.onMouseEnter?.(e);
|
|
6904
|
+
triggers.current.hover = true;
|
|
6905
|
+
showAfterDelay(delayMs);
|
|
6846
6906
|
},
|
|
6847
|
-
|
|
6848
|
-
|
|
6849
|
-
|
|
6850
|
-
|
|
6851
|
-
|
|
6852
|
-
|
|
6853
|
-
|
|
6907
|
+
onMouseLeave: (e) => {
|
|
6908
|
+
children.props.onMouseLeave?.(e);
|
|
6909
|
+
triggers.current.hover = false;
|
|
6910
|
+
cancelShow();
|
|
6911
|
+
if (!pinned) withdraw();
|
|
6912
|
+
},
|
|
6913
|
+
onClick: (e) => {
|
|
6914
|
+
children.props.onClick?.(e);
|
|
6915
|
+
triggers.current.focus = false;
|
|
6916
|
+
cancelShow();
|
|
6917
|
+
if (openOnClick && !disabled && !pinned) {
|
|
6918
|
+
setPinned(true);
|
|
6919
|
+
show();
|
|
6920
|
+
} else withdraw();
|
|
6921
|
+
},
|
|
6922
|
+
onFocus: (e) => {
|
|
6923
|
+
children.props.onFocus?.(e);
|
|
6924
|
+
if (pointerModality()) return;
|
|
6925
|
+
triggers.current.focus = true;
|
|
6926
|
+
showAfterDelay(focusDelayMs);
|
|
6927
|
+
},
|
|
6928
|
+
onBlur: (e) => {
|
|
6929
|
+
children.props.onBlur?.(e);
|
|
6930
|
+
triggers.current.focus = false;
|
|
6931
|
+
hide();
|
|
6932
|
+
}
|
|
6933
|
+
}), portal ? content !== false && createPortal(content, document.body) : content]
|
|
6854
6934
|
});
|
|
6855
|
-
if (cursor < text.length) pushPlain(cursor, text.length);
|
|
6856
|
-
return jsx(Fragment, { children: parts });
|
|
6857
6935
|
}
|
|
6858
6936
|
//#endregion
|
|
6859
6937
|
//#region lib/types/Toast.js
|
|
@@ -7700,6 +7778,15 @@ const regexEngine = createJavaScriptRegexEngine({
|
|
|
7700
7778
|
forgiving: true,
|
|
7701
7779
|
regexConstructor: (pattern) => defaultJavaScriptRegexConstructor(pattern, { lazyCompileLength: Number.POSITIVE_INFINITY })
|
|
7702
7780
|
});
|
|
7781
|
+
/**
|
|
7782
|
+
* Lines at least this many UTF-16 units long render as one uncolored token.
|
|
7783
|
+
* With the JavaScript regex engine, scanning one JavaScript string-literal
|
|
7784
|
+
* line costs about 70 ms at 1,000 units, 300 ms at 2,000, 600 ms at 5,000 and
|
|
7785
|
+
* 2.5 s at 10,000, so this cap keeps one line within a few frames. A skipped
|
|
7786
|
+
* line leaves the grammar state unchanged: a multi-line construct that opens
|
|
7787
|
+
* or closes on it colors the following lines as if the line were absent.
|
|
7788
|
+
*/
|
|
7789
|
+
const TOKENIZE_MAX_LINE_LENGTH = 1e3;
|
|
7703
7790
|
let singleton;
|
|
7704
7791
|
/** Representative paths through every boot grammar, compiled before user content is timed. */
|
|
7705
7792
|
const BOOT_GRAMMAR_WARMUPS = [
|
|
@@ -7807,7 +7894,8 @@ function highlightToHtml(code, lang) {
|
|
|
7807
7894
|
if (!ensureGrammar(resolved)) return void 0;
|
|
7808
7895
|
return highlighter().codeToHtml(code, {
|
|
7809
7896
|
lang: resolved,
|
|
7810
|
-
theme: "css-variables"
|
|
7897
|
+
theme: "css-variables",
|
|
7898
|
+
tokenizeMaxLineLength: TOKENIZE_MAX_LINE_LENGTH
|
|
7811
7899
|
});
|
|
7812
7900
|
}
|
|
7813
7901
|
/** vscode-textmate FontStyle bits shiki folds into `text-decoration` values. */
|
|
@@ -7900,6 +7988,7 @@ var StreamingHighlightSession = class {
|
|
|
7900
7988
|
return highlighter().codeToTokensBase(text, {
|
|
7901
7989
|
lang: resolved,
|
|
7902
7990
|
theme: "css-variables",
|
|
7991
|
+
tokenizeMaxLineLength: TOKENIZE_MAX_LINE_LENGTH,
|
|
7903
7992
|
...this.state === void 0 ? {} : { grammarState: this.state }
|
|
7904
7993
|
});
|
|
7905
7994
|
}
|
|
@@ -7979,7 +8068,8 @@ function highlightLines(code, lang) {
|
|
|
7979
8068
|
if (!ensureGrammar(resolved)) return void 0;
|
|
7980
8069
|
const { tokens } = highlighter().codeToTokens(code, {
|
|
7981
8070
|
lang: resolved,
|
|
7982
|
-
theme: "css-variables"
|
|
8071
|
+
theme: "css-variables",
|
|
8072
|
+
tokenizeMaxLineLength: TOKENIZE_MAX_LINE_LENGTH
|
|
7983
8073
|
});
|
|
7984
8074
|
const last = tokens[tokens.length - 1];
|
|
7985
8075
|
return (tokens.length > 1 && last !== void 0 && last.length === 0 ? tokens.slice(0, -1) : tokens).map((line) => line.map((token) => ({
|
|
@@ -9333,6 +9423,44 @@ function useCopyFeedback(text) {
|
|
|
9333
9423
|
};
|
|
9334
9424
|
}
|
|
9335
9425
|
//#endregion
|
|
9426
|
+
//#region lib/types/CommandText.js
|
|
9427
|
+
/** Selectable command text with keyboard access while horizontally overflowing. */
|
|
9428
|
+
/**
|
|
9429
|
+
* Render command text without adding Tab stops for content that fits.
|
|
9430
|
+
* @param props - Text, localized scrollport name, and owner styling.
|
|
9431
|
+
* @returns A horizontal text scrollport, named and keyboard-focusable only when overflowing.
|
|
9432
|
+
*/
|
|
9433
|
+
function CommandText({ text, label, className }) {
|
|
9434
|
+
const ref = useRef(null);
|
|
9435
|
+
const [overflow, setOverflow] = useState(false);
|
|
9436
|
+
useLayoutEffect(() => {
|
|
9437
|
+
const element = ref.current;
|
|
9438
|
+
/* v8 ignore next -- the span is rendered unconditionally. */
|
|
9439
|
+
if (element === null) return void 0;
|
|
9440
|
+
const measure = () => {
|
|
9441
|
+
setOverflow(element.scrollWidth > element.clientWidth);
|
|
9442
|
+
};
|
|
9443
|
+
measure();
|
|
9444
|
+
const observer = typeof ResizeObserver === "undefined" ? void 0 : new ResizeObserver(measure);
|
|
9445
|
+
observer?.observe(element);
|
|
9446
|
+
const fonts = "fonts" in element.ownerDocument ? element.ownerDocument.fonts : void 0;
|
|
9447
|
+
fonts?.addEventListener("loadingdone", measure);
|
|
9448
|
+
return () => {
|
|
9449
|
+
observer?.disconnect();
|
|
9450
|
+
fonts?.removeEventListener("loadingdone", measure);
|
|
9451
|
+
};
|
|
9452
|
+
}, [text]);
|
|
9453
|
+
return jsx("span", {
|
|
9454
|
+
ref,
|
|
9455
|
+
className: clsx(css$29.text, className),
|
|
9456
|
+
"data-command-text": true,
|
|
9457
|
+
tabIndex: overflow ? 0 : void 0,
|
|
9458
|
+
role: overflow ? "group" : void 0,
|
|
9459
|
+
"aria-label": overflow ? label : void 0,
|
|
9460
|
+
children: text
|
|
9461
|
+
});
|
|
9462
|
+
}
|
|
9463
|
+
//#endregion
|
|
9336
9464
|
//#region lib/types/TerminalBlock.js
|
|
9337
9465
|
/** Output lines shown before the height cap collapses the middle. */
|
|
9338
9466
|
const DEFAULT_TERMINAL_MAX_LINES = 16;
|
|
@@ -9412,7 +9540,7 @@ function renderLine$1(line) {
|
|
|
9412
9540
|
* @param props - see {@link TerminalBlockProps}.
|
|
9413
9541
|
* @returns the terminal block element.
|
|
9414
9542
|
*/
|
|
9415
|
-
function TerminalBlock({ command, cwd, home, output, exitCode, signal, running = false, maxLines = 16, copyText, runStateDot = true, className, labels }) {
|
|
9543
|
+
function TerminalBlock({ command, cwd, home, output, exitCode, signal, running = false, background = false, maxLines = 16, copyText, runStateDot = true, className, labels }) {
|
|
9416
9544
|
const copy = labels;
|
|
9417
9545
|
const text = output ?? "";
|
|
9418
9546
|
const lines = useMemo(() => {
|
|
@@ -9425,14 +9553,15 @@ function TerminalBlock({ command, cwd, home, output, exitCode, signal, running =
|
|
|
9425
9553
|
const onToggle = useCallback(() => {
|
|
9426
9554
|
setExpanded((value) => !value);
|
|
9427
9555
|
}, []);
|
|
9428
|
-
const status = statusText(exitCode, signal, copy);
|
|
9556
|
+
const status = background ? void 0 : statusText(exitCode, signal, copy);
|
|
9429
9557
|
const state = runState(running, exitCode, signal, copy);
|
|
9558
|
+
const showState = runStateDot && (!background || running);
|
|
9430
9559
|
const commandLines = useMemo(() => {
|
|
9431
9560
|
return (command.endsWith("\n") ? command.slice(0, -1) : command).split("\n");
|
|
9432
9561
|
}, [command]);
|
|
9433
9562
|
const empty = lines.every((line) => line.every((span) => span.text.trim() === ""));
|
|
9434
9563
|
const { hidden, capped, headLines, tailLines } = headTailCap(lines.length, maxLines, expanded);
|
|
9435
|
-
const body = !running || !empty;
|
|
9564
|
+
const body = !background && (!running || !empty);
|
|
9436
9565
|
return jsxs("div", {
|
|
9437
9566
|
className: clsx(css$28.block, className),
|
|
9438
9567
|
"data-terminal": "",
|
|
@@ -9443,13 +9572,13 @@ function TerminalBlock({ command, cwd, home, output, exitCode, signal, running =
|
|
|
9443
9572
|
children: [
|
|
9444
9573
|
jsxs("div", {
|
|
9445
9574
|
className: css$28.prompt,
|
|
9446
|
-
children: [
|
|
9575
|
+
children: [showState && jsx("span", {
|
|
9447
9576
|
className: css$28.runStateLabel,
|
|
9448
9577
|
children: state.label
|
|
9449
9578
|
}), commandLines.map((line, index) => jsxs("div", {
|
|
9450
9579
|
className: css$28.promptLine,
|
|
9451
9580
|
children: [
|
|
9452
|
-
index === 0 &&
|
|
9581
|
+
index === 0 && showState && jsx(StateDot, {
|
|
9453
9582
|
state: state.state,
|
|
9454
9583
|
className: css$28.runState
|
|
9455
9584
|
}),
|
|
@@ -9457,9 +9586,10 @@ function TerminalBlock({ command, cwd, home, output, exitCode, signal, running =
|
|
|
9457
9586
|
className: css$28.cwd,
|
|
9458
9587
|
children: index > 0 || cwd === void 0 ? "$" : promptLabel(cwd, home)
|
|
9459
9588
|
}),
|
|
9460
|
-
jsx(
|
|
9589
|
+
jsx(CommandText, {
|
|
9461
9590
|
className: css$28.command,
|
|
9462
|
-
|
|
9591
|
+
text: line,
|
|
9592
|
+
label: copy.commandLine(index + 1)
|
|
9463
9593
|
})
|
|
9464
9594
|
]
|
|
9465
9595
|
}, index))]
|
|
@@ -9468,7 +9598,7 @@ function TerminalBlock({ command, cwd, home, output, exitCode, signal, running =
|
|
|
9468
9598
|
className: css$28.status,
|
|
9469
9599
|
children: status
|
|
9470
9600
|
}),
|
|
9471
|
-
(copyText !== void 0 || !running && !empty) && jsx("button", {
|
|
9601
|
+
(copyText !== void 0 || !background && !running && !empty) && jsx("button", {
|
|
9472
9602
|
type: "button",
|
|
9473
9603
|
className: css$28.copyButton,
|
|
9474
9604
|
onClick: onCopy,
|
|
@@ -9697,13 +9827,13 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
|
|
|
9697
9827
|
const tailLines = maxLines - headLines;
|
|
9698
9828
|
const windowed = lines.length < totalLines;
|
|
9699
9829
|
const rows = (slice) => slice.map(([line, spans]) => jsxs("div", {
|
|
9700
|
-
className: css$
|
|
9830
|
+
className: css$30.line,
|
|
9701
9831
|
children: [jsx("span", {
|
|
9702
|
-
className: css$
|
|
9832
|
+
className: css$30.gutter,
|
|
9703
9833
|
"aria-hidden": true,
|
|
9704
9834
|
children: line.number
|
|
9705
9835
|
}), jsx("span", {
|
|
9706
|
-
className: css$
|
|
9836
|
+
className: css$30.content,
|
|
9707
9837
|
children: spans === void 0 ? line.text : renderSpans(spans)
|
|
9708
9838
|
})]
|
|
9709
9839
|
}, line.number));
|
|
@@ -9711,7 +9841,7 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
|
|
|
9711
9841
|
const paired = lines.map((line, index) => [line, highlighted?.[index]]);
|
|
9712
9842
|
return jsxs("div", {
|
|
9713
9843
|
ref: rootRef,
|
|
9714
|
-
className: clsx(cardCss.card, css$
|
|
9844
|
+
className: clsx(cardCss.card, css$30.block, className),
|
|
9715
9845
|
"data-read": "",
|
|
9716
9846
|
"data-code-wrap": wrapped,
|
|
9717
9847
|
style: gutterStyle,
|
|
@@ -9733,7 +9863,7 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
|
|
|
9733
9863
|
children: [
|
|
9734
9864
|
rows(capped ? paired.slice(0, headLines) : paired),
|
|
9735
9865
|
hidden > 0 && jsx(FoldToggle, {
|
|
9736
|
-
className: css$
|
|
9866
|
+
className: css$30.expand,
|
|
9737
9867
|
expanded,
|
|
9738
9868
|
hidden,
|
|
9739
9869
|
labels,
|
|
@@ -9755,11 +9885,11 @@ function assertNever(value) {
|
|
|
9755
9885
|
}
|
|
9756
9886
|
/** The dim class per row kind (path/gap chrome vs the diff's own +/- colors). */
|
|
9757
9887
|
const ROW_CLASS = {
|
|
9758
|
-
path: css$
|
|
9759
|
-
del: css$
|
|
9760
|
-
add: css$
|
|
9761
|
-
context: css$
|
|
9762
|
-
gap: css$
|
|
9888
|
+
path: css$31.path,
|
|
9889
|
+
del: css$31.del,
|
|
9890
|
+
add: css$31.add,
|
|
9891
|
+
context: css$31.context,
|
|
9892
|
+
gap: css$31.gap
|
|
9763
9893
|
};
|
|
9764
9894
|
/** Bound synchronous edit-graph search; one replacement consumes two edits. */
|
|
9765
9895
|
const MAX_DIFF_EDIT_LENGTH = 256;
|
|
@@ -9893,7 +10023,7 @@ function DiffBlock({ diffs, labels, maxLines = 16, className }) {
|
|
|
9893
10023
|
const head = capped ? rows.slice(0, headLines) : rows;
|
|
9894
10024
|
const tail = capped ? rows.slice(rows.length - tailLines) : [];
|
|
9895
10025
|
return jsxs("div", {
|
|
9896
|
-
className: clsx(cardCss.card, css$
|
|
10026
|
+
className: clsx(cardCss.card, css$31.block, className),
|
|
9897
10027
|
"data-diff": "",
|
|
9898
10028
|
"data-code-wrap": wrapped,
|
|
9899
10029
|
children: [jsx(CodeToolbar, {
|
|
@@ -9908,21 +10038,21 @@ function DiffBlock({ diffs, labels, maxLines = 16, className }) {
|
|
|
9908
10038
|
setWrapped((value) => !value);
|
|
9909
10039
|
}
|
|
9910
10040
|
}), jsxs("div", {
|
|
9911
|
-
className: css$
|
|
10041
|
+
className: css$31.body,
|
|
9912
10042
|
children: [
|
|
9913
10043
|
head.map((row, index) => jsx("div", {
|
|
9914
|
-
className: clsx(css$
|
|
10044
|
+
className: clsx(css$31.line, ROW_CLASS[row.kind]),
|
|
9915
10045
|
children: row.text
|
|
9916
10046
|
}, index)),
|
|
9917
10047
|
hidden > 0 && jsx(FoldToggle, {
|
|
9918
|
-
className: css$
|
|
10048
|
+
className: css$31.expand,
|
|
9919
10049
|
expanded,
|
|
9920
10050
|
hidden,
|
|
9921
10051
|
labels,
|
|
9922
10052
|
onToggle
|
|
9923
10053
|
}),
|
|
9924
10054
|
tail.map((row, index) => jsx("div", {
|
|
9925
|
-
className: clsx(css$
|
|
10055
|
+
className: clsx(css$31.line, ROW_CLASS[row.kind]),
|
|
9926
10056
|
children: row.text
|
|
9927
10057
|
}, index))
|
|
9928
10058
|
]
|
|
@@ -10052,56 +10182,56 @@ function SearchBlock(props) {
|
|
|
10052
10182
|
const tail = tailHeader === void 0 ? naturalTail : naturalTail.slice(1);
|
|
10053
10183
|
const renderRow = (row) => {
|
|
10054
10184
|
if (row.type === "path") return jsx("div", {
|
|
10055
|
-
className: css$
|
|
10185
|
+
className: css$32.line,
|
|
10056
10186
|
children: row.path
|
|
10057
10187
|
});
|
|
10058
10188
|
if (row.type === "match") return jsxs("div", {
|
|
10059
|
-
className: css$
|
|
10189
|
+
className: css$32.line,
|
|
10060
10190
|
children: [jsxs("span", {
|
|
10061
|
-
className: css$
|
|
10191
|
+
className: css$32.lineNumber,
|
|
10062
10192
|
children: [row.lineNumber, ": "]
|
|
10063
10193
|
}), row.line]
|
|
10064
10194
|
});
|
|
10065
10195
|
return jsxs("button", {
|
|
10066
10196
|
type: "button",
|
|
10067
|
-
className: css$
|
|
10197
|
+
className: css$32.fileHeader,
|
|
10068
10198
|
"aria-expanded": !row.collapsed,
|
|
10069
10199
|
onClick: () => {
|
|
10070
10200
|
toggleFile(row.index);
|
|
10071
10201
|
},
|
|
10072
10202
|
children: [jsx("span", {
|
|
10073
|
-
className: css$
|
|
10203
|
+
className: css$32.filePath,
|
|
10074
10204
|
children: row.path
|
|
10075
10205
|
}), jsx("span", {
|
|
10076
|
-
className: css$
|
|
10206
|
+
className: css$32.fileCount,
|
|
10077
10207
|
children: row.count
|
|
10078
10208
|
})]
|
|
10079
10209
|
});
|
|
10080
10210
|
};
|
|
10081
10211
|
return jsxs("div", {
|
|
10082
|
-
className: clsx(css$
|
|
10212
|
+
className: clsx(css$32.block, className),
|
|
10083
10213
|
"data-search": props.kind,
|
|
10084
10214
|
children: [jsxs("div", {
|
|
10085
|
-
className: css$
|
|
10215
|
+
className: css$32.header,
|
|
10086
10216
|
children: [jsx("span", {
|
|
10087
|
-
className: css$
|
|
10217
|
+
className: css$32.summary,
|
|
10088
10218
|
children: summaryText(props, shown, truncated, total)
|
|
10089
10219
|
}), !empty && jsx("button", {
|
|
10090
10220
|
type: "button",
|
|
10091
|
-
className: css$
|
|
10221
|
+
className: css$32.copyButton,
|
|
10092
10222
|
onClick: onCopy,
|
|
10093
10223
|
children: copied ? props.labels.copied : props.labels.copy
|
|
10094
10224
|
})]
|
|
10095
10225
|
}), empty ? jsx("div", {
|
|
10096
|
-
className: css$
|
|
10226
|
+
className: css$32.empty,
|
|
10097
10227
|
children: props.labels.noResults
|
|
10098
10228
|
}) : jsxs("div", {
|
|
10099
|
-
className: css$
|
|
10229
|
+
className: css$32.body,
|
|
10100
10230
|
children: [
|
|
10101
10231
|
head.map((row) => jsx("div", { children: renderRow(row) }, rowKey(row))),
|
|
10102
10232
|
hidden > 0 && jsx("button", {
|
|
10103
10233
|
type: "button",
|
|
10104
|
-
className: css$
|
|
10234
|
+
className: css$32.expand,
|
|
10105
10235
|
"aria-expanded": expanded,
|
|
10106
10236
|
"aria-label": expanded ? props.labels.collapseAria : props.labels.expandAria(hidden),
|
|
10107
10237
|
onClick: onToggle,
|
|
@@ -10931,7 +11061,7 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
|
|
|
10931
11061
|
});
|
|
10932
11062
|
}, [copied, trimmed]);
|
|
10933
11063
|
const body = streamedBody !== void 0 ? streamedBody : html === void 0 ? jsx("pre", {
|
|
10934
|
-
className: css$
|
|
11064
|
+
className: css$33.plain,
|
|
10935
11065
|
children: jsx("code", { children: sourceLines === void 0 ? trimmed : sourceLines.map((line, index) => jsxs(Fragment$1, { children: [index > 0 && "\n", jsx("span", {
|
|
10936
11066
|
className: "line",
|
|
10937
11067
|
children: line
|
|
@@ -10939,12 +11069,12 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
|
|
|
10939
11069
|
}) : jsx("div", { dangerouslySetInnerHTML: { __html: html } });
|
|
10940
11070
|
return jsxs("div", {
|
|
10941
11071
|
ref: rootRef,
|
|
10942
|
-
className: clsx(css$
|
|
11072
|
+
className: clsx(css$33.block, "md-code-block", lineNumbers && css$33.numbered, toolbarLabels !== void 0 && css$33.card, className),
|
|
10943
11073
|
"data-line-numbers": lineNumbers || void 0,
|
|
10944
11074
|
"data-code-wrap": toolbarLabels === void 0 ? void 0 : wrapped,
|
|
10945
11075
|
style: sourceLines === void 0 ? void 0 : { "--dsl-code-block-line-number-width": `${Math.max(2, String(sourceLines.length).length)}ch` },
|
|
10946
11076
|
children: [showHeader && jsx("div", {
|
|
10947
|
-
className: css$
|
|
11077
|
+
className: css$33.bannerWrap,
|
|
10948
11078
|
children: toolbarLabels !== void 0 ? jsx(CodeToolbar, {
|
|
10949
11079
|
lang,
|
|
10950
11080
|
labels: toolbarLabels,
|
|
@@ -10957,16 +11087,16 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
|
|
|
10957
11087
|
setWrapped((value) => !value);
|
|
10958
11088
|
} : void 0
|
|
10959
11089
|
}) : jsxs("div", {
|
|
10960
|
-
className: css$
|
|
11090
|
+
className: css$33.banner,
|
|
10961
11091
|
"data-code-block-banner": true,
|
|
10962
11092
|
children: [jsx("div", {
|
|
10963
|
-
className: css$
|
|
11093
|
+
className: css$33.infostring,
|
|
10964
11094
|
children: lang ?? ""
|
|
10965
11095
|
}), jsx("div", {
|
|
10966
|
-
className: css$
|
|
11096
|
+
className: css$33.action,
|
|
10967
11097
|
children: jsx("button", {
|
|
10968
11098
|
type: "button",
|
|
10969
|
-
className: css$
|
|
11099
|
+
className: css$33.copyButton,
|
|
10970
11100
|
onClick: onCopy,
|
|
10971
11101
|
children: copied ? copiedLabel : copyLabel
|
|
10972
11102
|
})
|
|
@@ -10974,7 +11104,7 @@ function CodeBlock({ code, lang, streaming, className, contentRef, lineNumbers =
|
|
|
10974
11104
|
})
|
|
10975
11105
|
}), jsx("div", {
|
|
10976
11106
|
ref: contentRef,
|
|
10977
|
-
className: css$
|
|
11107
|
+
className: css$33.content,
|
|
10978
11108
|
"data-code-block-content": true,
|
|
10979
11109
|
children: body
|
|
10980
11110
|
})]
|
|
@@ -11163,31 +11293,34 @@ function ImageLightbox({ src, alt, labels, onClose }) {
|
|
|
11163
11293
|
restoreRef.current?.focus();
|
|
11164
11294
|
};
|
|
11165
11295
|
}, [onClose]);
|
|
11166
|
-
return createPortal(
|
|
11167
|
-
className: css$
|
|
11296
|
+
return createPortal(jsx("div", {
|
|
11297
|
+
className: css$34.backdrop,
|
|
11168
11298
|
role: "dialog",
|
|
11169
11299
|
"aria-modal": "true",
|
|
11170
11300
|
"aria-label": labels.dialog,
|
|
11171
|
-
children:
|
|
11172
|
-
|
|
11173
|
-
|
|
11174
|
-
"
|
|
11175
|
-
|
|
11176
|
-
|
|
11177
|
-
|
|
11178
|
-
|
|
11179
|
-
|
|
11180
|
-
|
|
11181
|
-
|
|
11182
|
-
|
|
11183
|
-
|
|
11184
|
-
|
|
11185
|
-
|
|
11186
|
-
|
|
11187
|
-
|
|
11188
|
-
|
|
11189
|
-
|
|
11190
|
-
|
|
11301
|
+
children: jsxs("div", {
|
|
11302
|
+
className: css$34.stage,
|
|
11303
|
+
children: [
|
|
11304
|
+
jsx("div", {
|
|
11305
|
+
className: css$34.mask,
|
|
11306
|
+
"aria-hidden": "true",
|
|
11307
|
+
onMouseDown: onClose
|
|
11308
|
+
}),
|
|
11309
|
+
jsx("img", {
|
|
11310
|
+
className: css$34.image,
|
|
11311
|
+
src,
|
|
11312
|
+
alt
|
|
11313
|
+
}),
|
|
11314
|
+
jsx("button", {
|
|
11315
|
+
ref: closeRef,
|
|
11316
|
+
type: "button",
|
|
11317
|
+
className: css$34.close,
|
|
11318
|
+
"aria-label": labels.close,
|
|
11319
|
+
onClick: onClose,
|
|
11320
|
+
children: jsx(IconCloseOutlineRegular, { size: 16 })
|
|
11321
|
+
})
|
|
11322
|
+
]
|
|
11323
|
+
})
|
|
11191
11324
|
}), document.body);
|
|
11192
11325
|
}
|
|
11193
11326
|
//#endregion
|
|
@@ -11209,14 +11342,14 @@ function ImagePreview({ src, alt, loadingLabel, failedLabel }) {
|
|
|
11209
11342
|
function Preview({ src, alt, loadingLabel, failedLabel }) {
|
|
11210
11343
|
const [state, setState] = useState("loading");
|
|
11211
11344
|
return jsxs("span", {
|
|
11212
|
-
className: css$
|
|
11345
|
+
className: css$35.frame,
|
|
11213
11346
|
children: [state !== "failed" && jsx("img", {
|
|
11214
11347
|
src,
|
|
11215
11348
|
alt,
|
|
11216
11349
|
loading: "lazy",
|
|
11217
11350
|
decoding: "async",
|
|
11218
11351
|
referrerPolicy: "no-referrer",
|
|
11219
|
-
className: css$
|
|
11352
|
+
className: css$35.image,
|
|
11220
11353
|
"data-ready": state === "ready" || void 0,
|
|
11221
11354
|
onLoad: () => {
|
|
11222
11355
|
setState("ready");
|
|
@@ -11225,7 +11358,7 @@ function Preview({ src, alt, loadingLabel, failedLabel }) {
|
|
|
11225
11358
|
setState("failed");
|
|
11226
11359
|
}
|
|
11227
11360
|
}), state !== "ready" && jsxs("span", {
|
|
11228
|
-
className: css$
|
|
11361
|
+
className: css$35.status,
|
|
11229
11362
|
role: "status",
|
|
11230
11363
|
children: [state === "loading" && jsx(IconLoadingOutlineRegular, { size: 16 }), jsx("span", { children: state === "loading" ? loadingLabel : failedLabel })]
|
|
11231
11364
|
})]
|
|
@@ -11964,7 +12097,7 @@ function SafeLink({ url, label, className }) {
|
|
|
11964
12097
|
children: [jsx(LinkIconMedium, {
|
|
11965
12098
|
kind: "url",
|
|
11966
12099
|
href,
|
|
11967
|
-
className: css$
|
|
12100
|
+
className: css$36.linkIcon
|
|
11968
12101
|
}), label]
|
|
11969
12102
|
});
|
|
11970
12103
|
}
|
|
@@ -11979,20 +12112,20 @@ function SafeLink({ url, label, className }) {
|
|
|
11979
12112
|
*/
|
|
11980
12113
|
function SourceItem({ source, ordinal }) {
|
|
11981
12114
|
return jsxs("li", {
|
|
11982
|
-
className: css$
|
|
12115
|
+
className: css$36.source,
|
|
11983
12116
|
value: ordinal,
|
|
11984
12117
|
children: [
|
|
11985
12118
|
jsx(SafeLink, {
|
|
11986
12119
|
url: source.url,
|
|
11987
12120
|
label: linkLabel(source.url, source.title),
|
|
11988
|
-
className: css$
|
|
12121
|
+
className: css$36.sourceLink
|
|
11989
12122
|
}),
|
|
11990
12123
|
source.snippet !== void 0 && source.snippet !== "" && jsx("div", {
|
|
11991
|
-
className: css$
|
|
12124
|
+
className: css$36.snippet,
|
|
11992
12125
|
children: source.snippet
|
|
11993
12126
|
}),
|
|
11994
12127
|
source.publishedAt !== void 0 && source.publishedAt !== "" && jsx("div", {
|
|
11995
|
-
className: css$
|
|
12128
|
+
className: css$36.published,
|
|
11996
12129
|
children: source.publishedAt
|
|
11997
12130
|
})
|
|
11998
12131
|
]
|
|
@@ -12007,28 +12140,28 @@ function SourceItem({ source, ordinal }) {
|
|
|
12007
12140
|
function WebSearchBlock({ answer, sources, truncated, labels, className }) {
|
|
12008
12141
|
const empty = (answer === void 0 || answer === "") && sources.length === 0;
|
|
12009
12142
|
return jsxs("div", {
|
|
12010
|
-
className: clsx(css$
|
|
12143
|
+
className: clsx(css$36.block, className),
|
|
12011
12144
|
"data-web": "search",
|
|
12012
12145
|
children: [
|
|
12013
12146
|
answer !== void 0 && answer !== "" && jsx("div", {
|
|
12014
|
-
className: css$
|
|
12147
|
+
className: css$36.answer,
|
|
12015
12148
|
children: jsx(MarkdownText, {
|
|
12016
12149
|
text: answer,
|
|
12017
12150
|
labels: labels.markdown
|
|
12018
12151
|
})
|
|
12019
12152
|
}),
|
|
12020
12153
|
empty ? jsx("div", {
|
|
12021
|
-
className: css$
|
|
12154
|
+
className: css$36.empty,
|
|
12022
12155
|
children: labels.noResults
|
|
12023
12156
|
}) : jsx("ol", {
|
|
12024
|
-
className: css$
|
|
12157
|
+
className: css$36.sources,
|
|
12025
12158
|
children: sources.map((source, index) => jsx(SourceItem, {
|
|
12026
12159
|
source,
|
|
12027
12160
|
ordinal: index + 1
|
|
12028
12161
|
}, index))
|
|
12029
12162
|
}),
|
|
12030
12163
|
truncated && jsx("div", {
|
|
12031
|
-
className: css$
|
|
12164
|
+
className: css$36.truncated,
|
|
12032
12165
|
children: labels.sourcesTruncated
|
|
12033
12166
|
})
|
|
12034
12167
|
]
|
|
@@ -12041,23 +12174,23 @@ function WebSearchBlock({ answer, sources, truncated, labels, className }) {
|
|
|
12041
12174
|
*/
|
|
12042
12175
|
function WebFetchBlock({ url, statusCode, truncated, labels, className }) {
|
|
12043
12176
|
return jsxs("div", {
|
|
12044
|
-
className: clsx(css$
|
|
12177
|
+
className: clsx(css$36.block, css$36.fetch, className),
|
|
12045
12178
|
"data-web": "fetch",
|
|
12046
12179
|
children: [jsx(SafeLink, {
|
|
12047
12180
|
url,
|
|
12048
12181
|
label: url,
|
|
12049
|
-
className: css$
|
|
12182
|
+
className: css$36.fetchUrl
|
|
12050
12183
|
}), jsxs("div", {
|
|
12051
|
-
className: css$
|
|
12184
|
+
className: css$36.fetchMeta,
|
|
12052
12185
|
children: [jsxs("span", {
|
|
12053
|
-
className: css$
|
|
12186
|
+
className: css$36.status,
|
|
12054
12187
|
children: [
|
|
12055
12188
|
labels.http,
|
|
12056
12189
|
" ",
|
|
12057
12190
|
statusCode
|
|
12058
12191
|
]
|
|
12059
12192
|
}), truncated && jsx("span", {
|
|
12060
|
-
className: css$
|
|
12193
|
+
className: css$36.truncated,
|
|
12061
12194
|
children: labels.contentTruncated
|
|
12062
12195
|
})]
|
|
12063
12196
|
})]
|
|
@@ -12091,10 +12224,10 @@ function JsonBlock({ label, payload, defaultOpen = false, truncatedLabel }) {
|
|
|
12091
12224
|
truncatedLabel
|
|
12092
12225
|
]);
|
|
12093
12226
|
return jsxs("div", {
|
|
12094
|
-
className: css$
|
|
12227
|
+
className: css$37.root,
|
|
12095
12228
|
children: [jsxs("button", {
|
|
12096
12229
|
type: "button",
|
|
12097
|
-
className: css$
|
|
12230
|
+
className: css$37.toggle,
|
|
12098
12231
|
onClick: () => {
|
|
12099
12232
|
setOpen((v) => !v);
|
|
12100
12233
|
},
|
|
@@ -12104,7 +12237,7 @@ function JsonBlock({ label, payload, defaultOpen = false, truncatedLabel }) {
|
|
|
12104
12237
|
label
|
|
12105
12238
|
]
|
|
12106
12239
|
}), open && jsx("pre", {
|
|
12107
|
-
className: css$
|
|
12240
|
+
className: css$37.body,
|
|
12108
12241
|
children: body
|
|
12109
12242
|
})]
|
|
12110
12243
|
});
|
|
@@ -12445,6 +12578,6 @@ function GuideArtworkFiles({ size = 36, className }) {
|
|
|
12445
12578
|
});
|
|
12446
12579
|
}
|
|
12447
12580
|
//#endregion
|
|
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,
|
|
12581
|
+
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, HoverCardGroup, 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, PermissionIconAutoReviewMedium, PermissionIconAutoReviewRegular, PermissionIconFullAccessMedium, PermissionIconFullAccessRegular, PermissionIconReadOnlyMedium, PermissionIconReadOnlyRegular, PermissionIconWorkspaceWriteMedium, PermissionIconWorkspaceWriteRegular, Pill, PluginArtworkDefault, PluginArtworkLoop, PluginArtworkSearch, PluginArtworkSubagent, PluginArtworkTerminal, ReadBlock, ReferenceChip, ReferenceIconMedium, ReferenceIconRegular, RiskConfirmation, SHIELD_OUTLINE_PATH, SearchBlock, SegmentedControl, SegmentedTabs, SettingsForm, SettingsFormModel, SettingsSecretField, SettingsValueField, ShortcutKeys, StateDot, Switch, Tag, TerminalBlock, TextShimmer, Toast, Tooltip, UserTextRun, WebBlock, classifyFileType, classifyLinkPath, closeTopModal, diffTotals, extractMarkdownPlainText, fileExtension, fileSizeText, focusWithoutRing, isBehindModal, isDarwinDesktop, languageForPath, modalSelector, observeComposition, observeStickyMenuGroups, pointerModality, rankByName, relativeTime, settingsNumberField, settingsTextField, useAnchoredMaxHeight, useAnchoredPosition, useCodeHighlighter, useDismissOnOutsidePointer, useModalLayer, writeClipboard };
|
|
12449
12582
|
|
|
12450
12583
|
//# sourceMappingURL=index.js.map
|