mr-md 1.0.1 → 1.0.3
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/dist/builder.d.ts +14 -0
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +85 -1
- package/dist/client/app.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/renderer/blocks.d.ts +2 -2
- package/dist/renderer/blocks.d.ts.map +1 -1
- package/dist/renderer/blocks.js +21 -15
- package/dist/renderer/index.d.ts +2 -1
- package/dist/renderer/index.d.ts.map +1 -1
- package/dist/renderer/index.js +369 -3
- package/dist/renderer/markdown.d.ts +5 -0
- package/dist/renderer/markdown.d.ts.map +1 -1
- package/dist/renderer/markdown.js +13 -2
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/builder.ts +107 -1
- package/src/client/app.js +1 -1
- package/src/index.ts +1 -1
- package/src/renderer/blocks.ts +20 -14
- package/src/renderer/index.ts +384 -4
- package/src/renderer/markdown.ts +16 -3
- package/src/types.ts +11 -0
package/dist/builder.d.ts
CHANGED
|
@@ -149,6 +149,8 @@ export declare class ChapterBuilder {
|
|
|
149
149
|
private _rawOptions;
|
|
150
150
|
constructor(title: string, options?: BuildOptions, callerDir?: string);
|
|
151
151
|
slug(slug: string): this;
|
|
152
|
+
/** @internal Used by CourseBuilder to push down shared config */
|
|
153
|
+
_inheritOptions(parentOpts: BuildOptions, parentRawOpts?: BuildOptions): void;
|
|
152
154
|
description(text: string): this;
|
|
153
155
|
status(status: "completed" | "active" | "locked"): this;
|
|
154
156
|
lesson(lessonBuilder: LessonBuilder): this;
|
|
@@ -167,4 +169,16 @@ export declare class ChapterBuilder {
|
|
|
167
169
|
* .build();
|
|
168
170
|
*/
|
|
169
171
|
export declare function chapter(title: string, options?: BuildOptions): ChapterBuilder;
|
|
172
|
+
export declare class CourseBuilder {
|
|
173
|
+
private meta;
|
|
174
|
+
private chapterBuilders;
|
|
175
|
+
private options;
|
|
176
|
+
private _rawOptions;
|
|
177
|
+
constructor(title: string, options?: BuildOptions, callerDir?: string);
|
|
178
|
+
slug(slug: string): this;
|
|
179
|
+
description(text: string): this;
|
|
180
|
+
chapter(chapterBuilder: ChapterBuilder): this;
|
|
181
|
+
build(): string;
|
|
182
|
+
}
|
|
183
|
+
export declare function course(title: string, options?: BuildOptions): CourseBuilder;
|
|
170
184
|
//# sourceMappingURL=builder.d.ts.map
|
package/dist/builder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
|
package/dist/builder.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from "fs";
|
|
2
2
|
import * as path from "path";
|
|
3
|
-
import { render, renderChapter } from "./renderer/index.js";
|
|
3
|
+
import { render, renderChapter, renderCourse } from "./renderer/index.js";
|
|
4
4
|
function getCallerDir() {
|
|
5
5
|
const err = new Error();
|
|
6
6
|
const stack = err.stack?.split("\n");
|
|
@@ -512,6 +512,26 @@ export class ChapterBuilder {
|
|
|
512
512
|
this.meta.slug = slug;
|
|
513
513
|
return this;
|
|
514
514
|
}
|
|
515
|
+
/** @internal Used by CourseBuilder to push down shared config */
|
|
516
|
+
_inheritOptions(parentOpts, parentRawOpts) {
|
|
517
|
+
this.options = {
|
|
518
|
+
outDir: this._rawOptions.outDir ?? (parentRawOpts?.outDir || parentOpts.outDir) ?? this.options.outDir,
|
|
519
|
+
contentBase: this._rawOptions.contentBase ??
|
|
520
|
+
parentRawOpts?.contentBase ??
|
|
521
|
+
this.options.contentBase,
|
|
522
|
+
theme: this._rawOptions.theme ?? parentOpts.theme ?? this.options.theme,
|
|
523
|
+
palette: this._rawOptions.palette ?? parentOpts.palette ?? this.options.palette,
|
|
524
|
+
strict: this._rawOptions.strict ?? parentOpts.strict ?? this.options.strict,
|
|
525
|
+
preset: {
|
|
526
|
+
...parentOpts.preset,
|
|
527
|
+
...this._rawOptions.preset,
|
|
528
|
+
...this.options.preset,
|
|
529
|
+
},
|
|
530
|
+
};
|
|
531
|
+
for (const lb of this.lessonBuilders) {
|
|
532
|
+
lb._inheritOptions(this.options, this._rawOptions);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
515
535
|
description(text) {
|
|
516
536
|
this.meta.description = text;
|
|
517
537
|
return this;
|
|
@@ -580,3 +600,67 @@ export class ChapterBuilder {
|
|
|
580
600
|
export function chapter(title, options = {}) {
|
|
581
601
|
return new ChapterBuilder(title, options, getCallerDir());
|
|
582
602
|
}
|
|
603
|
+
// ─── CourseBuilder ──────────────────────────────────────────────────────────
|
|
604
|
+
export class CourseBuilder {
|
|
605
|
+
meta;
|
|
606
|
+
chapterBuilders = [];
|
|
607
|
+
options;
|
|
608
|
+
_rawOptions;
|
|
609
|
+
constructor(title, options = {}, callerDir) {
|
|
610
|
+
this._rawOptions = options;
|
|
611
|
+
let slug = title
|
|
612
|
+
.toLowerCase()
|
|
613
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
614
|
+
.replace(/(^-|-$)/g, "");
|
|
615
|
+
if (!slug)
|
|
616
|
+
slug = "course";
|
|
617
|
+
this.meta = { title, slug };
|
|
618
|
+
this.options = {
|
|
619
|
+
outDir: options.outDir ?? "./out",
|
|
620
|
+
contentBase: options.contentBase ?? callerDir ?? ".",
|
|
621
|
+
theme: options.theme ?? "auto",
|
|
622
|
+
palette: options.palette ?? "ink",
|
|
623
|
+
strict: options.strict ?? true,
|
|
624
|
+
preset: {
|
|
625
|
+
layout: "lesson",
|
|
626
|
+
density: "comfortable",
|
|
627
|
+
tone: "scholarly",
|
|
628
|
+
...options.preset,
|
|
629
|
+
},
|
|
630
|
+
...options,
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
slug(slug) {
|
|
634
|
+
this.meta.slug = slug;
|
|
635
|
+
return this;
|
|
636
|
+
}
|
|
637
|
+
description(text) {
|
|
638
|
+
this.meta.description = text;
|
|
639
|
+
return this;
|
|
640
|
+
}
|
|
641
|
+
chapter(chapterBuilder) {
|
|
642
|
+
chapterBuilder._inheritOptions(this.options, this._rawOptions);
|
|
643
|
+
this.chapterBuilders.push(chapterBuilder);
|
|
644
|
+
return this;
|
|
645
|
+
}
|
|
646
|
+
build() {
|
|
647
|
+
const chapters = [];
|
|
648
|
+
for (const cb of this.chapterBuilders) {
|
|
649
|
+
cb.build();
|
|
650
|
+
chapters.push(cb.toJSON());
|
|
651
|
+
}
|
|
652
|
+
const courseData = { meta: this.meta, chapters };
|
|
653
|
+
const html = renderCourse(courseData, this.options);
|
|
654
|
+
const outDir = path.resolve(this.options.outDir);
|
|
655
|
+
if (!fs.existsSync(outDir))
|
|
656
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
657
|
+
const outPath = path.join(outDir, `${this.meta.slug}.html`);
|
|
658
|
+
fs.writeFileSync(outPath, html, "utf-8");
|
|
659
|
+
const relPath = path.relative(process.cwd(), outPath);
|
|
660
|
+
console.log(` ✓ Built course (${this.chapterBuilders.length} chapters) → ${relPath}`);
|
|
661
|
+
return outPath;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
export function course(title, options = {}) {
|
|
665
|
+
return new CourseBuilder(title, options, getCallerDir());
|
|
666
|
+
}
|
package/dist/client/app.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
function bkSimDoc(js, props, loop, dependencies) {
|
|
2
|
-
const scriptTags = (dependencies || []).map(url => '<script src="' + url.replace(/"/g, '"') + '"></' + 'script>').join("
|
|
2
|
+
const scriptTags = (dependencies || []).map(url => '<script src="' + url.replace(/"/g, '"') + '"></' + 'script>').join("\n");
|
|
3
3
|
return (
|
|
4
4
|
"<!DOCTYPE html><html><head>" +
|
|
5
5
|
scriptTags +
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ChapterBuilder, chapter, LessonBuilder, lesson } from "./builder.js";
|
|
1
|
+
export { ChapterBuilder, chapter, CourseBuilder, course, LessonBuilder, lesson } from "./builder.js";
|
|
2
2
|
export { render } from "./renderer/index.js";
|
|
3
3
|
export type { AnimationBlock, AnimationOptions, Block, BlockAccent, BlockType, BuildOptions, CalloutBlock, CodeBlock, ColumnItem, ColumnsBlock, ColumnsOptions, HeadingBlock, LatexBlock, LatexOptions, Lesson, LessonMeta, LessonPreset, MarkdownBlock, MediaBlock, MediaKind, MediaOptions, QuizBlock, QuizFile, QuizQuestion, SectionBlock, SimulationBlock, SimulationControl, SimulationOptions, YouTubeBlock, YouTubeOptions, } from "./types.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACrG,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EACX,cAAc,EACd,gBAAgB,EAChB,KAAK,EACL,WAAW,EACX,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,MAAM,EACN,UAAU,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,cAAc,GACd,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { ChapterBuilder, chapter, LessonBuilder, lesson } from "./builder.js";
|
|
1
|
+
export { ChapterBuilder, chapter, CourseBuilder, course, LessonBuilder, lesson } from "./builder.js";
|
|
2
2
|
export { render } from "./renderer/index.js";
|
|
@@ -5,11 +5,11 @@ export declare function escHtml(str: string): string;
|
|
|
5
5
|
export declare function escAttr(str: string): string;
|
|
6
6
|
declare function renderBlock(block: Block, idx: number, options: BuildOptions): {
|
|
7
7
|
html: string;
|
|
8
|
-
|
|
8
|
+
navItems?: NavItem[];
|
|
9
9
|
};
|
|
10
10
|
declare function renderBlockInner(block: Block, idx: number, options: BuildOptions): {
|
|
11
11
|
html: string;
|
|
12
|
-
|
|
12
|
+
navItems?: NavItem[];
|
|
13
13
|
};
|
|
14
14
|
export { blockChrome, renderBlock, renderBlockInner };
|
|
15
15
|
//# sourceMappingURL=blocks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/renderer/blocks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAA0B,MAAM,aAAa,CAAC;AAC/E,OAAO,EACN,WAAW,EAKX,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,OAAO,EAAmC,MAAM,YAAY,CAAC;AAG3E,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO3C;AACD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAID,iBAAS,WAAW,CACnB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,YAAY,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/renderer/blocks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAA0B,MAAM,aAAa,CAAC;AAC/E,OAAO,EACN,WAAW,EAKX,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,OAAO,EAAmC,MAAM,YAAY,CAAC;AAG3E,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO3C;AACD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAID,iBAAS,WAAW,CACnB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,YAAY,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,CAuBxC;AAED,iBAAS,gBAAgB,CACxB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,YAAY,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,CA2QxC;AAuID,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC"}
|
package/dist/renderer/blocks.js
CHANGED
|
@@ -37,27 +37,32 @@ function renderBlockInner(block, idx, options) {
|
|
|
37
37
|
switch (block.type) {
|
|
38
38
|
case "heading": {
|
|
39
39
|
const md = resolveContent(block.src, options, "md");
|
|
40
|
-
const { html, title } = mdToHtml(md);
|
|
41
|
-
const label = block.title || title || (typeof block.src === "string" && !block.src.includes(".md") ? block.src : "Heading");
|
|
40
|
+
const { html, title, headings } = mdToHtml(md);
|
|
41
|
+
const label = block.title || title || headings[0]?.text || (typeof block.src === "string" && !block.src.includes(".md") ? block.src.replace(/^#+\s*/, '') : "Heading");
|
|
42
42
|
const id = `heading-${idx}`;
|
|
43
43
|
return {
|
|
44
44
|
html: `<section id="${id}" class="bk-section bk-heading">${html}</section>`,
|
|
45
|
-
|
|
45
|
+
navItems: [{ id, label, kind: "heading" }],
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
case "markdown": {
|
|
49
49
|
const md = resolveContent(block.src, options, "md");
|
|
50
|
-
const { html } = mdToHtml(md);
|
|
51
|
-
|
|
50
|
+
const { html, headings } = mdToHtml(md);
|
|
51
|
+
const navItems = headings.map(h => ({
|
|
52
|
+
id: h.id,
|
|
53
|
+
label: h.text,
|
|
54
|
+
kind: h.level === 2 ? "heading" : "section"
|
|
55
|
+
}));
|
|
56
|
+
return { html: `<div class="bk-markdown">${html}</div>`, navItems: navItems.length > 0 ? navItems : undefined };
|
|
52
57
|
}
|
|
53
58
|
case "section": {
|
|
54
59
|
const md = resolveContent(block.src, options, "md");
|
|
55
|
-
const { html, title } = mdToHtml(md);
|
|
56
|
-
const label = block.label || title || (typeof block.src === "string" && !block.src.includes(".md") ? block.src : "Section");
|
|
60
|
+
const { html, title, headings } = mdToHtml(md);
|
|
61
|
+
const label = block.label || title || headings[0]?.text || (typeof block.src === "string" && !block.src.includes(".md") ? block.src.replace(/^#+\s*/, '') : "Section");
|
|
57
62
|
const id = `section-${idx}`;
|
|
58
63
|
return {
|
|
59
64
|
html: `<section id="${id}" class="bk-section bk-subsection">${html}</section>`,
|
|
60
|
-
|
|
65
|
+
navItems: [{ id, label, kind: "section" }],
|
|
61
66
|
};
|
|
62
67
|
}
|
|
63
68
|
case "important":
|
|
@@ -205,7 +210,8 @@ function renderBlockInner(block, idx, options) {
|
|
|
205
210
|
if (!trimmed.startsWith("{") && !trimmed.startsWith("[")) {
|
|
206
211
|
throw new Error("Quiz file not found or invalid JSON format");
|
|
207
212
|
}
|
|
208
|
-
|
|
213
|
+
const parsed = JSON.parse(trimmed);
|
|
214
|
+
quiz = Array.isArray(parsed) ? { questions: parsed } : parsed;
|
|
209
215
|
}
|
|
210
216
|
catch (e) {
|
|
211
217
|
const msg = e instanceof Error ? e.message : String(e);
|
|
@@ -227,11 +233,11 @@ function renderBlockInner(block, idx, options) {
|
|
|
227
233
|
${quiz.questions.map((q, qi) => renderQuestion(q, `quiz-${idx}`, qi)).join("\n")}
|
|
228
234
|
</div>
|
|
229
235
|
</div>`,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
236
|
+
navItems: [{
|
|
237
|
+
id: `quiz-${idx}`,
|
|
238
|
+
label: block.label ?? "Questions",
|
|
239
|
+
kind: "quiz",
|
|
240
|
+
}],
|
|
235
241
|
};
|
|
236
242
|
}
|
|
237
243
|
case "divider":
|
|
@@ -260,7 +266,7 @@ function renderQuestion(q, quizId, qi) {
|
|
|
260
266
|
}
|
|
261
267
|
// Wraps a JS string in a minimal iframe document
|
|
262
268
|
function iframeDoc(js, props, loop, dependencies) {
|
|
263
|
-
const scriptTags = (dependencies ?? []).map((url) => `<script src="${escAttr(url)}"></script>`).join("
|
|
269
|
+
const scriptTags = (dependencies ?? []).map((url) => `<script src="${escAttr(url)}"></script>`).join("\n");
|
|
264
270
|
const doc = `<!DOCTYPE html><html><head>
|
|
265
271
|
${scriptTags}
|
|
266
272
|
<style>
|
package/dist/renderer/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { BuildOptions, Chapter, Lesson } from "../types.js";
|
|
1
|
+
import type { BuildOptions, Chapter, Course, Lesson } from "../types.js";
|
|
2
2
|
export declare function render(lesson: Lesson, opts?: BuildOptions): string;
|
|
3
3
|
export declare function renderChapter(chapter: Chapter, opts?: BuildOptions): string;
|
|
4
|
+
export declare function renderCourse(course: Course, opts?: BuildOptions): string;
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOzE,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,MAAM,CAatE;AAID,wBAAgB,aAAa,CAC5B,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE,YAAiB,GACrB,MAAM,CAqXR;AAID,wBAAgB,YAAY,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,YAAiB,GACrB,MAAM,CAqXR"}
|