explico 0.4.0 → 0.5.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 (143) hide show
  1. package/CHANGELOG.md +273 -1
  2. package/README.md +103 -8
  3. package/dist/compiler/astro.d.ts +9 -1
  4. package/dist/compiler/astro.js +182 -3
  5. package/dist/compiler/cli.d.ts +13 -0
  6. package/dist/compiler/cli.js +28 -4
  7. package/dist/compiler/collections.d.ts +3 -2
  8. package/dist/compiler/collections.js +28 -1
  9. package/dist/compiler/course-config.d.ts +58 -1
  10. package/dist/compiler/course-config.js +28 -1
  11. package/dist/compiler/exports/standalone-html.d.ts +34 -0
  12. package/dist/compiler/exports/standalone-html.js +803 -0
  13. package/dist/compiler/manifest.d.ts +90 -6
  14. package/dist/compiler/manifest.js +150 -17
  15. package/dist/compiler/resolution-report.d.ts +4 -0
  16. package/dist/reference/base-abbreviations.d.mts +30 -0
  17. package/dist/reference/base-abbreviations.mjs +60 -0
  18. package/dist/reference/base-operators.d.mts +15 -0
  19. package/dist/reference/base-operators.mjs +40 -0
  20. package/dist/reference/base-roman-labels.d.mts +35 -0
  21. package/dist/reference/base-roman-labels.mjs +43 -0
  22. package/dist/reference/consistency.d.ts +8 -2
  23. package/dist/reference/consistency.js +50 -3
  24. package/dist/reference/diagrams-validate.d.ts +21 -0
  25. package/dist/reference/diagrams-validate.js +13 -0
  26. package/dist/reference/equations.d.mts +10 -15
  27. package/dist/reference/equations.mjs +67 -14
  28. package/dist/reference/gate-abbreviations.d.ts +17 -0
  29. package/dist/reference/gate-abbreviations.js +64 -0
  30. package/dist/reference/gate-math.d.ts +28 -5
  31. package/dist/reference/gate-math.js +5 -2
  32. package/dist/reference/gate-prose-notation.d.ts +60 -0
  33. package/dist/reference/gate-prose-notation.js +125 -0
  34. package/dist/reference/keyed-float-validate.d.ts +5 -5
  35. package/dist/reference/keyed-jsx-floats.d.mts +7 -12
  36. package/dist/reference/keyed-jsx-floats.mjs +50 -25
  37. package/dist/reference/knowledge-checks-validate.d.ts +35 -0
  38. package/dist/reference/knowledge-checks-validate.js +78 -0
  39. package/dist/reference/knowledge-checks.d.mts +25 -0
  40. package/dist/reference/knowledge-checks.mjs +45 -0
  41. package/dist/reference/lab-math-scope.d.ts +9 -1
  42. package/dist/reference/lab-math-scope.js +32 -4
  43. package/dist/reference/math-glyphs.d.mts +30 -0
  44. package/dist/reference/math-glyphs.mjs +367 -0
  45. package/dist/reference/mdx-attributes.d.mts +13 -0
  46. package/dist/reference/mdx-attributes.mjs +38 -0
  47. package/dist/reference/mixed-content.d.ts +17 -0
  48. package/dist/reference/mixed-content.js +29 -0
  49. package/dist/reference/page-notation.d.ts +52 -0
  50. package/dist/reference/page-notation.js +171 -0
  51. package/dist/reference/raw-floats-validate.d.ts +18 -0
  52. package/dist/reference/raw-floats-validate.js +53 -0
  53. package/dist/reference/raw-floats.d.mts +18 -0
  54. package/dist/reference/raw-floats.mjs +129 -0
  55. package/dist/reference/rehype-heading-anchors.d.mts +1 -1
  56. package/dist/reference/rehype-heading-anchors.mjs +107 -1
  57. package/dist/reference/rehype-table-header-labels.d.mts +26 -0
  58. package/dist/reference/rehype-table-header-labels.mjs +152 -0
  59. package/dist/reference/remark-abbreviations.d.mts +7 -0
  60. package/dist/reference/remark-abbreviations.mjs +174 -0
  61. package/dist/reference/remark-memo.d.mts +16 -0
  62. package/dist/reference/remark-memo.mjs +339 -0
  63. package/dist/reference/remark-notation.d.mts +57 -9
  64. package/dist/reference/remark-notation.mjs +354 -42
  65. package/dist/reference/remark-short-note.d.mts +4 -0
  66. package/dist/reference/remark-short-note.mjs +237 -0
  67. package/dist/reference/types.d.ts +16 -1
  68. package/dist/reference/units-vocab.js +4 -0
  69. package/docs/VERSIONING.md +33 -4
  70. package/docs/authoring/README.md +8 -0
  71. package/docs/authoring/agents.md +17 -2
  72. package/docs/authoring/components.md +135 -0
  73. package/docs/authoring/migrating.md +92 -7
  74. package/docs/authoring/notation.md +560 -1
  75. package/docs/authoring/structure.md +120 -8
  76. package/docs/authoring/visualizations.md +36 -3
  77. package/package.json +5 -2
  78. package/src/compiler/astro.ts +208 -3
  79. package/src/compiler/cli.ts +29 -2
  80. package/src/compiler/collections.ts +45 -4
  81. package/src/compiler/course-config.ts +92 -0
  82. package/src/compiler/exports/standalone-html.ts +963 -0
  83. package/src/compiler/manifest.ts +268 -22
  84. package/src/components/HoverPanel.astro +45 -4
  85. package/src/components/abbreviation/AbbreviationGlossary.astro +70 -0
  86. package/src/components/abbreviation/AbbreviationLayer.astro +127 -0
  87. package/src/components/assessments/AssessmentRunner.tsx +52 -17
  88. package/src/components/assessments/AssessmentSet.astro +98 -14
  89. package/src/components/assessments/RenderedContent.tsx +55 -0
  90. package/src/components/assessments/assessment-randomization.ts +16 -0
  91. package/src/components/diagram/Diagram.astro +444 -83
  92. package/src/components/disclosure/hover-preview.ts +202 -0
  93. package/src/components/disclosure/persisted-disclosure.ts +66 -0
  94. package/src/components/examples/CompactExamples.astro +2 -0
  95. package/src/components/figure/Figure.astro +279 -10
  96. package/src/components/memo/Memo.astro +453 -0
  97. package/src/components/memo/ShortNote.astro +223 -0
  98. package/src/components/notation/NotationFormula.astro +18 -1
  99. package/src/components/notation/NotationLayer.astro +105 -8
  100. package/src/components/notation/render-notation-math.ts +39 -2
  101. package/src/components/notation/safe-math-to-react.ts +50 -0
  102. package/src/components/reference/FloatRefLayer.astro +233 -15
  103. package/src/components/starlight/CollapsibleSections.astro +461 -0
  104. package/src/components/starlight/DiagramEnhancer.astro +385 -0
  105. package/src/components/starlight/HeadingAnchorEnhancer.astro +5 -17
  106. package/src/components/starlight/KeyedFloatEnhancer.astro +81 -3
  107. package/src/components/starlight/LayoutHeader.astro +50 -0
  108. package/src/components/starlight/LayoutSocialIcons.astro +41 -2
  109. package/src/components/starlight/LessonExportActions.astro +436 -0
  110. package/src/components/starlight/LessonFooter.astro +27 -2
  111. package/src/components/starlight/section-parts.ts +31 -0
  112. package/src/components/table/Table.astro +293 -7
  113. package/src/components/table/TableOverflowExpander.astro +489 -0
  114. package/src/content-config.ts +20 -0
  115. package/src/reference/base-abbreviations.mjs +60 -0
  116. package/src/reference/base-operators.mjs +40 -0
  117. package/src/reference/base-roman-labels.mjs +43 -0
  118. package/src/reference/consistency.ts +73 -2
  119. package/src/reference/diagrams-validate.ts +40 -0
  120. package/src/reference/equations.mjs +67 -14
  121. package/src/reference/gate-abbreviations.ts +128 -0
  122. package/src/reference/gate-math.ts +27 -7
  123. package/src/reference/gate-prose-notation.ts +224 -0
  124. package/src/reference/keyed-float-validate.ts +5 -5
  125. package/src/reference/keyed-jsx-floats.mjs +50 -25
  126. package/src/reference/knowledge-checks-validate.ts +130 -0
  127. package/src/reference/knowledge-checks.mjs +45 -0
  128. package/src/reference/lab-math-scope.ts +45 -3
  129. package/src/reference/math-glyphs.mjs +367 -0
  130. package/src/reference/mdx-attributes.mjs +38 -0
  131. package/src/reference/mixed-content.ts +69 -0
  132. package/src/reference/page-notation.ts +252 -0
  133. package/src/reference/raw-floats-validate.ts +103 -0
  134. package/src/reference/raw-floats.mjs +129 -0
  135. package/src/reference/rehype-heading-anchors.mjs +107 -1
  136. package/src/reference/rehype-table-header-labels.mjs +152 -0
  137. package/src/reference/remark-abbreviations.mjs +174 -0
  138. package/src/reference/remark-memo.mjs +339 -0
  139. package/src/reference/remark-notation.mjs +354 -42
  140. package/src/reference/remark-short-note.mjs +237 -0
  141. package/src/reference/types.ts +16 -0
  142. package/src/reference/units-vocab.ts +4 -0
  143. package/src/styles/global.css +996 -50
