@formulaxjs/renderer-kity 0.2.1 → 0.3.1
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/README.md +11 -9
- package/README.zh-CN.md +48 -0
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.global.js +127 -149
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +9 -4
- /package/dist/{KF_AMS_BB-5QF7FUSO.woff → KF_AMS_BB.woff} +0 -0
- /package/dist/{KF_AMS_CAL-NXRNLAZN.woff → KF_AMS_CAL.woff} +0 -0
- /package/dist/{KF_AMS_FRAK-CO33WWN4.woff → KF_AMS_FRAK.woff} +0 -0
- /package/dist/{KF_AMS_MAIN-25QJVAWY.woff → KF_AMS_MAIN.woff} +0 -0
- /package/dist/{KF_AMS_ROMAN-243BR7HH.woff → KF_AMS_ROMAN.woff} +0 -0
- /package/dist/{btn-5DANP6JY.png → btn.png} +0 -0
- /package/dist/{editor-JT5KLVXX.css → editor.css} +0 -0
- /package/dist/{other-OMWJFGL5.png → other.png} +0 -0
package/dist/index.js
CHANGED
|
@@ -90,7 +90,7 @@ function createKityFormulaRenderer(defaults = {}) {
|
|
|
90
90
|
}
|
|
91
91
|
function renderLatexToSvgMarkup(latex, options = {}) {
|
|
92
92
|
const normalizedLatex = latex.trim();
|
|
93
|
-
const shouldUseCache = options.cache !== false && !(hasCustomAssetOverrides(options.assets) && !options.
|
|
93
|
+
const shouldUseCache = options.cache !== false && !(hasCustomAssetOverrides(options.assets) && !options.assetCacheKey);
|
|
94
94
|
if (!normalizedLatex) {
|
|
95
95
|
return Promise.resolve({
|
|
96
96
|
engine: "kity",
|
|
@@ -106,7 +106,7 @@ function renderLatexToSvgMarkup(latex, options = {}) {
|
|
|
106
106
|
fontSize: options.fontSize,
|
|
107
107
|
displayMode: options.displayMode,
|
|
108
108
|
className: options.className,
|
|
109
|
-
|
|
109
|
+
assetCacheKey: options.assetCacheKey
|
|
110
110
|
});
|
|
111
111
|
if (shouldUseCache) {
|
|
112
112
|
const cached = renderCache.get(cacheKey);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/renderer.ts","../src/dom.ts","../src/serialize.ts"],"sourcesContent":["import {\n createFormulaRenderCacheKey,\n type FormulaRenderer,\n type FormulaRenderResult,\n} from '@formulaxjs/renderer';\nimport { mountKityEditor, type KityEditorAssets } from '@formulaxjs/kity-runtime';\nimport { createHiddenRenderHost } from './dom';\nimport {\n serializeKityFormulaFromRoot,\n waitForKityFormulaSvgLayout,\n} from './serialize';\nimport type { KityFormulaRenderOptions } from './types';\n\nconst renderCache = new Map<string, Promise<FormulaRenderResult>>();\n\nfunction hasCustomAssetOverrides(assets?: Partial<KityEditorAssets>): boolean {\n return Boolean(assets && Object.keys(assets).length > 0);\n}\n\nexport function createKityFormulaRenderer(\n defaults: KityFormulaRenderOptions = {},\n): FormulaRenderer {\n return {\n renderLatex(latex, options = {}) {\n return renderLatexToSvgMarkup(latex, {\n ...defaults,\n ...options,\n });\n },\n };\n}\n\nexport function renderLatexToSvgMarkup(\n latex: string,\n options: KityFormulaRenderOptions = {},\n): Promise<FormulaRenderResult> {\n const normalizedLatex = latex.trim();\n const shouldUseCache = options.cache !== false\n && !(hasCustomAssetOverrides(options.assets) && !options.
|
|
1
|
+
{"version":3,"sources":["../src/renderer.ts","../src/dom.ts","../src/serialize.ts"],"sourcesContent":["import {\n createFormulaRenderCacheKey,\n type FormulaRenderer,\n type FormulaRenderResult,\n} from '@formulaxjs/renderer';\nimport { mountKityEditor, type KityEditorAssets } from '@formulaxjs/kity-runtime';\nimport { createHiddenRenderHost } from './dom';\nimport {\n serializeKityFormulaFromRoot,\n waitForKityFormulaSvgLayout,\n} from './serialize';\nimport type { KityFormulaRenderOptions } from './types';\n\nconst renderCache = new Map<string, Promise<FormulaRenderResult>>();\n\nfunction hasCustomAssetOverrides(assets?: Partial<KityEditorAssets>): boolean {\n return Boolean(assets && Object.keys(assets).length > 0);\n}\n\nexport function createKityFormulaRenderer(\n defaults: KityFormulaRenderOptions = {},\n): FormulaRenderer {\n return {\n renderLatex(latex, options = {}) {\n return renderLatexToSvgMarkup(latex, {\n ...defaults,\n ...options,\n });\n },\n };\n}\n\nexport function renderLatexToSvgMarkup(\n latex: string,\n options: KityFormulaRenderOptions = {},\n): Promise<FormulaRenderResult> {\n const normalizedLatex = latex.trim();\n const shouldUseCache = options.cache !== false\n && !(hasCustomAssetOverrides(options.assets) && !options.assetCacheKey);\n\n if (!normalizedLatex) {\n return Promise.resolve({\n engine: 'kity',\n output: 'svg',\n latex: normalizedLatex,\n html: '',\n });\n }\n\n const cacheKey = createFormulaRenderCacheKey({\n engine: 'kity',\n latex: normalizedLatex,\n output: 'svg',\n fontSize: options.fontSize,\n displayMode: options.displayMode,\n className: options.className,\n assetCacheKey: options.assetCacheKey,\n });\n\n if (shouldUseCache) {\n const cached = renderCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n }\n\n const pending = renderLatexToSvgMarkupUncached(normalizedLatex, options);\n\n if (shouldUseCache) {\n renderCache.set(cacheKey, pending);\n pending.catch(() => {\n if (renderCache.get(cacheKey) === pending) {\n renderCache.delete(cacheKey);\n }\n });\n }\n\n return pending;\n}\n\nasync function renderLatexToSvgMarkupUncached(\n latex: string,\n options: KityFormulaRenderOptions,\n): Promise<FormulaRenderResult> {\n if (typeof document === 'undefined') {\n throw new Error('Kity renderer requires a browser document.');\n }\n\n const host = createHiddenRenderHost(document);\n const handle = await mountKityEditor(host, {\n initialLatex: latex,\n height: options.height ?? '100%',\n autofocus: false,\n assets: options.assets,\n render: {\n fontsize: options.fontSize ?? 40,\n },\n });\n\n try {\n await waitForKityFormulaSvgLayout(host);\n\n return {\n engine: 'kity',\n output: 'svg',\n latex,\n html: serializeKityFormulaFromRoot(host),\n };\n } finally {\n handle.destroy();\n host.remove();\n }\n}\n","export function createHiddenRenderHost(doc: Document = document): HTMLElement {\n const host = doc.createElement('div');\n\n host.style.position = 'fixed';\n host.style.left = '-100000px';\n host.style.top = '0';\n host.style.width = '1px';\n host.style.height = '1px';\n host.style.opacity = '0';\n host.style.pointerEvents = 'none';\n host.setAttribute('aria-hidden', 'true');\n\n doc.body.appendChild(host);\n\n return host;\n}\n\nexport async function waitForDocumentFonts(doc: Document): Promise<void> {\n if (!doc.fonts?.ready) return;\n\n try {\n await doc.fonts.ready;\n } catch {\n // Ignore font readiness failures and fall back to frame-based settling.\n }\n}\n\nexport function waitForAnimationFrame(view: Window): Promise<void> {\n return new Promise((resolve) => {\n view.requestAnimationFrame(() => resolve());\n });\n}\n","import {\n readRenderedFormulaSvgBox,\n serializeSvgForInsertion,\n type SvgBox,\n} from '@formulaxjs/renderer';\nimport { waitForAnimationFrame, waitForDocumentFonts } from './dom';\n\nexport function findKityFormulaSvg(root: HTMLElement): SVGSVGElement | null {\n return root.querySelector<SVGSVGElement>(\n '.kf-editor-edit-area svg, .kf-editor-canvas-container svg, svg',\n );\n}\n\nexport function serializeKityFormulaFromRoot(root: HTMLElement): string {\n const svg = findKityFormulaSvg(root);\n\n if (!svg) {\n return '';\n }\n\n return serializeSvgForInsertion(svg);\n}\n\nexport async function waitForKityFormulaSvgLayout(root: HTMLElement): Promise<void> {\n const doc = root.ownerDocument ?? document;\n const view = doc.defaultView ?? window;\n\n await waitForDocumentFonts(doc);\n\n let previous = readRenderedFormulaBox(root);\n\n for (let attempt = 0; attempt < 4; attempt += 1) {\n await waitForAnimationFrame(view);\n const current = readRenderedFormulaBox(root);\n\n if (previous && current && areSvgBoxesClose(previous, current)) {\n return;\n }\n\n previous = current;\n }\n}\n\nfunction readRenderedFormulaBox(root: HTMLElement): SvgBox | null {\n const svg = findKityFormulaSvg(root);\n\n if (!svg) {\n return null;\n }\n\n return readRenderedFormulaSvgBox(svg);\n}\n\nfunction areSvgBoxesClose(left: SvgBox, right: SvgBox): boolean {\n return Math.abs(left.x - right.x) < 0.01\n && Math.abs(left.y - right.y) < 0.01\n && Math.abs(left.width - right.width) < 0.01\n && Math.abs(left.height - right.height) < 0.01;\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@formulaxjs/renderer-kity",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"description": "Kity runtime based SVG renderer for FormulaX.",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/vndmea/formulaX.git",
|
|
11
|
+
"directory": "packages/renderer-kity"
|
|
12
|
+
},
|
|
8
13
|
"keywords": [
|
|
9
14
|
"formulax",
|
|
10
15
|
"formula",
|
|
@@ -22,7 +27,7 @@
|
|
|
22
27
|
"require": "./dist/index.cjs"
|
|
23
28
|
}
|
|
24
29
|
},
|
|
25
|
-
"unpkg": "./dist/
|
|
30
|
+
"unpkg": "./dist/index.global.js",
|
|
26
31
|
"files": [
|
|
27
32
|
"dist"
|
|
28
33
|
],
|
|
@@ -30,8 +35,8 @@
|
|
|
30
35
|
"access": "public"
|
|
31
36
|
},
|
|
32
37
|
"dependencies": {
|
|
33
|
-
"@formulaxjs/renderer": "0.2.
|
|
34
|
-
"@formulaxjs/kity-runtime": "0.
|
|
38
|
+
"@formulaxjs/renderer": "0.2.1",
|
|
39
|
+
"@formulaxjs/kity-runtime": "0.5.1"
|
|
35
40
|
},
|
|
36
41
|
"scripts": {
|
|
37
42
|
"build": "tsup --config ../../tsup.config.mjs",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|