markupress 0.0.2 → 0.1.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 (48) hide show
  1. package/README.md +244 -10
  2. package/dist/cli.js +1 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/content.d.ts +42 -1
  5. package/dist/content.d.ts.map +1 -1
  6. package/dist/content.js +276 -23
  7. package/dist/content.js.map +1 -1
  8. package/dist/controllers/code.d.ts +7 -0
  9. package/dist/controllers/code.d.ts.map +1 -0
  10. package/dist/controllers/code.js +31 -0
  11. package/dist/controllers/code.js.map +1 -0
  12. package/dist/controllers/outline.d.ts +8 -0
  13. package/dist/controllers/outline.d.ts.map +1 -0
  14. package/dist/controllers/outline.js +45 -0
  15. package/dist/controllers/outline.js.map +1 -0
  16. package/dist/controllers/shell.d.ts +6 -1
  17. package/dist/controllers/shell.d.ts.map +1 -1
  18. package/dist/controllers/shell.js +19 -24
  19. package/dist/controllers/shell.js.map +1 -1
  20. package/dist/index.d.ts +6 -3
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +2 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/markdown.d.ts +24 -0
  25. package/dist/markdown.d.ts.map +1 -0
  26. package/dist/markdown.js +54 -0
  27. package/dist/markdown.js.map +1 -0
  28. package/dist/navigation.d.ts +51 -0
  29. package/dist/navigation.d.ts.map +1 -0
  30. package/dist/navigation.js +71 -0
  31. package/dist/navigation.js.map +1 -0
  32. package/dist/site.d.ts +47 -10
  33. package/dist/site.d.ts.map +1 -1
  34. package/dist/site.js +152 -262
  35. package/dist/site.js.map +1 -1
  36. package/dist/theme.d.ts +2 -1
  37. package/dist/theme.d.ts.map +1 -1
  38. package/dist/theme.js +4 -34
  39. package/dist/theme.js.map +1 -1
  40. package/dist/versions.d.ts.map +1 -1
  41. package/dist/versions.js +10 -5
  42. package/dist/versions.js.map +1 -1
  43. package/package.json +21 -12
  44. package/styles/base.css +1 -21
  45. package/styles/prose.css +14 -0
  46. package/theme/outline.html +11 -0
  47. package/theme/shell.html +66 -0
  48. package/theme/theme.css +52 -0
package/dist/content.js CHANGED
@@ -2,6 +2,7 @@ import { basename, resolve } from 'node:path';
2
2
  import { pathToFileURL } from 'node:url';
3
3
  import { Marked } from 'marked';
4
4
  import { parseFragment, serialize, serializeOuter } from 'parse5';
5
+ import { bundledLanguages, createHighlighter } from 'shiki';
5
6
  import { parseDocument } from 'yaml';
6
7
  import { stylesheet } from './styles.js';