@@ -3,53 +3,88 @@
3
3
  *
4
4
  * Every number on a page comes from two places that MUST agree: the page's own
5
5
  * counters (`numbering`) and the manifest tables a cross-page `[[slug#eq-key]]`
6
- * is resolved against (`equations` / `tables` / `figures`). Deriving all four
7
- * from the same manifest in one step is what stops a course config from
6
+ * is resolved against (`equations` / `tables` / `figures` / `diagrams` /
7
+ * `checks`).
8
+ * Deriving every input from the same manifest in one step stops a course config from
8
9
  * supplying one without the other — the omission that produced page-local
9
10
  * `(2.2)` and cross-page `(4.5)` for the same equation.
10
11
  *
11
- * `numbering` maps a lesson slug to `{ part, equations, tables, figures }`:
12
- * the part's ordinal (the number before the dot) and, per kind of float, how
13
- * many of them the earlier lessons of that part already used.
12
+ * `numbering` maps a lesson slug to
13
+ * `{ part, equations, tables, figures, diagrams, checks }`: the part's ordinal
14
+ * (the number before the dot) and, per numbered kind, how many earlier lessons
15
+ * of that part already used.
14
16
  */
15
17
  export function numberingFromManifest(manifest: any): {
16
18
  equations?: undefined;
17
19
  tables?: undefined;
18
20
  figures?: undefined;
21
+ diagrams?: undefined;
22
+ checks?: undefined;
19
23
  numbering?: undefined;
20
24
  } | {
21
25
  equations: any;
22
26
  tables: any;
23
27
  figures: any;
28
+ diagrams: any;
29
+ checks: any;
24
30
  numbering: {
25
31
  [k: string]: any;
26
32
  };
27
33
  };
