@codesweep-ai/ui 0.2.1-dev.20260830023458.856ea8f

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.
Files changed (215) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +2 -0
  3. package/README.md +124 -0
  4. package/dist/BUILD.json +1 -0
  5. package/dist/chart.d.ts +3 -0
  6. package/dist/chart.d.ts.map +1 -0
  7. package/dist/chart.js +3 -0
  8. package/dist/code.d.ts +2 -0
  9. package/dist/code.d.ts.map +1 -0
  10. package/dist/code.js +2 -0
  11. package/dist/components/AgentStatus.d.ts +15 -0
  12. package/dist/components/AgentStatus.d.ts.map +1 -0
  13. package/dist/components/AgentStatus.js +38 -0
  14. package/dist/components/AgentTrace.d.ts +42 -0
  15. package/dist/components/AgentTrace.d.ts.map +1 -0
  16. package/dist/components/AgentTrace.js +140 -0
  17. package/dist/components/AppShell.d.ts +29 -0
  18. package/dist/components/AppShell.d.ts.map +1 -0
  19. package/dist/components/AppShell.js +71 -0
  20. package/dist/components/Button.d.ts +10 -0
  21. package/dist/components/Button.d.ts.map +1 -0
  22. package/dist/components/Button.js +41 -0
  23. package/dist/components/Card.d.ts +19 -0
  24. package/dist/components/Card.d.ts.map +1 -0
  25. package/dist/components/Card.js +96 -0
  26. package/dist/components/CardGroup.d.ts +16 -0
  27. package/dist/components/CardGroup.d.ts.map +1 -0
  28. package/dist/components/CardGroup.js +33 -0
  29. package/dist/components/CardGroupContext.d.ts +14 -0
  30. package/dist/components/CardGroupContext.d.ts.map +1 -0
  31. package/dist/components/CardGroupContext.js +8 -0
  32. package/dist/components/ChartFrame.d.ts +30 -0
  33. package/dist/components/ChartFrame.d.ts.map +1 -0
  34. package/dist/components/ChartFrame.js +96 -0
  35. package/dist/components/ChartTooltip.d.ts +22 -0
  36. package/dist/components/ChartTooltip.d.ts.map +1 -0
  37. package/dist/components/ChartTooltip.js +26 -0
  38. package/dist/components/CheckboxGroup.d.ts +37 -0
  39. package/dist/components/CheckboxGroup.d.ts.map +1 -0
  40. package/dist/components/CheckboxGroup.js +198 -0
  41. package/dist/components/Chip.d.ts +9 -0
  42. package/dist/components/Chip.d.ts.map +1 -0
  43. package/dist/components/Chip.js +31 -0
  44. package/dist/components/CodeBlock.d.ts +30 -0
  45. package/dist/components/CodeBlock.d.ts.map +1 -0
  46. package/dist/components/CodeBlock.js +112 -0
  47. package/dist/components/Dropdown.d.ts +28 -0
  48. package/dist/components/Dropdown.d.ts.map +1 -0
  49. package/dist/components/Dropdown.js +50 -0
  50. package/dist/components/EventLanes.d.ts +93 -0
  51. package/dist/components/EventLanes.d.ts.map +1 -0
  52. package/dist/components/EventLanes.js +445 -0
  53. package/dist/components/FormGroup.d.ts +29 -0
  54. package/dist/components/FormGroup.d.ts.map +1 -0
  55. package/dist/components/FormGroup.js +48 -0
  56. package/dist/components/HighlightText.d.ts +15 -0
  57. package/dist/components/HighlightText.d.ts.map +1 -0
  58. package/dist/components/HighlightText.js +28 -0
  59. package/dist/components/Input.d.ts +35 -0
  60. package/dist/components/Input.d.ts.map +1 -0
  61. package/dist/components/Input.js +61 -0
  62. package/dist/components/Legend.d.ts +21 -0
  63. package/dist/components/Legend.d.ts.map +1 -0
  64. package/dist/components/Legend.js +61 -0
  65. package/dist/components/LightweightMarkdown.d.ts +3 -0
  66. package/dist/components/LightweightMarkdown.d.ts.map +1 -0
  67. package/dist/components/LightweightMarkdown.js +249 -0
  68. package/dist/components/MarkdownMinimap.d.ts +7 -0
  69. package/dist/components/MarkdownMinimap.d.ts.map +1 -0
  70. package/dist/components/MarkdownMinimap.js +84 -0
  71. package/dist/components/MarkdownViewer.d.ts +51 -0
  72. package/dist/components/MarkdownViewer.d.ts.map +1 -0
  73. package/dist/components/MarkdownViewer.js +455 -0
  74. package/dist/components/MermaidDiagram.d.ts +11 -0
  75. package/dist/components/MermaidDiagram.d.ts.map +1 -0
  76. package/dist/components/MermaidDiagram.js +119 -0
  77. package/dist/components/Modal.d.ts +13 -0
  78. package/dist/components/Modal.d.ts.map +1 -0
  79. package/dist/components/Modal.js +91 -0
  80. package/dist/components/Panel.d.ts +13 -0
  81. package/dist/components/Panel.d.ts.map +1 -0
  82. package/dist/components/Panel.js +44 -0
  83. package/dist/components/PulseBadge.d.ts +15 -0
  84. package/dist/components/PulseBadge.d.ts.map +1 -0
  85. package/dist/components/PulseBadge.js +22 -0
  86. package/dist/components/RadioGroup.d.ts +20 -0
  87. package/dist/components/RadioGroup.d.ts.map +1 -0
  88. package/dist/components/RadioGroup.js +63 -0
  89. package/dist/components/RichMarkdownRenderer.d.ts +10 -0
  90. package/dist/components/RichMarkdownRenderer.d.ts.map +1 -0
  91. package/dist/components/RichMarkdownRenderer.js +18 -0
  92. package/dist/components/SearchInput.d.ts +25 -0
  93. package/dist/components/SearchInput.d.ts.map +1 -0
  94. package/dist/components/SearchInput.js +92 -0
  95. package/dist/components/SectionedTree.d.ts +36 -0
  96. package/dist/components/SectionedTree.d.ts.map +1 -0
  97. package/dist/components/SectionedTree.js +173 -0
  98. package/dist/components/SegmentedControl.d.ts +16 -0
  99. package/dist/components/SegmentedControl.d.ts.map +1 -0
  100. package/dist/components/SegmentedControl.js +48 -0
  101. package/dist/components/Skeleton.d.ts +8 -0
  102. package/dist/components/Skeleton.d.ts.map +1 -0
  103. package/dist/components/Skeleton.js +25 -0
  104. package/dist/components/SplitPane.d.ts +16 -0
  105. package/dist/components/SplitPane.d.ts.map +1 -0
  106. package/dist/components/SplitPane.js +118 -0
  107. package/dist/components/StatusBadge.d.ts +15 -0
  108. package/dist/components/StatusBadge.d.ts.map +1 -0
  109. package/dist/components/StatusBadge.js +40 -0
  110. package/dist/components/StreamingText.d.ts +20 -0
  111. package/dist/components/StreamingText.d.ts.map +1 -0
  112. package/dist/components/StreamingText.js +50 -0
  113. package/dist/components/Table.d.ts +62 -0
  114. package/dist/components/Table.d.ts.map +1 -0
  115. package/dist/components/Table.js +256 -0
  116. package/dist/components/ThemeToggle.d.ts +11 -0
  117. package/dist/components/ThemeToggle.d.ts.map +1 -0
  118. package/dist/components/ThemeToggle.js +55 -0
  119. package/dist/components/Toast.d.ts +8 -0
  120. package/dist/components/Toast.d.ts.map +1 -0
  121. package/dist/components/Toast.js +51 -0
  122. package/dist/components/ToastContainer.d.ts +5 -0
  123. package/dist/components/ToastContainer.d.ts.map +1 -0
  124. package/dist/components/ToastContainer.js +29 -0
  125. package/dist/components/Tree.d.ts +50 -0
  126. package/dist/components/Tree.d.ts.map +1 -0
  127. package/dist/components/Tree.js +528 -0
  128. package/dist/components/TreeDnd.d.ts +18 -0
  129. package/dist/components/TreeDnd.d.ts.map +1 -0
  130. package/dist/components/TreeDnd.js +39 -0
  131. package/dist/index.d.ts +50 -0
  132. package/dist/index.d.ts.map +1 -0
  133. package/dist/index.js +35 -0
  134. package/dist/lib/accentToken.d.ts +3 -0
  135. package/dist/lib/accentToken.d.ts.map +1 -0
  136. package/dist/lib/accentToken.js +12 -0
  137. package/dist/lib/chartTheme.d.ts +45 -0
  138. package/dist/lib/chartTheme.d.ts.map +1 -0
  139. package/dist/lib/chartTheme.js +64 -0
  140. package/dist/lib/cn.d.ts +6 -0
  141. package/dist/lib/cn.d.ts.map +1 -0
  142. package/dist/lib/cn.js +11 -0
  143. package/dist/lib/forwardRefToRoot.d.ts +8 -0
  144. package/dist/lib/forwardRefToRoot.d.ts.map +1 -0
  145. package/dist/lib/forwardRefToRoot.js +18 -0
  146. package/dist/lib/markdownUrl.d.ts +5 -0
  147. package/dist/lib/markdownUrl.d.ts.map +1 -0
  148. package/dist/lib/markdownUrl.js +24 -0
  149. package/dist/lib/toast.d.ts +30 -0
  150. package/dist/lib/toast.d.ts.map +1 -0
  151. package/dist/lib/toast.js +34 -0
  152. package/dist/lib/useTheme.d.ts +22 -0
  153. package/dist/lib/useTheme.d.ts.map +1 -0
  154. package/dist/lib/useTheme.js +62 -0
  155. package/dist/markdown/rich.d.ts +10 -0
  156. package/dist/markdown/rich.d.ts.map +1 -0
  157. package/dist/markdown/rich.js +8 -0
  158. package/dist/markdown.d.ts +3 -0
  159. package/dist/markdown.d.ts.map +1 -0
  160. package/dist/markdown.js +2 -0
  161. package/dist/mermaid.d.ts +2 -0
  162. package/dist/mermaid.d.ts.map +1 -0
  163. package/dist/mermaid.js +2 -0
  164. package/dist/minimap.d.ts +2 -0
  165. package/dist/minimap.d.ts.map +1 -0
  166. package/dist/minimap.js +2 -0
  167. package/dist/styles/base.css +98 -0
  168. package/dist/styles/components/agent-status.css +52 -0
  169. package/dist/styles/components/agent-trace.css +206 -0
  170. package/dist/styles/components/app-shell.css +195 -0
  171. package/dist/styles/components/button.css +172 -0
  172. package/dist/styles/components/card-group.css +20 -0
  173. package/dist/styles/components/card.css +200 -0
  174. package/dist/styles/components/chart-frame.css +144 -0
  175. package/dist/styles/components/chart-tooltip.css +54 -0
  176. package/dist/styles/components/checkbox-group.css +281 -0
  177. package/dist/styles/components/chip.css +61 -0
  178. package/dist/styles/components/code-block.css +215 -0
  179. package/dist/styles/components/dropdown.css +131 -0
  180. package/dist/styles/components/event-lanes.css +159 -0
  181. package/dist/styles/components/form-group.css +34 -0
  182. package/dist/styles/components/highlight-text.css +17 -0
  183. package/dist/styles/components/input.css +168 -0
  184. package/dist/styles/components/legend.css +80 -0
  185. package/dist/styles/components/markdown-minimap.css +13 -0
  186. package/dist/styles/components/markdown-viewer.css +354 -0
  187. package/dist/styles/components/mermaid-diagram.css +8 -0
  188. package/dist/styles/components/modal.css +167 -0
  189. package/dist/styles/components/panel.css +126 -0
  190. package/dist/styles/components/pulse-badge.css +56 -0
  191. package/dist/styles/components/radio-group.css +89 -0
  192. package/dist/styles/components/search-input.css +153 -0
  193. package/dist/styles/components/sectioned-tree.css +183 -0
  194. package/dist/styles/components/segmented-control.css +54 -0
  195. package/dist/styles/components/skeleton.css +21 -0
  196. package/dist/styles/components/split-pane.css +78 -0
  197. package/dist/styles/components/status-badge.css +94 -0
  198. package/dist/styles/components/streaming-text.css +38 -0
  199. package/dist/styles/components/table.css +235 -0
  200. package/dist/styles/components/theme-toggle.css +123 -0
  201. package/dist/styles/components/toast-container.css +34 -0
  202. package/dist/styles/components/toast.css +169 -0
  203. package/dist/styles/components/tree.css +375 -0
  204. package/dist/styles/components.css +37 -0
  205. package/dist/styles/core.css +3 -0
  206. package/dist/styles/markdown-content.css +368 -0
  207. package/dist/styles/print.css +55 -0
  208. package/dist/styles/reset.css +202 -0
  209. package/dist/styles/syntax.css +62 -0
  210. package/dist/styles/tokens.css +344 -0
  211. package/dist/styles/utilities.css +7 -0
  212. package/dist/testing/index.d.ts +39 -0
  213. package/dist/testing/index.d.ts.map +1 -0
  214. package/dist/testing/index.js +119 -0
  215. package/package.json +138 -0
