@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
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
|
|
2
|
+
declare function TooltipProvider({ delay, ...props }: TooltipPrimitive.Provider.Props): import("react").JSX.Element;
|
|
3
|
+
declare function Tooltip({ ...props }: TooltipPrimitive.Root.Props): import("react").JSX.Element;
|
|
4
|
+
declare function TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props): import("react").JSX.Element;
|
|
5
|
+
declare function TooltipContent({ className, side, sideOffset, align, alignOffset, children, ...props }: TooltipPrimitive.Popup.Props & Pick<TooltipPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): import("react").JSX.Element;
|
|
6
|
+
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
|
|
3
|
+
import { cn } from "cn";
|
|
4
|
+
function TooltipProvider({ delay = 0, ...props }) {
|
|
5
|
+
return (_jsx(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delay: delay, ...props }));
|
|
6
|
+
}
|
|
7
|
+
function Tooltip({ ...props }) {
|
|
8
|
+
return (_jsx(TooltipProvider, { children: _jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props }) }));
|
|
9
|
+
}
|
|
10
|
+
function TooltipTrigger({ ...props }) {
|
|
11
|
+
return _jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
|
|
12
|
+
}
|
|
13
|
+
function TooltipContent({ className, side = "top", sideOffset = 4, align = "center", alignOffset = 0, children, ...props }) {
|
|
14
|
+
return (_jsx(TooltipPrimitive.Portal, { children: _jsx(TooltipPrimitive.Positioner, { align: align, alignOffset: alignOffset, side: side, sideOffset: sideOffset, className: "isolate z-50", children: _jsxs(TooltipPrimitive.Popup, { "data-slot": "tooltip-content", className: cn("data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 rounded-md px-3 py-1.5 text-xs data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 bg-foreground text-background z-50 w-fit max-w-xs origin-(--transform-origin)", className), ...props, children: [children, _jsx(TooltipPrimitive.Arrow, { className: "size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 bg-foreground fill-foreground z-50 data-[side=bottom]:top-1 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })] }) }) }));
|
|
15
|
+
}
|
|
16
|
+
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9lbGVtZW50cy90b29sdGlwLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFFdkIsU0FBUyxlQUFlLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFtQztJQUMvRSxPQUFPLENBQ0wsS0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLGlCQUFXLGtCQUFrQixFQUFDLEtBQUssRUFBRSxLQUFLLEtBQU0sS0FBSyxHQUFJLENBQ3BGLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBK0I7SUFDeEQsT0FBTyxDQUNMLEtBQUMsZUFBZSxjQUNkLEtBQUMsZ0JBQWdCLENBQUMsSUFBSSxpQkFBVyxTQUFTLEtBQUssS0FBSyxHQUFJLEdBQ3hDLENBQ25CLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBa0M7SUFDbEUsT0FBTyxLQUFDLGdCQUFnQixDQUFDLE9BQU8saUJBQVcsaUJBQWlCLEtBQUssS0FBSyxHQUFJLENBQUE7QUFDNUUsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEVBQ3RCLFNBQVMsRUFDVCxJQUFJLEdBQUcsS0FBSyxFQUNaLFVBQVUsR0FBRyxDQUFDLEVBQ2QsS0FBSyxHQUFHLFFBQVEsRUFDaEIsV0FBVyxHQUFHLENBQUMsRUFDZixRQUFRLEVBQ1IsR0FBRyxLQUFLLEVBS1A7SUFDRCxPQUFPLENBQ0wsS0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLGNBQ3RCLEtBQUMsZ0JBQWdCLENBQUMsVUFBVSxJQUMxQixLQUFLLEVBQUUsS0FBSyxFQUNaLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLElBQUksRUFBRSxJQUFJLEVBQ1YsVUFBVSxFQUFFLFVBQVUsRUFDdEIsU0FBUyxFQUFDLGNBQWMsWUFFeEIsTUFBQyxnQkFBZ0IsQ0FBQyxLQUFLLGlCQUNYLGlCQUFpQixFQUMzQixTQUFTLEVBQUUsRUFBRSxDQUNYLHdsQkFBd2xCLEVBQ3hsQixTQUFTLENBQ1YsS0FDRyxLQUFLLGFBRVIsUUFBUSxFQUNULEtBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFDLFNBQVMsRUFBQyw0aEJBQTRoQixHQUFHLElBQzFpQixHQUNHLEdBQ04sQ0FDM0IsQ0FBQTtBQUNILENBQUM7QUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb29sdGlwIGFzIFRvb2x0aXBQcmltaXRpdmUgfSBmcm9tIFwiQGJhc2UtdWkvcmVhY3QvdG9vbHRpcFwiXG5pbXBvcnQgeyBjbiB9IGZyb20gXCJjblwiXG5cbmZ1bmN0aW9uIFRvb2x0aXBQcm92aWRlcih7IGRlbGF5ID0gMCwgLi4ucHJvcHMgfTogVG9vbHRpcFByaW1pdGl2ZS5Qcm92aWRlci5Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyIGRhdGEtc2xvdD1cInRvb2x0aXAtcHJvdmlkZXJcIiBkZWxheT17ZGVsYXl9IHsuLi5wcm9wc30gLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwKHsgLi4ucHJvcHMgfTogVG9vbHRpcFByaW1pdGl2ZS5Sb290LlByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPFRvb2x0aXBQcm92aWRlcj5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwidG9vbHRpcFwiIHsuLi5wcm9wc30gLz5cbiAgICA8L1Rvb2x0aXBQcm92aWRlcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwVHJpZ2dlcih7IC4uLnByb3BzIH06IFRvb2x0aXBQcmltaXRpdmUuVHJpZ2dlci5Qcm9wcykge1xuICByZXR1cm4gPFRvb2x0aXBQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJ0b29sdGlwLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFRvb2x0aXBDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICBzaWRlID0gXCJ0b3BcIixcbiAgc2lkZU9mZnNldCA9IDQsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgYWxpZ25PZmZzZXQgPSAwLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFRvb2x0aXBQcmltaXRpdmUuUG9wdXAuUHJvcHMgJlxuICBQaWNrPFxuICAgIFRvb2x0aXBQcmltaXRpdmUuUG9zaXRpb25lci5Qcm9wcyxcbiAgICBcImFsaWduXCIgfCBcImFsaWduT2Zmc2V0XCIgfCBcInNpZGVcIiB8IFwic2lkZU9mZnNldFwiXG4gID4pIHtcbiAgcmV0dXJuIChcbiAgICA8VG9vbHRpcFByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8VG9vbHRpcFByaW1pdGl2ZS5Qb3NpdGlvbmVyXG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgYWxpZ25PZmZzZXQ9e2FsaWduT2Zmc2V0fVxuICAgICAgICBzaWRlPXtzaWRlfVxuICAgICAgICBzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxuICAgICAgICBjbGFzc05hbWU9XCJpc29sYXRlIHotNTBcIlxuICAgICAgPlxuICAgICAgICA8VG9vbHRpcFByaW1pdGl2ZS5Qb3B1cFxuICAgICAgICAgIGRhdGEtc2xvdD1cInRvb2x0aXAtY29udGVudFwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgIFwiZGF0YS1vcGVuOmFuaW1hdGUtaW4gZGF0YS1vcGVuOmZhZGUtaW4tMCBkYXRhLW9wZW46em9vbS1pbi05NSBkYXRhLVtzdGF0ZT1kZWxheWVkLW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9ZGVsYXllZC1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9ZGVsYXllZC1vcGVuXTp6b29tLWluLTk1IGRhdGEtY2xvc2VkOmFuaW1hdGUtb3V0IGRhdGEtY2xvc2VkOmZhZGUtb3V0LTAgZGF0YS1jbG9zZWQ6em9vbS1vdXQtOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXhzIGRhdGEtW3NpZGU9aW5saW5lLXN0YXJ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1pbmxpbmUtZW5kXTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBiZy1mb3JlZ3JvdW5kIHRleHQtYmFja2dyb3VuZCB6LTUwIHctZml0IG1heC13LXhzIG9yaWdpbi0oLS10cmFuc2Zvcm0tb3JpZ2luKVwiLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICl9XG4gICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgIDxUb29sdGlwUHJpbWl0aXZlLkFycm93IGNsYXNzTmFtZT1cInNpemUtMi41IHRyYW5zbGF0ZS15LVtjYWxjKC01MCVfLV8ycHgpXSByb3RhdGUtNDUgcm91bmRlZC1bMnB4XSBkYXRhLVtzaWRlPWlubGluZS1zdGFydF06dG9wLTEvMiEgZGF0YS1bc2lkZT1pbmxpbmUtc3RhcnRdOi1yaWdodC0xIGRhdGEtW3NpZGU9aW5saW5lLXN0YXJ0XTotdHJhbnNsYXRlLXktMS8yIGRhdGEtW3NpZGU9aW5saW5lLWVuZF06dG9wLTEvMiEgZGF0YS1bc2lkZT1pbmxpbmUtZW5kXTotbGVmdC0xIGRhdGEtW3NpZGU9aW5saW5lLWVuZF06LXRyYW5zbGF0ZS15LTEvMiBiZy1mb3JlZ3JvdW5kIGZpbGwtZm9yZWdyb3VuZCB6LTUwIGRhdGEtW3NpZGU9Ym90dG9tXTp0b3AtMSBkYXRhLVtzaWRlPWxlZnRdOnRvcC0xLzIhIGRhdGEtW3NpZGU9bGVmdF06LXJpZ2h0LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXktMS8yIGRhdGEtW3NpZGU9cmlnaHRdOnRvcC0xLzIhIGRhdGEtW3NpZGU9cmlnaHRdOi1sZWZ0LTEgZGF0YS1bc2lkZT1yaWdodF06LXRyYW5zbGF0ZS15LTEvMiBkYXRhLVtzaWRlPXRvcF06LWJvdHRvbS0yLjVcIiAvPlxuICAgICAgICA8L1Rvb2x0aXBQcmltaXRpdmUuUG9wdXA+XG4gICAgICA8L1Rvb2x0aXBQcmltaXRpdmUuUG9zaXRpb25lcj5cbiAgICA8L1Rvb2x0aXBQcmltaXRpdmUuUG9ydGFsPlxuICApXG59XG5cbmV4cG9ydCB7IFRvb2x0aXAsIFRvb2x0aXBUcmlnZ2VyLCBUb29sdGlwQ29udGVudCwgVG9vbHRpcFByb3ZpZGVyIH1cbiJdfQ==
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
const STANDARD_COLORS = [
|
|
2
|
+
"#4f5b66", // 0 black
|
|
3
|
+
"#bf616a", // 1 red
|
|
4
|
+
"#a3be8c", // 2 green
|
|
5
|
+
"#ebcb8b", // 3 yellow
|
|
6
|
+
"#8fa1b3", // 4 blue
|
|
7
|
+
"#b48ead", // 5 magenta
|
|
8
|
+
"#96b5b4", // 6 cyan
|
|
9
|
+
"#c0c5ce", // 7 white
|
|
10
|
+
];
|
|
11
|
+
const BRIGHT_COLORS = [
|
|
12
|
+
"#65737e", // 8 bright black
|
|
13
|
+
"#bf616a", // 9 bright red
|
|
14
|
+
"#a3be8c", // 10 bright green
|
|
15
|
+
"#ebcb8b", // 11 bright yellow
|
|
16
|
+
"#8fa1b3", // 12 bright blue
|
|
17
|
+
"#b48ead", // 13 bright magenta
|
|
18
|
+
"#96b5b4", // 14 bright cyan
|
|
19
|
+
"#eff1f5", // 15 bright white
|
|
20
|
+
];
|
|
21
|
+
function color256(n) {
|
|
22
|
+
if (n < 8)
|
|
23
|
+
return STANDARD_COLORS[n];
|
|
24
|
+
if (n < 16)
|
|
25
|
+
return BRIGHT_COLORS[n - 8];
|
|
26
|
+
if (n < 232) {
|
|
27
|
+
const idx = n - 16;
|
|
28
|
+
const r = Math.floor(idx / 36);
|
|
29
|
+
const g = Math.floor((idx % 36) / 6);
|
|
30
|
+
const b = idx % 6;
|
|
31
|
+
const toHex = (v) => (v === 0 ? 0 : 55 + v * 40).toString(16).padStart(2, "0");
|
|
32
|
+
return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
|
|
33
|
+
}
|
|
34
|
+
if (n < 256) {
|
|
35
|
+
const v = (8 + (n - 232) * 10).toString(16).padStart(2, "0");
|
|
36
|
+
return `#${v}${v}${v}`;
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
function escapeHtml(text) {
|
|
41
|
+
return text
|
|
42
|
+
.replace(/&/g, "&")
|
|
43
|
+
.replace(/</g, "<")
|
|
44
|
+
.replace(/>/g, ">")
|
|
45
|
+
.replace(/"/g, """);
|
|
46
|
+
}
|
|
47
|
+
function buildStyle(state) {
|
|
48
|
+
const parts = [];
|
|
49
|
+
if (state.fg)
|
|
50
|
+
parts.push(`color:${state.fg}`);
|
|
51
|
+
if (state.bg)
|
|
52
|
+
parts.push(`background-color:${state.bg}`);
|
|
53
|
+
if (state.bold)
|
|
54
|
+
parts.push("font-weight:bold");
|
|
55
|
+
if (state.dim)
|
|
56
|
+
parts.push("opacity:0.7");
|
|
57
|
+
if (state.italic)
|
|
58
|
+
parts.push("font-style:italic");
|
|
59
|
+
if (state.underline)
|
|
60
|
+
parts.push("text-decoration:underline");
|
|
61
|
+
if (state.strikethrough)
|
|
62
|
+
parts.push("text-decoration:line-through");
|
|
63
|
+
return parts.join(";");
|
|
64
|
+
}
|
|
65
|
+
function makeDefaultState() {
|
|
66
|
+
return {
|
|
67
|
+
bold: false,
|
|
68
|
+
dim: false,
|
|
69
|
+
italic: false,
|
|
70
|
+
underline: false,
|
|
71
|
+
strikethrough: false,
|
|
72
|
+
fg: undefined,
|
|
73
|
+
bg: undefined,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function applyParams(state, params) {
|
|
77
|
+
let i = 0;
|
|
78
|
+
while (i < params.length) {
|
|
79
|
+
const code = params[i];
|
|
80
|
+
switch (code) {
|
|
81
|
+
case 0: {
|
|
82
|
+
const reset = makeDefaultState();
|
|
83
|
+
state.bold = reset.bold;
|
|
84
|
+
state.dim = reset.dim;
|
|
85
|
+
state.italic = reset.italic;
|
|
86
|
+
state.underline = reset.underline;
|
|
87
|
+
state.strikethrough = reset.strikethrough;
|
|
88
|
+
state.fg = reset.fg;
|
|
89
|
+
state.bg = reset.bg;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case 1:
|
|
93
|
+
state.bold = true;
|
|
94
|
+
break;
|
|
95
|
+
case 2:
|
|
96
|
+
state.dim = true;
|
|
97
|
+
break;
|
|
98
|
+
case 3:
|
|
99
|
+
state.italic = true;
|
|
100
|
+
break;
|
|
101
|
+
case 4:
|
|
102
|
+
state.underline = true;
|
|
103
|
+
break;
|
|
104
|
+
case 9:
|
|
105
|
+
state.strikethrough = true;
|
|
106
|
+
break;
|
|
107
|
+
case 22:
|
|
108
|
+
state.bold = false;
|
|
109
|
+
state.dim = false;
|
|
110
|
+
break;
|
|
111
|
+
case 23:
|
|
112
|
+
state.italic = false;
|
|
113
|
+
break;
|
|
114
|
+
case 24:
|
|
115
|
+
state.underline = false;
|
|
116
|
+
break;
|
|
117
|
+
case 29:
|
|
118
|
+
state.strikethrough = false;
|
|
119
|
+
break;
|
|
120
|
+
case 39:
|
|
121
|
+
state.fg = undefined;
|
|
122
|
+
break;
|
|
123
|
+
case 49:
|
|
124
|
+
state.bg = undefined;
|
|
125
|
+
break;
|
|
126
|
+
default:
|
|
127
|
+
if (code >= 30 && code <= 37) {
|
|
128
|
+
state.fg = STANDARD_COLORS[code - 30];
|
|
129
|
+
}
|
|
130
|
+
else if (code >= 40 && code <= 47) {
|
|
131
|
+
state.bg = STANDARD_COLORS[code - 40];
|
|
132
|
+
}
|
|
133
|
+
else if (code >= 90 && code <= 97) {
|
|
134
|
+
state.fg = BRIGHT_COLORS[code - 90];
|
|
135
|
+
}
|
|
136
|
+
else if (code >= 100 && code <= 107) {
|
|
137
|
+
state.bg = BRIGHT_COLORS[code - 100];
|
|
138
|
+
}
|
|
139
|
+
else if (code === 38 || code === 48) {
|
|
140
|
+
const kind = params[i + 1];
|
|
141
|
+
if (kind === 5) {
|
|
142
|
+
const colorIdx = params[i + 2];
|
|
143
|
+
if (colorIdx !== undefined) {
|
|
144
|
+
const c = color256(colorIdx);
|
|
145
|
+
if (code === 38)
|
|
146
|
+
state.fg = c;
|
|
147
|
+
else
|
|
148
|
+
state.bg = c;
|
|
149
|
+
}
|
|
150
|
+
i += 2;
|
|
151
|
+
}
|
|
152
|
+
else if (kind === 2) {
|
|
153
|
+
const r = params[i + 2] ?? 0;
|
|
154
|
+
const g = params[i + 3] ?? 0;
|
|
155
|
+
const b = params[i + 4] ?? 0;
|
|
156
|
+
const toHex = (v) => v.toString(16).padStart(2, "0");
|
|
157
|
+
const c = `#${toHex(r)}${toHex(g)}${toHex(b)}`;
|
|
158
|
+
if (code === 38)
|
|
159
|
+
state.fg = c;
|
|
160
|
+
else
|
|
161
|
+
state.bg = c;
|
|
162
|
+
i += 4;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
i++;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/** Convert a string containing ANSI escape sequences into HTML with inline styles */
|
|
171
|
+
export function ansiToHtml(input) {
|
|
172
|
+
// oxlint-disable-next-line no-control-regex -- ANSI escape sequences start with U+001B
|
|
173
|
+
const sgr = /\u001b\[([0-9;]*)m/g;
|
|
174
|
+
const state = makeDefaultState();
|
|
175
|
+
const parts = [];
|
|
176
|
+
let lastIndex = 0;
|
|
177
|
+
let match = sgr.exec(input);
|
|
178
|
+
while (match !== null) {
|
|
179
|
+
const textBefore = input.slice(lastIndex, match.index);
|
|
180
|
+
if (textBefore) {
|
|
181
|
+
const style = buildStyle(state);
|
|
182
|
+
if (style) {
|
|
183
|
+
parts.push(`<span style="${style}">${escapeHtml(textBefore)}</span>`);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
parts.push(escapeHtml(textBefore));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const rawParams = match[1];
|
|
190
|
+
const params = rawParams === "" ? [0] : rawParams.split(";").map(s => Number.parseInt(s, 10));
|
|
191
|
+
applyParams(state, params);
|
|
192
|
+
lastIndex = match.index + match[0].length;
|
|
193
|
+
match = sgr.exec(input);
|
|
194
|
+
}
|
|
195
|
+
const trailing = input.slice(lastIndex);
|
|
196
|
+
if (trailing) {
|
|
197
|
+
const style = buildStyle(state);
|
|
198
|
+
if (style) {
|
|
199
|
+
parts.push(`<span style="${style}">${escapeHtml(trailing)}</span>`);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
parts.push(escapeHtml(trailing));
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return parts.join("");
|
|
206
|
+
}
|
|
207
|
+
/** Walk a mdast tree and convert ansi code blocks into AnsiCode JSX elements */
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5zaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9oZWxwZXJzL2Fuc2kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxlQUFlLEdBQTBCO0lBQzdDLFNBQVMsRUFBRSxVQUFVO0lBQ3JCLFNBQVMsRUFBRSxRQUFRO0lBQ25CLFNBQVMsRUFBRSxVQUFVO0lBQ3JCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLFNBQVMsRUFBRSxVQUFVO0NBQ3RCLENBQUE7QUFFRCxNQUFNLGFBQWEsR0FBMEI7SUFDM0MsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QixTQUFTLEVBQUUsZUFBZTtJQUMxQixTQUFTLEVBQUUsa0JBQWtCO0lBQzdCLFNBQVMsRUFBRSxtQkFBbUI7SUFDOUIsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QixTQUFTLEVBQUUsb0JBQW9CO0lBQy9CLFNBQVMsRUFBRSxpQkFBaUI7SUFDNUIsU0FBUyxFQUFFLGtCQUFrQjtDQUM5QixDQUFBO0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBUztJQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDcEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUFFLE9BQU8sYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUN2QyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNaLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDbEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDOUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFD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RyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNoRixXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzFCLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDekMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDdkMsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMvQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDckUsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ3ZCLENBQUM7QUFFRCxnRkFBZ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgQW5zaVN0YXRlIHtcbiAgYm9sZDogYm9vbGVhblxuICBkaW06IGJvb2xlYW5cbiAgaXRhbGljOiBib29sZWFuXG4gIHVuZGVybGluZTogYm9vbGVhblxuICBzdHJpa2V0aHJvdWdoOiBib29sZWFuXG4gIGZnOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgYmc6IHN0cmluZyB8IHVuZGVmaW5lZFxufVxuXG5jb25zdCBTVEFOREFSRF9DT0xPUlM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiA9IFtcbiAgXCIjNGY1YjY2XCIsIC8vIDAgYmxhY2tcbiAgXCIjYmY2MTZhXCIsIC8vIDEgcmVkXG4gIFwiI2EzYmU4Y1wiLCAvLyAyIGdyZWVuXG4gIFwiI2ViY2I4YlwiLCAvLyAzIHllbGxvd1xuICBcIiM4ZmExYjNcIiwgLy8gNCBibHVlXG4gIFwiI2I0OGVhZFwiLCAvLyA1IG1hZ2VudGFcbiAgXCIjOTZiNWI0XCIsIC8vIDYgY3lhblxuICBcIiNjMGM1Y2VcIiwgLy8gNyB3aGl0ZVxuXVxuXG5jb25zdCBCUklHSFRfQ09MT1JTOiBSZWFkb25seUFycmF5PHN0cmluZz4gPSBbXG4gIFwiIzY1NzM3ZVwiLCAvLyA4IGJyaWdodCBibGFja1xuICBcIiNiZjYxNmFcIiwgLy8gOSBicmlnaHQgcmVkXG4gIFwiI2EzYmU4Y1wiLCAvLyAxMCBicmlnaHQgZ3JlZW5cbiAgXCIjZWJjYjhiXCIsIC8vIDExIGJyaWdodCB5ZWxsb3dcbiAgXCIjOGZhMWIzXCIsIC8vIDEyIGJyaWdodCBibHVlXG4gIFwiI2I0OGVhZFwiLCAvLyAxMyBicmlnaHQgbWFnZW50YVxuICBcIiM5NmI1YjRcIiwgLy8gMTQgYnJpZ2h0IGN5YW5cbiAgXCIjZWZmMWY1XCIsIC8vIDE1IGJyaWdodCB3aGl0ZVxuXVxuXG5mdW5jdGlvbiBjb2xvcjI1NihuOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAobiA8IDgpIHJldHVybiBTVEFOREFSRF9DT0xPUlNbbl1cbiAgaWYgKG4gPCAxNikgcmV0dXJuIEJSSUdIVF9DT0xPUlNbbiAtIDhdXG4gIGlmIChuIDwgMjMyKSB7XG4gICAgY29uc3QgaWR4ID0gbiAtIDE2XG4gICAgY29uc3QgciA9IE1hdGguZmxvb3IoaWR4IC8gMzYpXG4gICAgY29uc3QgZyA9IE1hdGguZmxvb3IoKGlkeCAlIDM2KSAvIDYpXG4gICAgY29uc3QgYiA9IGlkeCAlIDZcbiAgICBjb25zdCB0b0hleCA9ICh2OiBudW1iZXIpID0+ICh2ID09PSAwID8gMCA6IDU1ICsgdiAqIDQwKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpXG4gICAgcmV0dXJuIGAjJHt0b0hleChyKX0ke3RvSGV4KGcpfSR7dG9IZXgoYil9YFxuICB9XG4gIGlmIChuIDwgMjU2KSB7XG4gICAgY29uc3QgdiA9ICg4ICsgKG4gLSAyMzIpICogMTApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIilcbiAgICByZXR1cm4gYCMke3Z9JHt2fSR7dn1gXG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBlc2NhcGVIdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKVxuICAgIC5yZXBsYWNlKC88L2csIFwiJmx0O1wiKVxuICAgIC5yZXBsYWNlKC8+L2csIFwiJmd0O1wiKVxuICAgIC5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKVxufVxuXG5mdW5jdGlvbiBidWlsZFN0eWxlKHN0YXRlOiBBbnNpU3RhdGUpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXVxuICBpZiAoc3RhdGUuZmcpIHBhcnRzLnB1c2goYGNvbG9yOiR7c3RhdGUuZmd9YClcbiAgaWYgKHN0YXRlLmJnKSBwYXJ0cy5wdXNoKGBiYWNrZ3JvdW5kLWNvbG9yOiR7c3RhdGUuYmd9YClcbiAgaWYgKHN0YXRlLmJvbGQpIHBhcnRzLnB1c2goXCJmb250LXdlaWdodDpib2xkXCIpXG4gIGlmIChzdGF0ZS5kaW0pIHBhcnRzLnB1c2goXCJvcGFjaXR5OjAuN1wiKVxuICBpZiAoc3RhdGUuaXRhbGljKSBwYXJ0cy5wdXNoKFwiZm9udC1zdHlsZTppdGFsaWNcIilcbiAgaWYgKHN0YXRlLnVuZGVybGluZSkgcGFydHMucHVzaChcInRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmVcIilcbiAgaWYgKHN0YXRlLnN0cmlrZXRocm91Z2gpIHBhcnRzLnB1c2goXCJ0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdoXCIpXG4gIHJldHVybiBwYXJ0cy5qb2luKFwiO1wiKVxufVxuXG5mdW5jdGlvbiBtYWtlRGVmYXVsdFN0YXRlKCk6IEFuc2lTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgYm9sZDogZmFsc2UsXG4gICAgZGltOiBmYWxzZSxcbiAgICBpdGFsaWM6IGZhbHNlLFxuICAgIHVuZGVybGluZTogZmFsc2UsXG4gICAgc3RyaWtldGhyb3VnaDogZmFsc2UsXG4gICAgZmc6IHVuZGVmaW5lZCxcbiAgICBiZzogdW5kZWZpbmVkLFxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5UGFyYW1zKHN0YXRlOiBBbnNpU3RhdGUsIHBhcmFtczogUmVhZG9ubHlBcnJheTxudW1iZXI+KSB7XG4gIGxldCBpID0gMFxuICB3aGlsZSAoaSA8IHBhcmFtcy5sZW5ndGgpIHtcbiAgICBjb25zdCBjb2RlID0gcGFyYW1zW2ldIVxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSAwOiB7XG4gICAgICAgIGNvbnN0IHJlc2V0ID0gbWFrZURlZmF1bHRTdGF0ZSgpXG4gICAgICAgIHN0YXRlLmJvbGQgPSByZXNldC5ib2xkXG4gICAgICAgIHN0YXRlLmRpbSA9IHJlc2V0LmRpbVxuICAgICAgICBzdGF0ZS5pdGFsaWMgPSByZXNldC5pdGFsaWNcbiAgICAgICAgc3RhdGUudW5kZXJsaW5lID0gcmVzZXQudW5kZXJsaW5lXG4gICAgICAgIHN0YXRlLnN0cmlrZXRocm91Z2ggPSByZXNldC5zdHJpa2V0aHJvdWdoXG4gICAgICAgIHN0YXRlLmZnID0gcmVzZXQuZmdcbiAgICAgICAgc3RhdGUuYmcgPSByZXNldC5iZ1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAxOlxuICAgICAgICBzdGF0ZS5ib2xkID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyOlxuICAgICAgICBzdGF0ZS5kaW0gPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHN0YXRlLml0YWxpYyA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgNDpcbiAgICAgICAgc3RhdGUudW5kZXJsaW5lID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSA5OlxuICAgICAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyMjpcbiAgICAgICAgc3RhdGUuYm9sZCA9IGZhbHNlXG4gICAgICAgIHN0YXRlLmRpbSA9IGZhbHNlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDIzOlxuICAgICAgICBzdGF0ZS5pdGFsaWMgPSBmYWxzZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNDpcbiAgICAgICAgc3RhdGUudW5kZXJsaW5lID0gZmFsc2VcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjk6XG4gICAgICAgIHN0YXRlLnN0cmlrZXRocm91Z2ggPSBmYWxzZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAzOTpcbiAgICAgICAgc3RhdGUuZmcgPSB1bmRlZmluZWRcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgNDk6XG4gICAgICAgIHN0YXRlLmJnID0gdW5kZWZpbmVkXG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoY29kZSA+PSAzMCAmJiBjb2RlIDw9IDM3KSB7XG4gICAgICAgICAgc3RhdGUuZmcgPSBTVEFOREFSRF9DT0xPUlNbY29kZSAtIDMwXVxuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPj0gNDAgJiYgY29kZSA8PSA0Nykge1xuICAgICAgICAgIHN0YXRlLmJnID0gU1RBTkRBUkRfQ09MT1JTW2NvZGUgLSA0MF1cbiAgICAgICAgfSBlbHNlIGlmIChjb2RlID49IDkwICYmIGNvZGUgPD0gOTcpIHtcbiAgICAgICAgICBzdGF0ZS5mZyA9IEJSSUdIVF9DT0xPUlNbY29kZSAtIDkwXVxuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPj0gMTAwICYmIGNvZGUgPD0gMTA3KSB7XG4gICAgICAgICAgc3RhdGUuYmcgPSBCUklHSFRfQ09MT1JTW2NvZGUgLSAxMDBdXG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMzggfHwgY29kZSA9PT0gNDgpIHtcbiAgICAgICAgICBjb25zdCBraW5kID0gcGFyYW1zW2kgKyAxXVxuICAgICAgICAgIGlmIChraW5kID09PSA1KSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvcklkeCA9IHBhcmFtc1tpICsgMl1cbiAgICAgICAgICAgIGlmIChjb2xvcklkeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGMgPSBjb2xvcjI1Nihjb2xvcklkeClcbiAgICAgICAgICAgICAgaWYgKGNvZGUgPT09IDM4KSBzdGF0ZS5mZyA9IGNcbiAgICAgICAgICAgICAgZWxzZSBzdGF0ZS5iZyA9IGNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gMlxuICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgciA9IHBhcmFtc1tpICsgMl0gPz8gMFxuICAgICAgICAgICAgY29uc3QgZyA9IHBhcmFtc1tpICsgM10gPz8gMFxuICAgICAgICAgICAgY29uc3QgYiA9IHBhcmFtc1tpICsgNF0gPz8gMFxuICAgICAgICAgICAgY29uc3QgdG9IZXggPSAodjogbnVtYmVyKSA9PiB2LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIilcbiAgICAgICAgICAgIGNvbnN0IGMgPSBgIyR7dG9IZXgocil9JHt0b0hleChnKX0ke3RvSGV4KGIpfWBcbiAgICAgICAgICAgIGlmIChjb2RlID09PSAzOCkgc3RhdGUuZmcgPSBjXG4gICAgICAgICAgICBlbHNlIHN0YXRlLmJnID0gY1xuICAgICAgICAgICAgaSArPSA0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIGkrK1xuICB9XG59XG5cbi8qKiBDb252ZXJ0IGEgc3RyaW5nIGNvbnRhaW5pbmcgQU5TSSBlc2NhcGUgc2VxdWVuY2VzIGludG8gSFRNTCB3aXRoIGlubGluZSBzdHlsZXMgKi9cbmV4cG9ydCBmdW5jdGlvbiBhbnNpVG9IdG1sKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCAtLSBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgc3RhcnQgd2l0aCBVKzAwMUJcbiAgY29uc3Qgc2dyID0gL1xcdTAwMWJcXFsoWzAtOTtdKiltL2dcbiAgY29uc3Qgc3RhdGUgPSBtYWtlRGVmYXVsdFN0YXRlKClcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW11cbiAgbGV0IGxhc3RJbmRleCA9IDBcblxuICBsZXQgbWF0Y2ggPSBzZ3IuZXhlYyhpbnB1dClcbiAgd2hpbGUgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgY29uc3QgdGV4dEJlZm9yZSA9IGlucHV0LnNsaWNlKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpXG4gICAgaWYgKHRleHRCZWZvcmUpIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gYnVpbGRTdHlsZShzdGF0ZSlcbiAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICBwYXJ0cy5wdXNoKGA8c3BhbiBzdHlsZT1cIiR7c3R5bGV9XCI+JHtlc2NhcGVIdG1sKHRleHRCZWZvcmUpfTwvc3Bhbj5gKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFydHMucHVzaChlc2NhcGVIdG1sKHRleHRCZWZvcmUpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJhd1BhcmFtcyA9IG1hdGNoWzFdIVxuICAgIGNvbnN0IHBhcmFtcyA9XG4gICAgICByYXdQYXJhbXMgPT09IFwiXCIgPyBbMF0gOiByYXdQYXJhbXMuc3BsaXQoXCI7XCIpLm1hcChzID0+IE51bWJlci5wYXJzZUludChzLCAxMCkpXG4gICAgYXBwbHlQYXJhbXMoc3RhdGUsIHBhcmFtcylcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICAgIG1hdGNoID0gc2dyLmV4ZWMoaW5wdXQpXG4gIH1cblxuICBjb25zdCB0cmFpbGluZyA9IGlucHV0LnNsaWNlKGxhc3RJbmRleClcbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgY29uc3Qgc3R5bGUgPSBidWlsZFN0eWxlKHN0YXRlKVxuICAgIGlmIChzdHlsZSkge1xuICAgICAgcGFydHMucHVzaChgPHNwYW4gc3R5bGU9XCIke3N0eWxlfVwiPiR7ZXNjYXBlSHRtbCh0cmFpbGluZyl9PC9zcGFuPmApXG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRzLnB1c2goZXNjYXBlSHRtbCh0cmFpbGluZykpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oXCJcIilcbn1cblxuLyoqIFdhbGsgYSBtZGFzdCB0cmVlIGFuZCBjb252ZXJ0IGFuc2kgY29kZSBibG9ja3MgaW50byBBbnNpQ29kZSBKU1ggZWxlbWVudHMgKi9cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** The article whose body is rendering, for links relative to its file */
|
|
2
|
+
export declare const ArticleSourceContext: import("react").Context<{
|
|
3
|
+
file: string;
|
|
4
|
+
language: string;
|
|
5
|
+
} | undefined>;
|
|
6
|
+
/** An href as rendered outside a Livemark site, where no articles resolve: unchanged. */
|
|
7
|
+
export declare function useArticleHref(href: string | undefined): string | undefined;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createContext } from "react";
|
|
2
|
+
/** The article whose body is rendering, for links relative to its file */
|
|
3
|
+
export const ArticleSourceContext = createContext(undefined);
|
|
4
|
+
/** An href as rendered outside a Livemark site, where no articles resolve: unchanged. */
|
|
5
|
+
export function useArticleHref(href) {
|
|
6
|
+
return href;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS1saW5rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2hlbHBlcnMvYXJ0aWNsZS1saW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFFckMsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGFBQWEsQ0FFL0MsU0FBUyxDQUFDLENBQUE7QUFFWix5RkFBeUY7QUFDekYsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUF3QjtJQUNyRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInJlYWN0XCJcblxuLyoqIFRoZSBhcnRpY2xlIHdob3NlIGJvZHkgaXMgcmVuZGVyaW5nLCBmb3IgbGlua3MgcmVsYXRpdmUgdG8gaXRzIGZpbGUgKi9cbmV4cG9ydCBjb25zdCBBcnRpY2xlU291cmNlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8XG4gIHsgZmlsZTogc3RyaW5nOyBsYW5ndWFnZTogc3RyaW5nIH0gfCB1bmRlZmluZWRcbj4odW5kZWZpbmVkKVxuXG4vKiogQW4gaHJlZiBhcyByZW5kZXJlZCBvdXRzaWRlIGEgTGl2ZW1hcmsgc2l0ZSwgd2hlcmUgbm8gYXJ0aWNsZXMgcmVzb2x2ZTogdW5jaGFuZ2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFydGljbGVIcmVmKGhyZWY6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gaHJlZlxufVxuIl19
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const shortcuts = {
|
|
2
|
+
js: "javascript",
|
|
3
|
+
jsx: "react",
|
|
4
|
+
ts: "typescript",
|
|
5
|
+
tsx: "react",
|
|
6
|
+
py: "python",
|
|
7
|
+
bash: "shellscript",
|
|
8
|
+
sh: "shellscript",
|
|
9
|
+
shell: "shellscript",
|
|
10
|
+
zsh: "shellscript",
|
|
11
|
+
};
|
|
12
|
+
const icons = {
|
|
13
|
+
typescript: {
|
|
14
|
+
viewBox: "0 0 24 24",
|
|
15
|
+
fill: "currentColor",
|
|
16
|
+
d: "M1.125 0C.502 0 0 .502 0 1.125v21.75C0 23.498.502 24 1.125 24h21.75c.623 0 1.125-.502 1.125-1.125V1.125C24 .502 23.498 0 22.875 0zm17.363 9.75c.612 0 1.154.037 1.627.111a6.38 6.38 0 0 1 1.306.34v2.458a3.95 3.95 0 0 0-.643-.361 5.093 5.093 0 0 0-.717-.26 5.453 5.453 0 0 0-1.426-.2c-.3 0-.573.028-.819.086a2.1 2.1 0 0 0-.623.242c-.17.104-.3.229-.393.374a.888.888 0 0 0-.14.49c0 .196.053.373.156.529.104.156.252.304.443.444s.423.276.696.41c.273.135.582.274.926.416.47.197.892.407 1.266.628.374.222.695.473.963.753.268.279.472.598.614.957.142.359.214.776.214 1.253 0 .657-.125 1.21-.373 1.656a3.033 3.033 0 0 1-1.012 1.085 4.38 4.38 0 0 1-1.487.596c-.566.12-1.163.18-1.79.18a9.916 9.916 0 0 1-1.84-.164 5.544 5.544 0 0 1-1.512-.493v-2.63a5.033 5.033 0 0 0 3.237 1.2c.333 0 .624-.03.872-.09.249-.06.456-.144.623-.25.166-.108.29-.234.373-.38a1.023 1.023 0 0 0-.074-1.089 2.12 2.12 0 0 0-.537-.5 5.597 5.597 0 0 0-.807-.444 27.72 27.72 0 0 0-1.007-.436c-.918-.383-1.602-.852-2.053-1.405-.45-.553-.676-1.222-.676-2.005 0-.614.123-1.141.369-1.582.246-.441.58-.804 1.004-1.089a4.494 4.494 0 0 1 1.47-.629 7.536 7.536 0 0 1 1.77-.201zm-15.113.188h9.563v2.166H9.506v9.646H6.789v-9.646H3.375z",
|
|
17
|
+
},
|
|
18
|
+
javascript: {
|
|
19
|
+
viewBox: "0 0 24 24",
|
|
20
|
+
fill: "currentColor",
|
|
21
|
+
d: "M0 0h24v24H0V0zm22.034 18.276c-.175-1.095-.888-2.015-3.003-2.873-.736-.345-1.554-.585-1.797-1.14-.091-.33-.105-.51-.046-.705.15-.646.915-.84 1.515-.66.39.12.75.42.976.9 1.034-.676 1.034-.676 1.755-1.125-.27-.42-.405-.6-.586-.78-.63-.705-1.469-1.065-2.834-1.034l-.705.089c-.676.165-1.32.525-1.71 1.005-1.14 1.291-.811 3.541.569 4.471 1.365 1.02 3.361 1.244 3.616 2.205.24 1.17-.87 1.545-1.966 1.41-.811-.18-1.26-.586-1.755-1.336l-1.83 1.051c.21.48.45.689.81 1.109 1.74 1.756 6.09 1.666 6.871-1.004.029-.09.24-.705.074-1.65l.046.067zm-8.983-7.245h-2.248c0 1.938-.009 3.864-.009 5.805 0 1.232.063 2.363-.138 2.711-.33.689-1.18.601-1.566.48-.396-.196-.597-.466-.83-.855-.063-.105-.11-.196-.127-.196l-1.825 1.125c.305.63.75 1.172 1.324 1.517.855.51 2.004.675 3.207.405.783-.226 1.458-.691 1.811-1.411.51-.93.402-2.07.397-3.346.012-2.054 0-4.109 0-6.179l.004-.056z",
|
|
22
|
+
},
|
|
23
|
+
react: {
|
|
24
|
+
viewBox: "0 0 24 24",
|
|
25
|
+
fill: "currentColor",
|
|
26
|
+
d: "M14.23 12.004a2.236 2.236 0 0 1-2.235 2.236 2.236 2.236 0 0 1-2.236-2.236 2.236 2.236 0 0 1 2.235-2.236 2.236 2.236 0 0 1 2.236 2.236zm2.648-10.69c-1.346 0-3.107.96-4.888 2.622-1.78-1.653-3.542-2.602-4.887-2.602-.41 0-.783.093-1.106.278-1.375.793-1.683 3.264-.973 6.365C1.98 8.917 0 10.42 0 12.004c0 1.59 1.99 3.097 5.043 4.03-.704 3.113-.39 5.588.988 6.38.32.187.69.275 1.102.275 1.345 0 3.107-.96 4.888-2.624 1.78 1.654 3.542 2.603 4.887 2.603.41 0 .783-.09 1.106-.275 1.374-.792 1.683-3.263.973-6.365C22.02 15.096 24 13.59 24 12.004c0-1.59-1.99-3.097-5.043-4.032.704-3.11.39-5.587-.988-6.38-.318-.184-.688-.277-1.092-.278zm-.005 1.09v.006c.225 0 .406.044.558.127.666.382.955 1.835.73 3.704-.054.46-.142.945-.25 1.44-.96-.236-2.006-.417-3.107-.534-.66-.905-1.345-1.727-2.035-2.447 1.592-1.48 3.087-2.292 4.105-2.295zm-9.77.02c1.012 0 2.514.808 4.11 2.28-.686.72-1.37 1.537-2.02 2.442-1.107.117-2.154.298-3.113.538-.112-.49-.195-.964-.254-1.42-.23-1.868.054-3.32.714-3.707.19-.09.4-.127.563-.132zm4.882 3.05c.455.468.91.992 1.36 1.564-.44-.02-.89-.034-1.345-.034-.46 0-.915.01-1.36.034.44-.572.895-1.096 1.345-1.565zM12 8.1c.74 0 1.477.034 2.202.093.406.582.802 1.203 1.183 1.86.372.64.71 1.29 1.018 1.946-.308.655-.646 1.31-1.013 1.95-.38.66-.773 1.288-1.18 1.87-.728.063-1.466.098-2.21.098-.74 0-1.477-.035-2.202-.093-.406-.582-.802-1.204-1.183-1.86-.372-.64-.71-1.29-1.018-1.946.303-.657.646-1.313 1.013-1.954.38-.66.773-1.286 1.18-1.868.728-.064 1.466-.098 2.21-.098zm-3.635.254c-.24.377-.48.763-.704 1.16-.225.39-.435.782-.635 1.174-.265-.656-.49-1.31-.676-1.947.64-.15 1.315-.283 2.015-.386zm7.26 0c.695.103 1.365.23 2.006.387-.18.632-.405 1.282-.66 1.933-.2-.39-.41-.783-.64-1.174-.225-.392-.465-.774-.705-1.146zm3.063.675c.484.15.944.317 1.375.498 1.732.74 2.852 1.708 2.852 2.476-.005.768-1.125 1.74-2.857 2.475-.42.18-.88.342-1.355.493-.28-.958-.646-1.956-1.1-2.98.45-1.017.81-2.01 1.085-2.964zm-13.395.004c.278.96.645 1.957 1.1 2.98-.45 1.017-.812 2.01-1.086 2.964-.484-.15-.944-.318-1.37-.5-1.732-.737-2.852-1.706-2.852-2.474 0-.768 1.12-1.742 2.852-2.476.42-.18.88-.342 1.356-.494zm11.678 4.28c.265.657.49 1.312.676 1.948-.64.157-1.316.29-2.016.39.24-.375.48-.762.705-1.158.225-.39.435-.788.636-1.18zm-9.945.02c.2.392.41.783.64 1.175.23.39.465.772.705 1.143-.695-.102-1.365-.23-2.006-.386.18-.63.406-1.282.66-1.933zM17.92 16.32c.112.493.2.968.254 1.423.23 1.868-.054 3.32-.714 3.708-.147.09-.338.128-.563.128-1.012 0-2.514-.807-4.11-2.28.686-.72 1.37-1.536 2.02-2.44 1.107-.118 2.154-.3 3.113-.54zm-11.83.01c.96.234 2.006.415 3.107.532.66.905 1.345 1.727 2.035 2.446-1.595 1.483-3.092 2.295-4.11 2.295-.22-.005-.406-.05-.553-.132-.666-.38-.955-1.834-.73-3.703.054-.46.142-.944.25-1.438zm4.56.64c.44.02.89.034 1.345.034.46 0 .915-.01 1.36-.034-.44.572-.895 1.095-1.345 1.565-.455-.47-.91-.993-1.36-1.565z",
|
|
27
|
+
},
|
|
28
|
+
python: {
|
|
29
|
+
viewBox: "0 0 24 24",
|
|
30
|
+
fill: "currentColor",
|
|
31
|
+
d: "M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01H8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98l-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95l.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01zm-6.47 14.25l-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z",
|
|
32
|
+
},
|
|
33
|
+
rust: {
|
|
34
|
+
viewBox: "0 0 24 24",
|
|
35
|
+
fill: "currentColor",
|
|
36
|
+
d: "M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.4895-1.0761a.3438.3438 0 00-.3300-.4908l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.4233-.4164l-1.1592.2683a14.1794 14.1794 0 00-.2231-.1817l.0467-1.1872a.3462.3462 0 00-.5765-.322l-1.0907.4878c-.0799-.0499-.1613-.0983-.2449-.1456l-.1787-1.1758a.3456.3456 0 00-.5766-.2329l-.9813.6919a13.596 13.596 0 00-.2571-.1049l-.3982-1.1175a.348.348 0 00-.5815-.1272l-.8352.8738a10.2102 10.2102 0 00-.2606-.0584l-.6082-1.0131a.3459.3459 0 00-.5659-.0197l-.6602 1.0257a6.3249 6.3249 0 00-.2574.0068L8.3862.8721a.3437.3437 0 00-.5368.0921l-.4676 1.1376a10.3014 10.3014 0 00-.2444.0856L6.2788 1.394a.3447.3447 0 00-.4916.2004l-.2615 1.2048a11.5632 11.5632 0 00-.2242.149l-.9215-.5549a.3445.3445 0 00-.4345.2945l-.0488 1.2261a11.0239 11.0239 0 00-.1989.2028l-1.0498-.2744a.3441.3441 0 00-.3684.3752l.1643 1.2026c-.0553.075-.1084.1515-.1598.2293l-1.1374.0132a.3427.3427 0 00-.2938.4422l.3698 1.1347a10.4633 10.4633 0 00-.1162.2474l-1.1817.2923a.3433.3433 0 00-.2134.4944l.5627 1.0262c-.0265.085-.0502.1713-.0713.258l-1.1812.5586a.343.343 0 00-.1299.5316l.7396.8793a13.0102 13.0102 0 00-.0236.264l-1.1355.8086a.3445.3445 0 00-.0429.5513l.8937.6986a9.0776 9.0776 0 00.0235.2643L.3108 14.515a.3455.3455 0 00.0432.5508l1.0185.4941a14.4526 14.4526 0 00.0694.2602l-.6564.9682a.3443.3443 0 00.1273.5483l1.1066.2713c.0437.0833.0891.1653.136.2462l-.4348 1.0848a.3445.3445 0 00.2069.5304l1.1564.0436c.0583.0749.1182.1485.1797.2205l-.2004 1.1603a.348.348 0 00.2824.4902l1.1669-.1838c.0694.064.1404.1265.2127.1874l.0387 1.1912a.3476.3476 0 00.3498.4306l1.1388-.4038a7.4207 7.4207 0 00.2381.1482l.2723 1.1772a.3459.3459 0 00.4074.3543l1.0738-.6104c.084.0393.169.077.2553.113l.4964 1.1178a.3476.3476 0 00.4529.2643l.9744-.7985c.0873.0285.1757.0553.2649.0803l.707 1.015a.3475.3475 0 00.4827.165l.8435-.9633a8.7717 8.7717 0 00.267.0418l.8978.8715a.347.347 0 00.4959.0582l.6863-1.1004c.0877-.0039.1754-.0094.2631-.0166l1.0645.6907a.3478.3478 0 00.4921-.0466l.5043-1.2024c.0829-.0168.1657-.0349.2476-.0546l1.2024.478a.3444.3444 0 00.4721-.1462l.305-1.2685a9.4986 9.4986 0 00.2264-.0963l1.3088.241a.3462.3462 0 00.4373-.2383l.0931-1.2948a12.775 12.775 0 00.1996-.1384l1.3811-.0133a.3442.3442 0 00.3879-.3209l-.1204-1.2792a12.0697 12.0697 0 00.1677-.1767l1.4174-.2612a.3462.3462 0 00.3266-.3935l-.3286-1.222a13.5765 13.5765 0 00.1307-.2093l1.4154-.4985a.3454.3454 0 00.2558-.4536l-.5275-1.1259a8.7256 8.7256 0 00.0899-.2341l1.3741-.7219a.3439.3439 0 00.1787-.4993l-.7113-.9937a9.1373 9.1373 0 00.0449-.2543l1.2944-.9275a.3446.3446 0 00.0963-.5323zM12.0522 4.5705a.703.703 0 01.5765-.098c.3473.0982.6615.2679.9263.4973a.3873.3873 0 01-.5765.098c-.3473-.0982-.6615-.2679-.9263-.4973zm-3.2 7.5508c.2.0 .4-.0 .6-.0l.2 .6h-1l.2-.6zm4.5 2.7l-.4-.3.3-.4c-.3-.2-.7-.3-1.1-.3l-.1.5-.1-.5c-.4.0-.8.1-1.1.3l.3.4-.4.3c-.3-.3-.5-.6-.6-1l.5-.1-.5-.2c0-.4.1-.8.3-1.2l.4.3-.3-.4c.3-.3.6-.5 1-.6l.1.5.1-.5c.4.0.8.2 1.1.4l-.3.4.4-.3c.2.3.3.7.4 1.1l-.5.1.5.2c-.0.4-.2.8-.4 1.1zm3.3-2.1l-.6.0-.2-.6h1l-.2.6z",
|
|
37
|
+
},
|
|
38
|
+
shellscript: {
|
|
39
|
+
viewBox: "0 0 24 24",
|
|
40
|
+
fill: "currentColor",
|
|
41
|
+
d: "M4.814 0h14.371a2.813 2.813 0 0 1 2.814 2.814v18.371A2.813 2.813 0 0 1 19.186 24H4.814A2.813 2.813 0 0 1 2 21.186V2.814A2.813 2.813 0 0 1 4.814 0zM5.8 21.2h12.39v-1.6H5.8zm6.636-4.762L7.394 12.17l1.07-1.258 5.043 4.268zm-1.111-5.889 1.07-1.258 5.043 4.268-5.043 4.268-1.07-1.258 3.972-3.01z",
|
|
42
|
+
},
|
|
43
|
+
default: {
|
|
44
|
+
viewBox: "0 0 24 24",
|
|
45
|
+
fill: "currentColor",
|
|
46
|
+
d: "M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v 11 c 0,0.564129 -0.435871,1 -1,1 H 6 C 5.4358712,21 5,20.564129 5,20 V 4 C 5,3.4358712 5.4358712,3 6,3 Z M 15,3.4140625 18.585937,7 H 16 C 15.435871,7 15,6.5641288 15,6 Z",
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
/** The SVG icon of a code block's language, a file icon for one without its own */
|
|
50
|
+
export function readCodeIcon(lang) {
|
|
51
|
+
const name = lang && lang in shortcuts ? shortcuts[lang] : lang;
|
|
52
|
+
const icon = (name && icons[name]) || icons.default;
|
|
53
|
+
if (!icon)
|
|
54
|
+
return undefined;
|
|
55
|
+
return `<svg viewBox="${icon.viewBox}"><path d="${icon.d}" fill="${icon.fill}" /></svg>`;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1pY29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2hlbHBlcnMvY29kZS1pY29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sU0FBUyxHQUEyQjtJQUN4QyxFQUFFLEVBQUUsWUFBWTtJQUNoQixHQUFHLEVBQUUsT0FBTztJQUNaLEVBQUUsRUFBRSxZQUFZO0lBQ2hCLEdBQUcsRUFBRSxPQUFPO0lBQ1osRUFBRSxFQUFFLFFBQVE7SUFDWixJQUFJLEVBQUUsYUFBYTtJQUNuQixFQUFFLEVBQUUsYUFBYTtJQUNqQixLQUFLLEVBQUUsYUFBYTtJQUNwQixHQUFHLEVBQUUsYUFBYTtDQUNuQixDQUFBO0FBRUQsTUFBTSxLQUFLLEdBQXlCO0lBQ2xDLFVBQVUsRUFBRTtRQUNWLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLElBQUksRUFBRSxjQUFjO1FBQ3BCLENBQUMsRUFBRSw4cENBQThwQztLQUNscUM7SUFDRCxVQUFVLEVBQUU7UUFDVixPQUFPLEVBQUUsV0FBVztRQUNwQixJQUFJLEVBQUUsY0FBYztRQUNwQixDQUFDLEVBQUUsNDFCQUE0MUI7S0FDaDJCO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsT0FBTyxFQUFFLFdBQVc7UUFDcEIsSUFBSSxFQUFFLGNBQWM7UUFDcEIsQ0FBQyxFQUFFLG13RkFBbXdGO0tBQ3Z3RjtJQUNELE1BQU0sRUFBRTtRQUNOLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLElBQUksRUFBRSxjQUFjO1FBQ3BCLENBQUMsRUFBRSxrNENBQWs0QztLQUN0NEM7SUFDRCxJQUFJLEVBQUU7UUFDSixPQUFPLEVBQUUsV0FBVztRQUNwQixJQUFJLEVBQUUsY0FBYztRQUNwQixDQUFDLEVBQUUsOG9HQUE4b0c7S0FDbHBHO0lBQ0QsV0FBVyxFQUFFO1FBQ1gsT0FBTyxFQUFFLFdBQVc7UUFDcEIsSUFBSSxFQUFFLGNBQWM7UUFDcEIsQ0FBQyxFQUFFLG9TQUFvUztLQUN4UztJQUNELE9BQU8sRUFBRTtRQUNQLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLElBQUksRUFBRSxjQUFjO1FBQ3BCLENBQUMsRUFBRSw0WkFBNFo7S0FDaGE7Q0FDRixDQUFBO0FBRUQsbUZBQW1GO0FBQ25GLE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBd0I7SUFDbkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBQy9ELE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUE7SUFDbkQsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUMzQixPQUFPLGlCQUFpQixJQUFJLENBQUMsT0FBTyxjQUFjLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFBO0FBQzFGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIEljb24gPSB7IHZpZXdCb3g6IHN0cmluZzsgZmlsbDogc3RyaW5nOyBkOiBzdHJpbmcgfVxuXG5jb25zdCBzaG9ydGN1dHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIGpzOiBcImphdmFzY3JpcHRcIixcbiAganN4OiBcInJlYWN0XCIsXG4gIHRzOiBcInR5cGVzY3JpcHRcIixcbiAgdHN4OiBcInJlYWN0XCIsXG4gIHB5OiBcInB5dGhvblwiLFxuICBiYXNoOiBcInNoZWxsc2NyaXB0XCIsXG4gIHNoOiBcInNoZWxsc2NyaXB0XCIsXG4gIHNoZWxsOiBcInNoZWxsc2NyaXB0XCIsXG4gIHpzaDogXCJzaGVsbHNjcmlwdFwiLFxufVxuXG5jb25zdCBpY29uczogUmVjb3JkPHN0cmluZywgSWNvbj4gPSB7XG4gIHR5cGVzY3JpcHQ6IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZDogXCJNMS4xMjUgMEMuNTAyIDAgMCAuNTAyIDAgMS4xMjV2MjEuNzVDMCAyMy40OTguNTAyIDI0IDEuMTI1IDI0aDIxLjc1Yy42MjMgMCAxLjEyNS0uNTAyIDEuMTI1LTEuMTI1VjEuMTI1QzI0IC41MDIgMjMuNDk4IDAgMjIuODc1IDB6bTE3LjM2MyA5Ljc1Yy42MTIgMCAxLjE1NC4wMzcgMS42MjcuMTExYTYuMzggNi4zOCAwIDAgMSAxLjMwNi4zNHYyLjQ1OGEzLjk1IDMuOTUgMCAwIDAtLjY0My0uMzYxIDUuMDkzIDUuMDkzIDAgMCAwLS43MTctLjI2IDUuNDUzIDUuNDUzIDAgMCAwLTEuNDI2LS4yYy0uMyAwLS41NzMuMDI4LS44MTkuMDg2YTIuMSAyLjEgMCAwIDAtLjYyMy4yNDJjLS4xNy4xMDQtLjMuMjI5LS4zOTMuMzc0YS44ODguODg4IDAgMCAwLS4xNC40OWMwIC4xOTYuMDUzLjM3My4xNTYuNTI5LjEwNC4xNTYuMjUyLjMwNC40NDMuNDQ0cy40MjMuMjc2LjY5Ni40MWMuMjczLjEzNS41ODIuMjc0LjkyNi40MTYuNDcuMTk3Ljg5Mi40MDcgMS4yNjYuNjI4LjM3NC4yMjIuNjk1LjQ3My45NjMuNzUzLjI2OC4yNzkuNDcyLjU5OC42MTQuOTU3LjE0Mi4zNTkuMjE0Ljc3Ni4yMTQgMS4yNTMgMCAuNjU3LS4xMjUgMS4yMS0uMzczIDEuNjU2YTMuMDMzIDMuMDMzIDAgMCAxLTEuMDEyIDEuMDg1IDQuMzggNC4zOCAwIDAgMS0xLjQ4Ny41OTZjLS41NjYuMTItMS4xNjMuMTgtMS43OS4xOGE5LjkxNiA5LjkxNiAwIDAgMS0xLjg0LS4xNjQgNS41NDQgNS41NDQgMCAwIDEtMS41MTItLjQ5M3YtMi42M2E1LjAzMyA1LjAzMyAwIDAgMCAzLjIzNyAxLjJjLjMzMyAwIC42MjQtLjAzLjg3Mi0uMDkuMjQ5LS4wNi40NTYtLjE0NC42MjMtLjI1LjE2Ni0uMTA4LjI5LS4yMzQuMzczLS4zOGExLjAyMyAxLjAyMyAwIDAgMC0uMDc0LTEuMDg5IDIuMTIgMi4xMiAwIDAgMC0uNTM3LS41IDUuNTk3IDUuNTk3IDAgMCAwLS44MDctLjQ0NCAyNy43MiAyNy43MiAwIDAgMC0xLjAwNy0uNDM2Yy0uOTE4LS4zODMtMS42MDItLjg1Mi0yLjA1My0xLjQwNS0uNDUtLjU1My0uNjc2LTEuMjIyLS42NzYtMi4wMDUgMC0uNjE0LjEyMy0xLjE0MS4zNjktMS41ODIuMjQ2LS40NDEuNTgtLjgwNCAxLjAwNC0xLjA4OWE0LjQ5NCA0LjQ5NCAwIDAgMSAxLjQ3LS42MjkgNy41MzYgNy41MzYgMCAwIDEgMS43Ny0uMjAxem0tMTUuMTEzLjE4OGg5LjU2M3YyLjE2Nkg5LjUwNnY5LjY0Nkg2Ljc4OXYtOS42NDZIMy4zNzV6XCIsXG4gIH0sXG4gIGphdmFzY3JpcHQ6IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZDogXCJNMCAwaDI0djI0SDBWMHptMjIuMDM0IDE4LjI3NmMtLjE3NS0xLjA5NS0uODg4LTIuMDE1LTMuMDAzLTIuODczLS43MzYtLjM0NS0xLjU1NC0uNTg1LTEuNzk3LTEuMTQtLjA5MS0uMzMtLjEwNS0uNTEtLjA0Ni0uNzA1LjE1LS42NDYuOTE1LS44NCAxLjUxNS0uNjYuMzkuMTIuNzUuNDIuOTc2LjkgMS4wMzQtLjY3NiAxLjAzNC0uNjc2IDEuNzU1LTEuMTI1LS4yNy0uNDItLjQwNS0uNi0uNTg2LS43OC0uNjMtLjcwNS0xLjQ2OS0xLjA2NS0yLjgzNC0xLjAzNGwtLjcwNS4wODljLS42NzYuMTY1LTEuMzIuNTI1LTEuNzEgMS4wMDUtMS4xNCAxLjI5MS0uODExIDMuNTQxLjU2OSA0LjQ3MSAxLjM2NSAxLjAyIDMuMzYxIDEuMjQ0IDMuNjE2IDIuMjA1LjI0IDEuMTctLjg3IDEuNTQ1LTEuOTY2IDEuNDEtLjgxMS0uMTgtMS4yNi0uNTg2LTEuNzU1LTEuMzM2bC0xLjgzIDEuMDUxYy4yMS40OC40NS42ODkuODEgMS4xMDkgMS43NCAxLjc1NiA2LjA5IDEuNjY2IDYuODcxLTEuMDA0LjAyOS0uMDkuMjQtLjcwNS4wNzQtMS42NWwuMDQ2LjA2N3ptLTguOTgzLTcuMjQ1aC0yLjI0OGMwIDEuOTM4LS4wMDkgMy44NjQtLjAwOSA1LjgwNSAwIDEuMjMyLjA2MyAyLjM2My0uMTM4IDIuNzExLS4zMy42ODktMS4xOC42MDEtMS41NjYuNDgtLjM5Ni0uMTk2LS41OTctLjQ2Ni0uODMtLjg1NS0uMDYzLS4xMDUtLjExLS4xOTYtLjEyNy0uMTk2bC0xLjgyNSAxLjEyNWMuMzA1LjYzLjc1IDEuMTcyIDEuMzI0IDEuNTE3Ljg1NS41MSAyLjAwNC42NzUgMy4yMDcuNDA1Ljc4My0uMjI2IDEuNDU4LS42OTEgMS44MTEtMS40MTEuNTEtLjkzLjQwMi0yLjA3LjM5Ny0zLjM0Ni4wMTItMi4wNTQgMC00LjEwOSAwLTYuMTc5bC4wMDQtLjA1NnpcIixcbiAgfSxcbiAgcmVhY3Q6IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZDogXCJNMTQuMjMgMTIuMDA0YTIuMjM2IDIuMjM2IDAgMCAxLTIuMjM1IDIuMjM2IDIuMjM2IDIuMjM2IDAgMCAxLTIuMjM2LTIuMjM2IDIuMjM2IDIuMjM2IDAgMCAxIDIuMjM1LTIuMjM2IDIuMjM2IDIuMjM2IDAgMCAxIDIuMjM2IDIuMjM2em0yLjY0OC0xMC42OWMtMS4zNDYgMC0zLjEwNy45Ni00Ljg4OCAyLjYyMi0xLjc4LTEuNjUzLTMuNTQyLTIuNjAyLTQuODg3LTIuNjAyLS40MSAwLS43ODMuMDkzLTEuMTA2LjI3OC0xLjM3NS43OTMtMS42ODMgMy4yNjQtLjk3MyA2LjM2NUMxLjk4IDguOTE3IDAgMTAuNDIgMCAxMi4wMDRjMCAxLjU5IDEuOTkgMy4wOTcgNS4wNDMgNC4wMy0uNzA0IDMuMTEzLS4zOSA1LjU4OC45ODggNi4zOC4zMi4xODcuNjkuMjc1IDEuMTAyLjI3NSAxLjM0NSAwIDMuMTA3LS45NiA0Ljg4OC0yLjYyNCAxLjc4IDEuNjU0IDMuNTQyIDIuNjAzIDQuODg3IDIuNjAzLjQxIDAgLjc4My0uMDkgMS4xMDYtLjI3NSAxLjM3NC0uNzkyIDEuNjgzLTMuMjYzLjk3My02LjM2NUMyMi4wMiAxNS4wOTYgMjQgMTMuNTkgMjQgMTIuMDA0YzAtMS41OS0xLjk5LTMuMDk3LTUuMDQzLTQuMDMyLjcwNC0zLjExLjM5LTUuNTg3LS45ODgtNi4zOC0uMzE4LS4xODQtLjY4OC0uMjc3LTEuMDkyLS4yNzh6bS0uMDA1IDEuMDl2LjAwNmMuMjI1IDAgLjQwNi4wNDQuNTU4LjEyNy42NjYuMzgyLjk1NSAxLjgzNS43MyAzLjcwNC0uMDU0LjQ2LS4xNDIuOTQ1LS4yNSAxLjQ0LS45Ni0uMjM2LTIuMDA2LS40MTctMy4xMDctLjUzNC0uNjYtLjkwNS0xLjM0NS0xLjcyNy0yLjAzNS0yLjQ0NyAxLjU5Mi0xLjQ4IDMuMDg3LTIuMjkyIDQuMTA1LTIuMjk1em0tOS43Ny4wMmMxLjAxMiAwIDIuNTE0LjgwOCA0LjExIDIuMjgtLjY4Ni43Mi0xLjM3IDEuNTM3LTIuMDIgMi40NDItMS4xMDcuMTE3LTIuMTU0LjI5OC0zLjExMy41MzgtLjExMi0uNDktLjE5NS0uOTY0LS4yNTQtMS40Mi0uMjMtMS44NjguMDU0LTMuMzIuNzE0LTMuNzA3LjE5LS4wOS40LS4xMjcuNTYzLS4xMzJ6bTQuODgyIDMuMDVjLjQ1NS40NjguOTEuOTkyIDEuMzYgMS41NjQtLjQ0LS4wMi0uODktLjAzNC0xLjM0NS0uMDM0LS40NiAwLS45MTUuMDEtMS4zNi4wMzQuNDQtLjU3Mi44OTUtMS4wOTYgMS4zNDUtMS41NjV6TTEyIDguMWMuNzQgMCAxLjQ3Ny4wMzQgMi4yMDIuMDkzLjQwNi41ODIuODAyIDEuMjAzIDEuMTgzIDEuODYuMzcyLjY0LjcxIDEuMjkgMS4wMTggMS45NDYtLjMwOC42NTUtLjY0NiAxLjMxLTEuMDEzIDEuOTUtLjM4LjY2LS43NzMgMS4yODgtMS4xOCAxLjg3LS43MjguMDYzLTEuNDY2LjA5OC0yLjIxLjA5OC0uNzQgMC0xLjQ3Ny0uMDM1LTIuMjAyLS4wOTMtLjQwNi0uNTgyLS44MDItMS4yMDQtMS4xODMtMS44Ni0uMzcyLS42NC0uNzEtMS4yOS0xLjAxOC0xLjk0Ni4zMDMtLjY1Ny42NDYtMS4zMTMgMS4wMTMtMS45NTQuMzgtLjY2Ljc3My0xLjI4NiAxLjE4LTEuODY4LjcyOC0uMDY0IDEuNDY2LS4wOTggMi4yMS0uMDk4em0tMy42MzUuMjU0Yy0uMjQuMzc3LS40OC43NjMtLjcwNCAxLjE2LS4yMjUuMzktLjQzNS43ODItLjYzNSAxLjE3NC0uMjY1LS42NTYtLjQ5LTEuMzEtLjY3Ni0xLjk0Ny42NC0uMTUgMS4zMTUtLjI4MyAyLjAxNS0uMzg2em03LjI2IDBjLjY5NS4xMDMgMS4zNjUuMjMgMi4wMDYuMzg3LS4xOC42MzItLjQwNSAxLjI4Mi0uNjYgMS45MzMtLjItLjM5LS40MS0uNzgzLS42NC0xLjE3NC0uMjI1LS4zOTItLjQ2NS0uNzc0LS43MDUtMS4xNDZ6bTMuMDYzLjY3NWMuNDg0LjE1Ljk0NC4zMTcgMS4zNzUuNDk4IDEuNzMyLjc0IDIuODUyIDEuNzA4IDIuODUyIDIuNDc2LS4wMDUuNzY4LTEuMTI1IDEuNzQtMi44NTcgMi40NzUtLjQyLjE4LS44OC4zNDItMS4zNTUuNDkzLS4yOC0uOTU4LS42NDYtMS45NTYtMS4xLTIuOTguNDUtMS4wMTcuODEtMi4wMSAxLjA4NS0yLjk2NHptLTEzLjM5NS4wMDRjLjI3OC45Ni42NDUgMS45NTcgMS4xIDIuOTgtLjQ1IDEuMDE3LS44MTIgMi4wMS0xLjA4NiAyLjk2NC0uNDg0LS4xNS0uOTQ0LS4zMTgtMS4zNy0uNS0xLjczMi0uNzM3LTIuODUyLTEuNzA2LTIuODUyLTIuNDc0IDAtLjc2OCAxLjEyLTEuNzQyIDIuODUyLTIuNDc2LjQyLS4xOC44OC0uMzQyIDEuMzU2LS40OTR6bTExLjY3OCA0LjI4Yy4yNjUuNjU3LjQ5IDEuMzEyLjY3NiAxLjk0OC0uNjQuMTU3LTEuMzE2LjI5LTIuMDE2LjM5LjI0LS4zNzUuNDgtLjc2Mi43MDUtMS4xNTguMjI1LS4zOS40MzUtLjc4OC42MzYtMS4xOHptLTkuOTQ1LjAyYy4yLjM5Mi40MS43ODMuNjQgMS4xNzUuMjMuMzkuNDY1Ljc3Mi43MDUgMS4xNDMtLjY5NS0uMTAyLTEuMzY1LS4yMy0yLjAwNi0uMzg2LjE4LS42My40MDYtMS4yODIuNjYtMS45MzN6TTE3LjkyIDE2LjMyYy4xMTIuNDkzLjIuOTY4LjI1NCAxLjQyMy4yMyAxLjg2OC0uMDU0IDMuMzItLjcxNCAzLjcwOC0uMTQ3LjA5LS4zMzguMTI4LS41NjMuMTI4LTEuMDEyIDAtMi41MTQtLjgwNy00LjExLTIuMjguNjg2LS43MiAxLjM3LTEuNTM2IDIuMDItMi40NCAxLjEwNy0uMTE4IDIuMTU0LS4zIDMuMTEzLS41NHptLTExLjgzLjAxYy45Ni4yMzQgMi4wMDYuNDE1IDMuMTA3LjUzMi42Ni45MDUgMS4zNDUgMS43MjcgMi4wMzUgMi40NDYtMS41OTUgMS40ODMtMy4wOTIgMi4yOTUtNC4xMSAyLjI5NS0uMjItLjAwNS0uNDA2LS4wNS0uNTUzLS4xMzItLjY2Ni0uMzgtLjk1NS0xLjgzNC0uNzMtMy43MDMuMDU0LS40Ni4xNDItLjk0NC4yNS0xLjQzOHptNC41Ni42NGMuNDQuMDIuODkuMDM0IDEuMzQ1LjAzNC40NiAwIC45MTUtLjAxIDEuMzYtLjAzNC0uNDQuNTcyLS44OTUgMS4wOTUtMS4zNDUgMS41NjUtLjQ1NS0uNDctLjkxLS45OTMtMS4zNi0xLjU2NXpcIixcbiAgfSxcbiAgcHl0aG9uOiB7XG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGQ6IFwiTTE0LjI1LjE4bC45LjIuNzMuMjYuNTkuMy40NS4zMi4zNC4zNC4yNS4zNC4xNi4zMy4xLjMuMDQuMjYuMDIuMi0uMDEuMTNWOC41bC0uMDUuNjMtLjEzLjU1LS4yMS40Ni0uMjYuMzgtLjMuMzEtLjMzLjI1LS4zNS4xOS0uMzUuMTQtLjMzLjEtLjMuMDctLjI2LjA0LS4yMS4wMkg4Ljc3bC0uNjkuMDUtLjU5LjE0LS41LjIyLS40MS4yNy0uMzMuMzItLjI3LjM1LS4yLjM2LS4xNS4zNy0uMS4zNS0uMDcuMzItLjA0LjI3LS4wMi4yMXYzLjA2SDMuMTdsLS4yMS0uMDMtLjI4LS4wNy0uMzItLjEyLS4zNS0uMTgtLjM2LS4yNi0uMzYtLjM2LS4zNS0uNDYtLjMyLS41OS0uMjgtLjczLS4yMS0uODgtLjE0LTEuMDUtLjA1LTEuMjMuMDYtMS4yMi4xNi0xLjA0LjI0LS44Ny4zMi0uNzEuMzYtLjU3LjQtLjQ0LjQyLS4zMy40Mi0uMjQuNC0uMTYuMzYtLjEuMzItLjA1LjI0LS4wMWguMTZsLjA2LjAxSDguMTZ2LS44M0g2LjE4bC0uMDEtMi43NS0uMDItLjM3LjA1LS4zNC4xMS0uMzEuMTctLjI4LjI1LS4yNi4zMS0uMjMuMzgtLjIuNDQtLjE4LjUxLS4xNS41OC0uMTIuNjQtLjEuNzEtLjA2Ljc3LS4wNC44NC0uMDIgMS4yNy4wNXptLTYuMyAxLjk4bC0uMjMuMzMtLjA4LjQxLjA4LjQxLjIzLjM0LjMzLjIyLjQxLjA5LjQxLS4wOS4zMy0uMjIuMjMtLjM0LjA4LS40MS0uMDgtLjQxLS4yMy0uMzMtLjMzLS4yMi0uNDEtLjA5LS40MS4wOXptMTMuMDkgMy45NWwuMjguMDYuMzIuMTIuMzUuMTguMzYuMjcuMzYuMzUuMzUuNDcuMzIuNTkuMjguNzMuMjEuODguMTQgMS4wNC4wNSAxLjIzLS4wNiAxLjIzLS4xNiAxLjA0LS4yNC44Ni0uMzIuNzEtLjM2LjU3LS40LjQ1LS40Mi4zMy0uNDIuMjQtLjQuMTYtLjM2LjA5LS4zMi4wNS0uMjQuMDItLjE2LS4wMWgtOC4yMnYuODJoNS44NGwuMDEgMi43Ni4wMi4zNi0uMDUuMzQtLjExLjMxLS4xNy4yOS0uMjUuMjUtLjMxLjI0LS4zOC4yLS40NC4xNy0uNTEuMTUtLjU4LjEzLS42NC4wOS0uNzEuMDctLjc3LjA0LS44NC4wMS0xLjI3LS4wNC0xLjA3LS4xNC0uOS0uMi0uNzMtLjI1LS41OS0uMy0uNDUtLjMzLS4zNC0uMzQtLjI1LS4zNC0uMTYtLjMzLS4xLS4zLS4wNC0uMjUtLjAyLS4yLjAxLS4xM3YtNS4zNGwuMDUtLjY0LjEzLS41NC4yMS0uNDYuMjYtLjM4LjMtLjMyLjMzLS4yNC4zNS0uMi4zNS0uMTQuMzMtLjEuMy0uMDYuMjYtLjA0LjIxLS4wMi4xMy0uMDFoNS44NGwuNjktLjA1LjU5LS4xNC41LS4yMS40MS0uMjguMzMtLjMyLjI3LS4zNS4yLS4zNi4xNS0uMzYuMS0uMzUuMDctLjMyLjA0LS4yOC4wMi0uMjFWNi4wN2gyLjA5bC4xNC4wMXptLTYuNDcgMTQuMjVsLS4yMy4zMy0uMDguNDEuMDguNDEuMjMuMzMuMzMuMjMuNDEuMDguNDEtLjA4LjMzLS4yMy4yMy0uMzMuMDgtLjQxLS4wOC0uNDEtLjIzLS4zMy0uMzMtLjIzLS40MS0uMDgtLjQxLjA4elwiLFxuICB9LFxuICBydXN0OiB7XG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGQ6IFwiTTIzLjgzNDYgMTEuNzAzM2wtMS4wMDczLS42MjM2YTEzLjcyNjggMTMuNzI2OCAwIDAwLS4wMjgzLS4yOTM2bC44NjU2LS44MDY5YS4zNDgzLjM0ODMgMCAwMC0uMTE1NC0uNTc4bC0xLjEwNjYtLjQxNGE4LjQ5NTggOC40OTU4IDAgMDAtLjA4Ny0uMjg1NmwuNjkwNC0uOTU4N2EuMzQ2Mi4zNDYyIDAgMDAtLjIyNTctLjU0NDZsLTEuMTY2My0uMTg5NGE5LjM1NzQgOS4zNTc0IDAgMDAtLjE0MDctLjI2MjJsLjQ4OTUtMS4wNzYxYS4zNDM4LjM0MzggMCAwMC0uMzMwMC0uNDkwOGwtMS4xODQ1LjA0MTZhNi43NDQ0IDYuNzQ0NCAwIDAwLS4xODczLS4yMjY4bC4yNzIzLTEuMTUzYS4zNDcyLjM0NzIgMCAwMC0uNDIzMy0uNDE2NGwtMS4xNTkyLjI2ODNhMTQuMTc5NCAxNC4xNzk0IDAgMDAtLjIyMzEtLjE4MTdsLjA0NjctMS4xODcyYS4zNDYyLjM0NjIgMCAwMC0uNTc2NS0uMzIybC0xLjA5MDcuNDg3OGMtLjA3OTktLjA0OTktLjE2MTMtLjA5ODMtLjI0NDktLjE0NTZsLS4xNzg3LTEuMTc1OGEuMzQ1Ni4zNDU2IDAgMDAtLjU3NjYtLjIzMjlsLS45ODEzLjY5MTlhMTMuNTk2IDEzLjU5NiAwIDAwLS4yNTcxLS4xMDQ5bC0uMzk4Mi0xLjExNzVhLjM0OC4zNDggMCAwMC0uNTgxNS0uMTI3MmwtLjgzNTIuODczOGExMC4yMTAyIDEwLjIxMDIgMCAwMC0uMjYwNi0uMDU4NGwtLjYwODItMS4wMTMxYS4zNDU5LjM0NTkgMCAwMC0uNTY1OS0uMDE5N2wtLjY2MDIgMS4wMjU3YTYuMzI0OSA2LjMyNDkgMCAwMC0uMjU3NC4wMDY4TDguMzg2Mi44NzIxYS4zNDM3LjM0MzcgMCAwMC0uNTM2OC4wOTIxbC0uNDY3NiAxLjEzNzZhMTAuMzAxNCAxMC4zMDE0IDAgMDAtLjI0NDQuMDg1Nkw2LjI3ODggMS4zOTRhLjM0NDcuMzQ0NyAwIDAwLS40OTE2LjIwMDRsLS4yNjE1IDEuMjA0OGExMS41NjMyIDExLjU2MzIgMCAwMC0uMjI0Mi4xNDlsLS45MjE1LS41NTQ5YS4zNDQ1LjM0NDUgMCAwMC0uNDM0NS4yOTQ1bC0uMDQ4OCAxLjIyNjFhMTEuMDIzOSAxMS4wMjM5IDAgMDAtLjE5ODkuMjAyOGwtMS4wNDk4LS4yNzQ0YS4zNDQxLjM0NDEgMCAwMC0uMzY4NC4zNzUybC4xNjQzIDEuMjAyNmMtLjA1NTMuMDc1LS4xMDg0LjE1MTUtLjE1OTguMjI5M2wtMS4xMzc0LjAxMzJhLjM0MjcuMzQyNyAwIDAwLS4yOTM4LjQ0MjJsLjM2OTggMS4xMzQ3YTEwLjQ2MzMgMTAuNDYzMyAwIDAwLS4xMTYyLjI0NzRsLTEuMTgxNy4yOTIzYS4zNDMzLjM0MzMgMCAwMC0uMjEzNC40OTQ0bC41NjI3IDEuMDI2MmMtLjAyNjUuMDg1LS4wNTAyLjE3MTMtLjA3MTMuMjU4bC0xLjE4MTIuNTU4NmEuMzQzLjM0MyAwIDAwLS4xMjk5LjUzMTZsLjczOTYuODc5M2ExMy4wMTAyIDEzLjAxMDIgMCAwMC0uMDIzNi4yNjRsLTEuMTM1NS44MDg2YS4zNDQ1LjM0NDUgMCAwMC0uMDQyOS41NTEzbC44OTM3LjY5ODZhOS4wNzc2IDkuMDc3NiAwIDAwLjAyMzUuMjY0M0wuMzEwOCAxNC41MTVhLjM0NTUuMzQ1NSAwIDAwLjA0MzIuNTUwOGwxLjAxODUuNDk0MWExNC40NTI2IDE0LjQ1MjYgMCAwMC4wNjk0LjI2MDJsLS42NTY0Ljk2ODJhLjM0NDMuMzQ0MyAwIDAwLjEyNzMuNTQ4M2wxLjEwNjYuMjcxM2MuMDQzNy4wODMzLjA4OTEuMTY1My4xMzYuMjQ2MmwtLjQzNDggMS4wODQ4YS4zNDQ1LjM0NDUgMCAwMC4yMDY5LjUzMDRsMS4xNTY0LjA0MzZjLjA1ODMuMDc0OS4xMTgyLjE0ODUuMTc5Ny4yMjA1bC0uMjAwNCAxLjE2MDNhLjM0OC4zNDggMCAwMC4yODI0LjQ5MDJsMS4xNjY5LS4xODM4Yy4wNjk0LjA2NC4xNDA0LjEyNjUuMjEyNy4xODc0bC4wMzg3IDEuMTkxMmEuMzQ3Ni4zNDc2IDAgMDAuMzQ5OC40MzA2bDEuMTM4OC0uNDAzOGE3LjQyMDcgNy40MjA3IDAgMDAuMjM4MS4xNDgybC4yNzIzIDEuMTc3MmEuMzQ1OS4zNDU5IDAgMDAuNDA3NC4zNTQzbDEuMDczOC0uNjEwNGMuMDg0LjAzOTMuMTY5LjA3Ny4yNTUzLjExM2wuNDk2NCAxLjExNzhhLjM0NzYuMzQ3NiAwIDAwLjQ1MjkuMjY0M2wuOTc0NC0uNzk4NWMuMDg3My4wMjg1LjE3NTcuMDU1My4yNjQ5LjA4MDNsLjcwNyAxLjAxNWEuMzQ3NS4zNDc1IDAgMDAuNDgyNy4xNjVsLjg0MzUtLjk2MzNhOC43NzE3IDguNzcxNyAwIDAwLjI2Ny4wNDE4bC44OTc4Ljg3MTVhLjM0Ny4zNDcgMCAwMC40OTU5LjA1ODJsLjY4NjMtMS4xMDA0Yy4wODc3LS4wMDM5LjE3NTQtLjAwOTQuMjYzMS0uMDE2NmwxLjA2NDUuNjkwN2EuMzQ3OC4zNDc4IDAgMDAuNDkyMS0uMDQ2NmwuNTA0My0xLjIwMjRjLjA4MjktLjAxNjguMTY1Ny0uMDM0OS4yNDc2LS4wNTQ2bDEuMjAyNC40NzhhLjM0NDQuMzQ0NCAwIDAwLjQ3MjEtLjE0NjJsLjMwNS0xLjI2ODVhOS40OTg2IDkuNDk4NiAwIDAwLjIyNjQtLjA5NjNsMS4zMDg4LjI0MWEuMzQ2Mi4zNDYyIDAgMDAuNDM3My0uMjM4M2wuMDkzMS0xLjI5NDhhMTIuNzc1IDEyLjc3NSAwIDAwLjE5OTYtLjEzODRsMS4zODExLS4wMTMzYS4zNDQyLjM0NDIgMCAwMC4zODc5LS4zMjA5bC0uMTIwNC0xLjI3OTJhMTIuMDY5NyAxMi4wNjk3IDAgMDAuMTY3Ny0uMTc2N2wxLjQxNzQtLjI2MTJhLjM0NjIuMzQ2MiAwIDAwLjMyNjYtLjM5MzVsLS4zMjg2LTEuMjIyYTEzLjU3NjUgMTMuNTc2NSAwIDAwLjEzMDctLjIwOTNsMS40MTU0LS40OTg1YS4zNDU0LjM0NTQgMCAwMC4yNTU4LS40NTM2bC0uNTI3NS0xLjEyNTlhOC43MjU2IDguNzI1NiAwIDAwLjA4OTktLjIzNDFsMS4zNzQxLS43MjE5YS4zNDM5LjM0MzkgMCAwMC4xNzg3LS40OTkzbC0uNzExMy0uOTkzN2E5LjEzNzMgOS4xMzczIDAgMDAuMDQ0OS0uMjU0M2wxLjI5NDQtLjkyNzVhLjM0NDYuMzQ0NiAwIDAwLjA5NjMtLjUzMjN6TTEyLjA1MjIgNC41NzA1YS43MDMuNzAzIDAgMDEuNTc2NS0uMDk4Yy4zNDczLjA5ODIuNjYxNS4yNjc5LjkyNjMuNDk3M2EuMzg3My4zODczIDAgMDEtLjU3NjUuMDk4Yy0uMzQ3My0uMDk4Mi0uNjYxNS0uMjY3OS0uOTI2My0uNDk3M3ptLTMuMiA3LjU1MDhjLjIuMCAuNC0uMCAuNi0uMGwuMiAuNmgtMWwuMi0uNnptNC41IDIuN2wtLjQtLjMuMy0uNGMtLjMtLjItLjctLjMtMS4xLS4zbC0uMS41LS4xLS41Yy0uNC4wLS44LjEtMS4xLjNsLjMuNC0uNC4zYy0uMy0uMy0uNS0uNi0uNi0xbC41LS4xLS41LS4yYzAtLjQuMS0uOC4zLTEuMmwuNC4zLS4zLS40Yy4zLS4zLjYtLjUgMS0uNmwuMS41LjEtLjVjLjQuMC44LjIgMS4xLjRsLS4zLjQuNC0uM2MuMi4zLjMuNy40IDEuMWwtLjUuMS41LjJjLS4wLjQtLjIuOC0uNCAxLjF6bTMuMy0yLjFsLS42LjAtLjItLjZoMWwtLjIuNnpcIixcbiAgfSxcbiAgc2hlbGxzY3JpcHQ6IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZDogXCJNNC44MTQgMGgxNC4zNzFhMi44MTMgMi44MTMgMCAwIDEgMi44MTQgMi44MTR2MTguMzcxQTIuODEzIDIuODEzIDAgMCAxIDE5LjE4NiAyNEg0LjgxNEEyLjgxMyAyLjgxMyAwIDAgMSAyIDIxLjE4NlYyLjgxNEEyLjgxMyAyLjgxMyAwIDAgMSA0LjgxNCAwek01LjggMjEuMmgxMi4zOXYtMS42SDUuOHptNi42MzYtNC43NjJMNy4zOTQgMTIuMTdsMS4wNy0xLjI1OCA1LjA0MyA0LjI2OHptLTEuMTExLTUuODg5IDEuMDctMS4yNTggNS4wNDMgNC4yNjgtNS4wNDMgNC4yNjgtMS4wNy0xLjI1OCAzLjk3Mi0zLjAxelwiLFxuICB9LFxuICBkZWZhdWx0OiB7XG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIGQ6IFwiTSA2LDEgQyA0LjM1NDk5MiwxIDMsMi4zNTQ5OTIgMyw0IHYgMTYgYyAwLDEuNjQ1MDA4IDEuMzU0OTkyLDMgMywzIGggMTIgYyAxLjY0NTAwOCwwIDMsLTEuMzU0OTkyIDMsLTMgViA4IDcgQSAxLjAwMDEsMS4wMDAxIDAgMCAwIDIwLjcwNzAzMSw2LjI5Mjk2ODcgbCAtNSwtNSBBIDEuMDAwMSwxLjAwMDEgMCAwIDAgMTUsMSBoIC0xIHogbSAwLDIgaCA3IHYgMyBjIDAsMS42NDUwMDggMS4zNTQ5OTIsMyAzLDMgaCAzIHYgMTEgYyAwLDAuNTY0MTI5IC0wLjQzNTg3MSwxIC0xLDEgSCA2IEMgNS40MzU4NzEyLDIxIDUsMjAuNTY0MTI5IDUsMjAgViA0IEMgNSwzLjQzNTg3MTIgNS40MzU4NzEyLDMgNiwzIFogTSAxNSwzLjQxNDA2MjUgMTguNTg1OTM3LDcgSCAxNiBDIDE1LjQzNTg3MSw3IDE1LDYuNTY0MTI4OCAxNSw2IFpcIixcbiAgfSxcbn1cblxuLyoqIFRoZSBTVkcgaWNvbiBvZiBhIGNvZGUgYmxvY2sncyBsYW5ndWFnZSwgYSBmaWxlIGljb24gZm9yIG9uZSB3aXRob3V0IGl0cyBvd24gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ29kZUljb24obGFuZzogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIGNvbnN0IG5hbWUgPSBsYW5nICYmIGxhbmcgaW4gc2hvcnRjdXRzID8gc2hvcnRjdXRzW2xhbmddIDogbGFuZ1xuICBjb25zdCBpY29uID0gKG5hbWUgJiYgaWNvbnNbbmFtZV0pIHx8IGljb25zLmRlZmF1bHRcbiAgaWYgKCFpY29uKSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiBgPHN2ZyB2aWV3Qm94PVwiJHtpY29uLnZpZXdCb3h9XCI+PHBhdGggZD1cIiR7aWNvbi5kfVwiIGZpbGw9XCIke2ljb24uZmlsbH1cIiAvPjwvc3ZnPmBcbn1cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** What in an article's Markdown renders silently wrong, by file line: a directive
|
|
2
|
+
* written with a space or under an unknown name, which shows as plain text, and a
|
|
3
|
+
* relative image whose file is missing. Fenced code is skipped. */
|
|
4
|
+
export declare function findContentWarnings(props: {
|
|
5
|
+
text: string;
|
|
6
|
+
filePath: string;
|
|
7
|
+
directives: Set<string>;
|
|
8
|
+
}): string[];
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
/** What in an article's Markdown renders silently wrong, by file line: a directive
|
|
4
|
+
* written with a space or under an unknown name, which shows as plain text, and a
|
|
5
|
+
* relative image whose file is missing. Fenced code is skipped. */
|
|
6
|
+
export function findContentWarnings(props) {
|
|
7
|
+
const warnings = [];
|
|
8
|
+
let fence;
|
|
9
|
+
props.text.split(/\r?\n/).forEach((line, index) => {
|
|
10
|
+
const marker = FENCE.exec(line)?.[1];
|
|
11
|
+
if (marker && (!fence || marker.startsWith(fence))) {
|
|
12
|
+
fence = fence ? undefined : marker;
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (fence)
|
|
16
|
+
return;
|
|
17
|
+
const warn = (message) => warnings.push(`line ${index + 1}: ${message}`);
|
|
18
|
+
const spaced = SPACED_DIRECTIVE.exec(line);
|
|
19
|
+
if (spaced) {
|
|
20
|
+
const [, colons, name] = spaced;
|
|
21
|
+
warn(`"${colons} ${name}" has a space after the colons, so it renders as text; write "${colons}${name}"`);
|
|
22
|
+
}
|
|
23
|
+
const directive = DIRECTIVE.exec(line);
|
|
24
|
+
if (directive?.[2] && !props.directives.has(directive[2])) {
|
|
25
|
+
warn(`unknown directive "${directive[1]}${directive[2]}" renders as text`);
|
|
26
|
+
}
|
|
27
|
+
for (const match of line.matchAll(IMAGE)) {
|
|
28
|
+
const src = match[1] ?? match[2];
|
|
29
|
+
if (src && isRelative(src) && !existsSync(resolveImage(src, props.filePath))) {
|
|
30
|
+
warn(`image "${src}" not found`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return warnings;
|
|
35
|
+
}
|
|
36
|
+
const FENCE = /^\s{0,3}(`{3,}|~{3,})/;
|
|
37
|
+
const SPACED_DIRECTIVE = /^\s*(:{2,})\s+([A-Za-z][\w-]*)/;
|
|
38
|
+
const DIRECTIVE = /^\s*(:{2,})([A-Za-z][\w-]*)/;
|
|
39
|
+
const IMAGE = /!\[[^\]]*\]\(\s*<?([^)\s>]+)|<img\b[^>]*\bsrc=["']([^"']+)["']/g;
|
|
40
|
+
function isRelative(src) {
|
|
41
|
+
return !/^(?:[a-z][a-z\d+.-]*:|\/|#)/i.test(src);
|
|
42
|
+
}
|
|
43
|
+
function resolveImage(src, filePath) {
|
|
44
|
+
const path = src.split(/[?#]/)[0] ?? src;
|
|
45
|
+
return resolve(dirname(filePath), decodeURI(path));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC13YXJuaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9oZWxwZXJzL2NvbnRlbnQtd2FybmluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUU1Qzs7b0VBRW9FO0FBQ3BFLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUluQztJQUNDLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQTtJQUM3QixJQUFJLEtBQXlCLENBQUE7SUFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2hELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNwQyxJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25ELEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO1lBQ2xDLE9BQU07UUFDUixDQUFDO1FBQ0QsSUFBSSxLQUFLO1lBQUUsT0FBTTtRQUNqQixNQUFNLElBQUksR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUVoRixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUE7WUFDL0IsSUFBSSxDQUNGLElBQUksTUFBTSxJQUFJLElBQUksaUVBQWlFLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FDcEcsQ0FBQTtRQUNILENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RDLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxzQkFBc0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUM1RSxDQUFDO1FBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNoQyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM3RSxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFBO1lBQ2xDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDRixPQUFPLFFBQVEsQ0FBQTtBQUNqQixDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQUcsdUJBQXVCLENBQUE7QUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxnQ0FBZ0MsQ0FBQTtBQUN6RCxNQUFNLFNBQVMsR0FBRyw2QkFBNkIsQ0FBQTtBQUMvQyxNQUFNLEtBQUssR0FBRyxpRUFBaUUsQ0FBQTtBQUUvRSxTQUFTLFVBQVUsQ0FBQyxHQUFXO0lBQzdCLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDbEQsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEdBQVcsRUFBRSxRQUFnQjtJQUNqRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQTtJQUN4QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiXG5cbi8qKiBXaGF0IGluIGFuIGFydGljbGUncyBNYXJrZG93biByZW5kZXJzIHNpbGVudGx5IHdyb25nLCBieSBmaWxlIGxpbmU6IGEgZGlyZWN0aXZlXG4gKiAgd3JpdHRlbiB3aXRoIGEgc3BhY2Ugb3IgdW5kZXIgYW4gdW5rbm93biBuYW1lLCB3aGljaCBzaG93cyBhcyBwbGFpbiB0ZXh0LCBhbmQgYVxuICogIHJlbGF0aXZlIGltYWdlIHdob3NlIGZpbGUgaXMgbWlzc2luZy4gRmVuY2VkIGNvZGUgaXMgc2tpcHBlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQ29udGVudFdhcm5pbmdzKHByb3BzOiB7XG4gIHRleHQ6IHN0cmluZ1xuICBmaWxlUGF0aDogc3RyaW5nXG4gIGRpcmVjdGl2ZXM6IFNldDxzdHJpbmc+XG59KSB7XG4gIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdXG4gIGxldCBmZW5jZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIHByb3BzLnRleHQuc3BsaXQoL1xccj9cXG4vKS5mb3JFYWNoKChsaW5lLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IG1hcmtlciA9IEZFTkNFLmV4ZWMobGluZSk/LlsxXVxuICAgIGlmIChtYXJrZXIgJiYgKCFmZW5jZSB8fCBtYXJrZXIuc3RhcnRzV2l0aChmZW5jZSkpKSB7XG4gICAgICBmZW5jZSA9IGZlbmNlID8gdW5kZWZpbmVkIDogbWFya2VyXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZlbmNlKSByZXR1cm5cbiAgICBjb25zdCB3YXJuID0gKG1lc3NhZ2U6IHN0cmluZykgPT4gd2FybmluZ3MucHVzaChgbGluZSAke2luZGV4ICsgMX06ICR7bWVzc2FnZX1gKVxuXG4gICAgY29uc3Qgc3BhY2VkID0gU1BBQ0VEX0RJUkVDVElWRS5leGVjKGxpbmUpXG4gICAgaWYgKHNwYWNlZCkge1xuICAgICAgY29uc3QgWywgY29sb25zLCBuYW1lXSA9IHNwYWNlZFxuICAgICAgd2FybihcbiAgICAgICAgYFwiJHtjb2xvbnN9ICR7bmFtZX1cIiBoYXMgYSBzcGFjZSBhZnRlciB0aGUgY29sb25zLCBzbyBpdCByZW5kZXJzIGFzIHRleHQ7IHdyaXRlIFwiJHtjb2xvbnN9JHtuYW1lfVwiYCxcbiAgICAgIClcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0aXZlID0gRElSRUNUSVZFLmV4ZWMobGluZSlcbiAgICBpZiAoZGlyZWN0aXZlPy5bMl0gJiYgIXByb3BzLmRpcmVjdGl2ZXMuaGFzKGRpcmVjdGl2ZVsyXSkpIHtcbiAgICAgIHdhcm4oYHVua25vd24gZGlyZWN0aXZlIFwiJHtkaXJlY3RpdmVbMV19JHtkaXJlY3RpdmVbMl19XCIgcmVuZGVycyBhcyB0ZXh0YClcbiAgICB9XG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBsaW5lLm1hdGNoQWxsKElNQUdFKSkge1xuICAgICAgY29uc3Qgc3JjID0gbWF0Y2hbMV0gPz8gbWF0Y2hbMl1cbiAgICAgIGlmIChzcmMgJiYgaXNSZWxhdGl2ZShzcmMpICYmICFleGlzdHNTeW5jKHJlc29sdmVJbWFnZShzcmMsIHByb3BzLmZpbGVQYXRoKSkpIHtcbiAgICAgICAgd2FybihgaW1hZ2UgXCIke3NyY31cIiBub3QgZm91bmRgKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHdhcm5pbmdzXG59XG5cbmNvbnN0IEZFTkNFID0gL15cXHN7MCwzfShgezMsfXx+ezMsfSkvXG5jb25zdCBTUEFDRURfRElSRUNUSVZFID0gL15cXHMqKDp7Mix9KVxccysoW0EtWmEtel1bXFx3LV0qKS9cbmNvbnN0IERJUkVDVElWRSA9IC9eXFxzKig6ezIsfSkoW0EtWmEtel1bXFx3LV0qKS9cbmNvbnN0IElNQUdFID0gLyFcXFtbXlxcXV0qXFxdXFwoXFxzKjw/KFteKVxccz5dKyl8PGltZ1xcYltePl0qXFxic3JjPVtcIiddKFteXCInXSspW1wiJ10vZ1xuXG5mdW5jdGlvbiBpc1JlbGF0aXZlKHNyYzogc3RyaW5nKSB7XG4gIHJldHVybiAhL14oPzpbYS16XVthLXpcXGQrLi1dKjp8XFwvfCMpL2kudGVzdChzcmMpXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVJbWFnZShzcmM6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZykge1xuICBjb25zdCBwYXRoID0gc3JjLnNwbGl0KC9bPyNdLylbMF0gPz8gc3JjXG4gIHJldHVybiByZXNvbHZlKGRpcm5hbWUoZmlsZVBhdGgpLCBkZWNvZGVVUkkocGF0aCkpXG59XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useIcons } from "../hooks/icons.js";
|
|
3
|
+
import { toIconKey } from "./icon-names.js";
|
|
4
|
+
/** Resolves a Lucide icon by kebab-case name from the icons an `IconsProvider` gives */
|
|
5
|
+
export default function DynamicIconResolver(props) {
|
|
6
|
+
const Icon = useIcons()[toIconKey(props.name)];
|
|
7
|
+
if (!Icon)
|
|
8
|
+
return null;
|
|
9
|
+
return _jsx(Icon, { className: props.className });
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1pY29uLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2hlbHBlcnMvZHluYW1pYy1pY29uLXJlc29sdmVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUUzQyx3RkFBd0Y7QUFDeEYsTUFBTSxDQUFDLE9BQU8sVUFBVSxtQkFBbUIsQ0FBQyxLQUEyQztJQUNyRixNQUFNLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDOUMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUN0QixPQUFPLEtBQUMsSUFBSSxJQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxHQUFJLENBQUE7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUljb25zIH0gZnJvbSBcIi4uL2hvb2tzL2ljb25zLnRzXCJcbmltcG9ydCB7IHRvSWNvbktleSB9IGZyb20gXCIuL2ljb24tbmFtZXMudHNcIlxuXG4vKiogUmVzb2x2ZXMgYSBMdWNpZGUgaWNvbiBieSBrZWJhYi1jYXNlIG5hbWUgZnJvbSB0aGUgaWNvbnMgYW4gYEljb25zUHJvdmlkZXJgIGdpdmVzICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEeW5hbWljSWNvblJlc29sdmVyKHByb3BzOiB7IG5hbWU6IHN0cmluZzsgY2xhc3NOYW1lPzogc3RyaW5nIH0pIHtcbiAgY29uc3QgSWNvbiA9IHVzZUljb25zKClbdG9JY29uS2V5KHByb3BzLm5hbWUpXVxuICBpZiAoIUljb24pIHJldHVybiBudWxsXG4gIHJldHVybiA8SWNvbiBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX0gLz5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Suspense, lazy } from "react";
|
|
3
|
+
const importResolver = () => import("./dynamic-icon-resolver.js");
|
|
4
|
+
// Static on the server: a lazy one is still pending on the first page prerendered, which
|
|
5
|
+
// then streams its icons as hidden Suspense segments whose throttled reveal holds the
|
|
6
|
+
// first paint back by up to 2.3s. The client keeps the lazy chunk.
|
|
7
|
+
const Resolver = import.meta.env.SSR
|
|
8
|
+
? (await importResolver()).default
|
|
9
|
+
: lazy(importResolver);
|
|
10
|
+
/** Lazily loads and renders a Lucide icon by kebab-case name */
|
|
11
|
+
export function DynamicIcon(props) {
|
|
12
|
+
return (_jsx(Suspense, { children: _jsx(Resolver, { ...props }) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1pY29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2hlbHBlcnMvZHluYW1pYy1pY29uLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFFdEMsTUFBTSxjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLDRCQUE2QixDQUFDLENBQUE7QUFFbEUseUZBQXlGO0FBQ3pGLHNGQUFzRjtBQUN0RixtRUFBbUU7QUFDbkUsTUFBTSxRQUFRLEdBQUcsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUc7SUFDbEMsQ0FBQyxDQUFDLENBQUMsTUFBTSxjQUFjLEVBQUUsQ0FBQyxDQUFDLE9BQU87SUFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtBQUV4QixnRUFBZ0U7QUFDaEUsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUEyQztJQUNyRSxPQUFPLENBQ0wsS0FBQyxRQUFRLGNBQ1AsS0FBQyxRQUFRLE9BQUssS0FBSyxHQUFJLEdBQ2QsQ0FDWixDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1c3BlbnNlLCBsYXp5IH0gZnJvbSBcInJlYWN0XCJcblxuY29uc3QgaW1wb3J0UmVzb2x2ZXIgPSAoKSA9PiBpbXBvcnQoXCIuL2R5bmFtaWMtaWNvbi1yZXNvbHZlci50c3hcIilcblxuLy8gU3RhdGljIG9uIHRoZSBzZXJ2ZXI6IGEgbGF6eSBvbmUgaXMgc3RpbGwgcGVuZGluZyBvbiB0aGUgZmlyc3QgcGFnZSBwcmVyZW5kZXJlZCwgd2hpY2hcbi8vIHRoZW4gc3RyZWFtcyBpdHMgaWNvbnMgYXMgaGlkZGVuIFN1c3BlbnNlIHNlZ21lbnRzIHdob3NlIHRocm90dGxlZCByZXZlYWwgaG9sZHMgdGhlXG4vLyBmaXJzdCBwYWludCBiYWNrIGJ5IHVwIHRvIDIuM3MuIFRoZSBjbGllbnQga2VlcHMgdGhlIGxhenkgY2h1bmsuXG5jb25zdCBSZXNvbHZlciA9IGltcG9ydC5tZXRhLmVudi5TU1JcbiAgPyAoYXdhaXQgaW1wb3J0UmVzb2x2ZXIoKSkuZGVmYXVsdFxuICA6IGxhenkoaW1wb3J0UmVzb2x2ZXIpXG5cbi8qKiBMYXppbHkgbG9hZHMgYW5kIHJlbmRlcnMgYSBMdWNpZGUgaWNvbiBieSBrZWJhYi1jYXNlIG5hbWUgKi9cbmV4cG9ydCBmdW5jdGlvbiBEeW5hbWljSWNvbihwcm9wczogeyBuYW1lOiBzdHJpbmc7IGNsYXNzTmFtZT86IHN0cmluZyB9KSB7XG4gIHJldHVybiAoXG4gICAgPFN1c3BlbnNlPlxuICAgICAgPFJlc29sdmVyIHsuLi5wcm9wc30gLz5cbiAgICA8L1N1c3BlbnNlPlxuICApXG59XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { parse } from "yaml";
|
|
2
|
+
const FRONTMATTER = /^---\r?\n(?:([\s\S]*?)\r?\n)?---[ \t]*(?:\r?\n|$)/;
|
|
3
|
+
/** Split a Markdown file into its YAML frontmatter and its trimmed body. */
|
|
4
|
+
export function parseFrontmatter(source) {
|
|
5
|
+
const text = source.replace(/^/, "");
|
|
6
|
+
const match = FRONTMATTER.exec(text);
|
|
7
|
+
if (!match)
|
|
8
|
+
return { data: {}, content: text.trim() };
|
|
9
|
+
// The leading newline stands for the opening `---`, so YAML errors name file lines
|
|
10
|
+
const data = parse(`\n${match[1] ?? ""}`);
|
|
11
|
+
return {
|
|
12
|
+
data: typeof data === "object" && data !== null ? data : {},
|
|
13
|
+
content: text.slice(match[0].length).trim(),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvaGVscGVycy9mcm9udG1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRTVCLE1BQU0sV0FBVyxHQUFHLG1EQUFtRCxDQUFBO0FBRXZFLDRFQUE0RTtBQUM1RSxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBYztJQUM3QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNyQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3BDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFBO0lBQ3JELG1GQUFtRjtJQUNuRixNQUFNLElBQUksR0FBWSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNsRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDM0QsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRTtLQUM1QyxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlIH0gZnJvbSBcInlhbWxcIlxuXG5jb25zdCBGUk9OVE1BVFRFUiA9IC9eLS0tXFxyP1xcbig/OihbXFxzXFxTXSo/KVxccj9cXG4pPy0tLVsgXFx0XSooPzpcXHI/XFxufCQpL1xuXG4vKiogU3BsaXQgYSBNYXJrZG93biBmaWxlIGludG8gaXRzIFlBTUwgZnJvbnRtYXR0ZXIgYW5kIGl0cyB0cmltbWVkIGJvZHkuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcm9udG1hdHRlcihzb3VyY2U6IHN0cmluZykge1xuICBjb25zdCB0ZXh0ID0gc291cmNlLnJlcGxhY2UoL17vu78vLCBcIlwiKVxuICBjb25zdCBtYXRjaCA9IEZST05UTUFUVEVSLmV4ZWModGV4dClcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIHsgZGF0YToge30sIGNvbnRlbnQ6IHRleHQudHJpbSgpIH1cbiAgLy8gVGhlIGxlYWRpbmcgbmV3bGluZSBzdGFuZHMgZm9yIHRoZSBvcGVuaW5nIGAtLS1gLCBzbyBZQU1MIGVycm9ycyBuYW1lIGZpbGUgbGluZXNcbiAgY29uc3QgZGF0YTogdW5rbm93biA9IHBhcnNlKGBcXG4ke21hdGNoWzFdID8/IFwiXCJ9YClcbiAgcmV0dXJuIHtcbiAgICBkYXRhOiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBkYXRhICE9PSBudWxsID8gZGF0YSA6IHt9LFxuICAgIGNvbnRlbnQ6IHRleHQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKS50cmltKCksXG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** The key of a Lucide icon in its `icons` map: `file-pen-line` → `FilePenLine`. */
|
|
2
|
+
export declare function toIconKey(name: string): string;
|
|
3
|
+
/** The icons a site can render: every name given outright, plus every quoted string in
|
|
4
|
+
* `texts` (compiled articles, escaped components) that names a known icon. */
|
|
5
|
+
export declare function collectIconKeys(props: {
|
|
6
|
+
names: string[];
|
|
7
|
+
texts: string[];
|
|
8
|
+
known: ReadonlySet<string>;
|
|
9
|
+
}): string[];
|
|
10
|
+
/** The module `DynamicIcon` resolves names from: only the icons the site uses. */
|
|
11
|
+
export declare function renderIconsModule(keys: string[]): string;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** The key of a Lucide icon in its `icons` map: `file-pen-line` → `FilePenLine`. */
|
|
2
|
+
export function toIconKey(name) {
|
|
3
|
+
return name
|
|
4
|
+
.split("-")
|
|
5
|
+
.map(s => s.charAt(0).toUpperCase() + s.slice(1))
|
|
6
|
+
.join("");
|
|
7
|
+
}
|
|
8
|
+
/** The icons a site can render: every name given outright, plus every quoted string in
|
|
9
|
+
* `texts` (compiled articles, escaped components) that names a known icon. */
|
|
10
|
+
export function collectIconKeys(props) {
|
|
11
|
+
const keys = new Set();
|
|
12
|
+
const add = (name) => {
|
|
13
|
+
const key = toIconKey(name);
|
|
14
|
+
if (props.known.has(key))
|
|
15
|
+
keys.add(key);
|
|
16
|
+
};
|
|
17
|
+
props.names.forEach(add);
|
|
18
|
+
for (const text of props.texts) {
|
|
19
|
+
for (const match of text.matchAll(/["'`]([A-Za-z][\w-]*)["'`]/g)) {
|
|
20
|
+
if (match[1])
|
|
21
|
+
add(match[1]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return [...keys].sort();
|
|
25
|
+
}
|
|
26
|
+
/** The module `DynamicIcon` resolves names from: only the icons the site uses. */
|
|
27
|
+
export function renderIconsModule(keys) {
|
|
28
|
+
if (keys.length === 0)
|
|
29
|
+
return "export const icons = {}";
|
|
30
|
+
return [
|
|
31
|
+
`import { ${keys.join(", ")} } from "lucide-react"`,
|
|
32
|
+
`export const icons = { ${keys.join(", ")} }`,
|
|
33
|
+
].join("\n");
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1uYW1lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9oZWxwZXJzL2ljb24tbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0ZBQW9GO0FBQ3BGLE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBWTtJQUNwQyxPQUFPLElBQUk7U0FDUixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUNiLENBQUM7QUFFRDsrRUFDK0U7QUFDL0UsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUkvQjtJQUNDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUE7SUFDOUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtRQUMzQixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDM0IsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3pDLENBQUMsQ0FBQTtJQUNELEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLENBQUM7WUFDakUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ3pCLENBQUM7QUFFRCxrRkFBa0Y7QUFDbEYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQWM7SUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLHlCQUF5QixDQUFBO0lBQ3ZELE9BQU87UUFDTCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QjtRQUNuRCwwQkFBMEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtLQUM5QyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogVGhlIGtleSBvZiBhIEx1Y2lkZSBpY29uIGluIGl0cyBgaWNvbnNgIG1hcDogYGZpbGUtcGVuLWxpbmVgIOKGkiBgRmlsZVBlbkxpbmVgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSWNvbktleShuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIG5hbWVcbiAgICAuc3BsaXQoXCItXCIpXG4gICAgLm1hcChzID0+IHMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpKVxuICAgIC5qb2luKFwiXCIpXG59XG5cbi8qKiBUaGUgaWNvbnMgYSBzaXRlIGNhbiByZW5kZXI6IGV2ZXJ5IG5hbWUgZ2l2ZW4gb3V0cmlnaHQsIHBsdXMgZXZlcnkgcXVvdGVkIHN0cmluZyBpblxuICogIGB0ZXh0c2AgKGNvbXBpbGVkIGFydGljbGVzLCBlc2NhcGVkIGNvbXBvbmVudHMpIHRoYXQgbmFtZXMgYSBrbm93biBpY29uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RJY29uS2V5cyhwcm9wczoge1xuICBuYW1lczogc3RyaW5nW11cbiAgdGV4dHM6IHN0cmluZ1tdXG4gIGtub3duOiBSZWFkb25seVNldDxzdHJpbmc+XG59KSB7XG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBjb25zdCBhZGQgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gdG9JY29uS2V5KG5hbWUpXG4gICAgaWYgKHByb3BzLmtub3duLmhhcyhrZXkpKSBrZXlzLmFkZChrZXkpXG4gIH1cbiAgcHJvcHMubmFtZXMuZm9yRWFjaChhZGQpXG4gIGZvciAoY29uc3QgdGV4dCBvZiBwcm9wcy50ZXh0cykge1xuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgdGV4dC5tYXRjaEFsbCgvW1wiJ2BdKFtBLVphLXpdW1xcdy1dKilbXCInYF0vZykpIHtcbiAgICAgIGlmIChtYXRjaFsxXSkgYWRkKG1hdGNoWzFdKVxuICAgIH1cbiAgfVxuICByZXR1cm4gWy4uLmtleXNdLnNvcnQoKVxufVxuXG4vKiogVGhlIG1vZHVsZSBgRHluYW1pY0ljb25gIHJlc29sdmVzIG5hbWVzIGZyb206IG9ubHkgdGhlIGljb25zIHRoZSBzaXRlIHVzZXMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVySWNvbnNNb2R1bGUoa2V5czogc3RyaW5nW10pIHtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gXCJleHBvcnQgY29uc3QgaWNvbnMgPSB7fVwiXG4gIHJldHVybiBbXG4gICAgYGltcG9ydCB7ICR7a2V5cy5qb2luKFwiLCBcIil9IH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiYCxcbiAgICBgZXhwb3J0IGNvbnN0IGljb25zID0geyAke2tleXMuam9pbihcIiwgXCIpfSB9YCxcbiAgXS5qb2luKFwiXFxuXCIpXG59XG4iXX0=
|