34
+ /**
35
+ * The options object `remarkNotation` needs for one manifest, in one call.
36
+ *
37
+ * A consumer used to hand-assemble `definitions`, `equations`, `tables`,
38
+ * `figures`, and `chapters` separately — easy to do partially, which is how a
39
+ * page ends up numbered under the legacy `##`-section scheme while the
40
+ * manifest (and every cross-page reference to that page) uses the part
41
+ * scheme. This does not return that literal four-map-plus-chapters shape:
42
+ * `chapters` is the superseded per-lesson form (see `pageNumbering` below),
43
+ * and passing `manifest` through already makes `numberingFromManifest()`
44
+ * derive `numbering` plus every `equations`/`tables`/`figures`/`diagrams`/
45
+ * `checks` map from the same source in one step — strictly more correct than
46
+ * reconstructing `chapters` by hand.
47
+ *
48
+ * `overrides` is spread last, so a caller can add `strict`, `unknown`,
49
+ * `resolve`, `base`, or override anything above:
50
+ *
51
+ * [remarkNotation, createRemarkNotationOptions(manifest, { strict: true })]
52
+ *
53
+ * @param {object} manifest - a compiled Explico manifest (`compileManifest()`).
54
+ * @param {object} [overrides] - additional/overriding `remarkNotation` options.
55
+ */
56
+ export function createRemarkNotationOptions(manifest: object, overrides?: object): {
57
+ definitions: any;
58
+ manifest: object;
59
+ };
28
60
  /**
29
61
  * @param {{
30
62
  * definitions?: Map<string, object> | readonly object[] | Record<string, object> | (() => Map<string, object> | readonly object[] | Record<string, object>),
31
63
  * resolve?: (key: string, context: object) => object | undefined,
32
64
  * unknown?: 'error' | 'warn' | 'ignore',
65
+ * strict?: boolean,
33
66
  * base?: string,
34
67
  * manifest?: object,
35
68
  * equations?: Record<string, Record<string, string>>,
36
69
  * tables?: Record<string, Record<string, string>>,
37
70
  * figures?: Record<string, Record<string, string>>,
38
- * numbering?: Record<string, { part: number, equations: number, tables: number, figures: number }>,
71
+ * diagrams?: Record<string, Record<string, string>>,
72
+ * checks?: Record<string, Record<string, string>>,
73
+ * numbering?: Record<string, { part: number, equations: number, tables: number, figures: number, diagrams: number, checks: number }>,
39
74
  * chapters?: Record<string, number>,
40
75
  * }} [options]
41
76
  *
42
- * `manifest` is the preferred wiring: pass the compiled manifest and the four
77
+ * `manifest` is the preferred wiring: pass the compiled manifest and all
43
78
  * numbering inputs below are read off it together, so they cannot drift apart.
44
79
  * They stay available individually for hand-built trees, and an explicitly
45
80
  * supplied one still wins over the manifest.
46
81
  *
47
82
  * `numbering` maps a lesson slug to its **part** (the number before the dot)
48
83
  * and, per kind of float, how many the earlier lessons of that part already
49
- * used. Every display equation / `<Table>` / `<Figure>` on the page is then
84
+ * used. Every display equation / `<Table>` / `<Figure>` / `<Diagram>` on the page is then
50
85
  * numbered `‹part›.‹offset + n›`, with `##` and `###` headings ignored; with no
51
86
  * entry the legacy `##`-section scheme applies. It must agree with
52
- * `manifest.lessons[]`, which is what feeds `equations`/`tables`/`figures`
87
+ * `manifest.lessons[]`, which is what feeds `equations`/`tables`/`figures`/`diagrams`
53
88
  * above — supplying the tables without `numbering` numbers the same equation
54
89
  * twice, and `assertManifestNumberParity` turns that into a build error rather
55
90
  * than a page whose references disagree with their targets.
@@ -57,21 +92,34 @@ export function numberingFromManifest(manifest: any): {
57
92
  * `chapters` is the superseded per-lesson form (slug → the lesson's course
58
93
  * ordinal, no running offset). Still read when `numbering` has no entry, so a
59
94
  * config written against the old option keeps building.
95
+ *
96
+ * `strict` (default `false`) additionally fails the build when a catalogued
97
+ * lesson contains an equation/`<Table>`/`<Figure>` — keyed or not — but has no
98
+ * `numbering` placement or no cross-page number table entry, instead of
99
+ * silently rendering it under the legacy `##`-section scheme. Off by default
100
+ * for backward compatibility; `createRemarkNotationOptions(manifest, { strict:
101
+ * true })` is the recommended way to turn it on for a course whose manifest
102
+ * covers every catalogued lesson.
60
103
  */
61
104
  export default function remarkNotation(options?: {
62
105
  definitions?: Map<string, object> | readonly object[] | Record<string, object> | (() => Map<string, object> | readonly object[] | Record<string, object>);
63
106
  resolve?: (key: string, context: object) => object | undefined;
64
107
  unknown?: "error" | "warn" | "ignore";
108
+ strict?: boolean;
65
109
  base?: string;
66
110
  manifest?: object;
67
111
  equations?: Record<string, Record<string, string>>;
68
112
  tables?: Record<string, Record<string, string>>;
69
113
  figures?: Record<string, Record<string, string>>;
114
+ diagrams?: Record<string, Record<string, string>>;
115
+ checks?: Record<string, Record<string, string>>;
70
116
  numbering?: Record<string, {
71
117
  part: number;
72
118
  equations: number;
73
119
  tables: number;
74
120
  figures: number;
121
+ diagrams: number;
122
+ checks: number;
75
123
  }>;
76
124
  chapters?: Record<string, number>;
77
125
  }): (tree: any, file: any) => void;