@refrakt-md/highlight 0.11.3 → 0.14.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/dist/highlight.d.ts +9 -1
- package/dist/highlight.d.ts.map +1 -1
- package/dist/highlight.js +25 -5
- package/dist/highlight.js.map +1 -1
- package/package.json +3 -3
package/dist/highlight.d.ts
CHANGED
|
@@ -8,11 +8,19 @@ export interface HighlightOptions {
|
|
|
8
8
|
* Default: Shiki with css-variables theme. */
|
|
9
9
|
highlight?: (code: string, lang: string) => string;
|
|
10
10
|
/** Shiki theme — a built-in theme name, or { light, dark } pair for dual themes.
|
|
11
|
-
* Default: CSS variables theme
|
|
11
|
+
* Default: CSS variables theme emitting `--rf-syntax-*` custom properties
|
|
12
|
+
* (see SPEC-048 — the contract surface that hides the highlighter from themes). */
|
|
12
13
|
theme?: string | {
|
|
13
14
|
light: string;
|
|
14
15
|
dark: string;
|
|
15
16
|
};
|
|
17
|
+
/** Force fenced code blocks to a fixed colour scheme regardless of the page's
|
|
18
|
+
* light/dark mode. When set to `'light'` or `'dark'`, every `<pre>` carrying
|
|
19
|
+
* a `data-language` attribute is stamped with `data-color-scheme=<value>`
|
|
20
|
+
* so the existing token cascade (`[data-color-scheme="dark"]` rules in
|
|
21
|
+
* Lumina and in the generated site-tokens.css) flips that subtree's
|
|
22
|
+
* syntax + code-surface variables. Default `'auto'` (no attribute added). */
|
|
23
|
+
codeColorScheme?: 'auto' | 'light' | 'dark';
|
|
16
24
|
}
|
|
17
25
|
/** A highlight transform function with an attached `.css` property containing
|
|
18
26
|
* any CSS needed for the selected theme (background overrides, dual-theme toggle). */
|
package/dist/highlight.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../src/highlight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAqD,MAAM,OAAO,CAAC;AAErG,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../src/highlight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAqD,MAAM,OAAO,CAAC;AAErG,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,mBAAmB,CAAC;AAUrE,MAAM,WAAW,gBAAgB;IAChC;iFAC6E;IAC7E,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,oBAAoB,CAAC,EAAE,CAAC;IAC1C;mDAC+C;IAC/C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACnD;;wFAEoF;IACpF,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD;;;;;kFAK8E;IAC9E,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CAC5C;AAED;uFACuF;AACvF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,CAAC,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAU1F;;;;;;;;;;;GAWG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,GAAE,gBAAqB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAoD7B"}
|
package/dist/highlight.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { createHighlighter, createCssVariablesTheme } from 'shiki';
|
|
2
2
|
import { isTag } from '@refrakt-md/transform';
|
|
3
3
|
import { markdocLanguage } from './langs/markdoc.js';
|
|
4
|
-
|
|
4
|
+
/** The CSS-variables theme uses `--rf-syntax-*` instead of Shiki's default
|
|
5
|
+
* `--shiki-*` prefix, so the highlighter is invisible to themes that only
|
|
6
|
+
* see the `--rf-syntax-*` contract surface (SPEC-048). Swapping Shiki for
|
|
7
|
+
* Prism, Starry Night, or a server-side alternative becomes an internal
|
|
8
|
+
* change rather than a breaking change for every downstream theme. */
|
|
9
|
+
const cssVarsTheme = createCssVariablesTheme({ variablePrefix: '--rf-syntax-' });
|
|
5
10
|
const DEFAULT_LANGS = [
|
|
6
11
|
'javascript', 'typescript', 'html', 'css', 'json', 'shell',
|
|
7
12
|
'python', 'ruby', 'go', 'rust', 'java', 'c', 'cpp',
|
|
@@ -22,7 +27,10 @@ const DEFAULT_LANGS = [
|
|
|
22
27
|
* for the selected theme (background color overrides, dual-theme toggle rules).
|
|
23
28
|
*/
|
|
24
29
|
export async function createHighlightTransform(options = {}) {
|
|
25
|
-
const { langs = DEFAULT_LANGS, highlight: customHighlight, theme } = options;
|
|
30
|
+
const { langs = DEFAULT_LANGS, highlight: customHighlight, theme, codeColorScheme } = options;
|
|
31
|
+
const forcedScheme = codeColorScheme === 'light' || codeColorScheme === 'dark'
|
|
32
|
+
? codeColorScheme
|
|
33
|
+
: undefined;
|
|
26
34
|
let highlightFn;
|
|
27
35
|
let css = '';
|
|
28
36
|
if (customHighlight) {
|
|
@@ -67,7 +75,7 @@ export async function createHighlightTransform(options = {}) {
|
|
|
67
75
|
return extractInnerHtml(html);
|
|
68
76
|
};
|
|
69
77
|
}
|
|
70
|
-
const transform = ((tree) => walk(tree, highlightFn));
|
|
78
|
+
const transform = ((tree) => walk(tree, highlightFn, forcedScheme));
|
|
71
79
|
transform.css = css;
|
|
72
80
|
return transform;
|
|
73
81
|
}
|
|
@@ -118,7 +126,7 @@ pre[data-language] {
|
|
|
118
126
|
`;
|
|
119
127
|
}
|
|
120
128
|
/** Walk the serialized tree, highlighting elements with `data-language`. */
|
|
121
|
-
function walk(node, highlightFn) {
|
|
129
|
+
function walk(node, highlightFn, forcedScheme) {
|
|
122
130
|
if (node === null || node === undefined)
|
|
123
131
|
return node;
|
|
124
132
|
if (typeof node === 'string' || typeof node === 'number')
|
|
@@ -129,9 +137,21 @@ function walk(node, highlightFn) {
|
|
|
129
137
|
if (lang && hasTextChildren(node)) {
|
|
130
138
|
return highlightNode(node, lang, highlightFn);
|
|
131
139
|
}
|
|
140
|
+
// `<pre data-language>` is the codeblock wrapper. Stamp the forced colour
|
|
141
|
+
// scheme on it before recursing — `data-color-scheme` cascades through the
|
|
142
|
+
// pre's CSS custom properties (background, foreground, all syntax tokens),
|
|
143
|
+
// which is what the inline Shiki spans inside resolve `var(--rf-syntax-*)`
|
|
144
|
+
// against. The `<code>` child gets highlighted via the recursion below.
|
|
145
|
+
if (forcedScheme && lang && node.name === 'pre') {
|
|
146
|
+
return {
|
|
147
|
+
...node,
|
|
148
|
+
attributes: { ...node.attributes, 'data-color-scheme': forcedScheme },
|
|
149
|
+
children: node.children.map(c => walk(c, highlightFn, forcedScheme)),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
132
152
|
return {
|
|
133
153
|
...node,
|
|
134
|
-
children: node.children.map(c => walk(c, highlightFn)),
|
|
154
|
+
children: node.children.map(c => walk(c, highlightFn, forcedScheme)),
|
|
135
155
|
};
|
|
136
156
|
}
|
|
137
157
|
function hasTextChildren(node) {
|
package/dist/highlight.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../src/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,OAAO,CAAC;AAEnE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,YAAY,GAAG,uBAAuB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../src/highlight.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@refrakt-md/highlight",
|
|
3
3
|
"description": "Syntax highlighting transform for refrakt.md — Shiki-based tree walker with pluggable highlighter",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.14.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"build": "tsc"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@refrakt-md/types": "0.
|
|
33
|
-
"@refrakt-md/transform": "0.
|
|
32
|
+
"@refrakt-md/types": "0.14.0",
|
|
33
|
+
"@refrakt-md/transform": "0.14.0",
|
|
34
34
|
"shiki": "^3.0.0"
|
|
35
35
|
}
|
|
36
36
|
}
|