@@ -0,0 +1,21 @@
1
+ export interface LegendItem {
2
+ id: string;
3
+ label: React.ReactNode;
4
+ /** Design-token custom property, for example `--color-cat-1`. */
5
+ color: `--${string}`;
6
+ /** Swatch shape. Default `"dot"`. Use `"square"` when the legend describes a
7
+ * chart that paints square marks — a legend whose swatch does not match the
8
+ * mark it stands for makes the reader map colours by hand. */
9
+ shape?: "dot" | "square";
10
+ }
11
+ interface LegendProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
12
+ items: LegendItem[];
13
+ /** Active items for the interactive form. Defaults to all items. */
14
+ selected?: Set<string>;
15
+ /** Enables toggle buttons and receives the next active set. */
16
+ onChange?: (selected: Set<string>) => void;
17
+ extras?: React.ReactNode;
18
+ }
19
+ export declare const Legend: import("react").ForwardRefExoticComponent<LegendProps & import("react").RefAttributes<HTMLDivElement>>;
20
+ export {};
21
+ //# sourceMappingURL=Legend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Legend.d.ts","sourceRoot":"","sources":["../../src/components/Legend.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,iEAAiE;IACjE,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC;IACrB;;mEAE+D;IAC/D,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC1B;AAED,UAAU,WAAY,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IAClF,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAiED,eAAO,MAAM,MAAM,wGAA4D,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { forwardRefToRoot as e } from "../lib/forwardRefToRoot.js";
2
+ import { cn as t } from "../lib/cn.js";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
+ //#region src/components/Legend.tsx
5
+ function i({ id: e, color: r, shape: i = "dot" }) {
6
+ return /* @__PURE__ */ n("span", {
7
+ "data-legend-swatch": e,
8
+ "aria-hidden": "true",
9
+ className: t("cs-component-legend-5", i === "square" && "cs-component-legend-8"),
10
+ style: { backgroundColor: `var(${r})` }
11
+ });
12
+ }
13
+ function a({ items: e, selected: a, onChange: o, extras: s, className: c, ...l }) {
14
+ let u = a ?? new Set(e.map((e) => e.id)), d = (e) => {
15
+ if (!o) return;
16
+ let t = new Set(u);
17
+ t.has(e) ? t.delete(e) : t.add(e), o(t);
18
+ };
19
+ return /* @__PURE__ */ r("div", {
20
+ role: "group",
21
+ ...l,
22
+ "data-component": "Legend",
23
+ className: t("cs-component-legend-1", c),
24
+ children: [/* @__PURE__ */ n("ul", {
25
+ className: "cs-component-legend-2",
26
+ children: e.map((e) => /* @__PURE__ */ n("li", {
27
+ className: "cs-component-legend-3",
28
+ children: o ? /* @__PURE__ */ r("button", {
29
+ type: "button",
30
+ "aria-pressed": u.has(e.id),
31
+ onClick: () => d(e.id),
32
+ className: "cs-component-legend-4",
33
+ children: [/* @__PURE__ */ n(i, {
34
+ id: e.id,
35
+ color: e.color,
36
+ shape: e.shape
37
+ }), /* @__PURE__ */ n("span", {
38
+ "data-legend-label": e.id,
39
+ children: e.label
40
+ })]
41
+ }) : /* @__PURE__ */ r("span", {
42
+ className: "cs-component-legend-6",
43
+ children: [/* @__PURE__ */ n(i, {
44
+ id: e.id,
45
+ color: e.color,
46
+ shape: e.shape
47
+ }), /* @__PURE__ */ n("span", {
48
+ "data-legend-label": e.id,
49
+ children: e.label
50
+ })]
51
+ })
52
+ }, e.id))
53
+ }), s != null && /* @__PURE__ */ n("div", {
54
+ className: "cs-component-legend-7",
55
+ children: s
56
+ })]
57
+ });
58
+ }
59
+ var o = e(a);
60
+ //#endregion
61
+ export { o as Legend };
@@ -0,0 +1,3 @@
1
+ import type { MarkdownRendererProps } from "./MarkdownViewer";
2
+ export declare function LightweightMarkdown({ content, components }: MarkdownRendererProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=LightweightMarkdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightweightMarkdown.d.ts","sourceRoot":"","sources":["../../src/components/LightweightMarkdown.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAyc1B,wBAAgB,mBAAmB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,qBAAqB,2CASjF"}
@@ -0,0 +1,249 @@
1
+ import { Fragment as e, createElement as t } from "react";
2
+ import { jsx as n } from "react/jsx-runtime";
3
+ //#region src/components/LightweightMarkdown.tsx
4
+ var r = {
5
+ amp: "&",
6
+ apos: "'",
7
+ colon: ":",
8
+ gt: ">",
9
+ lt: "<",
10
+ quot: "\""
11
+ };
12
+ function i(e) {
13
+ return e.replace(/&(#(?:x[0-9a-f]+|\d+)|[a-z]+);/gi, (e, t) => {
14
+ if (t[0] === "#") {
15
+ let n = t[1]?.toLowerCase() === "x", r = Number.parseInt(t.slice(n ? 2 : 1), n ? 16 : 10);
16
+ return Number.isFinite(r) ? String.fromCodePoint(r) : e;
17
+ }
18
+ return r[t.toLowerCase()] ?? e;
19
+ });
20
+ }
21
+ function a(e) {
22
+ return e.toLowerCase().replace(/[^\p{L}\p{M}\p{N}\p{Pc} -]/gu, "").replace(/ /g, "-");
23
+ }
24
+ function o(e) {
25
+ return i(e).replace(/!?(\[)([^\]]+)\]\(([^)]+)\)/g, "$2").replace(/[`*_~]/g, "");
26
+ }
27
+ function s(e, n, r, i, a) {
28
+ return t(i.components[e] ?? e, {
29
+ ...n,
30
+ key: a
31
+ }, r);
32
+ }
33
+ function c(e, t) {
34
+ if (!t) return;
35
+ let n = i(t), r = e[e.length - 1];
36
+ typeof r == "string" ? e[e.length - 1] = r + n : e.push(n);
37
+ }
38
+ function l(e, t, n) {
39
+ let r = t;
40
+ for (; r < e.length;) {
41
+ let t = e.indexOf(n, r);
42
+ if (t < 0) return -1;
43
+ let i = 0;
44
+ for (let n = t - 1; n >= 0 && e[n] === "\\"; n--) i++;
45
+ if (i % 2 == 0) return t;
46
+ r = t + n.length;
47
+ }
48
+ return -1;
49
+ }
50
+ function u(e, t) {
51
+ let n = [], r = 0, a = 0, o = () => `${t.keyPrefix}-i${a++}`;
52
+ for (; r < e.length;) {
53
+ if (e[r] === "\\" && r + 1 < e.length) {
54
+ c(n, e[r + 1]), r += 2;
55
+ continue;
56
+ }
57
+ if (e[r] === "`") {
58
+ let i = 1;
59
+ for (; e[r + i] === "`";) i++;
60
+ let a = "`".repeat(i), c = l(e, r + i, a);
61
+ if (c >= 0) {
62
+ let a = e.slice(r + i, c).replace(/\\\|/g, "|").replace(/\n/g, " ");
63
+ /^\s.*\s$/.test(a) && /\S/.test(a) && (a = a.slice(1, -1)), n.push(s("code", {}, a, t, o())), r = c + i;
64
+ continue;
65
+ }
66
+ }
67
+ let a = e.slice(r).match(/^!\[([^\]]*)\]\((\S+?)(?:\s+["']([^"']*)["'])?\)/);
68
+ if (a) {
69
+ n.push(s("img", {
70
+ src: i(a[2]),
71
+ alt: i(a[1]),
72
+ title: a[3]
73
+ }, null, t, o())), r += a[0].length;
74
+ continue;
75
+ }
76
+ let d = e.slice(r).match(/^\[([^\]]+)\]\((\S+?)(?:\s+["']([^"']*)["'])?\)/);
77
+ if (d) {
78
+ n.push(s("a", {
79
+ href: i(d[2]),
80
+ title: d[3]
81
+ }, u(d[1], {
82
+ ...t,
83
+ keyPrefix: o()
84
+ }), t, o())), r += d[0].length;
85
+ continue;
86
+ }
87
+ let f = e.startsWith("**", r) ? "**" : e.startsWith("__", r) ? "__" : null;
88
+ if (f) {
89
+ let i = l(e, r + 2, f);
90
+ if (i > r + 2) {
91
+ n.push(s("strong", {}, u(e.slice(r + 2, i), {
92
+ ...t,
93
+ keyPrefix: o()
94
+ }), t, o())), r = i + 2;
95
+ continue;
96
+ }
97
+ }
98
+ if (e.startsWith("~~", r)) {
99
+ let i = l(e, r + 2, "~~");
100
+ if (i > r + 2) {
101
+ n.push(s("del", {}, u(e.slice(r + 2, i), {
102
+ ...t,
103
+ keyPrefix: o()
104
+ }), t, o())), r = i + 2;
105
+ continue;
106
+ }
107
+ }
108
+ if (e[r] === "\n" && r >= 2 && e.slice(r - 2, r) === " ") {
109
+ let e = n[n.length - 1];
110
+ typeof e == "string" && (n[n.length - 1] = e.slice(0, -2)), n.push(s("br", {}, null, t, o())), r++;
111
+ continue;
112
+ }
113
+ let p = e.slice(r + 1).search(/[\\`![\]*_~\n]/), m = p < 0 ? e.length : r + 1 + p;
114
+ c(n, e.slice(r, m)), r = m;
115
+ }
116
+ return n;
117
+ }
118
+ function d(e) {
119
+ let t = e.match(/^(\s{0,3})([-+*]|\d+[.)])\s+(.*)$/);
120
+ return t ? {
121
+ indent: t[1].length,
122
+ ordered: /^\d/.test(t[2]),
123
+ marker: t[2],
124
+ text: t[3]
125
+ } : null;
126
+ }
127
+ function f(e) {
128
+ let t = [], n = "";
129
+ for (let r = 0; r < e.length; r++) {
130
+ let i = e[r];
131
+ i === "\\" && e[r + 1] === "|" ? (n += "\\|", r++) : i === "|" ? (t.push(n.trim()), n = "") : n += i;
132
+ }
133
+ return t.push(n.trim()), t[0] === "" && t.shift(), t[t.length - 1] === "" && t.pop(), t;
134
+ }
135
+ function p(e) {
136
+ let t = f(e);
137
+ return t.length === 0 || t.some((e) => !/^:?-+:?$/.test(e)) ? null : t.map((e) => e.startsWith(":") && e.endsWith(":") ? "center" : e.startsWith(":") ? "left" : e.endsWith(":") ? "right" : void 0);
138
+ }
139
+ function m(e, t) {
140
+ let n = e[t] ?? "";
141
+ return /^\s{0,3}(#{1,6})\s+/.test(n) || /^\s{0,3}(`{3,}|~{3,})/.test(n) || /^\s{0,3}>/.test(n) || d(n) || /^\s{0,3}((\*\s*){3,}|(-\s*){3,}|(_\s*){3,})$/.test(n) ? !0 : t + 1 < e.length && p(e[t + 1]) !== null;
142
+ }
143
+ function h(e, t) {
144
+ let n = [], r = 0, i = 0, c = () => ({
145
+ ...t,
146
+ keyPrefix: `${t.keyPrefix}-b${i++}`
147
+ });
148
+ for (; r < e.length;) {
149
+ if (!e[r].trim()) {
150
+ r++;
151
+ continue;
152
+ }
153
+ let t = c(), i = e[r].match(/^\s{0,3}(`{3,}|~{3,})\s*([^\s`]*)?.*$/);
154
+ if (i) {
155
+ let a = i[1], o = i[2] ?? "", c = [];
156
+ for (r++; r < e.length && !RegExp(`^\\s{0,3}${a[0]}{${a.length},}\\s*$`).test(e[r]);) c.push(e[r]), r++;
157
+ r < e.length && r++;
158
+ let l = s("code", o ? { className: `language-${o}` } : {}, `${c.join("\n")}\n`, t, `${t.keyPrefix}-code`);
159
+ n.push(s("pre", {}, l, t, t.keyPrefix));
160
+ continue;
161
+ }
162
+ let l = e[r].match(/^\s{0,3}(#{1,6})\s+(.+?)\s*#*\s*$/);
163
+ if (l) {
164
+ let e = l[2], i = `h${l[1].length}`;
165
+ n.push(s(i, { id: a(o(e)) }, u(e, t), t, t.keyPrefix)), r++;
166
+ continue;
167
+ }
168
+ if (r + 1 < e.length && /^\s{0,3}(=+|-+)\s*$/.test(e[r + 1])) {
169
+ let i = e[r + 1].trim()[0] === "=" ? "h1" : "h2", c = e[r].trim();
170
+ n.push(s(i, { id: a(o(c)) }, u(c, t), t, t.keyPrefix)), r += 2;
171
+ continue;
172
+ }
173
+ if (/^\s{0,3}>/.test(e[r])) {
174
+ let i = [];
175
+ for (; r < e.length && (/^\s{0,3}>/.test(e[r]) || !e[r].trim());) i.push(e[r].replace(/^\s{0,3}> ?/, "")), r++;
176
+ n.push(s("blockquote", {}, h(i, t), t, t.keyPrefix));
177
+ continue;
178
+ }
179
+ let g = d(e[r]);
180
+ if (g) {
181
+ let i = g.ordered, a = [], o = !1, c = i ? Number.parseInt(g.marker, 10) : void 0, l = 0;
182
+ for (; r < e.length;) {
183
+ let n = d(e[r]);
184
+ if (!n || n.ordered !== i || n.indent !== g.indent) break;
185
+ let c = {
186
+ ...t,
187
+ keyPrefix: `${t.keyPrefix}-li${l++}`
188
+ }, f = n.text, p = [];
189
+ for (r++; r < e.length;) {
190
+ let t = d(e[r]);
191
+ if (t && t.indent === g.indent) break;
192
+ if (!e[r].trim()) {
193
+ p.push(""), r++;
194
+ continue;
195
+ }
196
+ let n = e[r].match(/^\s*/)?.[0].length ?? 0;
197
+ if (n > g.indent) {
198
+ p.push(e[r].slice(Math.min(n, g.indent + 2))), r++;
199
+ continue;
200
+ }
201
+ break;
202
+ }
203
+ let m = f.match(/^\[([ xX])\]\s+(.*)$/), _ = [];
204
+ m && (o = !0, f = m[2], _.push(s("input", {
205
+ type: "checkbox",
206
+ checked: m[1].toLowerCase() === "x",
207
+ disabled: !0
208
+ }, null, c, `${c.keyPrefix}-check`), " ")), _.push(...u(f, c)), p.some((e) => e.trim()) && _.push(...h(p, c)), a.push(s("li", m ? { className: "task-list-item" } : {}, _, c, c.keyPrefix));
209
+ }
210
+ n.push(s(i ? "ol" : "ul", {
211
+ ...i && c !== 1 ? { start: c } : {},
212
+ ...o ? { className: "contains-task-list" } : {}
213
+ }, a, t, t.keyPrefix));
214
+ continue;
215
+ }
216
+ let _ = r + 1 < e.length ? p(e[r + 1]) : null;
217
+ if (_) {
218
+ let i = f(e[r]), a = i.length;
219
+ r += 2;
220
+ let o = [];
221
+ for (; r < e.length && e[r].includes("|") && e[r].trim() && !d(e[r]);) {
222
+ let t = f(e[r]);
223
+ o.push(Array.from({ length: a }, (e, n) => t[n] ?? "")), r++;
224
+ }
225
+ let c = (e, n, r) => e.map((e, i) => s(n, _[i] ? { style: { textAlign: _[i] } } : {}, u(e, {
226
+ ...t,
227
+ keyPrefix: `${r}-c${i}`
228
+ }), t, `${r}-c${i}`)), l = s("tr", {}, c(i, "th", `${t.keyPrefix}-head`), t, `${t.keyPrefix}-head`), p = o.map((e, n) => s("tr", {}, c(e, "td", `${t.keyPrefix}-r${n}`), t, `${t.keyPrefix}-r${n}`));
229
+ n.push(s("table", {}, [s("thead", {}, l, t, `${t.keyPrefix}-thead`), ...p.length ? [s("tbody", {}, p, t, `${t.keyPrefix}-tbody`)] : []], t, t.keyPrefix));
230
+ continue;
231
+ }
232
+ if (/^\s{0,3}((\*\s*){3,}|(-\s*){3,}|(_\s*){3,})$/.test(e[r])) {
233
+ n.push(s("hr", {}, null, t, t.keyPrefix)), r++;
234
+ continue;
235
+ }
236
+ let v = [e[r].trimStart()];
237
+ for (r++; r < e.length && e[r].trim() && !m(e, r);) v.push(e[r]), r++;
238
+ n.push(s("p", {}, u(v.join("\n"), t), t, t.keyPrefix));
239
+ }
240
+ return n;
241
+ }
242
+ function g({ content: t, components: r }) {
243
+ return /* @__PURE__ */ n(e, { children: h(t.replace(/\r\n?/g, "\n").split("\n"), {
244
+ components: r,
245
+ keyPrefix: "markdown"
246
+ }) });
247
+ }
248
+ //#endregion
249
+ export { g as LightweightMarkdown };
@@ -0,0 +1,7 @@
1
+ interface MarkdownMinimapProps {
2
+ contentRef: React.RefObject<HTMLDivElement>;
3
+ className?: string;
4
+ }
5
+ export declare const MarkdownMinimap: import("react").ForwardRefExoticComponent<MarkdownMinimapProps & import("react").RefAttributes<HTMLDivElement>>;
6
+ export {};
7
+ //# sourceMappingURL=MarkdownMinimap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownMinimap.d.ts","sourceRoot":"","sources":["../../src/components/MarkdownMinimap.tsx"],"names":[],"mappings":"AAOA,UAAU,oBAAoB;IAC5B,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmLD,eAAO,MAAM,eAAe,iHAA8E,CAAC"}
@@ -0,0 +1,84 @@
1
+ "use client";
2
+ "use client";
3
+ import { forwardRefToRoot as e } from "../lib/forwardRefToRoot.js";
4
+ import { cn as t } from "../lib/cn.js";
5
+ import { useCallback as n, useEffect as r, useRef as i } from "react";
6
+ import { jsx as a } from "react/jsx-runtime";
7
+ //#region src/components/MarkdownMinimap.tsx
8
+ var o = 4, s = 8, c = 3, l = 1, u = 2, d = .6, f = 100;
9
+ function p(e) {
10
+ return getComputedStyle(document.documentElement).getPropertyValue(e).trim();
11
+ }
12
+ function m({ contentRef: e, className: m }) {
13
+ let h = i(null), g = i(null), _ = i(!1), v = n(() => {
14
+ let t = h.current, n = g.current, r = e.current;
15
+ if (!t || !n || !r) return;
16
+ let i = t.getContext("2d");
17
+ if (!i) return;
18
+ let a = n.clientHeight, f = n.clientWidth, m = r.scrollHeight, _ = r.clientHeight, v = r.scrollTop;
19
+ t.width = f, t.height = a;
20
+ let y = a / m, b = v * y, x = _ * y;
21
+ i.clearRect(0, 0, t.width, t.height);
22
+ let S = p("--muted"), C = p("--border"), w = r.querySelectorAll("h1, h2, h3, h4, h5, h6, p, pre, table, .md-mermaid, .md-alert"), T = r.getBoundingClientRect();
23
+ w.forEach((e) => {
24
+ let t = e.getBoundingClientRect(), n = (t.top - T.top + r.scrollTop) * y, a = Math.max(t.height * y, u);
25
+ e.tagName.match(/^H[1-6]$/) ? (i.fillStyle = S, i.fillRect(o, n, f - o * 2, Math.max(a, c))) : (i.fillStyle = C, i.fillRect(s, n, f - s * 2, Math.max(a, l)));
26
+ });
27
+ let E = p("--color-accent-bg-strong"), D = p("--color-link");
28
+ i.fillStyle = E, i.globalAlpha = d, i.fillRect(0, b, f, x), i.globalAlpha = 1, i.strokeStyle = D, i.lineWidth = 1, i.strokeRect(.5, b + .5, f - 1, x - 1);
29
+ }, [e]);
30
+ r(() => {
31
+ let t = e.current, n = g.current;
32
+ if (!t) return;
33
+ let r = () => {
34
+ requestAnimationFrame(v);
35
+ };
36
+ t.addEventListener("scroll", r);
37
+ let i = setTimeout(v, f), a = new ResizeObserver(() => {
38
+ requestAnimationFrame(v);
39
+ });
40
+ a.observe(t), n && a.observe(n);
41
+ let o = new MutationObserver((e) => {
42
+ for (let t of e) t.attributeName === "data-theme" && requestAnimationFrame(v);
43
+ });
44
+ return o.observe(document.documentElement, { attributes: !0 }), () => {
45
+ t.removeEventListener("scroll", r), clearTimeout(i), a.disconnect(), o.disconnect();
46
+ };
47
+ }, [e, v]);
48
+ let y = n((t) => {
49
+ let n = h.current, r = e.current;
50
+ if (!n || !r) return;
51
+ let i = n.getBoundingClientRect(), a = (t.clientY - i.top) / (n.height / r.scrollHeight) - r.clientHeight / 2;
52
+ r.scrollTo({
53
+ top: Math.max(0, a),
54
+ behavior: "smooth"
55
+ });
56
+ }, [e]), b = n(() => {
57
+ _.current = !0;
58
+ }, []), x = n(() => {
59
+ _.current = !1;
60
+ }, []), S = n((t) => {
61
+ if (!_.current) return;
62
+ let n = h.current, r = e.current;
63
+ if (!n || !r) return;
64
+ let i = n.getBoundingClientRect(), a = (t.clientY - i.top) / (n.height / r.scrollHeight) - r.clientHeight / 2;
65
+ r.scrollTop = Math.max(0, a);
66
+ }, [e]);
67
+ return /* @__PURE__ */ a("div", {
68
+ ref: g,
69
+ "data-component": "MarkdownMinimap",
70
+ className: t("cs-component-markdown-minimap-14", m),
71
+ children: /* @__PURE__ */ a("canvas", {
72
+ ref: h,
73
+ className: "cs-component-markdown-minimap-15 ",
74
+ onClick: y,
75
+ onMouseDown: b,
76
+ onMouseUp: x,
77
+ onMouseLeave: x,
78
+ onMouseMove: S
79
+ })
80
+ });
81
+ }
82
+ var h = e(m);
83
+ //#endregion
84
+ export { h as MarkdownMinimap };
@@ -0,0 +1,51 @@
1
+ import { type ComponentType } from "react";
2
+ export type MarkdownComponents = Record<string, React.ElementType>;
3
+ export interface MarkdownRendererProps {
4
+ content: string;
5
+ components: MarkdownComponents;
6
+ }
7
+ export interface MarkdownViewerBaseProps {
8
+ content: string;
9
+ outline?: boolean;
10
+ minimap?: boolean;
11
+ outlineCollapsed?: boolean;
12
+ minimapCollapsed?: boolean;
13
+ /** When true, render as an inline embed — no internal scroll, no
14
+ * outline/minimap panels, flows with the parent's natural layout.
15
+ * Use for embedding rendered markdown inside a scrollable page where
16
+ * the outer page is the only scroll surface. Default false. */
17
+ inline?: boolean;
18
+ /** Compact prose typography for narrow side panes. */
19
+ density?: "default" | "dense";
20
+ onLinkClick?: (href: string) => void;
21
+ onImageSrc?: (src: string) => Promise<string | undefined> | string | undefined;
22
+ /** Opt-in renderers keyed by fenced-code language (for example, `mermaid`). */
23
+ codeRenderers?: Record<string, React.ComponentType<{
24
+ code: string;
25
+ }>>;
26
+ onHeadingNavigate?: (slug: string) => void;
27
+ initialHeading?: string | null;
28
+ className?: string;
29
+ /** Loading state: render skeleton lines instead of content. */
30
+ loading?: boolean;
31
+ /** Error state: when set, render the error block. */
32
+ error?: Error | string | null;
33
+ /** Override the error primary text (default: "Something went wrong"). */
34
+ errorMessage?: string;
35
+ /** Retry handler — when provided, renders a Retry button in the error block. */
36
+ onRetry?: () => void;
37
+ /** Empty state primary text. Default: "No content." */
38
+ emptyMessage?: string;
39
+ /** Empty state secondary text. */
40
+ emptyHint?: string;
41
+ /** Empty state CTA. */
42
+ emptyAction?: {
43
+ label: string;
44
+ onClick: () => void;
45
+ };
46
+ }
47
+ export interface MarkdownViewerProps extends MarkdownViewerBaseProps {
48
+ }
49
+ export declare function createMarkdownViewer<Extra extends object = Record<never, never>>(Renderer: ComponentType<MarkdownRendererProps & Extra>): import("react").ForwardRefExoticComponent<import("react").PropsWithoutRef<MarkdownViewerBaseProps & Extra> & import("react").RefAttributes<HTMLDivElement>>;
50
+ export declare const MarkdownViewer: import("react").ForwardRefExoticComponent<MarkdownViewerBaseProps & Record<never, never> & import("react").RefAttributes<HTMLDivElement>>;
51
+ //# sourceMappingURL=MarkdownViewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownViewer.d.ts","sourceRoot":"","sources":["../../src/components/MarkdownViewer.tsx"],"names":[],"mappings":"AAKA,OAAO,EAML,KAAK,aAAa,EAEnB,MAAM,OAAO,CAAC;AAsBf,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;oEAGgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IAC/E,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACtE,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qDAAqD;IACrD,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAC9B,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,WAAW,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;CACtD;AAED,MAAM,WAAW,mBAAoB,SAAQ,uBAAuB;CAAG;AAmtBvE,wBAAgB,oBAAoB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAC9E,QAAQ,EAAE,aAAa,CAAC,qBAAqB,GAAG,KAAK,CAAC,+JAYvD;AAED,eAAO,MAAM,cAAc,2IAA4C,CAAC"}