@openpresentation/opf-editor 0.10.2 → 0.10.3
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 +5 -2
- package/dist/canvas.d.ts +10 -4
- package/dist/canvas.js +6 -5
- package/dist/font-gate.js +40 -22
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Unfinished prepared shaping work is preserved in the [September 15 roadmap](docs/roadmap-shaping-20260915.md); it is not part of the published runtime.
|
|
4
4
|
|
|
5
|
-
Version 0.10.2 adds pointer caret entry on the canvas (one click puts the caret where you click; new `textEntry` option; keyboard entry still selects all) and keeps the 0.10.1 and 0.10.0 requirements. Version 0.10.1 adds the opt-in font gate (`createFontGate`, FF-41) and keeps the 0.10.0 requirements; develop and test it against renderer 0.11.2 and PPTX 0.11.1. Version 0.10.0 requires `@openpresentation/opf` ^0.11.2, renderer ^0.11.0, and PPTX ^0.11.0 (install them together so cover centering resolves the same core everywhere; renderer 0.11.0 also activates the playground's automatic script fonts and lazy Intos fonts). Version 0.9.0 required `@openpresentation/opf` ^0.11.1, renderer ^0.10.0, and PPTX ^0.10.0. Composition and slide transfer fall back to the shared `aptos` font scheme and report unknown scheme ids through `onDiagnostic`; gallery apply keeps every font-scheme role.
|
|
5
|
+
Version 0.10.3 passes the host's render options (`catalogs`) through the font gate to the registry, so layouts and font schemes that only the host's catalogs know load their faces, and asks the script and vendored-face loaders separately; it keeps the 0.10.2 requirements and gates nothing new on renderers before 0.11.5. Version 0.10.2 adds pointer caret entry on the canvas (one click puts the caret where you click; new `textEntry` option; keyboard entry still selects all) and keeps the 0.10.1 and 0.10.0 requirements. Version 0.10.1 adds the opt-in font gate (`createFontGate`, FF-41) and keeps the 0.10.0 requirements; develop and test it against renderer 0.11.2 and PPTX 0.11.1. Version 0.10.0 requires `@openpresentation/opf` ^0.11.2, renderer ^0.11.0, and PPTX ^0.11.0 (install them together so cover centering resolves the same core everywhere; renderer 0.11.0 also activates the playground's automatic script fonts and lazy Intos fonts). Version 0.9.0 required `@openpresentation/opf` ^0.11.1, renderer ^0.10.0, and PPTX ^0.10.0. Composition and slide transfer fall back to the shared `aptos` font scheme and report unknown scheme ids through `onDiagnostic`; gallery apply keeps every font-scheme role.
|
|
6
6
|
|
|
7
7
|
Version 0.8.0 required `@openpresentation/opf` ^0.11.0, renderer ^0.9.0, and PPTX ^0.9.0. Named ColorRefs (scheme slots, roles, and `var:<id>`) paint through the published renderer and hex-resolve on export. Payload ids share the slide id namespace for pagination and transfer. Native `schemeClr`, theme write, and `p:hf` remain out of scope.
|
|
8
8
|
|
|
@@ -80,6 +80,9 @@ Fonts load before pixels (FF-41). A document can need faces the browser registry
|
|
|
80
80
|
import { createCanvasEditor, createFontGate } from '@openpresentation/opf-editor/canvas';
|
|
81
81
|
|
|
82
82
|
const fonts = createFontGate(fontRegistry); // a registry without the lazy loaders gates nothing
|
|
83
|
+
// The canvas gives the gate its current renderOptions (catalogs, ...), so layouts and font schemes only your catalogs know
|
|
84
|
+
// resolve in the registry too (renderer 0.11.5+). For your own gate calls: fonts.pending(document, renderOptions), or
|
|
85
|
+
// createFontGate(fontRegistry, { renderOptions: () => currentRenderOptions }).
|
|
83
86
|
const canvas = createCanvasEditor(container, { document, fonts, renderOptions: { textMeasurement: fontRegistry.textMeasurement } });
|
|
84
87
|
// Other renders of your own: fonts.run(document, { ready: draw, failed: showError, loading: showSpinner })
|
|
85
88
|
```
|
|
@@ -274,7 +277,7 @@ Public npm package publication is handled by `.github/workflows/release.yml` thr
|
|
|
274
277
|
|
|
275
278
|
The current checkout uses `@openpresentation/opf/composition` for portable geometry. Slides can select `auto`, `row`, `column`, or `grid`, set weighted tracks, and request path-specific overflow diagnostics. See the sibling OPF repo's `docs/dynamic-composition.md` for the complete contract.
|
|
276
279
|
|
|
277
|
-
Version 0.10.
|
|
280
|
+
Version 0.10.3 requires `@openpresentation/opf@^0.11.2` (unchanged since 0.10.0). The optional renderer peer requires `@openpresentation/opf-render@^0.11.0` (the font gate gates nothing on a registry without the lazy loaders). Development and coordinated playground export use renderer 0.11.5 (face-level lazy fonts; the gate passes render options, which older renderers ignore) and `@openpresentation/opf-pptx@^0.11.1`. Clean registry installs support the composition APIs without sibling checkouts. For coordinated source development, build OPF and run `node scripts/link-ecosystem.mjs` there; `pnpm test:ecosystem` verifies shared geometry and import/export behavior.
|
|
278
281
|
|
|
279
282
|
## Local interactive demo
|
|
280
283
|
|
package/dist/canvas.d.ts
CHANGED
|
@@ -3,10 +3,10 @@ import type { RenderSvgOptions } from "@openpresentation/opf-render";
|
|
|
3
3
|
import type { SlideComposition } from "@openpresentation/opf/composition";
|
|
4
4
|
/** Faces a document needs (script packages and vendored files) that are not loaded yet, and the way to load them. */
|
|
5
5
|
export interface FontGate {
|
|
6
|
-
/** Synchronous. Empty means the document can render now. Never throws. */
|
|
7
|
-
pending(document: unknown): string[];
|
|
6
|
+
/** Synchronous. Empty means the document can render now. Never throws. `renderOptions` are the options the host renders with (`catalogs`, ...); the canvas passes its current ones. */
|
|
7
|
+
pending(document: unknown, renderOptions?: RenderSvgOptions): string[];
|
|
8
8
|
/** Load every pending face (vendored faces first, then script faces). Rejects with a `fonts-unavailable` error; never retries by itself. */
|
|
9
|
-
ensure(document: unknown, options?: { signal?: AbortSignal }): Promise<void>;
|
|
9
|
+
ensure(document: unknown, options?: { signal?: AbortSignal; renderOptions?: RenderSvgOptions }): Promise<void>;
|
|
10
10
|
/** `whenFontsReady` on this gate. */
|
|
11
11
|
run(document: unknown, handlers?: FontGateHandlers): Promise<void>;
|
|
12
12
|
}
|
|
@@ -16,11 +16,17 @@ export interface FontGateHandlers {
|
|
|
16
16
|
loading?: (pending: string[]) => void;
|
|
17
17
|
ready?: () => void;
|
|
18
18
|
failed?: (error: Error) => void;
|
|
19
|
+
/** The options the host renders with (`catalogs`, ...), passed to the gate. */
|
|
20
|
+
renderOptions?: RenderSvgOptions;
|
|
19
21
|
}
|
|
20
22
|
export declare const FONTS_PENDING: "fonts-pending";
|
|
21
23
|
export declare const FONTS_UNAVAILABLE: "fonts-unavailable";
|
|
22
24
|
/** Wrap a browser font registry (`loadBrowserFontRegistry`). Registries without the lazy loaders gate nothing. */
|
|
23
|
-
|
|
25
|
+
/**
|
|
26
|
+
* `options.renderOptions` (an object, or a function called on every use) are the default render options passed to the registry
|
|
27
|
+
* (`catalogs`, ...), under a call's own; the canvas passes its current `renderOptions` itself, so a gate needs none.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createFontGate(registry: object, options?: { renderOptions?: RenderSvgOptions | (() => RenderSvgOptions | undefined) }): FontGate;
|
|
24
30
|
/**
|
|
25
31
|
* Ensure fonts for a document, then run `ready` (synchronously when nothing is pending). The one
|
|
26
32
|
* "ensure fonts, then render" helper: load failures and exceptions from `ready` go to `failed`.
|
package/dist/canvas.js
CHANGED
|
@@ -163,11 +163,11 @@ export function createCanvasEditor(container, options = {}) {
|
|
|
163
163
|
// A synchronous render or validation of a document whose faces are still loading fails with a clear "fonts-pending"
|
|
164
164
|
// error and starts the load, so the next attempt succeeds. It never draws glyphs the registry cannot provide.
|
|
165
165
|
function requireFonts(document) {
|
|
166
|
-
const pending = fonts?.pending(document) ?? [];
|
|
166
|
+
const pending = fonts?.pending(document, renderOptions) ?? [];
|
|
167
167
|
if (!pending.length) return;
|
|
168
168
|
notice.hidden = false;
|
|
169
169
|
notice.textContent = pendingMessage;
|
|
170
|
-
fonts.ensure(document).then(
|
|
170
|
+
fonts.ensure(document, { renderOptions }).then(
|
|
171
171
|
() => { if (!disposed && notice.textContent === pendingMessage) clearNotice(); },
|
|
172
172
|
(error) => { if (!disposed) report(error); },
|
|
173
173
|
);
|
|
@@ -206,6 +206,7 @@ export function createCanvasEditor(container, options = {}) {
|
|
|
206
206
|
if (disposed) return;
|
|
207
207
|
const token = ++showToken;
|
|
208
208
|
return whenFontsReady(fonts, target ?? editor.document, {
|
|
209
|
+
renderOptions,
|
|
209
210
|
isCurrent: () => !disposed && token === showToken,
|
|
210
211
|
loading: (pending) => fontsState("loading", pending),
|
|
211
212
|
ready: () => {
|
|
@@ -221,7 +222,7 @@ export function createCanvasEditor(container, options = {}) {
|
|
|
221
222
|
}
|
|
222
223
|
// Renders now when the document's fonts are loaded (errors throw to the caller), otherwise after loading them.
|
|
223
224
|
function renderFor(document) {
|
|
224
|
-
if (fonts?.pending(document ?? editor.document).length) show(document);
|
|
225
|
+
if (fonts?.pending(document ?? editor.document, renderOptions).length) show(document);
|
|
225
226
|
else render(document);
|
|
226
227
|
}
|
|
227
228
|
function render(document = editor.document) {
|
|
@@ -341,11 +342,11 @@ export function createCanvasEditor(container, options = {}) {
|
|
|
341
342
|
}
|
|
342
343
|
// An in-progress edit whose text needs faces that are not loaded yet waits for them, then draws again.
|
|
343
344
|
function deferDraft(draft) {
|
|
344
|
-
if (!fonts?.pending(draft).length) return false;
|
|
345
|
+
if (!fonts?.pending(draft, renderOptions).length) return false;
|
|
345
346
|
active.valid = false;
|
|
346
347
|
notice.hidden = false;
|
|
347
348
|
notice.textContent = pendingMessage;
|
|
348
|
-
fonts.ensure(draft).then(
|
|
349
|
+
fonts.ensure(draft, { renderOptions }).then(
|
|
349
350
|
() => {
|
|
350
351
|
if (disposed) return;
|
|
351
352
|
if (notice.textContent === pendingMessage) clearNotice();
|
package/dist/font-gate.js
CHANGED
|
@@ -16,39 +16,56 @@ const MAX_ROUNDS = 4;
|
|
|
16
16
|
* Wrap a browser font registry (`loadBrowserFontRegistry` from `@openpresentation/opf-render/fonts-browser`).
|
|
17
17
|
* Registries without the lazy loaders (renderer 0.10.0 and older) gate nothing and keep the fonts they have.
|
|
18
18
|
*
|
|
19
|
-
* - `pending(document)` lists the faces (script packages and vendored files) the document needs that are
|
|
20
|
-
* Synchronous; empty means the document can render now. Never throws: a document the renderer rejects for
|
|
21
|
-
* reasons reports nothing pending and fails with its own validation message when rendered.
|
|
22
|
-
*
|
|
19
|
+
* - `pending(document, renderOptions?)` lists the faces (script packages and vendored files) the document needs that are
|
|
20
|
+
* not loaded. Synchronous; empty means the document can render now. Never throws: a document the renderer rejects for
|
|
21
|
+
* other reasons reports nothing pending and fails with its own validation message when rendered. Script faces and
|
|
22
|
+
* vendored faces are asked separately, so one that cannot be answered does not hide the other.
|
|
23
|
+
* - `ensure(document, { signal, renderOptions })` loads vendored faces first (script fallback depends on them), then script faces,
|
|
23
24
|
* and repeats until nothing is pending. It makes a bounded number of rounds and rejects with a `fonts-unavailable`
|
|
24
25
|
* error (the registry's error is its `cause`); it never retries by itself, a later call is a new attempt.
|
|
25
26
|
* - `run(document, handlers)` is `whenFontsReady` on this gate.
|
|
27
|
+
* - `renderOptions` (per call, or `createFontGate(registry, { renderOptions })` as an object or a getter) are the options the
|
|
28
|
+
* host renders with (`catalogs`, ...). They are passed to the registry, so a layout or font scheme that only the host's
|
|
29
|
+
* catalogs know resolves the same way there (renderer 0.11.5 and newer; older renderers ignore them).
|
|
26
30
|
*/
|
|
27
|
-
export function createFontGate(registry) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
export function createFontGate(registry, gateOptions = {}) {
|
|
32
|
+
// FF-41: the render options (`catalogs` above all) the document resolves with. The registry resolves a document the way the
|
|
33
|
+
// host renders it only when it gets the same options, so every call passes them: the gate's defaults (an object, or a
|
|
34
|
+
// function called each time, for options that change like `canvas.setRenderOptions`) under the call's own.
|
|
35
|
+
const defaults = () => (typeof gateOptions.renderOptions === "function" ? gateOptions.renderOptions() : gateOptions.renderOptions) ?? {};
|
|
36
|
+
const optionsFor = (renderOptions) => ({ ...defaults(), ...renderOptions });
|
|
37
|
+
// Each source answers on its own: a document one loader cannot resolve (an unresolvable layout throws in the renderer's
|
|
38
|
+
// lazy font loader) must not hide what the other still reports pending.
|
|
39
|
+
const sources = (document, renderOptions) => {
|
|
40
|
+
const options = optionsFor(renderOptions);
|
|
41
|
+
let scripts = [], lazy = [];
|
|
42
|
+
try { scripts = registry?.pendingScripts?.(document, options) ?? []; } catch { /* the renderer reports the document itself when it renders */ }
|
|
43
|
+
try { lazy = (registry?.pendingLazyFonts?.(document, options) ?? []).map((face) => face?.file ?? String(face)); } catch { /* likewise */ }
|
|
44
|
+
return { lazy, scripts };
|
|
45
|
+
};
|
|
46
|
+
const pending = (document, renderOptions) => {
|
|
47
|
+
const { lazy, scripts } = sources(document, renderOptions);
|
|
48
|
+
return [...lazy, ...scripts];
|
|
36
49
|
};
|
|
37
50
|
const gate = {
|
|
38
51
|
pending,
|
|
39
52
|
async ensure(document, options = {}) {
|
|
40
|
-
const { signal } = options;
|
|
53
|
+
const { signal, renderOptions } = options;
|
|
54
|
+
const call = { ...optionsFor(renderOptions), signal };
|
|
41
55
|
try {
|
|
42
|
-
for (let round = 0; round < MAX_ROUNDS
|
|
56
|
+
for (let round = 0; round < MAX_ROUNDS; round++) {
|
|
57
|
+
const { lazy, scripts } = sources(document, renderOptions);
|
|
58
|
+
if (!lazy.length && !scripts.length) break;
|
|
43
59
|
signal?.throwIfAborted?.();
|
|
44
|
-
|
|
45
|
-
await registry.
|
|
60
|
+
// Vendored faces first (script fallback depends on them). A source with nothing pending is not asked to load.
|
|
61
|
+
if (lazy.length) await registry.ensureLazyFonts?.(document, call);
|
|
62
|
+
if (scripts.length) await registry.ensureScripts?.(document, call);
|
|
46
63
|
}
|
|
47
64
|
} catch (cause) {
|
|
48
65
|
if (signal?.aborted) throw cause;
|
|
49
66
|
throw fontsUnavailable(cause?.message ?? String(cause), cause);
|
|
50
67
|
}
|
|
51
|
-
const left = pending(document);
|
|
68
|
+
const left = pending(document, renderOptions);
|
|
52
69
|
if (left.length) throw fontsUnavailable(`${left.join(", ")} did not finish loading.`);
|
|
53
70
|
},
|
|
54
71
|
};
|
|
@@ -75,10 +92,11 @@ export function fontsPendingError(pending) {
|
|
|
75
92
|
* With nothing pending, `ready` runs synchronously, so documents in already-loaded fonts render at once. Otherwise
|
|
76
93
|
* `loading(pending)` runs, the faces load and `ready` runs after them. `isCurrent()` is checked after the wait, so a
|
|
77
94
|
* result for a superseded document is dropped. A load failure, and an exception thrown by `ready`, go to `failed(error)`
|
|
78
|
-
* (they are rethrown when there is no `failed`). `gate` is any object with
|
|
95
|
+
* (they are rethrown when there is no `failed`). `renderOptions` are passed to the gate. `gate` is any object with
|
|
96
|
+
* `pending(document, renderOptions)` and `ensure(document, { renderOptions })`;
|
|
79
97
|
* without one the document is treated as ready. Resolves once `ready` or `failed` has run.
|
|
80
98
|
*/
|
|
81
|
-
export function whenFontsReady(gate, document, { isCurrent = () => true, loading, ready, failed } = {}) {
|
|
99
|
+
export function whenFontsReady(gate, document, { isCurrent = () => true, loading, ready, failed, renderOptions } = {}) {
|
|
82
100
|
const finish = () => {
|
|
83
101
|
try {
|
|
84
102
|
ready?.();
|
|
@@ -87,13 +105,13 @@ export function whenFontsReady(gate, document, { isCurrent = () => true, loading
|
|
|
87
105
|
failed(error);
|
|
88
106
|
}
|
|
89
107
|
};
|
|
90
|
-
const left = gate?.pending?.(document) ?? [];
|
|
108
|
+
const left = gate?.pending?.(document, renderOptions) ?? [];
|
|
91
109
|
if (!left.length) {
|
|
92
110
|
finish();
|
|
93
111
|
return Promise.resolve();
|
|
94
112
|
}
|
|
95
113
|
loading?.(left);
|
|
96
|
-
return Promise.resolve(gate.ensure(document)).then(
|
|
114
|
+
return Promise.resolve(gate.ensure(document, { renderOptions })).then(
|
|
97
115
|
() => {
|
|
98
116
|
if (isCurrent()) finish();
|
|
99
117
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openpresentation/opf-editor",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.3",
|
|
4
4
|
"description": "Embeddable local OPF editor primitives built on the deterministic renderer.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -87,8 +87,8 @@
|
|
|
87
87
|
"sideEffects": false,
|
|
88
88
|
"scripts": {
|
|
89
89
|
"build": "node scripts/build.mjs",
|
|
90
|
-
"typecheck": "node --check src/index.js && node --check src/react.js && node --check src/svelte.js && node --check scripts/build.mjs && node --check scripts/validate-package.mjs && node --check test/smoke.mjs && node --check test/component-smoke.mjs && node --check src/canvas.js && node --check src/canvas-fields.js && node --check test/canvas-fields.mjs && node --check test/browser-canvas.mjs && node --check src/transfer.js && node --check src/presentation-ids.js && node --check src/font-defaults.js && node --check src/color-authoring.js && node --check test/presentation-ids.mjs && node --check src/galleries.js && node --check examples/transfer-controls.js && node --check src/schema.js && node --check src/schema-inspector.js && node --check test/rich-table-browser.mjs && node --check test/styled-table.mjs && node --check test/styled-table-browser.mjs && node --check examples/pptx-controls.js && node --check scripts/build-playground.mjs && node --check test/playground-pptx.mjs && node --check test/playground-script-fonts.mjs && node --check test/playground-lazy-fonts.mjs && node --check src/text-input.js && node --check src/rich-text.js && node --check src/rich-text-input.js && node --check src/rich-text-toolbar.js && node --check test/rich-text.mjs && node --check test/rich-input-browser.mjs && node --check src/json-editor.js && node --check src/json-menu.js && node --check src/json-options.js && node --check src/json-source.js && node --check src/switches.js && node --check test/switches.mjs && node --check test/switches-export.mjs && node --check test/placeholder-selection.mjs && node --check test/selection-browser.mjs && node --check scripts/check-font-hotlinks.mjs && node --check scripts/check-font-hotlinks.test.mjs && node --check src/exact-source.js && node --check test/exact-source.mjs && node --check test/playground-source.mjs && node --check src/font-gate.js && node --check test/font-gate.mjs && node --check test/playground-ensure-fonts.mjs && node --check test/canvas-fonts-browser.mjs && node --check src/text-pointer.js && node --check test/click-entry-browser.mjs",
|
|
91
|
-
"test": "npm run build && npm run check:font-hotlinks && node test/accepted-text.mjs && node test/smoke.mjs && node test/component-smoke.mjs && node test/canvas-fields.mjs && node test/transfer.mjs && node test/gallery-font-roles.mjs && node test/default-font-scheme.mjs && node test/presentation-ids.mjs && node test/schema.mjs && node test/rich-text.mjs && node test/layout.mjs && node test/blocks.mjs && node test/styled-table.mjs && node test/json-source.mjs && node test/json-options.mjs && node test/switches.mjs && node test/switches-export.mjs && node test/placeholder-selection.mjs && node test/exact-source.mjs && node test/font-gate.mjs",
|
|
90
|
+
"typecheck": "node --check src/index.js && node --check src/react.js && node --check src/svelte.js && node --check scripts/build.mjs && node --check scripts/validate-package.mjs && node --check test/smoke.mjs && node --check test/component-smoke.mjs && node --check src/canvas.js && node --check src/canvas-fields.js && node --check test/canvas-fields.mjs && node --check test/browser-canvas.mjs && node --check src/transfer.js && node --check src/presentation-ids.js && node --check src/font-defaults.js && node --check src/color-authoring.js && node --check test/presentation-ids.mjs && node --check src/galleries.js && node --check examples/transfer-controls.js && node --check src/schema.js && node --check src/schema-inspector.js && node --check test/rich-table-browser.mjs && node --check test/styled-table.mjs && node --check test/styled-table-browser.mjs && node --check examples/pptx-controls.js && node --check scripts/build-playground.mjs && node --check test/playground-pptx.mjs && node --check test/playground-script-fonts.mjs && node --check test/playground-lazy-fonts.mjs && node --check src/text-input.js && node --check src/rich-text.js && node --check src/rich-text-input.js && node --check src/rich-text-toolbar.js && node --check test/rich-text.mjs && node --check test/rich-input-browser.mjs && node --check src/json-editor.js && node --check src/json-menu.js && node --check src/json-options.js && node --check src/json-source.js && node --check src/switches.js && node --check test/switches.mjs && node --check test/switches-export.mjs && node --check test/placeholder-selection.mjs && node --check test/selection-browser.mjs && node --check scripts/check-font-hotlinks.mjs && node --check scripts/check-font-hotlinks.test.mjs && node --check src/exact-source.js && node --check test/exact-source.mjs && node --check test/playground-source.mjs && node --check src/font-gate.js && node --check test/font-gate.mjs && node --check test/font-gate-registry.mjs && node --check test/playground-ensure-fonts.mjs && node --check test/canvas-fonts-browser.mjs && node --check src/text-pointer.js && node --check test/click-entry-browser.mjs",
|
|
91
|
+
"test": "npm run build && npm run check:font-hotlinks && node test/accepted-text.mjs && node test/smoke.mjs && node test/component-smoke.mjs && node test/canvas-fields.mjs && node test/transfer.mjs && node test/gallery-font-roles.mjs && node test/default-font-scheme.mjs && node test/presentation-ids.mjs && node test/schema.mjs && node test/rich-text.mjs && node test/layout.mjs && node test/blocks.mjs && node test/styled-table.mjs && node test/json-source.mjs && node test/json-options.mjs && node test/switches.mjs && node test/switches-export.mjs && node test/placeholder-selection.mjs && node test/exact-source.mjs && node test/font-gate.mjs && node test/font-gate-registry.mjs",
|
|
92
92
|
"validate": "node scripts/validate-package.mjs",
|
|
93
93
|
"test:packed": "node test/packed-install.mjs",
|
|
94
94
|
"prepack": "npm run build",
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
"@expo-google-fonts/noto-serif-hebrew": "0.4.2",
|
|
159
159
|
"@expo-google-fonts/noto-serif-tibetan": "0.4.2",
|
|
160
160
|
"@openpresentation/opf-pptx": "^0.11.1",
|
|
161
|
-
"@openpresentation/opf-render": "^0.11.
|
|
161
|
+
"@openpresentation/opf-render": "^0.11.5",
|
|
162
162
|
"esbuild": "0.28.2",
|
|
163
163
|
"playwright": "1.63.0"
|
|
164
164
|
}
|