@podlite/editor-react 0.0.46 → 0.0.47
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.podlite +6 -0
- package/esm/HighlightedCode.js +8 -1
- package/esm/HighlightedCode.js.map +1 -1
- package/esm/shiki.d.ts +3 -3
- package/esm/shiki.js +15 -15
- package/esm/shiki.js.map +1 -1
- package/lib/HighlightedCode.js +8 -1
- package/lib/HighlightedCode.js.map +1 -1
- package/lib/shiki.d.ts +3 -3
- package/lib/shiki.js +16 -16
- package/lib/shiki.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.podlite
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
=head1 Upcoming
|
|
4
4
|
|
|
5
|
+
=head1 0.0.47
|
|
6
|
+
|
|
7
|
+
=item fix C<=code> blocks with C<:allow<...>> losing fcode formatting
|
|
8
|
+
|
|
9
|
+
=item fix Next.js / webpack build error on shiki ESM import
|
|
10
|
+
|
|
5
11
|
=head1 0.0.46
|
|
6
12
|
|
|
7
13
|
=item fix task-list checkboxes invisible in full-preview mode — the C<content-visibility: auto> rule added in 0.0.44 was scoped to all C<.line-src> descendants, which re-introduced C<contain: size layout paint> on inner wrappers inside C<< <li> >> and broke the flex layout of C<.task-list-item>. Scoped the rule to direct children of C<.content> only; nested wrappers inside ul/ol/li/details/summary keep C<contain: none> from the existing carve-out, and the off-screen defer stays effective on top-level blocks
|
package/esm/HighlightedCode.js
CHANGED
|
@@ -8,8 +8,15 @@ const HighlightedCode = React.memo(({ node, children, keyProp, ctx }) => {
|
|
|
8
8
|
const conf = makeAttrs(node, ctx);
|
|
9
9
|
const caption = conf.exists('caption') ? conf.getFirstValue('caption') : null;
|
|
10
10
|
const lang = conf.getFirstValue('lang') || 'txt';
|
|
11
|
+
// Per spec, :allow<...> is a list of fcode names recognized inside the
|
|
12
|
+
// block. Any value flips fcode parsing on, so shiki would flatten the
|
|
13
|
+
// resulting nodes to plain text. Skip highlighting and let the fallback
|
|
14
|
+
// render children with their fcode wrappers intact.
|
|
15
|
+
const allowsFormattingCodes = conf.getAllValues('allow').length > 0;
|
|
11
16
|
const [html, setHtml] = useState(null);
|
|
12
17
|
useEffect(() => {
|
|
18
|
+
if (allowsFormattingCodes)
|
|
19
|
+
return;
|
|
13
20
|
let cancelled = false;
|
|
14
21
|
const highlight = async () => {
|
|
15
22
|
try {
|
|
@@ -30,7 +37,7 @@ const HighlightedCode = React.memo(({ node, children, keyProp, ctx }) => {
|
|
|
30
37
|
return () => {
|
|
31
38
|
cancelled = true;
|
|
32
39
|
};
|
|
33
|
-
}, [lang, node.content]);
|
|
40
|
+
}, [lang, node.content, allowsFormattingCodes]);
|
|
34
41
|
return html ? (React.createElement(React.Fragment, null,
|
|
35
42
|
React.createElement("code", { key: keyProp, className: "shiki", dangerouslySetInnerHTML: { __html: html } }),
|
|
36
43
|
caption && React.createElement("div", { className: "caption" }, caption))) : (React.createElement(React.Fragment, null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HighlightedCode.js","sourceRoot":"","sources":["../src/HighlightedCode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAS1C;;GAEG;AACH,MAAM,eAAe,GAAmC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;IACtG,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"HighlightedCode.js","sourceRoot":"","sources":["../src/HighlightedCode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAS1C;;GAEG;AACH,MAAM,eAAe,GAAmC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;IACtG,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,KAAK,CAAA;IAChD,uEAAuE;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,oDAAoD;IACpD,MAAM,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAEnE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,qBAAqB;YAAE,OAAM;QACjC,IAAI,SAAS,GAAG,KAAK,CAAA;QAErB,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YAC3B,IAAI;gBACF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;gBACrE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;oBACpC,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC1C,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;iBACjC,CAAC,CAAA;gBACF,IAAI,CAAC,SAAS;oBAAE,OAAO,CAAC,MAAM,CAAC,CAAA;aAChC;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,CAAC,CAAC,CAAA;aACrD;QACH,CAAC,CAAA;QAED,SAAS,EAAE,CAAA;QACX,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAA;IAE/C,OAAO,IAAI,CAAC,CAAC,CAAC,CACZ;QACE,8BAAM,GAAG,EAAE,OAAO,EAAE,SAAS,EAAC,OAAO,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAI;QAClF,OAAO,IAAI,6BAAK,SAAS,EAAC,SAAS,IAAE,OAAO,CAAO,CACnD,CACJ,CAAC,CAAC,CAAC,CACF;QACE;YACE,8BAAM,GAAG,EAAE,OAAO,IAAG,QAAQ,CAAQ,CACjC;QACL,OAAO,IAAI,6BAAK,SAAS,EAAC,SAAS,IAAE,OAAO,CAAO,CACnD,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,eAAe,CAAA"}
|
package/esm/shiki.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { BundledLanguage, Highlighter } from 'shiki';
|
|
2
2
|
export declare type ExtendedLanguage = BundledLanguage | 'txt';
|
|
3
|
-
export declare function normalizeLanguage(language?: string): ExtendedLanguage
|
|
3
|
+
export declare function normalizeLanguage(language?: string): Promise<ExtendedLanguage>;
|
|
4
4
|
export declare function getHighlighter(language?: string): Promise<Highlighter>;
|
|
5
5
|
export declare function codeToHtml({ code, language }: {
|
|
6
6
|
code: string;
|
|
@@ -11,4 +11,4 @@ export declare function codeToThemedHtml({ code, language, theme, }: {
|
|
|
11
11
|
language: string;
|
|
12
12
|
theme?: 'light' | 'dark' | 'auto';
|
|
13
13
|
}): Promise<string>;
|
|
14
|
-
export declare const isLanguageLoaded: (language:
|
|
14
|
+
export declare const isLanguageLoaded: (language: ExtendedLanguage) => boolean;
|
package/esm/shiki.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
const loadShiki = new Function('return import("shiki")');
|
|
2
2
|
// Configuration
|
|
3
3
|
const CONFIG = {
|
|
4
4
|
themes: {
|
|
@@ -58,10 +58,11 @@ const state = {
|
|
|
58
58
|
warnedLanguages: new Set(),
|
|
59
59
|
};
|
|
60
60
|
// Normalize language to valid Shiki language
|
|
61
|
-
export function normalizeLanguage(language) {
|
|
61
|
+
export async function normalizeLanguage(language) {
|
|
62
62
|
if (!language)
|
|
63
63
|
return 'txt';
|
|
64
64
|
const normalized = language.toLowerCase();
|
|
65
|
+
const { bundledLanguages } = await loadShiki();
|
|
65
66
|
if (normalized in bundledLanguages) {
|
|
66
67
|
return normalized;
|
|
67
68
|
}
|
|
@@ -77,15 +78,16 @@ export function normalizeLanguage(language) {
|
|
|
77
78
|
// Get or create highlighter instance
|
|
78
79
|
async function getHighlighterInstance() {
|
|
79
80
|
if (!state.initPromise) {
|
|
80
|
-
state.initPromise =
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
state.initPromise = (async () => {
|
|
82
|
+
const { createHighlighter } = await loadShiki();
|
|
83
|
+
const instance = await createHighlighter({
|
|
84
|
+
themes: Object.values(CONFIG.themes),
|
|
85
|
+
langs: CONFIG.initialLanguages,
|
|
86
|
+
});
|
|
85
87
|
state.instance = instance;
|
|
86
88
|
CONFIG.initialLanguages.forEach(lang => state.loadedLanguages.add(lang));
|
|
87
89
|
return instance;
|
|
88
|
-
});
|
|
90
|
+
})();
|
|
89
91
|
}
|
|
90
92
|
return state.initPromise;
|
|
91
93
|
}
|
|
@@ -105,14 +107,14 @@ async function ensureLanguageLoaded(instance, lang) {
|
|
|
105
107
|
}
|
|
106
108
|
// Main API: get highlighter with language loaded
|
|
107
109
|
export async function getHighlighter(language) {
|
|
108
|
-
const lang = normalizeLanguage(language);
|
|
110
|
+
const lang = await normalizeLanguage(language);
|
|
109
111
|
const instance = await getHighlighterInstance();
|
|
110
112
|
await ensureLanguageLoaded(instance, lang);
|
|
111
113
|
return instance;
|
|
112
114
|
}
|
|
113
115
|
// Convenience: convert code to HTML with dual themes (CSS-based switching)
|
|
114
116
|
export async function codeToHtml({ code, language }) {
|
|
115
|
-
const lang = normalizeLanguage(language);
|
|
117
|
+
const lang = await normalizeLanguage(language);
|
|
116
118
|
const highlighter = await getHighlighter(language);
|
|
117
119
|
return highlighter.codeToHtml(code, {
|
|
118
120
|
lang,
|
|
@@ -121,23 +123,21 @@ export async function codeToHtml({ code, language }) {
|
|
|
121
123
|
}
|
|
122
124
|
// Convert code to HTML with explicit theme selection (for runtime theme detection)
|
|
123
125
|
export async function codeToThemedHtml({ code, language, theme, }) {
|
|
124
|
-
const lang = normalizeLanguage(language);
|
|
126
|
+
const lang = await normalizeLanguage(language);
|
|
125
127
|
const highlighter = await getHighlighter(language);
|
|
126
|
-
// Single theme mode (for runtime detection)
|
|
127
128
|
if (theme === 'light' || theme === 'dark') {
|
|
128
129
|
return highlighter.codeToHtml(code, {
|
|
129
130
|
lang,
|
|
130
131
|
theme: CONFIG.themes[theme],
|
|
131
132
|
});
|
|
132
133
|
}
|
|
133
|
-
// Dual theme mode (CSS-based switching)
|
|
134
134
|
return highlighter.codeToHtml(code, {
|
|
135
135
|
lang,
|
|
136
136
|
themes: CONFIG.themes,
|
|
137
137
|
});
|
|
138
138
|
}
|
|
139
|
-
// Check if a language is loaded
|
|
139
|
+
// Check if a language is loaded (sync — only meaningful after a prior async normalize)
|
|
140
140
|
export const isLanguageLoaded = (language) => {
|
|
141
|
-
return state.loadedLanguages.has(
|
|
141
|
+
return state.loadedLanguages.has(language);
|
|
142
142
|
};
|
|
143
143
|
//# sourceMappingURL=shiki.js.map
|
package/esm/shiki.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shiki.js","sourceRoot":"","sources":["../src/shiki.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shiki.js","sourceRoot":"","sources":["../src/shiki.tsx"],"names":[],"mappings":"AAQA,MAAM,SAAS,GAA+B,IAAI,QAAQ,CAAC,wBAAwB,CAA+B,CAAA;AAElH,gBAAgB;AAChB,MAAM,MAAM,GAAG;IACb,MAAM,EAAE;QACN,KAAK,EAAE,WAA2B;QAClC,IAAI,EAAE,aAA6B;KACpC;IACD,gBAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,CAAsB;CAC/C,CAAA;AAKV,2BAA2B;AAC3B,MAAM,eAAe,GAAqC;IACxD,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,KAAK;IACZ,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,OAAO;IACZ,WAAW,EAAE,OAAO;IACpB,cAAc,EAAE,OAAO;IACvB,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,OAAO;IACjB,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,YAAY;IACpB,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,QAAQ;IACZ,OAAO,EAAE,QAAQ;IACjB,GAAG,EAAE,QAAQ;IACb,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,UAAU;IACd,GAAG,EAAE,KAAK;IACV,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,KAAK;IACZ,UAAU,EAAE,KAAK;IACjB,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;CACd,CAAA;AAED,kBAAkB;AAClB,MAAM,KAAK,GAAG;IACZ,QAAQ,EAAE,IAA0B;IACpC,WAAW,EAAE,IAAmC;IAChD,eAAe,EAAE,IAAI,GAAG,CAAmB,CAAC,KAAK,CAAC,CAAC;IACnD,YAAY,EAAE,IAAI,GAAG,EAAmC;IACxD,eAAe,EAAE,IAAI,GAAG,EAAU;CACnC,CAAA;AAED,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAiB;IACvD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE3B,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;IACzC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,SAAS,EAAE,CAAA;IAE9C,IAAI,UAAU,IAAI,gBAAgB,EAAE;QAClC,OAAO,UAA6B,CAAA;KACrC;IAED,IAAI,UAAU,IAAI,eAAe,EAAE;QACjC,OAAO,eAAe,CAAC,UAAU,CAAC,CAAA;KACnC;IAED,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QACxC,OAAO,CAAC,IAAI,CAAC,0CAA0C,QAAQ,wBAAwB,CAAC,CAAA;QACxF,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;KACpC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,qCAAqC;AACrC,KAAK,UAAU,sBAAsB;IACnC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;QACtB,KAAK,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;YAC9B,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,SAAS,EAAE,CAAA;YAC/C,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;gBACvC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAmB;gBACtD,KAAK,EAAE,MAAM,CAAC,gBAAgB;aAC/B,CAAC,CAAA;YACF,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACzB,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;YACxE,OAAO,QAAQ,CAAA;QACjB,CAAC,CAAC,EAAE,CAAA;KACL;IACD,OAAO,KAAK,CAAC,WAAW,CAAA;AAC1B,CAAC;AAED,wCAAwC;AACxC,KAAK,UAAU,oBAAoB,CAAC,QAAqB,EAAE,IAAsB;IAC/E,IAAI,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAM;IAE3C,IAAI,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,QAAQ;aACf,YAAY,CAAC,IAAuB,CAAC;aACrC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aAC3C,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QAEjD,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAwB,CAAC,CAAA;KACvD;IAED,MAAM,OAAO,CAAA;AACf,CAAC;AAED,iDAAiD;AACjD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAiB;IACpD,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAC9C,MAAM,QAAQ,GAAG,MAAM,sBAAsB,EAAE,CAAA;IAC/C,MAAM,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC1C,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAsC;IACrF,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAC9C,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAA;IAElD,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE;QAClC,IAAI;QACJ,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAA;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EACrC,IAAI,EACJ,QAAQ,EACR,KAAK,GAKN;IACC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAC9C,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAA;IAElD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE;QACzC,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE;YAClC,IAAI;YACJ,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAA;KACH;IAED,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE;QAClC,IAAI;QACJ,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAA;AACJ,CAAC;AAED,uFAAuF;AACvF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAA0B,EAAW,EAAE;IACtE,OAAO,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AAC5C,CAAC,CAAA"}
|
package/lib/HighlightedCode.js
CHANGED
|
@@ -11,8 +11,15 @@ const HighlightedCode = react_1.default.memo(({ node, children, keyProp, ctx })
|
|
|
11
11
|
const conf = (0, schema_1.makeAttrs)(node, ctx);
|
|
12
12
|
const caption = conf.exists('caption') ? conf.getFirstValue('caption') : null;
|
|
13
13
|
const lang = conf.getFirstValue('lang') || 'txt';
|
|
14
|
+
// Per spec, :allow<...> is a list of fcode names recognized inside the
|
|
15
|
+
// block. Any value flips fcode parsing on, so shiki would flatten the
|
|
16
|
+
// resulting nodes to plain text. Skip highlighting and let the fallback
|
|
17
|
+
// render children with their fcode wrappers intact.
|
|
18
|
+
const allowsFormattingCodes = conf.getAllValues('allow').length > 0;
|
|
14
19
|
const [html, setHtml] = (0, react_1.useState)(null);
|
|
15
20
|
(0, react_1.useEffect)(() => {
|
|
21
|
+
if (allowsFormattingCodes)
|
|
22
|
+
return;
|
|
16
23
|
let cancelled = false;
|
|
17
24
|
const highlight = async () => {
|
|
18
25
|
try {
|
|
@@ -33,7 +40,7 @@ const HighlightedCode = react_1.default.memo(({ node, children, keyProp, ctx })
|
|
|
33
40
|
return () => {
|
|
34
41
|
cancelled = true;
|
|
35
42
|
};
|
|
36
|
-
}, [lang, node.content]);
|
|
43
|
+
}, [lang, node.content, allowsFormattingCodes]);
|
|
37
44
|
return html ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
38
45
|
react_1.default.createElement("code", { key: keyProp, className: "shiki", dangerouslySetInnerHTML: { __html: html } }),
|
|
39
46
|
caption && react_1.default.createElement("div", { className: "caption" }, caption))) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HighlightedCode.js","sourceRoot":"","sources":["../src/HighlightedCode.tsx"],"names":[],"mappings":";;;AAAA,4DAAkD;AAClD,4CAAmE;AACnE,mCAA0C;AAS1C;;GAEG;AACH,MAAM,eAAe,GAAmC,eAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;IACtG,MAAM,IAAI,GAAG,IAAA,kBAAS,EAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"HighlightedCode.js","sourceRoot":"","sources":["../src/HighlightedCode.tsx"],"names":[],"mappings":";;;AAAA,4DAAkD;AAClD,4CAAmE;AACnE,mCAA0C;AAS1C;;GAEG;AACH,MAAM,eAAe,GAAmC,eAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;IACtG,MAAM,IAAI,GAAG,IAAA,kBAAS,EAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,KAAK,CAAA;IAChD,uEAAuE;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,oDAAoD;IACpD,MAAM,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAEnE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAA;IAErD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,qBAAqB;YAAE,OAAM;QACjC,IAAI,SAAS,GAAG,KAAK,CAAA;QAErB,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YAC3B,IAAI;gBACF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;gBACrE,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAgB,EAAC;oBACpC,IAAI,EAAE,IAAA,+BAAsB,EAAC,IAAI,CAAC,OAAO,CAAC;oBAC1C,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;iBACjC,CAAC,CAAA;gBACF,IAAI,CAAC,SAAS;oBAAE,OAAO,CAAC,MAAM,CAAC,CAAA;aAChC;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,CAAC,CAAC,CAAA;aACrD;QACH,CAAC,CAAA;QAED,SAAS,EAAE,CAAA;QACX,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAA;IAE/C,OAAO,IAAI,CAAC,CAAC,CAAC,CACZ;QACE,wCAAM,GAAG,EAAE,OAAO,EAAE,SAAS,EAAC,OAAO,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAI;QAClF,OAAO,IAAI,uCAAK,SAAS,EAAC,SAAS,IAAE,OAAO,CAAO,CACnD,CACJ,CAAC,CAAC,CAAC,CACF;QACE;YACE,wCAAM,GAAG,EAAE,OAAO,IAAG,QAAQ,CAAQ,CACjC;QACL,OAAO,IAAI,uCAAK,SAAS,EAAC,SAAS,IAAE,OAAO,CAAO,CACnD,CACJ,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,kBAAe,eAAe,CAAA"}
|
package/lib/shiki.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { BundledLanguage, Highlighter } from 'shiki';
|
|
2
2
|
export declare type ExtendedLanguage = BundledLanguage | 'txt';
|
|
3
|
-
export declare function normalizeLanguage(language?: string): ExtendedLanguage
|
|
3
|
+
export declare function normalizeLanguage(language?: string): Promise<ExtendedLanguage>;
|
|
4
4
|
export declare function getHighlighter(language?: string): Promise<Highlighter>;
|
|
5
5
|
export declare function codeToHtml({ code, language }: {
|
|
6
6
|
code: string;
|
|
@@ -11,4 +11,4 @@ export declare function codeToThemedHtml({ code, language, theme, }: {
|
|
|
11
11
|
language: string;
|
|
12
12
|
theme?: 'light' | 'dark' | 'auto';
|
|
13
13
|
}): Promise<string>;
|
|
14
|
-
export declare const isLanguageLoaded: (language:
|
|
14
|
+
export declare const isLanguageLoaded: (language: ExtendedLanguage) => boolean;
|
package/lib/shiki.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isLanguageLoaded = exports.codeToThemedHtml = exports.codeToHtml = exports.getHighlighter = exports.normalizeLanguage = void 0;
|
|
4
|
-
const
|
|
4
|
+
const loadShiki = new Function('return import("shiki")');
|
|
5
5
|
// Configuration
|
|
6
6
|
const CONFIG = {
|
|
7
7
|
themes: {
|
|
@@ -61,11 +61,12 @@ const state = {
|
|
|
61
61
|
warnedLanguages: new Set(),
|
|
62
62
|
};
|
|
63
63
|
// Normalize language to valid Shiki language
|
|
64
|
-
function normalizeLanguage(language) {
|
|
64
|
+
async function normalizeLanguage(language) {
|
|
65
65
|
if (!language)
|
|
66
66
|
return 'txt';
|
|
67
67
|
const normalized = language.toLowerCase();
|
|
68
|
-
|
|
68
|
+
const { bundledLanguages } = await loadShiki();
|
|
69
|
+
if (normalized in bundledLanguages) {
|
|
69
70
|
return normalized;
|
|
70
71
|
}
|
|
71
72
|
if (normalized in languageAliases) {
|
|
@@ -81,15 +82,16 @@ exports.normalizeLanguage = normalizeLanguage;
|
|
|
81
82
|
// Get or create highlighter instance
|
|
82
83
|
async function getHighlighterInstance() {
|
|
83
84
|
if (!state.initPromise) {
|
|
84
|
-
state.initPromise = (
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
state.initPromise = (async () => {
|
|
86
|
+
const { createHighlighter } = await loadShiki();
|
|
87
|
+
const instance = await createHighlighter({
|
|
88
|
+
themes: Object.values(CONFIG.themes),
|
|
89
|
+
langs: CONFIG.initialLanguages,
|
|
90
|
+
});
|
|
89
91
|
state.instance = instance;
|
|
90
92
|
CONFIG.initialLanguages.forEach(lang => state.loadedLanguages.add(lang));
|
|
91
93
|
return instance;
|
|
92
|
-
});
|
|
94
|
+
})();
|
|
93
95
|
}
|
|
94
96
|
return state.initPromise;
|
|
95
97
|
}
|
|
@@ -109,7 +111,7 @@ async function ensureLanguageLoaded(instance, lang) {
|
|
|
109
111
|
}
|
|
110
112
|
// Main API: get highlighter with language loaded
|
|
111
113
|
async function getHighlighter(language) {
|
|
112
|
-
const lang = normalizeLanguage(language);
|
|
114
|
+
const lang = await normalizeLanguage(language);
|
|
113
115
|
const instance = await getHighlighterInstance();
|
|
114
116
|
await ensureLanguageLoaded(instance, lang);
|
|
115
117
|
return instance;
|
|
@@ -117,7 +119,7 @@ async function getHighlighter(language) {
|
|
|
117
119
|
exports.getHighlighter = getHighlighter;
|
|
118
120
|
// Convenience: convert code to HTML with dual themes (CSS-based switching)
|
|
119
121
|
async function codeToHtml({ code, language }) {
|
|
120
|
-
const lang = normalizeLanguage(language);
|
|
122
|
+
const lang = await normalizeLanguage(language);
|
|
121
123
|
const highlighter = await getHighlighter(language);
|
|
122
124
|
return highlighter.codeToHtml(code, {
|
|
123
125
|
lang,
|
|
@@ -127,25 +129,23 @@ async function codeToHtml({ code, language }) {
|
|
|
127
129
|
exports.codeToHtml = codeToHtml;
|
|
128
130
|
// Convert code to HTML with explicit theme selection (for runtime theme detection)
|
|
129
131
|
async function codeToThemedHtml({ code, language, theme, }) {
|
|
130
|
-
const lang = normalizeLanguage(language);
|
|
132
|
+
const lang = await normalizeLanguage(language);
|
|
131
133
|
const highlighter = await getHighlighter(language);
|
|
132
|
-
// Single theme mode (for runtime detection)
|
|
133
134
|
if (theme === 'light' || theme === 'dark') {
|
|
134
135
|
return highlighter.codeToHtml(code, {
|
|
135
136
|
lang,
|
|
136
137
|
theme: CONFIG.themes[theme],
|
|
137
138
|
});
|
|
138
139
|
}
|
|
139
|
-
// Dual theme mode (CSS-based switching)
|
|
140
140
|
return highlighter.codeToHtml(code, {
|
|
141
141
|
lang,
|
|
142
142
|
themes: CONFIG.themes,
|
|
143
143
|
});
|
|
144
144
|
}
|
|
145
145
|
exports.codeToThemedHtml = codeToThemedHtml;
|
|
146
|
-
// Check if a language is loaded
|
|
146
|
+
// Check if a language is loaded (sync — only meaningful after a prior async normalize)
|
|
147
147
|
const isLanguageLoaded = (language) => {
|
|
148
|
-
return state.loadedLanguages.has(
|
|
148
|
+
return state.loadedLanguages.has(language);
|
|
149
149
|
};
|
|
150
150
|
exports.isLanguageLoaded = isLanguageLoaded;
|
|
151
151
|
//# sourceMappingURL=shiki.js.map
|
package/lib/shiki.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shiki.js","sourceRoot":"","sources":["../src/shiki.tsx"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"shiki.js","sourceRoot":"","sources":["../src/shiki.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED