explico 0.11.1 → 0.13.0

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 (298) hide show
  1. package/CHANGELOG.md +1292 -1
  2. package/README.md +91 -13
  3. package/dist/compiler/astro.d.ts +11 -4
  4. package/dist/compiler/astro.js +48 -15
  5. package/dist/compiler/cli.d.ts +27 -12
  6. package/dist/compiler/cli.js +96 -25
  7. package/dist/compiler/collections.d.ts +33 -2
  8. package/dist/compiler/collections.js +91 -19
  9. package/dist/compiler/content-schema.d.ts +31 -0
  10. package/dist/compiler/content-schema.js +82 -0
  11. package/dist/compiler/content-schemas.d.ts +422 -0
  12. package/dist/compiler/content-schemas.js +229 -0
  13. package/dist/compiler/course-config.d.ts +1 -1
  14. package/dist/compiler/course-config.js +30 -2
  15. package/dist/compiler/exports/combined-html.d.ts +97 -0
  16. package/dist/compiler/exports/combined-html.js +492 -0
  17. package/dist/compiler/exports/download-index.d.ts +9 -0
  18. package/dist/compiler/exports/download-index.js +33 -0
  19. package/dist/compiler/exports/export-chapters.d.ts +98 -0
  20. package/dist/compiler/exports/export-chapters.js +164 -0
  21. package/dist/compiler/exports/export-pages.d.ts +48 -0
  22. package/dist/compiler/exports/export-pages.js +22 -0
  23. package/dist/compiler/exports/html-tree.d.ts +22 -0
  24. package/dist/compiler/exports/html-tree.js +47 -0
  25. package/dist/compiler/exports/latex/capture.d.ts +106 -0
  26. package/dist/compiler/exports/latex/capture.js +435 -0
  27. package/dist/compiler/exports/latex/compile.d.ts +73 -0
  28. package/dist/compiler/exports/latex/compile.js +115 -0
  29. package/dist/compiler/exports/latex/document.d.ts +102 -0
  30. package/dist/compiler/exports/latex/document.js +349 -0
  31. package/dist/compiler/exports/latex/explico.cls +415 -0
  32. package/dist/compiler/exports/latex/numbering.d.ts +18 -0
  33. package/dist/compiler/exports/latex/numbering.js +57 -0
  34. package/dist/compiler/exports/latex/serialize.d.ts +112 -0
  35. package/dist/compiler/exports/latex/serialize.js +606 -0
  36. package/dist/compiler/exports/latex-export.d.ts +44 -0
  37. package/dist/compiler/exports/latex-export.js +169 -0
  38. package/dist/compiler/exports/markdown/serialize.d.ts +51 -0
  39. package/dist/compiler/exports/markdown/serialize.js +527 -0
  40. package/dist/compiler/exports/markdown-export.d.ts +39 -0
  41. package/dist/compiler/exports/markdown-export.js +240 -0
  42. package/dist/compiler/exports/standalone-html.d.ts +15 -5
  43. package/dist/compiler/exports/standalone-html.js +23 -51
  44. package/dist/compiler/exports/static-tree.d.ts +253 -0
  45. package/dist/compiler/exports/static-tree.js +625 -0
  46. package/dist/compiler/exports/zip.d.ts +16 -0
  47. package/dist/compiler/exports/zip.js +72 -0
  48. package/dist/compiler/lesson-derivation.d.ts +8 -2
  49. package/dist/compiler/lesson-derivation.js +6 -7
  50. package/dist/compiler/manifest.d.ts +115 -8
  51. package/dist/compiler/manifest.js +221 -39
  52. package/dist/compiler/render-diagnostics.d.ts +65 -0
  53. package/dist/compiler/render-diagnostics.js +56 -0
  54. package/dist/compiler/resolution-report.d.ts +3 -1
  55. package/dist/{course-config-Dsnri9Tk.d.ts → course-config-rRtME5UV.d.ts} +56 -13
  56. package/dist/curriculum/validation.d.ts +9 -3
  57. package/dist/curriculum/validation.js +35 -17
  58. package/dist/reference/base-abbreviations.d.mts +2 -2
  59. package/dist/reference/base-abbreviations.mjs +2 -2
  60. package/dist/reference/base-operators.d.mts +8 -2
  61. package/dist/reference/base-operators.mjs +8 -10
  62. package/dist/reference/base-roman-labels.d.mts +4 -3
  63. package/dist/reference/base-roman-labels.mjs +4 -3
  64. package/dist/reference/citation-format.d.mts +35 -0
  65. package/dist/reference/citation-format.mjs +74 -0
  66. package/dist/reference/consistency.d.ts +5 -9
  67. package/dist/reference/consistency.js +34 -38
  68. package/dist/reference/curriculum-alignment.js +3 -24
  69. package/dist/reference/derived-entries.d.ts +45 -0
  70. package/dist/reference/derived-entries.js +50 -0
  71. package/dist/reference/derived-notation.d.mts +125 -0
  72. package/dist/reference/derived-notation.mjs +121 -0
  73. package/dist/reference/diagram-fit.d.ts +45 -0
  74. package/dist/reference/diagram-fit.js +54 -0
  75. package/dist/reference/diagram-layout.d.ts +59 -10
  76. package/dist/reference/diagram-layout.js +85 -24
  77. package/dist/reference/diagrams-validate.d.ts +1 -1
  78. package/dist/reference/equations-validate.d.ts +1 -1
  79. package/dist/reference/equations-validate.js +26 -1
  80. package/dist/reference/equations.d.mts +27 -0
  81. package/dist/reference/equations.mjs +120 -22
  82. package/dist/reference/examples-validate.d.ts +1 -1
  83. package/dist/reference/figure-fit.d.ts +70 -0
  84. package/dist/reference/figure-fit.js +60 -0
  85. package/dist/reference/figure-pictures.d.ts +27 -0
  86. package/dist/reference/figure-pictures.js +49 -0
  87. package/dist/reference/figure-symbols.d.ts +32 -0
  88. package/dist/reference/figure-symbols.js +55 -0
  89. package/dist/reference/figures-validate.d.ts +1 -1
  90. package/dist/reference/gate-abbreviations.d.ts +1 -1
  91. package/dist/reference/gate-abbreviations.js +1 -1
  92. package/dist/reference/gate-course-rules.d.ts +4 -3
  93. package/dist/reference/gate-course-rules.js +9 -4
  94. package/dist/reference/gate-heading-length.d.ts +2 -0
  95. package/dist/reference/gate-heading-length.js +7 -5
  96. package/dist/reference/gate-heading-structure.js +26 -0
  97. package/dist/reference/gate-indices.d.ts +35 -0
  98. package/dist/reference/gate-indices.js +299 -0
  99. package/dist/reference/gate-math.d.ts +32 -2
  100. package/dist/reference/gate-math.js +68 -12
  101. package/dist/reference/gate-mdx-expression.d.ts +17 -0
  102. package/dist/reference/gate-mdx-expression.js +29 -0
  103. package/dist/reference/gate-non-chapter-pages.d.ts +39 -0
  104. package/dist/reference/gate-non-chapter-pages.js +156 -0
  105. package/dist/reference/gate-part-pages.d.ts +4 -2
  106. package/dist/reference/gate-part-pages.js +2 -1
  107. package/dist/reference/gate-prop-text.d.ts +28 -0
  108. package/dist/reference/gate-prop-text.js +106 -0
  109. package/dist/reference/gate-prose-notation.d.ts +3 -1
  110. package/dist/reference/gate-prose-notation.js +4 -2
  111. package/dist/reference/gate-retired-keys.d.ts +35 -0
  112. package/dist/reference/gate-retired-keys.js +58 -0
  113. package/dist/reference/gloss.d.ts +2 -0
  114. package/dist/reference/katex-measure.d.ts +17 -0
  115. package/dist/reference/katex-measure.js +223 -0
  116. package/dist/reference/keyed-float-validate.js +12 -0
  117. package/dist/reference/keyed-jsx-floats.d.mts +2 -2
  118. package/dist/reference/keyed-jsx-floats.mjs +11 -14
  119. package/dist/reference/lab-katex-validate.d.ts +43 -0
  120. package/dist/reference/lab-katex-validate.js +96 -0
  121. package/dist/reference/lab-math-scope.d.ts +1 -0
  122. package/dist/reference/lab-math-scope.js +13 -2
  123. package/dist/reference/lint-ignore.js +1 -1
  124. package/dist/reference/math-glyphs.d.mts +94 -2
  125. package/dist/reference/math-glyphs.mjs +851 -46
  126. package/dist/reference/mixed-content.d.ts +8 -3
  127. package/dist/reference/mixed-content.js +4 -2
  128. package/dist/reference/page-notation.d.ts +39 -7
  129. package/dist/reference/page-notation.js +62 -10
  130. package/dist/reference/raw-floats.mjs +37 -13
  131. package/dist/reference/references.d.ts +11 -1
  132. package/dist/reference/references.js +6 -0
  133. package/dist/reference/registry.js +115 -11
  134. package/dist/reference/rehype-fail-katex-errors.d.mts +9 -0
  135. package/dist/reference/rehype-fail-katex-errors.mjs +19 -0
  136. package/dist/reference/rehype-heading-anchors.mjs +11 -1
  137. package/dist/reference/remark-citation.mjs +0 -0
  138. package/dist/reference/remark-notation.mjs +275 -23
  139. package/dist/reference/render-lab-math.d.ts +13 -2
  140. package/dist/reference/render-lab-math.js +18 -6
  141. package/dist/reference/sections-validate.d.ts +28 -3
  142. package/dist/reference/sections-validate.js +31 -4
  143. package/dist/reference/sections.d.mts +24 -6
  144. package/dist/reference/sections.mjs +92 -17
  145. package/dist/reference/tables-validate.d.ts +1 -1
  146. package/dist/reference/tables-validate.js +24 -1
  147. package/dist/reference/text-measure.d.ts +10 -0
  148. package/dist/reference/text-measure.js +41 -0
  149. package/dist/reference/text-widths.d.ts +10 -0
  150. package/dist/reference/text-widths.js +1238 -0
  151. package/dist/reference/types.d.ts +64 -8
  152. package/dist/rules/catalog.js +223 -32
  153. package/dist/rules/in-effect.d.ts +1 -1
  154. package/dist/rules/rules.schema.json +100 -27
  155. package/dist/rules/settings.d.ts +1 -1
  156. package/dist/rules/settings.js +7 -0
  157. package/dist/session/PreferenceStore.d.ts +18 -1
  158. package/dist/session/PreferenceStore.js +29 -1
  159. package/docs/authoring/README.md +33 -21
  160. package/docs/authoring/agents.md +38 -7
  161. package/docs/authoring/components.md +115 -10
  162. package/docs/authoring/migrating.md +878 -0
  163. package/docs/authoring/notation.md +285 -30
  164. package/docs/authoring/retired.md +1 -0
  165. package/docs/authoring/structure-rules.md +84 -45
  166. package/docs/authoring/structure.md +67 -2
  167. package/docs/authoring/visualizations.md +167 -25
  168. package/package.json +12 -7
  169. package/src/compiler/astro.ts +72 -21
  170. package/src/compiler/cli.ts +143 -35
  171. package/src/compiler/collections.ts +158 -27
  172. package/src/compiler/content-schema.ts +108 -0
  173. package/src/compiler/content-schemas.ts +391 -0
  174. package/src/compiler/course-config.ts +86 -15
  175. package/src/compiler/exports/combined-html.ts +669 -0
  176. package/src/compiler/exports/download-index.ts +36 -0
  177. package/src/compiler/exports/export-chapters.ts +233 -0
  178. package/src/compiler/exports/export-pages.ts +44 -0
  179. package/src/compiler/exports/html-tree.ts +62 -0
  180. package/src/compiler/exports/latex/capture.ts +651 -0
  181. package/src/compiler/exports/latex/compile.ts +168 -0
  182. package/src/compiler/exports/latex/document.ts +479 -0
  183. package/src/compiler/exports/latex/explico.cls +415 -0
  184. package/src/compiler/exports/latex/numbering.ts +74 -0
  185. package/src/compiler/exports/latex/serialize.ts +787 -0
  186. package/src/compiler/exports/latex/texlive-packages.txt +76 -0
  187. package/src/compiler/exports/latex-export.ts +255 -0
  188. package/src/compiler/exports/markdown/serialize.ts +632 -0
  189. package/src/compiler/exports/markdown-export.ts +329 -0
  190. package/src/compiler/exports/standalone-html.ts +39 -70
  191. package/src/compiler/exports/static-tree.ts +944 -0
  192. package/src/compiler/exports/zip.ts +88 -0
  193. package/src/compiler/lesson-derivation.ts +13 -8
  194. package/src/compiler/manifest.ts +387 -40
  195. package/src/compiler/render-diagnostics.ts +111 -0
  196. package/src/components/CourseContents.astro +6 -0
  197. package/src/components/HoverPanel.astro +204 -6
  198. package/src/components/PartOverview.astro +18 -9
  199. package/src/components/abbreviation/AbbreviationGlossary.astro +6 -2
  200. package/src/components/abbreviation/AbbreviationLayer.astro +21 -12
  201. package/src/components/assessments/AssessmentRunner.tsx +7 -1
  202. package/src/components/assessments/AssessmentSet.astro +14 -1
  203. package/src/components/block-heading.ts +38 -0
  204. package/src/components/card-arrow.ts +18 -4
  205. package/src/components/card-carry.ts +406 -0
  206. package/src/components/card-drag.ts +1 -30
  207. package/src/components/card-fetch.ts +87 -0
  208. package/src/components/card-manager.ts +1222 -38
  209. package/src/components/card-memory.ts +5 -1
  210. package/src/components/card-placement.ts +211 -13
  211. package/src/components/card-side.ts +281 -31
  212. package/src/components/citation/CitationLayer.astro +45 -40
  213. package/src/components/diagram/Diagram.astro +123 -44
  214. package/src/components/disclosure/print-as-shown.ts +42 -6
  215. package/src/components/figure/Figure.astro +17 -1
  216. package/src/components/figure/FloatCaption.astro +4 -17
  217. package/src/components/figure/figure-state.ts +26 -17
  218. package/src/components/float-toolbar.ts +274 -0
  219. package/src/components/memo/Memo.astro +21 -10
  220. package/src/components/memo/ShortNote.astro +4 -0
  221. package/src/components/notation/NotationGlossary.astro +22 -17
  222. package/src/components/notation/NotationLayer.astro +300 -79
  223. package/src/components/notation/NotationMath.astro +8 -1
  224. package/src/components/notation/render-notation-math.ts +51 -5
  225. package/src/components/readable-text.ts +25 -0
  226. package/src/components/reference/FloatRefLayer.astro +162 -89
  227. package/src/components/starlight/HeadingAnchorEnhancer.astro +13 -8
  228. package/src/components/starlight/KeyedFloatEnhancer.astro +28 -9
  229. package/src/components/starlight/LayoutPageSidebar.astro +17 -3
  230. package/src/components/starlight/LayoutSocialIcons.astro +79 -29
  231. package/src/components/starlight/LessonExportActions.astro +384 -310
  232. package/src/components/starlight/LessonFooter.astro +66 -8
  233. package/src/components/starlight/PrintController.astro +28 -0
  234. package/src/components/starlight/TextSizeControl.astro +137 -0
  235. package/src/components/starlight/print-controller.ts +380 -0
  236. package/src/components/starlight/section-summary.ts +13 -5
  237. package/src/components/table/Table.astro +14 -22
  238. package/src/components/table/table-truncation.ts +15 -0
  239. package/src/content-config.ts +20 -312
  240. package/src/curriculum/validation.ts +72 -24
  241. package/src/reference/base-abbreviations.mjs +2 -2
  242. package/src/reference/base-operators.mjs +8 -10
  243. package/src/reference/base-roman-labels.mjs +4 -3
  244. package/src/reference/citation-format.mjs +74 -0
  245. package/src/reference/consistency.ts +47 -61
  246. package/src/reference/curriculum-alignment.ts +4 -41
  247. package/src/reference/derived-entries.ts +68 -0
  248. package/src/reference/derived-notation.mjs +121 -0
  249. package/src/reference/diagram-fit.ts +104 -0
  250. package/src/reference/diagram-layout.ts +182 -51
  251. package/src/reference/diagrams-validate.ts +2 -1
  252. package/src/reference/equations-validate.ts +41 -2
  253. package/src/reference/equations.mjs +120 -22
  254. package/src/reference/examples-validate.ts +1 -0
  255. package/src/reference/figure-fit.ts +139 -0
  256. package/src/reference/figure-pictures.ts +96 -0
  257. package/src/reference/figure-symbols.ts +117 -0
  258. package/src/reference/figures-validate.ts +2 -1
  259. package/src/reference/gate-abbreviations.ts +1 -1
  260. package/src/reference/gate-course-rules.ts +22 -7
  261. package/src/reference/gate-heading-length.ts +25 -7
  262. package/src/reference/gate-heading-structure.ts +40 -1
  263. package/src/reference/gate-indices.ts +470 -0
  264. package/src/reference/gate-math.ts +102 -13
  265. package/src/reference/gate-mdx-expression.ts +45 -0
  266. package/src/reference/gate-non-chapter-pages.ts +241 -0
  267. package/src/reference/gate-part-pages.ts +1 -1
  268. package/src/reference/gate-prop-text.ts +145 -0
  269. package/src/reference/gate-prose-notation.ts +19 -5
  270. package/src/reference/gate-retired-keys.ts +101 -0
  271. package/src/reference/gloss.ts +2 -0
  272. package/src/reference/katex-measure.ts +384 -0
  273. package/src/reference/keyed-float-validate.ts +22 -0
  274. package/src/reference/keyed-jsx-floats.mjs +11 -14
  275. package/src/reference/lab-katex-validate.ts +156 -0
  276. package/src/reference/lab-math-scope.ts +15 -1
  277. package/src/reference/lint-ignore.ts +4 -1
  278. package/src/reference/math-glyphs.mjs +851 -46
  279. package/src/reference/mixed-content.ts +11 -2
  280. package/src/reference/page-notation.ts +114 -14
  281. package/src/reference/raw-floats.mjs +37 -13
  282. package/src/reference/references.ts +14 -0
  283. package/src/reference/registry.ts +170 -9
  284. package/src/reference/rehype-fail-katex-errors.mjs +19 -0
  285. package/src/reference/rehype-heading-anchors.mjs +11 -1
  286. package/src/reference/remark-citation.mjs +0 -0
  287. package/src/reference/remark-notation.mjs +275 -23
  288. package/src/reference/render-lab-math.ts +40 -5
  289. package/src/reference/sections-validate.ts +67 -3
  290. package/src/reference/sections.mjs +92 -17
  291. package/src/reference/tables-validate.ts +40 -2
  292. package/src/reference/text-measure.ts +63 -0
  293. package/src/reference/text-widths.ts +133 -0
  294. package/src/reference/types.ts +75 -8
  295. package/src/rules/catalog.ts +241 -31
  296. package/src/rules/settings.ts +10 -0
  297. package/src/session/PreferenceStore.ts +53 -0
  298. package/src/styles/global.css +322 -83
@@ -0,0 +1,253 @@
1
+ import { HtmlElement, HtmlNode } from './html-tree.js';
2
+ import 'parse5';
3
+
4
+ /**
5
+ * explico's static reading tree: a built page reduced to what a reader reads,
6
+ * with explico's meaning kept — a float with its number and captions, a
7
+ * cross-reference by its target, a check by its anchor. Print exporters (the
8
+ * LaTeX source now, Markdown later) serialize this tree; none of them
9
+ * re-walks `content/` or recomputes a number.
10
+ *
11
+ * It is read off Astro's static output, where every disclosure's body, every
12
+ * table row and every formula's TeX already sit in the markup, whatever the
13
+ * reader would see collapsed. What the static page does not hold — a lab's
14
+ * drawing, a check's answers — comes from the capture pass and the manifest.
15
+ *
16
+ * Math keeps the author's `\explain{key}{…}` and `\slot{key}{…}` markers (the
17
+ * KaTeX annotation, not the stripped `data-latex`): a printer that understands
18
+ * them (explico's LaTeX class) needs no stripping, and one that doesn't strips
19
+ * them itself.
20
+ */
21
+ type RefKind = 'equation' | 'figure' | 'table' | 'diagram' | 'section' | 'example' | 'check' | 'memo' | 'anchor' | 'page';
22
+ /** A link target inside the course: a page route (base-relative, no slashes at the ends) and an anchor. */
23
+ interface CourseTarget {
24
+ readonly route: string;
25
+ readonly anchor: string;
26
+ }
27
+ type Inline = {
28
+ readonly kind: 'text';
29
+ readonly value: string;
30
+ } | {
31
+ readonly kind: 'emphasis';
32
+ readonly children: readonly Inline[];
33
+ } | {
34
+ readonly kind: 'strong';
35
+ readonly children: readonly Inline[];
36
+ } | {
37
+ readonly kind: 'superscript';
38
+ readonly children: readonly Inline[];
39
+ } | {
40
+ readonly kind: 'subscript';
41
+ readonly children: readonly Inline[];
42
+ } | {
43
+ readonly kind: 'code';
44
+ readonly value: string;
45
+ } | {
46
+ readonly kind: 'math';
47
+ readonly tex: string;
48
+ } | {
49
+ readonly kind: 'break';
50
+ } | {
51
+ readonly kind: 'link';
52
+ readonly href: string;
53
+ readonly children: readonly Inline[];
54
+ } | {
55
+ readonly kind: 'ref';
56
+ readonly refKind: RefKind;
57
+ readonly target: CourseTarget;
58
+ readonly children: readonly Inline[];
59
+ } | {
60
+ readonly kind: 'term';
61
+ readonly key: string;
62
+ readonly children: readonly Inline[];
63
+ } | {
64
+ readonly kind: 'cite';
65
+ readonly number: string;
66
+ readonly anchor: string;
67
+ readonly sourceId?: string;
68
+ readonly locator?: string;
69
+ } | {
70
+ readonly kind: 'memoMark';
71
+ readonly anchor: string;
72
+ readonly label: string;
73
+ } | {
74
+ readonly kind: 'noteMark';
75
+ readonly anchor: string;
76
+ readonly children: readonly Inline[];
77
+ };
78
+ interface TableCell {
79
+ readonly header: boolean;
80
+ readonly colspan: number;
81
+ readonly rowspan: number;
82
+ readonly align?: 'left' | 'center' | 'right';
83
+ readonly children: readonly Inline[];
84
+ }
85
+ interface DiagramNodeShape {
86
+ readonly x: number;
87
+ readonly y: number;
88
+ readonly width: number;
89
+ readonly height: number;
90
+ readonly radius: number;
91
+ readonly text?: string;
92
+ readonly tex?: string;
93
+ }
94
+ interface DiagramGeometry {
95
+ readonly width: number;
96
+ readonly height: number;
97
+ readonly nodes: readonly DiagramNodeShape[];
98
+ /** Each edge as its polyline, start to end; the arrowhead sits at the end. */
99
+ readonly edges: readonly (readonly (readonly [number, number])[])[];
100
+ }
101
+ /** What a figure shows: an image file, or something only a browser can draw. */
102
+ type FigurePicture = {
103
+ readonly kind: 'image';
104
+ readonly src: string;
105
+ readonly alt: string;
106
+ } | {
107
+ readonly kind: 'diagram';
108
+ readonly geometry: DiagramGeometry;
109
+ } | {
110
+ readonly kind: 'capture';
111
+ };
112
+ interface FloatBase {
113
+ /** The float's anchor id on its page (`fig-…`, `tab-…`, `dia-…`). */
114
+ readonly anchor: string;
115
+ readonly number: string;
116
+ readonly key?: string;
117
+ readonly short?: string;
118
+ /** The long caption. */
119
+ readonly caption: readonly Inline[];
120
+ }
121
+ type Block = {
122
+ readonly kind: 'heading';
123
+ readonly level: number;
124
+ readonly anchor?: string;
125
+ readonly number?: string;
126
+ readonly children: readonly Inline[];
127
+ } | {
128
+ readonly kind: 'paragraph';
129
+ readonly children: readonly Inline[];
130
+ } | {
131
+ readonly kind: 'list';
132
+ readonly ordered: boolean;
133
+ readonly start?: number;
134
+ readonly items: readonly (readonly Block[])[];
135
+ } | {
136
+ readonly kind: 'equation';
137
+ readonly anchor: string;
138
+ readonly number: string;
139
+ readonly key?: string;
140
+ readonly tex: string;
141
+ } | {
142
+ readonly kind: 'displayMath';
143
+ readonly tex: string;
144
+ } | (FloatBase & {
145
+ readonly kind: 'figure';
146
+ /** The live clause a lab writes after its caption; empty in the static page. */
147
+ readonly live: readonly Inline[];
148
+ readonly picture: FigurePicture;
149
+ /** The lab's own accessible label, when it gives one. */
150
+ readonly alt?: string;
151
+ }) | (FloatBase & {
152
+ readonly kind: 'table';
153
+ readonly head: readonly (readonly TableCell[])[];
154
+ readonly body: readonly (readonly TableCell[])[];
155
+ }) | (FloatBase & {
156
+ readonly kind: 'diagram';
157
+ readonly geometry: DiagramGeometry;
158
+ }) | {
159
+ readonly kind: 'memo';
160
+ readonly anchor: string;
161
+ readonly label: string;
162
+ readonly short?: string;
163
+ readonly title: readonly Inline[];
164
+ readonly children: readonly Block[];
165
+ } | {
166
+ readonly kind: 'note';
167
+ readonly anchor: string;
168
+ readonly title: string;
169
+ readonly children: readonly Block[];
170
+ } | {
171
+ readonly kind: 'aside';
172
+ readonly variant: string;
173
+ readonly title: readonly Inline[];
174
+ readonly children: readonly Block[];
175
+ } | {
176
+ readonly kind: 'fold';
177
+ readonly title?: readonly Inline[];
178
+ readonly children: readonly Block[];
179
+ } | {
180
+ readonly kind: 'examples';
181
+ readonly anchor: string;
182
+ readonly number: string;
183
+ readonly title: readonly Inline[];
184
+ readonly items: readonly {
185
+ readonly title: readonly Inline[];
186
+ readonly children: readonly Block[];
187
+ }[];
188
+ } | {
189
+ readonly kind: 'check';
190
+ readonly anchor: string;
191
+ readonly number: string;
192
+ readonly assessmentId: string;
193
+ readonly title: readonly Inline[];
194
+ } | {
195
+ readonly kind: 'quote';
196
+ readonly children: readonly Block[];
197
+ } | {
198
+ readonly kind: 'image';
199
+ readonly src: string;
200
+ readonly alt: string;
201
+ } | {
202
+ readonly kind: 'code';
203
+ readonly value: string;
204
+ } | {
205
+ readonly kind: 'rule';
206
+ } | {
207
+ readonly kind: 'references';
208
+ readonly items: readonly {
209
+ readonly number: string;
210
+ readonly anchor: string;
211
+ readonly children: readonly Inline[];
212
+ }[];
213
+ };
214
+ interface NotationEntry {
215
+ readonly key: string;
216
+ readonly anchor: string;
217
+ readonly symbolTex?: string;
218
+ readonly label: readonly Inline[];
219
+ readonly summary: readonly Inline[];
220
+ readonly units?: readonly Inline[];
221
+ readonly formulaTex?: string;
222
+ }
223
+ interface StaticPage {
224
+ /** The page's docs slug, e.g. `projectiles/optimal-launch-angle`. */
225
+ readonly slug: string;
226
+ /** Base-relative route of the page, e.g. `projectiles/optimal-launch-angle`. */
227
+ readonly route: string;
228
+ readonly title: string;
229
+ readonly blocks: readonly Block[];
230
+ /** "Notation used on this page", in the page's order. */
231
+ readonly notation: readonly NotationEntry[];
232
+ /** The notation list's page-specific remarks ("On this page, ′ is not an operator …"). */
233
+ readonly notationRemarks: readonly (readonly Inline[])[];
234
+ }
235
+ interface ReadContext {
236
+ readonly route: string;
237
+ readonly base: string;
238
+ }
239
+ /** All text below `node`, as a reader sees it: no screen-reader-only or hidden helpers. */
240
+ declare function readableText(node: HtmlNode): string;
241
+ /** Resolve a link to a course target, or `undefined` when it leaves the course. */
242
+ declare function courseTarget(href: string, context: ReadContext): CourseTarget | undefined;
243
+ /** Node boxes and edge polylines of a built `<Diagram>`'s SVG. */
244
+ declare function readDiagramGeometry(figure: HtmlElement): DiagramGeometry | undefined;
245
+ /**
246
+ * Inline content from an HTML fragment of a page — a lab's live caption
247
+ * clause, which only exists once the lab has run.
248
+ */
249
+ declare function readInlineFragment(html: string, route: string, base?: string): Inline[];
250
+ /** Read the static reading tree of one built page. */
251
+ declare function readStaticPage(html: string, slug: string, route: string): StaticPage;
252
+
253
+ export { type Block, type CourseTarget, type DiagramGeometry, type DiagramNodeShape, type FigurePicture, type Inline, type NotationEntry, type RefKind, type StaticPage, type TableCell, courseTarget, readDiagramGeometry, readInlineFragment, readStaticPage, readableText };