7
8
  export function escapeHTML(value) {
@@ -9,6 +10,79 @@ export function escapeHTML(value) {
9
10
  }
10
11
  // Markdown text is literal author content. Raw HTML tokens retain component expressions.
11
12
  export function literal(value) { return value.replace(/\\/g, '\\\\').replace(/{/g, '\\{'); }
13
+ // Token colors are light-dark(light, dark), so they follow the page's color-scheme; --shiki-light and
14
+ // --shiki-dark carry the same colors for sites that switch another way. These themes keep common
15
+ // tokens at 4.5:1 or better on Looma's light and dark page surfaces.
16
+ const themes = { light: 'github-light-default', dark: 'github-dark-default' };
17
+ let highlighter;
18
+ const shikiOutput = {
19
+ // The site's stylesheet owns the code block's surface; Shiki's colors stay on the tokens.
20
+ pre(node) { delete node.properties.style; },
21
+ code(node) { this.addClassToHast(node, `language-${this.options.lang}`); },
22
+ // Code is literal author content: escape it like Markdown text so HTML Next never interpolates it.
23
+ span(node) { for (const child of node.children)
24
+ if (child.type === 'text')
25
+ child.value = literal(child.value); },
26
+ };
27
+ // Plain text needs no grammar, yet takes line highlighting and numbers like any highlighted language.
28
+ const plain = new Set(['text', 'plaintext', 'txt', 'plain']);
29
+ async function highlight(code, lang, lines) {
30
+ // One highlighter serves every page; a grammar loads the first time a fence uses its language.
31
+ const shiki = await (highlighter ??= createHighlighter({ themes: Object.values(themes), langs: [] }));
32
+ if (!plain.has(lang))
33
+ await shiki.loadLanguage(lang);
34
+ return shiki.codeToHtml(code, { lang, themes, defaultColor: 'light-dark()', transformers: [shikiOutput, lines] });
35
+ }
36
+ // Line highlighting and numbers are classes written at build time; the theme's stylesheet draws them.
37
+ const lineClasses = (marked, numbers) => ({
38
+ pre(node) { if (numbers)
39
+ this.addClassToHast(node, 'line-numbers'); },
40
+ line(node, line) { if (marked.has(line))
41
+ this.addClassToHast(node, 'highlighted'); },
42
+ });
43
+ // A fence's first info word names its language unless it is an attribute, as in ```title="notes.txt".
44
+ // It ends at `{` or `:`, so VitePress's ```ts{1} and ```ts:line-numbers work too.
45
+ const fenceLanguage = (info = '') => /^[^\s={:]+(?=[\s{:]|$)/.exec(info)?.[0];
46
+ // Fence meta: `{1,3-5}` highlights lines, and `:line-numbers` or `:no-line-numbers` overrides the default.
47
+ function fenceLines(info = '') {
48
+ const meta = info.replace(/(?:^|\s)title="[^"]*"/, '');
49
+ const marked = new Set();
50
+ for (const range of /\{([\d\s,-]+)\}/.exec(meta)?.[1].split(',') ?? []) {
51
+ const [from = NaN, to = from] = range.split('-').map(part => Number.parseInt(part, 10));
52
+ for (let line = from; line <= to; line++)
53
+ marked.add(line);
54
+ }
55
+ const numbers = /:(no-)?line-numbers(?![\w-])/.exec(meta);
56
+ return { marked, numbers: numbers ? numbers[1] === undefined : undefined };
57
+ }
58
+ // `// [!code highlight]` at the end of a line highlights it and is removed, and `[!code highlight:3]` covers three
59
+ // lines. Alone on a line, the marker is removed with its line and applies to the lines after it.
60
+ // ponytail: matched on source lines rather than on Shiki's comment tokens, so a string ending in the marker counts too.
61
+ const notation = /[ \t]*(?:\/\/|#|--|<!--|\{?\/\*)[ \t]*\[!code highlight(?::(\d+))?\][ \t]*(?:-->|\*\/\}?)?[ \t]*$/;
62
+ function highlightNotation(code, marked) {
63
+ const lines = [];
64
+ for (const line of code.split('\n')) {
65
+ const match = notation.exec(line);
66
+ if (!match) {
67
+ lines.push(line);
68
+ continue;
69
+ }
70
+ const rest = line.slice(0, match.index), own = rest.trim() !== '';
71
+ if (own)
72
+ lines.push(rest);
73
+ for (let n = 0; n < Number(match[1] ?? 1); n++)
74
+ marked.add(lines.length + (own ? 0 : 1) + n);
75
+ }
76
+ return lines.join('\n');
77
+ }
78
+ // Hidden until the page's code controller connects, so without JavaScript a code block is only its code.
79
+ const codeActions = '<div class="code-actions" hidden aria-live="polite"><button type="button" data-code-action="wrap" aria-pressed="false">Wrap</button>' +
80
+ '<button type="button" data-code-action="copy">Copy</button></div>';
81
+ const fenceTitle = (info = '') => /(?:^|\s)title="([^"]*)"/.exec(info)?.[1];
82
+ // Looma's shared block vocabulary (its "Shared blocks" page): a container's name, matched without regard to
83
+ // case, is a callout tone, details or tabs. `caution` and GitHub's [!CAUTION] mean danger.
84
+ const tones = { note: 'note', tip: 'tip', info: 'info', important: 'important', warning: 'warning', danger: 'danger', caution: 'danger' };
85
+ const blocks = new Set([...Object.keys(tones), 'details', 'tabs', 'code-group']);
12
86
  function textContent(node) {
13
87
  if ('value' in node)
14
88
  return node.value;
@@ -26,31 +100,115 @@ function frontmatter(source, file) {
26
100
  throw new Error(`${file}: frontmatter must be a mapping.`);
27
101
  return { body: source.slice(match[0].length), fields: fields };
28
102
  }
29
- export function compileMarkdown(source, options) {
30
- const { body, fields } = frontmatter(source, options.file);
31
- for (const name of ['title', 'description', 'sidebarLabel', 'id']) {
32
- if (fields[name] !== undefined && (typeof fields[name] !== 'string' || fields[name] === ''))
33
- throw new Error(`${options.file}: ${name} must be a nonempty string.`);
103
+ const text = (value) => typeof value === 'string' && value !== '';
104
+ const strings = (value) => value !== null && typeof value === 'object' && !Array.isArray(value) &&
105
+ Object.values(value).every(item => typeof item === 'string' || typeof item === 'number');
106
+ const level = (value) => Number.isInteger(value) && value >= 1 && value <= 6;
107
+ const fieldTypes = {
108
+ title: [text, 'a nonempty string'], description: [text, 'a nonempty string'], sidebarLabel: [text, 'a nonempty string'], id: [text, 'a nonempty string'],
109
+ sidebarHidden: [value => typeof value === 'boolean', 'a boolean'],
110
+ sidebarPosition: [value => Number.isSafeInteger(value) && value >= 0, 'a whole number'],
111
+ aliases: [value => Array.isArray(value) && value.every(item => typeof item === 'string'), 'a list of route paths'],
112
+ layout: [value => value === false || text(value), 'an HTMLKit layout name or false'],
113
+ toc: [value => value === false || (Array.isArray(value) && value.length === 2 && value.every(level) && value[0] <= value[1]), 'false or a heading range such as [2, 3]'],
114
+ head: [value => (value !== null && typeof value === 'object' && !Array.isArray(value) && Object.entries(value).every(([key, item]) => key === 'canonical' ? text(item) : (key === 'meta' || key === 'og') && strings(item))), 'a mapping of meta, og and canonical'],
115
+ editLink: [value => value === false || text(value), 'a URL or false'],
116
+ };
117
+ function validFrontMatter(fields, file) {
118
+ for (const [name, value] of Object.entries(fields)) {
119
+ const type = fieldTypes[name];
120
+ if (type === undefined)
121
+ throw new Error(`${file}: unknown front matter field ${name}. Fields are ${Object.keys(fieldTypes).join(', ')}.`);
122
+ if (!type[0](value))
123
+ throw new Error(`${file}: front matter ${name} must be ${type[1]}.`);
34
124
  }
125
+ return fields;
126
+ }
127
+ export async function compileMarkdown(source, options) {
128
+ const { body, fields: raw } = frontmatter(source, options.file);
129
+ const fields = { ...options.frontmatter, ...validFrontMatter(raw, options.file) };
35
130
  const aliases = fields.aliases ?? [];
36
- if (fields.sidebarHidden !== undefined && typeof fields.sidebarHidden !== 'boolean')
37
- throw new Error(`${options.file}: sidebarHidden must be a boolean.`);
38
- if (!Array.isArray(aliases) || aliases.some(value => typeof value !== 'string'))
39
- throw new Error(`${options.file}: aliases must be a list of route paths.`);
40
- const headings = new Map();
41
- let firstHeading;
42
- const markdown = new Marked({ async: false, renderer: {
131
+ // Heading IDs: `used` holds every ID emitted so far, `reserved` every custom ID in the document.
132
+ const used = new Set(), reserved = new Set(), suffixes = new Map();
133
+ const customIds = new Map();
134
+ let firstHeading, hasCode = false;
135
+ const headings = [];
136
+ const highlighted = new Map();
137
+ // Code group panels labelled by their fence title, and the Looma components the page's blocks use. The page
138
+ // links each one by package specifier, as the theme's shell links ui-button, so the site resolves Looma.
139
+ const labelled = new WeakSet(), components = new Set();
140
+ const fail = (message) => { throw new Error(`${options.file}: ${message}`); };
141
+ // Tabs content is "== Label" panels; a code group may instead make each fence a panel labelled by its title.
142
+ const panels = (tokens, code) => {
143
+ const result = [];
144
+ const marked = tokens.some(token => token.type === 'tab-label');
145
+ for (const token of tokens) {
146
+ if (token.type === 'tab-label')
147
+ result.push({ type: 'tab-panel', raw: '', label: token.label, tokens: [] });
148
+ else if (marked && result.length > 0)
149
+ result.at(-1).tokens.push(token);
150
+ else if (!marked && code && token.type === 'code') {
151
+ labelled.add(token);
152
+ result.push({ type: 'tab-panel', raw: '', label: fenceTitle(token.lang) ?? fenceLanguage(token.lang) ?? 'Code', tokens: [token] });
153
+ }
154
+ else if (token.type !== 'space')
155
+ fail(code ? 'a code group holds fences, or "== Label" panels.' : 'tabs content starts with an "== Label" line.');
156
+ }
157
+ return result;
158
+ };
159
+ const markdown = new Marked({ async: true, async walkTokens(token) {
160
+ if (token.type === 'heading') {
161
+ // `## Title {#custom-id}` names the anchor; the marker ends the heading's last text token. Every token is
162
+ // walked before any renders, so a custom ID is reserved before an earlier heading could generate it.
163
+ const last = token.tokens?.at(-1);
164
+ const custom = last?.type === 'text' ? / +\{#([\w-]+)\}$/.exec(last.text) : null;
165
+ if (custom && last?.type === 'text') {
166
+ last.text = last.text.slice(0, custom.index);
167
+ customIds.set(token, custom[1]);
168
+ reserved.add(custom[1]);
169
+ }
170
+ return;
171
+ }
172
+ if (token.type !== 'code')
173
+ return;
174
+ const language = fenceLanguage(token.lang);
175
+ // Languages Shiki does not bundle stay escaped plain text.
176
+ if (!language || !(Object.hasOwn(bundledLanguages, language) || plain.has(language)))
177
+ return;
178
+ const { marked, numbers = options.lineNumbers ?? false } = fenceLines(token.lang);
179
+ highlighted.set(token, await highlight(highlightNotation(token.text, marked), language, lineClasses(marked, numbers)));
180
+ }, renderer: {
43
181
  text(token) { return 'tokens' in token && token.tokens ? this.parser.parseInline(token.tokens) : literal(token.text); },
44
182
  codespan({ text }) { return `<code>${literal(escapeHTML(text))}</code>`; },
45
- code({ text, lang }) { return `<pre><code${lang ? ` class="language-${escapeHTML(lang.split(/\s/)[0])}"` : ''}>${literal(escapeHTML(text))}</code></pre>\n`; },
46
- heading({ tokens, depth }) {
183
+ code(token) {
184
+ const { text, lang = '' } = token;
185
+ const language = fenceLanguage(lang);
186
+ // A code group's tab already shows a panel's fence title.
187
+ const title = labelled.has(token) ? undefined : fenceTitle(lang);
188
+ const pre = highlighted.get(token) ?? `<pre><code${language ? ` class="language-${escapeHTML(language)}"` : ''}>${literal(escapeHTML(text))}</code></pre>`;
189
+ hasCode = true;
190
+ return `<figure class="code">${title ? `<figcaption>${literal(escapeHTML(title))}</figcaption>` : ''}${codeActions}${pre}</figure>\n`;
191
+ },
192
+ heading(token) {
193
+ const { tokens, depth } = token;
47
194
  const html = this.parser.parseInline(tokens);
48
195
  const label = textContent(parseFragment(html)).replace(/\\([\\{])/g, '$1');
49
196
  firstHeading ??= label;
50
- const stem = label.normalize('NFKD').toLowerCase().replace(/[^\p{L}\p{N}]+/gu, '-').replace(/^-|-$/g, '') || 'heading';
51
- const count = headings.get(stem) ?? 0;
52
- headings.set(stem, count + 1);
53
- const id = count === 0 ? stem : `${stem}-${count}`;
197
+ const custom = customIds.get(token);
198
+ const stem = custom ?? (label.normalize('NFKD').toLowerCase().replace(/[^\p{L}\p{N}]+/gu, '-').replace(/^-|-$/g, '') || 'heading');
199
+ // A custom ID is kept unless an earlier heading used it. Any other ID takes the first free suffix,
200
+ // skipping IDs already used and custom IDs reserved by later headings, so no two headings share an ID.
201
+ const taken = (id) => used.has(id) || reserved.has(id);
202
+ let id = stem;
203
+ if (custom === undefined ? taken(id) : used.has(id)) {
204
+ let n = suffixes.get(stem) ?? 1;
205
+ while (taken(`${stem}-${n}`))
206
+ n++;
207
+ suffixes.set(stem, n + 1);
208
+ id = `${stem}-${n}`;
209
+ }
210
+ used.add(id);
211
+ headings.push({ id, href: `#${id}`, label, depth });
54
212
  return `<h${depth} id="${escapeHTML(id)}"><a href="#${escapeHTML(id)}">${html}</a></h${depth}>\n`;
55
213
  },
56
214
  link({ href, title, tokens }) {
@@ -78,8 +236,88 @@ export function compileMarkdown(source, options) {
78
236
  const raw = text.slice(0, end);
79
237
  return { type: 'native-component', raw };
80
238
  }, renderer(token) { return token.raw; },
81
- }] });
82
- const fragment = parseFragment(markdown.parse(body));
239
+ }, { name: 'container', level: 'block',
240
+ // `::: name Title` … `:::` is a shared block; any other name stays text. A container closes at the first
241
+ // marker at least as long as its own, so an outer container uses more colons than those it contains.
242
+ start(text) { return /^ {0,3}:{3,}[ \t]*(?:note|tip|info|important|warning|danger|caution|details|tabs|code-group)(?![\w-])/im.exec(text)?.index; },
243
+ tokenizer(text) {
244
+ const open = /^ {0,3}(:{3,})[ \t]*([A-Za-z][\w-]*)(?:[ \t]+([^\n]*?))?[ \t]*(?:\n|$)/.exec(text);
245
+ const name = open?.[2].toLowerCase();
246
+ if (!open || !name || !blocks.has(name))
247
+ return undefined;
248
+ const close = new RegExp(`^ {0,3}:{${open[1].length},}[ \\t]*$`);
249
+ // A marker line inside fenced code is code, so the scan skips fences while looking for the close.
250
+ let fence;
251
+ let offset = open[0].length;
252
+ for (const line of text.slice(offset).split('\n')) {
253
+ if (fence) {
254
+ if (fence.test(line))
255
+ fence = undefined;
256
+ }
257
+ else if (close.test(line)) {
258
+ // Like a blockquote, the content is a document of its own, so its paragraphs stay paragraphs inside a list.
259
+ // `== Label` lines start panels only directly inside tabs.
260
+ const grouped = name === 'tabs' || name === 'code-group';
261
+ const state = this.lexer.state, { top, tabs } = state;
262
+ state.top = true;
263
+ state.tabs = grouped;
264
+ const tokens = this.lexer.blockTokens(text.slice(open[0].length, offset));
265
+ state.top = top;
266
+ state.tabs = tabs;
267
+ return { type: 'container', raw: text.slice(0, offset + line.length + 1), name, title: open[3] ?? '', tokens: grouped ? panels(tokens, name === 'code-group') : tokens };
268
+ }
269
+ else {
270
+ const opener = /^ {0,3}(`{3,}|~{3,})/.exec(line)?.[1];
271
+ if (opener)
272
+ fence = new RegExp(`^ {0,3}${opener[0]}{${opener.length},}[ \\t]*$`);
273
+ }
274
+ offset += line.length + 1;
275
+ }
276
+ return undefined;
277
+ }, renderer(token) {
278
+ const { name, title } = token;
279
+ const content = (tokens = token.tokens ?? []) => this.parser.parse(tokens);
280
+ const tone = tones[name];
281
+ if (tone) {
282
+ components.add('ui-callout');
283
+ return `<ui-callout tone="${tone}"${title ? ` heading="${escapeHTML(title)}"` : ''}>\n${content()}</ui-callout>\n`;
284
+ }
285
+ // Native <details> opens without JavaScript and find-in-page can reveal it; the contract allows it in place of ui-disclosure.
286
+ if (name === 'details') {
287
+ const [, summary, open] = /^(.*?)[ \t]*(\{open\})?$/.exec(title);
288
+ return `<details${open ? ' open' : ''}><summary>${literal(escapeHTML(summary || 'Details'))}</summary>\n${content()}</details>\n`;
289
+ }
290
+ // Tabs of one group keep one selection across the page and remember it; the group defaults to the block name.
291
+ components.add('ui-tabs');
292
+ return `<ui-tabs${name === 'code-group' ? ' class="code-group"' : ''} group="${escapeHTML(title || name)}">\n${token.tokens.map(panel => `<section aria-label="${escapeHTML(panel.label)}">\n${content(panel.tokens)}</section>\n`).join('')}</ui-tabs>\n`;
293
+ },
294
+ }, { name: 'alert', level: 'block',
295
+ // A GitHub alert, `> [!TIP]` alone on a quote's first line, is a callout without a title.
296
+ start(text) { return /^ {0,3}>[ \t]?\[!/m.exec(text)?.index; },
297
+ tokenizer(text) {
298
+ const kind = /^ {0,3}>[ \t]?\[!(note|tip|important|warning|caution)\][ \t]*(?:\n|$)/i.exec(text)?.[1];
299
+ const quote = kind === undefined ? undefined : this.lexer.tokenizer.blockquote(text);
300
+ if (!kind || !quote)
301
+ return undefined;
302
+ const state = this.lexer.state, { top, tabs } = state;
303
+ state.top = true;
304
+ state.tabs = false;
305
+ const tokens = this.lexer.blockTokens(quote.text.replace(/^[^\n]*\n?/, ''));
306
+ state.top = top;
307
+ state.tabs = tabs;
308
+ return { type: 'container', raw: quote.raw, name: kind.toLowerCase(), title: '', tokens };
309
+ },
310
+ }, { name: 'tab-label', level: 'block',
311
+ start(text) { return this.lexer.state.tabs ? /^ {0,3}==[ \t]/m.exec(text)?.index : undefined; },
312
+ tokenizer(text) {
313
+ if (!this.lexer.state.tabs)
314
+ return undefined;
315
+ const label = /^ {0,3}==[ \t]+(\S[^\n]*?)[ \t]*(?:\n|$)/.exec(text);
316
+ return label ? { type: 'tab-label', raw: label[0], label: label[1] } : undefined;
317
+ },
318
+ // Panels consume the labels directly inside tabs; one nested deeper, as in a quote, stays text.
319
+ renderer(token) { return `<p>${literal(escapeHTML(token.raw.trim()))}</p>\n`; }, }] });
320
+ const fragment = parseFragment(await markdown.parse(body));
83
321
  const declarations = [];
84
322
  const metadata = [];
85
323
  const original = pathToFileURL(resolve(options.file)).href;
@@ -120,10 +358,25 @@ export function compileMarkdown(source, options) {
120
358
  }
121
359
  };
122
360
  visit(fragment, false);
123
- const title = fields.title ?? firstHeading ?? basename(options.file, '.md').replace(/^\d+-/, '');
361
+ for (const name of components)
362
+ declarations.push(`<link rel="component" href="@threadlabs/looma/components/${name}/${name}.html">`);
363
+ const title = fields.title ?? firstHeading ?? basename(options.file, '.md').replace(/^\d+\./, '');
124
364
  const label = fields.sidebarLabel ?? title;
125
- const head = `<title>${literal(escapeHTML(title))}</title>` + (fields.description === undefined ? '' : `<meta name="description" content="${escapeHTML(fields.description)}">`);
365
+ // Front matter becomes HTMLKit page metadata: HTMLKit owns navigation labels, order, visibility, alias routes, the
366
+ // layout choice, and the document head, which merges meta and canonical links by identity.
367
+ const { meta = {}, og = {}, canonical } = fields.head ?? {};
368
+ const head = `<title>${literal(escapeHTML(title))}</title>` + (fields.description === undefined ? '' : `<meta name="description" content="${escapeHTML(fields.description)}">`) +
369
+ `<meta name="hk:label" content="${escapeHTML(label)}">` + (fields.sidebarHidden === true ? '<meta name="hk:navigation" content="hidden">' : '') +
370
+ (fields.sidebarPosition === undefined ? '' : `<meta name="hk:order" content="${fields.sidebarPosition}">`) +
371
+ aliases.map(alias => `<meta name="hk:alias" content="${escapeHTML(alias)}">`).join('') +
372
+ (fields.layout === undefined ? '' : `<meta name="hk:layout" content="${fields.layout === false ? 'none' : escapeHTML(fields.layout)}">`) +
373
+ Object.entries(meta).map(([name, content]) => `<meta name="${escapeHTML(name)}" content="${escapeHTML(String(content))}">`).join('') +
374
+ Object.entries(og).map(([name, content]) => `<meta property="og:${escapeHTML(name)}" content="${escapeHTML(String(content))}">`).join('') +
375
+ (canonical === undefined ? '' : `<link rel="canonical" href="${escapeHTML(canonical)}">`);
376
+ const [from, to] = fields.toc === false ? [0, -1] : fields.toc ?? [2, 3];
377
+ const styles = options.styles?.length ? `<style>${options.styles.map(file => `@import "${pathToFileURL(file).href}";`).join('')}</style>` : '';
126
378
  return { title, label, aliases, sidebarHidden: fields.sidebarHidden === true, ...(fields.id === undefined ? {} : { id: fields.id }),
127
- resource: `<meta name="htmlkit:page" content="${escapeHTML(options.pageName)}">\n${declarations.join('\n')}\n<template component="${escapeHTML(options.pageName)}">${head}${metadata.join('')}<article class="markupress-prose">${serialize(fragment)}</article></template>\n` };
379
+ frontmatter: fields, outline: headings.filter(heading => heading.depth >= from && heading.depth <= to),
380
+ resource: `<meta name="hk:page" content="${escapeHTML(options.pageName)}">\n${declarations.join('\n')}\n<template component="${escapeHTML(options.pageName)}"${hasCode ? ' controller="markupress/controllers/code.js"' : ''}>${head}${metadata.join('')}<article class="markupress-prose">${serialize(fragment)}</article>${styles}</template>\n` };
128
381
  }
129
382
  //# sourceMappingURL=content.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ComponentHost } from '@nextwebwg/html-next/runtime';
2
+ /**
3
+ * A Markdown page's code block buttons. One delegated listener serves every block; native buttons give
4
+ * keyboard access, and the clipboard API copies the code's text, which excludes CSS line numbers.
5
+ */
6
+ export default function code(host: ComponentHost): void;
7
+ //# sourceMappingURL=code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/controllers/code.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAuBtD"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * A Markdown page's code block buttons. One delegated listener serves every block; native buttons give
3
+ * keyboard access, and the clipboard API copies the code's text, which excludes CSS line numbers.
4
+ */
5
+ export default function code(host) {
6
+ host.on('connect', () => {
7
+ const root = host.root;
8
+ const window = root.ownerDocument.defaultView;
9
+ for (const actions of root.querySelectorAll('.code-actions'))
10
+ actions.hidden = false;
11
+ const click = (event) => {
12
+ const button = event.target instanceof window.Element ? event.target.closest('button[data-code-action]') : null;
13
+ const pre = button?.closest('figure.code')?.querySelector('pre');
14
+ if (!button || !pre || !root.contains(button))
15
+ return;
16
+ if (button.dataset.codeAction === 'wrap') {
17
+ const wrap = button.getAttribute('aria-pressed') !== 'true';
18
+ button.setAttribute('aria-pressed', String(wrap));
19
+ pre.classList.toggle('wrap', wrap);
20
+ return;
21
+ }
22
+ void window.navigator.clipboard.writeText(pre.textContent ?? '').then(() => 'Copied', () => 'Copy failed').then(label => {
23
+ button.textContent = label;
24
+ window.setTimeout(() => { button.textContent = 'Copy'; }, 2000);
25
+ });
26
+ };
27
+ root.addEventListener('click', click);
28
+ return () => root.removeEventListener('click', click);
29
+ });
30
+ }
31
+ //# sourceMappingURL=code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/controllers/code.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,IAAmB;IAC9C,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,WAAY,CAAC;QAC/C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAc,eAAe,CAAC;YAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;QAClG,MAAM,KAAK,GAAG,CAAC,KAAY,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,YAAY,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAoB,0BAA0B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACnI,MAAM,GAAG,GAAG,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACjE,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO;YACtD,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,MAAM,CAAC;gBAC5D,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClD,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,KAAK,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACtH,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;gBAC3B,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ComponentHost } from '@nextwebwg/html-next/runtime';
2
+ /**
3
+ * Marks the outline link of the heading being read with aria-current="location". An IntersectionObserver
4
+ * watches the page's headings: the current one is the last heading that has reached the top fifth of the
5
+ * viewport, and none is current above the first. The outline is plain fragment links, so without JavaScript only this marking is missing.
6
+ */
7
+ export default function outline(host: ComponentHost): void;
8
+ //# sourceMappingURL=outline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../src/controllers/outline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAiCzD"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Marks the outline link of the heading being read with aria-current="location". An IntersectionObserver
3
+ * watches the page's headings: the current one is the last heading that has reached the top fifth of the
4
+ * viewport, and none is current above the first. The outline is plain fragment links, so without JavaScript only this marking is missing.
5
+ */
6
+ export default function outline(host) {
7
+ host.on('connect', () => {
8
+ const document = host.root.ownerDocument;
9
+ const window = document.defaultView;
10
+ let observer;
11
+ const observe = () => {
12
+ observer?.disconnect();
13
+ const links = [...host.root.querySelectorAll('a[href^="#"]')];
14
+ const headings = links.map(link => document.getElementById(decodeURIComponent(link.hash.slice(1)))).filter(heading => heading !== null);
15
+ const reached = new Set();
16
+ const mark = () => {
17
+ const current = headings.filter(heading => reached.has(heading)).at(-1);
18
+ for (const link of links) {
19
+ if (link.hash.slice(1) === current?.id)
20
+ link.setAttribute('aria-current', 'location');
21
+ else
22
+ link.removeAttribute('aria-current');
23
+ }
24
+ };
25
+ observer = new window.IntersectionObserver(entries => {
26
+ for (const entry of entries) {
27
+ // In the band, or gone out through its top edge; a heading below the band is not reached yet.
28
+ if (entry.isIntersecting || entry.boundingClientRect.top < (entry.rootBounds?.top ?? 0))
29
+ reached.add(entry.target);
30
+ else
31
+ reached.delete(entry.target);
32
+ }
33
+ mark();
34
+ }, { rootMargin: '0px 0px -80% 0px' });
35
+ for (const heading of headings)
36
+ observer.observe(heading);
37
+ };
38
+ observe();
39
+ // HTMLKit swaps pages in place through the Navigation API; the outline then lists the new page's headings.
40
+ const navigation = window.navigation;
41
+ navigation?.addEventListener('navigatesuccess', observe);
42
+ return () => { observer?.disconnect(); navigation?.removeEventListener('navigatesuccess', observe); };
43
+ });
44
+ }
45
+ //# sourceMappingURL=outline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline.js","sourceRoot":"","sources":["../../src/controllers/outline.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,IAAmB;IACjD,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAY,CAAC;QACrC,IAAI,QAA0C,CAAC;QAC/C,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,QAAQ,EAAE,UAAU,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAoB,cAAc,CAAC,CAAC,CAAC;YACjF,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;YACxI,MAAM,OAAO,GAAG,IAAI,GAAG,EAAW,CAAC;YACnC,MAAM,IAAI,GAAG,GAAG,EAAE;gBAChB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,EAAE;wBAAE,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;;wBACjF,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC,CAAC;YACF,QAAQ,GAAG,IAAI,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;gBACnD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,8FAA8F;oBAC9F,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;wBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;wBAC9G,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACpC,CAAC;gBACD,IAAI,EAAE,CAAC;YACT,CAAC,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACvC,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC,CAAC;QACF,OAAO,EAAE,CAAC;QACV,2GAA2G;QAC3G,MAAM,UAAU,GAAI,MAAgD,CAAC,UAAU,CAAC;QAChF,UAAU,EAAE,gBAAgB,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACzD,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,mBAAmB,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,4 +1,9 @@
1
1
  import type { ComponentHost } from '@nextwebwg/html-next/runtime';
2
- /** Native controls and storage own interaction; HTML Next owns reactive state and cleanup. */
2
+ /**
3
+ * Native controls and storage own interaction; HTML Next owns reactive state and cleanup. The drawer is a
4
+ * native popover and the dropdowns are native details, which open without this controller. HTMLKit keeps
5
+ * the shell across client navigation, so a followed link here closes the drawer and any open dropdown, as a
6
+ * document load would.
7
+ */
3
8
  export default function shell(host: ComponentHost): void;
4
9
  //# sourceMappingURL=shell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/controllers/shell.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,8FAA8F;AAC9F,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAiCvD"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/controllers/shell.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CA0BvD"}