@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,7 @@
|
|
|
1
|
+
/** A UI string with its `{name}` placeholders filled from `values`. */
|
|
2
|
+
export function formatMessage(message, values) {
|
|
3
|
+
if (!values)
|
|
4
|
+
return message;
|
|
5
|
+
return message.replace(/\{(\w+)\}/g, (match, name) => values[name] ?? match);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1mb3JtYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvaGVscGVycy9tZXNzYWdlLWZvcm1hdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1RUFBdUU7QUFDdkUsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUFlLEVBQUUsTUFBK0I7SUFDNUUsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLE9BQU8sQ0FBQTtJQUMzQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLElBQVksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFBO0FBQ3RGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQSBVSSBzdHJpbmcgd2l0aCBpdHMgYHtuYW1lfWAgcGxhY2Vob2xkZXJzIGZpbGxlZCBmcm9tIGB2YWx1ZXNgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nLCB2YWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIGlmICghdmFsdWVzKSByZXR1cm4gbWVzc2FnZVxuICByZXR1cm4gbWVzc2FnZS5yZXBsYWNlKC9cXHsoXFx3KylcXH0vZywgKG1hdGNoLCBuYW1lOiBzdHJpbmcpID0+IHZhbHVlc1tuYW1lXSA/PyBtYXRjaClcbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** A syntax-tree node as `readNodeText` reads it, mdast or hast alike. */
|
|
2
|
+
export interface TextNode {
|
|
3
|
+
type: string;
|
|
4
|
+
value?: unknown;
|
|
5
|
+
alt?: unknown;
|
|
6
|
+
children?: TextNode[];
|
|
7
|
+
}
|
|
8
|
+
/** A node's text: its own value, an image's alt, else its children's text joined. */
|
|
9
|
+
export declare function readNodeText(node: TextNode): string;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** A node's text: its own value, an image's alt, else its children's text joined. */
|
|
2
|
+
export function readNodeText(node) {
|
|
3
|
+
if (typeof node.value === "string" && node.type !== "comment")
|
|
4
|
+
return node.value;
|
|
5
|
+
if (node.type === "image")
|
|
6
|
+
return typeof node.alt === "string" ? node.alt : "";
|
|
7
|
+
return node.children?.map(readNodeText).join("") ?? "";
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS10ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2hlbHBlcnMvbm9kZS10ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsWUFBWSxDQUFDLElBQWM7SUFDekMsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQTtJQUNoRixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTztRQUFFLE9BQU8sT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQzlFLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEEgc3ludGF4LXRyZWUgbm9kZSBhcyBgcmVhZE5vZGVUZXh0YCByZWFkcyBpdCwgbWRhc3Qgb3IgaGFzdCBhbGlrZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dE5vZGUge1xuICB0eXBlOiBzdHJpbmdcbiAgdmFsdWU/OiB1bmtub3duXG4gIGFsdD86IHVua25vd25cbiAgY2hpbGRyZW4/OiBUZXh0Tm9kZVtdXG59XG5cbi8qKiBBIG5vZGUncyB0ZXh0OiBpdHMgb3duIHZhbHVlLCBhbiBpbWFnZSdzIGFsdCwgZWxzZSBpdHMgY2hpbGRyZW4ncyB0ZXh0IGpvaW5lZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkTm9kZVRleHQobm9kZTogVGV4dE5vZGUpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIG5vZGUudmFsdWUgPT09IFwic3RyaW5nXCIgJiYgbm9kZS50eXBlICE9PSBcImNvbW1lbnRcIikgcmV0dXJuIG5vZGUudmFsdWVcbiAgaWYgKG5vZGUudHlwZSA9PT0gXCJpbWFnZVwiKSByZXR1cm4gdHlwZW9mIG5vZGUuYWx0ID09PSBcInN0cmluZ1wiID8gbm9kZS5hbHQgOiBcIlwiXG4gIHJldHVybiBub2RlLmNoaWxkcmVuPy5tYXAocmVhZE5vZGVUZXh0KS5qb2luKFwiXCIpID8/IFwiXCJcbn1cbiJdfQ==
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/** The UI strings outside a Livemark site: English. */
|
|
2
|
+
export declare function useSiteMessages(): {
|
|
3
|
+
"nav.docs": string;
|
|
4
|
+
"nav.more": string;
|
|
5
|
+
"nav.navigation": string;
|
|
6
|
+
"nav.chooseSection": string;
|
|
7
|
+
"nav.section": string;
|
|
8
|
+
"nav.toggleSubmenu": string;
|
|
9
|
+
"nav.previous": string;
|
|
10
|
+
"nav.next": string;
|
|
11
|
+
"nav.backToTop": string;
|
|
12
|
+
"nav.close": string;
|
|
13
|
+
"nav.sections": string;
|
|
14
|
+
"nav.articles": string;
|
|
15
|
+
"nav.links": string;
|
|
16
|
+
"nav.releases": string;
|
|
17
|
+
"nav.posts": string;
|
|
18
|
+
"nav.tags": string;
|
|
19
|
+
"nav.breadcrumbs": string;
|
|
20
|
+
"language.choose": string;
|
|
21
|
+
"language.untranslated": string;
|
|
22
|
+
"theme.change": string;
|
|
23
|
+
"theme.light": string;
|
|
24
|
+
"theme.dark": string;
|
|
25
|
+
"theme.system": string;
|
|
26
|
+
"shortcuts.title": string;
|
|
27
|
+
"shortcuts.search": string;
|
|
28
|
+
"shortcuts.theme": string;
|
|
29
|
+
"shortcuts.sidebar": string;
|
|
30
|
+
"shortcuts.scrollDown": string;
|
|
31
|
+
"shortcuts.scrollUp": string;
|
|
32
|
+
"shortcuts.top": string;
|
|
33
|
+
"shortcuts.bottom": string;
|
|
34
|
+
"shortcuts.next": string;
|
|
35
|
+
"shortcuts.previous": string;
|
|
36
|
+
"search.label": string;
|
|
37
|
+
"search.description": string;
|
|
38
|
+
"search.placeholder": string;
|
|
39
|
+
"search.empty": string;
|
|
40
|
+
"search.hint": string;
|
|
41
|
+
"search.close": string;
|
|
42
|
+
"search.pages": string;
|
|
43
|
+
"search.button": string;
|
|
44
|
+
"search.navigate": string;
|
|
45
|
+
"search.select": string;
|
|
46
|
+
"search.dismiss": string;
|
|
47
|
+
"toc.title": string;
|
|
48
|
+
"toc.contents": string;
|
|
49
|
+
"toc.actions": string;
|
|
50
|
+
"toc.inline": string;
|
|
51
|
+
"page.updated": string;
|
|
52
|
+
"page.published": string;
|
|
53
|
+
"page.edit": string;
|
|
54
|
+
"page.view": string;
|
|
55
|
+
"page.copyMarkdown": string;
|
|
56
|
+
"page.openChatGpt": string;
|
|
57
|
+
"page.openClaude": string;
|
|
58
|
+
"page.llmPrompt": string;
|
|
59
|
+
"code.copy": string;
|
|
60
|
+
"code.copied": string;
|
|
61
|
+
"code.wrapOn": string;
|
|
62
|
+
"code.wrapOff": string;
|
|
63
|
+
"code.expand": string;
|
|
64
|
+
"callout.note": string;
|
|
65
|
+
"callout.info": string;
|
|
66
|
+
"callout.tip": string;
|
|
67
|
+
"callout.warning": string;
|
|
68
|
+
"callout.danger": string;
|
|
69
|
+
"blog.title": string;
|
|
70
|
+
"blog.allPosts": string;
|
|
71
|
+
"blog.recentPosts": string;
|
|
72
|
+
"blog.rssFeed": string;
|
|
73
|
+
"blog.tagged": string;
|
|
74
|
+
"changelog.title": string;
|
|
75
|
+
"changelog.allReleases": string;
|
|
76
|
+
"changelog.recentReleases": string;
|
|
77
|
+
"error.notFound": string;
|
|
78
|
+
"error.goBack": string;
|
|
79
|
+
"error.tryAgain": string;
|
|
80
|
+
"error.home": string;
|
|
81
|
+
"media.loadingDiagram": string;
|
|
82
|
+
"media.youtube": string;
|
|
83
|
+
"media.soundcloud": string;
|
|
84
|
+
"footnote.missing": string;
|
|
85
|
+
"footer.createdWith": string;
|
|
86
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Messages } from "../models/message.js";
|
|
2
|
+
const DEFAULT_MESSAGES = Messages.parse({});
|
|
3
|
+
/** The UI strings outside a Livemark site: English. */
|
|
4
|
+
export function useSiteMessages() {
|
|
5
|
+
return DEFAULT_MESSAGES;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l0ZS1tZXNzYWdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9oZWxwZXJzL3NpdGUtbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRS9DLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUUzQyx1REFBdUQ7QUFDdkQsTUFBTSxVQUFVLGVBQWU7SUFDN0IsT0FBTyxnQkFBZ0IsQ0FBQTtBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnZXMgfSBmcm9tIFwiLi4vbW9kZWxzL21lc3NhZ2UudHNcIlxuXG5jb25zdCBERUZBVUxUX01FU1NBR0VTID0gTWVzc2FnZXMucGFyc2Uoe30pXG5cbi8qKiBUaGUgVUkgc3RyaW5ncyBvdXRzaWRlIGEgTGl2ZW1hcmsgc2l0ZTogRW5nbGlzaC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTaXRlTWVzc2FnZXMoKSB7XG4gIHJldHVybiBERUZBVUxUX01FU1NBR0VTXG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { TocItem } from "../models/toc.ts";
|
|
2
|
+
/** React context that provides TOC items to inline components */
|
|
3
|
+
export declare const TocContext: import("react").Context<TocItem[]>;
|
|
4
|
+
/** Consume the TOC items from the nearest TocContext provider */
|
|
5
|
+
export declare function useTocItems(): TocItem[];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
/** React context that provides TOC items to inline components */
|
|
3
|
+
export const TocContext = createContext([]);
|
|
4
|
+
/** Consume the TOC items from the nearest TocContext provider */
|
|
5
|
+
export function useTocItems() {
|
|
6
|
+
return useContext(TocContext);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9jLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvaGVscGVycy90b2MtY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUdqRCxpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBWSxFQUFFLENBQUMsQ0FBQTtBQUV0RCxpRUFBaUU7QUFDakUsTUFBTSxVQUFVLFdBQVc7SUFDekIsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHR5cGUgeyBUb2NJdGVtIH0gZnJvbSBcIi4uL21vZGVscy90b2MudHNcIlxuXG4vKiogUmVhY3QgY29udGV4dCB0aGF0IHByb3ZpZGVzIFRPQyBpdGVtcyB0byBpbmxpbmUgY29tcG9uZW50cyAqL1xuZXhwb3J0IGNvbnN0IFRvY0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFRvY0l0ZW1bXT4oW10pXG5cbi8qKiBDb25zdW1lIHRoZSBUT0MgaXRlbXMgZnJvbSB0aGUgbmVhcmVzdCBUb2NDb250ZXh0IHByb3ZpZGVyICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9jSXRlbXMoKSB7XG4gIHJldHVybiB1c2VDb250ZXh0KFRvY0NvbnRleHQpXG59XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** The h2 to h4 headings of html.extractToc's nested outline, in document order. */
|
|
2
|
+
export function flattenToc(toc) {
|
|
3
|
+
const items = [];
|
|
4
|
+
const stack = Array.isArray(toc) ? [...toc].reverse() : [];
|
|
5
|
+
while (stack.length > 0) {
|
|
6
|
+
const entry = stack.pop();
|
|
7
|
+
if (!entry)
|
|
8
|
+
continue;
|
|
9
|
+
if (entry.depth >= 2 && entry.depth <= 4 && entry.id) {
|
|
10
|
+
items.push({ url: `#${entry.id}`, title: entry.value, depth: entry.depth });
|
|
11
|
+
}
|
|
12
|
+
stack.push(...[...(entry.children ?? [])].reverse());
|
|
13
|
+
}
|
|
14
|
+
return items;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9jLW91dGxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvaGVscGVycy90b2Mtb3V0bGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxvRkFBb0Y7QUFDcEYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFZO0lBQ3JDLE1BQU0sS0FBSyxHQUFjLEVBQUUsQ0FBQTtJQUMzQixNQUFNLEtBQUssR0FBZSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUN0RSxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLElBQUksQ0FBQyxLQUFLO1lBQUUsU0FBUTtRQUNwQixJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNyRCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUM3RSxDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3RELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRvY0l0ZW0gfSBmcm9tIFwiLi4vbW9kZWxzL3RvYy50c1wiXG5cbmludGVyZmFjZSBUb2NFbnRyeSB7XG4gIGRlcHRoOiBudW1iZXJcbiAgdmFsdWU6IHN0cmluZ1xuICBpZD86IHN0cmluZ1xuICBjaGlsZHJlbj86IFRvY0VudHJ5W11cbn1cblxuLyoqIFRoZSBoMiB0byBoNCBoZWFkaW5ncyBvZiBodG1sLmV4dHJhY3RUb2MncyBuZXN0ZWQgb3V0bGluZSwgaW4gZG9jdW1lbnQgb3JkZXIuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlblRvYyh0b2M6IHVua25vd24pIHtcbiAgY29uc3QgaXRlbXM6IFRvY0l0ZW1bXSA9IFtdXG4gIGNvbnN0IHN0YWNrOiBUb2NFbnRyeVtdID0gQXJyYXkuaXNBcnJheSh0b2MpID8gWy4uLnRvY10ucmV2ZXJzZSgpIDogW11cbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpXG4gICAgaWYgKCFlbnRyeSkgY29udGludWVcbiAgICBpZiAoZW50cnkuZGVwdGggPj0gMiAmJiBlbnRyeS5kZXB0aCA8PSA0ICYmIGVudHJ5LmlkKSB7XG4gICAgICBpdGVtcy5wdXNoKHsgdXJsOiBgIyR7ZW50cnkuaWR9YCwgdGl0bGU6IGVudHJ5LnZhbHVlLCBkZXB0aDogZW50cnkuZGVwdGggfSlcbiAgICB9XG4gICAgc3RhY2sucHVzaCguLi5bLi4uKGVudHJ5LmNoaWxkcmVuID8/IFtdKV0ucmV2ZXJzZSgpKVxuICB9XG4gIHJldHVybiBpdGVtc1xufVxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const VIDEO_ID = /^[\w-]{11}$/;
|
|
2
|
+
const PATH_PREFIXES = ["embed", "shorts", "live", "v"];
|
|
3
|
+
/** Derives the video id from a YouTube watch, youtu.be, embed, shorts or live URL */
|
|
4
|
+
export function parseYoutubeId(url) {
|
|
5
|
+
let parsed;
|
|
6
|
+
try {
|
|
7
|
+
parsed = new URL(url);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
const host = parsed.hostname.replace(/^(www|m|music)\./, "");
|
|
13
|
+
const segments = parsed.pathname.split("/").filter(Boolean);
|
|
14
|
+
let id;
|
|
15
|
+
if (host === "youtu.be")
|
|
16
|
+
id = segments[0];
|
|
17
|
+
else if (host === "youtube.com" || host === "youtube-nocookie.com") {
|
|
18
|
+
if (segments[0] === "watch")
|
|
19
|
+
id = parsed.searchParams.get("v");
|
|
20
|
+
else if (PATH_PREFIXES.includes(segments[0] ?? ""))
|
|
21
|
+
id = segments[1];
|
|
22
|
+
}
|
|
23
|
+
return id && VIDEO_ID.test(id) ? id : undefined;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieW91dHViZS1pZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9oZWxwZXJzL3lvdXR1YmUtaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFBO0FBQzlCLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUE7QUFFdEQscUZBQXFGO0FBQ3JGLE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBVztJQUN4QyxJQUFJLE1BQVcsQ0FBQTtJQUNmLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN2QixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMzRCxJQUFJLEVBQTZCLENBQUE7SUFDakMsSUFBSSxJQUFJLEtBQUssVUFBVTtRQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDcEMsSUFBSSxJQUFJLEtBQUssYUFBYSxJQUFJLElBQUksS0FBSyxzQkFBc0IsRUFBRSxDQUFDO1FBQ25FLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU87WUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDekQsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RFLENBQUM7SUFFRCxPQUFPLEVBQUUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgVklERU9fSUQgPSAvXltcXHctXXsxMX0kL1xuY29uc3QgUEFUSF9QUkVGSVhFUyA9IFtcImVtYmVkXCIsIFwic2hvcnRzXCIsIFwibGl2ZVwiLCBcInZcIl1cblxuLyoqIERlcml2ZXMgdGhlIHZpZGVvIGlkIGZyb20gYSBZb3VUdWJlIHdhdGNoLCB5b3V0dS5iZSwgZW1iZWQsIHNob3J0cyBvciBsaXZlIFVSTCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWW91dHViZUlkKHVybDogc3RyaW5nKSB7XG4gIGxldCBwYXJzZWQ6IFVSTFxuICB0cnkge1xuICAgIHBhcnNlZCA9IG5ldyBVUkwodXJsKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBjb25zdCBob3N0ID0gcGFyc2VkLmhvc3RuYW1lLnJlcGxhY2UoL14od3d3fG18bXVzaWMpXFwuLywgXCJcIilcbiAgY29uc3Qgc2VnbWVudHMgPSBwYXJzZWQucGF0aG5hbWUuc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKVxuICBsZXQgaWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgaWYgKGhvc3QgPT09IFwieW91dHUuYmVcIikgaWQgPSBzZWdtZW50c1swXVxuICBlbHNlIGlmIChob3N0ID09PSBcInlvdXR1YmUuY29tXCIgfHwgaG9zdCA9PT0gXCJ5b3V0dWJlLW5vY29va2llLmNvbVwiKSB7XG4gICAgaWYgKHNlZ21lbnRzWzBdID09PSBcIndhdGNoXCIpIGlkID0gcGFyc2VkLnNlYXJjaFBhcmFtcy5nZXQoXCJ2XCIpXG4gICAgZWxzZSBpZiAoUEFUSF9QUkVGSVhFUy5pbmNsdWRlcyhzZWdtZW50c1swXSA/PyBcIlwiKSkgaWQgPSBzZWdtZW50c1sxXVxuICB9XG5cbiAgcmV0dXJuIGlkICYmIFZJREVPX0lELnRlc3QoaWQpID8gaWQgOiB1bmRlZmluZWRcbn1cbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ComponentType, ReactNode } from "react";
|
|
2
|
+
/** Lucide icons by their key in Lucide's `icons` map, such as `ArrowRight`. */
|
|
3
|
+
export type IconMap = Record<string, ComponentType<{
|
|
4
|
+
className?: string;
|
|
5
|
+
}> | undefined>;
|
|
6
|
+
/** Supplies the icons `:icon` and `::card{icon}` render outside a Livemark site, such
|
|
7
|
+
* as lucide-react's `icons` or a subset of it. */
|
|
8
|
+
export declare function IconsProvider(props: {
|
|
9
|
+
icons: IconMap;
|
|
10
|
+
children?: ReactNode;
|
|
11
|
+
}): import("react").FunctionComponentElement<import("react").ProviderProps<IconMap>>;
|
|
12
|
+
/** The icons an `IconsProvider` supplies; none without one. */
|
|
13
|
+
export declare function useIcons(): IconMap;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createContext, createElement, useContext } from "react";
|
|
2
|
+
const IconsContext = createContext({});
|
|
3
|
+
/** Supplies the icons `:icon` and `::card{icon}` render outside a Livemark site, such
|
|
4
|
+
* as lucide-react's `icons` or a subset of it. */
|
|
5
|
+
export function IconsProvider(props) {
|
|
6
|
+
return createElement(IconsContext, { value: props.icons }, props.children);
|
|
7
|
+
}
|
|
8
|
+
/** The icons an `IconsProvider` supplies; none without one. */
|
|
9
|
+
export function useIcons() {
|
|
10
|
+
return useContext(IconsContext);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvaG9va3MvaWNvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBTWhFLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBVSxFQUFFLENBQUMsQ0FBQTtBQUUvQzttREFDbUQ7QUFDbkQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUErQztJQUMzRSxPQUFPLGFBQWEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUM1RSxDQUFDO0FBRUQsK0RBQStEO0FBQy9ELE1BQU0sVUFBVSxRQUFRO0lBQ3RCLE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFBO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCBjcmVhdGVFbGVtZW50LCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50VHlwZSwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCJcblxuLyoqIEx1Y2lkZSBpY29ucyBieSB0aGVpciBrZXkgaW4gTHVjaWRlJ3MgYGljb25zYCBtYXAsIHN1Y2ggYXMgYEFycm93UmlnaHRgLiAqL1xuZXhwb3J0IHR5cGUgSWNvbk1hcCA9IFJlY29yZDxzdHJpbmcsIENvbXBvbmVudFR5cGU8eyBjbGFzc05hbWU/OiBzdHJpbmcgfT4gfCB1bmRlZmluZWQ+XG5cbmNvbnN0IEljb25zQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8SWNvbk1hcD4oe30pXG5cbi8qKiBTdXBwbGllcyB0aGUgaWNvbnMgYDppY29uYCBhbmQgYDo6Y2FyZHtpY29ufWAgcmVuZGVyIG91dHNpZGUgYSBMaXZlbWFyayBzaXRlLCBzdWNoXG4gKiAgYXMgbHVjaWRlLXJlYWN0J3MgYGljb25zYCBvciBhIHN1YnNldCBvZiBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJY29uc1Byb3ZpZGVyKHByb3BzOiB7IGljb25zOiBJY29uTWFwOyBjaGlsZHJlbj86IFJlYWN0Tm9kZSB9KSB7XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KEljb25zQ29udGV4dCwgeyB2YWx1ZTogcHJvcHMuaWNvbnMgfSwgcHJvcHMuY2hpbGRyZW4pXG59XG5cbi8qKiBUaGUgaWNvbnMgYW4gYEljb25zUHJvdmlkZXJgIHN1cHBsaWVzOyBub25lIHdpdGhvdXQgb25lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUljb25zKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChJY29uc0NvbnRleHQpXG59XG4iXX0=
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { MessageKey, Messages } from "../models/message.ts";
|
|
3
|
+
/** Supplies UI strings to Livemark components rendered outside a Livemark site; a key
|
|
4
|
+
* left out keeps its English default. */
|
|
5
|
+
export declare function MessagesProvider(props: {
|
|
6
|
+
messages: Partial<Messages>;
|
|
7
|
+
children?: ReactNode;
|
|
8
|
+
}): import("react").FunctionComponentElement<import("react").ProviderProps<Partial<{
|
|
9
|
+
"nav.docs": string;
|
|
10
|
+
"nav.more": string;
|
|
11
|
+
"nav.navigation": string;
|
|
12
|
+
"nav.chooseSection": string;
|
|
13
|
+
"nav.section": string;
|
|
14
|
+
"nav.toggleSubmenu": string;
|
|
15
|
+
"nav.previous": string;
|
|
16
|
+
"nav.next": string;
|
|
17
|
+
"nav.backToTop": string;
|
|
18
|
+
"nav.close": string;
|
|
19
|
+
"nav.sections": string;
|
|
20
|
+
"nav.articles": string;
|
|
21
|
+
"nav.links": string;
|
|
22
|
+
"nav.releases": string;
|
|
23
|
+
"nav.posts": string;
|
|
24
|
+
"nav.tags": string;
|
|
25
|
+
"nav.breadcrumbs": string;
|
|
26
|
+
"language.choose": string;
|
|
27
|
+
"language.untranslated": string;
|
|
28
|
+
"theme.change": string;
|
|
29
|
+
"theme.light": string;
|
|
30
|
+
"theme.dark": string;
|
|
31
|
+
"theme.system": string;
|
|
32
|
+
"shortcuts.title": string;
|
|
33
|
+
"shortcuts.search": string;
|
|
34
|
+
"shortcuts.theme": string;
|
|
35
|
+
"shortcuts.sidebar": string;
|
|
36
|
+
"shortcuts.scrollDown": string;
|
|
37
|
+
"shortcuts.scrollUp": string;
|
|
38
|
+
"shortcuts.top": string;
|
|
39
|
+
"shortcuts.bottom": string;
|
|
40
|
+
"shortcuts.next": string;
|
|
41
|
+
"shortcuts.previous": string;
|
|
42
|
+
"search.label": string;
|
|
43
|
+
"search.description": string;
|
|
44
|
+
"search.placeholder": string;
|
|
45
|
+
"search.empty": string;
|
|
46
|
+
"search.hint": string;
|
|
47
|
+
"search.close": string;
|
|
48
|
+
"search.pages": string;
|
|
49
|
+
"search.button": string;
|
|
50
|
+
"search.navigate": string;
|
|
51
|
+
"search.select": string;
|
|
52
|
+
"search.dismiss": string;
|
|
53
|
+
"toc.title": string;
|
|
54
|
+
"toc.contents": string;
|
|
55
|
+
"toc.actions": string;
|
|
56
|
+
"toc.inline": string;
|
|
57
|
+
"page.updated": string;
|
|
58
|
+
"page.published": string;
|
|
59
|
+
"page.edit": string;
|
|
60
|
+
"page.view": string;
|
|
61
|
+
"page.copyMarkdown": string;
|
|
62
|
+
"page.openChatGpt": string;
|
|
63
|
+
"page.openClaude": string;
|
|
64
|
+
"page.llmPrompt": string;
|
|
65
|
+
"code.copy": string;
|
|
66
|
+
"code.copied": string;
|
|
67
|
+
"code.wrapOn": string;
|
|
68
|
+
"code.wrapOff": string;
|
|
69
|
+
"code.expand": string;
|
|
70
|
+
"callout.note": string;
|
|
71
|
+
"callout.info": string;
|
|
72
|
+
"callout.tip": string;
|
|
73
|
+
"callout.warning": string;
|
|
74
|
+
"callout.danger": string;
|
|
75
|
+
"blog.title": string;
|
|
76
|
+
"blog.allPosts": string;
|
|
77
|
+
"blog.recentPosts": string;
|
|
78
|
+
"blog.rssFeed": string;
|
|
79
|
+
"blog.tagged": string;
|
|
80
|
+
"changelog.title": string;
|
|
81
|
+
"changelog.allReleases": string;
|
|
82
|
+
"changelog.recentReleases": string;
|
|
83
|
+
"error.notFound": string;
|
|
84
|
+
"error.goBack": string;
|
|
85
|
+
"error.tryAgain": string;
|
|
86
|
+
"error.home": string;
|
|
87
|
+
"media.loadingDiagram": string;
|
|
88
|
+
"media.youtube": string;
|
|
89
|
+
"media.soundcloud": string;
|
|
90
|
+
"footnote.missing": string;
|
|
91
|
+
"footer.createdWith": string;
|
|
92
|
+
}> | undefined>>;
|
|
93
|
+
/** A translator for Livemark's UI strings: `t("toc.title")`, with `{name}` placeholders
|
|
94
|
+
* filled from `values`. A `MessagesProvider` wins over the site's language. */
|
|
95
|
+
export declare function useMessages(): (key: MessageKey, values?: Record<string, string>) => string;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createContext, createElement, useCallback, useContext } from "react";
|
|
2
|
+
import { formatMessage } from "../helpers/message-format.js";
|
|
3
|
+
import { useSiteMessages } from "../helpers/site-messages.js";
|
|
4
|
+
const MessagesContext = createContext(undefined);
|
|
5
|
+
/** Supplies UI strings to Livemark components rendered outside a Livemark site; a key
|
|
6
|
+
* left out keeps its English default. */
|
|
7
|
+
export function MessagesProvider(props) {
|
|
8
|
+
return createElement(MessagesContext, { value: props.messages }, props.children);
|
|
9
|
+
}
|
|
10
|
+
/** A translator for Livemark's UI strings: `t("toc.title")`, with `{name}` placeholders
|
|
11
|
+
* filled from `values`. A `MessagesProvider` wins over the site's language. */
|
|
12
|
+
export function useMessages() {
|
|
13
|
+
const provided = useContext(MessagesContext);
|
|
14
|
+
const site = useSiteMessages();
|
|
15
|
+
return useCallback((key, values) => formatMessage(provided?.[key] ?? site[key], values), [provided, site]);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvaG9va3MvbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUU3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBRzdELE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBZ0MsU0FBUyxDQUFDLENBQUE7QUFFL0U7MENBQzBDO0FBQzFDLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUdoQztJQUNDLE9BQU8sYUFBYSxDQUFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQ2xGLENBQUM7QUFFRDtnRkFDZ0Y7QUFDaEYsTUFBTSxVQUFVLFdBQVc7SUFDekIsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQzVDLE1BQU0sSUFBSSxHQUFHLGVBQWUsRUFBRSxDQUFBO0lBQzlCLE9BQU8sV0FBVyxDQUNoQixDQUFDLEdBQWUsRUFBRSxNQUErQixFQUFFLEVBQUUsQ0FDbkQsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsRUFDckQsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQ2pCLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgY3JlYXRlRWxlbWVudCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgZm9ybWF0TWVzc2FnZSB9IGZyb20gXCIuLi9oZWxwZXJzL21lc3NhZ2UtZm9ybWF0LnRzXCJcbmltcG9ydCB7IHVzZVNpdGVNZXNzYWdlcyB9IGZyb20gXCIuLi9oZWxwZXJzL3NpdGUtbWVzc2FnZXMudHNcIlxuaW1wb3J0IHR5cGUgeyBNZXNzYWdlS2V5LCBNZXNzYWdlcyB9IGZyb20gXCIuLi9tb2RlbHMvbWVzc2FnZS50c1wiXG5cbmNvbnN0IE1lc3NhZ2VzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8UGFydGlhbDxNZXNzYWdlcz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuLyoqIFN1cHBsaWVzIFVJIHN0cmluZ3MgdG8gTGl2ZW1hcmsgY29tcG9uZW50cyByZW5kZXJlZCBvdXRzaWRlIGEgTGl2ZW1hcmsgc2l0ZTsgYSBrZXlcbiAqICBsZWZ0IG91dCBrZWVwcyBpdHMgRW5nbGlzaCBkZWZhdWx0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE1lc3NhZ2VzUHJvdmlkZXIocHJvcHM6IHtcbiAgbWVzc2FnZXM6IFBhcnRpYWw8TWVzc2FnZXM+XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlXG59KSB7XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KE1lc3NhZ2VzQ29udGV4dCwgeyB2YWx1ZTogcHJvcHMubWVzc2FnZXMgfSwgcHJvcHMuY2hpbGRyZW4pXG59XG5cbi8qKiBBIHRyYW5zbGF0b3IgZm9yIExpdmVtYXJrJ3MgVUkgc3RyaW5nczogYHQoXCJ0b2MudGl0bGVcIilgLCB3aXRoIGB7bmFtZX1gIHBsYWNlaG9sZGVyc1xuICogIGZpbGxlZCBmcm9tIGB2YWx1ZXNgLiBBIGBNZXNzYWdlc1Byb3ZpZGVyYCB3aW5zIG92ZXIgdGhlIHNpdGUncyBsYW5ndWFnZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZXNzYWdlcygpIHtcbiAgY29uc3QgcHJvdmlkZWQgPSB1c2VDb250ZXh0KE1lc3NhZ2VzQ29udGV4dClcbiAgY29uc3Qgc2l0ZSA9IHVzZVNpdGVNZXNzYWdlcygpXG4gIHJldHVybiB1c2VDYWxsYmFjayhcbiAgICAoa2V5OiBNZXNzYWdlS2V5LCB2YWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PlxuICAgICAgZm9ybWF0TWVzc2FnZShwcm92aWRlZD8uW2tleV0gPz8gc2l0ZVtrZXldLCB2YWx1ZXMpLFxuICAgIFtwcm92aWRlZCwgc2l0ZV0sXG4gIClcbn1cbiJdfQ==
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** UI strings; each default is the English text, so `Messages.parse({})` is English. */
|
|
3
|
+
export type Messages = z.infer<typeof Messages>;
|
|
4
|
+
export declare const Messages: z.ZodObject<{
|
|
5
|
+
"nav.docs": z.ZodDefault<z.ZodString>;
|
|
6
|
+
"nav.more": z.ZodDefault<z.ZodString>;
|
|
7
|
+
"nav.navigation": z.ZodDefault<z.ZodString>;
|
|
8
|
+
"nav.chooseSection": z.ZodDefault<z.ZodString>;
|
|
9
|
+
"nav.section": z.ZodDefault<z.ZodString>;
|
|
10
|
+
"nav.toggleSubmenu": z.ZodDefault<z.ZodString>;
|
|
11
|
+
"nav.previous": z.ZodDefault<z.ZodString>;
|
|
12
|
+
"nav.next": z.ZodDefault<z.ZodString>;
|
|
13
|
+
"nav.backToTop": z.ZodDefault<z.ZodString>;
|
|
14
|
+
"nav.close": z.ZodDefault<z.ZodString>;
|
|
15
|
+
"nav.sections": z.ZodDefault<z.ZodString>;
|
|
16
|
+
"nav.articles": z.ZodDefault<z.ZodString>;
|
|
17
|
+
"nav.links": z.ZodDefault<z.ZodString>;
|
|
18
|
+
"nav.releases": z.ZodDefault<z.ZodString>;
|
|
19
|
+
"nav.posts": z.ZodDefault<z.ZodString>;
|
|
20
|
+
"nav.tags": z.ZodDefault<z.ZodString>;
|
|
21
|
+
"nav.breadcrumbs": z.ZodDefault<z.ZodString>;
|
|
22
|
+
"language.choose": z.ZodDefault<z.ZodString>;
|
|
23
|
+
"language.untranslated": z.ZodDefault<z.ZodString>;
|
|
24
|
+
"theme.change": z.ZodDefault<z.ZodString>;
|
|
25
|
+
"theme.light": z.ZodDefault<z.ZodString>;
|
|
26
|
+
"theme.dark": z.ZodDefault<z.ZodString>;
|
|
27
|
+
"theme.system": z.ZodDefault<z.ZodString>;
|
|
28
|
+
"shortcuts.title": z.ZodDefault<z.ZodString>;
|
|
29
|
+
"shortcuts.search": z.ZodDefault<z.ZodString>;
|
|
30
|
+
"shortcuts.theme": z.ZodDefault<z.ZodString>;
|
|
31
|
+
"shortcuts.sidebar": z.ZodDefault<z.ZodString>;
|
|
32
|
+
"shortcuts.scrollDown": z.ZodDefault<z.ZodString>;
|
|
33
|
+
"shortcuts.scrollUp": z.ZodDefault<z.ZodString>;
|
|
34
|
+
"shortcuts.top": z.ZodDefault<z.ZodString>;
|
|
35
|
+
"shortcuts.bottom": z.ZodDefault<z.ZodString>;
|
|
36
|
+
"shortcuts.next": z.ZodDefault<z.ZodString>;
|
|
37
|
+
"shortcuts.previous": z.ZodDefault<z.ZodString>;
|
|
38
|
+
"search.label": z.ZodDefault<z.ZodString>;
|
|
39
|
+
"search.description": z.ZodDefault<z.ZodString>;
|
|
40
|
+
"search.placeholder": z.ZodDefault<z.ZodString>;
|
|
41
|
+
"search.empty": z.ZodDefault<z.ZodString>;
|
|
42
|
+
"search.hint": z.ZodDefault<z.ZodString>;
|
|
43
|
+
"search.close": z.ZodDefault<z.ZodString>;
|
|
44
|
+
"search.pages": z.ZodDefault<z.ZodString>;
|
|
45
|
+
"search.button": z.ZodDefault<z.ZodString>;
|
|
46
|
+
"search.navigate": z.ZodDefault<z.ZodString>;
|
|
47
|
+
"search.select": z.ZodDefault<z.ZodString>;
|
|
48
|
+
"search.dismiss": z.ZodDefault<z.ZodString>;
|
|
49
|
+
"toc.title": z.ZodDefault<z.ZodString>;
|
|
50
|
+
"toc.contents": z.ZodDefault<z.ZodString>;
|
|
51
|
+
"toc.actions": z.ZodDefault<z.ZodString>;
|
|
52
|
+
"toc.inline": z.ZodDefault<z.ZodString>;
|
|
53
|
+
"page.updated": z.ZodDefault<z.ZodString>;
|
|
54
|
+
"page.published": z.ZodDefault<z.ZodString>;
|
|
55
|
+
"page.edit": z.ZodDefault<z.ZodString>;
|
|
56
|
+
"page.view": z.ZodDefault<z.ZodString>;
|
|
57
|
+
"page.copyMarkdown": z.ZodDefault<z.ZodString>;
|
|
58
|
+
"page.openChatGpt": z.ZodDefault<z.ZodString>;
|
|
59
|
+
"page.openClaude": z.ZodDefault<z.ZodString>;
|
|
60
|
+
"page.llmPrompt": z.ZodDefault<z.ZodString>;
|
|
61
|
+
"code.copy": z.ZodDefault<z.ZodString>;
|
|
62
|
+
"code.copied": z.ZodDefault<z.ZodString>;
|
|
63
|
+
"code.wrapOn": z.ZodDefault<z.ZodString>;
|
|
64
|
+
"code.wrapOff": z.ZodDefault<z.ZodString>;
|
|
65
|
+
"code.expand": z.ZodDefault<z.ZodString>;
|
|
66
|
+
"callout.note": z.ZodDefault<z.ZodString>;
|
|
67
|
+
"callout.info": z.ZodDefault<z.ZodString>;
|
|
68
|
+
"callout.tip": z.ZodDefault<z.ZodString>;
|
|
69
|
+
"callout.warning": z.ZodDefault<z.ZodString>;
|
|
70
|
+
"callout.danger": z.ZodDefault<z.ZodString>;
|
|
71
|
+
"blog.title": z.ZodDefault<z.ZodString>;
|
|
72
|
+
"blog.allPosts": z.ZodDefault<z.ZodString>;
|
|
73
|
+
"blog.recentPosts": z.ZodDefault<z.ZodString>;
|
|
74
|
+
"blog.rssFeed": z.ZodDefault<z.ZodString>;
|
|
75
|
+
"blog.tagged": z.ZodDefault<z.ZodString>;
|
|
76
|
+
"changelog.title": z.ZodDefault<z.ZodString>;
|
|
77
|
+
"changelog.allReleases": z.ZodDefault<z.ZodString>;
|
|
78
|
+
"changelog.recentReleases": z.ZodDefault<z.ZodString>;
|
|
79
|
+
"error.notFound": z.ZodDefault<z.ZodString>;
|
|
80
|
+
"error.goBack": z.ZodDefault<z.ZodString>;
|
|
81
|
+
"error.tryAgain": z.ZodDefault<z.ZodString>;
|
|
82
|
+
"error.home": z.ZodDefault<z.ZodString>;
|
|
83
|
+
"media.loadingDiagram": z.ZodDefault<z.ZodString>;
|
|
84
|
+
"media.youtube": z.ZodDefault<z.ZodString>;
|
|
85
|
+
"media.soundcloud": z.ZodDefault<z.ZodString>;
|
|
86
|
+
"footnote.missing": z.ZodDefault<z.ZodString>;
|
|
87
|
+
"footer.createdWith": z.ZodDefault<z.ZodString>;
|
|
88
|
+
}, z.core.$strict>;
|
|
89
|
+
/** A key of {@link Messages}. */
|
|
90
|
+
export type MessageKey = keyof Messages;
|
|
91
|
+
/** Per-key overrides a project sets for one language; unknown keys are rejected. */
|
|
92
|
+
export type MessageOverrides = z.infer<typeof MessageOverrides>;
|
|
93
|
+
export declare const MessageOverrides: z.ZodRecord<z.ZodEnum<{
|
|
94
|
+
"blog.allPosts": "blog.allPosts";
|
|
95
|
+
"blog.recentPosts": "blog.recentPosts";
|
|
96
|
+
"blog.rssFeed": "blog.rssFeed";
|
|
97
|
+
"blog.tagged": "blog.tagged";
|
|
98
|
+
"blog.title": "blog.title";
|
|
99
|
+
"callout.danger": "callout.danger";
|
|
100
|
+
"callout.info": "callout.info";
|
|
101
|
+
"callout.note": "callout.note";
|
|
102
|
+
"callout.tip": "callout.tip";
|
|
103
|
+
"callout.warning": "callout.warning";
|
|
104
|
+
"changelog.allReleases": "changelog.allReleases";
|
|
105
|
+
"changelog.recentReleases": "changelog.recentReleases";
|
|
106
|
+
"changelog.title": "changelog.title";
|
|
107
|
+
"code.copied": "code.copied";
|
|
108
|
+
"code.copy": "code.copy";
|
|
109
|
+
"code.expand": "code.expand";
|
|
110
|
+
"code.wrapOff": "code.wrapOff";
|
|
111
|
+
"code.wrapOn": "code.wrapOn";
|
|
112
|
+
"error.goBack": "error.goBack";
|
|
113
|
+
"error.home": "error.home";
|
|
114
|
+
"error.notFound": "error.notFound";
|
|
115
|
+
"error.tryAgain": "error.tryAgain";
|
|
116
|
+
"footer.createdWith": "footer.createdWith";
|
|
117
|
+
"footnote.missing": "footnote.missing";
|
|
118
|
+
"language.choose": "language.choose";
|
|
119
|
+
"language.untranslated": "language.untranslated";
|
|
120
|
+
"media.loadingDiagram": "media.loadingDiagram";
|
|
121
|
+
"media.soundcloud": "media.soundcloud";
|
|
122
|
+
"media.youtube": "media.youtube";
|
|
123
|
+
"nav.articles": "nav.articles";
|
|
124
|
+
"nav.backToTop": "nav.backToTop";
|
|
125
|
+
"nav.breadcrumbs": "nav.breadcrumbs";
|
|
126
|
+
"nav.chooseSection": "nav.chooseSection";
|
|
127
|
+
"nav.close": "nav.close";
|
|
128
|
+
"nav.docs": "nav.docs";
|
|
129
|
+
"nav.links": "nav.links";
|
|
130
|
+
"nav.more": "nav.more";
|
|
131
|
+
"nav.navigation": "nav.navigation";
|
|
132
|
+
"nav.next": "nav.next";
|
|
133
|
+
"nav.posts": "nav.posts";
|
|
134
|
+
"nav.previous": "nav.previous";
|
|
135
|
+
"nav.releases": "nav.releases";
|
|
136
|
+
"nav.section": "nav.section";
|
|
137
|
+
"nav.sections": "nav.sections";
|
|
138
|
+
"nav.tags": "nav.tags";
|
|
139
|
+
"nav.toggleSubmenu": "nav.toggleSubmenu";
|
|
140
|
+
"page.copyMarkdown": "page.copyMarkdown";
|
|
141
|
+
"page.edit": "page.edit";
|
|
142
|
+
"page.llmPrompt": "page.llmPrompt";
|
|
143
|
+
"page.openChatGpt": "page.openChatGpt";
|
|
144
|
+
"page.openClaude": "page.openClaude";
|
|
145
|
+
"page.published": "page.published";
|
|
146
|
+
"page.updated": "page.updated";
|
|
147
|
+
"page.view": "page.view";
|
|
148
|
+
"search.button": "search.button";
|
|
149
|
+
"search.close": "search.close";
|
|
150
|
+
"search.description": "search.description";
|
|
151
|
+
"search.dismiss": "search.dismiss";
|
|
152
|
+
"search.empty": "search.empty";
|
|
153
|
+
"search.hint": "search.hint";
|
|
154
|
+
"search.label": "search.label";
|
|
155
|
+
"search.navigate": "search.navigate";
|
|
156
|
+
"search.pages": "search.pages";
|
|
157
|
+
"search.placeholder": "search.placeholder";
|
|
158
|
+
"search.select": "search.select";
|
|
159
|
+
"shortcuts.bottom": "shortcuts.bottom";
|
|
160
|
+
"shortcuts.next": "shortcuts.next";
|
|
161
|
+
"shortcuts.previous": "shortcuts.previous";
|
|
162
|
+
"shortcuts.scrollDown": "shortcuts.scrollDown";
|
|
163
|
+
"shortcuts.scrollUp": "shortcuts.scrollUp";
|
|
164
|
+
"shortcuts.search": "shortcuts.search";
|
|
165
|
+
"shortcuts.sidebar": "shortcuts.sidebar";
|
|
166
|
+
"shortcuts.theme": "shortcuts.theme";
|
|
167
|
+
"shortcuts.title": "shortcuts.title";
|
|
168
|
+
"shortcuts.top": "shortcuts.top";
|
|
169
|
+
"theme.change": "theme.change";
|
|
170
|
+
"theme.dark": "theme.dark";
|
|
171
|
+
"theme.light": "theme.light";
|
|
172
|
+
"theme.system": "theme.system";
|
|
173
|
+
"toc.actions": "toc.actions";
|
|
174
|
+
"toc.contents": "toc.contents";
|
|
175
|
+
"toc.inline": "toc.inline";
|
|
176
|
+
"toc.title": "toc.title";
|
|
177
|
+
}> & z.core.$partial, z.ZodString>;
|