explico 0.13.1 → 0.15.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.
- package/CHANGELOG.md +990 -1
- package/README.md +200 -30
- package/dist/compiler/astro.d.ts +15 -2
- package/dist/compiler/astro.js +40 -11
- package/dist/compiler/cli-main.d.ts +100 -0
- package/dist/compiler/cli-main.js +433 -0
- package/dist/compiler/cli-reference.d.ts +50 -0
- package/dist/compiler/cli-reference.js +213 -0
- package/dist/compiler/cli-verbs.d.ts +45 -0
- package/dist/compiler/cli-verbs.js +224 -0
- package/dist/compiler/cli-verify.d.ts +51 -0
- package/dist/compiler/cli-verify.js +151 -0
- package/dist/compiler/cli.d.ts +408 -24
- package/dist/compiler/cli.js +1328 -8
- package/dist/compiler/collections.d.ts +88 -1
- package/dist/compiler/collections.js +170 -25
- package/dist/compiler/content-release.d.ts +49 -0
- package/dist/compiler/content-release.js +63 -0
- package/dist/compiler/content-schemas.d.ts +2 -2
- package/dist/compiler/course-config.d.ts +1 -1
- package/dist/compiler/course-config.js +105 -1
- package/dist/compiler/decks.d.ts +161 -0
- package/dist/compiler/decks.js +235 -0
- package/dist/compiler/exports/combined-html.d.ts +5 -1
- package/dist/compiler/exports/deck-fit.d.ts +55 -0
- package/dist/compiler/exports/deck-fit.js +90 -0
- package/dist/compiler/exports/export-chapters.d.ts +37 -6
- package/dist/compiler/exports/export-chapters.js +64 -5
- package/dist/compiler/exports/export-pages.d.ts +30 -3
- package/dist/compiler/exports/export-pages.js +24 -1
- package/dist/compiler/exports/latex/beamerthemeexplico.sty +124 -0
- package/dist/compiler/exports/latex/cache.d.ts +78 -0
- package/dist/compiler/exports/latex/cache.js +129 -0
- package/dist/compiler/exports/latex/capture.d.ts +10 -1
- package/dist/compiler/exports/latex/capture.js +3 -1
- package/dist/compiler/exports/latex/compile.d.ts +13 -2
- package/dist/compiler/exports/latex/compile.js +12 -1
- package/dist/compiler/exports/latex/deck.d.ts +92 -0
- package/dist/compiler/exports/latex/deck.js +349 -0
- package/dist/compiler/exports/latex/document.d.ts +51 -6
- package/dist/compiler/exports/latex/document.js +71 -12
- package/dist/compiler/exports/latex/explico-common.sty +198 -0
- package/dist/compiler/exports/latex/explico.cls +13 -183
- package/dist/compiler/exports/latex/serialize.d.ts +60 -4
- package/dist/compiler/exports/latex/serialize.js +4 -2
- package/dist/compiler/exports/latex-export.d.ts +24 -2
- package/dist/compiler/exports/latex-export.js +107 -26
- package/dist/compiler/exports/markdown/serialize.d.ts +24 -4
- package/dist/compiler/exports/markdown/serialize.js +85 -8
- package/dist/compiler/exports/markdown-export.d.ts +6 -1
- package/dist/compiler/exports/markdown-export.js +50 -11
- package/dist/compiler/exports/standalone-html.d.ts +10 -5
- package/dist/compiler/exports/standalone-html.js +3 -3
- package/dist/compiler/exports/static-tree.d.ts +38 -1
- package/dist/compiler/exports/static-tree.js +120 -4
- package/dist/compiler/knowledge-version.d.ts +26 -2
- package/dist/compiler/knowledge-version.js +27 -17
- package/dist/compiler/lesson-derivation.d.ts +143 -6
- package/dist/compiler/lesson-derivation.js +145 -13
- package/dist/compiler/manifest.d.ts +133 -4
- package/dist/compiler/manifest.js +364 -58
- package/dist/compiler/page-versions.d.ts +184 -0
- package/dist/compiler/page-versions.js +217 -0
- package/dist/compiler/render-diagnostics.d.ts +5 -1
- package/dist/compiler/resolution-report.d.ts +24 -6
- package/dist/compiler/resolution-report.js +22 -4
- package/dist/compiler/validate-content.d.ts +7 -0
- package/dist/compiler/validate-content.js +160 -0
- package/dist/{course-config-rRtME5UV.d.ts → course-config-BLtIdkei.d.ts} +164 -1
- package/dist/curriculum/competency-graph.d.ts +54 -0
- package/dist/curriculum/competency-graph.js +41 -0
- package/dist/reference/base-library.d.mts +8 -0
- package/dist/reference/base-library.mjs +19 -0
- package/dist/reference/consistency.d.ts +8 -4
- package/dist/reference/consistency.js +82 -26
- package/dist/reference/deck-remark.d.mts +123 -0
- package/dist/reference/deck-remark.mjs +600 -0
- package/dist/reference/deck-source.d.ts +107 -0
- package/dist/reference/deck-source.js +140 -0
- package/dist/reference/decks-validate.d.ts +133 -0
- package/dist/reference/decks-validate.js +359 -0
- package/dist/reference/derived-entries.d.ts +5 -1
- package/dist/reference/diagram-fit.d.ts +6 -2
- package/dist/reference/diagram-fit.js +5 -1
- package/dist/reference/figure-symbols.d.ts +23 -6
- package/dist/reference/figure-symbols.js +51 -15
- package/dist/reference/float-name.d.ts +43 -0
- package/dist/reference/float-name.js +58 -0
- package/dist/reference/folds-validate.d.ts +1 -1
- package/dist/reference/gate-abbreviations.d.ts +1 -1
- package/dist/reference/gate-indices.js +5 -4
- package/dist/reference/gate-math.d.ts +29 -2
- package/dist/reference/gate-math.js +99 -18
- package/dist/reference/gate-part-pages.d.ts +1 -1
- package/dist/reference/lab-katex-validate.d.ts +10 -6
- package/dist/reference/lab-katex-validate.js +17 -9
- package/dist/reference/lab-math-scope.js +29 -4
- package/dist/reference/math-glyphs.d.mts +25 -0
- package/dist/reference/math-glyphs.mjs +189 -25
- package/dist/reference/page-notation.d.ts +22 -3
- package/dist/reference/page-notation.js +32 -10
- package/dist/reference/references.d.ts +14 -1
- package/dist/reference/references.js +13 -0
- package/dist/reference/registry-scope.d.mts +33 -0
- package/dist/reference/registry-scope.mjs +34 -0
- package/dist/reference/registry.js +29 -10
- package/dist/reference/rehype-deck.d.mts +6 -0
- package/dist/reference/rehype-deck.mjs +286 -0
- package/dist/reference/rehype-heading-anchors.d.mts +20 -0
- package/dist/reference/rehype-heading-anchors.mjs +48 -6
- package/dist/reference/remark-notation.mjs +249 -40
- package/dist/reference/source-lines.d.mts +12 -0
- package/dist/reference/source-lines.mjs +65 -0
- package/dist/reference/types.d.ts +28 -0
- package/dist/rules/catalog.d.ts +21 -4
- package/dist/rules/catalog.js +237 -2
- package/dist/rules/course-rules.d.ts +5 -1
- package/dist/rules/course-rules.js +17 -3
- package/dist/rules/course-rules.schema.json +12 -0
- package/dist/rules/in-effect.d.ts +13 -3
- package/dist/rules/in-effect.js +34 -10
- package/dist/rules/rules.schema.json +280 -1
- package/dist/rules/settings.d.ts +1 -1
- package/dist/session/PreferenceStore.d.ts +6 -0
- package/dist/session/PreferenceStore.js +18 -1
- package/dist/session/deck-memory.d.ts +116 -0
- package/dist/session/deck-memory.js +143 -0
- package/dist/session/reading-memory.d.ts +96 -0
- package/dist/session/reading-memory.js +133 -0
- package/docs/VERSIONING.md +21 -18
- package/docs/authoring/README.md +31 -9
- package/docs/authoring/agents.md +72 -18
- package/docs/authoring/cli-reference.json +2172 -0
- package/docs/authoring/cli.md +887 -0
- package/docs/authoring/components.md +15 -0
- package/docs/authoring/deck.md +612 -0
- package/docs/authoring/migrating.md +1195 -16
- package/docs/authoring/notation.md +49 -6
- package/docs/authoring/structure.md +80 -1
- package/docs/authoring/versioning.md +56 -3
- package/docs/authoring/visualizations.md +7 -2
- package/docs/course-agent/AGENTS.md +40 -0
- package/docs/course-agent/agents/rules-reviewer.md +33 -0
- package/docs/course-agent/skills/draft-lesson/SKILL.md +38 -0
- package/docs/course-agent/skills/migrate-course/SKILL.md +32 -0
- package/docs/course-agent/skills/release-content/SKILL.md +26 -0
- package/docs/diagram-scaling.md +148 -0
- package/docs/privacy.md +59 -0
- package/package.json +8 -2
- package/src/compiler/astro.ts +60 -21
- package/src/compiler/cli-main.ts +557 -0
- package/src/compiler/cli-reference.ts +285 -0
- package/src/compiler/cli-verbs.ts +270 -0
- package/src/compiler/cli-verify.ts +241 -0
- package/src/compiler/cli.ts +2119 -170
- package/src/compiler/collections.ts +284 -25
- package/src/compiler/content-release.ts +91 -0
- package/src/compiler/course-config.ts +267 -0
- package/src/compiler/decks.ts +455 -0
- package/src/compiler/exports/deck-fit.ts +127 -0
- package/src/compiler/exports/export-chapters.ts +105 -6
- package/src/compiler/exports/export-pages.ts +46 -2
- package/src/compiler/exports/latex/beamerthemeexplico.sty +124 -0
- package/src/compiler/exports/latex/cache.ts +183 -0
- package/src/compiler/exports/latex/capture.ts +5 -2
- package/src/compiler/exports/latex/compile.ts +18 -0
- package/src/compiler/exports/latex/deck.ts +419 -0
- package/src/compiler/exports/latex/document.ts +117 -21
- package/src/compiler/exports/latex/explico-common.sty +198 -0
- package/src/compiler/exports/latex/explico.cls +13 -183
- package/src/compiler/exports/latex/serialize.ts +25 -21
- package/src/compiler/exports/latex/texlive-packages.txt +6 -2
- package/src/compiler/exports/latex-export.ts +187 -45
- package/src/compiler/exports/markdown/serialize.ts +118 -9
- package/src/compiler/exports/markdown-export.ts +56 -11
- package/src/compiler/exports/standalone-html.ts +8 -7
- package/src/compiler/exports/static-tree.ts +175 -3
- package/src/compiler/knowledge-version.ts +56 -21
- package/src/compiler/lesson-derivation.ts +282 -16
- package/src/compiler/manifest.ts +568 -63
- package/src/compiler/page-versions.ts +401 -0
- package/src/compiler/resolution-report.ts +38 -7
- package/src/compiler/validate-content.ts +215 -0
- package/src/components/CourseContents.astro +124 -6
- package/src/components/CurriculumMap.astro +49 -1
- package/src/components/FloatIndex.astro +1 -1
- package/src/components/PartOverview.astro +51 -5
- package/src/components/assessments/AssessmentSet.astro +41 -15
- package/src/components/block-heading.ts +15 -6
- package/src/components/card-carry.ts +7 -4
- package/src/components/card-manager.ts +14 -2
- package/src/components/card-memory.ts +13 -9
- package/src/components/deck/DeckEnhancer.astro +13 -0
- package/src/components/deck/deck-context.ts +104 -0
- package/src/components/deck/deck-controller.ts +1287 -0
- package/src/components/deck/deck-map.ts +91 -0
- package/src/components/deck-lane.ts +163 -0
- package/src/components/diagram/Diagram.astro +131 -86
- package/src/components/disclosure/persisted-disclosure.ts +9 -1
- package/src/components/figure/Figure.astro +7 -2
- package/src/components/figure/FloatCaption.astro +5 -3
- package/src/components/fold/Fold.astro +2 -2
- package/src/components/notation/NotationFormula.astro +81 -11
- package/src/components/notation/NotationGlossary.astro +132 -1
- package/src/components/notation/NotationLayer.astro +15 -7
- package/src/components/starlight/AboutPanel.astro +186 -3
- package/src/components/starlight/CollapsibleSections.astro +24 -3
- package/src/components/starlight/DiagramEnhancer.astro +5 -1
- package/src/components/starlight/HeadingAnchorEnhancer.astro +1 -1
- package/src/components/starlight/LayoutHeader.astro +17 -0
- package/src/components/starlight/LayoutPageTitle.astro +110 -0
- package/src/components/starlight/LayoutSidebar.astro +807 -21
- package/src/components/starlight/LayoutSocialIcons.astro +62 -6
- package/src/components/starlight/LessonExportActions.astro +27 -9
- package/src/components/starlight/LessonFooter.astro +59 -0
- package/src/components/starlight/ReadingMemoryNotice.astro +114 -0
- package/src/components/starlight/TextSizeControl.astro +24 -13
- package/src/components/starlight/page-marks.ts +139 -0
- package/src/components/starlight/section-summary.ts +1 -1
- package/src/components/starlight/sidebar-editions.ts +245 -0
- package/src/components/table/Table.astro +15 -7
- package/src/content-config.ts +87 -1
- package/src/curriculum/competency-graph.ts +95 -0
- package/src/reference/base-library.mjs +19 -0
- package/src/reference/consistency.ts +137 -39
- package/src/reference/deck-remark.mjs +600 -0
- package/src/reference/deck-source.ts +273 -0
- package/src/reference/decks-validate.ts +604 -0
- package/src/reference/diagram-fit.ts +18 -4
- package/src/reference/diagram-layout.ts +3 -1
- package/src/reference/figure-symbols.ts +108 -31
- package/src/reference/folds-validate.ts +1 -1
- package/src/reference/gate-indices.ts +5 -3
- package/src/reference/gate-math.ts +169 -25
- package/src/reference/lab-katex-validate.ts +30 -15
- package/src/reference/lab-math-scope.ts +34 -3
- package/src/reference/math-glyphs.mjs +189 -25
- package/src/reference/page-notation.ts +69 -15
- package/src/reference/references.ts +28 -0
- package/src/reference/registry-scope.mjs +34 -0
- package/src/reference/registry.ts +41 -11
- package/src/reference/rehype-deck.mjs +286 -0
- package/src/reference/rehype-heading-anchors.mjs +48 -6
- package/src/reference/remark-notation.mjs +249 -40
- package/src/reference/source-lines.mjs +65 -0
- package/src/reference/types.ts +28 -0
- package/src/rules/catalog.ts +274 -4
- package/src/rules/course-rules.ts +21 -1
- package/src/rules/in-effect.ts +58 -11
- package/src/session/PreferenceStore.ts +23 -0
- package/src/session/deck-memory.ts +263 -0
- package/src/session/reading-memory.ts +243 -0
- package/src/styles/deck.css +1150 -0
- package/src/styles/global.css +958 -27
- package/src/styles/zones.css +277 -0
- /package/src/{components → reference}/float-name.ts +0 -0
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
---
|
|
2
2
|
import DefaultHeader from '@astrojs/starlight/components/Header.astro';
|
|
3
|
+
import { loadManifest } from '../../compiler/manifest';
|
|
4
|
+
import { APPEARANCE_DEFAULTS } from '../../compiler/course-config';
|
|
5
|
+
import ReadingMemoryNotice from './ReadingMemoryNotice.astro';
|
|
6
|
+
|
|
7
|
+
// The course's `appearance` (zones, slide edges): `zones.css` and
|
|
8
|
+
// `deck.css` read it as `:root:has([data-explico-zones='…'])`, so the first
|
|
9
|
+
// painted frame already has it. Without the element (a page with no
|
|
10
|
+
// header) the defaults apply.
|
|
11
|
+
const { appearance = APPEARANCE_DEFAULTS } = await loadManifest();
|
|
3
12
|
---
|
|
4
13
|
|
|
5
14
|
<DefaultHeader />
|
|
15
|
+
<div
|
|
16
|
+
data-explico-appearance
|
|
17
|
+
data-explico-zones={appearance.zones}
|
|
18
|
+
data-explico-slides={appearance.slides}
|
|
19
|
+
hidden
|
|
20
|
+
>
|
|
21
|
+
</div>
|
|
22
|
+
<ReadingMemoryNotice />
|
|
6
23
|
|
|
7
24
|
<script>
|
|
8
25
|
import { createBrowserPreferenceStore } from '../../session/PreferenceStore';
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import DefaultPageTitle from '@astrojs/starlight/components/PageTitle.astro';
|
|
16
16
|
import { loadManifest } from '../../compiler/manifest';
|
|
17
17
|
import { isLessonSlug } from '../../compiler/lesson-derivation';
|
|
18
|
+
import { chapterSlides, deckOfRoute, partDeckOf } from '../deck/deck-context';
|
|
18
19
|
|
|
19
20
|
const route = Astro.locals.starlightRoute;
|
|
20
21
|
const routeSlug = route.entry.id;
|
|
@@ -31,9 +32,42 @@ const part = manifest.parts.find((entry) => entry.dir === partDir);
|
|
|
31
32
|
const isPartPage = part !== undefined && !isLessonSlug(routeSlug);
|
|
32
33
|
|
|
33
34
|
const base = import.meta.env.BASE_URL.replace(/\/$/, '');
|
|
35
|
+
// A deck's page (docs/authoring/deck.md) opens on its Present button; a
|
|
36
|
+
// chapter links to its slides — its own deck, or its section of its part's
|
|
37
|
+
// deck — and a part's page to the part's deck.
|
|
38
|
+
const deck = deckOfRoute(manifest, routeSlug);
|
|
39
|
+
const chapterDeck = deck || isPartPage ? undefined : chapterSlides(manifest, routeSlug);
|
|
40
|
+
const deckChapter = deck?.chapter
|
|
41
|
+
? manifest.lessons.find((lesson) => lesson.slug === deck.chapter)
|
|
42
|
+
: undefined;
|
|
43
|
+
const partDeck = isPartPage ? partDeckOf(manifest, partDir) : undefined;
|
|
44
|
+
// A part's deck goes back to its part's page, when the part has one.
|
|
45
|
+
const deckPart = deck?.part === undefined ? undefined : manifest.parts.find((entry) => entry.dir === deck.part);
|
|
34
46
|
// A part is only a link when there is a page behind its directory URL.
|
|
35
47
|
const partHref =
|
|
36
48
|
part?.overview && !isPartPage ? `${base}${part.link}` : undefined;
|
|
49
|
+
|
|
50
|
+
// Under the title of a chapter or a part's page, a line the sidebar's script
|
|
51
|
+
// shows when the page changed since this reader last opened it
|
|
52
|
+
// (`page-marks.ts`); hidden in the markup, and never shown without the
|
|
53
|
+
// reader's yes to the course remembering their reading.
|
|
54
|
+
const pageSlug = isPartPage ? `${partDir}/index` : routeSlug;
|
|
55
|
+
const changelogHref = manifest.about.changelogHref;
|
|
56
|
+
const tracked =
|
|
57
|
+
manifest.pageVersions?.record.pages[pageSlug] !== undefined &&
|
|
58
|
+
(manifest.readingMemory ?? 'ask') === 'ask' &&
|
|
59
|
+
(manifest.sidebarMarks?.changed ?? true);
|
|
60
|
+
|
|
61
|
+
// The marks a deck's page puts on its frames for a reader
|
|
62
|
+
// (`session/deck-memory.ts`): the sidebar's two (`sidebarMarks`), a frame not shown
|
|
63
|
+
// yet as a page not opened yet, and none without reading memory.
|
|
64
|
+
const deckMarks =
|
|
65
|
+
(manifest.readingMemory ?? 'ask') === 'ask'
|
|
66
|
+
? [
|
|
67
|
+
...((manifest.sidebarMarks?.unopened ?? true) ? ['unseen'] : []),
|
|
68
|
+
...((manifest.sidebarMarks?.changed ?? true) ? ['changed'] : []),
|
|
69
|
+
].join(' ')
|
|
70
|
+
: '';
|
|
37
71
|
---
|
|
38
72
|
|
|
39
73
|
{
|
|
@@ -57,8 +91,84 @@ const partHref =
|
|
|
57
91
|
)
|
|
58
92
|
}
|
|
59
93
|
<DefaultPageTitle />
|
|
94
|
+
{
|
|
95
|
+
deck && (
|
|
96
|
+
// Not export chrome: the deck's standalone HTML presents offline.
|
|
97
|
+
<div class="deck-actions not-content" data-deck-actions data-deck-marks={deckMarks || undefined}>
|
|
98
|
+
<button type="button" class="deck-actions__present" data-deck-present>
|
|
99
|
+
<svg viewBox="0 0 24 24" width="14" height="14" aria-hidden="true"><path d="M7 4l13 8-13 8z" fill="currentColor" /></svg>
|
|
100
|
+
Present
|
|
101
|
+
</button>
|
|
102
|
+
{deckChapter && <a href={`${base}/${deckChapter.slug}/`}>Read the chapter</a>}
|
|
103
|
+
{deckPart?.overview && <a href={`${base}${deckPart.link}`}>Open the part</a>}
|
|
104
|
+
<span class="deck-actions__count">{deck.frames.length} slides</span>
|
|
105
|
+
</div>
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
{
|
|
109
|
+
chapterDeck && (
|
|
110
|
+
<div class="deck-actions not-content" data-explico-export-chrome="deck-actions">
|
|
111
|
+
<a href={`${base}/${chapterDeck.path}`}>Slides for this chapter</a>
|
|
112
|
+
</div>
|
|
113
|
+
)
|
|
114
|
+
}
|
|
115
|
+
{
|
|
116
|
+
partDeck && (
|
|
117
|
+
<div class="deck-actions not-content" data-explico-export-chrome="deck-actions">
|
|
118
|
+
<a href={`${base}/${partDeck.slug}/`}>Slides for this part</a>
|
|
119
|
+
</div>
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
{
|
|
123
|
+
tracked && (
|
|
124
|
+
<p class="page-changed not-content" data-explico-page-changed hidden>
|
|
125
|
+
<span class="page-changed__mark" aria-hidden="true" />
|
|
126
|
+
This page changed since you last opened it.
|
|
127
|
+
{changelogHref && (
|
|
128
|
+
<>
|
|
129
|
+
{' '}
|
|
130
|
+
<a href={changelogHref}>What changed</a>
|
|
131
|
+
</>
|
|
132
|
+
)}
|
|
133
|
+
</p>
|
|
134
|
+
)
|
|
135
|
+
}
|
|
60
136
|
|
|
61
137
|
<style>
|
|
138
|
+
.page-changed {
|
|
139
|
+
display: flex;
|
|
140
|
+
flex-wrap: wrap;
|
|
141
|
+
align-items: baseline;
|
|
142
|
+
gap: 0.25rem 0.45rem;
|
|
143
|
+
margin: 0.5rem 0 0;
|
|
144
|
+
color: var(--sl-color-gray-2);
|
|
145
|
+
font-size: var(--sl-text-sm);
|
|
146
|
+
line-height: 1.4;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.page-changed[hidden] {
|
|
150
|
+
display: none;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.page-changed__mark {
|
|
154
|
+
flex: none;
|
|
155
|
+
width: 0.4375rem;
|
|
156
|
+
height: 0.4375rem;
|
|
157
|
+
border-radius: 50%;
|
|
158
|
+
background: var(--sl-color-text-accent);
|
|
159
|
+
transform: translateY(-0.05em);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.page-changed a {
|
|
163
|
+
color: var(--sl-color-text-accent);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
@media print {
|
|
167
|
+
.page-changed {
|
|
168
|
+
display: none;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
62
172
|
.lesson-breadcrumb {
|
|
63
173
|
margin-block-start: 1rem;
|
|
64
174
|
/* The title's own `margin-top: 1rem` would otherwise open a second gap of
|