@livemark/markdown 0.0.0-stage → 0.44.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/LICENSE.md +9 -0
- package/README.md +5 -2
- package/build/actions/markdown/compile.d.ts +27 -0
- package/build/actions/markdown/compile.js +48 -0
- package/build/actions/processor/create.d.ts +17 -0
- package/build/actions/processor/create.js +212 -0
- package/build/components/Abbr.d.ts +5 -0
- package/build/components/Abbr.js +7 -0
- package/build/components/AnsiCode.d.ts +4 -0
- package/build/components/AnsiCode.js +7 -0
- package/build/components/Audio.d.ts +4 -0
- package/build/components/Audio.js +9 -0
- package/build/components/Badge.d.ts +5 -0
- package/build/components/Badge.js +7 -0
- package/build/components/Button.d.ts +7 -0
- package/build/components/Button.js +11 -0
- package/build/components/Callout.d.ts +8 -0
- package/build/components/Callout.js +41 -0
- package/build/components/Card.d.ts +7 -0
- package/build/components/Card.js +16 -0
- package/build/components/Cards.d.ts +4 -0
- package/build/components/Cards.js +6 -0
- package/build/components/CodeBlock.d.ts +1 -0
- package/build/components/CodeBlock.js +50 -0
- package/build/components/CodeTabs.d.ts +6 -0
- package/build/components/CodeTabs.js +48 -0
- package/build/components/Column.d.ts +4 -0
- package/build/components/Column.js +6 -0
- package/build/components/Columns.d.ts +5 -0
- package/build/components/Columns.js +8 -0
- package/build/components/DefinitionList.d.ts +7 -0
- package/build/components/DefinitionList.js +14 -0
- package/build/components/Details.d.ts +5 -0
- package/build/components/Details.js +10 -0
- package/build/components/Filetree.d.ts +4 -0
- package/build/components/Filetree.js +22 -0
- package/build/components/FootnoteRef.d.ts +4 -0
- package/build/components/FootnoteRef.js +33 -0
- package/build/components/Heading.d.ts +8 -0
- package/build/components/Heading.js +18 -0
- package/build/components/Icon.d.ts +5 -0
- package/build/components/Icon.js +10 -0
- package/build/components/Markdown.d.ts +13 -0
- package/build/components/Markdown.js +75 -0
- package/build/components/Mermaid.d.ts +4 -0
- package/build/components/Mermaid.js +10 -0
- package/build/components/MermaidRenderer.d.ts +4 -0
- package/build/components/MermaidRenderer.js +44 -0
- package/build/components/PackageTabs.d.ts +9 -0
- package/build/components/PackageTabs.js +26 -0
- package/build/components/SortableTable.d.ts +5 -0
- package/build/components/SortableTable.js +63 -0
- package/build/components/Tab.d.ts +5 -0
- package/build/components/Tab.js +6 -0
- package/build/components/Tabs.d.ts +5 -0
- package/build/components/Tabs.js +46 -0
- package/build/components/Toc.d.ts +4 -0
- package/build/components/Toc.js +14 -0
- package/build/components/Video.d.ts +4 -0
- package/build/components/Video.js +13 -0
- package/build/components/ZoomImage.d.ts +4 -0
- package/build/components/ZoomImage.js +26 -0
- package/build/elements/badge.d.ts +7 -0
- package/build/elements/badge.js +36 -0
- package/build/elements/button.d.ts +8 -0
- package/build/elements/button.js +37 -0
- package/build/elements/card.d.ts +11 -0
- package/build/elements/card.js +25 -0
- package/build/elements/collapsible.d.ts +5 -0
- package/build/elements/collapsible.js +13 -0
- package/build/elements/hover-card.d.ts +5 -0
- package/build/elements/hover-card.js +14 -0
- package/build/elements/separator.d.ts +3 -0
- package/build/elements/separator.js +8 -0
- package/build/elements/table.d.ts +9 -0
- package/build/elements/table.js +28 -0
- package/build/elements/tooltip.d.ts +6 -0
- package/build/elements/tooltip.js +17 -0
- package/build/helpers/ansi.d.ts +3 -0
- package/build/helpers/ansi.js +208 -0
- package/build/helpers/article-link.d.ts +7 -0
- package/build/helpers/article-link.js +8 -0
- package/build/helpers/code-icon.d.ts +2 -0
- package/build/helpers/code-icon.js +57 -0
- package/build/helpers/content-warnings.d.ts +8 -0
- package/build/helpers/content-warnings.js +47 -0
- package/build/helpers/dynamic-icon-resolver.d.ts +5 -0
- package/build/helpers/dynamic-icon-resolver.js +11 -0
- package/build/helpers/dynamic-icon.d.ts +5 -0
- package/build/helpers/dynamic-icon.js +14 -0
- package/build/helpers/frontmatter.d.ts +5 -0
- package/build/helpers/frontmatter.js +16 -0
- package/build/helpers/icon-names.d.ts +11 -0
- package/build/helpers/icon-names.js +35 -0
- package/build/helpers/message-format.d.ts +2 -0
- package/build/helpers/message-format.js +7 -0
- package/build/helpers/node-text.d.ts +9 -0
- package/build/helpers/node-text.js +9 -0
- package/build/helpers/site-messages.d.ts +86 -0
- package/build/helpers/site-messages.js +7 -0
- package/build/helpers/toc-context.d.ts +5 -0
- package/build/helpers/toc-context.js +8 -0
- package/build/helpers/toc-outline.d.ts +3 -0
- package/build/helpers/toc-outline.js +16 -0
- package/build/helpers/youtube-id.d.ts +2 -0
- package/build/helpers/youtube-id.js +25 -0
- package/build/hooks/icons.d.ts +13 -0
- package/build/hooks/icons.js +12 -0
- package/build/hooks/messages.d.ts +95 -0
- package/build/hooks/messages.js +17 -0
- package/build/models/message.d.ts +177 -0
- package/build/models/message.js +88 -0
- package/build/models/plugins.d.ts +10 -0
- package/build/models/plugins.js +6 -0
- package/build/models/theme.d.ts +76 -0
- package/build/models/theme.js +71 -0
- package/build/models/toc.d.ts +5 -0
- package/build/models/toc.js +2 -0
- package/build/plugins/twoslash.d.ts +13 -0
- package/build/plugins/twoslash.js +146 -0
- package/package.json +63 -3
- package/source/actions/markdown/compile.ts +82 -0
- package/source/actions/processor/create.ts +235 -0
- package/source/components/Abbr.tsx +13 -0
- package/source/components/AnsiCode.tsx +17 -0
- package/source/components/Audio.tsx +18 -0
- package/source/components/Badge.tsx +9 -0
- package/source/components/Button.tsx +33 -0
- package/source/components/Callout.tsx +68 -0
- package/source/components/Card.tsx +48 -0
- package/source/components/Cards.tsx +8 -0
- package/source/components/CodeBlock.tsx +144 -0
- package/source/components/CodeTabs.tsx +81 -0
- package/source/components/Column.tsx +4 -0
- package/source/components/Columns.tsx +10 -0
- package/source/components/DefinitionList.tsx +18 -0
- package/source/components/Details.tsx +30 -0
- package/source/components/Filetree.tsx +63 -0
- package/source/components/FootnoteRef.tsx +52 -0
- package/source/components/Heading.tsx +20 -0
- package/source/components/Icon.tsx +10 -0
- package/source/components/Markdown.tsx +89 -0
- package/source/components/Mermaid.tsx +20 -0
- package/source/components/MermaidRenderer.tsx +48 -0
- package/source/components/PackageTabs.tsx +72 -0
- package/source/components/SortableTable.tsx +81 -0
- package/source/components/Tab.tsx +4 -0
- package/source/components/Tabs.tsx +75 -0
- package/source/components/Toc.tsx +30 -0
- package/source/components/Video.tsx +28 -0
- package/source/components/ZoomImage.tsx +25 -0
- package/source/elements/badge.tsx +53 -0
- package/source/elements/button.tsx +61 -0
- package/source/elements/card.tsx +102 -0
- package/source/elements/collapsible.tsx +15 -0
- package/source/elements/hover-card.tsx +47 -0
- package/source/elements/separator.tsx +22 -0
- package/source/elements/table.tsx +103 -0
- package/source/elements/tooltip.tsx +60 -0
- package/source/helpers/ansi.ts +210 -0
- package/source/helpers/article-link.ts +11 -0
- package/source/helpers/code-icon.ts +59 -0
- package/source/helpers/content-warnings.ts +56 -0
- package/source/helpers/dynamic-icon-resolver.tsx +9 -0
- package/source/helpers/dynamic-icon.tsx +19 -0
- package/source/helpers/frontmatter.ts +16 -0
- package/source/helpers/icon-names.ts +37 -0
- package/source/helpers/message-format.ts +5 -0
- package/source/helpers/node-text.ts +14 -0
- package/source/helpers/site-messages.ts +8 -0
- package/source/helpers/toc-context.ts +10 -0
- package/source/helpers/toc-outline.ts +23 -0
- package/source/helpers/youtube-id.ts +23 -0
- package/source/hooks/icons.ts +18 -0
- package/source/hooks/messages.ts +28 -0
- package/source/models/message.ts +96 -0
- package/source/models/plugins.ts +11 -0
- package/source/models/theme.ts +78 -0
- package/source/models/toc.ts +5 -0
- package/source/plugins/twoslash.ts +163 -0
- package/source/standalone.css +7 -0
- package/source/styles/general.css +214 -0
- package/source/styles/markdown.css +231 -0
- package/source/styles/shape.css +14 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright © 2025 Evgeny Karev
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @livemark/markdown
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Internal: the Markdown pipeline, components and styles shared by
|
|
4
|
+
[`livemark`](https://www.npmjs.com/package/livemark) and
|
|
5
|
+
[`@livemark/vite`](https://www.npmjs.com/package/@livemark/vite). It has no public API; install
|
|
6
|
+
one of those instead.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { MarkdownPlugins } from "../../models/plugins.ts";
|
|
2
|
+
/** How Markdown compiles: the code themes, plugins, raw HTML and image URLs. */
|
|
3
|
+
export interface MarkdownOptions {
|
|
4
|
+
codeThemeLight?: string;
|
|
5
|
+
codeThemeDark?: string;
|
|
6
|
+
plugins?: MarkdownPlugins;
|
|
7
|
+
allowDangerousHtml?: boolean;
|
|
8
|
+
root?: string;
|
|
9
|
+
base?: string;
|
|
10
|
+
}
|
|
11
|
+
/** Internal: compile a Markdown or MDX body (no frontmatter) into code and its outline.
|
|
12
|
+
* `program` is an ES module, `function-body` the body `new Function` evaluates. */
|
|
13
|
+
export declare function compileMarkdown(props: {
|
|
14
|
+
content: string;
|
|
15
|
+
filePath: string;
|
|
16
|
+
format: "md" | "mdx";
|
|
17
|
+
outputFormat: "program" | "function-body";
|
|
18
|
+
options: MarkdownOptions;
|
|
19
|
+
}): Promise<{
|
|
20
|
+
code: string;
|
|
21
|
+
toc: import("../../models/toc.ts").TocItem[];
|
|
22
|
+
}>;
|
|
23
|
+
/** A file's format: its frontmatter `format` when set, else `.mdx` is MDX. */
|
|
24
|
+
export declare function detectMarkdownFormat(props: {
|
|
25
|
+
filePath: string;
|
|
26
|
+
format?: unknown;
|
|
27
|
+
}): "md" | "mdx";
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { flattenToc } from "../../helpers/toc-outline.js";
|
|
2
|
+
import { TWOSLASH_FENCE } from "../../plugins/twoslash.js";
|
|
3
|
+
import { createProcessor } from "../processor/create.js";
|
|
4
|
+
/** Internal: compile a Markdown or MDX body (no frontmatter) into code and its outline.
|
|
5
|
+
* `program` is an ES module, `function-body` the body `new Function` evaluates. */
|
|
6
|
+
export async function compileMarkdown(props) {
|
|
7
|
+
if (props.format === "mdx" && props.options.allowDangerousHtml === false) {
|
|
8
|
+
throw new Error(`${props.filePath}: MDX runs code, which allowDangerousHtml: false forbids`);
|
|
9
|
+
}
|
|
10
|
+
const twoslash = TWOSLASH_FENCE.test(props.content);
|
|
11
|
+
const processor = readProcessor(props.options, props.format, props.outputFormat, twoslash);
|
|
12
|
+
const file = await processor.process({ value: props.content, path: props.filePath });
|
|
13
|
+
return { code: String(file.value), toc: flattenToc(file.data.toc) };
|
|
14
|
+
}
|
|
15
|
+
/** A file's format: its frontmatter `format` when set, else `.mdx` is MDX. */
|
|
16
|
+
export function detectMarkdownFormat(props) {
|
|
17
|
+
if (props.format === "md" || props.format === "mdx")
|
|
18
|
+
return props.format;
|
|
19
|
+
return props.filePath.endsWith(".mdx") ? "mdx" : "md";
|
|
20
|
+
}
|
|
21
|
+
// A frozen processor runs any number of files, so each variant is built once per options
|
|
22
|
+
const processors = new WeakMap();
|
|
23
|
+
function readProcessor(options, format, outputFormat, twoslash) {
|
|
24
|
+
let variants = processors.get(options);
|
|
25
|
+
if (!variants) {
|
|
26
|
+
variants = new Map();
|
|
27
|
+
processors.set(options, variants);
|
|
28
|
+
}
|
|
29
|
+
const key = `${format}:${outputFormat}:${twoslash}`;
|
|
30
|
+
let processor = variants.get(key);
|
|
31
|
+
if (!processor) {
|
|
32
|
+
processor = createProcessor({
|
|
33
|
+
format,
|
|
34
|
+
twoslash,
|
|
35
|
+
outputFormat,
|
|
36
|
+
allowDangerousHtml: options.allowDangerousHtml ?? true,
|
|
37
|
+
// Livemark's own defaults in models/config.ts
|
|
38
|
+
codeThemeLight: options.codeThemeLight ?? "catppuccin-latte",
|
|
39
|
+
codeThemeDark: options.codeThemeDark ?? "catppuccin-mocha",
|
|
40
|
+
plugins: options.plugins,
|
|
41
|
+
root: options.root,
|
|
42
|
+
base: options.base,
|
|
43
|
+
});
|
|
44
|
+
variants.set(key, processor);
|
|
45
|
+
}
|
|
46
|
+
return processor;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NvdXJjZS9hY3Rpb25zL21hcmtkb3duL2NvbXBpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBRXpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFZeEQ7b0ZBQ29GO0FBQ3BGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLEtBTXJDO0lBQ0MsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3pFLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxLQUFLLENBQUMsUUFBUSwwREFBMEQsQ0FDNUUsQ0FBQTtJQUNILENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNuRCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQzdCLEtBQUssQ0FBQyxPQUFPLEVBQ2IsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsWUFBWSxFQUNsQixRQUFRLENBQ1QsQ0FBQTtJQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUNwRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUE7QUFDckUsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBNkM7SUFDaEYsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUE7SUFDeEUsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFDdkQsQ0FBQztBQUVELHlGQUF5RjtBQUN6RixNQUFNLFVBQVUsR0FBRyxJQUFJLE9BQU8sRUFHM0IsQ0FBQTtBQUVILFNBQVMsYUFBYSxDQUNwQixPQUF3QixFQUN4QixNQUFvQixFQUNwQixZQUF5QyxFQUN6QyxRQUFpQjtJQUVqQixJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3RDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ3BCLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sSUFBSSxZQUFZLElBQUksUUFBUSxFQUFFLENBQUE7SUFDbkQsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNqQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixTQUFTLEdBQUcsZUFBZSxDQUFDO1lBQzFCLE1BQU07WUFDTixRQUFRO1lBQ1IsWUFBWTtZQUNaLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxJQUFJO1lBQ3RELDhDQUE4QztZQUM5QyxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWMsSUFBSSxrQkFBa0I7WUFDNUQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksa0JBQWtCO1lBQzFELE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1NBQ25CLENBQUMsQ0FBQTtRQUNGLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlblRvYyB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL3RvYy1vdXRsaW5lLnRzXCJcbmltcG9ydCB0eXBlIHsgTWFya2Rvd25QbHVnaW5zIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wbHVnaW5zLnRzXCJcbmltcG9ydCB7IFRXT1NMQVNIX0ZFTkNFIH0gZnJvbSBcIi4uLy4uL3BsdWdpbnMvdHdvc2xhc2gudHNcIlxuaW1wb3J0IHsgY3JlYXRlUHJvY2Vzc29yIH0gZnJvbSBcIi4uL3Byb2Nlc3Nvci9jcmVhdGUudHNcIlxuXG4vKiogSG93IE1hcmtkb3duIGNvbXBpbGVzOiB0aGUgY29kZSB0aGVtZXMsIHBsdWdpbnMsIHJhdyBIVE1MIGFuZCBpbWFnZSBVUkxzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXJrZG93bk9wdGlvbnMge1xuICBjb2RlVGhlbWVMaWdodD86IHN0cmluZ1xuICBjb2RlVGhlbWVEYXJrPzogc3RyaW5nXG4gIHBsdWdpbnM/OiBNYXJrZG93blBsdWdpbnNcbiAgYWxsb3dEYW5nZXJvdXNIdG1sPzogYm9vbGVhblxuICByb290Pzogc3RyaW5nXG4gIGJhc2U/OiBzdHJpbmdcbn1cblxuLyoqIEludGVybmFsOiBjb21waWxlIGEgTWFya2Rvd24gb3IgTURYIGJvZHkgKG5vIGZyb250bWF0dGVyKSBpbnRvIGNvZGUgYW5kIGl0cyBvdXRsaW5lLlxuICogIGBwcm9ncmFtYCBpcyBhbiBFUyBtb2R1bGUsIGBmdW5jdGlvbi1ib2R5YCB0aGUgYm9keSBgbmV3IEZ1bmN0aW9uYCBldmFsdWF0ZXMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcGlsZU1hcmtkb3duKHByb3BzOiB7XG4gIGNvbnRlbnQ6IHN0cmluZ1xuICBmaWxlUGF0aDogc3RyaW5nXG4gIGZvcm1hdDogXCJtZFwiIHwgXCJtZHhcIlxuICBvdXRwdXRGb3JtYXQ6IFwicHJvZ3JhbVwiIHwgXCJmdW5jdGlvbi1ib2R5XCJcbiAgb3B0aW9uczogTWFya2Rvd25PcHRpb25zXG59KSB7XG4gIGlmIChwcm9wcy5mb3JtYXQgPT09IFwibWR4XCIgJiYgcHJvcHMub3B0aW9ucy5hbGxvd0Rhbmdlcm91c0h0bWwgPT09IGZhbHNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7cHJvcHMuZmlsZVBhdGh9OiBNRFggcnVucyBjb2RlLCB3aGljaCBhbGxvd0Rhbmdlcm91c0h0bWw6IGZhbHNlIGZvcmJpZHNgLFxuICAgIClcbiAgfVxuICBjb25zdCB0d29zbGFzaCA9IFRXT1NMQVNIX0ZFTkNFLnRlc3QocHJvcHMuY29udGVudClcbiAgY29uc3QgcHJvY2Vzc29yID0gcmVhZFByb2Nlc3NvcihcbiAgICBwcm9wcy5vcHRpb25zLFxuICAgIHByb3BzLmZvcm1hdCxcbiAgICBwcm9wcy5vdXRwdXRGb3JtYXQsXG4gICAgdHdvc2xhc2gsXG4gIClcbiAgY29uc3QgZmlsZSA9IGF3YWl0IHByb2Nlc3Nvci5wcm9jZXNzKHsgdmFsdWU6IHByb3BzLmNvbnRlbnQsIHBhdGg6IHByb3BzLmZpbGVQYXRoIH0pXG4gIHJldHVybiB7IGNvZGU6IFN0cmluZyhmaWxlLnZhbHVlKSwgdG9jOiBmbGF0dGVuVG9jKGZpbGUuZGF0YS50b2MpIH1cbn1cblxuLyoqIEEgZmlsZSdzIGZvcm1hdDogaXRzIGZyb250bWF0dGVyIGBmb3JtYXRgIHdoZW4gc2V0LCBlbHNlIGAubWR4YCBpcyBNRFguICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0TWFya2Rvd25Gb3JtYXQocHJvcHM6IHsgZmlsZVBhdGg6IHN0cmluZzsgZm9ybWF0PzogdW5rbm93biB9KSB7XG4gIGlmIChwcm9wcy5mb3JtYXQgPT09IFwibWRcIiB8fCBwcm9wcy5mb3JtYXQgPT09IFwibWR4XCIpIHJldHVybiBwcm9wcy5mb3JtYXRcbiAgcmV0dXJuIHByb3BzLmZpbGVQYXRoLmVuZHNXaXRoKFwiLm1keFwiKSA/IFwibWR4XCIgOiBcIm1kXCJcbn1cblxuLy8gQSBmcm96ZW4gcHJvY2Vzc29yIHJ1bnMgYW55IG51bWJlciBvZiBmaWxlcywgc28gZWFjaCB2YXJpYW50IGlzIGJ1aWx0IG9uY2UgcGVyIG9wdGlvbnNcbmNvbnN0IHByb2Nlc3NvcnMgPSBuZXcgV2Vha01hcDxcbiAgTWFya2Rvd25PcHRpb25zLFxuICBNYXA8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVQcm9jZXNzb3I+PlxuPigpXG5cbmZ1bmN0aW9uIHJlYWRQcm9jZXNzb3IoXG4gIG9wdGlvbnM6IE1hcmtkb3duT3B0aW9ucyxcbiAgZm9ybWF0OiBcIm1kXCIgfCBcIm1keFwiLFxuICBvdXRwdXRGb3JtYXQ6IFwicHJvZ3JhbVwiIHwgXCJmdW5jdGlvbi1ib2R5XCIsXG4gIHR3b3NsYXNoOiBib29sZWFuLFxuKSB7XG4gIGxldCB2YXJpYW50cyA9IHByb2Nlc3NvcnMuZ2V0KG9wdGlvbnMpXG4gIGlmICghdmFyaWFudHMpIHtcbiAgICB2YXJpYW50cyA9IG5ldyBNYXAoKVxuICAgIHByb2Nlc3NvcnMuc2V0KG9wdGlvbnMsIHZhcmlhbnRzKVxuICB9XG4gIGNvbnN0IGtleSA9IGAke2Zvcm1hdH06JHtvdXRwdXRGb3JtYXR9OiR7dHdvc2xhc2h9YFxuICBsZXQgcHJvY2Vzc29yID0gdmFyaWFudHMuZ2V0KGtleSlcbiAgaWYgKCFwcm9jZXNzb3IpIHtcbiAgICBwcm9jZXNzb3IgPSBjcmVhdGVQcm9jZXNzb3Ioe1xuICAgICAgZm9ybWF0LFxuICAgICAgdHdvc2xhc2gsXG4gICAgICBvdXRwdXRGb3JtYXQsXG4gICAgICBhbGxvd0Rhbmdlcm91c0h0bWw6IG9wdGlvbnMuYWxsb3dEYW5nZXJvdXNIdG1sID8/IHRydWUsXG4gICAgICAvLyBMaXZlbWFyaydzIG93biBkZWZhdWx0cyBpbiBtb2RlbHMvY29uZmlnLnRzXG4gICAgICBjb2RlVGhlbWVMaWdodDogb3B0aW9ucy5jb2RlVGhlbWVMaWdodCA/PyBcImNhdHBwdWNjaW4tbGF0dGVcIixcbiAgICAgIGNvZGVUaGVtZURhcms6IG9wdGlvbnMuY29kZVRoZW1lRGFyayA/PyBcImNhdHBwdWNjaW4tbW9jaGFcIixcbiAgICAgIHBsdWdpbnM6IG9wdGlvbnMucGx1Z2lucyxcbiAgICAgIHJvb3Q6IG9wdGlvbnMucm9vdCxcbiAgICAgIGJhc2U6IG9wdGlvbnMuYmFzZSxcbiAgICB9KVxuICAgIHZhcmlhbnRzLnNldChrZXksIHByb2Nlc3NvcilcbiAgfVxuICByZXR1cm4gcHJvY2Vzc29yXG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { MarkdownPlugins } from "../../models/plugins.ts";
|
|
2
|
+
/** The frozen textlane processor Markdown compiles with: Markdown or MDX, with the
|
|
3
|
+
* twoslash stage only for documents that have a `twoslash` fence, and the `plugins`
|
|
4
|
+
* in their two slots. */
|
|
5
|
+
export declare function createProcessor(props: {
|
|
6
|
+
format: "md" | "mdx";
|
|
7
|
+
twoslash: boolean;
|
|
8
|
+
outputFormat: "program" | "function-body";
|
|
9
|
+
allowDangerousHtml: boolean;
|
|
10
|
+
codeThemeLight: string;
|
|
11
|
+
codeThemeDark: string;
|
|
12
|
+
plugins?: MarkdownPlugins;
|
|
13
|
+
root?: string;
|
|
14
|
+
base?: string;
|
|
15
|
+
}): import("textlane").Processor<import("mdast").Root>;
|
|
16
|
+
/** Every directive name an article may use; any other renders as its source text. */
|
|
17
|
+
export declare const DIRECTIVE_NAMES: Set<string>;
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { textlane } from "textlane";
|
|
2
|
+
import * as html from "textlane/html";
|
|
3
|
+
import * as md from "textlane/md";
|
|
4
|
+
import * as mdx from "textlane/mdx";
|
|
5
|
+
import { twoslashStage } from "../../plugins/twoslash.js";
|
|
6
|
+
/** The frozen textlane processor Markdown compiles with: Markdown or MDX, with the
|
|
7
|
+
* twoslash stage only for documents that have a `twoslash` fence, and the `plugins`
|
|
8
|
+
* in their two slots. */
|
|
9
|
+
export function createProcessor(props) {
|
|
10
|
+
const themes = { light: props.codeThemeLight, dark: props.codeThemeDark };
|
|
11
|
+
const processor = textlane()
|
|
12
|
+
.use(md.parse())
|
|
13
|
+
.use(md.gfm())
|
|
14
|
+
.use(md.gemoji())
|
|
15
|
+
.use(md.definitionList())
|
|
16
|
+
.use(md.math())
|
|
17
|
+
.use(md.directive());
|
|
18
|
+
if (props.format === "mdx")
|
|
19
|
+
processor.use(md.mdx());
|
|
20
|
+
// Before md.component, which renders an unknown directive as its source text
|
|
21
|
+
processor
|
|
22
|
+
.use(props.plugins?.md ?? [])
|
|
23
|
+
.use(md.headingId({ attributes: true, markers: HEADING_MARKERS }))
|
|
24
|
+
.use(md.packageCommand({ component: "PackageTabs" }))
|
|
25
|
+
.use(md.component(COMPONENTS));
|
|
26
|
+
if (props.root !== undefined) {
|
|
27
|
+
processor.use(md.pathRewrite({ root: props.root, base: props.base, nodes: ["image"] }));
|
|
28
|
+
}
|
|
29
|
+
processor.use(md.toHtml({
|
|
30
|
+
allowDangerousHtml: props.allowDangerousHtml,
|
|
31
|
+
taskListLabels: TASK_LIST_LABELS,
|
|
32
|
+
}));
|
|
33
|
+
// html.katex first, or display math is a `<pre><code>` html.highlight takes for code
|
|
34
|
+
processor.use(html.katex()).use(html.highlight({
|
|
35
|
+
themes,
|
|
36
|
+
// a fence with no or an unknown language still gets padding, theme colors and
|
|
37
|
+
// transformers
|
|
38
|
+
defaultLanguage: "text",
|
|
39
|
+
fallbackLanguage: "text",
|
|
40
|
+
// catppuccin-latte's green (3.2:1) and comment grey (3.8:1) sit under WCAG AA on
|
|
41
|
+
// the code background
|
|
42
|
+
colorReplacements: {
|
|
43
|
+
"catppuccin-latte": { "#40a02b": "#2a7e16", "#7c7f93": "#6c6f85" },
|
|
44
|
+
},
|
|
45
|
+
addLanguageClass: true,
|
|
46
|
+
metaProperty: "data-meta",
|
|
47
|
+
inline: "tailing-curly-colon",
|
|
48
|
+
transformers: [
|
|
49
|
+
"notationDiff",
|
|
50
|
+
"notationFocus",
|
|
51
|
+
"notationHighlight",
|
|
52
|
+
"notationErrorLevel",
|
|
53
|
+
"metaHighlight",
|
|
54
|
+
"metaWordHighlight",
|
|
55
|
+
],
|
|
56
|
+
}));
|
|
57
|
+
// html.raw rebuilds every element and drops `data`, where code keeps its meta for
|
|
58
|
+
// html.highlight
|
|
59
|
+
// Without allowDangerousHtml md.toHtml has dropped raw HTML, which html.raw would parse
|
|
60
|
+
if (props.format === "md" && props.allowDangerousHtml) {
|
|
61
|
+
processor.use(html.raw({ passThrough: MDX_NODE_TYPES }));
|
|
62
|
+
}
|
|
63
|
+
processor.use(html.unwrapImages());
|
|
64
|
+
if (props.twoslash)
|
|
65
|
+
processor.use(twoslashStage, { themes });
|
|
66
|
+
return processor
|
|
67
|
+
.use(props.plugins?.html ?? [])
|
|
68
|
+
.use(html.slug())
|
|
69
|
+
.use(html.extractToc({ skip: ["data-step", "data-toc-hidden"] }))
|
|
70
|
+
.use(mdx.compile({ outputFormat: props.outputFormat }))
|
|
71
|
+
.freeze();
|
|
72
|
+
}
|
|
73
|
+
const HEADING_MARKERS = {
|
|
74
|
+
"[step]": { "data-step": true },
|
|
75
|
+
"[!toc]": { "data-toc-hidden": true },
|
|
76
|
+
"[toc]": { hidden: true },
|
|
77
|
+
};
|
|
78
|
+
const TASK_LIST_LABELS = { checked: "Completed task", unchecked: "Task" };
|
|
79
|
+
// md.toHtml hands MDX nodes to hast, which html.raw must leave as they are
|
|
80
|
+
const MDX_NODE_TYPES = [
|
|
81
|
+
"mdxFlowExpression",
|
|
82
|
+
"mdxJsxFlowElement",
|
|
83
|
+
"mdxJsxTextElement",
|
|
84
|
+
"mdxTextExpression",
|
|
85
|
+
"mdxjsEsm",
|
|
86
|
+
];
|
|
87
|
+
const CALLOUTS = ["note", "tip", "info", "warning", "danger"];
|
|
88
|
+
// Each livemark directive, alert and node as the component it renders
|
|
89
|
+
const COMPONENTS = {
|
|
90
|
+
directives: [
|
|
91
|
+
{
|
|
92
|
+
name: CALLOUTS,
|
|
93
|
+
kind: "container",
|
|
94
|
+
component: "Callout",
|
|
95
|
+
nameAs: "type",
|
|
96
|
+
labelAs: "title",
|
|
97
|
+
attributes: [],
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: "card",
|
|
101
|
+
kind: "container",
|
|
102
|
+
component: "Card",
|
|
103
|
+
attributes: [{ name: "title", default: "" }, "href", "icon"],
|
|
104
|
+
group: { component: "Cards" },
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: "column",
|
|
108
|
+
kind: "container",
|
|
109
|
+
component: "Column",
|
|
110
|
+
attributes: [],
|
|
111
|
+
group: { component: "Columns" },
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: "tab",
|
|
115
|
+
kind: "container",
|
|
116
|
+
component: "Tab",
|
|
117
|
+
attributes: [{ name: "title", default: "" }, "sync"],
|
|
118
|
+
group: { component: "Tabs", min: 1, inherit: ["sync"] },
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: "details",
|
|
122
|
+
kind: "container",
|
|
123
|
+
component: "Details",
|
|
124
|
+
labelAs: "summary",
|
|
125
|
+
labelDefault: "Details",
|
|
126
|
+
attributes: [],
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: "filetree",
|
|
130
|
+
kind: "container",
|
|
131
|
+
component: "Filetree",
|
|
132
|
+
attributes: [],
|
|
133
|
+
treeAs: "tree",
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: "badge",
|
|
137
|
+
kind: "text",
|
|
138
|
+
component: "Badge",
|
|
139
|
+
labelAs: "label",
|
|
140
|
+
attributes: ["variant"],
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: "button",
|
|
144
|
+
kind: "leaf",
|
|
145
|
+
component: "Button",
|
|
146
|
+
labelAs: "label",
|
|
147
|
+
attributes: ["href", "label", "variant", "size"],
|
|
148
|
+
required: ["href", "label"],
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: "icon",
|
|
152
|
+
kind: "text",
|
|
153
|
+
component: "Icon",
|
|
154
|
+
attributes: ["name", "className"],
|
|
155
|
+
required: ["name"],
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: "abbr",
|
|
159
|
+
kind: "text",
|
|
160
|
+
component: "Abbr",
|
|
161
|
+
labelAs: "text",
|
|
162
|
+
attributes: [{ name: "title", default: "" }],
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
name: "toc",
|
|
166
|
+
kind: "leaf",
|
|
167
|
+
component: "Toc",
|
|
168
|
+
attributes: ["maxLevel"],
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: "video",
|
|
172
|
+
kind: "leaf",
|
|
173
|
+
where: { type: "youtube" },
|
|
174
|
+
component: "Video",
|
|
175
|
+
attributes: ["url"],
|
|
176
|
+
required: ["url"],
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: "audio",
|
|
180
|
+
kind: "leaf",
|
|
181
|
+
where: { type: "soundcloud" },
|
|
182
|
+
component: "Audio",
|
|
183
|
+
attributes: ["url"],
|
|
184
|
+
required: ["url"],
|
|
185
|
+
},
|
|
186
|
+
],
|
|
187
|
+
alerts: {
|
|
188
|
+
component: "Callout",
|
|
189
|
+
typeAs: "type",
|
|
190
|
+
types: {
|
|
191
|
+
NOTE: "note",
|
|
192
|
+
TIP: "tip",
|
|
193
|
+
WARNING: "warning",
|
|
194
|
+
CAUTION: "danger",
|
|
195
|
+
IMPORTANT: "info",
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
nodes: {
|
|
199
|
+
defList: "DefinitionList",
|
|
200
|
+
defListTerm: "DefinitionTerm",
|
|
201
|
+
defListDescription: "DefinitionDetail",
|
|
202
|
+
},
|
|
203
|
+
codes: [
|
|
204
|
+
{ lang: "mermaid", component: "Mermaid" },
|
|
205
|
+
{ lang: "ansi", component: "AnsiCode" },
|
|
206
|
+
{ meta: "tab", group: { component: "CodeTabs", collect: "tabs", inherit: ["sync"] } },
|
|
207
|
+
],
|
|
208
|
+
unknownDirectives: "source",
|
|
209
|
+
};
|
|
210
|
+
/** Every directive name an article may use; any other renders as its source text. */
|
|
211
|
+
export const DIRECTIVE_NAMES = new Set(COMPONENTS.directives.flatMap(directive => directive.name));
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc291cmNlL2FjdGlvbnMvcHJvY2Vzc29yL2NyZWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ25DLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFBO0FBQ3JDLE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ2pDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFBO0FBRW5DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUV6RDs7MEJBRTBCO0FBQzFCLE1BQU0sVUFBVSxlQUFlLENBQUMsS0FVL0I7SUFDQyxNQUFNLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDekUsTUFBTSxTQUFTLEdBQUcsUUFBUSxFQUFFO1NBQ3pCLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDZCxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDdEIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUs7UUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQ25ELDZFQUE2RTtJQUM3RSxTQUFTO1NBQ04sR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUs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RSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7UUFDekMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUU7UUFDdkMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFO0tBQ3RGO0lBQ0QsaUJBQWlCLEVBQUUsUUFBaUI7Q0FDckMsQ0FBQTtBQUVELHFGQUFxRjtBQUNyRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQ3BDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUMzRCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdGV4dGxhbmUgfSBmcm9tIFwidGV4dGxhbmVcIlxuaW1wb3J0ICogYXMgaHRtbCBmcm9tIFwidGV4dGxhbmUvaHRtbFwiXG5pbXBvcnQgKiBhcyBtZCBmcm9tIFwidGV4dGxhbmUvbWRcIlxuaW1wb3J0ICogYXMgbWR4IGZyb20gXCJ0ZXh0bGFuZS9tZHhcIlxuaW1wb3J0IHR5cGUgeyBNYXJrZG93blBsdWdpbnMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BsdWdpbnMudHNcIlxuaW1wb3J0IHsgdHdvc2xhc2hTdGFnZSB9IGZyb20gXCIuLi8uLi9wbHVnaW5zL3R3b3NsYXNoLnRzXCJcblxuLyoqIFRoZSBmcm96ZW4gdGV4dGxhbmUgcHJvY2Vzc29yIE1hcmtkb3duIGNvbXBpbGVzIHdpdGg6IE1hcmtkb3duIG9yIE1EWCwgd2l0aCB0aGVcbiAqICB0d29zbGFzaCBzdGFnZSBvbmx5IGZvciBkb2N1bWVudHMgdGhhdCBoYXZlIGEgYHR3b3NsYXNoYCBmZW5jZSwgYW5kIHRoZSBgcGx1Z2luc2BcbiAqICBpbiB0aGVpciB0d28gc2xvdHMuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvY2Vzc29yKHByb3BzOiB7XG4gIGZvcm1hdDogXCJtZFwiIHwgXCJtZHhcIlxuICB0d29zbGFzaDogYm9vbGVhblxuICBvdXRwdXRGb3JtYXQ6IFwicHJvZ3JhbVwiIHwgXCJmdW5jdGlvbi1ib2R5XCJcbiAgYWxsb3dEYW5nZXJvdXNIdG1sOiBib29sZWFuXG4gIGNvZGVUaGVtZUxpZ2h0OiBzdHJpbmdcbiAgY29kZVRoZW1lRGFyazogc3RyaW5nXG4gIHBsdWdpbnM/OiBNYXJrZG93blBsdWdpbnNcbiAgcm9vdD86IHN0cmluZ1xuICBiYXNlPzogc3RyaW5nXG59KSB7XG4gIGNvbnN0IHRoZW1lcyA9IHsgbGlnaHQ6IHByb3BzLmNvZGVUaGVtZUxpZ2h0LCBkYXJrOiBwcm9wcy5jb2RlVGhlbWVEYXJrIH1cbiAgY29uc3QgcHJvY2Vzc29yID0gdGV4dGxhbmUoKVxuICAgIC51c2UobWQucGFyc2UoKSlcbiAgICAudXNlKG1kLmdmbSgpKVxuICAgIC51c2UobWQuZ2Vtb2ppKCkpXG4gICAgLnVzZShtZC5kZWZpbml0aW9uTGlzdCgpKVxuICAgIC51c2UobWQubWF0aCgpKVxuICAgIC51c2UobWQuZGlyZWN0aXZlKCkpXG4gIGlmIChwcm9wcy5mb3JtYXQgPT09IFwibWR4XCIpIHByb2Nlc3Nvci51c2UobWQubWR4KCkpXG4gIC8vIEJlZm9yZSBtZC5jb21wb25lbnQsIHdoaWNoIHJlbmRlcnMgYW4gdW5rbm93biBkaXJlY3RpdmUgYXMgaXRzIHNvdXJjZSB0ZXh0XG4gIHByb2Nlc3NvclxuICAgIC51c2UocHJvcHMucGx1Z2lucz8ubWQgPz8gW10pXG4gICAgLnVzZShtZC5oZWFkaW5nSWQoeyBhdHRyaWJ1dGVzOiB0cnVlLCBtYXJrZXJzOiBIRUFESU5HX01BUktFUlMgfSkpXG4gICAgLnVzZShtZC5wYWNrYWdlQ29tbWFuZCh7IGNvbXBvbmVudDogXCJQYWNrYWdlVGFic1wiIH0pKVxuICAgIC51c2UobWQuY29tcG9uZW50KENPTVBPTkVOVFMpKVxuICBpZiAocHJvcHMucm9vdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJvY2Vzc29yLnVzZShcbiAgICAgIG1kLnBhdGhSZXdyaXRlKHsgcm9vdDogcHJvcHMucm9vdCwgYmFzZTogcHJvcHMuYmFzZSwgbm9kZXM6IFtcImltYWdlXCJdIH0pLFxuICAgIClcbiAgfVxuICBwcm9jZXNzb3IudXNlKFxuICAgIG1kLnRvSHRtbCh7XG4gICAgICBhbGxvd0Rhbmdlcm91c0h0bWw6IHByb3BzLmFsbG93RGFuZ2Vyb3VzSHRtbCxcbiAgICAgIHRhc2tMaXN0TGFiZWxzOiBUQVNLX0xJU1RfTEFCRUxTLFxuICAgIH0pLFxuICApXG4gIC8vIGh0bWwua2F0ZXggZmlyc3QsIG9yIGRpc3BsYXkgbWF0aCBpcyBhIGA8cHJlPjxjb2RlPmAgaHRtbC5oaWdobGlnaHQgdGFrZXMgZm9yIGNvZGVcbiAgcHJvY2Vzc29yLnVzZShodG1sLmthdGV4KCkpLnVzZShcbiAgICBodG1sLmhpZ2hsaWdodCh7XG4gICAgICB0aGVtZXMsXG4gICAgICAvLyBhIGZlbmNlIHdpdGggbm8gb3IgYW4gdW5rbm93biBsYW5ndWFnZSBzdGlsbCBnZXRzIHBhZGRpbmcsIHRoZW1lIGNvbG9ycyBhbmRcbiAgICAgIC8vIHRyYW5zZm9ybWVyc1xuICAgICAgZGVmYXVsdExhbmd1YWdlOiBcInRleHRcIixcbiAgICAgIGZhbGxiYWNrTGFuZ3VhZ2U6IFwidGV4dFwiLFxuICAgICAgLy8gY2F0cHB1Y2Npbi1sYXR0ZSdzIGdyZWVuICgzLjI6MSkgYW5kIGNvbW1lbnQgZ3JleSAoMy44OjEpIHNpdCB1bmRlciBXQ0FHIEFBIG9uXG4gICAgICAvLyB0aGUgY29kZSBiYWNrZ3JvdW5kXG4gICAgICBjb2xvclJlcGxhY2VtZW50czoge1xuICAgICAgICBcImNhdHBwdWNjaW4tbGF0dGVcIjogeyBcIiM0MGEwMmJcIjogXCIjMmE3ZTE2XCIsIFwiIzdjN2Y5M1wiOiBcIiM2YzZmODVcIiB9LFxuICAgICAgfSxcbiAgICAgIGFkZExhbmd1YWdlQ2xhc3M6IHRydWUsXG4gICAgICBtZXRhUHJvcGVydHk6IFwiZGF0YS1tZXRhXCIsXG4gICAgICBpbmxpbmU6IFwidGFpbGluZy1jdXJseS1jb2xvblwiLFxuICAgICAgdHJhbnNmb3JtZXJzOiBbXG4gICAgICAgIFwibm90YXRpb25EaWZmXCIsXG4gICAgICAgIFwibm90YXRpb25Gb2N1c1wiLFxuICAgICAgICBcIm5vdGF0aW9uSGlnaGxpZ2h0XCIsXG4gICAgICAgIFwibm90YXRpb25FcnJvckxldmVsXCIsXG4gICAgICAgIFwibWV0YUhpZ2hsaWdodFwiLFxuICAgICAgICBcIm1ldGFXb3JkSGlnaGxpZ2h0XCIsXG4gICAgICBdLFxuICAgIH0pLFxuICApXG4gIC8vIGh0bWwucmF3IHJlYnVpbGRzIGV2ZXJ5IGVsZW1lbnQgYW5kIGRyb3BzIGBkYXRhYCwgd2hlcmUgY29kZSBrZWVwcyBpdHMgbWV0YSBmb3JcbiAgLy8gaHRtbC5oaWdobGlnaHRcbiAgLy8gV2l0aG91dCBhbGxvd0Rhbmdlcm91c0h0bWwgbWQudG9IdG1sIGhhcyBkcm9wcGVkIHJhdyBIVE1MLCB3aGljaCBodG1sLnJhdyB3b3VsZCBwYXJzZVxuICBpZiAocHJvcHMuZm9ybWF0ID09PSBcIm1kXCIgJiYgcHJvcHMuYWxsb3dEYW5nZXJvdXNIdG1sKSB7XG4gICAgcHJvY2Vzc29yLnVzZShodG1sLnJhdyh7IHBhc3NUaHJvdWdoOiBNRFhfTk9ERV9UWVBFUyB9KSlcbiAgfVxuICBwcm9jZXNzb3IudXNlKGh0bWwudW53cmFwSW1hZ2VzKCkpXG4gIGlmIChwcm9wcy50d29zbGFzaCkgcHJvY2Vzc29yLnVzZSh0d29zbGFzaFN0YWdlLCB7IHRoZW1lcyB9KVxuICByZXR1cm4gcHJvY2Vzc29yXG4gICAgLnVzZShwcm9wcy5wbHVnaW5zPy5odG1sID8/IFtdKVxuICAgIC51c2UoaHRtbC5zbHVnKCkpXG4gICAgLnVzZShodG1sLmV4dHJhY3RUb2MoeyBza2lwOiBbXCJkYXRhLXN0ZXBcIiwgXCJkYXRhLXRvYy1oaWRkZW5cIl0gfSkpXG4gICAgLnVzZShtZHguY29tcGlsZSh7IG91dHB1dEZvcm1hdDogcHJvcHMub3V0cHV0Rm9ybWF0IH0pKVxuICAgIC5mcmVlemUoKVxufVxuXG5jb25zdCBIRUFESU5HX01BUktFUlMgPSB7XG4gIFwiW3N0ZXBdXCI6IHsgXCJkYXRhLXN0ZXBcIjogdHJ1ZSB9LFxuICBcIlshdG9jXVwiOiB7IFwiZGF0YS10b2MtaGlkZGVuXCI6IHRydWUgfSxcbiAgXCJbdG9jXVwiOiB7IGhpZGRlbjogdHJ1ZSB9LFxufVxuXG5jb25zdCBUQVNLX0xJU1RfTEFCRUxTID0geyBjaGVja2VkOiBcIkNvbXBsZXRlZCB0YXNrXCIsIHVuY2hlY2tlZDogXCJUYXNrXCIgfVxuXG4vLyBtZC50b0h0bWwgaGFuZHMgTURYIG5vZGVzIHRvIGhhc3QsIHdoaWNoIGh0bWwucmF3IG11c3QgbGVhdmUgYXMgdGhleSBhcmVcbmNvbnN0IE1EWF9OT0RFX1RZUEVTID0gW1xuICBcIm1keEZsb3dFeHByZXNzaW9uXCIsXG4gIFwibWR4SnN4Rmxvd0VsZW1lbnRcIixcbiAgXCJtZHhKc3hUZXh0RWxlbWVudFwiLFxuICBcIm1keFRleHRFeHByZXNzaW9uXCIsXG4gIFwibWR4anNFc21cIixcbl1cblxuY29uc3QgQ0FMTE9VVFMgPSBbXCJub3RlXCIsIFwidGlwXCIsIFwiaW5mb1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIl1cblxuLy8gRWFjaCBsaXZlbWFyayBkaXJlY3RpdmUsIGFsZXJ0IGFuZCBub2RlIGFzIHRoZSBjb21wb25lbnQgaXQgcmVuZGVyc1xuY29uc3QgQ09NUE9ORU5UUyA9IHtcbiAgZGlyZWN0aXZlczogW1xuICAgIHtcbiAgICAgIG5hbWU6IENBTExPVVRTLFxuICAgICAga2luZDogXCJjb250YWluZXJcIiBhcyBjb25zdCxcbiAgICAgIGNvbXBvbmVudDogXCJDYWxsb3V0XCIsXG4gICAgICBuYW1lQXM6IFwidHlwZVwiLFxuICAgICAgbGFiZWxBczogXCJ0aXRsZVwiLFxuICAgICAgYXR0cmlidXRlczogW10sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNhcmRcIixcbiAgICAgIGtpbmQ6IFwiY29udGFpbmVyXCIgYXMgY29uc3QsXG4gICAgICBjb21wb25lbnQ6IFwiQ2FyZFwiLFxuICAgICAgYXR0cmlidXRlczogW3sgbmFtZTogXCJ0aXRsZVwiLCBkZWZhdWx0OiBcIlwiIH0sIFwiaHJlZlwiLCBcImljb25cIl0sXG4gICAgICBncm91cDogeyBjb21wb25lbnQ6IFwiQ2FyZHNcIiB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb2x1bW5cIixcbiAgICAgIGtpbmQ6IFwiY29udGFpbmVyXCIgYXMgY29uc3QsXG4gICAgICBjb21wb25lbnQ6IFwiQ29sdW1uXCIsXG4gICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgIGdyb3VwOiB7IGNvbXBvbmVudDogXCJDb2x1bW5zXCIgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidGFiXCIsXG4gICAgICBraW5kOiBcImNvbnRhaW5lclwiIGFzIGNvbnN0LFxuICAgICAgY29tcG9uZW50OiBcIlRhYlwiLFxuICAgICAgYXR0cmlidXRlczogW3sgbmFtZTogXCJ0aXRsZVwiLCBkZWZhdWx0OiBcIlwiIH0sIFwic3luY1wiXSxcbiAgICAgIGdyb3VwOiB7IGNvbXBvbmVudDogXCJUYWJzXCIsIG1pbjogMSwgaW5oZXJpdDogW1wic3luY1wiXSB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJkZXRhaWxzXCIsXG4gICAgICBraW5kOiBcImNvbnRhaW5lclwiIGFzIGNvbnN0LFxuICAgICAgY29tcG9uZW50OiBcIkRldGFpbHNcIixcbiAgICAgIGxhYmVsQXM6IFwic3VtbWFyeVwiLFxuICAgICAgbGFiZWxEZWZhdWx0OiBcIkRldGFpbHNcIixcbiAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJmaWxldHJlZVwiLFxuICAgICAga2luZDogXCJjb250YWluZXJcIiBhcyBjb25zdCxcbiAgICAgIGNvbXBvbmVudDogXCJGaWxldHJlZVwiLFxuICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICB0cmVlQXM6IFwidHJlZVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJiYWRnZVwiLFxuICAgICAga2luZDogXCJ0ZXh0XCIgYXMgY29uc3QsXG4gICAgICBjb21wb25lbnQ6IFwiQmFkZ2VcIixcbiAgICAgIGxhYmVsQXM6IFwibGFiZWxcIixcbiAgICAgIGF0dHJpYnV0ZXM6IFtcInZhcmlhbnRcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImJ1dHRvblwiLFxuICAgICAga2luZDogXCJsZWFmXCIgYXMgY29uc3QsXG4gICAgICBjb21wb25lbnQ6IFwiQnV0dG9uXCIsXG4gICAgICBsYWJlbEFzOiBcImxhYmVsXCIsXG4gICAgICBhdHRyaWJ1dGVzOiBbXCJocmVmXCIsIFwibGFiZWxcIiwgXCJ2YXJpYW50XCIsIFwic2l6ZVwiXSxcbiAgICAgIHJlcXVpcmVkOiBbXCJocmVmXCIsIFwibGFiZWxcIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImljb25cIixcbiAgICAgIGtpbmQ6IFwidGV4dFwiIGFzIGNvbnN0LFxuICAgICAgY29tcG9uZW50OiBcIkljb25cIixcbiAgICAgIGF0dHJpYnV0ZXM6IFtcIm5hbWVcIiwgXCJjbGFzc05hbWVcIl0sXG4gICAgICByZXF1aXJlZDogW1wibmFtZVwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiYWJiclwiLFxuICAgICAga2luZDogXCJ0ZXh0XCIgYXMgY29uc3QsXG4gICAgICBjb21wb25lbnQ6IFwiQWJiclwiLFxuICAgICAgbGFiZWxBczogXCJ0ZXh0XCIsXG4gICAgICBhdHRyaWJ1dGVzOiBbeyBuYW1lOiBcInRpdGxlXCIsIGRlZmF1bHQ6IFwiXCIgfV0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRvY1wiLFxuICAgICAga2luZDogXCJsZWFmXCIgYXMgY29uc3QsXG4gICAgICBjb21wb25lbnQ6IFwiVG9jXCIsXG4gICAgICBhdHRyaWJ1dGVzOiBbXCJtYXhMZXZlbFwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidmlkZW9cIixcbiAgICAgIGtpbmQ6IFwibGVhZlwiIGFzIGNvbnN0LFxuICAgICAgd2hlcmU6IHsgdHlwZTogXCJ5b3V0dWJlXCIgfSxcbiAgICAgIGNvbXBvbmVudDogXCJWaWRlb1wiLFxuICAgICAgYXR0cmlidXRlczogW1widXJsXCJdLFxuICAgICAgcmVxdWlyZWQ6IFtcInVybFwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiYXVkaW9cIixcbiAgICAgIGtpbmQ6IFwibGVhZlwiIGFzIGNvbnN0LFxuICAgICAgd2hlcmU6IHsgdHlwZTogXCJzb3VuZGNsb3VkXCIgfSxcbiAgICAgIGNvbXBvbmVudDogXCJBdWRpb1wiLFxuICAgICAgYXR0cmlidXRlczogW1widXJsXCJdLFxuICAgICAgcmVxdWlyZWQ6IFtcInVybFwiXSxcbiAgICB9LFxuICBdLFxuICBhbGVydHM6IHtcbiAgICBjb21wb25lbnQ6IFwiQ2FsbG91dFwiLFxuICAgIHR5cGVBczogXCJ0eXBlXCIsXG4gICAgdHlwZXM6IHtcbiAgICAgIE5PVEU6IFwibm90ZVwiLFxuICAgICAgVElQOiBcInRpcFwiLFxuICAgICAgV0FSTklORzogXCJ3YXJuaW5nXCIsXG4gICAgICBDQVVUSU9OOiBcImRhbmdlclwiLFxuICAgICAgSU1QT1JUQU5UOiBcImluZm9cIixcbiAgICB9LFxuICB9LFxuICBub2Rlczoge1xuICAgIGRlZkxpc3Q6IFwiRGVmaW5pdGlvbkxpc3RcIixcbiAgICBkZWZMaXN0VGVybTogXCJEZWZpbml0aW9uVGVybVwiLFxuICAgIGRlZkxpc3REZXNjcmlwdGlvbjogXCJEZWZpbml0aW9uRGV0YWlsXCIsXG4gIH0sXG4gIGNvZGVzOiBbXG4gICAgeyBsYW5nOiBcIm1lcm1haWRcIiwgY29tcG9uZW50OiBcIk1lcm1haWRcIiB9LFxuICAgIHsgbGFuZzogXCJhbnNpXCIsIGNvbXBvbmVudDogXCJBbnNpQ29kZVwiIH0sXG4gICAgeyBtZXRhOiBcInRhYlwiLCBncm91cDogeyBjb21wb25lbnQ6IFwiQ29kZVRhYnNcIiwgY29sbGVjdDogXCJ0YWJzXCIsIGluaGVyaXQ6IFtcInN5bmNcIl0gfSB9LFxuICBdLFxuICB1bmtub3duRGlyZWN0aXZlczogXCJzb3VyY2VcIiBhcyBjb25zdCxcbn1cblxuLyoqIEV2ZXJ5IGRpcmVjdGl2ZSBuYW1lIGFuIGFydGljbGUgbWF5IHVzZTsgYW55IG90aGVyIHJlbmRlcnMgYXMgaXRzIHNvdXJjZSB0ZXh0LiAqL1xuZXhwb3J0IGNvbnN0IERJUkVDVElWRV9OQU1FUyA9IG5ldyBTZXQoXG4gIENPTVBPTkVOVFMuZGlyZWN0aXZlcy5mbGF0TWFwKGRpcmVjdGl2ZSA9PiBkaXJlY3RpdmUubmFtZSksXG4pXG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../elements/tooltip.js";
|
|
3
|
+
/** Renders an abbreviation with a shadcn tooltip showing its full form */
|
|
4
|
+
export function Abbr(props) {
|
|
5
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { className: "border-b border-dotted border-muted-foreground cursor-help", children: props.text }), _jsx(TooltipContent, { children: props.title })] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJici5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL0FiYnIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBeUIsQ0FBQTtBQUVqRiwwRUFBMEU7QUFDMUUsTUFBTSxVQUFVLElBQUksQ0FBQyxLQUFzQztJQUN6RCxPQUFPLENBQ0wsTUFBQyxPQUFPLGVBQ04sS0FBQyxjQUFjLElBQUMsU0FBUyxFQUFDLDREQUE0RCxZQUNuRixLQUFLLENBQUMsSUFBSSxHQUNJLEVBQ2pCLEtBQUMsY0FBYyxjQUFFLEtBQUssQ0FBQyxLQUFLLEdBQWtCLElBQ3RDLENBQ1gsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb29sdGlwLCBUb29sdGlwQ29udGVudCwgVG9vbHRpcFRyaWdnZXIgfSBmcm9tIFwiLi4vZWxlbWVudHMvdG9vbHRpcC50c3hcIlxuXG4vKiogUmVuZGVycyBhbiBhYmJyZXZpYXRpb24gd2l0aCBhIHNoYWRjbiB0b29sdGlwIHNob3dpbmcgaXRzIGZ1bGwgZm9ybSAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFiYnIocHJvcHM6IHsgdGV4dDogc3RyaW5nOyB0aXRsZTogc3RyaW5nIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8VG9vbHRpcD5cbiAgICAgIDxUb29sdGlwVHJpZ2dlciBjbGFzc05hbWU9XCJib3JkZXItYiBib3JkZXItZG90dGVkIGJvcmRlci1tdXRlZC1mb3JlZ3JvdW5kIGN1cnNvci1oZWxwXCI+XG4gICAgICAgIHtwcm9wcy50ZXh0fVxuICAgICAgPC9Ub29sdGlwVHJpZ2dlcj5cbiAgICAgIDxUb29sdGlwQ29udGVudD57cHJvcHMudGl0bGV9PC9Ub29sdGlwQ29udGVudD5cbiAgICA8L1Rvb2x0aXA+XG4gIClcbn1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { ansiToHtml } from "../helpers/ansi.js";
|
|
3
|
+
/** Renders terminal output, coloring its ANSI escape sequences */
|
|
4
|
+
export function AnsiCode(props) {
|
|
5
|
+
return (_jsx("figure", { className: "shiki not-prose my-4 relative rounded-card border shadow-sm overflow-hidden text-sm bg-sidebar dark:bg-sidebar", children: _jsx("div", { className: "text-[0.8125rem] py-3.5 overflow-auto", children: _jsx("pre", { className: "min-w-full w-max", children: _jsx("code", { className: "flex flex-col", dangerouslySetInnerHTML: { __html: ansiToHtml(props.children) } }) }) }) }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5zaUNvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9BbnNpQ29kZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUUvQyxrRUFBa0U7QUFDbEUsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUEyQjtJQUNsRCxPQUFPLENBQ0wsaUJBQVEsU0FBUyxFQUFDLGdIQUFnSCxZQUNoSSxjQUFLLFNBQVMsRUFBQyx1Q0FBdUMsWUFDcEQsY0FBSyxTQUFTLEVBQUMsa0JBQWtCLFlBQy9CLGVBQ0UsU0FBUyxFQUFDLGVBQWUsRUFDekIsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUMvRCxHQUNFLEdBQ0YsR0FDQyxDQUNWLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5zaVRvSHRtbCB9IGZyb20gXCIuLi9oZWxwZXJzL2Fuc2kudHNcIlxuXG4vKiogUmVuZGVycyB0ZXJtaW5hbCBvdXRwdXQsIGNvbG9yaW5nIGl0cyBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgKi9cbmV4cG9ydCBmdW5jdGlvbiBBbnNpQ29kZShwcm9wczogeyBjaGlsZHJlbjogc3RyaW5nIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZmlndXJlIGNsYXNzTmFtZT1cInNoaWtpIG5vdC1wcm9zZSBteS00IHJlbGF0aXZlIHJvdW5kZWQtY2FyZCBib3JkZXIgc2hhZG93LXNtIG92ZXJmbG93LWhpZGRlbiB0ZXh0LXNtIGJnLXNpZGViYXIgZGFyazpiZy1zaWRlYmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuODEyNXJlbV0gcHktMy41IG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgPHByZSBjbGFzc05hbWU9XCJtaW4tdy1mdWxsIHctbWF4XCI+XG4gICAgICAgICAgPGNvZGVcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2xcIlxuICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBhbnNpVG9IdG1sKHByb3BzLmNoaWxkcmVuKSB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvcHJlPlxuICAgICAgPC9kaXY+XG4gICAgPC9maWd1cmU+XG4gIClcbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMessages } from "../hooks/messages.js";
|
|
3
|
+
/** Renders a SoundCloud iframe embed */
|
|
4
|
+
export function Audio(props) {
|
|
5
|
+
const t = useMessages();
|
|
6
|
+
const src = `https://w.soundcloud.com/player/?url=${encodeURIComponent(props.url)}&color=%23ff5500&auto_play=false&hide_related=true&show_comments=false&show_user=true&show_reposts=false&show_teaser=false`;
|
|
7
|
+
return (_jsx("div", { className: "not-prose my-4 overflow-hidden rounded-card border", children: _jsx("iframe", { className: "w-full", height: 166, src: src, title: t("media.soundcloud"), allow: "autoplay" }) }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXVkaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9BdWRpby50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNsRCx3Q0FBd0M7QUFDeEMsTUFBTSxVQUFVLEtBQUssQ0FBQyxLQUFzQjtJQUMxQyxNQUFNLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQTtJQUN2QixNQUFNLEdBQUcsR0FBRyx3Q0FBd0Msa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyw0SEFBNEgsQ0FBQTtJQUU3TSxPQUFPLENBQ0wsY0FBSyxTQUFTLEVBQUMsb0RBQW9ELFlBQ2pFLGlCQUNFLFNBQVMsRUFBQyxRQUFRLEVBQ2xCLE1BQU0sRUFBRSxHQUFHLEVBQ1gsR0FBRyxFQUFFLEdBQUcsRUFDUixLQUFLLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQzVCLEtBQUssRUFBQyxVQUFVLEdBQ2hCLEdBQ0UsQ0FDUCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZU1lc3NhZ2VzIH0gZnJvbSBcIi4uL2hvb2tzL21lc3NhZ2VzLnRzXCJcbi8qKiBSZW5kZXJzIGEgU291bmRDbG91ZCBpZnJhbWUgZW1iZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBBdWRpbyhwcm9wczogeyB1cmw6IHN0cmluZyB9KSB7XG4gIGNvbnN0IHQgPSB1c2VNZXNzYWdlcygpXG4gIGNvbnN0IHNyYyA9IGBodHRwczovL3cuc291bmRjbG91ZC5jb20vcGxheWVyLz91cmw9JHtlbmNvZGVVUklDb21wb25lbnQocHJvcHMudXJsKX0mY29sb3I9JTIzZmY1NTAwJmF1dG9fcGxheT1mYWxzZSZoaWRlX3JlbGF0ZWQ9dHJ1ZSZzaG93X2NvbW1lbnRzPWZhbHNlJnNob3dfdXNlcj10cnVlJnNob3dfcmVwb3N0cz1mYWxzZSZzaG93X3RlYXNlcj1mYWxzZWBcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwibm90LXByb3NlIG15LTQgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtY2FyZCBib3JkZXJcIj5cbiAgICAgIDxpZnJhbWVcbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsXCJcbiAgICAgICAgaGVpZ2h0PXsxNjZ9XG4gICAgICAgIHNyYz17c3JjfVxuICAgICAgICB0aXRsZT17dChcIm1lZGlhLnNvdW5kY2xvdWRcIil9XG4gICAgICAgIGFsbG93PVwiYXV0b3BsYXlcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Badge as BadgeElement } from "../elements/badge.js";
|
|
3
|
+
/** Inline badge rendered from :badge text directives */
|
|
4
|
+
export function Badge(props) {
|
|
5
|
+
return _jsx(BadgeElement, { variant: props.variant, children: props.label });
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9CYWRnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxLQUFLLElBQUksWUFBWSxFQUFFLE1BQU0sc0JBQXVCLENBQUE7QUFFN0Qsd0RBQXdEO0FBQ3hELE1BQU0sVUFBVSxLQUFLLENBQUMsS0FHckI7SUFDQyxPQUFPLEtBQUMsWUFBWSxJQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxZQUFHLEtBQUssQ0FBQyxLQUFLLEdBQWdCLENBQUE7QUFDM0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhZGdlIGFzIEJhZGdlRWxlbWVudCB9IGZyb20gXCIuLi9lbGVtZW50cy9iYWRnZS50c3hcIlxuXG4vKiogSW5saW5lIGJhZGdlIHJlbmRlcmVkIGZyb20gOmJhZGdlIHRleHQgZGlyZWN0aXZlcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJhZGdlKHByb3BzOiB7XG4gIGxhYmVsOiBzdHJpbmdcbiAgdmFyaWFudD86IFwiZGVmYXVsdFwiIHwgXCJzZWNvbmRhcnlcIiB8IFwicG9zaXRpdmVcIiB8IFwid2FybmluZ1wiIHwgXCJkZXN0cnVjdGl2ZVwiIHwgXCJvdXRsaW5lXCJcbn0pIHtcbiAgcmV0dXJuIDxCYWRnZUVsZW1lbnQgdmFyaWFudD17cHJvcHMudmFyaWFudH0+e3Byb3BzLmxhYmVsfTwvQmFkZ2VFbGVtZW50PlxufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Styled link button rendered from ::button leaf directives */
|
|
2
|
+
export declare function Button(props: {
|
|
3
|
+
href: string;
|
|
4
|
+
label: string;
|
|
5
|
+
variant?: "default" | "outline" | "secondary" | "ghost" | "positive" | "warning" | "destructive" | "link";
|
|
6
|
+
size?: "default" | "sm" | "lg";
|
|
7
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { buttonVariants } from "../elements/button.js";
|
|
3
|
+
import { cn } from "cn";
|
|
4
|
+
/** Styled link button rendered from ::button leaf directives */
|
|
5
|
+
export function Button(props) {
|
|
6
|
+
return (_jsx("a", { href: props.href, className: cn(buttonVariants({
|
|
7
|
+
variant: props.variant,
|
|
8
|
+
size: props.size,
|
|
9
|
+
}), "no-underline"), children: props.label }));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnV0dG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvQnV0dG9uLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF3QixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFFdkIsZ0VBQWdFO0FBQ2hFLE1BQU0sVUFBVSxNQUFNLENBQUMsS0FhdEI7SUFDQyxPQUFPLENBQ0wsWUFDRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFDaEIsU0FBUyxFQUFFLEVBQUUsQ0FDWCxjQUFjLENBQUM7WUFDYixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2pCLENBQUMsRUFDRixjQUFjLENBQ2YsWUFFQSxLQUFLLENBQUMsS0FBSyxHQUNWLENBQ0wsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBidXR0b25WYXJpYW50cyB9IGZyb20gXCIuLi9lbGVtZW50cy9idXR0b24udHN4XCJcbmltcG9ydCB7IGNuIH0gZnJvbSBcImNuXCJcblxuLyoqIFN0eWxlZCBsaW5rIGJ1dHRvbiByZW5kZXJlZCBmcm9tIDo6YnV0dG9uIGxlYWYgZGlyZWN0aXZlcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJ1dHRvbihwcm9wczoge1xuICBocmVmOiBzdHJpbmdcbiAgbGFiZWw6IHN0cmluZ1xuICB2YXJpYW50PzpcbiAgICB8IFwiZGVmYXVsdFwiXG4gICAgfCBcIm91dGxpbmVcIlxuICAgIHwgXCJzZWNvbmRhcnlcIlxuICAgIHwgXCJnaG9zdFwiXG4gICAgfCBcInBvc2l0aXZlXCJcbiAgICB8IFwid2FybmluZ1wiXG4gICAgfCBcImRlc3RydWN0aXZlXCJcbiAgICB8IFwibGlua1wiXG4gIHNpemU/OiBcImRlZmF1bHRcIiB8IFwic21cIiB8IFwibGdcIlxufSkge1xuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICBocmVmPXtwcm9wcy5ocmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgYnV0dG9uVmFyaWFudHMoe1xuICAgICAgICAgIHZhcmlhbnQ6IHByb3BzLnZhcmlhbnQsXG4gICAgICAgICAgc2l6ZTogcHJvcHMuc2l6ZSxcbiAgICAgICAgfSksXG4gICAgICAgIFwibm8tdW5kZXJsaW5lXCIsXG4gICAgICApfVxuICAgID5cbiAgICAgIHtwcm9wcy5sYWJlbH1cbiAgICA8L2E+XG4gIClcbn1cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type CalloutType = "note" | "tip" | "info" | "warning" | "danger";
|
|
2
|
+
/** Styled callout block for notes, tips, warnings, and other admonitions */
|
|
3
|
+
export declare function Callout(props: {
|
|
4
|
+
type?: CalloutType;
|
|
5
|
+
title?: string;
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
}): import("react").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { AlertTriangle, Flame, Info, Lightbulb } from "lucide-react";
|
|
3
|
+
import { cn } from "cn";
|
|
4
|
+
import { useMessages } from "../hooks/messages.js";
|
|
5
|
+
const configs = {
|
|
6
|
+
note: {
|
|
7
|
+
icon: Info,
|
|
8
|
+
label: "callout.note",
|
|
9
|
+
classes: "border-blue-500/30 bg-blue-50/50 text-blue-900 dark:bg-blue-950/30 dark:text-blue-200",
|
|
10
|
+
},
|
|
11
|
+
info: {
|
|
12
|
+
icon: Info,
|
|
13
|
+
label: "callout.info",
|
|
14
|
+
classes: "border-blue-500/30 bg-blue-50/50 text-blue-900 dark:bg-blue-950/30 dark:text-blue-200",
|
|
15
|
+
},
|
|
16
|
+
tip: {
|
|
17
|
+
icon: Lightbulb,
|
|
18
|
+
label: "callout.tip",
|
|
19
|
+
classes: "border-positive/30 bg-positive-tint/50 text-positive-tint-foreground",
|
|
20
|
+
},
|
|
21
|
+
warning: {
|
|
22
|
+
icon: AlertTriangle,
|
|
23
|
+
label: "callout.warning",
|
|
24
|
+
classes: "border-warning/30 bg-warning-tint/50 text-warning-tint-foreground",
|
|
25
|
+
},
|
|
26
|
+
danger: {
|
|
27
|
+
icon: Flame,
|
|
28
|
+
label: "callout.danger",
|
|
29
|
+
classes: "border-destructive/30 bg-destructive-tint/50 text-destructive-tint-foreground",
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
/** Styled callout block for notes, tips, warnings, and other admonitions */
|
|
33
|
+
export function Callout(props) {
|
|
34
|
+
const t = useMessages();
|
|
35
|
+
const type = props.type ?? "note";
|
|
36
|
+
const config = configs[type];
|
|
37
|
+
const Icon = config.icon;
|
|
38
|
+
const title = props.title ?? t(config.label);
|
|
39
|
+
return (_jsxs("aside", { className: cn("not-prose my-4 rounded-card border px-4 py-3", config.classes), children: [_jsxs("div", { className: "flex items-center gap-2 font-semibold text-sm mb-2", children: [_jsx(Icon, { className: "size-4 shrink-0" }), _jsx("span", { children: title })] }), _jsx("div", { className: "text-sm [&>p]:my-1 [&>p:first-child]:mt-0 [&>p:last-child]:mb-0", children: props.children })] }));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsbG91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL0NhbGxvdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFFdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBVWxELE1BQU0sT0FBTyxHQUF1QztJQUNsRCxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsSUFBSTtRQUNWLEtBQUssRUFBRSxjQUFjO1FBQ3JCLE9BQU8sRUFDTCx1RkFBdUY7S0FDMUY7SUFDRCxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsSUFBSTtRQUNWLEtBQUssRUFBRSxjQUFjO1FBQ3JCLE9BQU8sRUFDTCx1RkFBdUY7S0FDMUY7SUFDRCxHQUFHLEVBQUU7UUFDSCxJQUFJLEVBQUUsU0FBUztRQUNmLEtBQUssRUFBRSxhQUFhO1FBQ3BCLE9BQU8sRUFBRSxzRUFBc0U7S0FDaEY7SUFDRCxPQUFPLEVBQUU7UUFDUCxJQUFJLEVBQUUsYUFBYTtRQUNuQixLQUFLLEVBQUUsaUJBQWlCO1FBQ3hCLE9BQU8sRUFBRSxtRUFBbUU7S0FDN0U7SUFDRCxNQUFNLEVBQUU7UUFDTixJQUFJLEVBQUUsS0FBSztRQUNYLEtBQUssRUFBRSxnQkFBZ0I7UUFDdkIsT0FBTyxFQUNMLCtFQUErRTtLQUNsRjtDQUNGLENBQUE7QUFFRCw0RUFBNEU7QUFDNUUsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUl2QjtJQUNDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFBO0lBQ3ZCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFBO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM1QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFBO0lBQ3hCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUU1QyxPQUFPLENBQ0wsaUJBQU8sU0FBUyxFQUFFLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQ2xGLGVBQUssU0FBUyxFQUFDLG9EQUFvRCxhQUNqRSxLQUFDLElBQUksSUFBQyxTQUFTLEVBQUMsaUJBQWlCLEdBQUcsRUFDcEMseUJBQU8sS0FBSyxHQUFRLElBQ2hCLEVBQ04sY0FBSyxTQUFTLEVBQUMsaUVBQWlFLFlBQzdFLEtBQUssQ0FBQyxRQUFRLEdBQ1gsSUFDQSxDQUNULENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxlcnRUcmlhbmdsZSwgRmxhbWUsIEluZm8sIExpZ2h0YnVsYiB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIlxuaW1wb3J0IHsgY24gfSBmcm9tIFwiY25cIlxuaW1wb3J0IHR5cGUgeyBNZXNzYWdlS2V5IH0gZnJvbSBcIi4uL21vZGVscy9tZXNzYWdlLnRzXCJcbmltcG9ydCB7IHVzZU1lc3NhZ2VzIH0gZnJvbSBcIi4uL2hvb2tzL21lc3NhZ2VzLnRzXCJcblxudHlwZSBDYWxsb3V0VHlwZSA9IFwibm90ZVwiIHwgXCJ0aXBcIiB8IFwiaW5mb1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiXG5cbmludGVyZmFjZSBDYWxsb3V0Q29uZmlnIHtcbiAgaWNvbjogUmVhY3QuRWxlbWVudFR5cGVcbiAgbGFiZWw6IE1lc3NhZ2VLZXlcbiAgY2xhc3Nlczogc3RyaW5nXG59XG5cbmNvbnN0IGNvbmZpZ3M6IFJlY29yZDxDYWxsb3V0VHlwZSwgQ2FsbG91dENvbmZpZz4gPSB7XG4gIG5vdGU6IHtcbiAgICBpY29uOiBJbmZvLFxuICAgIGxhYmVsOiBcImNhbGxvdXQubm90ZVwiLFxuICAgIGNsYXNzZXM6XG4gICAgICBcImJvcmRlci1ibHVlLTUwMC8zMCBiZy1ibHVlLTUwLzUwIHRleHQtYmx1ZS05MDAgZGFyazpiZy1ibHVlLTk1MC8zMCBkYXJrOnRleHQtYmx1ZS0yMDBcIixcbiAgfSxcbiAgaW5mbzoge1xuICAgIGljb246IEluZm8sXG4gICAgbGFiZWw6IFwiY2FsbG91dC5pbmZvXCIsXG4gICAgY2xhc3NlczpcbiAgICAgIFwiYm9yZGVyLWJsdWUtNTAwLzMwIGJnLWJsdWUtNTAvNTAgdGV4dC1ibHVlLTkwMCBkYXJrOmJnLWJsdWUtOTUwLzMwIGRhcms6dGV4dC1ibHVlLTIwMFwiLFxuICB9LFxuICB0aXA6IHtcbiAgICBpY29uOiBMaWdodGJ1bGIsXG4gICAgbGFiZWw6IFwiY2FsbG91dC50aXBcIixcbiAgICBjbGFzc2VzOiBcImJvcmRlci1wb3NpdGl2ZS8zMCBiZy1wb3NpdGl2ZS10aW50LzUwIHRleHQtcG9zaXRpdmUtdGludC1mb3JlZ3JvdW5kXCIsXG4gIH0sXG4gIHdhcm5pbmc6IHtcbiAgICBpY29uOiBBbGVydFRyaWFuZ2xlLFxuICAgIGxhYmVsOiBcImNhbGxvdXQud2FybmluZ1wiLFxuICAgIGNsYXNzZXM6IFwiYm9yZGVyLXdhcm5pbmcvMzAgYmctd2FybmluZy10aW50LzUwIHRleHQtd2FybmluZy10aW50LWZvcmVncm91bmRcIixcbiAgfSxcbiAgZGFuZ2VyOiB7XG4gICAgaWNvbjogRmxhbWUsXG4gICAgbGFiZWw6IFwiY2FsbG91dC5kYW5nZXJcIixcbiAgICBjbGFzc2VzOlxuICAgICAgXCJib3JkZXItZGVzdHJ1Y3RpdmUvMzAgYmctZGVzdHJ1Y3RpdmUtdGludC81MCB0ZXh0LWRlc3RydWN0aXZlLXRpbnQtZm9yZWdyb3VuZFwiLFxuICB9LFxufVxuXG4vKiogU3R5bGVkIGNhbGxvdXQgYmxvY2sgZm9yIG5vdGVzLCB0aXBzLCB3YXJuaW5ncywgYW5kIG90aGVyIGFkbW9uaXRpb25zICovXG5leHBvcnQgZnVuY3Rpb24gQ2FsbG91dChwcm9wczoge1xuICB0eXBlPzogQ2FsbG91dFR5cGVcbiAgdGl0bGU/OiBzdHJpbmdcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufSkge1xuICBjb25zdCB0ID0gdXNlTWVzc2FnZXMoKVxuICBjb25zdCB0eXBlID0gcHJvcHMudHlwZSA/PyBcIm5vdGVcIlxuICBjb25zdCBjb25maWcgPSBjb25maWdzW3R5cGVdXG4gIGNvbnN0IEljb24gPSBjb25maWcuaWNvblxuICBjb25zdCB0aXRsZSA9IHByb3BzLnRpdGxlID8/IHQoY29uZmlnLmxhYmVsKVxuXG4gIHJldHVybiAoXG4gICAgPGFzaWRlIGNsYXNzTmFtZT17Y24oXCJub3QtcHJvc2UgbXktNCByb3VuZGVkLWNhcmQgYm9yZGVyIHB4LTQgcHktM1wiLCBjb25maWcuY2xhc3Nlcyl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBmb250LXNlbWlib2xkIHRleHQtc20gbWItMlwiPlxuICAgICAgICA8SWNvbiBjbGFzc05hbWU9XCJzaXplLTQgc2hyaW5rLTBcIiAvPlxuICAgICAgICA8c3Bhbj57dGl0bGV9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gWyY+cF06bXktMSBbJj5wOmZpcnN0LWNoaWxkXTptdC0wIFsmPnA6bGFzdC1jaGlsZF06bWItMFwiPlxuICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L2FzaWRlPlxuICApXG59XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Link } from "@tanstack/react-router";
|
|
3
|
+
import { DynamicIcon } from "../helpers/dynamic-icon.js";
|
|
4
|
+
import { Card as CardElement, CardContent, CardHeader, CardTitle, } from "../elements/card.js";
|
|
5
|
+
/** Card component with optional icon, title, description, and link */
|
|
6
|
+
export function Card(props) {
|
|
7
|
+
const card = (_jsxs(CardElement, { size: "sm", className: "transition-colors hover:bg-accent", children: [_jsx(CardHeader, { children: _jsxs(CardTitle, { className: "flex items-center gap-2", children: [props.icon && (_jsx(DynamicIcon, { name: props.icon, className: "size-5 text-primary" })), props.title] }) }), props.children && (_jsx(CardContent, { children: _jsx("div", { className: "text-muted-foreground text-sm", children: props.children }) }))] }));
|
|
8
|
+
if (props.href?.startsWith("http")) {
|
|
9
|
+
return (_jsx("a", { href: props.href, target: "_blank", rel: "noopener noreferrer", children: card }));
|
|
10
|
+
}
|
|
11
|
+
if (props.href) {
|
|
12
|
+
return _jsx(Link, { to: props.href, children: card });
|
|
13
|
+
}
|
|
14
|
+
return card;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL0NhcmQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE2QixDQUFBO0FBQ3pELE9BQU8sRUFDTCxJQUFJLElBQUksV0FBVyxFQUNuQixXQUFXLEVBQ1gsVUFBVSxFQUNWLFNBQVMsR0FDVixNQUFNLHFCQUFzQixDQUFBO0FBRTdCLHNFQUFzRTtBQUN0RSxNQUFNLFVBQVUsSUFBSSxDQUFDLEtBS3BCO0lBQ0MsTUFBTSxJQUFJLEdBQUcsQ0FDWCxNQUFDLFdBQVcsSUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLFNBQVMsRUFBQyxtQ0FBbUMsYUFDbEUsS0FBQyxVQUFVLGNBQ1QsTUFBQyxTQUFTLElBQUMsU0FBUyxFQUFDLHlCQUF5QixhQUMzQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQ2IsS0FBQyxXQUFXLElBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFDLHFCQUFxQixHQUFHLENBQ2xFLEVBQ0EsS0FBSyxDQUFDLEtBQUssSUFDRixHQUNELEVBQ1osS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUNqQixLQUFDLFdBQVcsY0FDVixjQUFLLFNBQVMsRUFBQywrQkFBK0IsWUFBRSxLQUFLLENBQUMsUUFBUSxHQUFPLEdBQ3pELENBQ2YsSUFDVyxDQUNmLENBQUE7SUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbkMsT0FBTyxDQUNMLFlBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUMscUJBQXFCLFlBQzNELElBQUksR0FDSCxDQUNMLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZixPQUFPLEtBQUMsSUFBSSxJQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxZQUFHLElBQUksR0FBUSxDQUFBO0lBQzVDLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaW5rIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIlxuaW1wb3J0IHsgRHluYW1pY0ljb24gfSBmcm9tIFwiLi4vaGVscGVycy9keW5hbWljLWljb24udHN4XCJcbmltcG9ydCB7XG4gIENhcmQgYXMgQ2FyZEVsZW1lbnQsXG4gIENhcmRDb250ZW50LFxuICBDYXJkSGVhZGVyLFxuICBDYXJkVGl0bGUsXG59IGZyb20gXCIuLi9lbGVtZW50cy9jYXJkLnRzeFwiXG5cbi8qKiBDYXJkIGNvbXBvbmVudCB3aXRoIG9wdGlvbmFsIGljb24sIHRpdGxlLCBkZXNjcmlwdGlvbiwgYW5kIGxpbmsgKi9cbmV4cG9ydCBmdW5jdGlvbiBDYXJkKHByb3BzOiB7XG4gIHRpdGxlOiBzdHJpbmdcbiAgaHJlZj86IHN0cmluZ1xuICBpY29uPzogc3RyaW5nXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG59KSB7XG4gIGNvbnN0IGNhcmQgPSAoXG4gICAgPENhcmRFbGVtZW50IHNpemU9XCJzbVwiIGNsYXNzTmFtZT1cInRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudFwiPlxuICAgICAgPENhcmRIZWFkZXI+XG4gICAgICAgIDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICB7cHJvcHMuaWNvbiAmJiAoXG4gICAgICAgICAgICA8RHluYW1pY0ljb24gbmFtZT17cHJvcHMuaWNvbn0gY2xhc3NOYW1lPVwic2l6ZS01IHRleHQtcHJpbWFyeVwiIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7cHJvcHMudGl0bGV9XG4gICAgICAgIDwvQ2FyZFRpdGxlPlxuICAgICAgPC9DYXJkSGVhZGVyPlxuICAgICAge3Byb3BzLmNoaWxkcmVuICYmIChcbiAgICAgICAgPENhcmRDb250ZW50PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc21cIj57cHJvcHMuY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDwvQ2FyZENvbnRlbnQ+XG4gICAgICApfVxuICAgIDwvQ2FyZEVsZW1lbnQ+XG4gIClcblxuICBpZiAocHJvcHMuaHJlZj8uc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGEgaHJlZj17cHJvcHMuaHJlZn0gdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICB7Y2FyZH1cbiAgICAgIDwvYT5cbiAgICApXG4gIH1cblxuICBpZiAocHJvcHMuaHJlZikge1xuICAgIHJldHVybiA8TGluayB0bz17cHJvcHMuaHJlZn0+e2NhcmR9PC9MaW5rPlxuICB9XG5cbiAgcmV0dXJuIGNhcmRcbn1cbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/** Grid container for card components */
|
|
3
|
+
export function Cards(props) {
|
|
4
|
+
return (_jsx("div", { className: "not-prose grid grid-cols-1 gap-4 my-4 sm:grid-cols-2", children: props.children }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FyZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9DYXJkcy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlDQUF5QztBQUN6QyxNQUFNLFVBQVUsS0FBSyxDQUFDLEtBQW9DO0lBQ3hELE9BQU8sQ0FDTCxjQUFLLFNBQVMsRUFBQyxzREFBc0QsWUFDbEUsS0FBSyxDQUFDLFFBQVEsR0FDWCxDQUNQLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEdyaWQgY29udGFpbmVyIGZvciBjYXJkIGNvbXBvbmVudHMgKi9cbmV4cG9ydCBmdW5jdGlvbiBDYXJkcyhwcm9wczogeyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm5vdC1wcm9zZSBncmlkIGdyaWQtY29scy0xIGdhcC00IG15LTQgc206Z3JpZC1jb2xzLTJcIj5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function CodeBlock(props: React.ComponentProps<"pre">): import("react").JSX.Element;
|