@podlite/editor-react 0.0.39 → 0.0.41
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 +172 -0
- package/esm/Editor.d.ts +7 -0
- package/esm/Editor.js +126 -4
- package/esm/Editor.js.map +1 -1
- package/esm/HighlightedCode.d.ts +12 -0
- package/esm/HighlightedCode.js +42 -0
- package/esm/HighlightedCode.js.map +1 -0
- package/esm/foldPodlite.d.ts +2 -0
- package/esm/foldPodlite.js +69 -0
- package/esm/foldPodlite.js.map +1 -0
- package/esm/index.d.ts +4 -0
- package/esm/index.js +2 -0
- package/esm/index.js.map +1 -1
- package/esm/listContinuation.d.ts +3 -0
- package/esm/listContinuation.js +124 -0
- package/esm/listContinuation.js.map +1 -0
- package/esm/shiki.d.ts +14 -0
- package/esm/shiki.js +143 -0
- package/esm/shiki.js.map +1 -0
- package/esm/types.d.ts +12 -0
- package/esm/types.js +2 -0
- package/esm/types.js.map +1 -0
- package/lib/Editor.d.ts +7 -0
- package/lib/Editor.js +126 -4
- package/lib/Editor.js.map +1 -1
- package/lib/HighlightedCode.d.ts +12 -0
- package/lib/HighlightedCode.js +45 -0
- package/lib/HighlightedCode.js.map +1 -0
- package/lib/foldPodlite.d.ts +2 -0
- package/lib/foldPodlite.js +72 -0
- package/lib/foldPodlite.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/listContinuation.d.ts +3 -0
- package/lib/listContinuation.js +127 -0
- package/lib/listContinuation.js.map +1 -0
- package/lib/shiki.d.ts +14 -0
- package/lib/shiki.js +151 -0
- package/lib/shiki.js.map +1 -0
- package/lib/types.d.ts +12 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/package.json +26 -3
- package/CHANGELOG.md +0 -160
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const react_1 = (0, tslib_1.__importStar)(require("react"));
|
|
5
|
+
const schema_1 = require("@podlite/schema");
|
|
6
|
+
const shiki_1 = require("./shiki");
|
|
7
|
+
/**
|
|
8
|
+
* This component handles async syntax highlighting
|
|
9
|
+
*/
|
|
10
|
+
const HighlightedCode = react_1.default.memo(({ node, children, keyProp, ctx }) => {
|
|
11
|
+
const conf = (0, schema_1.makeAttrs)(node, ctx);
|
|
12
|
+
const caption = conf.exists('caption') ? conf.getFirstValue('caption') : null;
|
|
13
|
+
const lang = conf.getFirstValue('lang') || 'txt';
|
|
14
|
+
const [html, setHtml] = (0, react_1.useState)(null);
|
|
15
|
+
(0, react_1.useEffect)(() => {
|
|
16
|
+
let cancelled = false;
|
|
17
|
+
const highlight = async () => {
|
|
18
|
+
try {
|
|
19
|
+
const isDark = document.body.className.toLowerCase().includes('dark');
|
|
20
|
+
const result = await (0, shiki_1.codeToThemedHtml)({
|
|
21
|
+
code: (0, schema_1.getTextContentFromNode)(node.content),
|
|
22
|
+
language: lang,
|
|
23
|
+
theme: isDark ? 'dark' : 'light',
|
|
24
|
+
});
|
|
25
|
+
if (!cancelled)
|
|
26
|
+
setHtml(result);
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
console.error('[podlite] shiki highlight error:', e);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
highlight();
|
|
33
|
+
return () => {
|
|
34
|
+
cancelled = true;
|
|
35
|
+
};
|
|
36
|
+
}, [lang, node.content]);
|
|
37
|
+
return html ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
38
|
+
react_1.default.createElement("code", { key: keyProp, className: "shiki", dangerouslySetInnerHTML: { __html: html } }),
|
|
39
|
+
caption && react_1.default.createElement("div", { className: "caption" }, caption))) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
40
|
+
react_1.default.createElement("pre", null,
|
|
41
|
+
react_1.default.createElement("code", { key: keyProp }, children)),
|
|
42
|
+
caption && react_1.default.createElement("div", { className: "caption" }, caption)));
|
|
43
|
+
});
|
|
44
|
+
exports.default = HighlightedCode;
|
|
45
|
+
//# sourceMappingURL=HighlightedCode.js.map
|
|
@@ -0,0 +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;IAEhD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAA;IAErD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,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,CAAC,CAAC,CAAA;IAExB,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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.podliteFoldService = void 0;
|
|
4
|
+
const language_1 = require("@codemirror/language");
|
|
5
|
+
// =begin Name ... =end Name
|
|
6
|
+
const beginRe = /^(\s*)=begin\s+(\S+)/;
|
|
7
|
+
const endRe = /^(\s*)=end\s+(\S+)/;
|
|
8
|
+
// =headN (level 1-6)
|
|
9
|
+
const headRe = /^(\s*)=head(\d+)\s/;
|
|
10
|
+
// Parse =begin line, return block name or null
|
|
11
|
+
function parseBeginLine(lineText) {
|
|
12
|
+
const m = lineText.match(beginRe);
|
|
13
|
+
return m ? m[2] ?? null : null;
|
|
14
|
+
}
|
|
15
|
+
// Fold =begin Name ... =end Name: fold from end of =begin line to start of =end line
|
|
16
|
+
function foldBeginEnd(state, lineStart) {
|
|
17
|
+
const line = state.doc.lineAt(lineStart);
|
|
18
|
+
const blockName = parseBeginLine(line.text);
|
|
19
|
+
if (!blockName)
|
|
20
|
+
return null;
|
|
21
|
+
// Search forward for matching =end
|
|
22
|
+
for (let i = line.number + 1; i <= state.doc.lines; i++) {
|
|
23
|
+
const candidate = state.doc.line(i);
|
|
24
|
+
const m = candidate.text.match(endRe);
|
|
25
|
+
if (m && m[2] === blockName) {
|
|
26
|
+
// Fold from end of =begin line to start of =end line
|
|
27
|
+
if (line.to >= candidate.from)
|
|
28
|
+
return null;
|
|
29
|
+
return { from: line.to, to: candidate.from };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
// Fold =headN: from end of heading line to start of next heading of same or higher level (or EOF)
|
|
35
|
+
function foldHeadSection(state, lineStart) {
|
|
36
|
+
const line = state.doc.lineAt(lineStart);
|
|
37
|
+
const m = line.text.match(headRe);
|
|
38
|
+
if (!m)
|
|
39
|
+
return null;
|
|
40
|
+
const level = parseInt(m[2] ?? '1', 10);
|
|
41
|
+
// Search forward for next heading of same or higher level
|
|
42
|
+
let foldEnd = state.doc.length;
|
|
43
|
+
for (let i = line.number + 1; i <= state.doc.lines; i++) {
|
|
44
|
+
const candidate = state.doc.line(i);
|
|
45
|
+
const hm = candidate.text.match(headRe);
|
|
46
|
+
if (hm) {
|
|
47
|
+
const candidateLevel = parseInt(hm[2] ?? '1', 10);
|
|
48
|
+
if (candidateLevel <= level) {
|
|
49
|
+
foldEnd = candidate.from;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Nothing to fold if heading is last line or only whitespace follows
|
|
55
|
+
if (line.to >= foldEnd)
|
|
56
|
+
return null;
|
|
57
|
+
// Trim trailing blank lines from fold range
|
|
58
|
+
let endPos = foldEnd;
|
|
59
|
+
while (endPos > line.to) {
|
|
60
|
+
const prevLine = state.doc.lineAt(endPos - 1);
|
|
61
|
+
if (prevLine.text.trim() !== '') {
|
|
62
|
+
endPos = prevLine.to;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
endPos = prevLine.from;
|
|
66
|
+
}
|
|
67
|
+
if (line.to >= endPos)
|
|
68
|
+
return null;
|
|
69
|
+
return { from: line.to, to: endPos };
|
|
70
|
+
}
|
|
71
|
+
exports.podliteFoldService = language_1.foldService.of((state, lineStart) => foldBeginEnd(state, lineStart) ?? foldHeadSection(state, lineStart));
|
|
72
|
+
//# sourceMappingURL=foldPodlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foldPodlite.js","sourceRoot":"","sources":["../src/foldPodlite.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import Editor2 from './Editor';
|
|
2
2
|
import WindowWrapper from './Wrapper';
|
|
3
|
+
import HighlightedCode from './HighlightedCode';
|
|
3
4
|
export { Editor2 as Editor2 };
|
|
4
5
|
export { WindowWrapper as WindowWrapper };
|
|
6
|
+
export { HighlightedCode as HighlightedCode };
|
|
7
|
+
export type { EditorSessionState } from './types';
|
|
8
|
+
export type { ConverterResult, IPodliteEditor, PodliteEditorRef } from './Editor';
|
|
5
9
|
export default Editor2;
|
package/lib/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WindowWrapper = exports.Editor2 = void 0;
|
|
3
|
+
exports.HighlightedCode = exports.WindowWrapper = exports.Editor2 = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const Editor_1 = (0, tslib_1.__importDefault)(require("./Editor"));
|
|
6
6
|
exports.Editor2 = Editor_1.default;
|
|
7
7
|
const Wrapper_1 = (0, tslib_1.__importDefault)(require("./Wrapper"));
|
|
8
8
|
exports.WindowWrapper = Wrapper_1.default;
|
|
9
|
+
const HighlightedCode_1 = (0, tslib_1.__importDefault)(require("./HighlightedCode"));
|
|
10
|
+
exports.HighlightedCode = HighlightedCode_1.default;
|
|
9
11
|
exports.default = Editor_1.default;
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;;AAAA,mEAA8B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;;AAAA,mEAA8B;AAGV,kBAHb,gBAAO,CAGa;AAF3B,qEAAqC;AAGX,wBAHnB,iBAAa,CAGmB;AAFvC,qFAA+C;AAGnB,0BAHrB,yBAAe,CAGqB;AAG3C,kBAAe,gBAAO,CAAA"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.itemLevelKeymap = exports.listContinuationKeymap = void 0;
|
|
4
|
+
const view_1 = require("@codemirror/view");
|
|
5
|
+
// Regex: =item with optional level digit(s) + separator
|
|
6
|
+
const itemRe = /^(\s*=item)(\d*)([ \t])/;
|
|
7
|
+
// Detect list type prefix at start of content
|
|
8
|
+
const prefixRe = /^(\[ \]|\[x\]|\[X\]|#)\s*/;
|
|
9
|
+
// Item is "empty" if content is nothing or only a type prefix
|
|
10
|
+
const emptyContentRe = /^(\[ \]|\[x\]|\[X\]|#)?\s*$/;
|
|
11
|
+
// Parse, Don't Validate — returns typed structure or null
|
|
12
|
+
function parseItemLine(lineText, lineFrom) {
|
|
13
|
+
const m = lineText.match(itemRe);
|
|
14
|
+
if (!m)
|
|
15
|
+
return null;
|
|
16
|
+
const prefix = m[1] ?? ''; // "\s*=item"
|
|
17
|
+
const digits = m[2] ?? ''; // level digits, may be empty
|
|
18
|
+
const sep = m[3] ?? ' '; // separator char
|
|
19
|
+
const indent = prefix.slice(0, prefix.length - 5); // whitespace before "=item"
|
|
20
|
+
const level = digits === '' ? 1 : parseInt(digits, 10);
|
|
21
|
+
const marker = `${indent}=item${digits}`;
|
|
22
|
+
return {
|
|
23
|
+
indent,
|
|
24
|
+
marker,
|
|
25
|
+
level,
|
|
26
|
+
separator: sep,
|
|
27
|
+
markerEnd: lineFrom + prefix.length + digits.length + sep.length,
|
|
28
|
+
content: lineText.slice(prefix.length + digits.length + sep.length),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Get the prefix to insert for the new item (checked → unchecked, # → #, none → '')
|
|
32
|
+
function resolveNewPrefix(content) {
|
|
33
|
+
const m = content.trim().match(prefixRe);
|
|
34
|
+
if (!m)
|
|
35
|
+
return '';
|
|
36
|
+
const prefix = m[1] ?? '';
|
|
37
|
+
if (prefix === '[x]' || prefix === '[X]' || prefix === '[ ]')
|
|
38
|
+
return '[ ] ';
|
|
39
|
+
if (prefix === '#')
|
|
40
|
+
return '# ';
|
|
41
|
+
return '';
|
|
42
|
+
}
|
|
43
|
+
// ─── List Continuation on Enter ────────────────────────────────────────────
|
|
44
|
+
exports.listContinuationKeymap = view_1.keymap.of([
|
|
45
|
+
{
|
|
46
|
+
key: 'Enter',
|
|
47
|
+
run: (view) => {
|
|
48
|
+
const { state } = view;
|
|
49
|
+
const { head, from, to } = state.selection.main;
|
|
50
|
+
// Only single cursor (no selection)
|
|
51
|
+
if (from !== to)
|
|
52
|
+
return false;
|
|
53
|
+
const line = state.doc.lineAt(head);
|
|
54
|
+
const item = parseItemLine(line.text, line.from);
|
|
55
|
+
if (!item)
|
|
56
|
+
return false;
|
|
57
|
+
// Cursor inside marker → default
|
|
58
|
+
if (head < item.markerEnd)
|
|
59
|
+
return false;
|
|
60
|
+
const trimmedContent = item.content.trim();
|
|
61
|
+
// Empty item (including prefix-only like "[ ]" or "#") → remove marker, exit list
|
|
62
|
+
if (emptyContentRe.test(trimmedContent)) {
|
|
63
|
+
view.dispatch({
|
|
64
|
+
changes: { from: line.from, to: line.to, insert: '' },
|
|
65
|
+
selection: { anchor: line.from },
|
|
66
|
+
});
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
// Determine type prefix for new item
|
|
70
|
+
const newPrefix = resolveNewPrefix(trimmedContent);
|
|
71
|
+
// Split: text before cursor stays, text after → new =itemN [prefix]
|
|
72
|
+
const textAfterCursor = line.text.slice(head - line.from);
|
|
73
|
+
const newItem = `\n${item.marker} ${newPrefix}`;
|
|
74
|
+
view.dispatch({
|
|
75
|
+
changes: {
|
|
76
|
+
from: head,
|
|
77
|
+
to: line.to,
|
|
78
|
+
insert: newItem + textAfterCursor.trimStart(),
|
|
79
|
+
},
|
|
80
|
+
selection: {
|
|
81
|
+
anchor: head + newItem.length,
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
return true;
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
]);
|
|
88
|
+
// ─── Tab / Shift-Tab: change item level ────────────────────────────────────
|
|
89
|
+
const maxItemLevel = 6;
|
|
90
|
+
const minItemLevel = 1;
|
|
91
|
+
const indentPerLevel = ' '; // 2 spaces per level
|
|
92
|
+
function changeItemLevel(view, delta) {
|
|
93
|
+
const { state } = view;
|
|
94
|
+
const { from, to } = state.selection.main;
|
|
95
|
+
const startLine = state.doc.lineAt(from);
|
|
96
|
+
const endLine = state.doc.lineAt(to);
|
|
97
|
+
const changes = [];
|
|
98
|
+
for (let lineNum = startLine.number; lineNum <= endLine.number; lineNum++) {
|
|
99
|
+
const line = state.doc.line(lineNum);
|
|
100
|
+
const item = parseItemLine(line.text, line.from);
|
|
101
|
+
if (!item)
|
|
102
|
+
continue;
|
|
103
|
+
const newLevel = item.level + delta;
|
|
104
|
+
if (newLevel < minItemLevel || newLevel > maxItemLevel)
|
|
105
|
+
continue;
|
|
106
|
+
// Adjust indentation: each level = 4 spaces
|
|
107
|
+
const newIndent = delta === 1 ? item.indent + indentPerLevel : item.indent.slice(indentPerLevel.length);
|
|
108
|
+
const oldMarkerLen = item.markerEnd - line.from;
|
|
109
|
+
const newMarker = `${newIndent}=item${newLevel}${item.separator}`;
|
|
110
|
+
changes.push({ from: line.from, to: line.from + oldMarkerLen, insert: newMarker });
|
|
111
|
+
}
|
|
112
|
+
if (changes.length === 0)
|
|
113
|
+
return false;
|
|
114
|
+
view.dispatch({ changes });
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
exports.itemLevelKeymap = view_1.keymap.of([
|
|
118
|
+
{
|
|
119
|
+
key: 'Tab',
|
|
120
|
+
run: (view) => changeItemLevel(view, 1),
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
key: 'Shift-Tab',
|
|
124
|
+
run: (view) => changeItemLevel(view, -1),
|
|
125
|
+
},
|
|
126
|
+
]);
|
|
127
|
+
//# sourceMappingURL=listContinuation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listContinuation.js","sourceRoot":"","sources":["../src/listContinuation.ts"],"names":[],"mappings":"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"}
|
package/lib/shiki.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type BundledLanguage, type Highlighter } from 'shiki';
|
|
2
|
+
export declare type ExtendedLanguage = BundledLanguage | 'txt';
|
|
3
|
+
export declare function normalizeLanguage(language?: string): ExtendedLanguage;
|
|
4
|
+
export declare function getHighlighter(language?: string): Promise<Highlighter>;
|
|
5
|
+
export declare function codeToHtml({ code, language }: {
|
|
6
|
+
code: string;
|
|
7
|
+
language: string;
|
|
8
|
+
}): Promise<string>;
|
|
9
|
+
export declare function codeToThemedHtml({ code, language, theme, }: {
|
|
10
|
+
code: string;
|
|
11
|
+
language: string;
|
|
12
|
+
theme?: 'light' | 'dark' | 'auto';
|
|
13
|
+
}): Promise<string>;
|
|
14
|
+
export declare const isLanguageLoaded: (language: string) => boolean;
|
package/lib/shiki.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isLanguageLoaded = exports.codeToThemedHtml = exports.codeToHtml = exports.getHighlighter = exports.normalizeLanguage = void 0;
|
|
4
|
+
const shiki_1 = require("shiki");
|
|
5
|
+
// Configuration
|
|
6
|
+
const CONFIG = {
|
|
7
|
+
themes: {
|
|
8
|
+
light: 'one-light',
|
|
9
|
+
dark: 'github-dark',
|
|
10
|
+
},
|
|
11
|
+
initialLanguages: ['shell', 'txt'],
|
|
12
|
+
};
|
|
13
|
+
// Language aliases mapping
|
|
14
|
+
const languageAliases = {
|
|
15
|
+
text: 'txt',
|
|
16
|
+
plaintext: 'txt',
|
|
17
|
+
plain: 'txt',
|
|
18
|
+
sh: 'shell',
|
|
19
|
+
bash: 'shell',
|
|
20
|
+
zsh: 'shell',
|
|
21
|
+
shellscript: 'shell',
|
|
22
|
+
'shell-script': 'shell',
|
|
23
|
+
console: 'shell',
|
|
24
|
+
terminal: 'shell',
|
|
25
|
+
js: 'javascript',
|
|
26
|
+
node: 'javascript',
|
|
27
|
+
nodejs: 'javascript',
|
|
28
|
+
ts: 'typescript',
|
|
29
|
+
py: 'python',
|
|
30
|
+
python3: 'python',
|
|
31
|
+
py3: 'python',
|
|
32
|
+
rb: 'ruby',
|
|
33
|
+
md: 'markdown',
|
|
34
|
+
cpp: 'c++',
|
|
35
|
+
cc: 'c++',
|
|
36
|
+
cs: 'c#',
|
|
37
|
+
csharp: 'c#',
|
|
38
|
+
htm: 'html',
|
|
39
|
+
yml: 'yaml',
|
|
40
|
+
dockerfile: 'docker',
|
|
41
|
+
styles: 'css',
|
|
42
|
+
style: 'css',
|
|
43
|
+
jsonc: 'json',
|
|
44
|
+
json5: 'json',
|
|
45
|
+
xaml: 'xml',
|
|
46
|
+
xhtml: 'xml',
|
|
47
|
+
svg: 'xml',
|
|
48
|
+
mysql: 'sql',
|
|
49
|
+
postgresql: 'sql',
|
|
50
|
+
postgres: 'sql',
|
|
51
|
+
pgsql: 'sql',
|
|
52
|
+
plsql: 'sql',
|
|
53
|
+
oracle: 'sql',
|
|
54
|
+
};
|
|
55
|
+
// Singleton state
|
|
56
|
+
const state = {
|
|
57
|
+
instance: null,
|
|
58
|
+
initPromise: null,
|
|
59
|
+
loadedLanguages: new Set(['txt']),
|
|
60
|
+
pendingLoads: new Map(),
|
|
61
|
+
warnedLanguages: new Set(),
|
|
62
|
+
};
|
|
63
|
+
// Normalize language to valid Shiki language
|
|
64
|
+
function normalizeLanguage(language) {
|
|
65
|
+
if (!language)
|
|
66
|
+
return 'txt';
|
|
67
|
+
const normalized = language.toLowerCase();
|
|
68
|
+
if (normalized in shiki_1.bundledLanguages) {
|
|
69
|
+
return normalized;
|
|
70
|
+
}
|
|
71
|
+
if (normalized in languageAliases) {
|
|
72
|
+
return languageAliases[normalized];
|
|
73
|
+
}
|
|
74
|
+
if (!state.warnedLanguages.has(language)) {
|
|
75
|
+
console.warn(`[podlite] shiki unrecognized language '${language}', defaulting to [txt]`);
|
|
76
|
+
state.warnedLanguages.add(language);
|
|
77
|
+
}
|
|
78
|
+
return 'txt';
|
|
79
|
+
}
|
|
80
|
+
exports.normalizeLanguage = normalizeLanguage;
|
|
81
|
+
// Get or create highlighter instance
|
|
82
|
+
async function getHighlighterInstance() {
|
|
83
|
+
if (!state.initPromise) {
|
|
84
|
+
state.initPromise = (0, shiki_1.createHighlighter)({
|
|
85
|
+
// themes: Object.keys(bundledThemes) as BundledTheme[],
|
|
86
|
+
themes: Object.values(CONFIG.themes),
|
|
87
|
+
langs: CONFIG.initialLanguages,
|
|
88
|
+
}).then(instance => {
|
|
89
|
+
state.instance = instance;
|
|
90
|
+
CONFIG.initialLanguages.forEach(lang => state.loadedLanguages.add(lang));
|
|
91
|
+
return instance;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return state.initPromise;
|
|
95
|
+
}
|
|
96
|
+
// Load a language if not already loaded
|
|
97
|
+
async function ensureLanguageLoaded(instance, lang) {
|
|
98
|
+
if (state.loadedLanguages.has(lang))
|
|
99
|
+
return;
|
|
100
|
+
let pending = state.pendingLoads.get(lang);
|
|
101
|
+
if (!pending) {
|
|
102
|
+
pending = instance
|
|
103
|
+
.loadLanguage(lang)
|
|
104
|
+
.then(() => state.loadedLanguages.add(lang))
|
|
105
|
+
.finally(() => state.pendingLoads.delete(lang));
|
|
106
|
+
state.pendingLoads.set(lang, pending);
|
|
107
|
+
}
|
|
108
|
+
await pending;
|
|
109
|
+
}
|
|
110
|
+
// Main API: get highlighter with language loaded
|
|
111
|
+
async function getHighlighter(language) {
|
|
112
|
+
const lang = normalizeLanguage(language);
|
|
113
|
+
const instance = await getHighlighterInstance();
|
|
114
|
+
await ensureLanguageLoaded(instance, lang);
|
|
115
|
+
return instance;
|
|
116
|
+
}
|
|
117
|
+
exports.getHighlighter = getHighlighter;
|
|
118
|
+
// Convenience: convert code to HTML with dual themes (CSS-based switching)
|
|
119
|
+
async function codeToHtml({ code, language }) {
|
|
120
|
+
const lang = normalizeLanguage(language);
|
|
121
|
+
const highlighter = await getHighlighter(language);
|
|
122
|
+
return highlighter.codeToHtml(code, {
|
|
123
|
+
lang,
|
|
124
|
+
themes: CONFIG.themes,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
exports.codeToHtml = codeToHtml;
|
|
128
|
+
// Convert code to HTML with explicit theme selection (for runtime theme detection)
|
|
129
|
+
async function codeToThemedHtml({ code, language, theme, }) {
|
|
130
|
+
const lang = normalizeLanguage(language);
|
|
131
|
+
const highlighter = await getHighlighter(language);
|
|
132
|
+
// Single theme mode (for runtime detection)
|
|
133
|
+
if (theme === 'light' || theme === 'dark') {
|
|
134
|
+
return highlighter.codeToHtml(code, {
|
|
135
|
+
lang,
|
|
136
|
+
theme: CONFIG.themes[theme],
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
// Dual theme mode (CSS-based switching)
|
|
140
|
+
return highlighter.codeToHtml(code, {
|
|
141
|
+
lang,
|
|
142
|
+
themes: CONFIG.themes,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
exports.codeToThemedHtml = codeToThemedHtml;
|
|
146
|
+
// Check if a language is loaded
|
|
147
|
+
const isLanguageLoaded = (language) => {
|
|
148
|
+
return state.loadedLanguages.has(normalizeLanguage(language));
|
|
149
|
+
};
|
|
150
|
+
exports.isLanguageLoaded = isLanguageLoaded;
|
|
151
|
+
//# sourceMappingURL=shiki.js.map
|
package/lib/shiki.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shiki.js","sourceRoot":"","sources":["../src/shiki.tsx"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare type FoldRange = {
|
|
2
|
+
readonly from: number;
|
|
3
|
+
readonly to: number;
|
|
4
|
+
};
|
|
5
|
+
export declare type EditorSessionState = {
|
|
6
|
+
readonly cursorOffset?: number;
|
|
7
|
+
readonly scrollTop?: number;
|
|
8
|
+
readonly foldedRanges?: ReadonlyArray<FoldRange>;
|
|
9
|
+
readonly isPreviewMode?: boolean;
|
|
10
|
+
readonly isHalfPreviewMode?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
package/lib/types.js
ADDED
package/lib/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,10 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@podlite/editor-react",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.0.41",
|
|
4
|
+
"description": "Rich text editor React component for Podlite — syntax highlighting, live preview, CodeMirror 6",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
7
7
|
"typings": "./lib/index.d.ts",
|
|
8
|
+
"homepage": "https://podlite.org",
|
|
9
|
+
"bugs": {
|
|
10
|
+
"url": "https://github.com/podlite/podlite/issues"
|
|
11
|
+
},
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "https://github.com/podlite/podlite.git",
|
|
15
|
+
"directory": "packages/podlite-editor-react"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"podlite",
|
|
19
|
+
"editor",
|
|
20
|
+
"react",
|
|
21
|
+
"react-component",
|
|
22
|
+
"rich-text-editor",
|
|
23
|
+
"markdown-editor",
|
|
24
|
+
"codemirror",
|
|
25
|
+
"codemirror-6",
|
|
26
|
+
"live-preview",
|
|
27
|
+
"syntax-highlighting",
|
|
28
|
+
"wysiwyg"
|
|
29
|
+
],
|
|
8
30
|
"license": "MIT",
|
|
9
31
|
"funding": {
|
|
10
32
|
"type": "opencollective",
|
|
@@ -58,7 +80,8 @@
|
|
|
58
80
|
"@uiw/codemirror-extensions-events": "^4.23.8",
|
|
59
81
|
"@uiw/codemirror-themes": "^4.23.8",
|
|
60
82
|
"@uiw/react-codemirror": "^4.23.8",
|
|
61
|
-
"react-is": "^18.0.0"
|
|
83
|
+
"react-is": "^18.0.0",
|
|
84
|
+
"shiki": "^3.21.0"
|
|
62
85
|
},
|
|
63
86
|
"peerDependencies": {
|
|
64
87
|
"react": "^16.0.0 || ^17.0.0 || ^18",
|