@deepseek-ai/dsh-client-ui-primitives 0.1.5-alpha.1 → 0.1.5-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -15,20 +15,21 @@ import css$9 from "./Modal.module.css";
15
15
  import css$10 from "./OnboardingSurface.module.css";
16
16
  import css$11 from "./RiskConfirmation.module.css";
17
17
  import css$12 from "./ConnectionIndicator.module.css";
18
- import css$13 from "./user-text.module.css";
19
- import css$14 from "./Tooltip.module.css";
20
- import css$15 from "./Toast.module.css";
21
- import css$16 from "./JsonTree.module.css";
18
+ import css$13 from "./FileTypeIcon.module.css";
19
+ import css$14 from "./user-text.module.css";
20
+ import css$15 from "./Tooltip.module.css";
21
+ import css$16 from "./Toast.module.css";
22
+ import css$17 from "./JsonTree.module.css";
22
23
  import Anser from "anser";
23
- import css$17 from "./TerminalBlock.module.css";
24
+ import css$18 from "./TerminalBlock.module.css";
24
25
  import { createCssVariablesTheme, createHighlighterCoreSync } from "shiki/core";
25
26
  import { createJavaScriptRegexEngine, defaultJavaScriptRegexConstructor } from "shiki/engine/javascript";
26
27
  import langTs from "@shikijs/langs/typescript";
27
28
  import langBash from "@shikijs/langs/shellscript";
28
29
  import langJson from "@shikijs/langs/json";
29
- import css$18 from "./ReadBlock.module.css";
30
- import css$19 from "./DiffBlock.module.css";
31
- import css$20 from "./SearchBlock.module.css";
30
+ import css$19 from "./ReadBlock.module.css";
31
+ import css$20 from "./DiffBlock.module.css";
32
+ import css$21 from "./SearchBlock.module.css";
32
33
  import { fromMarkdown } from "mdast-util-from-markdown";
33
34
  import { gfmFromMarkdown } from "mdast-util-gfm";
34
35
  import { mathFromMarkdown } from "mdast-util-math";
@@ -40,12 +41,12 @@ import { classifyCharacter } from "micromark-util-classify-character";
40
41
  import { codes, constants, types } from "micromark-util-symbol";
41
42
  import { factorySpace } from "micromark-factory-space";
42
43
  import { normalizeUri } from "micromark-util-sanitize-uri";
43
- import css$21 from "./markdown/CodeBlock.module.css";
44
+ import css$22 from "./markdown/CodeBlock.module.css";
44
45
  import katex from "katex";
45
- import css$22 from "./markdown/MarkdownText.module.css";
46
+ import css$23 from "./markdown/MarkdownText.module.css";
46
47
  import "katex/dist/katex.min.css";
47
- import css$23 from "./WebBlock.module.css";
48
- import css$24 from "./markdown/JsonBlock.module.css";
48
+ import css$24 from "./WebBlock.module.css";
49
+ import css$25 from "./markdown/JsonBlock.module.css";
49
50
  //#region lib/types/StateDot.js
50
51
  /** Outer 3x3 matrix cells (2px pixels on a 10px grid), clockwise from top-left. */
51
52
  const MATRIX_CELLS = [
@@ -390,7 +391,8 @@ const IconCopyOutline16 = ({ size = 16, className }) => jsx("svg", {
390
391
  fill: "currentColor"
391
392
  })
392
393
  });
