@mastra/playground-ui 48.0.0 → 48.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/dist/Composer.css +2 -2
- package/dist/{code-C5KVVzOZ.js → code-Cj09LVys.js} +2 -2
- package/dist/{code-C5KVVzOZ.js.map → code-Cj09LVys.js.map} +1 -1
- package/dist/{code-B3WONxnA.cjs → code-FZwLnf_f.cjs} +2 -2
- package/dist/{code-B3WONxnA.cjs.map → code-FZwLnf_f.cjs.map} +1 -1
- package/dist/code-block-Dn0K3DkE.cjs +88 -0
- package/dist/code-block-Dn0K3DkE.cjs.map +1 -0
- package/dist/code-block-DqKXZajq.js +86 -0
- package/dist/code-block-DqKXZajq.js.map +1 -0
- package/dist/components/Code.cjs.js +1 -1
- package/dist/components/Code.es.js +1 -1
- package/dist/components/CodeBlock.cjs.js +3 -83
- package/dist/components/CodeBlock.cjs.js.map +1 -1
- package/dist/components/CodeBlock.es.js +1 -85
- package/dist/components/CodeBlock.es.js.map +1 -1
- package/dist/components/CodeEditor.cjs.js +2 -2
- package/dist/components/CodeEditor.es.js +2 -2
- package/dist/components/CopyButton.cjs.js +1 -1
- package/dist/components/CopyButton.es.js +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataDetailsPanel.cjs.js +1 -1
- package/dist/components/DataDetailsPanel.es.js +1 -1
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +1 -1
- package/dist/components/SideDialog.es.js +1 -1
- package/dist/components/Truncate.cjs.js +1 -1
- package/dist/components/Truncate.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +2 -2
- package/dist/components/ai/plan.cjs.js.map +1 -1
- package/dist/components/ai/plan.es.js +2 -2
- package/dist/components/ai/plan.es.js.map +1 -1
- package/dist/components/ai/task-list.cjs.js +44 -18
- package/dist/components/ai/task-list.cjs.js.map +1 -1
- package/dist/components/ai/task-list.es.js +47 -21
- package/dist/components/ai/task-list.es.js.map +1 -1
- package/dist/{copy-button-B1GWIQ-x.js → copy-button-BLGUkVE8.js} +4 -2
- package/dist/copy-button-BLGUkVE8.js.map +1 -0
- package/dist/{copy-button-DwZ3c7D4.cjs → copy-button-BfawWA4t.cjs} +4 -2
- package/dist/copy-button-BfawWA4t.cjs.map +1 -0
- package/dist/{data-code-section-PJM5l3aS.js → data-code-section-DHbytoQ2.js} +2 -2
- package/dist/{data-code-section-PJM5l3aS.js.map → data-code-section-DHbytoQ2.js.map} +1 -1
- package/dist/{data-code-section-BjmFgJpC.cjs → data-code-section-bqvIovEN.cjs} +2 -2
- package/dist/{data-code-section-BjmFgJpC.cjs.map → data-code-section-bqvIovEN.cjs.map} +1 -1
- package/dist/{data-panel-BQqPr6ew.js → data-panel-BX_78wCj.js} +2 -2
- package/dist/{data-panel-BQqPr6ew.js.map → data-panel-BX_78wCj.js.map} +1 -1
- package/dist/{data-panel-C85h9XvH.cjs → data-panel-DT6LgTVX.cjs} +2 -2
- package/dist/{data-panel-C85h9XvH.cjs.map → data-panel-DT6LgTVX.cjs.map} +1 -1
- package/dist/domains/logs/components/log-details-view.cjs.js +1 -1
- package/dist/domains/logs/components/log-details-view.es.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.es.js +1 -1
- package/dist/ee/signals/entity-learning-api.cjs.js +8 -2
- package/dist/ee/signals/entity-learning-api.cjs.js.map +1 -1
- package/dist/ee/signals/entity-learning-api.es.js +8 -3
- package/dist/ee/signals/entity-learning-api.es.js.map +1 -1
- package/dist/ee/signals/hooks/use-noise-examples.cjs.js +5 -3
- package/dist/ee/signals/hooks/use-noise-examples.cjs.js.map +1 -1
- package/dist/ee/signals/hooks/use-noise-examples.es.js +6 -4
- package/dist/ee/signals/hooks/use-noise-examples.es.js.map +1 -1
- package/dist/ee/signals/hooks/use-theme-examples.cjs.js +6 -3
- package/dist/ee/signals/hooks/use-theme-examples.cjs.js.map +1 -1
- package/dist/ee/signals/hooks/use-theme-examples.es.js +7 -4
- package/dist/ee/signals/hooks/use-theme-examples.es.js.map +1 -1
- package/dist/ee/signals/hooks/use-theme-paths.cjs.js +2 -2
- package/dist/ee/signals/hooks/use-theme-paths.cjs.js.map +1 -1
- package/dist/ee/signals/hooks/use-theme-paths.es.js +3 -3
- package/dist/ee/signals/hooks/use-theme-paths.es.js.map +1 -1
- package/dist/ee/signals/lifeline-row.cjs.js +1 -1
- package/dist/ee/signals/lifeline-row.cjs.js.map +1 -1
- package/dist/ee/signals/lifeline-row.es.js +1 -1
- package/dist/ee/signals/lifeline-row.es.js.map +1 -1
- package/dist/ee/signals/noise-detail-panel.cjs.js +18 -5
- package/dist/ee/signals/noise-detail-panel.cjs.js.map +1 -1
- package/dist/ee/signals/noise-detail-panel.es.js +18 -5
- package/dist/ee/signals/noise-detail-panel.es.js.map +1 -1
- package/dist/ee/signals/sankey-signals.cjs.js +50 -34
- package/dist/ee/signals/sankey-signals.cjs.js.map +1 -1
- package/dist/ee/signals/sankey-signals.es.js +52 -36
- package/dist/ee/signals/sankey-signals.es.js.map +1 -1
- package/dist/ee/signals/signal-delta-column.cjs.js +1 -1
- package/dist/ee/signals/signal-delta-column.cjs.js.map +1 -1
- package/dist/ee/signals/signal-delta-column.es.js +1 -1
- package/dist/ee/signals/signal-delta-column.es.js.map +1 -1
- package/dist/ee/signals/theme-detail-panel.cjs.js +11 -4
- package/dist/ee/signals/theme-detail-panel.cjs.js.map +1 -1
- package/dist/ee/signals/theme-detail-panel.es.js +11 -4
- package/dist/ee/signals/theme-detail-panel.es.js.map +1 -1
- package/dist/ee/signals/theme-drilldown-data.cjs.js +41 -13
- package/dist/ee/signals/theme-drilldown-data.cjs.js.map +1 -1
- package/dist/ee/signals/theme-drilldown-data.es.js +40 -14
- package/dist/ee/signals/theme-drilldown-data.es.js.map +1 -1
- package/dist/ee/signals/theme-filter-banner.cjs.js +53 -28
- package/dist/ee/signals/theme-filter-banner.cjs.js.map +1 -1
- package/dist/ee/signals/theme-filter-banner.es.js +53 -28
- package/dist/ee/signals/theme-filter-banner.es.js.map +1 -1
- package/dist/{highlight-C2uRVhiA.cjs → highlight-CEt2vhD8.cjs} +20 -3
- package/dist/highlight-CEt2vhD8.cjs.map +1 -0
- package/dist/{highlight-Dis62bkj.js → highlight-CSJjjoqh.js} +20 -3
- package/dist/highlight-CSJjjoqh.js.map +1 -0
- package/dist/markdown-renderer-D1vSFfp9.cjs +86 -0
- package/dist/markdown-renderer-D1vSFfp9.cjs.map +1 -0
- package/dist/markdown-renderer-DmYYQHxu.js +84 -0
- package/dist/markdown-renderer-DmYYQHxu.js.map +1 -0
- package/dist/markdown-renderer.css +182 -0
- package/dist/src/ds/components/CopyButton/copy-button.d.ts +2 -1
- package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +9 -5
- package/dist/src/ds/components/ai/task-list/task-list.d.ts +4 -2
- package/dist/src/ds/components/ai/task-list/task-list.stories.d.ts +2 -0
- package/dist/src/ee/signals/entity-learning-api.d.ts +4 -2
- package/dist/src/ee/signals/hooks/use-noise-examples.d.ts +2 -1
- package/dist/src/ee/signals/hooks/use-theme-examples.d.ts +2 -1
- package/dist/src/ee/signals/hooks/use-theme-paths.d.ts +1 -1
- package/dist/src/ee/signals/noise-detail-panel.d.ts +4 -1
- package/dist/src/ee/signals/theme-detail-panel.d.ts +5 -3
- package/dist/src/ee/signals/theme-drilldown-data.d.ts +17 -4
- package/dist/src/ee/signals/theme-filter-banner.d.ts +5 -3
- package/dist/style.css +5 -98
- package/package.json +7 -7
- package/dist/copy-button-B1GWIQ-x.js.map +0 -1
- package/dist/copy-button-DwZ3c7D4.cjs.map +0 -1
- package/dist/highlight-C2uRVhiA.cjs.map +0 -1
- package/dist/highlight-Dis62bkj.js.map +0 -1
- package/dist/markdown-renderer-DszxuuNM.js +0 -117
- package/dist/markdown-renderer-DszxuuNM.js.map +0 -1
- package/dist/markdown-renderer-g8xNLOc0.cjs +0 -119
- package/dist/markdown-renderer-g8xNLOc0.cjs.map +0 -1
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import Markdown from 'react-markdown';
|
|
3
|
-
import remarkGfm from 'remark-gfm';
|
|
4
|
-
import { C as Code } from './code-C5KVVzOZ.js';
|
|
5
|
-
import { C as CopyButton } from './copy-button-B1GWIQ-x.js';
|
|
6
|
-
import { c as cn } from './cn-BakJzhuv.js';
|
|
7
|
-
|
|
8
|
-
function MarkdownRenderer({ children, externalLinkTarget = "tab" }) {
|
|
9
|
-
const processedText = children.replace(/\\n/g, "\n");
|
|
10
|
-
const components = externalLinkTarget === "window" ? WINDOW_COMPONENTS : COMPONENTS;
|
|
11
|
-
return /* @__PURE__ */ jsx(Markdown, { remarkPlugins: [remarkGfm], components, className: "space-y-3", children: processedText });
|
|
12
|
-
}
|
|
13
|
-
const CodeBlock = ({ children, className, language, ...restProps }) => {
|
|
14
|
-
const code = typeof children === "string" ? children : childrenTakeAllStringContents(children);
|
|
15
|
-
const preClass = cn(
|
|
16
|
-
"[scrollbar-width:none] overflow-x-scroll rounded-md border bg-surface1/50 p-4 font-mono text-sm",
|
|
17
|
-
className
|
|
18
|
-
);
|
|
19
|
-
return /* @__PURE__ */ jsxs("div", { className: "group/code relative mb-4", children: [
|
|
20
|
-
/* @__PURE__ */ jsx(Code, { code, lang: language, className: preClass, ...restProps }),
|
|
21
|
-
/* @__PURE__ */ jsx("div", { className: "invisible absolute top-2 right-2 flex gap-1 rounded-lg p-1 opacity-0 transition-all duration-200 group-hover/code:visible group-hover/code:opacity-100", children: /* @__PURE__ */ jsx(CopyButton, { content: code, copyMessage: "Copied code to clipboard" }) })
|
|
22
|
-
] });
|
|
23
|
-
};
|
|
24
|
-
function childrenTakeAllStringContents(element) {
|
|
25
|
-
if (typeof element === "string") {
|
|
26
|
-
return element;
|
|
27
|
-
}
|
|
28
|
-
if (element?.props?.children) {
|
|
29
|
-
let children = element.props.children;
|
|
30
|
-
if (Array.isArray(children)) {
|
|
31
|
-
return children.map((child) => childrenTakeAllStringContents(child)).join("");
|
|
32
|
-
} else {
|
|
33
|
-
return childrenTakeAllStringContents(children);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return "";
|
|
37
|
-
}
|
|
38
|
-
const POPUP_WINDOW_FEATURES = "popup=yes,width=720,height=800,resizable=yes,scrollbars=yes";
|
|
39
|
-
const createMarkdownLink = (externalLinkTarget) => ({ children, href, onClick, ...props }) => {
|
|
40
|
-
const isExternal = /^https?:\/\//i.test(href ?? "");
|
|
41
|
-
const handleClick = (event) => {
|
|
42
|
-
onClick?.(event);
|
|
43
|
-
if (event.defaultPrevented || !isExternal || externalLinkTarget !== "window" || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const popup = window.open(href, "_blank", POPUP_WINDOW_FEATURES);
|
|
47
|
-
if (!popup) return;
|
|
48
|
-
popup.opener = null;
|
|
49
|
-
event.preventDefault();
|
|
50
|
-
};
|
|
51
|
-
return /* @__PURE__ */ jsx(
|
|
52
|
-
"a",
|
|
53
|
-
{
|
|
54
|
-
className: "underline underline-offset-2",
|
|
55
|
-
href,
|
|
56
|
-
...props,
|
|
57
|
-
target: isExternal ? "_blank" : void 0,
|
|
58
|
-
rel: isExternal ? "noopener noreferrer" : void 0,
|
|
59
|
-
onClick: handleClick,
|
|
60
|
-
children
|
|
61
|
-
}
|
|
62
|
-
);
|
|
63
|
-
};
|
|
64
|
-
const COMPONENTS = {
|
|
65
|
-
h1: ({ children, ...props }) => /* @__PURE__ */ jsx("h1", { className: "text-2xl font-semibold", ...props, children }),
|
|
66
|
-
h2: ({ children, ...props }) => /* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold", ...props, children }),
|
|
67
|
-
h3: ({ children, ...props }) => /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold", ...props, children }),
|
|
68
|
-
h4: ({ children, ...props }) => /* @__PURE__ */ jsx("h4", { className: "text-base font-semibold", ...props, children }),
|
|
69
|
-
h5: ({ children, ...props }) => /* @__PURE__ */ jsx("h5", { className: "font-medium", ...props, children }),
|
|
70
|
-
strong: ({ children, ...props }) => /* @__PURE__ */ jsx("strong", { className: "font-semibold", ...props, children }),
|
|
71
|
-
a: createMarkdownLink("tab"),
|
|
72
|
-
blockquote: ({ children, ...props }) => /* @__PURE__ */ jsx("blockquote", { className: "border-neutral6 border-l-2 pl-4", ...props, children }),
|
|
73
|
-
code: ({ children, className, ...rest }) => {
|
|
74
|
-
const match = /language-(\w+)/.exec(className || "");
|
|
75
|
-
return match ? /* @__PURE__ */ jsx(CodeBlock, { className, language: match[1], ...rest, children }) : /* @__PURE__ */ jsx(
|
|
76
|
-
"code",
|
|
77
|
-
{
|
|
78
|
-
className: cn(
|
|
79
|
-
"font-mono [:not(pre)>&]:rounded-md [:not(pre)>&]:bg-surface1/50 [:not(pre)>&]:px-1 [:not(pre)>&]:py-0.5"
|
|
80
|
-
),
|
|
81
|
-
...rest,
|
|
82
|
-
children
|
|
83
|
-
}
|
|
84
|
-
);
|
|
85
|
-
},
|
|
86
|
-
pre: ({ children }) => children,
|
|
87
|
-
ol: ({ children, ...props }) => /* @__PURE__ */ jsx("ol", { className: "list-decimal space-y-2 pl-6", ...props, children }),
|
|
88
|
-
ul: ({ children, ...props }) => /* @__PURE__ */ jsx("ul", { className: "list-disc space-y-2 pl-6", ...props, children }),
|
|
89
|
-
li: ({ children, ...props }) => /* @__PURE__ */ jsx("li", { className: "my-1.5", ...props, children }),
|
|
90
|
-
table: ({ children, ...props }) => /* @__PURE__ */ jsx("table", { className: "border-neutral6/20 w-full border-collapse overflow-y-auto rounded-md border", ...props, children }),
|
|
91
|
-
th: ({ children, ...props }) => /* @__PURE__ */ jsx(
|
|
92
|
-
"th",
|
|
93
|
-
{
|
|
94
|
-
className: "border-neutral6/20 border px-4 py-2 text-left font-bold [[align=center]]:text-center [[align=right]]:text-right",
|
|
95
|
-
...props,
|
|
96
|
-
children
|
|
97
|
-
}
|
|
98
|
-
),
|
|
99
|
-
td: ({ children, ...props }) => /* @__PURE__ */ jsx(
|
|
100
|
-
"td",
|
|
101
|
-
{
|
|
102
|
-
className: "border-neutral6/20 border px-4 py-2 text-left [[align=center]]:text-center [[align=right]]:text-right",
|
|
103
|
-
...props,
|
|
104
|
-
children
|
|
105
|
-
}
|
|
106
|
-
),
|
|
107
|
-
tr: ({ children, ...props }) => /* @__PURE__ */ jsx("tr", { className: "even:bg-surface4 m-0 border-t p-0", ...props, children }),
|
|
108
|
-
p: ({ children, ...props }) => /* @__PURE__ */ jsx("p", { className: "leading-relaxed whitespace-pre-wrap", ...props, children }),
|
|
109
|
-
hr: ({ ...props }) => /* @__PURE__ */ jsx("hr", { className: "border-neutral6/20", ...props })
|
|
110
|
-
};
|
|
111
|
-
const WINDOW_COMPONENTS = {
|
|
112
|
-
...COMPONENTS,
|
|
113
|
-
a: createMarkdownLink("window")
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
export { MarkdownRenderer as M };
|
|
117
|
-
//# sourceMappingURL=markdown-renderer-DszxuuNM.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-renderer-DszxuuNM.js","sources":["../src/ds/components/MarkdownRenderer/markdown-renderer.tsx"],"sourcesContent":["import React from 'react';\nimport Markdown from 'react-markdown';\nimport type { Components } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\n\nimport { Code } from '@/ds/components/Code';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { cn } from '@/lib/utils';\n\nexport type MarkdownExternalLinkTarget = 'tab' | 'window';\n\nexport type MarkdownRendererProps = {\n children: string;\n externalLinkTarget?: MarkdownExternalLinkTarget;\n};\n\nexport function MarkdownRenderer({ children, externalLinkTarget = 'tab' }: MarkdownRendererProps) {\n const processedText = children.replace(/\\\\n/g, '\\n');\n const components = externalLinkTarget === 'window' ? WINDOW_COMPONENTS : COMPONENTS;\n\n return (\n <Markdown remarkPlugins={[remarkGfm]} components={components} className=\"space-y-3\">\n {processedText}\n </Markdown>\n );\n}\n\ninterface CodeBlockProps extends React.HTMLAttributes<HTMLPreElement> {\n children: React.ReactNode;\n className?: string;\n language: string;\n}\n\nconst CodeBlock = ({ children, className, language, ...restProps }: CodeBlockProps) => {\n const code = typeof children === 'string' ? children : childrenTakeAllStringContents(children);\n\n const preClass = cn(\n '[scrollbar-width:none] overflow-x-scroll rounded-md border bg-surface1/50 p-4 font-mono text-sm',\n className,\n );\n\n return (\n <div className=\"group/code relative mb-4\">\n <Code code={code} lang={language} className={preClass} {...restProps} />\n\n <div className=\"invisible absolute top-2 right-2 flex gap-1 rounded-lg p-1 opacity-0 transition-all duration-200 group-hover/code:visible group-hover/code:opacity-100\">\n <CopyButton content={code} copyMessage=\"Copied code to clipboard\" />\n </div>\n </div>\n );\n};\n\nfunction childrenTakeAllStringContents(element: any): string {\n if (typeof element === 'string') {\n return element;\n }\n\n if (element?.props?.children) {\n let children = element.props.children;\n\n if (Array.isArray(children)) {\n return children.map(child => childrenTakeAllStringContents(child)).join('');\n } else {\n return childrenTakeAllStringContents(children);\n }\n }\n\n return '';\n}\n\nconst POPUP_WINDOW_FEATURES = 'popup=yes,width=720,height=800,resizable=yes,scrollbars=yes';\n\nconst createMarkdownLink =\n (externalLinkTarget: MarkdownExternalLinkTarget): NonNullable<Components['a']> =>\n ({ children, href, onClick, ...props }) => {\n const isExternal = /^https?:\\/\\//i.test(href ?? '');\n const handleClick: React.MouseEventHandler<HTMLAnchorElement> = event => {\n onClick?.(event);\n if (\n event.defaultPrevented ||\n !isExternal ||\n externalLinkTarget !== 'window' ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey\n ) {\n return;\n }\n\n const popup = window.open(href, '_blank', POPUP_WINDOW_FEATURES);\n if (!popup) return;\n\n popup.opener = null;\n event.preventDefault();\n };\n\n return (\n <a\n className=\"underline underline-offset-2\"\n href={href}\n {...props}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n onClick={handleClick}\n >\n {children}\n </a>\n );\n };\n\n// Create component wrappers with className\nconst COMPONENTS: Components = {\n h1: ({ children, ...props }) => (\n <h1 className=\"text-2xl font-semibold\" {...props}>\n {children}\n </h1>\n ),\n h2: ({ children, ...props }) => (\n <h2 className=\"text-xl font-semibold\" {...props}>\n {children}\n </h2>\n ),\n h3: ({ children, ...props }) => (\n <h3 className=\"text-lg font-semibold\" {...props}>\n {children}\n </h3>\n ),\n h4: ({ children, ...props }) => (\n <h4 className=\"text-base font-semibold\" {...props}>\n {children}\n </h4>\n ),\n h5: ({ children, ...props }) => (\n <h5 className=\"font-medium\" {...props}>\n {children}\n </h5>\n ),\n strong: ({ children, ...props }) => (\n <strong className=\"font-semibold\" {...props}>\n {children}\n </strong>\n ),\n a: createMarkdownLink('tab'),\n blockquote: ({ children, ...props }) => (\n <blockquote className=\"border-neutral6 border-l-2 pl-4\" {...props}>\n {children}\n </blockquote>\n ),\n code: ({ children, className, ...rest }: any) => {\n const match = /language-(\\w+)/.exec(className || '');\n return match ? (\n <CodeBlock className={className} language={match[1]} {...rest}>\n {children}\n </CodeBlock>\n ) : (\n <code\n className={cn(\n 'font-mono [:not(pre)>&]:rounded-md [:not(pre)>&]:bg-surface1/50 [:not(pre)>&]:px-1 [:not(pre)>&]:py-0.5',\n )}\n {...rest}\n >\n {children}\n </code>\n );\n },\n pre: ({ children }: any) => children,\n ol: ({ children, ...props }) => (\n <ol className=\"list-decimal space-y-2 pl-6\" {...props}>\n {children}\n </ol>\n ),\n ul: ({ children, ...props }) => (\n <ul className=\"list-disc space-y-2 pl-6\" {...props}>\n {children}\n </ul>\n ),\n li: ({ children, ...props }) => (\n <li className=\"my-1.5\" {...props}>\n {children}\n </li>\n ),\n table: ({ children, ...props }) => (\n <table className=\"border-neutral6/20 w-full border-collapse overflow-y-auto rounded-md border\" {...props}>\n {children}\n </table>\n ),\n th: ({ children, ...props }) => (\n <th\n className=\"border-neutral6/20 border px-4 py-2 text-left font-bold [[align=center]]:text-center [[align=right]]:text-right\"\n {...props}\n >\n {children}\n </th>\n ),\n td: ({ children, ...props }) => (\n <td\n className=\"border-neutral6/20 border px-4 py-2 text-left [[align=center]]:text-center [[align=right]]:text-right\"\n {...props}\n >\n {children}\n </td>\n ),\n tr: ({ children, ...props }) => (\n <tr className=\"even:bg-surface4 m-0 border-t p-0\" {...props}>\n {children}\n </tr>\n ),\n p: ({ children, ...props }) => (\n <p className=\"leading-relaxed whitespace-pre-wrap\" {...props}>\n {children}\n </p>\n ),\n hr: ({ ...props }) => <hr className=\"border-neutral6/20\" {...props} />,\n};\n\nconst WINDOW_COMPONENTS: Components = {\n ...COMPONENTS,\n a: createMarkdownLink('window'),\n};\n\nexport default MarkdownRenderer;\n"],"names":[],"mappings":"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"}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
const Markdown = require('react-markdown');
|
|
5
|
-
const remarkGfm = require('remark-gfm');
|
|
6
|
-
const code = require('./code-B3WONxnA.cjs');
|
|
7
|
-
const copyButton = require('./copy-button-DwZ3c7D4.cjs');
|
|
8
|
-
const utils_cn = require('./cn-vA5sWo9W.cjs');
|
|
9
|
-
|
|
10
|
-
function MarkdownRenderer({ children, externalLinkTarget = "tab" }) {
|
|
11
|
-
const processedText = children.replace(/\\n/g, "\n");
|
|
12
|
-
const components = externalLinkTarget === "window" ? WINDOW_COMPONENTS : COMPONENTS;
|
|
13
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Markdown, { remarkPlugins: [remarkGfm], components, className: "space-y-3", children: processedText });
|
|
14
|
-
}
|
|
15
|
-
const CodeBlock = ({ children, className, language, ...restProps }) => {
|
|
16
|
-
const code$1 = typeof children === "string" ? children : childrenTakeAllStringContents(children);
|
|
17
|
-
const preClass = utils_cn.cn(
|
|
18
|
-
"[scrollbar-width:none] overflow-x-scroll rounded-md border bg-surface1/50 p-4 font-mono text-sm",
|
|
19
|
-
className
|
|
20
|
-
);
|
|
21
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "group/code relative mb-4", children: [
|
|
22
|
-
/* @__PURE__ */ jsxRuntime.jsx(code.Code, { code: code$1, lang: language, className: preClass, ...restProps }),
|
|
23
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "invisible absolute top-2 right-2 flex gap-1 rounded-lg p-1 opacity-0 transition-all duration-200 group-hover/code:visible group-hover/code:opacity-100", children: /* @__PURE__ */ jsxRuntime.jsx(copyButton.CopyButton, { content: code$1, copyMessage: "Copied code to clipboard" }) })
|
|
24
|
-
] });
|
|
25
|
-
};
|
|
26
|
-
function childrenTakeAllStringContents(element) {
|
|
27
|
-
if (typeof element === "string") {
|
|
28
|
-
return element;
|
|
29
|
-
}
|
|
30
|
-
if (element?.props?.children) {
|
|
31
|
-
let children = element.props.children;
|
|
32
|
-
if (Array.isArray(children)) {
|
|
33
|
-
return children.map((child) => childrenTakeAllStringContents(child)).join("");
|
|
34
|
-
} else {
|
|
35
|
-
return childrenTakeAllStringContents(children);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return "";
|
|
39
|
-
}
|
|
40
|
-
const POPUP_WINDOW_FEATURES = "popup=yes,width=720,height=800,resizable=yes,scrollbars=yes";
|
|
41
|
-
const createMarkdownLink = (externalLinkTarget) => ({ children, href, onClick, ...props }) => {
|
|
42
|
-
const isExternal = /^https?:\/\//i.test(href ?? "");
|
|
43
|
-
const handleClick = (event) => {
|
|
44
|
-
onClick?.(event);
|
|
45
|
-
if (event.defaultPrevented || !isExternal || externalLinkTarget !== "window" || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const popup = window.open(href, "_blank", POPUP_WINDOW_FEATURES);
|
|
49
|
-
if (!popup) return;
|
|
50
|
-
popup.opener = null;
|
|
51
|
-
event.preventDefault();
|
|
52
|
-
};
|
|
53
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
54
|
-
"a",
|
|
55
|
-
{
|
|
56
|
-
className: "underline underline-offset-2",
|
|
57
|
-
href,
|
|
58
|
-
...props,
|
|
59
|
-
target: isExternal ? "_blank" : void 0,
|
|
60
|
-
rel: isExternal ? "noopener noreferrer" : void 0,
|
|
61
|
-
onClick: handleClick,
|
|
62
|
-
children
|
|
63
|
-
}
|
|
64
|
-
);
|
|
65
|
-
};
|
|
66
|
-
const COMPONENTS = {
|
|
67
|
-
h1: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-2xl font-semibold", ...props, children }),
|
|
68
|
-
h2: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-xl font-semibold", ...props, children }),
|
|
69
|
-
h3: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold", ...props, children }),
|
|
70
|
-
h4: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-base font-semibold", ...props, children }),
|
|
71
|
-
h5: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("h5", { className: "font-medium", ...props, children }),
|
|
72
|
-
strong: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("strong", { className: "font-semibold", ...props, children }),
|
|
73
|
-
a: createMarkdownLink("tab"),
|
|
74
|
-
blockquote: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("blockquote", { className: "border-neutral6 border-l-2 pl-4", ...props, children }),
|
|
75
|
-
code: ({ children, className, ...rest }) => {
|
|
76
|
-
const match = /language-(\w+)/.exec(className || "");
|
|
77
|
-
return match ? /* @__PURE__ */ jsxRuntime.jsx(CodeBlock, { className, language: match[1], ...rest, children }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
78
|
-
"code",
|
|
79
|
-
{
|
|
80
|
-
className: utils_cn.cn(
|
|
81
|
-
"font-mono [:not(pre)>&]:rounded-md [:not(pre)>&]:bg-surface1/50 [:not(pre)>&]:px-1 [:not(pre)>&]:py-0.5"
|
|
82
|
-
),
|
|
83
|
-
...rest,
|
|
84
|
-
children
|
|
85
|
-
}
|
|
86
|
-
);
|
|
87
|
-
},
|
|
88
|
-
pre: ({ children }) => children,
|
|
89
|
-
ol: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "list-decimal space-y-2 pl-6", ...props, children }),
|
|
90
|
-
ul: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "list-disc space-y-2 pl-6", ...props, children }),
|
|
91
|
-
li: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: "my-1.5", ...props, children }),
|
|
92
|
-
table: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("table", { className: "border-neutral6/20 w-full border-collapse overflow-y-auto rounded-md border", ...props, children }),
|
|
93
|
-
th: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
94
|
-
"th",
|
|
95
|
-
{
|
|
96
|
-
className: "border-neutral6/20 border px-4 py-2 text-left font-bold [[align=center]]:text-center [[align=right]]:text-right",
|
|
97
|
-
...props,
|
|
98
|
-
children
|
|
99
|
-
}
|
|
100
|
-
),
|
|
101
|
-
td: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
102
|
-
"td",
|
|
103
|
-
{
|
|
104
|
-
className: "border-neutral6/20 border px-4 py-2 text-left [[align=center]]:text-center [[align=right]]:text-right",
|
|
105
|
-
...props,
|
|
106
|
-
children
|
|
107
|
-
}
|
|
108
|
-
),
|
|
109
|
-
tr: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("tr", { className: "even:bg-surface4 m-0 border-t p-0", ...props, children }),
|
|
110
|
-
p: ({ children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("p", { className: "leading-relaxed whitespace-pre-wrap", ...props, children }),
|
|
111
|
-
hr: ({ ...props }) => /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-neutral6/20", ...props })
|
|
112
|
-
};
|
|
113
|
-
const WINDOW_COMPONENTS = {
|
|
114
|
-
...COMPONENTS,
|
|
115
|
-
a: createMarkdownLink("window")
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
exports.MarkdownRenderer = MarkdownRenderer;
|
|
119
|
-
//# sourceMappingURL=markdown-renderer-g8xNLOc0.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-renderer-g8xNLOc0.cjs","sources":["../src/ds/components/MarkdownRenderer/markdown-renderer.tsx"],"sourcesContent":["import React from 'react';\nimport Markdown from 'react-markdown';\nimport type { Components } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\n\nimport { Code } from '@/ds/components/Code';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { cn } from '@/lib/utils';\n\nexport type MarkdownExternalLinkTarget = 'tab' | 'window';\n\nexport type MarkdownRendererProps = {\n children: string;\n externalLinkTarget?: MarkdownExternalLinkTarget;\n};\n\nexport function MarkdownRenderer({ children, externalLinkTarget = 'tab' }: MarkdownRendererProps) {\n const processedText = children.replace(/\\\\n/g, '\\n');\n const components = externalLinkTarget === 'window' ? WINDOW_COMPONENTS : COMPONENTS;\n\n return (\n <Markdown remarkPlugins={[remarkGfm]} components={components} className=\"space-y-3\">\n {processedText}\n </Markdown>\n );\n}\n\ninterface CodeBlockProps extends React.HTMLAttributes<HTMLPreElement> {\n children: React.ReactNode;\n className?: string;\n language: string;\n}\n\nconst CodeBlock = ({ children, className, language, ...restProps }: CodeBlockProps) => {\n const code = typeof children === 'string' ? children : childrenTakeAllStringContents(children);\n\n const preClass = cn(\n '[scrollbar-width:none] overflow-x-scroll rounded-md border bg-surface1/50 p-4 font-mono text-sm',\n className,\n );\n\n return (\n <div className=\"group/code relative mb-4\">\n <Code code={code} lang={language} className={preClass} {...restProps} />\n\n <div className=\"invisible absolute top-2 right-2 flex gap-1 rounded-lg p-1 opacity-0 transition-all duration-200 group-hover/code:visible group-hover/code:opacity-100\">\n <CopyButton content={code} copyMessage=\"Copied code to clipboard\" />\n </div>\n </div>\n );\n};\n\nfunction childrenTakeAllStringContents(element: any): string {\n if (typeof element === 'string') {\n return element;\n }\n\n if (element?.props?.children) {\n let children = element.props.children;\n\n if (Array.isArray(children)) {\n return children.map(child => childrenTakeAllStringContents(child)).join('');\n } else {\n return childrenTakeAllStringContents(children);\n }\n }\n\n return '';\n}\n\nconst POPUP_WINDOW_FEATURES = 'popup=yes,width=720,height=800,resizable=yes,scrollbars=yes';\n\nconst createMarkdownLink =\n (externalLinkTarget: MarkdownExternalLinkTarget): NonNullable<Components['a']> =>\n ({ children, href, onClick, ...props }) => {\n const isExternal = /^https?:\\/\\//i.test(href ?? '');\n const handleClick: React.MouseEventHandler<HTMLAnchorElement> = event => {\n onClick?.(event);\n if (\n event.defaultPrevented ||\n !isExternal ||\n externalLinkTarget !== 'window' ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey\n ) {\n return;\n }\n\n const popup = window.open(href, '_blank', POPUP_WINDOW_FEATURES);\n if (!popup) return;\n\n popup.opener = null;\n event.preventDefault();\n };\n\n return (\n <a\n className=\"underline underline-offset-2\"\n href={href}\n {...props}\n target={isExternal ? '_blank' : undefined}\n rel={isExternal ? 'noopener noreferrer' : undefined}\n onClick={handleClick}\n >\n {children}\n </a>\n );\n };\n\n// Create component wrappers with className\nconst COMPONENTS: Components = {\n h1: ({ children, ...props }) => (\n <h1 className=\"text-2xl font-semibold\" {...props}>\n {children}\n </h1>\n ),\n h2: ({ children, ...props }) => (\n <h2 className=\"text-xl font-semibold\" {...props}>\n {children}\n </h2>\n ),\n h3: ({ children, ...props }) => (\n <h3 className=\"text-lg font-semibold\" {...props}>\n {children}\n </h3>\n ),\n h4: ({ children, ...props }) => (\n <h4 className=\"text-base font-semibold\" {...props}>\n {children}\n </h4>\n ),\n h5: ({ children, ...props }) => (\n <h5 className=\"font-medium\" {...props}>\n {children}\n </h5>\n ),\n strong: ({ children, ...props }) => (\n <strong className=\"font-semibold\" {...props}>\n {children}\n </strong>\n ),\n a: createMarkdownLink('tab'),\n blockquote: ({ children, ...props }) => (\n <blockquote className=\"border-neutral6 border-l-2 pl-4\" {...props}>\n {children}\n </blockquote>\n ),\n code: ({ children, className, ...rest }: any) => {\n const match = /language-(\\w+)/.exec(className || '');\n return match ? (\n <CodeBlock className={className} language={match[1]} {...rest}>\n {children}\n </CodeBlock>\n ) : (\n <code\n className={cn(\n 'font-mono [:not(pre)>&]:rounded-md [:not(pre)>&]:bg-surface1/50 [:not(pre)>&]:px-1 [:not(pre)>&]:py-0.5',\n )}\n {...rest}\n >\n {children}\n </code>\n );\n },\n pre: ({ children }: any) => children,\n ol: ({ children, ...props }) => (\n <ol className=\"list-decimal space-y-2 pl-6\" {...props}>\n {children}\n </ol>\n ),\n ul: ({ children, ...props }) => (\n <ul className=\"list-disc space-y-2 pl-6\" {...props}>\n {children}\n </ul>\n ),\n li: ({ children, ...props }) => (\n <li className=\"my-1.5\" {...props}>\n {children}\n </li>\n ),\n table: ({ children, ...props }) => (\n <table className=\"border-neutral6/20 w-full border-collapse overflow-y-auto rounded-md border\" {...props}>\n {children}\n </table>\n ),\n th: ({ children, ...props }) => (\n <th\n className=\"border-neutral6/20 border px-4 py-2 text-left font-bold [[align=center]]:text-center [[align=right]]:text-right\"\n {...props}\n >\n {children}\n </th>\n ),\n td: ({ children, ...props }) => (\n <td\n className=\"border-neutral6/20 border px-4 py-2 text-left [[align=center]]:text-center [[align=right]]:text-right\"\n {...props}\n >\n {children}\n </td>\n ),\n tr: ({ children, ...props }) => (\n <tr className=\"even:bg-surface4 m-0 border-t p-0\" {...props}>\n {children}\n </tr>\n ),\n p: ({ children, ...props }) => (\n <p className=\"leading-relaxed whitespace-pre-wrap\" {...props}>\n {children}\n </p>\n ),\n hr: ({ ...props }) => <hr className=\"border-neutral6/20\" {...props} />,\n};\n\nconst WINDOW_COMPONENTS: Components = {\n ...COMPONENTS,\n a: createMarkdownLink('window'),\n};\n\nexport default MarkdownRenderer;\n"],"names":["jsx","code","cn","jsxs","Code","CopyButton"],"mappings":";;;;;;;;;AAgBO,SAAS,gBAAA,CAAiB,EAAE,QAAA,EAAU,kBAAA,GAAqB,OAAM,EAA0B;AAChG,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA;AACnD,EAAA,MAAM,UAAA,GAAa,kBAAA,KAAuB,QAAA,GAAW,iBAAA,GAAoB,UAAA;AAEzE,EAAA,uBACEA,cAAA,CAAC,YAAS,aAAA,EAAe,CAAC,SAAS,CAAA,EAAG,UAAA,EAAwB,SAAA,EAAU,WAAA,EACrE,QAAA,EAAA,aAAA,EACH,CAAA;AAEJ;AAQA,MAAM,SAAA,GAAY,CAAC,EAAE,QAAA,EAAU,WAAW,QAAA,EAAU,GAAG,WAAU,KAAsB;AACrF,EAAA,MAAMC,SAAO,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW,8BAA8B,QAAQ,CAAA;AAE7F,EAAA,MAAM,QAAA,GAAWC,WAAA;AAAA,IACf,iGAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,oBAAAH,cAAA,CAACI,mBAAKH,MAAA,EAAY,IAAA,EAAM,UAAU,SAAA,EAAW,QAAA,EAAW,GAAG,SAAA,EAAW,CAAA;AAAA,oBAEtED,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wJAAA,EACb,QAAA,kBAAAA,cAAA,CAACK,yBAAW,OAAA,EAASJ,MAAA,EAAM,WAAA,EAAY,0BAAA,EAA2B,CAAA,EACpE;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,SAAS,8BAA8B,OAAA,EAAsB;AAC3D,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,EAAS,OAAO,QAAA,EAAU;AAC5B,IAAA,IAAI,QAAA,GAAW,QAAQ,KAAA,CAAM,QAAA;AAE7B,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,MAAA,OAAO,QAAA,CAAS,IAAI,CAAA,KAAA,KAAS,6BAAA,CAA8B,KAAK,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,IAC5E,CAAA,MAAO;AACL,MAAA,OAAO,8BAA8B,QAAQ,CAAA;AAAA,IAC/C;AAAA,EACF;AAEA,EAAA,OAAO,EAAA;AACT;AAEA,MAAM,qBAAA,GAAwB,6DAAA;AAE9B,MAAM,kBAAA,GACJ,CAAC,kBAAA,KACD,CAAC,EAAE,UAAU,IAAA,EAAM,OAAA,EAAS,GAAG,KAAA,EAAM,KAAM;AACzC,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,IAAA,CAAK,IAAA,IAAQ,EAAE,CAAA;AAClD,EAAA,MAAM,cAA0D,CAAA,KAAA,KAAS;AACvE,IAAA,OAAA,GAAU,KAAK,CAAA;AACf,IAAA,IACE,MAAM,gBAAA,IACN,CAAC,UAAA,IACD,kBAAA,KAAuB,YACvB,KAAA,CAAM,MAAA,KAAW,CAAA,IACjB,KAAA,CAAM,WACN,KAAA,CAAM,OAAA,IACN,KAAA,CAAM,QAAA,IACN,MAAM,MAAA,EACN;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,UAAU,qBAAqB,CAAA;AAC/D,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,IAAA,KAAA,CAAM,cAAA,EAAe;AAAA,EACvB,CAAA;AAEA,EAAA,uBACED,cAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,8BAAA;AAAA,MACV,IAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,MAAA,EAAQ,aAAa,QAAA,GAAW,MAAA;AAAA,MAChC,GAAA,EAAK,aAAa,qBAAA,GAAwB,MAAA;AAAA,MAC1C,OAAA,EAAS,WAAA;AAAA,MAER;AAAA;AAAA,GACH;AAEJ,CAAA;AAGF,MAAM,UAAA,GAAyB;AAAA,EAC7B,EAAA,EAAI,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBACxBA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,wBAAA,EAA0B,GAAG,OACxC,QAAA,EACH,CAAA;AAAA,EAEF,EAAA,EAAI,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBACxBA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uBAAA,EAAyB,GAAG,OACvC,QAAA,EACH,CAAA;AAAA,EAEF,EAAA,EAAI,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBACxBA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uBAAA,EAAyB,GAAG,OACvC,QAAA,EACH,CAAA;AAAA,EAEF,EAAA,EAAI,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBACxBA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAA,EAA2B,GAAG,OACzC,QAAA,EACH,CAAA;AAAA,EAEF,EAAA,EAAI,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBACxBA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,aAAA,EAAe,GAAG,OAC7B,QAAA,EACH,CAAA;AAAA,EAEF,MAAA,EAAQ,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBAC5BA,cAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,eAAA,EAAiB,GAAG,OACnC,QAAA,EACH,CAAA;AAAA,EAEF,CAAA,EAAG,mBAAmB,KAAK,CAAA;AAAA,EAC3B,UAAA,EAAY,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBAChCA,cAAA,CAAC,YAAA,EAAA,EAAW,SAAA,EAAU,iCAAA,EAAmC,GAAG,OACzD,QAAA,EACH,CAAA;AAAA,EAEF,MAAM,CAAC,EAAE,UAAU,SAAA,EAAW,GAAG,MAAK,KAAW;AAC/C,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,CAAK,SAAA,IAAa,EAAE,CAAA;AACnD,IAAA,OAAO,KAAA,mBACLA,cAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAsB,QAAA,EAAU,KAAA,CAAM,CAAC,CAAA,EAAI,GAAG,IAAA,EACtD,QAAA,EACH,CAAA,mBAEAA,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWE,WAAA;AAAA,UACT;AAAA,SACF;AAAA,QACC,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ,CAAA;AAAA,EACA,GAAA,EAAK,CAAC,EAAE,QAAA,EAAS,KAAW,QAAA;AAAA,EAC5B,EAAA,EAAI,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBACxBF,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,6BAAA,EAA+B,GAAG,OAC7C,QAAA,EACH,CAAA;AAAA,EAEF,EAAA,EAAI,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBACxBA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,0BAAA,EAA4B,GAAG,OAC1C,QAAA,EACH,CAAA;AAAA,EAEF,EAAA,EAAI,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBACxBA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,QAAA,EAAU,GAAG,OACxB,QAAA,EACH,CAAA;AAAA,EAEF,KAAA,EAAO,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBAC3BA,cAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6EAAA,EAA+E,GAAG,OAChG,QAAA,EACH,CAAA;AAAA,EAEF,IAAI,CAAC,EAAE,QAAA,EAAU,GAAG,OAAM,qBACxBA,cAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,iHAAA;AAAA,MACT,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAAA,EAEF,IAAI,CAAC,EAAE,QAAA,EAAU,GAAG,OAAM,qBACxBA,cAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,uGAAA;AAAA,MACT,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAAA,EAEF,EAAA,EAAI,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBACxBA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mCAAA,EAAqC,GAAG,OACnD,QAAA,EACH,CAAA;AAAA,EAEF,CAAA,EAAG,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBACvBA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAA,EAAuC,GAAG,OACpD,QAAA,EACH,CAAA;AAAA,EAEF,EAAA,EAAI,CAAC,EAAE,GAAG,KAAA,EAAM,qBAAMA,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oBAAA,EAAsB,GAAG,KAAA,EAAO;AACtE,CAAA;AAEA,MAAM,iBAAA,GAAgC;AAAA,EACpC,GAAG,UAAA;AAAA,EACH,CAAA,EAAG,mBAAmB,QAAQ;AAChC,CAAA;;;;"}
|