@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.
Files changed (184) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +5 -2
  3. package/build/actions/markdown/compile.d.ts +27 -0
  4. package/build/actions/markdown/compile.js +48 -0
  5. package/build/actions/processor/create.d.ts +17 -0
  6. package/build/actions/processor/create.js +212 -0
  7. package/build/components/Abbr.d.ts +5 -0
  8. package/build/components/Abbr.js +7 -0
  9. package/build/components/AnsiCode.d.ts +4 -0
  10. package/build/components/AnsiCode.js +7 -0
  11. package/build/components/Audio.d.ts +4 -0
  12. package/build/components/Audio.js +9 -0
  13. package/build/components/Badge.d.ts +5 -0
  14. package/build/components/Badge.js +7 -0
  15. package/build/components/Button.d.ts +7 -0
  16. package/build/components/Button.js +11 -0
  17. package/build/components/Callout.d.ts +8 -0
  18. package/build/components/Callout.js +41 -0
  19. package/build/components/Card.d.ts +7 -0
  20. package/build/components/Card.js +16 -0
  21. package/build/components/Cards.d.ts +4 -0
  22. package/build/components/Cards.js +6 -0
  23. package/build/components/CodeBlock.d.ts +1 -0
  24. package/build/components/CodeBlock.js +50 -0
  25. package/build/components/CodeTabs.d.ts +6 -0
  26. package/build/components/CodeTabs.js +48 -0
  27. package/build/components/Column.d.ts +4 -0
  28. package/build/components/Column.js +6 -0
  29. package/build/components/Columns.d.ts +5 -0
  30. package/build/components/Columns.js +8 -0
  31. package/build/components/DefinitionList.d.ts +7 -0
  32. package/build/components/DefinitionList.js +14 -0
  33. package/build/components/Details.d.ts +5 -0
  34. package/build/components/Details.js +10 -0
  35. package/build/components/Filetree.d.ts +4 -0
  36. package/build/components/Filetree.js +22 -0
  37. package/build/components/FootnoteRef.d.ts +4 -0
  38. package/build/components/FootnoteRef.js +33 -0
  39. package/build/components/Heading.d.ts +8 -0
  40. package/build/components/Heading.js +18 -0
  41. package/build/components/Icon.d.ts +5 -0
  42. package/build/components/Icon.js +10 -0
  43. package/build/components/Markdown.d.ts +13 -0
  44. package/build/components/Markdown.js +75 -0
  45. package/build/components/Mermaid.d.ts +4 -0
  46. package/build/components/Mermaid.js +10 -0
  47. package/build/components/MermaidRenderer.d.ts +4 -0
  48. package/build/components/MermaidRenderer.js +44 -0
  49. package/build/components/PackageTabs.d.ts +9 -0
  50. package/build/components/PackageTabs.js +26 -0
  51. package/build/components/SortableTable.d.ts +5 -0
  52. package/build/components/SortableTable.js +63 -0
  53. package/build/components/Tab.d.ts +5 -0
  54. package/build/components/Tab.js +6 -0
  55. package/build/components/Tabs.d.ts +5 -0
  56. package/build/components/Tabs.js +46 -0
  57. package/build/components/Toc.d.ts +4 -0
  58. package/build/components/Toc.js +14 -0
  59. package/build/components/Video.d.ts +4 -0
  60. package/build/components/Video.js +13 -0
  61. package/build/components/ZoomImage.d.ts +4 -0
  62. package/build/components/ZoomImage.js +26 -0
  63. package/build/elements/badge.d.ts +7 -0
  64. package/build/elements/badge.js +36 -0
  65. package/build/elements/button.d.ts +8 -0
  66. package/build/elements/button.js +37 -0
  67. package/build/elements/card.d.ts +11 -0
  68. package/build/elements/card.js +25 -0
  69. package/build/elements/collapsible.d.ts +5 -0
  70. package/build/elements/collapsible.js +13 -0
  71. package/build/elements/hover-card.d.ts +5 -0
  72. package/build/elements/hover-card.js +14 -0
  73. package/build/elements/separator.d.ts +3 -0
  74. package/build/elements/separator.js +8 -0
  75. package/build/elements/table.d.ts +9 -0
  76. package/build/elements/table.js +28 -0
  77. package/build/elements/tooltip.d.ts +6 -0
  78. package/build/elements/tooltip.js +17 -0
  79. package/build/helpers/ansi.d.ts +3 -0
  80. package/build/helpers/ansi.js +208 -0
  81. package/build/helpers/article-link.d.ts +7 -0
  82. package/build/helpers/article-link.js +8 -0
  83. package/build/helpers/code-icon.d.ts +2 -0
  84. package/build/helpers/code-icon.js +57 -0
  85. package/build/helpers/content-warnings.d.ts +8 -0
  86. package/build/helpers/content-warnings.js +47 -0
  87. package/build/helpers/dynamic-icon-resolver.d.ts +5 -0
  88. package/build/helpers/dynamic-icon-resolver.js +11 -0
  89. package/build/helpers/dynamic-icon.d.ts +5 -0
  90. package/build/helpers/dynamic-icon.js +14 -0
  91. package/build/helpers/frontmatter.d.ts +5 -0
  92. package/build/helpers/frontmatter.js +16 -0
  93. package/build/helpers/icon-names.d.ts +11 -0
  94. package/build/helpers/icon-names.js +35 -0
  95. package/build/helpers/message-format.d.ts +2 -0
  96. package/build/helpers/message-format.js +7 -0
  97. package/build/helpers/node-text.d.ts +9 -0
  98. package/build/helpers/node-text.js +9 -0
  99. package/build/helpers/site-messages.d.ts +86 -0
  100. package/build/helpers/site-messages.js +7 -0
  101. package/build/helpers/toc-context.d.ts +5 -0
  102. package/build/helpers/toc-context.js +8 -0
  103. package/build/helpers/toc-outline.d.ts +3 -0
  104. package/build/helpers/toc-outline.js +16 -0
  105. package/build/helpers/youtube-id.d.ts +2 -0
  106. package/build/helpers/youtube-id.js +25 -0
  107. package/build/hooks/icons.d.ts +13 -0
  108. package/build/hooks/icons.js +12 -0
  109. package/build/hooks/messages.d.ts +95 -0
  110. package/build/hooks/messages.js +17 -0
  111. package/build/models/message.d.ts +177 -0
  112. package/build/models/message.js +88 -0
  113. package/build/models/plugins.d.ts +10 -0
  114. package/build/models/plugins.js +6 -0
  115. package/build/models/theme.d.ts +76 -0
  116. package/build/models/theme.js +71 -0
  117. package/build/models/toc.d.ts +5 -0
  118. package/build/models/toc.js +2 -0
  119. package/build/plugins/twoslash.d.ts +13 -0
  120. package/build/plugins/twoslash.js +146 -0
  121. package/package.json +63 -3
  122. package/source/actions/markdown/compile.ts +82 -0
  123. package/source/actions/processor/create.ts +235 -0
  124. package/source/components/Abbr.tsx +13 -0
  125. package/source/components/AnsiCode.tsx +17 -0
  126. package/source/components/Audio.tsx +18 -0
  127. package/source/components/Badge.tsx +9 -0
  128. package/source/components/Button.tsx +33 -0
  129. package/source/components/Callout.tsx +68 -0
  130. package/source/components/Card.tsx +48 -0
  131. package/source/components/Cards.tsx +8 -0
  132. package/source/components/CodeBlock.tsx +144 -0
  133. package/source/components/CodeTabs.tsx +81 -0
  134. package/source/components/Column.tsx +4 -0
  135. package/source/components/Columns.tsx +10 -0
  136. package/source/components/DefinitionList.tsx +18 -0
  137. package/source/components/Details.tsx +30 -0
  138. package/source/components/Filetree.tsx +63 -0
  139. package/source/components/FootnoteRef.tsx +52 -0
  140. package/source/components/Heading.tsx +20 -0
  141. package/source/components/Icon.tsx +10 -0
  142. package/source/components/Markdown.tsx +89 -0
  143. package/source/components/Mermaid.tsx +20 -0
  144. package/source/components/MermaidRenderer.tsx +48 -0
  145. package/source/components/PackageTabs.tsx +72 -0
  146. package/source/components/SortableTable.tsx +81 -0
  147. package/source/components/Tab.tsx +4 -0
  148. package/source/components/Tabs.tsx +75 -0
  149. package/source/components/Toc.tsx +30 -0
  150. package/source/components/Video.tsx +28 -0
  151. package/source/components/ZoomImage.tsx +25 -0
  152. package/source/elements/badge.tsx +53 -0
  153. package/source/elements/button.tsx +61 -0
  154. package/source/elements/card.tsx +102 -0
  155. package/source/elements/collapsible.tsx +15 -0
  156. package/source/elements/hover-card.tsx +47 -0
  157. package/source/elements/separator.tsx +22 -0
  158. package/source/elements/table.tsx +103 -0
  159. package/source/elements/tooltip.tsx +60 -0
  160. package/source/helpers/ansi.ts +210 -0
  161. package/source/helpers/article-link.ts +11 -0
  162. package/source/helpers/code-icon.ts +59 -0
  163. package/source/helpers/content-warnings.ts +56 -0
  164. package/source/helpers/dynamic-icon-resolver.tsx +9 -0
  165. package/source/helpers/dynamic-icon.tsx +19 -0
  166. package/source/helpers/frontmatter.ts +16 -0
  167. package/source/helpers/icon-names.ts +37 -0
  168. package/source/helpers/message-format.ts +5 -0
  169. package/source/helpers/node-text.ts +14 -0
  170. package/source/helpers/site-messages.ts +8 -0
  171. package/source/helpers/toc-context.ts +10 -0
  172. package/source/helpers/toc-outline.ts +23 -0
  173. package/source/helpers/youtube-id.ts +23 -0
  174. package/source/hooks/icons.ts +18 -0
  175. package/source/hooks/messages.ts +28 -0
  176. package/source/models/message.ts +96 -0
  177. package/source/models/plugins.ts +11 -0
  178. package/source/models/theme.ts +78 -0
  179. package/source/models/toc.ts +5 -0
  180. package/source/plugins/twoslash.ts +163 -0
  181. package/source/standalone.css +7 -0
  182. package/source/styles/general.css +214 -0
  183. package/source/styles/markdown.css +231 -0
  184. 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,3 @@
1
+ import type { TocItem } from "../models/toc.ts";
2
+ /** The h2 to h4 headings of html.extractToc's nested outline, in document order. */
3
+ export declare function flattenToc(toc: unknown): TocItem[];
@@ -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,2 @@
1
+ /** Derives the video id from a YouTube watch, youtu.be, embed, shorts or live URL */
2
+ export declare function parseYoutubeId(url: string): string | undefined;
@@ -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>;