393
- /** ic_ds_refresh_outline_16 */
394
+ /** ic_ds_refresh_outline_16, inset 10%: the exported glyph fills its box edge
395
+ * to edge, one visual size above the neighbouring 16px glyphs. */
394
396
  const IconRefreshOutline16 = ({ size = 16, className }) => jsx("svg", {
395
397
  width: size,
396
398
  height: size,
@@ -399,6 +401,7 @@ const IconRefreshOutline16 = ({ size = 16, className }) => jsx("svg", {
399
401
  fill: "none",
400
402
  xmlns: "http://www.w3.org/2000/svg",
401
403
  children: jsx("path", {
404
+ transform: "translate(0.8 0.8) scale(0.9)",
402
405
  d: "M7.92136 0.349152C10.3744 0.349234 12.5564 1.5052 13.9557 3.29894L15.1281 2.12759C15.3303 1.92546 15.6767 2.06943 15.6767 2.35538V5.53923C15.6766 5.71626 15.5329 5.85976 15.3559 5.86002H12.171C11.8854 5.8597 11.7426 5.51465 11.9443 5.31249L12.9641 4.29056C11.8237 2.74305 9.98908 1.74106 7.92136 1.74097C4.46436 1.74097 1.66233 4.543 1.66233 8C1.66233 11.457 4.46436 14.259 7.92136 14.259C11.3782 14.2589 14.1804 11.4569 14.1804 8H15.5722C15.5722 12.2251 12.1465 15.6507 7.92136 15.6508C3.69614 15.6508 0.270508 12.2252 0.270508 8C0.270508 3.77478 3.69614 0.349152 7.92136 0.349152Z",
403
406
  fill: "currentColor"
404
407
  })
@@ -701,7 +704,7 @@ const IconRightUpOutline16 = ({ size = 16, className }) => jsx("svg", {
701
704
  fill: "none",
702
705
  xmlns: "http://www.w3.org/2000/svg",
703
706
  children: jsx("path", {
704
- d: "M13.588429 5.147807C13.588429 4.739638 13.587271 4.403003 13.582013 4.118684L1.703098 15.99968L0.85155 15.148178L0 14.294485L11.878915 2.413442C11.594721 2.408199 11.257569 2.409154 10.849776 2.409154H2.400594V0.000001H10.849776C11.644471 0.000001 12.338899 -0.001059 12.901622 0.059909C13.486363 0.123352 14.071136 0.265493 14.598303 0.648292C14.886598 0.857751 15.141981 1.110984 15.351433 1.399281C15.734578 1.926807 15.876362 2.512925 15.939743 3.098105C16.000775 3.660718 15.99968 4.353347 15.99968 5.147807V13.599133H13.588429V5.147807Z",
707
+ d: "M11.3822 6.28945C11.3822 6.02863 11.3815 5.81352 11.3781 5.63184L3.7875 13.2238L3.24336 12.6797L2.69922 12.1342L10.2898 4.54219C10.1083 4.53884 9.89281 4.53945 9.63223 4.53945H4.2332V3H9.63223C10.14 3 10.5838 2.99932 10.9434 3.03828C11.317 3.07882 11.6907 3.16965 12.0275 3.41426C12.2118 3.5481 12.3749 3.70992 12.5088 3.89414C12.7536 4.23123 12.8443 4.60576 12.8848 4.97969C12.9237 5.3392 12.923 5.78179 12.923 6.28945V11.6898H11.3822V6.28945Z",
705
708
  fill: "currentColor"
706
709
  })
707
710
  });
@@ -1699,13 +1702,16 @@ const MEASURE_STYLE = {
1699
1702
  };
1700
1703
  /**
1701
1704
  * Render an anchored dropdown menu.
1705
+ * @param props.autoFocus - focus the first item on open and enable arrow-key navigation; Escape focuses the anchor's first button.
1702
1706
  * @param props.open - whether the list is showing (owner-controlled).
1703
1707
  * @param props.anchor - the trigger element (rendered in place).
1704
1708
  * @param props.items - selectable rows and optional separators.
1705
1709
  * @param props.selectedId - row shown as selected.
1706
1710
  * @param props.selectedIds - rows shown as selected when a menu contains independent option groups.
1707
1711
  * @param props.onSelect - row click callback (not called for disabled rows or submenu parents that only open children).
1708
- * @param props.onClose - invoked on outside click or Escape.
1712
+ * @param props.onClose - invoked on outside click, Escape, or a window blur
1713
+ * that moved focus into an iframe (the only signal a pointerdown inside a
1714
+ * cross-origin iframe leaves).
1709
1715
  * @param props.align - list alignment against the anchor (default 'start').
1710
1716
  * @param props.side - open below (`bottom`, default) or above (`top`) the anchor.
1711
1717
  * @param props.portal - render the list into document.body, fixed-positioned
@@ -1732,7 +1738,7 @@ const MEASURE_STYLE = {
1732
1738
  * crowds the cell).
1733
1739
  * @returns anchor wrapper with the conditional list.
1734
1740
  */
1735
- function Menu({ open, anchor, items, selectedId, selectedIds, onSelect, onClose, align = "start", side = "bottom", portal = false, closeOnPointerLeave = false, dense = false, compact = false, selection = "check", getAnchorRect, footer, className }) {
1741
+ function Menu({ open, anchor, items, selectedId, selectedIds, onSelect, onClose, align = "start", side = "bottom", portal = false, closeOnPointerLeave = false, dense = false, compact = false, autoFocus = false, selection = "check", getAnchorRect, footer, className }) {
1736
1742
  const rootRef = useRef(null);
1737
1743
  const listRef = useRef(null);
1738
1744
  const [openSubmenuId, setOpenSubmenuId] = useState(null);
@@ -1789,6 +1795,9 @@ function Menu({ open, anchor, items, selectedId, selectedIds, onSelect, onClose,
1789
1795
  side,
1790
1796
  getAnchorRect
1791
1797
  ]);
1798
+ useEffect(() => {
1799
+ if (open && autoFocus) listRef.current?.querySelector("button:not(:disabled)")?.focus();
1800
+ }, [open, autoFocus]);
1792
1801
  useEffect(() => {
1793
1802
  if (!open) {
1794
1803
  setOpenSubmenuId(null);
@@ -1801,15 +1810,38 @@ function Menu({ open, anchor, items, selectedId, selectedIds, onSelect, onClose,
1801
1810
  onClose();
1802
1811
  };
1803
1812
  const onKeyDown = (e) => {
1804
- if (e.key === "Escape") onClose();
1813
+ if (e.key === "Escape") {
1814
+ onClose();
1815
+ if (autoFocus) rootRef.current?.querySelector("button")?.focus();
1816
+ }
1817
+ if (!autoFocus || ![
1818
+ "ArrowDown",
1819
+ "ArrowUp",
1820
+ "Home",
1821
+ "End"
1822
+ ].includes(e.key)) return;
1823
+ const buttons = Array.from(listRef.current?.querySelectorAll("button:not(:disabled)") ?? []);
1824
+ const index = buttons.indexOf(document.activeElement);
1825
+ if (index < 0) return;
1826
+ e.preventDefault();
1827
+ buttons[e.key === "Home" ? 0 : e.key === "End" ? buttons.length - 1 : (index + (e.key === "ArrowDown" ? 1 : -1) + buttons.length) % buttons.length]?.focus();
1828
+ };
1829
+ const onWindowBlur = () => {
1830
+ if (document.activeElement instanceof HTMLIFrameElement) onClose();
1805
1831
  };
1806
1832
  document.addEventListener("pointerdown", onPointerDown);
1807
1833
  document.addEventListener("keydown", onKeyDown);
1834
+ window.addEventListener("blur", onWindowBlur);
1808
1835
  return () => {
1809
1836
  document.removeEventListener("pointerdown", onPointerDown);
1810
1837
  document.removeEventListener("keydown", onKeyDown);
1838
+ window.removeEventListener("blur", onWindowBlur);
1811
1839
  };
1812
- }, [open, onClose]);
1840
+ }, [
1841
+ open,
1842
+ onClose,
1843
+ autoFocus
1844
+ ]);
1813
1845
  useEffect(() => {
1814
1846
  if (!open) cancelClose();
1815
1847
  }, [open, cancelClose]);
@@ -2696,9 +2728,1331 @@ function ReferenceIcon({ kind, size = 16, className }) {
2696
2728
  }
2697
2729
  }
2698
2730
  //#endregion
2699
- //#region lib/types/LinkIcon.js
2700
- /** Code, web, and data extensions: all three categories share the code glyph. */
2701
- const CODE_EXTENSIONS = new Set([
2731
+ //#region lib/types/CodeFileIcon.js
2732
+ /** Non-localizable letterforms that are part of the source-format artwork. */
2733
+ const CODE_MARKS = {
2734
+ c: "C",
2735
+ cpp: "C",
2736
+ csharp: "C",
2737
+ css: "CSS",
2738
+ env: "ENV",
2739
+ erlang: "E",
2740
+ ini: "INI",
2741
+ javascript: "JS",
2742
+ objectiveC: "OC",
2743
+ perl: "PL",
2744
+ php: "PHP",
2745
+ r: "R",
2746
+ toml: "TOML",
2747
+ typescript: "TS",
2748
+ yaml: "YAML",
2749
+ zig: "ZIG"
2750
+ };
2751
+ /**
2752
+ * Render one full-color square code-file glyph from the embedded icon set.
2753
+ * @param props - Detailed code type, optional size, and optional CSS class.
2754
+ * @returns The selected decorative SVG with its identifying palette intact.
2755
+ */
2756
+ function CodeFileIcon({ type, size = 20, className }) {
2757
+ return jsx("svg", {
2758
+ width: size,
2759
+ height: size,
2760
+ className,
2761
+ viewBox: "0 0 20 20",
2762
+ xmlns: "http://www.w3.org/2000/svg",
2763
+ "aria-hidden": true,
2764
+ children: codeFileArtwork(type, useId())
2765
+ });
2766
+ }
2767
+ function codeFileArtwork(type, gradientId) {
2768
+ switch (type) {
2769
+ case "angular": return jsxs(Fragment, { children: [
2770
+ jsx("rect", {
2771
+ x: "1",
2772
+ y: "1",
2773
+ width: "18",
2774
+ height: "18",
2775
+ rx: "4",
2776
+ fill: "#DD0031"
2777
+ }),
2778
+ jsx("path", {
2779
+ fill: "none",
2780
+ stroke: "#fff",
2781
+ strokeWidth: "1.4",
2782
+ strokeLinejoin: "round",
2783
+ d: "m10 3.4 6 2-1 8-5 3-5-3-1-8z"
2784
+ }),
2785
+ jsx("path", {
2786
+ fill: "#fff",
2787
+ d: "m10 5.3-3.7 8.2h1.9l.7-1.8h2.2l.7 1.8h1.9zm0 3.4.5 1.4h-1z"
2788
+ })
2789
+ ] });
2790
+ case "c": return jsxs(Fragment, { children: [
2791
+ jsx("rect", {
2792
+ x: "1",
2793
+ y: "1",
2794
+ width: "18",
2795
+ height: "18",
2796
+ rx: "4",
2797
+ fill: "#659AD2"
2798
+ }),
2799
+ jsx("path", {
2800
+ fill: "none",
2801
+ stroke: "#fff",
2802
+ strokeWidth: "1.3",
2803
+ strokeLinejoin: "round",
2804
+ d: "m10 3.4 6 3.3v6.6l-6 3.3-6-3.3V6.7z"
2805
+ }),
2806
+ jsx("text", {
2807
+ x: "10",
2808
+ y: "13.5",
2809
+ textAnchor: "middle",
2810
+ fontFamily: "Arial,sans-serif",
2811
+ fontSize: "9.5",
2812
+ fontWeight: "800",
2813
+ fill: "#fff",
2814
+ children: CODE_MARKS.c
2815
+ })
2816
+ ] });
2817
+ case "clojure": return jsxs(Fragment, { children: [
2818
+ jsx("rect", {
2819
+ x: "1",
2820
+ y: "1",
2821
+ width: "18",
2822
+ height: "18",
2823
+ rx: "4",
2824
+ fill: "#344D70"
2825
+ }),
2826
+ jsx("circle", {
2827
+ cx: "10",
2828
+ cy: "10",
2829
+ r: "6.6",
2830
+ fill: "#fff"
2831
+ }),
2832
+ jsx("path", {
2833
+ fill: "#63B132",
2834
+ d: "M9.5 3.5a6.5 6.5 0 0 0-4.7 10.8c1-2.6 2.5-4.3 4.3-5.3-1-1.5-.8-3.4.4-5.5z"
2835
+ }),
2836
+ jsx("path", {
2837
+ fill: "#5881D8",
2838
+ d: "M10.7 3.5c1.8 1.6 2.5 3.3 2 5.1 1.5 1.1 2.4 2.8 2.7 5.2a6.5 6.5 0 0 0-4.7-10.3z"
2839
+ }),
2840
+ jsx("path", {
2841
+ fill: "#90B4FE",
2842
+ d: "M12 9.8c-1.6.3-2.8 2.1-3.8 5.4a6.4 6.4 0 0 0 6.3-.7c-.2-2.1-1-3.7-2.5-4.7z"
2843
+ })
2844
+ ] });
2845
+ case "cmake": return jsxs(Fragment, { children: [
2846
+ jsx("rect", {
2847
+ x: "1",
2848
+ y: "1",
2849
+ width: "18",
2850
+ height: "18",
2851
+ rx: "4",
2852
+ fill: "#263A55"
2853
+ }),
2854
+ jsx("path", {
2855
+ fill: "#4D9DCC",
2856
+ d: "M10 3 4 16h4.6z"
2857
+ }),
2858
+ jsx("path", {
2859
+ fill: "#43A047",
2860
+ d: "M10 3 8.6 16H16z"
2861
+ }),
2862
+ jsx("path", {
2863
+ fill: "#E53935",
2864
+ d: "m10 3 6 13-6-5z"
2865
+ }),
2866
+ jsx("path", {
2867
+ fill: "#fff",
2868
+ d: "m10 6 2.3 5.1-2.3-1.8-.8 2.9z"
2869
+ })
2870
+ ] });
2871
+ case "cpp": return jsxs(Fragment, { children: [
2872
+ jsx("rect", {
2873
+ x: "1",
2874
+ y: "1",
2875
+ width: "18",
2876
+ height: "18",
2877
+ rx: "4",
2878
+ fill: "#00599C"
2879
+ }),
2880
+ jsx("path", {
2881
+ fill: "none",
2882
+ stroke: "#fff",
2883
+ strokeWidth: "1.15",
2884
+ strokeLinejoin: "round",
2885
+ d: "m10 3.4 6 3.3v6.6l-6 3.3-6-3.3V6.7z"
2886
+ }),
2887
+ jsx("text", {
2888
+ x: "7.8",
2889
+ y: "13",
2890
+ textAnchor: "middle",
2891
+ fontFamily: "Arial,sans-serif",
2892
+ fontSize: "8.2",
2893
+ fontWeight: "800",
2894
+ fill: "#fff",
2895
+ children: CODE_MARKS.cpp
2896
+ }),
2897
+ jsx("path", {
2898
+ stroke: "#fff",
2899
+ strokeWidth: "1.1",
2900
+ d: "M12 8.8v3.8m-1.9-1.9h3.8m2-1.9v3.8M14 10.7h3.8"
2901
+ })
2902
+ ] });
2903
+ case "csharp": return jsxs(Fragment, { children: [
2904
+ jsx("rect", {
2905
+ x: "1",
2906
+ y: "1",
2907
+ width: "18",
2908
+ height: "18",
2909
+ rx: "4",
2910
+ fill: "#68217A"
2911
+ }),
2912
+ jsx("path", {
2913
+ fill: "none",
2914
+ stroke: "#fff",
2915
+ strokeWidth: "1.15",
2916
+ strokeLinejoin: "round",
2917
+ d: "m10 3.4 6 3.3v6.6l-6 3.3-6-3.3V6.7z"
2918
+ }),
2919
+ jsx("text", {
2920
+ x: "7.6",
2921
+ y: "13",
2922
+ textAnchor: "middle",
2923
+ fontFamily: "Arial,sans-serif",
2924
+ fontSize: "8.2",
2925
+ fontWeight: "800",
2926
+ fill: "#fff",
2927
+ children: CODE_MARKS.csharp
2928
+ }),
2929
+ jsx("path", {
2930
+ stroke: "#fff",
2931
+ strokeWidth: ".95",
2932
+ d: "M11.6 8.6h5m-5 3h5m-3.3-5v7m1.8-7v7"
2933
+ })
2934
+ ] });
2935
+ case "css": return jsxs(Fragment, { children: [jsx("rect", {
2936
+ x: "1",
2937
+ y: "1",
2938
+ width: "18",
2939
+ height: "18",
2940
+ rx: "4",
2941
+ fill: "#1572B6"
2942
+ }), jsx("text", {
2943
+ x: "10",
2944
+ y: "12.8",
2945
+ textAnchor: "middle",
2946
+ fontFamily: "Arial,sans-serif",
2947
+ fontSize: "6.2",
2948
+ fontWeight: "900",
2949
+ fill: "#fff",
2950
+ children: CODE_MARKS.css
2951
+ })] });
2952
+ case "dart": return jsxs(Fragment, { children: [
2953
+ jsx("rect", {
2954
+ x: "1",
2955
+ y: "1",
2956
+ width: "18",
2957
+ height: "18",
2958
+ rx: "4",
2959
+ fill: "#0175C2"
2960
+ }),
2961
+ jsx("path", {
2962
+ fill: "#fff",
2963
+ d: "M5 4h6.5l4.5 4.5-3.2 7.5H8.5L4 11.5z"
2964
+ }),
2965
+ jsx("path", {
2966
+ fill: "#13B9FD",
2967
+ d: "m5 4 4 5.5h7L11.5 4zm4 5.5 3.8 6.5H8.5z"
2968
+ })
2969
+ ] });
2970
+ case "docker": return jsxs(Fragment, { children: [
2971
+ jsx("rect", {
2972
+ x: "1",
2973
+ y: "1",
2974
+ width: "18",
2975
+ height: "18",
2976
+ rx: "4",
2977
+ fill: "#2496ED"
2978
+ }),
2979
+ jsx("path", {
2980
+ fill: "#fff",
2981
+ d: "M3 10h11.7c.2-1.2.9-2 2-2.5.5 1 .4 2-.3 2.7.5.1 1 .1 1.5-.1-.7 3.9-3.6 5.9-8.2 5.9C6 16 3.4 14 3 10z"
2982
+ }),
2983
+ jsx("g", {
2984
+ fill: "#2496ED",
2985
+ children: jsx("path", { d: "M4.5 7h2v2h-2zm2.6 0h2v2h-2zm2.6 0h2v2h-2zM7.1 4.5h2v2h-2zm2.6 0h2v2h-2zm2.6 2.5h2v2h-2z" })
2986
+ })
2987
+ ] });
2988
+ case "elixir": return jsxs(Fragment, { children: [
2989
+ jsx("defs", { children: jsxs("linearGradient", {
2990
+ id: gradientId,
2991
+ x1: "1",
2992
+ y1: "19",
2993
+ x2: "19",
2994
+ y2: "1",
2995
+ children: [jsx("stop", { stopColor: "#4B275F" }), jsx("stop", {
2996
+ offset: "1",
2997
+ stopColor: "#8E6AAF"
2998
+ })]
2999
+ }) }),
3000
+ jsx("rect", {
3001
+ x: "1",
3002
+ y: "1",
3003
+ width: "18",
3004
+ height: "18",
3005
+ rx: "4",
3006
+ fill: `url(#${gradientId})`
3007
+ }),
3008
+ jsx("path", {
3009
+ fill: "#fff",
3010
+ d: "M10.7 3c.2 3.5-4.3 5.8-4.3 9.4 0 2.9 1.8 4.9 4.4 4.9 2.8 0 4.7-1.9 4.7-4.6 0-4.3-3.4-7-4.8-9.7z"
3011
+ }),
3012
+ jsx("path", {
3013
+ fill: "#8E6AAF",
3014
+ d: "M10.7 4.8c-.4 3.1-3 5.4-3 7.8 0 1.5.7 2.6 1.9 3-1-3.6 2.8-5.8 1.1-10.8z"
3015
+ })
3016
+ ] });
3017
+ case "env": return jsxs(Fragment, { children: [jsx("rect", {
3018
+ x: "1",
3019
+ y: "1",
3020
+ width: "18",
3021
+ height: "18",
3022
+ rx: "4",
3023
+ fill: "#ECD53F"
3024
+ }), jsx("text", {
3025
+ x: "10",
3026
+ y: "13.2",
3027
+ textAnchor: "middle",
3028
+ fontFamily: "Arial,sans-serif",
3029
+ fontSize: "6.8",
3030
+ fontWeight: "900",
3031
+ fill: "#24292F",
3032
+ children: CODE_MARKS.env
3033
+ })] });
3034
+ case "erlang": return jsxs(Fragment, { children: [
3035
+ jsx("rect", {
3036
+ x: "1",
3037
+ y: "1",
3038
+ width: "18",
3039
+ height: "18",
3040
+ rx: "4",
3041
+ fill: "#A90533"
3042
+ }),
3043
+ jsx("circle", {
3044
+ cx: "10",
3045
+ cy: "10",
3046
+ r: "6.4",
3047
+ fill: "none",
3048
+ stroke: "#fff",
3049
+ strokeWidth: "1"
3050
+ }),
3051
+ jsx("text", {
3052
+ x: "10",
3053
+ y: "13.8",
3054
+ textAnchor: "middle",
3055
+ fontFamily: "Georgia,serif",
3056
+ fontSize: "10.5",
3057
+ fontWeight: "700",
3058
+ fill: "#fff",
3059
+ children: CODE_MARKS.erlang
3060
+ })
3061
+ ] });
3062
+ case "flutter": return jsxs(Fragment, { children: [
3063
+ jsx("rect", {
3064
+ x: "1",
3065
+ y: "1",
3066
+ width: "18",
3067
+ height: "18",
3068
+ rx: "4",
3069
+ fill: "#027DFD"
3070
+ }),
3071
+ jsx("path", {
3072
+ fill: "#fff",
3073
+ d: "m4 10 6-6h4L8 10zm4 0 2.5-2.5H14L11.5 10l2.5 2.5h-3.5z"
3074
+ }),
3075
+ jsx("path", {
3076
+ fill: "#B9E6FF",
3077
+ d: "m8 10 4.5 4.5-2 2L4 10z"
3078
+ })
3079
+ ] });
3080
+ case "git": return jsxs(Fragment, { children: [
3081
+ jsx("rect", {
3082
+ x: "1",
3083
+ y: "1",
3084
+ width: "18",
3085
+ height: "18",
3086
+ rx: "4",
3087
+ fill: "#F05032"
3088
+ }),
3089
+ jsx("rect", {
3090
+ x: "5",
3091
+ y: "5",
3092
+ width: "10",
3093
+ height: "10",
3094
+ rx: "1.4",
3095
+ transform: "rotate(45 10 10)",
3096
+ fill: "#fff"
3097
+ }),
3098
+ jsx("path", {
3099
+ d: "m7.7 7.4 4.9 4.9M9.9 9.6v3.6",
3100
+ fill: "none",
3101
+ stroke: "#F05032",
3102
+ strokeWidth: "1.15"
3103
+ }),
3104
+ jsx("circle", {
3105
+ cx: "7.7",
3106
+ cy: "7.4",
3107
+ r: "1.1",
3108
+ fill: "#F05032"
3109
+ }),
3110
+ jsx("circle", {
3111
+ cx: "12.6",
3112
+ cy: "12.3",
3113
+ r: "1.1",
3114
+ fill: "#F05032"
3115
+ }),
3116
+ jsx("circle", {
3117
+ cx: "9.9",
3118
+ cy: "13.2",
3119
+ r: "1.1",
3120
+ fill: "#F05032"
3121
+ })
3122
+ ] });
3123
+ case "go": return jsxs(Fragment, { children: [jsx("rect", {
3124
+ x: "1",
3125
+ y: "1",
3126
+ width: "18",
3127
+ height: "18",
3128
+ rx: "4",
3129
+ fill: "#00ADD8"
3130
+ }), jsx("path", {
3131
+ fill: "#fff",
3132
+ d: "M3.5 8h6v1.6H5.2a2 2 0 0 0 0 .8h2.4v-.5H6.8V8.7h3.7c.3 3-1 4.4-3.6 4.4S3 11.7 3 9.7c0-.6.2-1.2.5-1.7Zm9.3 0h1.7c1.6 0 2.5 1 2.5 2.5s-.9 2.6-2.5 2.6h-1.7c-1.6 0-2.5-1-2.5-2.6S11.2 8 12.8 8Zm.3 1.6c-.7 0-1 .3-1 .9s.3 1 1 1h1.1c.7 0 1-.4 1-1s-.3-.9-1-.9z"
3133
+ })] });
3134
+ case "graphql": return jsxs(Fragment, { children: [
3135
+ jsx("rect", {
3136
+ x: "1",
3137
+ y: "1",
3138
+ width: "18",
3139
+ height: "18",
3140
+ rx: "4",
3141
+ fill: "#E10098"
3142
+ }),
3143
+ jsx("path", {
3144
+ d: "m10 4 5.2 3v6L10 16l-5.2-3V7zm-5 3.2h10M5 12.8h10M10 4l5 8.8M10 4l-5 8.8M10 16 5 7.2m5 8.8 5-8.8",
3145
+ stroke: "#fff",
3146
+ strokeWidth: ".8"
3147
+ }),
3148
+ jsxs("g", {
3149
+ fill: "#fff",
3150
+ children: [
3151
+ jsx("circle", {
3152
+ cx: "10",
3153
+ cy: "4",
3154
+ r: "1"
3155
+ }),
3156
+ jsx("circle", {
3157
+ cx: "15.2",
3158
+ cy: "7",
3159
+ r: "1"
3160
+ }),
3161
+ jsx("circle", {
3162
+ cx: "15.2",
3163
+ cy: "13",
3164
+ r: "1"
3165
+ }),
3166
+ jsx("circle", {
3167
+ cx: "10",
3168
+ cy: "16",
3169
+ r: "1"
3170
+ }),
3171
+ jsx("circle", {
3172
+ cx: "4.8",
3173
+ cy: "13",
3174
+ r: "1"
3175
+ }),
3176
+ jsx("circle", {
3177
+ cx: "4.8",
3178
+ cy: "7",
3179
+ r: "1"
3180
+ })
3181
+ ]
3182
+ })
3183
+ ] });
3184
+ case "haskell": return jsxs(Fragment, { children: [jsx("rect", {
3185
+ x: "1",
3186
+ y: "1",
3187
+ width: "18",
3188
+ height: "18",
3189
+ rx: "4",
3190
+ fill: "#5D4F85"
3191
+ }), jsx("path", {
3192
+ fill: "#fff",
3193
+ d: "m3.5 4.5 3.5 5.5-3.5 5.5h2.7L9.8 10 6.2 4.5zm4 0L11 10l-3.5 5.5h2.7l3.5-5.5-3.5-5.5zm5 3.1 1 1.6H17V7.6zm1.4 3 1 1.7H17v-1.7z"
3194
+ })] });
3195
+ case "ini": return jsxs(Fragment, { children: [jsx("rect", {
3196
+ x: "1",
3197
+ y: "1",
3198
+ width: "18",
3199
+ height: "18",
3200
+ rx: "4",
3201
+ fill: "#6E7781"
3202
+ }), jsx("text", {
3203
+ x: "10",
3204
+ y: "13.2",
3205
+ textAnchor: "middle",
3206
+ fontFamily: "Arial,sans-serif",
3207
+ fontSize: "7.2",
3208
+ fontWeight: "800",
3209
+ fill: "#fff",
3210
+ children: CODE_MARKS.ini
3211
+ })] });
3212
+ case "java": return jsxs(Fragment, { children: [
3213
+ jsx("rect", {
3214
+ x: "1",
3215
+ y: "1",
3216
+ width: "18",
3217
+ height: "18",
3218
+ rx: "4",
3219
+ fill: "#427A9B"
3220
+ }),
3221
+ jsx("path", {
3222
+ d: "M9 3.1c2.3 1.7-2.4 2.5.5 4.5m2-4.9c2.3 1.9-3.2 2.9-.2 5",
3223
+ stroke: "#FF6B57",
3224
+ strokeWidth: "1.15",
3225
+ strokeLinecap: "round"
3226
+ }),
3227
+ jsx("path", {
3228
+ d: "M5.4 8.6h8c-.2 3.7-1.3 4.8-4 4.8-2.6 0-3.8-1.2-4-4.8Zm7.8 1h1c1.6 0 1.6 2.5-.5 2.5M4.7 14.8c2.5.8 7.5.8 10.1 0M5.7 16.5c2 .5 6.3.6 8.3 0",
3229
+ stroke: "#fff",
3230
+ strokeWidth: "1.05",
3231
+ strokeLinecap: "round"
3232
+ })
3233
+ ] });
3234
+ case "javascript": return jsxs(Fragment, { children: [jsx("rect", {
3235
+ x: "1",
3236
+ y: "1",
3237
+ width: "18",
3238
+ height: "18",
3239
+ rx: "4",
3240
+ fill: "#F7DF1E"
3241
+ }), jsx("text", {
3242
+ x: "10",
3243
+ y: "14",
3244
+ textAnchor: "middle",
3245
+ fontFamily: "Arial,sans-serif",
3246
+ fontSize: "8.4",
3247
+ fontWeight: "800",
3248
+ fill: "#191919",
3249
+ children: CODE_MARKS.javascript
3250
+ })] });
3251
+ case "json": return jsxs(Fragment, { children: [jsx("rect", {
3252
+ x: "1",
3253
+ y: "1",
3254
+ width: "18",
3255
+ height: "18",
3256
+ rx: "4",
3257
+ fill: "#4A4A4A"
3258
+ }), jsx("text", {
3259
+ x: "10",
3260
+ y: "13.6",
3261
+ textAnchor: "middle",
3262
+ fontFamily: "Arial,sans-serif",
3263
+ fontSize: "9.4",
3264
+ fontWeight: "700",
3265
+ fill: "#F7DF1E",
3266
+ children: "{ }"
3267
+ })] });
3268
+ case "kotlin": return jsxs(Fragment, { children: [
3269
+ jsx("defs", { children: jsxs("linearGradient", {
3270
+ id: gradientId,
3271
+ x1: "1",
3272
+ y1: "19",
3273
+ x2: "19",
3274
+ y2: "1",
3275
+ children: [
3276
+ jsx("stop", { stopColor: "#0095D5" }),
3277
+ jsx("stop", {
3278
+ offset: ".5",
3279
+ stopColor: "#7F52FF"
3280
+ }),
3281
+ jsx("stop", {
3282
+ offset: "1",
3283
+ stopColor: "#F88909"
3284
+ })
3285
+ ]
3286
+ }) }),
3287
+ jsx("rect", {
3288
+ x: "1",
3289
+ y: "1",
3290
+ width: "18",
3291
+ height: "18",
3292
+ rx: "4",
3293
+ fill: `url(#${gradientId})`
3294
+ }),
3295
+ jsx("path", {
3296
+ fill: "#fff",
3297
+ d: "M5 5h2.2v4.1L11.1 5h3l-4.6 4.6 5 5.4h-3l-3.6-4-.7.7V15H5z"
3298
+ })
3299
+ ] });
3300
+ case "lua": return jsxs(Fragment, { children: [
3301
+ jsx("rect", {
3302
+ x: "1",
3303
+ y: "1",
3304
+ width: "18",
3305
+ height: "18",
3306
+ rx: "4",
3307
+ fill: "#000080"
3308
+ }),
3309
+ jsx("circle", {
3310
+ cx: "9",
3311
+ cy: "11",
3312
+ r: "5.7",
3313
+ fill: "none",
3314
+ stroke: "#fff",
3315
+ strokeWidth: "1"
3316
+ }),
3317
+ jsx("circle", {
3318
+ cx: "13.1",
3319
+ cy: "6.6",
3320
+ r: "2.3",
3321
+ fill: "#000080",
3322
+ stroke: "#fff",
3323
+ strokeWidth: "1"
3324
+ }),
3325
+ jsx("circle", {
3326
+ cx: "13.8",
3327
+ cy: "5.9",
3328
+ r: ".65",
3329
+ fill: "#fff"
3330
+ }),
3331
+ jsx("circle", {
3332
+ cx: "10.7",
3333
+ cy: "9",
3334
+ r: ".9",
3335
+ fill: "#fff"
3336
+ })
3337
+ ] });
3338
+ case "makefile": return jsxs(Fragment, { children: [jsx("rect", {
3339
+ x: "1",
3340
+ y: "1",
3341
+ width: "18",
3342
+ height: "18",
3343
+ rx: "4",
3344
+ fill: "#427819"
3345
+ }), jsx("path", {
3346
+ fill: "#fff",
3347
+ d: "m5 4.5 2.3 2.3 2.3-2.3L11 5.9 8.7 8.2l2.4 2.4L9.7 12l-2.4-2.4L5 11.9 3.6 10.5l2.3-2.3-2.3-2.3zm7 6.5h4v1.5h-4zm0 2.8h4v1.5h-4z"
3348
+ })] });
3349
+ case "node": return jsxs(Fragment, { children: [
3350
+ jsx("rect", {
3351
+ x: "1",
3352
+ y: "1",
3353
+ width: "18",
3354
+ height: "18",
3355
+ rx: "4",
3356
+ fill: "#539E43"
3357
+ }),
3358
+ jsx("path", {
3359
+ fill: "none",
3360
+ stroke: "#fff",
3361
+ strokeWidth: "1.35",
3362
+ strokeLinejoin: "round",
3363
+ d: "m10 3.5 6 3.3v6.4l-6 3.3-6-3.3V6.8z"
3364
+ }),
3365
+ jsx("path", {
3366
+ fill: "#fff",
3367
+ d: "M6.8 7h1.8l2.8 4.2V7h1.8v6h-1.8L8.6 8.8V13H6.8z"
3368
+ })
3369
+ ] });
3370
+ case "objective-c": return jsxs(Fragment, { children: [jsx("rect", {
3371
+ x: "1",
3372
+ y: "1",
3373
+ width: "18",
3374
+ height: "18",
3375
+ rx: "4",
3376
+ fill: "#438EFF"
3377
+ }), jsx("text", {
3378
+ x: "10",
3379
+ y: "13.2",
3380
+ textAnchor: "middle",
3381
+ fontFamily: "Arial,sans-serif",
3382
+ fontSize: "7.2",
3383
+ fontWeight: "800",
3384
+ fill: "#fff",
3385
+ children: CODE_MARKS.objectiveC
3386
+ })] });
3387
+ case "perl": return jsxs(Fragment, { children: [jsx("rect", {
3388
+ x: "1",
3389
+ y: "1",
3390
+ width: "18",
3391
+ height: "18",
3392
+ rx: "4",
3393
+ fill: "#39457E"
3394
+ }), jsx("text", {
3395
+ x: "10",
3396
+ y: "13.3",
3397
+ textAnchor: "middle",
3398
+ fontFamily: "Arial,sans-serif",
3399
+ fontSize: "7.8",
3400
+ fontWeight: "800",
3401
+ fill: "#fff",
3402
+ children: CODE_MARKS.perl
3403
+ })] });
3404
+ case "php": return jsxs(Fragment, { children: [
3405
+ jsx("rect", {
3406
+ x: "1",
3407
+ y: "1",
3408
+ width: "18",
3409
+ height: "18",
3410
+ rx: "4",
3411
+ fill: "#777BB4"
3412
+ }),
3413
+ jsx("ellipse", {
3414
+ cx: "10",
3415
+ cy: "10",
3416
+ rx: "7",
3417
+ ry: "4.5",
3418
+ fill: "none",
3419
+ stroke: "#fff",
3420
+ strokeWidth: "1"
3421
+ }),
3422
+ jsx("text", {
3423
+ x: "10",
3424
+ y: "12.1",
3425
+ textAnchor: "middle",
3426
+ fontFamily: "Arial,sans-serif",
3427
+ fontSize: "5.8",
3428
+ fontStyle: "italic",
3429
+ fontWeight: "800",
3430
+ fill: "#fff",
3431
+ children: CODE_MARKS.php
3432
+ })
3433
+ ] });
3434
+ case "powershell": return jsxs(Fragment, { children: [
3435
+ jsx("rect", {
3436
+ x: "1",
3437
+ y: "1",
3438
+ width: "18",
3439
+ height: "18",
3440
+ rx: "4",
3441
+ fill: "#2671BE"
3442
+ }),
3443
+ jsx("path", {
3444
+ fill: "#fff",
3445
+ fillOpacity: ".16",
3446
+ d: "M5.5 4h11l-3.5 12H2z"
3447
+ }),
3448
+ jsx("path", {
3449
+ d: "m6.5 6.5 3 3-4.2 3.2m4 1h4",
3450
+ fill: "none",
3451
+ stroke: "#fff",
3452
+ strokeWidth: "1.4",
3453
+ strokeLinecap: "round",
3454
+ strokeLinejoin: "round"
3455
+ })
3456
+ ] });
3457
+ case "protobuf": return jsxs(Fragment, { children: [
3458
+ jsx("rect", {
3459
+ x: "1",
3460
+ y: "1",
3461
+ width: "18",
3462
+ height: "18",
3463
+ rx: "4",
3464
+ fill: "#4285F4"
3465
+ }),
3466
+ jsx("path", {
3467
+ fill: "none",
3468
+ stroke: "#fff",
3469
+ strokeWidth: "1.2",
3470
+ strokeLinejoin: "round",
3471
+ d: "m10 3.5 6 3.3v6.4l-6 3.3-6-3.3V6.8z"
3472
+ }),
3473
+ jsx("path", {
3474
+ fill: "#fff",
3475
+ d: "M6.5 6.5h4.4c2.3 0 3.6 1.2 3.6 3.1s-1.3 3.1-3.6 3.1H9v2H6.5zM9 8.4v2.4h1.6c.8 0 1.2-.4 1.2-1.2s-.4-1.2-1.2-1.2z"
3476
+ })
3477
+ ] });
3478
+ case "python": return jsxs(Fragment, { children: [
3479
+ jsx("rect", {
3480
+ x: "1",
3481
+ y: "1",
3482
+ width: "18",
3483
+ height: "18",
3484
+ rx: "4",
3485
+ fill: "#306998"
3486
+ }),
3487
+ jsx("path", {
3488
+ fill: "#fff",
3489
+ d: "M9.8 3.2c-3.5 0-3.6 1.5-3.6 1.5v2.5H10V8H5s-2.2-.2-2.2 3.3 2 3.4 2 3.4h1.8v-2.6c0-2 1.8-2.4 3.2-2.4H13c1.8 0 2.4-1.4 2.4-3.2S13.8 3.2 12 3.2z"
3490
+ }),
3491
+ jsx("circle", {
3492
+ cx: "8.1",
3493
+ cy: "5.1",
3494
+ r: ".65",
3495
+ fill: "#306998"
3496
+ }),
3497
+ jsx("path", {
3498
+ fill: "#FFD43B",
3499
+ d: "M10.2 16.8c3.5 0 3.6-1.5 3.6-1.5v-2.5H10V12h5s2.2.2 2.2-3.3-2-3.4-2-3.4h-1.8v2.6c0 2-1.8 2.4-3.2 2.4H7c-1.8 0-2.4 1.4-2.4 3.2s1.6 3.3 3.4 3.3z"
3500
+ }),
3501
+ jsx("circle", {
3502
+ cx: "11.9",
3503
+ cy: "14.9",
3504
+ r: ".65",
3505
+ fill: "#306998"
3506
+ })
3507
+ ] });
3508
+ case "r": return jsxs(Fragment, { children: [
3509
+ jsx("rect", {
3510
+ x: "1",
3511
+ y: "1",
3512
+ width: "18",
3513
+ height: "18",
3514
+ rx: "4",
3515
+ fill: "#276DC3"
3516
+ }),
3517
+ jsx("ellipse", {
3518
+ cx: "9",
3519
+ cy: "9.4",
3520
+ rx: "6.4",
3521
+ ry: "4.5",
3522
+ fill: "#fff",
3523
+ fillOpacity: ".9"
3524
+ }),
3525
+ jsx("ellipse", {
3526
+ cx: "8.3",
3527
+ cy: "8.9",
3528
+ rx: "4.5",
3529
+ ry: "2.8",
3530
+ fill: "#276DC3"
3531
+ }),
3532
+ jsx("path", {
3533
+ fill: "#fff",
3534
+ d: "M8 7h4c2.2 0 3.4.9 3.4 2.5 0 1-.6 1.7-1.7 2.1l2.5 4.1h-2.7l-2-3.7h-.9v3.7H8zm2.6 1.9v1.4h1c.7 0 1.1-.2 1.1-.7s-.4-.7-1.1-.7z"
3535
+ })
3536
+ ] });
3537
+ case "react": return jsxs(Fragment, { children: [
3538
+ jsx("rect", {
3539
+ x: "1",
3540
+ y: "1",
3541
+ width: "18",
3542
+ height: "18",
3543
+ rx: "4",
3544
+ fill: "#20232A"
3545
+ }),
3546
+ jsx("circle", {
3547
+ cx: "10",
3548
+ cy: "10",
3549
+ r: "1.4",
3550
+ fill: "#61DAFB"
3551
+ }),
3552
+ jsxs("g", {
3553
+ stroke: "#61DAFB",
3554
+ strokeWidth: "1",
3555
+ children: [
3556
+ jsx("ellipse", {
3557
+ cx: "10",
3558
+ cy: "10",
3559
+ rx: "6.8",
3560
+ ry: "2.7"
3561
+ }),
3562
+ jsx("ellipse", {
3563
+ cx: "10",
3564
+ cy: "10",
3565
+ rx: "6.8",
3566
+ ry: "2.7",
3567
+ transform: "rotate(60 10 10)"
3568
+ }),
3569
+ jsx("ellipse", {
3570
+ cx: "10",
3571
+ cy: "10",
3572
+ rx: "6.8",
3573
+ ry: "2.7",
3574
+ transform: "rotate(120 10 10)"
3575
+ })
3576
+ ]
3577
+ })
3578
+ ] });
3579
+ case "ruby": return jsxs(Fragment, { children: [
3580
+ jsx("rect", {
3581
+ x: "1",
3582
+ y: "1",
3583
+ width: "18",
3584
+ height: "18",
3585
+ rx: "4",
3586
+ fill: "#B51F27"
3587
+ }),
3588
+ jsx("path", {
3589
+ fill: "#fff",
3590
+ d: "m4 7 3-3h6l3 3-6 9-6-6z"
3591
+ }),
3592
+ jsx("path", {
3593
+ fill: "#F15A4A",
3594
+ d: "m7 4 1.8 3H4zm1.8 3L13 4l3 3zm0 0L10 16 4 10zm0 0H16l-6 9z"
3595
+ })
3596
+ ] });
3597
+ case "rust": return jsxs(Fragment, { children: [
3598
+ jsx("rect", {
3599
+ x: "1",
3600
+ y: "1",
3601
+ width: "18",
3602
+ height: "18",
3603
+ rx: "4",
3604
+ fill: "#2B2B2B"
3605
+ }),
3606
+ jsx("path", {
3607
+ fill: "#DEA584",
3608
+ d: "m10 2.8.7 1.3 1.4-.4.1 1.5 1.5.2-.6 1.4 1.3.8-.1.1 1.4.7-.9 1.2 1 1.1-1.2.8.6 1.3-1.4.4.3 1.5-1.5.1-.4 1.4-1.3-.5-.9 1.2-.9-1.2-1.3.5-.4-1.4-1.5-.1.3-1.5-1.4-.4.6-1.3-1.2-.8 1-1.1-.9-1.2 1.4-.7-.1-.1 1.3-.8-.6-1.4 1.5-.2.1-1.5 1.4.4z"
3609
+ }),
3610
+ jsx("circle", {
3611
+ cx: "10",
3612
+ cy: "10",
3613
+ r: "4.6",
3614
+ fill: "#2B2B2B"
3615
+ }),
3616
+ jsx("text", {
3617
+ x: "10",
3618
+ y: "13.1",
3619
+ textAnchor: "middle",
3620
+ fontFamily: "Georgia,serif",
3621
+ fontSize: "8.2",
3622
+ fontWeight: "700",
3623
+ fill: "#DEA584",
3624
+ children: CODE_MARKS.r
3625
+ })
3626
+ ] });
3627
+ case "scala": return jsxs(Fragment, { children: [jsx("rect", {
3628
+ x: "1",
3629
+ y: "1",
3630
+ width: "18",
3631
+ height: "18",
3632
+ rx: "4",
3633
+ fill: "#DE3423"
3634
+ }), jsx("path", {
3635
+ fill: "#fff",
3636
+ d: "M5 4.2c3.3 1.1 6.7-.3 10-.9v3.3c-3.3.5-6.7 2-10 .8zm0 4.7c3.3 1.2 6.7-.3 10-.8v3.3c-3.3.5-6.7 1.9-10 .8zm0 4.7c3.3 1.2 6.7-.3 10-.8v3.3c-3.3.5-6.7 1.9-10 .8z"
3637
+ })] });
3638
+ case "shell": return jsxs(Fragment, { children: [jsx("rect", {
3639
+ x: "1",
3640
+ y: "1",
3641
+ width: "18",
3642
+ height: "18",
3643
+ rx: "4",
3644
+ fill: "#303642"
3645
+ }), jsx("path", {
3646
+ d: "m5 6.5 3.5 3.5L5 13.5m5 0h5",
3647
+ fill: "none",
3648
+ stroke: "#7EE787",
3649
+ strokeWidth: "1.5",
3650
+ strokeLinecap: "round",
3651
+ strokeLinejoin: "round"
3652
+ })] });
3653
+ case "solidity": return jsxs(Fragment, { children: [jsx("rect", {
3654
+ x: "1",
3655
+ y: "1",
3656
+ width: "18",
3657
+ height: "18",
3658
+ rx: "4",
3659
+ fill: "#555"
3660
+ }), jsx("path", {
3661
+ fill: "#fff",
3662
+ d: "M7.2 3.2h5.6L10 8zm-.5.8 2.8 4.8H4zm6.6 0L16 8.8h-5.5zM4 10.3h5.5l-2.8 4.8zm6.5 0H16l-2.7 4.8zM10 11.2l2.8 4.8H7.2z"
3663
+ })] });
3664
+ case "sql": return jsxs(Fragment, { children: [
3665
+ jsx("rect", {
3666
+ x: "1",
3667
+ y: "1",
3668
+ width: "18",
3669
+ height: "18",
3670
+ rx: "4",
3671
+ fill: "#336791"
3672
+ }),
3673
+ jsx("ellipse", {
3674
+ cx: "10",
3675
+ cy: "5.5",
3676
+ rx: "5.8",
3677
+ ry: "2.1",
3678
+ fill: "#fff"
3679
+ }),
3680
+ jsx("path", {
3681
+ fill: "#fff",
3682
+ fillOpacity: ".88",
3683
+ d: "M4.2 5.5v8.9c0 1.2 2.6 2.1 5.8 2.1s5.8-.9 5.8-2.1V5.5c0 1.2-2.6 2.1-5.8 2.1s-5.8-.9-5.8-2.1z"
3684
+ }),
3685
+ jsx("path", {
3686
+ d: "M4.2 9.2c0 1.2 2.6 2.1 5.8 2.1s5.8-.9 5.8-2.1M4.2 12.9c0 1.2 2.6 2.1 5.8 2.1s5.8-.9 5.8-2.1",
3687
+ fill: "none",
3688
+ stroke: "#336791",
3689
+ strokeOpacity: ".7",
3690
+ strokeWidth: ".7"
3691
+ })
3692
+ ] });
3693
+ case "svelte": return jsxs(Fragment, { children: [
3694
+ jsx("rect", {
3695
+ x: "1",
3696
+ y: "1",
3697
+ width: "18",
3698
+ height: "18",
3699
+ rx: "4",
3700
+ fill: "#FF3E00"
3701
+ }),
3702
+ jsx("path", {
3703
+ d: "M13.9 6.1c-.9-1.1-2.6-1.4-3.8-.7L7 7.4c-1.2.8-1.5 2.4-.7 3.6.7 1 2 1.4 3.1 1l3-1.2c.5-.2 1 .1 1.2.5.2.4 0 .9-.4 1.2l-3.1 2c-.5.3-1.1.2-1.5-.2",
3704
+ stroke: "#fff",
3705
+ strokeWidth: "1.6",
3706
+ strokeLinecap: "round"
3707
+ }),
3708
+ jsx("path", {
3709
+ d: "M6.1 13.9c.9 1.1 2.6 1.4 3.8.7l3.1-2c1.2-.8 1.5-2.4.7-3.6-.7-1-2-1.4-3.1-1l-3 1.2c-.5.2-1-.1-1.2-.5-.2-.4 0-.9.4-1.2l3.1-2c.5-.3 1.1-.2 1.5.2",
3710
+ stroke: "#fff",
3711
+ strokeWidth: "1.6",
3712
+ strokeLinecap: "round"
3713
+ })
3714
+ ] });
3715
+ case "swift": return jsxs(Fragment, { children: [jsx("rect", {
3716
+ x: "1",
3717
+ y: "1",
3718
+ width: "18",
3719
+ height: "18",
3720
+ rx: "4",
3721
+ fill: "#F05138"
3722
+ }), jsx("path", {
3723
+ fill: "#fff",
3724
+ d: "M15.9 14.9c.3-3.6-1.2-6.2-3.8-8.4 1.1 1.5 1.7 2.9 1.9 4.1C10.9 8.4 8 6 5.4 3.7c1.6 2.3 3.4 4.4 5.4 6.2-1.7-1-3.5-2.2-5.6-3.7 2.3 3 4.7 5.1 7.3 6.1-2 .9-4.5.7-7.2-.8 2.2 3.2 5.6 4.1 8.3 2.4.8.4 1.6.8 2.3 1z"
3725
+ })] });
3726
+ case "toml": return jsxs(Fragment, { children: [jsx("rect", {
3727
+ x: "1",
3728
+ y: "1",
3729
+ width: "18",
3730
+ height: "18",
3731
+ rx: "4",
3732
+ fill: "#9C4121"
3733
+ }), jsx("text", {
3734
+ x: "10",
3735
+ y: "12.9",
3736
+ textAnchor: "middle",
3737
+ fontFamily: "Arial,sans-serif",
3738
+ fontSize: "5.6",
3739
+ fontWeight: "800",
3740
+ fill: "#fff",
3741
+ children: CODE_MARKS.toml
3742
+ })] });
3743
+ case "typescript": return jsxs(Fragment, { children: [jsx("rect", {
3744
+ x: "1",
3745
+ y: "1",
3746
+ width: "18",
3747
+ height: "18",
3748
+ rx: "4",
3749
+ fill: "#3178C6"
3750
+ }), jsx("text", {
3751
+ x: "10",
3752
+ y: "14",
3753
+ textAnchor: "middle",
3754
+ fontFamily: "Arial,sans-serif",
3755
+ fontSize: "8.4",
3756
+ fontWeight: "800",
3757
+ fill: "#fff",
3758
+ children: CODE_MARKS.typescript
3759
+ })] });
3760
+ case "vue": return jsxs(Fragment, { children: [
3761
+ jsx("rect", {
3762
+ x: "1",
3763
+ y: "1",
3764
+ width: "18",
3765
+ height: "18",
3766
+ rx: "4",
3767
+ fill: "#41B883"
3768
+ }),
3769
+ jsx("path", {
3770
+ fill: "#fff",
3771
+ d: "M3.5 5h3.2l3.3 5.7L13.3 5h3.2L10 16z"
3772
+ }),
3773
+ jsx("path", {
3774
+ fill: "#35495E",
3775
+ d: "M6.7 5H9l1 1.8L11 5h2.3L10 10.7z"
3776
+ })
3777
+ ] });
3778
+ case "wasm": return jsxs(Fragment, { children: [jsx("rect", {
3779
+ x: "1",
3780
+ y: "1",
3781
+ width: "18",
3782
+ height: "18",
3783
+ rx: "4",
3784
+ fill: "#654FF0"
3785
+ }), jsx("path", {
3786
+ fill: "#fff",
3787
+ d: "M4 6h2l.8 5.1L8 7h2l1.2 4.1L12 6h2l-1.7 8h-2l-1.3-4-1.3 4h-2zm10.5 0H17v8h-2V8h-.5z"
3788
+ })] });
3789
+ case "xml": return jsxs(Fragment, { children: [jsx("rect", {
3790
+ x: "1",
3791
+ y: "1",
3792
+ width: "18",
3793
+ height: "18",
3794
+ rx: "4",
3795
+ fill: "#F28C28"
3796
+ }), jsx("path", {
3797
+ d: "m7.5 6-4 4 4 4m5-8 4 4-4 4M11 5 9 15",
3798
+ fill: "none",
3799
+ stroke: "#fff",
3800
+ strokeWidth: "1.5",
3801
+ strokeLinecap: "round",
3802
+ strokeLinejoin: "round"
3803
+ })] });
3804
+ case "yaml": return jsxs(Fragment, { children: [jsx("rect", {
3805
+ x: "1",
3806
+ y: "1",
3807
+ width: "18",
3808
+ height: "18",
3809
+ rx: "4",
3810
+ fill: "#CB171E"
3811
+ }), jsx("text", {
3812
+ x: "10",
3813
+ y: "12.9",
3814
+ textAnchor: "middle",
3815
+ fontFamily: "Arial,sans-serif",
3816
+ fontSize: "5.6",
3817
+ fontWeight: "800",
3818
+ fill: "#fff",
3819
+ children: CODE_MARKS.yaml
3820
+ })] });
3821
+ case "zig": return jsxs(Fragment, { children: [
3822
+ jsx("rect", {
3823
+ x: "1",
3824
+ y: "1",
3825
+ width: "18",
3826
+ height: "18",
3827
+ rx: "4",
3828
+ fill: "#F7A41D"
3829
+ }),
3830
+ jsx("path", {
3831
+ fill: "#fff",
3832
+ d: "M3.5 6h4L6 7.5h5L7.5 12h5L11 14h5.5l-.8-3 1-5h-4.4L14 7.5h-3.7L13 4.2H6L7.3 6z"
3833
+ }),
3834
+ jsx("text", {
3835
+ x: "10",
3836
+ y: "12.2",
3837
+ textAnchor: "middle",
3838
+ fontFamily: "Arial,sans-serif",
3839
+ fontSize: "4.6",
3840
+ fontWeight: "900",
3841
+ fill: "#F7A41D",
3842
+ children: CODE_MARKS.zig
3843
+ })
3844
+ ] });
3845
+ /* v8 ignore next -- closed-union backstop; only reached if a type is forged */
3846
+ default: return assertNever$3(type);
3847
+ }
3848
+ }
3849
+ /** Closed-union exhaustiveness guard for the embedded artwork table. */
3850
+ /* v8 ignore next 3 -- only reachable when an untyped caller forges a code file type */
3851
+ function assertNever$3(value) {
3852
+ throw new Error(`unreachable code file type: ${String(value)}`);
3853
+ }
3854
+ const CODE_FILE_TYPE_SET = new Set([
3855
+ "angular",
3856
+ "c",
3857
+ "clojure",
3858
+ "cmake",
3859
+ "cpp",
3860
+ "csharp",
3861
+ "css",
3862
+ "dart",
3863
+ "docker",
3864
+ "elixir",
3865
+ "env",
3866
+ "erlang",
3867
+ "flutter",
3868
+ "git",
3869
+ "go",
3870
+ "graphql",
3871
+ "haskell",
3872
+ "ini",
3873
+ "java",
3874
+ "javascript",
3875
+ "json",
3876
+ "kotlin",
3877
+ "lua",
3878
+ "makefile",
3879
+ "node",
3880
+ "objective-c",
3881
+ "perl",
3882
+ "php",
3883
+ "powershell",
3884
+ "protobuf",
3885
+ "python",
3886
+ "r",
3887
+ "react",
3888
+ "ruby",
3889
+ "rust",
3890
+ "scala",
3891
+ "shell",
3892
+ "solidity",
3893
+ "sql",
3894
+ "svelte",
3895
+ "swift",
3896
+ "toml",
3897
+ "typescript",
3898
+ "vue",
3899
+ "wasm",
3900
+ "xml",
3901
+ "yaml",
3902
+ "zig"
3903
+ ]);
3904
+ const FILE_NAME_TYPES = {
3905
+ ".bash_profile": "shell",
3906
+ ".bashrc": "shell",
3907
+ ".env": "env",
3908
+ ".gitattributes": "git",
3909
+ ".gitconfig": "git",
3910
+ ".gitignore": "git",
3911
+ ".gitmodules": "git",
3912
+ ".mailmap": "git",
3913
+ ".profile": "shell",
3914
+ ".zprofile": "shell",
3915
+ ".zshrc": "shell",
3916
+ "bsdmakefile": "makefile",
3917
+ "cmakelists.txt": "cmake",
3918
+ "commit_editmsg": "git",
3919
+ "compose.yaml": "docker",
3920
+ "compose.yml": "docker",
3921
+ "docker-compose.yaml": "docker",
3922
+ "docker-compose.yml": "docker",
3923
+ "dockerfile": "docker",
3924
+ "gemfile": "ruby",
3925
+ "gnumakefile": "makefile",
3926
+ "guardfile": "ruby",
3927
+ "makefile": "makefile",
3928
+ "npm-shrinkwrap.json": "node",
3929
+ "package-lock.json": "node",
3930
+ "package.json": "node",
3931
+ "podfile": "ruby",
3932
+ "rakefile": "ruby"
3933
+ };
3934
+ const FILE_NAME_PREFIX_TYPES = [["dockerfile.", "docker"], [".env.", "env"]];
3935
+ const FILE_NAME_SUFFIX_TYPES = [
3936
+ [".component.ts", "angular"],
3937
+ [".component.html", "angular"],
3938
+ [".directive.ts", "angular"],
3939
+ [".service.ts", "angular"],
3940
+ [".module.ts", "angular"],
3941
+ [".pipe.ts", "angular"],
3942
+ [".guard.ts", "angular"],
3943
+ [".interceptor.ts", "angular"],
3944
+ [".dockerfile", "docker"]
3945
+ ];
3946
+ const EXTENSION_TYPES$1 = {
3947
+ "bash": "shell",
3948
+ "c": "c",
3949
+ "c++": "cpp",
3950
+ "cc": "cpp",
3951
+ "cfg": "ini",
3952
+ "cjs": "javascript",
3953
+ "clj": "clojure",
3954
+ "cljc": "clojure",
3955
+ "cljs": "clojure",
3956
+ "cmake": "cmake",
3957
+ "cpp": "cpp",
3958
+ "cs": "csharp",
3959
+ "csh": "shell",
3960
+ "css": "css",
3961
+ "csx": "csharp",
3962
+ "cts": "typescript",
3963
+ "cxx": "cpp",
3964
+ "dart": "dart",
3965
+ "dtd": "xml",
3966
+ "edn": "clojure",
3967
+ "env": "env",
3968
+ "erl": "erlang",
3969
+ "es6": "javascript",
3970
+ "escript": "erlang",
3971
+ "ex": "elixir",
3972
+ "exs": "elixir",
3973
+ "fish": "shell",
3974
+ "gemspec": "ruby",
3975
+ "go": "go",
3976
+ "gql": "graphql",
3977
+ "graphql": "graphql",
3978
+ "h": "c",
3979
+ "h++": "cpp",
3980
+ "hh": "cpp",
3981
+ "hpp": "cpp",
3982
+ "hrl": "erlang",
3983
+ "hs": "haskell",
3984
+ "hxx": "cpp",
3985
+ "ini": "ini",
3986
+ "ipp": "cpp",
3987
+ "java": "java",
3988
+ "js": "javascript",
3989
+ "json": "json",
3990
+ "json5": "json",
3991
+ "jsonc": "json",
3992
+ "jsx": "react",
3993
+ "ksh": "shell",
3994
+ "kt": "kotlin",
3995
+ "kts": "kotlin",
3996
+ "lhs": "haskell",
3997
+ "lua": "lua",
3998
+ "m": "objective-c",
3999
+ "mak": "makefile",
4000
+ "mjs": "javascript",
4001
+ "mk": "makefile",
4002
+ "mm": "objective-c",
4003
+ "mts": "typescript",
4004
+ "node": "node",
4005
+ "pch": "objective-c",
4006
+ "php": "php",
4007
+ "php3": "php",
4008
+ "php4": "php",
4009
+ "php5": "php",
4010
+ "phps": "php",
4011
+ "phtml": "php",
4012
+ "pl": "perl",
4013
+ "plist": "xml",
4014
+ "pm": "perl",
4015
+ "pod": "perl",
4016
+ "proto": "protobuf",
4017
+ "ps1": "powershell",
4018
+ "psd1": "powershell",
4019
+ "psm1": "powershell",
4020
+ "py": "python",
4021
+ "pyi": "python",
4022
+ "pyw": "python",
4023
+ "pyx": "python",
4024
+ "r": "r",
4025
+ "rake": "ruby",
4026
+ "rb": "ruby",
4027
+ "rmd": "r",
4028
+ "rs": "rust",
4029
+ "sc": "scala",
4030
+ "scala": "scala",
4031
+ "sh": "shell",
4032
+ "sol": "solidity",
4033
+ "sql": "sql",
4034
+ "svelte": "svelte",
4035
+ "swift": "swift",
4036
+ "t": "perl",
4037
+ "tcsh": "shell",
4038
+ "toml": "toml",
4039
+ "tpp": "cpp",
4040
+ "ts": "typescript",
4041
+ "tsx": "react",
4042
+ "vue": "vue",
4043
+ "wasm": "wasm",
4044
+ "wast": "wasm",
4045
+ "wat": "wasm",
4046
+ "xml": "xml",
4047
+ "xsd": "xml",
4048
+ "xsl": "xml",
4049
+ "xslt": "xml",
4050
+ "yaml": "yaml",
4051
+ "yml": "yaml",
4052
+ "zig": "zig",
4053
+ "zsh": "shell"
4054
+ };
4055
+ const LINK_CODE_EXTENSIONS = new Set([
2702
4056
  "ts",
2703
4057
  "tsx",
2704
4058
  "js",
@@ -2768,30 +4122,316 @@ const CODE_EXTENSIONS = new Set([
2768
4122
  "hs",
2769
4123
  "dart"
2770
4124
  ]);
2771
- const IMAGE_EXTENSIONS = new Set([
2772
- "png",
2773
- "jpg",
2774
- "jpeg",
2775
- "gif",
2776
- "svg",
2777
- "webp",
2778
- "avif",
2779
- "bmp",
2780
- "ico",
2781
- "tif",
2782
- "tiff",
2783
- "heic",
2784
- "heif"
2785
- ]);
2786
- const DOCUMENT_EXTENSIONS = new Set([
2787
- "pdf",
2788
- "doc",
2789
- "docx",
2790
- "xls",
2791
- "xlsx",
2792
- "ppt",
2793
- "pptx"
2794
- ]);
4125
+ function basename$1(path) {
4126
+ return path.slice(Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\")) + 1);
4127
+ }
4128
+ /**
4129
+ * Test whether a resolved file type uses the full-color code-icon set.
4130
+ * @param type - Resolved file-type string.
4131
+ * @returns Whether the value is a detailed code-file type.
4132
+ */
4133
+ function isCodeFileType(type) {
4134
+ return CODE_FILE_TYPE_SET.has(type);
4135
+ }
4136
+ /**
4137
+ * Test whether an extension belonged to the established coarse LinkIcon code category.
4138
+ * @param extension - Extension without a leading dot.
4139
+ * @returns Whether clickable links keep the code glyph for this extension.
4140
+ */
4141
+ function isLinkCodeExtension(extension) {
4142
+ return LINK_CODE_EXTENSIONS.has(extension.toLowerCase());
4143
+ }
4144
+ /**
4145
+ * Resolve the most specific code/configuration icon according to the supplied map priority.
4146
+ * @param name - Lowercase basename.
4147
+ * @param extension - Lowercase extension without the leading dot.
4148
+ * @param context - Optional project-file snapshot for context-sensitive matches.
4149
+ * @returns The detailed code type, or null when the traditional file classifier owns the path.
4150
+ */
4151
+ function classifyCodeFileType(name, extension, context) {
4152
+ const exact = FILE_NAME_TYPES[name];
4153
+ if (exact !== void 0) return exact;
4154
+ for (const [prefix, type] of FILE_NAME_PREFIX_TYPES) if (name.startsWith(prefix)) return type;
4155
+ for (const [suffix, type] of FILE_NAME_SUFFIX_TYPES) if (name.endsWith(suffix)) return type;
4156
+ if (extension === "dart" && context !== void 0) {
4157
+ if ((Object.entries(context.files).find(([path]) => basename$1(path).toLowerCase() === "pubspec.yaml")?.[1])?.includes("flutter:") === true) return "flutter";
4158
+ }
4159
+ return EXTENSION_TYPES$1[extension] ?? null;
4160
+ }
4161
+ //#endregion
4162
+ //#region lib/types/FileTypeIcon.js
4163
+ const EXTENSION_TYPES = {
4164
+ scss: "code",
4165
+ sass: "code",
4166
+ less: "code",
4167
+ vue: "code",
4168
+ svelte: "code",
4169
+ astro: "code",
4170
+ bat: "code",
4171
+ cmd: "code",
4172
+ csv: "code",
4173
+ tsv: "code",
4174
+ html: "html",
4175
+ htm: "html",
4176
+ png: "image",
4177
+ jpg: "image",
4178
+ jpeg: "image",
4179
+ gif: "image",
4180
+ svg: "image",
4181
+ webp: "image",
4182
+ avif: "image",
4183
+ bmp: "image",
4184
+ ico: "image",
4185
+ tif: "image",
4186
+ tiff: "image",
4187
+ heic: "image",
4188
+ heif: "image",
4189
+ md: "markdown",
4190
+ mdx: "markdown",
4191
+ markdown: "markdown",
4192
+ pdf: "pdf",
4193
+ ppt: "ppt",
4194
+ pptx: "ppt",
4195
+ key: "ppt",
4196
+ mp4: "video",
4197
+ mov: "video",
4198
+ m4v: "video",
4199
+ webm: "video",
4200
+ mkv: "video",
4201
+ avi: "video",
4202
+ mpg: "video",
4203
+ mpeg: "video",
4204
+ doc: "word",
4205
+ docx: "word",
4206
+ rtf: "word",
4207
+ odt: "word",
4208
+ pages: "word",
4209
+ xls: "excel",
4210
+ xlsx: "excel",
4211
+ xlsm: "excel",
4212
+ numbers: "excel"
4213
+ };
4214
+ const NAME_TYPES = {
4215
+ changelog: "markdown",
4216
+ contributing: "markdown",
4217
+ readme: "markdown"
4218
+ };
4219
+ function basename(path) {
4220
+ return path.slice(Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\")) + 1);
4221
+ }
4222
+ /**
4223
+ * Extract the final suffix from a file path without changing its case.
4224
+ * A leading dot starts a suffix, while a missing or trailing dot returns an empty string.
4225
+ * @param path - File path or basename using either path separator.
4226
+ * @returns The characters after the basename's final dot.
4227
+ */
4228
+ function fileExtension(path) {
4229
+ const name = basename(path);
4230
+ const dot = name.lastIndexOf(".");
4231
+ return dot < 0 ? "" : name.slice(dot + 1);
4232
+ }
4233
+ /**
4234
+ * Classify a file path or name for file-card presentation.
4235
+ * Matching is case-insensitive and applies code filename rules before extension rules;
4236
+ * unknown names fall back to `other`.
4237
+ * @param path - File path or basename using either path separator.
4238
+ * @param context - Optional project files used by context-sensitive code mappings.
4239
+ * @returns The file's closed presentation category.
4240
+ */
4241
+ function classifyFileType(path, context) {
4242
+ const name = basename(path).toLowerCase();
4243
+ const extension = fileExtension(name).toLowerCase();
4244
+ return classifyCodeFileType(name, extension, context) ?? NAME_TYPES[name] ?? EXTENSION_TYPES[extension] ?? "other";
4245
+ }
4246
+ const FILE_BODY = "M8.48924 28H19.5108C21.6479 28 22.7165 28 23.5594 27.6509C24.6833 27.1853 25.5762 26.2924 26.0417 25.1685C26.3909 24.3256 26.3909 23.257 26.3909 21.1199V8.79443C26.3909 8.32877 26.3909 8.09593 26.3471 7.87507C26.2887 7.58058 26.173 7.30042 26.0067 7.05048C25.882 6.86303 25.7177 6.69799 25.3893 6.36792L20.0611 1.01354C19.7304 0.681235 19.5651 0.515081 19.3769 0.38885C19.126 0.220541 18.8443 0.103463 18.5481 0.0443412C18.3259 0 18.0915 0 17.6226 0H8.48924C6.35209 0 5.28351 0 4.4406 0.349145C3.31672 0.814671 2.4238 1.70759 1.95828 2.83147C1.60913 3.67438 1.60913 4.74296 1.60913 6.88011V21.1199C1.60913 23.257 1.60913 24.3256 1.95828 25.1685C2.4238 26.2924 3.31672 27.1853 4.4406 27.6509C5.28351 28 6.35209 28 8.48924 28Z";
4247
+ const FILE_FOLD = "M26.3909 7.37445L19.0525 0V3.77445C19.0525 4.89271 19.0525 5.45184 19.2352 5.89289C19.4788 6.48096 19.946 6.94818 20.5341 7.19176C20.9751 7.37445 21.5342 7.37445 22.6525 7.37445H26.3909Z";
4248
+ const FILE_MARK_TRANSFORM = "translate(14 16) scale(1.12) translate(-14 -16)";
4249
+ const LARGE_FILE_MARK_TRANSFORM = "translate(14 16) scale(1.22) translate(-14 -16)";
4250
+ const FOLDER_MARK_TRANSFORM = "translate(14 13.0693) scale(1.12) translate(-14 -13.0693)";
4251
+ function FileGlyph({ size, className, children, markTransform = FILE_MARK_TRANSFORM, muted = false }) {
4252
+ return jsxs("svg", {
4253
+ width: size,
4254
+ height: size,
4255
+ className,
4256
+ viewBox: "0 0 28 28",
4257
+ fill: "none",
4258
+ xmlns: "http://www.w3.org/2000/svg",
4259
+ "aria-hidden": true,
4260
+ children: [
4261
+ jsx("path", {
4262
+ d: FILE_BODY,
4263
+ fill: "currentColor"
4264
+ }),
4265
+ muted ? jsx("path", {
4266
+ d: FILE_FOLD,
4267
+ fill: "var(--dsw-static-neutral-400)"
4268
+ }) : jsx("path", {
4269
+ d: FILE_FOLD,
4270
+ fill: "var(--dsw-static-neutral-00)",
4271
+ fillOpacity: ".7"
4272
+ }),
4273
+ children !== void 0 && jsx("g", {
4274
+ color: "var(--dsw-static-neutral-00)",
4275
+ "data-file-type-mark": true,
4276
+ transform: markTransform,
4277
+ children
4278
+ })
4279
+ ]
4280
+ });
4281
+ }
4282
+ function FolderGlyph$1({ size, className }) {
4283
+ return jsxs("svg", {
4284
+ width: size,
4285
+ height: size,
4286
+ className,
4287
+ viewBox: "0 0 28 28",
4288
+ fill: "none",
4289
+ xmlns: "http://www.w3.org/2000/svg",
4290
+ "aria-hidden": true,
4291
+ children: [jsx("path", {
4292
+ d: "M2.80078 10.2112C2.80078 9.52802 2.80078 9.18642 2.85314 8.866C2.98648 8.05 3.36942 7.29538 3.94925 6.70595C4.17694 6.4745 4.45264 6.2728 5.00404 5.86939C5.29197 5.65874 5.43594 5.55342 5.58711 5.46632C5.97089 5.24521 6.39638 5.10618 6.83667 5.05803C7.01011 5.03906 7.18849 5.03906 7.54524 5.03906H11.6543C12.4669 5.03906 12.8732 5.03906 13.2599 5.13697C13.3882 5.16945 13.5143 5.20986 13.6375 5.25795C14.0091 5.40294 14.3398 5.63902 15.0012 6.1112L16.2632 7.01224C16.5526 7.21881 16.6972 7.3221 16.8598 7.38553C16.9137 7.40657 16.9689 7.42425 17.025 7.43846C17.1942 7.4813 17.372 7.4813 17.7275 7.4813H19.8008C22.0506 7.4813 23.1755 7.4813 23.9641 8.05425C24.2188 8.23928 24.4428 8.46326 24.6278 8.71794C25.2008 9.50654 25.2008 10.6315 25.2008 12.8813V18.7283C25.2008 20.9781 25.2008 22.1031 24.6278 22.8917C24.4428 23.1463 24.2188 23.3703 23.9641 23.5554C23.1755 24.1283 22.0506 24.1283 19.8008 24.1283H8.20077C5.95094 24.1283 4.82602 24.1283 4.03743 23.5554C3.78274 23.3703 3.55877 23.1463 3.37373 22.8917C2.80078 22.1031 2.80078 20.9781 2.80078 18.7283V10.2112Z",
4293
+ fill: "currentColor"
4294
+ }), jsx("g", {
4295
+ color: "var(--dsw-static-neutral-00)",
4296
+ "data-file-type-mark": true,
4297
+ transform: FOLDER_MARK_TRANSFORM,
4298
+ children: jsx("path", {
4299
+ d: "M6.31445 13.0693H21.6893",
4300
+ stroke: "currentColor",
4301
+ strokeWidth: "2.38"
4302
+ })
4303
+ })]
4304
+ });
4305
+ }
4306
+ function glyph(type, size, className) {
4307
+ switch (type) {
4308
+ case "code": return jsxs(FileGlyph, {
4309
+ size,
4310
+ className,
4311
+ children: [jsx("path", {
4312
+ d: "M8.61 16.3601L11.76 18.3901V20.1401L7 17.0601V15.6601L11.76 12.5801V14.3301L8.61 16.3601Z",
4313
+ fill: "currentColor"
4314
+ }), jsx("path", {
4315
+ d: "M16.1918 14.3301V12.5801L20.9518 15.6601V17.0601L16.1918 20.1401V18.3901L19.3418 16.3601L16.1918 14.3301Z",
4316
+ fill: "currentColor"
4317
+ })]
4318
+ });
4319
+ case "excel": return jsx(FileGlyph, {
4320
+ size,
4321
+ className,
4322
+ markTransform: LARGE_FILE_MARK_TRANSFORM,
4323
+ children: jsx("path", {
4324
+ d: "M10.2932 20.5L13.3532 16.25L13.3432 17.66L10.4032 13.5H12.6332L14.5132 16.21L13.5632 16.22L15.4132 13.5H17.5532L14.6132 17.58V16.18L17.7132 20.5H15.4332L13.5232 17.65H14.4332L12.5532 20.5H10.2932Z",
4325
+ fill: "currentColor"
4326
+ })
4327
+ });
4328
+ case "folder": return jsx(FolderGlyph$1, {
4329
+ size,
4330
+ className
4331
+ });
4332
+ case "html": return jsx(FileGlyph, {
4333
+ size,
4334
+ className,
4335
+ children: jsx("path", {
4336
+ fillRule: "evenodd",
4337
+ clipRule: "evenodd",
4338
+ d: "M13.9994 9.68298C17.212 9.68298 19.8167 12.2872 19.8168 15.4997C19.8168 18.7123 17.2121 21.3171 13.9994 21.3171C10.7869 21.3169 8.18274 18.7122 8.18274 15.4997C8.1829 12.2873 10.787 9.68315 13.9994 9.68298ZM9.26213 16.0247C9.47025 17.9241 10.7936 19.4876 12.5639 20.0463C12.42 19.7977 12.2952 19.5152 12.1879 19.2116C11.885 18.3541 11.693 17.2434 11.6424 16.0247H9.26213ZM16.3565 16.0247C16.3059 17.2434 16.1145 18.3542 15.8116 19.2116C15.7044 19.5151 15.5788 19.7971 15.435 20.0456C17.2054 19.487 18.5293 17.9242 18.7374 16.0247H16.3565ZM12.6938 16.0247C12.7439 17.1459 12.9212 18.1334 13.1784 18.8616C13.332 19.2962 13.503 19.61 13.6686 19.805C13.834 19.9996 13.9473 20.0256 13.9994 20.0258C14.0514 20.0258 14.1651 20.0002 14.331 19.805C14.4966 19.61 14.6676 19.2962 14.8211 18.8616C15.0784 18.1334 15.2557 17.1459 15.3058 16.0247H12.6938ZM13.9994 10.733C13.9473 10.7331 13.834 10.7598 13.6686 10.9545C13.503 11.1494 13.3319 11.4633 13.1784 11.8978C12.903 12.6777 12.7188 13.7545 12.6849 14.9747H15.3147C15.2808 13.7545 15.0966 12.6777 14.8211 11.8978C14.6676 11.4633 14.4965 11.1494 14.331 10.9545C14.1651 10.7593 14.0514 10.733 13.9994 10.733ZM15.5888 11.0051C15.6701 11.1756 15.7444 11.3576 15.8116 11.5478C16.1343 12.4613 16.3308 13.6619 16.3647 14.9747H18.7374C18.5352 13.1307 17.2817 11.6036 15.5888 11.0051ZM12.4101 11.0051C10.7174 11.6037 9.46428 13.1308 9.26213 14.9747H11.6349C11.6688 13.6619 11.8652 12.4613 12.1879 11.5478C12.2551 11.3577 12.3288 11.1756 12.4101 11.0051Z",
4339
+ fill: "currentColor"
4340
+ })
4341
+ });
4342
+ case "image": return jsxs(FileGlyph, {
4343
+ size,
4344
+ className,
4345
+ children: [
4346
+ jsx("path", {
4347
+ d: "M10.4212 15.9204C10.5756 15.6558 10.9579 15.6558 11.1123 15.9204L13.6493 20.2696C13.8048 20.5362 13.6125 20.8711 13.3037 20.8711H8.22974C7.92102 20.8711 7.72868 20.5362 7.88423 20.2696L10.4212 15.9204Z",
4348
+ fill: "currentColor"
4349
+ }),
4350
+ jsx("path", {
4351
+ d: "M15.4981 13.186C15.6505 12.9117 16.0451 12.9117 16.1975 13.186L20.1368 20.2769C20.2849 20.5435 20.0922 20.8711 19.7872 20.8711H11.9084C11.6034 20.8711 11.4107 20.5435 11.5588 20.2769L15.4981 13.186Z",
4352
+ fill: "currentColor"
4353
+ }),
4354
+ jsx("path", {
4355
+ d: "M11.8603 11.3997C11.8603 12.286 11.1418 13.0045 10.2555 13.0045C9.36924 13.0045 8.65076 12.286 8.65076 11.3997C8.65076 10.5134 9.36924 9.79492 10.2555 9.79492C11.1418 9.79492 11.8603 10.5134 11.8603 11.3997Z",
4356
+ fill: "currentColor"
4357
+ })
4358
+ ]
4359
+ });
4360
+ case "markdown": return jsx(FileGlyph, {
4361
+ size,
4362
+ className,
4363
+ markTransform: LARGE_FILE_MARK_TRANSFORM,
4364
+ children: jsx("path", {
4365
+ d: "M8.7588 19.5V14.6H9.8998L11.9298 17.932H11.3278L13.3018 14.6H14.4428L14.4568 19.5H13.1828L13.1688 16.539H13.3858L11.9088 19.017H11.2928L9.7738 16.539H10.0398V19.5H8.7588ZM15.4375 19.5V14.6H17.7545C18.2958 14.6 18.7718 14.7003 19.1825 14.901C19.5932 15.1017 19.9128 15.384 20.1415 15.748C20.3748 16.112 20.4915 16.546 20.4915 17.05C20.4915 17.5493 20.3748 17.9833 20.1415 18.352C19.9128 18.716 19.5932 18.9983 19.1825 19.199C18.7718 19.3997 18.2958 19.5 17.7545 19.5H15.4375ZM16.8235 18.394H17.6985C17.9785 18.394 18.2212 18.3427 18.4265 18.24C18.6365 18.1327 18.7998 17.9787 18.9165 17.778C19.0332 17.5727 19.0915 17.33 19.0915 17.05C19.0915 16.7653 19.0332 16.5227 18.9165 16.322C18.7998 16.1213 18.6365 15.9697 18.4265 15.867C18.2212 15.7597 17.9785 15.706 17.6985 15.706H16.8235V18.394Z",
4366
+ fill: "currentColor"
4367
+ })
4368
+ });
4369
+ case "other": return jsx(FileGlyph, {
4370
+ size,
4371
+ className,
4372
+ muted: true
4373
+ });
4374
+ case "pdf": return jsx(FileGlyph, {
4375
+ size,
4376
+ className,
4377
+ markTransform: LARGE_FILE_MARK_TRANSFORM,
4378
+ children: jsx("path", {
4379
+ d: "M6.80616 19.5V14.6H9.04616C9.49416 14.6 9.87916 14.6723 10.2012 14.817C10.5278 14.9617 10.7798 15.1717 10.9572 15.447C11.1345 15.7177 11.2232 16.0397 11.2232 16.413C11.2232 16.7817 11.1345 17.1013 10.9572 17.372C10.7798 17.6427 10.5278 17.8527 10.2012 18.002C9.87916 18.1467 9.49416 18.219 9.04616 18.219H7.57616L8.19216 17.617V19.5H6.80616ZM8.19216 17.764L7.57616 17.127H8.96216C9.2515 17.127 9.46616 17.064 9.60616 16.938C9.75083 16.812 9.82316 16.637 9.82316 16.413C9.82316 16.1843 9.75083 16.007 9.60616 15.881C9.46616 15.755 9.2515 15.692 8.96216 15.692H7.57616L8.19216 15.055V17.764ZM11.8989 19.5V14.6H14.2159C14.7573 14.6 15.2333 14.7003 15.6439 14.901C16.0546 15.1017 16.3743 15.384 16.6029 15.748C16.8363 16.112 16.9529 16.546 16.9529 17.05C16.9529 17.5493 16.8363 17.9833 16.6029 18.352C16.3743 18.716 16.0546 18.9983 15.6439 19.199C15.2333 19.3997 14.7573 19.5 14.2159 19.5H11.8989ZM13.2849 18.394H14.1599C14.4399 18.394 14.6826 18.3427 14.8879 18.24C15.0979 18.1327 15.2613 17.9787 15.3779 17.778C15.4946 17.5727 15.5529 17.33 15.5529 17.05C15.5529 16.7653 15.4946 16.5227 15.3779 16.322C15.2613 16.1213 15.0979 15.9697 14.8879 15.867C14.6826 15.7597 14.4399 15.706 14.1599 15.706H13.2849V18.394ZM17.6821 19.5V14.6H21.5251V15.671H19.0681V19.5H17.6821ZM18.9701 17.82V16.749H21.2311V17.82H18.9701Z",
4380
+ fill: "currentColor"
4381
+ })
4382
+ });
4383
+ case "ppt": return jsx(FileGlyph, {
4384
+ size,
4385
+ className,
4386
+ markTransform: LARGE_FILE_MARK_TRANSFORM,
4387
+ children: jsx("path", {
4388
+ d: "M11.0132 20.5V13.5H14.2132C14.8532 13.5 15.4032 13.6033 15.8632 13.81C16.3299 14.0167 16.6899 14.3167 16.9432 14.71C17.1966 15.0967 17.3232 15.5567 17.3232 16.09C17.3232 16.6167 17.1966 17.0733 16.9432 17.46C16.6899 17.8467 16.3299 18.1467 15.8632 18.36C15.4032 18.5667 14.8532 18.67 14.2132 18.67H12.1132L12.9932 17.81V20.5H11.0132ZM12.9932 18.02L12.1132 17.11H14.0932C14.5066 17.11 14.8132 17.02 15.0132 16.84C15.2199 16.66 15.3232 16.41 15.3232 16.09C15.3232 15.7633 15.2199 15.51 15.0132 15.33C14.8132 15.15 14.5066 15.06 14.0932 15.06H12.1132L12.9932 14.15V18.02Z",
4389
+ fill: "currentColor"
4390
+ })
4391
+ });
4392
+ case "video": return jsx(FileGlyph, {
4393
+ size,
4394
+ className,
4395
+ children: jsx("path", {
4396
+ d: "M17.5 14.634C18.1667 15.0189 18.1667 15.9811 17.5 16.366L11.5 19.8301C10.8333 20.215 10 19.7339 10 18.9641L10 12.0359C10 11.2661 10.8333 10.785 11.5 11.1699L17.5 14.634Z",
4397
+ fill: "currentColor"
4398
+ })
4399
+ });
4400
+ case "word": return jsx(FileGlyph, {
4401
+ size,
4402
+ className,
4403
+ markTransform: LARGE_FILE_MARK_TRANSFORM,
4404
+ children: jsx("path", {
4405
+ d: "M10.5118 20.5L8.24179 13.5H10.2818L12.1918 19.56H11.1618L13.1718 13.5H14.9918L16.8918 19.56H15.9018L17.8718 13.5H19.7618L17.4918 20.5H15.3718L13.7518 15.35H14.3218L12.6318 20.5H10.5118Z",
4406
+ fill: "currentColor"
4407
+ })
4408
+ });
4409
+ /* v8 ignore next -- closed-union backstop; only reached if a type is forged */
4410
+ default: return assertNever$2(type);
4411
+ }
4412
+ }
4413
+ /** Closed-union exhaustiveness guard for traditional file artwork. */
4414
+ /* v8 ignore next 3 -- only reachable when an untyped caller forges a traditional file type */
4415
+ function assertNever$2(value) {
4416
+ throw new Error(`unreachable traditional file type: ${String(value)}`);
4417
+ }
4418
+ /**
4419
+ * Render a decorative file-type glyph for a path or an explicitly resolved kind.
4420
+ * @param props - Path or kind selection, optional project context, size, and CSS class.
4421
+ * @returns The category-colored SVG; the caller owns the accessible name and may override
4422
+ * the color through `--dsh-file-type-icon-color`.
4423
+ */
4424
+ function FileTypeIcon(props) {
4425
+ const { size = 28, className } = props;
4426
+ const resolvedType = "path" in props ? classifyFileType(props.path, props.context) : props.kind;
4427
+ return isCodeFileType(resolvedType) ? jsx(CodeFileIcon, {
4428
+ type: resolvedType,
4429
+ size,
4430
+ className
4431
+ }) : glyph(resolvedType, size, clsx(css$13.icon, css$13[resolvedType], className));
4432
+ }
4433
+ //#endregion
4434
+ //#region lib/types/LinkIcon.js
2795
4435
  /**
2796
4436
  * Derive a file path's link-icon category from its extension. Unknown and
2797
4437
  * missing extensions fall to `other` (the plain-paper glyph).
@@ -2799,13 +4439,24 @@ const DOCUMENT_EXTENSIONS = new Set([
2799
4439
  * @returns The file's glyph category; never `url` or `folder`.
2800
4440
  */
2801
4441
  function classifyLinkPath(path) {
2802
- const name = path.slice(Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\")) + 1);
2803
- const dot = name.lastIndexOf(".");
2804
- if (dot < 0) return "other";
2805
- const extension = name.slice(dot + 1).toLowerCase();
2806
- if (CODE_EXTENSIONS.has(extension)) return "code";
2807
- if (IMAGE_EXTENSIONS.has(extension)) return "image";
2808
- return DOCUMENT_EXTENSIONS.has(extension) ? "document" : "other";
4442
+ const type = classifyFileType(path);
4443
+ const extension = fileExtension(path);
4444
+ if (isCodeFileType(type)) return isLinkCodeExtension(extension) ? "code" : "other";
4445
+ if (extension === "") return "other";
4446
+ switch (type) {
4447
+ case "code":
4448
+ case "html": return "code";
4449
+ case "image": return "image";
4450
+ case "excel":
4451
+ case "pdf":
4452
+ case "ppt":
4453
+ case "word": return "document";
4454
+ case "markdown":
4455
+ case "other":
4456
+ case "video": return "other";
4457
+ /* v8 ignore next -- classifyFileType returns a closed union exhausted above */
4458
+ default: return assertNever$1(type);
4459
+ }
2809
4460
  }
2810
4461
  const GlobeGlyph = ({ size, className }) => jsx("svg", {
2811
4462
  width: size,
@@ -3019,7 +4670,7 @@ function projectUserText(text, sessionLabels, slashNames = [], slashKind = "skil
3019
4670
  let cursor = 0;
3020
4671
  const pushPlain = (from, to) => {
3021
4672
  parts.push(jsx("span", {
3022
- className: css$13.plainRun,
4673
+ className: css$14.plainRun,
3023
4674
  children: text.slice(from, to)
3024
4675
  }, `t${from}`));
3025
4676
  };
@@ -3030,19 +4681,19 @@ function projectUserText(text, sessionLabels, slashNames = [], slashKind = "skil
3030
4681
  const referenceKind = kind === "session" ? "session" : label.startsWith("@") ? label.endsWith("/") ? "folder" : "file" : void 0;
3031
4682
  const displayLabel = range.display ?? (referenceKind === void 0 ? label : referenceKind === "session" ? label.slice(1) : label.slice(1).replace(/^"|"$/gu, "").split(/[\\/]/u).filter(Boolean).at(-1) ?? label.slice(1));
3032
4683
  parts.push(jsxs("span", {
3033
- className: clsx(css$13.refChip, referenceKind === void 0 && css$13.slashChip),
4684
+ className: clsx(css$14.refChip, referenceKind === void 0 && css$14.slashChip),
3034
4685
  "data-ref-chip": referenceKind ?? slashKind,
3035
4686
  title: label,
3036
4687
  children: [referenceKind !== void 0 && jsx(ReferenceIcon, {
3037
4688
  kind: referenceKind,
3038
4689
  size: 16,
3039
- className: css$13.refIcon
4690
+ className: css$14.refIcon
3040
4691
  }), displayLabel]
3041
4692
  }, tokenStart));
3042
4693
  cursor = end;
3043
4694
  }
3044
4695
  if (parts.length === 0) return jsx("span", {
3045
- className: css$13.plainRun,
4696
+ className: css$14.plainRun,
3046
4697
  children: text
3047
4698
  });
3048
4699
  if (cursor < text.length) pushPlain(cursor, text.length);
@@ -3180,7 +4831,7 @@ function Tooltip({ label, side = "right", delayMs = 0, disabled = false, maxWidt
3180
4831
  }
3181
4832
  }), pos !== null && jsx("span", {
3182
4833
  ref: bubble,
3183
- className: css$14.bubble,
4834
+ className: css$15.bubble,
3184
4835
  "data-side": placement,
3185
4836
  style: {
3186
4837
  left: pos.x,
@@ -3241,18 +4892,18 @@ function Toast({ text, icon, anchor, holdMs = HOLD_MS, onDone }) {
3241
4892
  };
3242
4893
  }, [anchor]);
3243
4894
  return createPortal(jsxs("div", {
3244
- className: css$15.toast,
4895
+ className: css$16.toast,
3245
4896
  role: "alert",
3246
4897
  style: {
3247
4898
  ...left === null ? {} : { left },
3248
4899
  "--dsh-toast-hold": `${String(holdMs)}ms`
3249
4900
  },
3250
4901
  children: [icon !== void 0 && jsx("span", {
3251
- className: css$15.icon,
4902
+ className: css$16.icon,
3252
4903
  "aria-hidden": true,
3253
4904
  children: icon
3254
4905
  }), jsx("span", {
3255
- className: css$15.text,
4906
+ className: css$16.text,
3256
4907
  children: text
3257
4908
  })]
3258
4909
  }), document.body);
@@ -3275,52 +4926,6 @@ function fileSizeText(bytes) {
3275
4926
  return `${gb < 10 ? gb.toFixed(1) : Math.round(gb)}GB`;
3276
4927
  }
3277
4928
  //#endregion
3278
- //#region lib/types/DocumentFileIcon.js
3279
- /**
3280
- * Render the DeepSeek Web document glyph used by generic-file cards.
3281
- * @param props - optional CSS class for sizing and placement.
3282
- * @returns a decorative document SVG with an instance-safe gradient id.
3283
- */
3284
- function DocumentFileIcon({ className }) {
3285
- const gradientId = useId();
3286
- return jsxs("svg", {
3287
- className,
3288
- xmlns: "http://www.w3.org/2000/svg",
3289
- width: "24",
3290
- height: "28",
3291
- viewBox: "0 0 24 28",
3292
- fill: "none",
3293
- "aria-hidden": true,
3294
- children: [
3295
- jsx("path", {
3296
- d: "M16.5 0l7 7v15.6c0 2.25 0 3.375-.573 4.164a3 3 0 0 1-.663.663C21.475 28 20.349 28 18.1 28H5.9c-2.25 0-3.375 0-4.164-.573a3 3 0 0 1-.663-.663C.5 25.975.5 24.849.5 22.6V5.4c0-2.25 0-3.375.573-4.164a3 3 0 0 1 .663-.663C2.525 0 3.651 0 5.9 0h10.6z",
3297
- fill: `url(#${gradientId})`
3298
- }),
3299
- jsx("path", {
3300
- d: "M16.5 0l7 7h-3.8c-1.12 0-1.68 0-2.108-.218a2 2 0 0 1-.874-.874C16.5 5.48 16.5 4.92 16.5 3.8V0z",
3301
- fill: "#fff",
3302
- fillOpacity: ".55"
3303
- }),
3304
- jsx("path", {
3305
- d: "M6 11.784c0-.433.351-.784.784-.784h10.432a.784.784 0 1 1 0 1.568H6.784A.784.784 0 0 1 6 11.784zM6 15.784c0-.433.351-.784.784-.784h10.432a.784.784 0 1 1 0 1.568H6.784A.784.784 0 0 1 6 15.784zM6.114 19.817c0-.433.35-.784.784-.784h6.318a.784.784 0 1 1 0 1.568H6.898a.784.784 0 0 1-.784-.784z",
3306
- fill: "#fff"
3307
- }),
3308
- jsx("defs", { children: jsxs("linearGradient", {
3309
- id: gradientId,
3310
- x1: "1.5",
3311
- y1: "-1",
3312
- x2: "23.5",
3313
- y2: "28",
3314
- gradientUnits: "userSpaceOnUse",
3315
- children: [jsx("stop", { stopColor: "#6D93FF" }), jsx("stop", {
3316
- offset: "1",
3317
- stopColor: "#5A71F0"
3318
- })]
3319
- }) })
3320
- ]
3321
- });
3322
- }
3323
- //#endregion
3324
4929
  //#region lib/types/relative-time.js
3325
4930
  /**
3326
4931
  * Compact relative-time bucketing shared by every surface that dates a
@@ -3485,35 +5090,35 @@ function bracketOf(value) {
3485
5090
  }
3486
5091
  function previewPrimitive(value) {
3487
5092
  if (value === null) return jsx("span", {
3488
- className: css$16.keywordValue,
5093
+ className: css$17.keywordValue,
3489
5094
  children: "null"
3490
5095
  });
3491
5096
  if (typeof value === "string") return jsx("span", {
3492
- className: css$16.stringValue,
5097
+ className: css$17.stringValue,
3493
5098
  children: JSON.stringify(value)
3494
5099
  });
3495
5100
  if (typeof value === "number") return jsx("span", {
3496
- className: css$16.numberValue,
5101
+ className: css$17.numberValue,
3497
5102
  children: String(value)
3498
5103
  });
3499
5104
  if (typeof value === "boolean") return jsx("span", {
3500
- className: css$16.keywordValue,
5105
+ className: css$17.keywordValue,
3501
5106
  children: String(value)
3502
5107
  });
3503
5108
  if (typeof value === "bigint") return jsx("span", {
3504
- className: css$16.otherValue,
5109
+ className: css$17.otherValue,
3505
5110
  children: value.toString()
3506
5111
  });
3507
5112
  if (typeof value === "undefined") return jsx("span", {
3508
- className: css$16.otherValue,
5113
+ className: css$17.otherValue,
3509
5114
  children: "undefined"
3510
5115
  });
3511
5116
  if (typeof value === "symbol") return jsx("span", {
3512
- className: css$16.otherValue,
5117
+ className: css$17.otherValue,
3513
5118
  children: value.description ?? "Symbol"
3514
5119
  });
3515
5120
  if (typeof value === "function") return jsx("span", {
3516
- className: css$16.otherValue,
5121
+ className: css$17.otherValue,
3517
5122
  children: value.name || "Function"
3518
5123
  });
3519
5124
  return null;
@@ -3527,71 +5132,71 @@ function previewValue(value, depth) {
3527
5132
  const [open, close] = bracketOf(value);
3528
5133
  return jsxs(Fragment, { children: [
3529
5134
  jsx("span", {
3530
- className: css$16.punctuation,
5135
+ className: css$17.punctuation,
3531
5136
  children: open
3532
5137
  }),
3533
5138
  depth >= PREVIEW_DEPTH_LIMIT ? jsx("span", {
3534
- className: css$16.previewEllipsis,
5139
+ className: css$17.previewEllipsis,
3535
5140
  children: "…"
3536
5141
  }) : visible.map(([key, item], index) => jsxs("span", { children: [
3537
5142
  index > 0 && jsx("span", {
3538
- className: css$16.punctuation,
5143
+ className: css$17.punctuation,
3539
5144
  children: ", "
3540
5145
  }),
3541
5146
  !array && jsxs(Fragment, { children: [jsx("span", {
3542
- className: css$16.previewProperty,
5147
+ className: css$17.previewProperty,
3543
5148
  children: key
3544
5149
  }), jsx("span", {
3545
- className: css$16.punctuation,
5150
+ className: css$17.punctuation,
3546
5151
  children: ": "
3547
5152
  })] }),
3548
5153
  previewValue(item, depth + 1)
3549
5154
  ] }, key)),
3550
5155
  depth < PREVIEW_DEPTH_LIMIT && entries.length > limit && jsx("span", {
3551
- className: css$16.previewEllipsis,
5156
+ className: css$17.previewEllipsis,
3552
5157
  children: ", …"
3553
5158
  }),
3554
5159
  jsx("span", {
3555
- className: css$16.punctuation,
5160
+ className: css$17.punctuation,
3556
5161
  children: close
3557
5162
  })
3558
5163
  ] });
3559
5164
  }
3560
5165
  function primitiveValue(value) {
3561
5166
  if (value === null) return jsx("span", {
3562
- className: css$16.keywordValue,
5167
+ className: css$17.keywordValue,
3563
5168
  children: "null"
3564
5169
  });
3565
5170
  if (typeof value === "string") return jsx("span", {
3566
- className: css$16.stringValue,
5171
+ className: css$17.stringValue,
3567
5172
  children: JSON.stringify(value)
3568
5173
  });
3569
5174
  if (typeof value === "boolean") return jsx("span", {
3570
- className: css$16.keywordValue,
5175
+ className: css$17.keywordValue,
3571
5176
  children: String(value)
3572
5177
  });
3573
5178
  if (typeof value === "number") return jsx("span", {
3574
- className: css$16.numberValue,
5179
+ className: css$17.numberValue,
3575
5180
  children: String(value)
3576
5181
  });
3577
5182
  if (typeof value === "bigint") return jsx("span", {
3578
- className: css$16.numberValue,
5183
+ className: css$17.numberValue,
3579
5184
  children: `${value.toString()}n`
3580
5185
  });
3581
5186
  if (value instanceof Date) return jsx("span", {
3582
- className: css$16.otherValue,
5187
+ className: css$17.otherValue,
3583
5188
  children: value.toISOString()
3584
5189
  });
3585
5190
  if (typeof value === "function") return jsxs("span", {
3586
- className: css$16.otherValue,
5191
+ className: css$17.otherValue,
3587
5192
  children: ["function() ", "{ }"]
3588
5193
  });
3589
5194
  if (typeof value === "undefined") return jsx("span", {
3590
- className: css$16.otherValue,
5195
+ className: css$17.otherValue,
3591
5196
  children: "undefined"
3592
5197
  });
3593
5198
  return jsx("span", {
3594
- className: css$16.otherValue,
5199
+ className: css$17.otherValue,
3595
5200
  children: value.toString()
3596
5201
  });
3597
5202
  }
@@ -3619,7 +5224,7 @@ function moveFocus(button, direction) {
3619
5224
  function NodeField({ field, expandable, onToggle }) {
3620
5225
  if (field === void 0) return null;
3621
5226
  return jsxs("span", {
3622
- className: clsx(css$16.label, expandable && css$16.clickableLabel),
5227
+ className: clsx(css$17.label, expandable && css$17.clickableLabel),
3623
5228
  onClick: expandable ? onToggle : void 0,
3624
5229
  children: [fieldText(field), ":"]
3625
5230
  });
@@ -3648,7 +5253,7 @@ function JsonTreeNode({ field, initialExpanded, labels, lastElement, onClaimTabS
3648
5253
  }
3649
5254
  };
3650
5255
  const row = (children, ariaExpanded) => jsx("div", {
3651
- className: css$16.row,
5256
+ className: css$17.row,
3652
5257
  role: "treeitem",
3653
5258
  "aria-expanded": ariaExpanded,
3654
5259
  onMouseOver: (event) => {
@@ -3668,7 +5273,7 @@ function JsonTreeNode({ field, initialExpanded, labels, lastElement, onClaimTabS
3668
5273
  }),
3669
5274
  primitiveValue(value),
3670
5275
  !lastElement && jsx("span", {
3671
- className: css$16.punctuation,
5276
+ className: css$17.punctuation,
3672
5277
  children: ","
3673
5278
  })
3674
5279
  ] }));
@@ -3680,22 +5285,22 @@ function JsonTreeNode({ field, initialExpanded, labels, lastElement, onClaimTabS
3680
5285
  onToggle: toggle
3681
5286
  }),
3682
5287
  jsx("span", {
3683
- className: css$16.punctuation,
5288
+ className: css$17.punctuation,
3684
5289
  children: open
3685
5290
  }),
3686
5291
  jsx("span", {
3687
- className: css$16.punctuation,
5292
+ className: css$17.punctuation,
3688
5293
  children: close
3689
5294
  }),
3690
5295
  !lastElement && jsx("span", {
3691
- className: css$16.punctuation,
5296
+ className: css$17.punctuation,
3692
5297
  children: ","
3693
5298
  })
3694
5299
  ] }));
3695
5300
  return row(jsxs(Fragment, { children: [
3696
5301
  jsx("span", {
3697
5302
  ref: expanderRef,
3698
- className: clsx(css$16.expander, expanded ? css$16.collapseIcon : css$16.expandIcon),
5303
+ className: clsx(css$17.expander, expanded ? css$17.collapseIcon : css$17.expandIcon),
3699
5304
  "data-json-expander": true,
3700
5305
  role: "button",
3701
5306
  "aria-label": expanded ? labels.collapseNode : labels.expandNode,
@@ -3714,17 +5319,17 @@ function JsonTreeNode({ field, initialExpanded, labels, lastElement, onClaimTabS
3714
5319
  onToggle: toggle
3715
5320
  }),
3716
5321
  jsx("span", {
3717
- className: css$16.preview,
5322
+ className: css$17.preview,
3718
5323
  children: previewValue(value, 0)
3719
5324
  }),
3720
5325
  !lastElement && jsx("span", {
3721
- className: css$16.punctuation,
5326
+ className: css$17.punctuation,
3722
5327
  children: ","
3723
5328
  }),
3724
5329
  expanded && jsx("ul", {
3725
5330
  id: contentsId,
3726
5331
  role: "group",
3727
- className: css$16.children,
5332
+ className: css$17.children,
3728
5333
  children: entries.map(([key, item], index) => jsx(JsonTreeNode, {
3729
5334
  field: key,
3730
5335
  value: item,
@@ -3885,17 +5490,17 @@ function JsonTree({ data, label, className, copyable = true, expandTopLevel = tr
3885
5490
  const copyTitle = copyState === "copied" ? labels.copied : copyState === "failed" ? labels.copyFailed : copyTargetIsObject ? labels.copyPrettyJson : labels.copyValue;
3886
5491
  return jsxs("div", {
3887
5492
  ref: rootRef,
3888
- className: clsx(css$16.root, className),
5493
+ className: clsx(css$17.root, className),
3889
5494
  onMouseOver: handleRootMouseOver,
3890
5495
  onMouseLeave: () => {
3891
5496
  if (!copyMenuOpenRef.current) clearCopyTarget();
3892
5497
  },
3893
5498
  onScroll: handleScroll,
3894
5499
  children: [expandTopLevel ? jsxs("div", {
3895
- className: css$16.expandedTopLevel,
5500
+ className: css$17.expandedTopLevel,
3896
5501
  children: [
3897
5502
  jsx("div", {
3898
- className: clsx(css$16.row, css$16.topLevelBracket),
5503
+ className: clsx(css$17.row, css$17.topLevelBracket),
3899
5504
  "data-json-root-row": true,
3900
5505
  onMouseOver: (event) => {
3901
5506
  event.stopPropagation();
@@ -3905,13 +5510,13 @@ function JsonTree({ data, label, className, copyable = true, expandTopLevel = tr
3905
5510
  });
3906
5511
  },
3907
5512
  children: jsx("span", {
3908
- className: css$16.punctuation,
5513
+ className: css$17.punctuation,
3909
5514
  children: rootOpen
3910
5515
  })
3911
5516
  }),
3912
5517
  jsx("div", {
3913
5518
  "aria-label": label,
3914
- className: clsx(css$16.container, css$16.expandedTopLevelContainer),
5519
+ className: clsx(css$17.container, css$17.expandedTopLevelContainer),
3915
5520
  role: "tree",
3916
5521
  children: rootEntries.map(([key, value], index) => jsx(JsonTreeNode, {
3917
5522
  field: key,
@@ -3926,16 +5531,16 @@ function JsonTree({ data, label, className, copyable = true, expandTopLevel = tr
3926
5531
  }, key))
3927
5532
  }),
3928
5533
  jsx("div", {
3929
- className: clsx(css$16.row, css$16.topLevelBracket),
5534
+ className: clsx(css$17.row, css$17.topLevelBracket),
3930
5535
  children: jsx("span", {
3931
- className: css$16.punctuation,
5536
+ className: css$17.punctuation,
3932
5537
  children: rootClose
3933
5538
  })
3934
5539
  })
3935
5540
  ]
3936
5541
  }) : jsx("div", {
3937
5542
  "aria-label": label,
3938
- className: css$16.container,
5543
+ className: css$17.container,
3939
5544
  role: "tree",
3940
5545
  children: jsx(JsonTreeNode, {
3941
5546
  value: data,
@@ -3948,7 +5553,7 @@ function JsonTree({ data, label, className, copyable = true, expandTopLevel = tr
3948
5553
  onRowHover: handleRowHover
3949
5554
  })
3950
5555
  }), copyTarget !== void 0 && jsx("span", {
3951
- className: css$16.copyAnchor,
5556
+ className: css$17.copyAnchor,
3952
5557
  style: {
3953
5558
  left: copyTarget.left,
3954
5559
  top: copyTarget.top
@@ -3962,7 +5567,7 @@ function JsonTree({ data, label, className, copyable = true, expandTopLevel = tr
3962
5567
  anchor: jsx("button", {
3963
5568
  ref: copyButtonRef,
3964
5569
  type: "button",
3965
- className: css$16.copyButton,
5570
+ className: css$17.copyButton,
3966
5571
  "data-json-copy-button": true,
3967
5572
  "data-state": copyState,
3968
5573
  "aria-label": copyTitle,
@@ -4527,66 +6132,66 @@ function TerminalBlock({ command, cwd, home, output, exitCode, signal, running =
4527
6132
  const empty = lines.every((line) => line.every((span) => span.text.trim() === ""));
4528
6133
  const { hidden, capped, headLines, tailLines } = headTailCap(lines.length, maxLines, expanded);
4529
6134
  return jsxs("div", {
4530
- className: clsx(css$17.block, className),
6135
+ className: clsx(css$18.block, className),
4531
6136
  "data-terminal": "",
4532
6137
  "data-running": running ? "" : void 0,
4533
6138
  children: [jsxs("div", {
4534
- className: css$17.header,
6139
+ className: css$18.header,
4535
6140
  children: [
4536
6141
  jsxs("div", {
4537
- className: css$17.prompt,
6142
+ className: css$18.prompt,
4538
6143
  children: [jsx("span", {
4539
- className: css$17.runStateLabel,
6144
+ className: css$18.runStateLabel,
4540
6145
  children: state.label
4541
6146
  }), commandLines.map((line, index) => jsxs("div", {
4542
- className: css$17.promptLine,
6147
+ className: css$18.promptLine,
4543
6148
  children: [
4544
6149
  index === 0 && jsx(StateDot, {
4545
6150
  state: state.state,
4546
- className: css$17.runState
6151
+ className: css$18.runState
4547
6152
  }),
4548
6153
  jsx("span", {
4549
- className: css$17.cwd,
6154
+ className: css$18.cwd,
4550
6155
  children: index > 0 || cwd === void 0 ? "$" : promptLabel(cwd, home)
4551
6156
  }),
4552
6157
  jsx("span", {
4553
- className: css$17.command,
6158
+ className: css$18.command,
4554
6159
  children: line
4555
6160
  })
4556
6161
  ]
4557
6162
  }, index))]
4558
6163
  }),
4559
6164
  status !== void 0 && jsx(Pill, {
4560
- className: css$17.status,
6165
+ className: css$18.status,
4561
6166
  children: status
4562
6167
  }),
4563
6168
  !running && !empty && jsx("button", {
4564
6169
  type: "button",
4565
- className: css$17.copyButton,
6170
+ className: css$18.copyButton,
4566
6171
  onClick: onCopy,
4567
6172
  children: copied ? copy.copied : copy.copy
4568
6173
  })
4569
6174
  ]
4570
6175
  }), !running && (empty ? jsx("div", {
4571
- className: css$17.empty,
6176
+ className: css$18.empty,
4572
6177
  children: copy.noOutput
4573
6178
  }) : jsxs("div", {
4574
- className: css$17.output,
6179
+ className: css$18.output,
4575
6180
  children: [
4576
6181
  (capped ? lines.slice(0, headLines) : lines).map((line, index) => jsx("div", {
4577
- className: css$17.line,
6182
+ className: css$18.line,
4578
6183
  children: renderLine$1(line)
4579
6184
  }, index)),
4580
6185
  hidden > 0 && jsx("button", {
4581
6186
  type: "button",
4582
- className: css$17.expand,
6187
+ className: css$18.expand,
4583
6188
  "aria-expanded": expanded,
4584
6189
  "aria-label": expanded ? copy.collapseAria : copy.expandAria(hidden),
4585
6190
  onClick: onToggle,
4586
6191
  children: expanded ? copy.collapse : copy.expand(hidden)
4587
6192
  }),
4588
6193
  capped && lines.slice(lines.length - tailLines).map((line, index) => jsx("div", {
4589
- className: css$17.line,
6194
+ className: css$18.line,
4590
6195
  children: renderLine$1(line)
4591
6196
  }, index))
4592
6197
  ]
@@ -5164,51 +6769,51 @@ function ReadBlock({ label, labels, lines, totalLines, lang, maxLines = 16, clas
5164
6769
  const tailLines = maxLines - headLines;
5165
6770
  const windowed = lines.length < totalLines;
5166
6771
  const rows = (slice) => slice.map(([line, spans]) => jsxs("div", {
5167
- className: css$18.line,
6772
+ className: css$19.line,
5168
6773
  children: [jsx("span", {
5169
- className: css$18.gutter,
6774
+ className: css$19.gutter,
5170
6775
  "aria-hidden": true,
5171
6776
  children: line.number
5172
6777
  }), jsx("span", {
5173
- className: css$18.content,
6778
+ className: css$19.content,
5174
6779
  children: spans === void 0 ? line.text : renderSpans(spans)
5175
6780
  })]
5176
6781
  }, line.number));
5177
6782
  const paired = lines.map((line, index) => [line, highlighted?.[index]]);
5178
6783
  return jsxs("div", {
5179
6784
  ref: rootRef,
5180
- className: clsx(css$18.block, className),
6785
+ className: clsx(css$19.block, className),
5181
6786
  "data-read": "",
5182
6787
  children: [jsxs("div", {
5183
- className: css$18.banner,
6788
+ className: css$19.banner,
5184
6789
  children: [jsx("div", {
5185
- className: css$18.label,
6790
+ className: css$19.label,
5186
6791
  children: label ?? ""
5187
6792
  }), jsxs("div", {
5188
- className: css$18.action,
6793
+ className: css$19.action,
5189
6794
  children: [
5190
6795
  windowed && jsx("span", {
5191
- className: css$18.count,
6796
+ className: css$19.count,
5192
6797
  children: labels.window(lines.length, totalLines)
5193
6798
  }),
5194
6799
  jsx("span", {
5195
- className: css$18.lang,
6800
+ className: css$19.lang,
5196
6801
  children: lang ?? ""
5197
6802
  }),
5198
6803
  lines.length > 0 && jsx("button", {
5199
6804
  type: "button",
5200
- className: css$18.copyButton,
6805
+ className: css$19.copyButton,
5201
6806
  onClick: onCopy,
5202
6807
  children: copied ? labels.copied : labels.copy
5203
6808
  })
5204
6809
  ]
5205
6810
  })]
5206
6811
  }), jsxs("div", {
5207
- className: css$18.body,
6812
+ className: css$19.body,
5208
6813
  children: [
5209
6814
  rows(capped ? paired.slice(0, headLines) : paired),
5210
6815
  hidden > 0 && jsx(FoldToggle, {
5211
- className: css$18.expand,
6816
+ className: css$19.expand,
5212
6817
  expanded,
5213
6818
  hidden,
5214
6819
  labels,
@@ -5230,10 +6835,10 @@ function assertNever(value) {
5230
6835
  }
5231
6836
  /** The dim class per row kind (path/gap chrome vs the diff's own +/- colors). */
5232
6837
  const ROW_CLASS = {
5233
- path: css$19.path,
5234
- del: css$19.del,
5235
- add: css$19.add,
5236
- gap: css$19.gap
6838
+ path: css$20.path,
6839
+ del: css$20.del,
6840
+ add: css$20.add,
6841
+ gap: css$20.gap
5237
6842
  };
5238
6843
  /**
5239
6844
  * Total added/removed line counts across hunks — the same numbers the footer
@@ -5357,37 +6962,37 @@ function DiffBlock({ diffs, labels, maxLines = 16, className }) {
5357
6962
  const head = capped ? rows.slice(0, headLines) : rows;
5358
6963
  const tail = capped ? rows.slice(rows.length - tailLines) : [];
5359
6964
  return jsxs("div", {
5360
- className: clsx(css$19.block, className),
6965
+ className: clsx(css$20.block, className),
5361
6966
  "data-diff": "",
5362
6967
  children: [
5363
6968
  jsx("button", {
5364
6969
  type: "button",
5365
- className: css$19.copyButton,
6970
+ className: css$20.copyButton,
5366
6971
  onClick: onCopy,
5367
6972
  children: copied ? labels.copied : labels.copy
5368
6973
  }),
5369
6974
  jsxs("div", {
5370
- className: css$19.body,
6975
+ className: css$20.body,
5371
6976
  children: [
5372
6977
  head.map((row, index) => jsx("div", {
5373
- className: clsx(css$19.line, ROW_CLASS[row.kind]),
6978
+ className: clsx(css$20.line, ROW_CLASS[row.kind]),
5374
6979
  children: row.text
5375
6980
  }, index)),
5376
6981
  hidden > 0 && jsx(FoldToggle, {
5377
- className: css$19.expand,
6982
+ className: css$20.expand,
5378
6983
  expanded,
5379
6984
  hidden,
5380
6985
  labels,
5381
6986
  onToggle
5382
6987
  }),
5383
6988
  tail.map((row, index) => jsx("div", {
5384
- className: clsx(css$19.line, ROW_CLASS[row.kind]),
6989
+ className: clsx(css$20.line, ROW_CLASS[row.kind]),
5385
6990
  children: row.text
5386
6991
  }, index))
5387
6992
  ]
5388
6993
  }),
5389
6994
  jsxs("div", {
5390
- className: css$19.footer,
6995
+ className: css$20.footer,
5391
6996
  children: [
5392
6997
  "└ +",
5393
6998
  added,
@@ -5523,56 +7128,56 @@ function SearchBlock(props) {
5523
7128
  const tail = tailHeader === void 0 ? naturalTail : naturalTail.slice(1);
5524
7129
  const renderRow = (row) => {
5525
7130
  if (row.type === "path") return jsx("div", {
5526
- className: css$20.line,
7131
+ className: css$21.line,
5527
7132
  children: row.path
5528
7133
  });
5529
7134
  if (row.type === "match") return jsxs("div", {
5530
- className: css$20.line,
7135
+ className: css$21.line,
5531
7136
  children: [jsxs("span", {
5532
- className: css$20.lineNumber,
7137
+ className: css$21.lineNumber,
5533
7138
  children: [row.lineNumber, ": "]
5534
7139
  }), row.line]
5535
7140
  });
5536
7141
  return jsxs("button", {
5537
7142
  type: "button",
5538
- className: css$20.fileHeader,
7143
+ className: css$21.fileHeader,
5539
7144
  "aria-expanded": !row.collapsed,
5540
7145
  onClick: () => {
5541
7146
  toggleFile(row.index);
5542
7147
  },
5543
7148
  children: [jsx("span", {
5544
- className: css$20.filePath,
7149
+ className: css$21.filePath,
5545
7150
  children: row.path
5546
7151
  }), jsx("span", {
5547
- className: css$20.fileCount,
7152
+ className: css$21.fileCount,
5548
7153
  children: row.count
5549
7154
  })]
5550
7155
  });
5551
7156
  };
5552
7157
  return jsxs("div", {
5553
- className: clsx(css$20.block, className),
7158
+ className: clsx(css$21.block, className),
5554
7159
  "data-search": props.kind,
5555
7160
  children: [jsxs("div", {
5556
- className: css$20.header,
7161
+ className: css$21.header,
5557
7162
  children: [jsx("span", {
5558
- className: css$20.summary,
7163
+ className: css$21.summary,
5559
7164
  children: summaryText(props, shown, truncated, total)
5560
7165
  }), !empty && jsx("button", {
5561
7166
  type: "button",
5562
- className: css$20.copyButton,
7167
+ className: css$21.copyButton,
5563
7168
  onClick: onCopy,
5564
7169
  children: copied ? props.labels.copied : props.labels.copy
5565
7170
  })]
5566
7171
  }), empty ? jsx("div", {
5567
- className: css$20.empty,
7172
+ className: css$21.empty,
5568
7173
  children: props.labels.noResults
5569
7174
  }) : jsxs("div", {
5570
- className: css$20.body,
7175
+ className: css$21.body,
5571
7176
  children: [
5572
7177
  head.map((row) => jsx("div", { children: renderRow(row) }, rowKey(row))),
5573
7178
  hidden > 0 && jsx("button", {
5574
7179
  type: "button",
5575
- className: css$20.expand,
7180
+ className: css$21.expand,
5576
7181
  "aria-expanded": expanded,
5577
7182
  "aria-label": expanded ? props.labels.collapseAria : props.labels.expandAria(hidden),
5578
7183
  onClick: onToggle,
@@ -6278,8 +7883,9 @@ function renderLine(line, index) {
6278
7883
  }, spanIndex))
6279
7884
  })] }, index);
6280
7885
  }
6281
- function CodeBlock({ code, lang, streaming, className, copyLabel, copiedLabel }) {
7886
+ function CodeBlock({ code, lang, streaming, className, lineNumbers = false, copyLabel, copiedLabel }) {
6282
7887
  const trimmed = code.endsWith("\n") ? code.slice(0, -1) : code;
7888
+ const sourceLines = lineNumbers ? trimmed.split("\n") : void 0;
6283
7889
  const rootRef = useRef(null);
6284
7890
  const highlighting = useViewportHighlighting(rootRef, lang);
6285
7891
  const loaded = useSyncExternalStore(subscribeGrammarLoaded, grammarLoadCount, grammarLoadCount);
@@ -6373,24 +7979,30 @@ function CodeBlock({ code, lang, streaming, className, copyLabel, copiedLabel })
6373
7979
  });
6374
7980
  }, [copied, trimmed]);
6375
7981
  const body = streamedBody !== void 0 ? streamedBody : html === void 0 ? jsx("pre", {
6376
- className: css$21.plain,
6377
- children: jsx("code", { children: trimmed })
7982
+ className: css$22.plain,
7983
+ children: jsx("code", { children: sourceLines === void 0 ? trimmed : sourceLines.map((line, index) => jsxs(Fragment$1, { children: [index > 0 && "\n", jsx("span", {
7984
+ className: "line",
7985
+ children: line
7986
+ })] }, index)) })
6378
7987
  }) : jsx("div", { dangerouslySetInnerHTML: { __html: html } });
6379
7988
  return jsxs("div", {
6380
7989
  ref: rootRef,
6381
- className: clsx(css$21.block, "md-code-block", className),
7990
+ className: clsx(css$22.block, "md-code-block", lineNumbers && css$22.numbered, className),
7991
+ "data-line-numbers": lineNumbers || void 0,
7992
+ style: sourceLines === void 0 ? void 0 : { "--dsl-code-block-line-number-width": `${Math.max(2, String(sourceLines.length).length)}ch` },
6382
7993
  children: [jsx("div", {
6383
- className: css$21.bannerWrap,
7994
+ className: css$22.bannerWrap,
6384
7995
  children: jsxs("div", {
6385
- className: css$21.banner,
7996
+ className: css$22.banner,
7997
+ "data-code-block-banner": true,
6386
7998
  children: [jsx("div", {
6387
- className: css$21.infostring,
7999
+ className: css$22.infostring,
6388
8000
  children: lang ?? ""
6389
8001
  }), jsx("div", {
6390
- className: css$21.action,
8002
+ className: css$22.action,
6391
8003
  children: jsx("button", {
6392
8004
  type: "button",
6393
- className: css$21.copyButton,
8005
+ className: css$22.copyButton,
6394
8006
  onClick: onCopy,
6395
8007
  children: copied ? copiedLabel : copyLabel
6396
8008
  })
@@ -6634,13 +8246,13 @@ function renderNode(node, key, context) {
6634
8246
  const mention = context.inLink === true ? void 0 : context.fileMentions?.resolve(value);
6635
8247
  if (mention !== void 0) return jsx("code", { children: jsxs("button", {
6636
8248
  type: "button",
6637
- className: css$22.fileMention,
8249
+ className: css$23.fileMention,
6638
8250
  title: mention.title,
6639
8251
  "aria-label": mention.label,
6640
8252
  onClick: mention.open,
6641
8253
  children: [jsx(LinkIcon, {
6642
8254
  kind: classifyLinkPath(value),
6643
- className: css$22.linkIcon
8255
+ className: css$23.linkIcon
6644
8256
  }), value]
6645
8257
  }) }, key);
6646
8258
  return jsx("code", { children: value }, key);
@@ -6732,7 +8344,7 @@ function renderTable(node, key, context) {
6732
8344
  const [headRow, ...bodyRows] = node.children;
6733
8345
  const wide = (align === null ? headRow?.children.length ?? 0 : align.length) >= 4 && context.inBlockquote !== true;
6734
8346
  return jsx("div", {
6735
- className: clsx(css$22.tableScroll, wide ? "md-table-wide" : css$22.tableFill),
8347
+ className: clsx(css$23.tableScroll, wide ? "md-table-wide" : css$23.tableFill),
6736
8348
  tabIndex: wide ? 0 : void 0,
6737
8349
  children: jsxs("table", { children: [headRow !== void 0 && jsx("thead", { children: renderTableRow(headRow, "th", align, 0, context) }), bodyRows.length > 0 && jsx("tbody", { children: bodyRows.map((row, index) => renderTableRow(row, "td", align, index + 1, context)) })] })
6738
8350
  }, key);
@@ -6770,7 +8382,7 @@ function renderSafeLink(href, children, key, glyph = true) {
6770
8382
  } : {},
6771
8383
  children: [glyph && jsx(LinkIcon, {
6772
8384
  kind: "url",
6773
- className: css$22.linkIcon
8385
+ className: css$23.linkIcon
6774
8386
  }), children]
6775
8387
  }, key);
6776
8388
  }
@@ -6794,7 +8406,7 @@ function inlineCodeHttpUrl(value) {
6794
8406
  function renderImage(url, alt, key, context) {
6795
8407
  const imageSrc = imageSource(url, context.pathImages);
6796
8408
  if (imageSrc === void 0) return jsx("span", {
6797
- className: css$22.imageAlt,
8409
+ className: css$23.imageAlt,
6798
8410
  children: alt
6799
8411
  }, key);
6800
8412
  return jsx(MarkdownImage, {
@@ -6807,11 +8419,11 @@ function renderImage(url, alt, key, context) {
6807
8419
  function MarkdownImage({ src, alt, destination }) {
6808
8420
  const [failed, setFailed] = useState(false);
6809
8421
  if (failed) return jsx("span", {
6810
- className: css$22.imageAlt,
8422
+ className: css$23.imageAlt,
6811
8423
  children: alt || destination
6812
8424
  });
6813
8425
  return jsx("img", {
6814
- className: css$22.image,
8426
+ className: css$23.image,
6815
8427
  src,
6816
8428
  alt,
6817
8429
  onError: () => {
@@ -7056,7 +8668,7 @@ const MarkdownText = memo(function MarkdownText({ text, streaming = false, label
7056
8668
  pathImages
7057
8669
  ]);
7058
8670
  return jsx("div", {
7059
- className: css$22.markdown,
8671
+ className: css$23.markdown,
7060
8672
  children
7061
8673
  });
7062
8674
  });
@@ -7119,7 +8731,7 @@ function SafeLink({ url, label, className }) {
7119
8731
  rel: "noopener noreferrer",
7120
8732
  children: [jsx(LinkIcon, {
7121
8733
  kind: "url",
7122
- className: css$23.linkIcon
8734
+ className: css$24.linkIcon
7123
8735
  }), label]
7124
8736
  });
7125
8737
  }
@@ -7134,20 +8746,20 @@ function SafeLink({ url, label, className }) {
7134
8746
  */
7135
8747
  function SourceItem({ source, ordinal }) {
7136
8748
  return jsxs("li", {
7137
- className: css$23.source,
8749
+ className: css$24.source,
7138
8750
  value: ordinal,
7139
8751
  children: [
7140
8752
  jsx(SafeLink, {
7141
8753
  url: source.url,
7142
8754
  label: linkLabel(source.url, source.title),
7143
- className: css$23.sourceLink
8755
+ className: css$24.sourceLink
7144
8756
  }),
7145
8757
  source.snippet !== void 0 && source.snippet !== "" && jsx("div", {
7146
- className: css$23.snippet,
8758
+ className: css$24.snippet,
7147
8759
  children: source.snippet
7148
8760
  }),
7149
8761
  source.publishedAt !== void 0 && source.publishedAt !== "" && jsx("div", {
7150
- className: css$23.published,
8762
+ className: css$24.published,
7151
8763
  children: source.publishedAt
7152
8764
  })
7153
8765
  ]
@@ -7162,28 +8774,28 @@ function SourceItem({ source, ordinal }) {
7162
8774
  function WebSearchBlock({ answer, sources, truncated, labels, className }) {
7163
8775
  const empty = (answer === void 0 || answer === "") && sources.length === 0;
7164
8776
  return jsxs("div", {
7165
- className: clsx(css$23.block, className),
8777
+ className: clsx(css$24.block, className),
7166
8778
  "data-web": "search",
7167
8779
  children: [
7168
8780
  answer !== void 0 && answer !== "" && jsx("div", {
7169
- className: css$23.answer,
8781
+ className: css$24.answer,
7170
8782
  children: jsx(MarkdownText, {
7171
8783
  text: answer,
7172
8784
  labels: labels.markdown
7173
8785
  })
7174
8786
  }),
7175
8787
  empty ? jsx("div", {
7176
- className: css$23.empty,
8788
+ className: css$24.empty,
7177
8789
  children: labels.noResults
7178
8790
  }) : jsx("ol", {
7179
- className: css$23.sources,
8791
+ className: css$24.sources,
7180
8792
  children: sources.map((source, index) => jsx(SourceItem, {
7181
8793
  source,
7182
8794
  ordinal: index + 1
7183
8795
  }, index))
7184
8796
  }),
7185
8797
  truncated && jsx("div", {
7186
- className: css$23.truncated,
8798
+ className: css$24.truncated,
7187
8799
  children: labels.sourcesTruncated
7188
8800
  })
7189
8801
  ]
@@ -7196,23 +8808,23 @@ function WebSearchBlock({ answer, sources, truncated, labels, className }) {
7196
8808
  */
7197
8809
  function WebFetchBlock({ url, statusCode, truncated, labels, className }) {
7198
8810
  return jsxs("div", {
7199
- className: clsx(css$23.block, css$23.fetch, className),
8811
+ className: clsx(css$24.block, css$24.fetch, className),
7200
8812
  "data-web": "fetch",
7201
8813
  children: [jsx(SafeLink, {
7202
8814
  url,
7203
8815
  label: url,
7204
- className: css$23.fetchUrl
8816
+ className: css$24.fetchUrl
7205
8817
  }), jsxs("div", {
7206
- className: css$23.fetchMeta,
8818
+ className: css$24.fetchMeta,
7207
8819
  children: [jsxs("span", {
7208
- className: css$23.status,
8820
+ className: css$24.status,
7209
8821
  children: [
7210
8822
  labels.http,
7211
8823
  " ",
7212
8824
  statusCode
7213
8825
  ]
7214
8826
  }), truncated && jsx("span", {
7215
- className: css$23.truncated,
8827
+ className: css$24.truncated,
7216
8828
  children: labels.contentTruncated
7217
8829
  })]
7218
8830
  })]
@@ -7246,10 +8858,10 @@ function JsonBlock({ label, payload, defaultOpen = false, truncatedLabel }) {
7246
8858
  truncatedLabel
7247
8859
  ]);
7248
8860
  return jsxs("div", {
7249
- className: css$24.root,
8861
+ className: css$25.root,
7250
8862
  children: [jsxs("button", {
7251
8863
  type: "button",
7252
- className: css$24.toggle,
8864
+ className: css$25.toggle,
7253
8865
  onClick: () => {
7254
8866
  setOpen((v) => !v);
7255
8867
  },
@@ -7259,7 +8871,7 @@ function JsonBlock({ label, payload, defaultOpen = false, truncatedLabel }) {
7259
8871
  label
7260
8872
  ]
7261
8873
  }), open && jsx("pre", {
7262
- className: css$24.body,
8874
+ className: css$25.body,
7263
8875
  children: body
7264
8876
  })]
7265
8877
  });
@@ -7336,6 +8948,6 @@ function extractMarkdownPlainText(markdown, options = {}) {
7336
8948
  }
7337
8949
  }
7338
8950
  //#endregion
7339
- export { BrandWordmark, Button, CodeBlock, ConnectionIndicator, DEFAULT_DIFF_MAX_LINES, DEFAULT_READ_MAX_LINES, DEFAULT_SEARCH_MAX_LINES, DEFAULT_TERMINAL_MAX_LINES, DiffBlock, DisclosureRow, DocumentFileIcon, FISH_LOGO_PATH, FISH_LOGO_VIEWBOX, FishLogo, HoverCard, IconAgentPresetOutline16, IconAlarmClockOutline16, IconApiOutline14, IconArchiveOutline20, IconBranchOutline16, IconBrowseOutline16, IconCheckOutline14, IconCheckOutline16, IconChecklistOutline14, IconChevronDownOutline14, IconChevronLeftOutline14, IconChevronRightOutline14, IconChevronUpOutline14, IconClockOutline16, IconCloseFill14, IconCloseOutline16, IconCodeOutline16, IconContextInjectionOutline16, IconCopyOutline16, IconCordisPluginOutline14, IconDarkOutline16, IconDataOutline16, IconDatabaseOutline16, IconDislikeFill16, IconDislikeOutline16, IconDownloadOutline16, IconEditOutline16, IconEllipsisOutline16, IconEnhanceOutline16, IconFolderClose16, IconFolderOpen16, IconFolderOpenOutline16, IconFollowsystemOutline16, IconFullscreenOutline16, IconGaugeOutline16, IconGlobeOutline14, IconGoalOutline16, IconInspectOutline12, IconLightOutline16, IconLikeFill16, IconLikeOutline16, IconLinkOutline14, IconLinkOutline16, IconListPenOutline16, IconLoadingOutline16, IconNewChatOutline16, IconPanelLeftOutline16, IconPaperclipOutline16, IconPauseOutline16, IconPersonalizationOutline16, IconPlayOutline16, IconPlusOutline16, IconProjectAddOutline16, IconQuestionOutline14, IconQueueOutline14, IconRefreshOutline14, IconRefreshOutline16, IconRightUpOutline14, IconRightUpOutline16, IconSearchOutline16, IconSendOutline14, IconSendOutline16, IconSettingsOutline14, IconSettingsOutline16, IconShareOutline16, IconSkillOutline16, IconSparkle16, IconStopFill16, IconThinkOutline14, IconThinkOutline16, IconTrashOutline16, IconTreeCorner8x10, IconTriangleRightFill14, IconUserOutline16, IconWarningOutline16, Input, JsonBlock, JsonTree, LinkIcon, MarkdownText, Menu, Modal, OnboardingSurface, Pill, ReadBlock, ReferenceIcon, RiskConfirmation, SearchBlock, StateDot, Switch, Tag, TerminalBlock, Toast, Tooltip, WebBlock, classifyLinkPath, diffTotals, extractMarkdownPlainText, fileSizeText, projectUserText, rankByName, relativeTime, useAnchoredMaxHeight, useAnchoredPosition, useDismissOnOutsidePointer, writeClipboard };
8951
+ export { BrandWordmark, Button, 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, HoverCard, IconAgentPresetOutline16, IconAlarmClockOutline16, IconApiOutline14, IconArchiveOutline20, IconBranchOutline16, IconBrowseOutline16, IconCheckOutline14, IconCheckOutline16, IconChecklistOutline14, IconChevronDownOutline14, IconChevronLeftOutline14, IconChevronRightOutline14, IconChevronUpOutline14, IconClockOutline16, IconCloseFill14, IconCloseOutline16, IconCodeOutline16, IconContextInjectionOutline16, IconCopyOutline16, IconCordisPluginOutline14, IconDarkOutline16, IconDataOutline16, IconDatabaseOutline16, IconDislikeFill16, IconDislikeOutline16, IconDownloadOutline16, IconEditOutline16, IconEllipsisOutline16, IconEnhanceOutline16, IconFolderClose16, IconFolderOpen16, IconFolderOpenOutline16, IconFollowsystemOutline16, IconFullscreenOutline16, IconGaugeOutline16, IconGlobeOutline14, IconGoalOutline16, IconInspectOutline12, IconLightOutline16, IconLikeFill16, IconLikeOutline16, IconLinkOutline14, IconLinkOutline16, IconListPenOutline16, IconLoadingOutline16, IconNewChatOutline16, IconPanelLeftOutline16, IconPaperclipOutline16, IconPauseOutline16, IconPersonalizationOutline16, IconPlayOutline16, IconPlusOutline16, IconProjectAddOutline16, IconQuestionOutline14, IconQueueOutline14, IconRefreshOutline14, IconRefreshOutline16, IconRightUpOutline14, IconRightUpOutline16, IconSearchOutline16, IconSendOutline14, IconSendOutline16, IconSettingsOutline14, IconSettingsOutline16, IconShareOutline16, IconSkillOutline16, IconSparkle16, IconStopFill16, IconThinkOutline14, IconThinkOutline16, IconTrashOutline16, IconTreeCorner8x10, IconTriangleRightFill14, IconUserOutline16, IconWarningOutline16, Input, JsonBlock, JsonTree, LinkIcon, MarkdownText, Menu, Modal, OnboardingSurface, Pill, ReadBlock, ReferenceIcon, RiskConfirmation, SearchBlock, StateDot, Switch, Tag, TerminalBlock, Toast, Tooltip, WebBlock, classifyFileType, classifyLinkPath, diffTotals, extractMarkdownPlainText, fileExtension, fileSizeText, projectUserText, rankByName, relativeTime, useAnchoredMaxHeight, useAnchoredPosition, useDismissOnOutsidePointer, writeClipboard };
7340
8952
 
7341
8953
  //# sourceMappingURL=index.js.map