ooxml-ui 1.30.0 → 1.32.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/README.md +10 -0
- package/custom-elements.json +4 -0
- package/dist/building-block-styles.d.ts +0 -1
- package/dist/chart/format-pane-3d.d.ts +0 -1
- package/dist/chart/format-pane-analysis.d.ts +0 -1
- package/dist/chart/format-pane-fill-line.d.ts +0 -1
- package/dist/chart/format-pane-text.d.ts +0 -1
- package/dist/{chunk-SBBFNAKM.js → chunk-32P252JS.js} +3 -3
- package/dist/{chunk-E4H3Y7M4.js → chunk-6TS7ASDJ.js} +1 -1
- package/dist/{chunk-BKHWBIXP.js → chunk-CALEXPBD.js} +132 -69
- package/dist/{chunk-SXVOXSTE.js → chunk-CDC5MAZS.js} +1 -1
- package/dist/chunk-DA57FPSN.js +54 -0
- package/dist/{chunk-HNREZW5U.js → chunk-KYXSQFDB.js} +484 -1
- package/dist/{chunk-IE6HKH4X.js → chunk-OKEFAQJT.js} +1 -1
- package/dist/controls.d.ts +6 -0
- package/dist/controls.d.ts.map +1 -1
- package/dist/controls.js +1 -1
- package/dist/dialog/dialog-session.d.ts +19 -0
- package/dist/dialog/dialog-session.d.ts.map +1 -0
- package/dist/docx/smartart-node-view.d.ts +1 -1
- package/dist/docx.js +36 -20
- package/dist/fonts/availability.d.ts +10 -0
- package/dist/fonts/availability.d.ts.map +1 -0
- package/dist/fonts/catalog.d.ts +63 -0
- package/dist/fonts/catalog.d.ts.map +1 -0
- package/dist/fonts/custom-fonts.d.ts +75 -0
- package/dist/fonts/custom-fonts.d.ts.map +1 -0
- package/dist/form/color-input/live-color-input.d.ts +93 -0
- package/dist/form/color-input/live-color-input.d.ts.map +1 -0
- package/dist/form/color-input/live-color-leaves.d.ts +34 -0
- package/dist/form/color-input/live-color-leaves.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +6 -5
- package/dist/picture-effects.d.ts +6 -0
- package/dist/pptx/ai/host.cjs +41 -37
- package/dist/pptx/ai/host.d.ts +2 -0
- package/dist/pptx/ai/host.d.ts.map +1 -1
- package/dist/pptx/ai/host.mjs +2 -2
- package/dist/pptx/ai/index.cjs +47 -43
- package/dist/pptx/ai/index.d.ts +2 -0
- package/dist/pptx/ai/index.d.ts.map +1 -1
- package/dist/pptx/ai/index.mjs +3 -3
- package/dist/pptx/{chart-3d-view-scene-ZUGA3DKM.mjs → chart-3d-view-scene-HNL4NWJT.mjs} +2 -2
- package/dist/pptx/{chart-3d-view-scene-N7UQOYFI.cjs → chart-3d-view-scene-OPVBTZL5.cjs} +38 -38
- package/dist/pptx/chunk-3RIGT7H6.cjs +82 -0
- package/dist/pptx/{chunk-D7UYDESZ.mjs → chunk-7DT3UJQB.mjs} +3 -3
- package/dist/pptx/{chunk-KY75GY5O.mjs → chunk-7FXQHSPE.mjs} +6 -24
- package/dist/pptx/{chunk-45OYSCLD.mjs → chunk-CH4Z6H6C.mjs} +581 -230
- package/dist/pptx/{chunk-6KLPQQYP.cjs → chunk-D4LJJ7Z7.cjs} +77 -327
- package/dist/pptx/{chunk-MNSWEXYO.mjs → chunk-DACFW5LO.mjs} +26 -3
- package/dist/pptx/{chunk-IOOI63TH.cjs → chunk-FFWLDANS.cjs} +6 -24
- package/dist/pptx/{chunk-SMMEIEEJ.mjs → chunk-KGDMMWIY.mjs} +1 -1
- package/dist/pptx/{chunk-LXEMMWVI.mjs → chunk-LCCRLB7Q.mjs} +1 -1
- package/dist/pptx/{chunk-BMMTD6PB.cjs → chunk-M55PNMFQ.cjs} +2 -2
- package/dist/pptx/chunk-PM2SOLK3.mjs +79 -0
- package/dist/pptx/{chunk-QX6XPYVA.mjs → chunk-PTIGQSTY.mjs} +31 -14
- package/dist/pptx/{chunk-34LEUH5R.mjs → chunk-RZVEPTLN.mjs} +63 -316
- package/dist/pptx/{chunk-CQYWHRZE.cjs → chunk-S3L5NNCK.cjs} +1 -1
- package/dist/pptx/{chunk-H5IPNKX6.cjs → chunk-S5I64Y55.cjs} +12 -12
- package/dist/pptx/{chunk-WQA3KZRB.mjs → chunk-SPOECCPV.mjs} +1 -1
- package/dist/pptx/{chunk-YMWEU56T.cjs → chunk-TDIJHLS5.cjs} +927 -543
- package/dist/pptx/{chunk-QWF3PGUX.cjs → chunk-VEFFYJGG.cjs} +26 -2
- package/dist/pptx/{chunk-BSGCZ4JZ.cjs → chunk-WBGU7BWD.cjs} +31 -14
- package/dist/pptx/{chunk-2CBK46AW.cjs → chunk-ZS5EVODY.cjs} +48 -48
- package/dist/pptx/dom/index.cjs +431 -430
- package/dist/pptx/dom/index.mjs +15 -14
- package/dist/pptx/export/html2canvas-clone.cjs +6 -6
- package/dist/pptx/export/html2canvas-clone.mjs +1 -1
- package/dist/pptx/index.cjs +3423 -3355
- package/dist/pptx/index.mjs +8 -8
- package/dist/pptx/render/bullet-toggle-selection.d.ts +8 -4
- package/dist/pptx/render/bullet-toggle-selection.d.ts.map +1 -1
- package/dist/pptx/render/chart-box-whisker.d.ts.map +1 -1
- package/dist/pptx/render/chart-combo-stock.cjs +3 -3
- package/dist/pptx/render/chart-combo-stock.mjs +1 -1
- package/dist/pptx/render/chart-data-table-metrics.d.ts +1 -1
- package/dist/pptx/render/chart-data-table-metrics.d.ts.map +1 -1
- package/dist/pptx/render/chart-data-table-render.d.ts.map +1 -1
- package/dist/pptx/render/chart-date-axis.d.ts +1 -1
- package/dist/pptx/render/chart-date-axis.d.ts.map +1 -1
- package/dist/pptx/render/chart-date-format.d.ts +1 -30
- package/dist/pptx/render/chart-date-format.d.ts.map +1 -1
- package/dist/pptx/render/chart-funnel-sunburst.d.ts +1 -1
- package/dist/pptx/render/chart-funnel-sunburst.d.ts.map +1 -1
- package/dist/pptx/render/chart-line-path.d.ts +2 -26
- package/dist/pptx/render/chart-line-path.d.ts.map +1 -1
- package/dist/pptx/render/chart-manual-layout.d.ts +1 -1
- package/dist/pptx/render/chart-manual-layout.d.ts.map +1 -1
- package/dist/pptx/render/chart-overlays.cjs +7 -7
- package/dist/pptx/render/chart-overlays.mjs +1 -1
- package/dist/pptx/render/chart-surface-treemap.cjs +4 -4
- package/dist/pptx/render/chart-surface-treemap.mjs +1 -1
- package/dist/pptx/render/chart-view-model-layout.d.ts.map +1 -1
- package/dist/pptx/render/chart-view-model.cjs +44 -44
- package/dist/pptx/render/chart-view-model.mjs +1 -1
- package/dist/pptx/render/chart-waterfall-map.cjs +6 -6
- package/dist/pptx/render/chart-waterfall-map.mjs +1 -1
- package/dist/pptx/render/controller/ai-assistant.d.ts +73 -0
- package/dist/pptx/render/controller/ai-assistant.d.ts.map +1 -0
- package/dist/pptx/render/controller/autosave-controller.d.ts.map +1 -1
- package/dist/pptx/render/controller/collaboration-history.d.ts +25 -0
- package/dist/pptx/render/controller/collaboration-history.d.ts.map +1 -1
- package/dist/pptx/render/controller/history-controller.d.ts +9 -0
- package/dist/pptx/render/controller/history-controller.d.ts.map +1 -1
- package/dist/pptx/render/controller/index.d.ts +4 -0
- package/dist/pptx/render/controller/index.d.ts.map +1 -1
- package/dist/pptx/render/custom-fonts.cjs +9 -5
- package/dist/pptx/render/custom-fonts.d.ts +1 -64
- package/dist/pptx/render/custom-fonts.d.ts.map +1 -1
- package/dist/pptx/render/custom-fonts.mjs +1 -1
- package/dist/pptx/render/editor-geometry.d.ts +3 -15
- package/dist/pptx/render/editor-geometry.d.ts.map +1 -1
- package/dist/pptx/render/font-availability.d.ts +1 -9
- package/dist/pptx/render/font-availability.d.ts.map +1 -1
- package/dist/pptx/render/font-catalog.cjs +3 -3
- package/dist/pptx/render/font-catalog.d.ts +3 -61
- package/dist/pptx/render/font-catalog.d.ts.map +1 -1
- package/dist/pptx/render/font-catalog.mjs +1 -1
- package/dist/pptx/render/hyperlink-security.cjs +8 -8
- package/dist/pptx/render/hyperlink-security.d.ts +1 -27
- package/dist/pptx/render/hyperlink-security.d.ts.map +1 -1
- package/dist/pptx/render/hyperlink-security.mjs +1 -1
- package/dist/pptx/render/image-effects.d.ts.map +1 -1
- package/dist/pptx/render/index.d.ts +2 -0
- package/dist/pptx/render/index.d.ts.map +1 -1
- package/dist/pptx/render/inline-list-style.d.ts +2 -1
- package/dist/pptx/render/inline-list-style.d.ts.map +1 -1
- package/dist/pptx/render/live-color-input.d.ts +2 -92
- package/dist/pptx/render/live-color-input.d.ts.map +1 -1
- package/dist/pptx/render/live-color-leaves.d.ts +2 -33
- package/dist/pptx/render/live-color-leaves.d.ts.map +1 -1
- package/dist/pptx/render/options/autocorrect.d.ts +15 -2
- package/dist/pptx/render/options/autocorrect.d.ts.map +1 -1
- package/dist/pptx/render/picture-crop/crop-geometry.d.ts +2 -20
- package/dist/pptx/render/picture-crop/crop-geometry.d.ts.map +1 -1
- package/dist/pptx/render/slides-pane-model.d.ts +79 -0
- package/dist/pptx/render/slides-pane-model.d.ts.map +1 -0
- package/dist/pptx/render/table-cell-edit.d.ts +1 -1
- package/dist/pptx/render/table-cell-edit.d.ts.map +1 -1
- package/dist/pptx/render/text-list-style-update.d.ts +23 -2
- package/dist/pptx/render/text-list-style-update.d.ts.map +1 -1
- package/dist/pptx/render/text-script-fonts.d.ts +4 -72
- package/dist/pptx/render/text-script-fonts.d.ts.map +1 -1
- package/dist/pptx/render/text-warp-envelope-block.d.ts +10 -1
- package/dist/pptx/render/text-warp-envelope-block.d.ts.map +1 -1
- package/dist/pptx/render/text-warp-envelope-curves.d.ts +8 -0
- package/dist/pptx/render/text-warp-envelope-curves.d.ts.map +1 -1
- package/dist/pptx/render/text-warp-envelope-layout.d.ts +9 -3
- package/dist/pptx/render/text-warp-envelope-layout.d.ts.map +1 -1
- package/dist/pptx/render/text-warp-envelope-map.d.ts.map +1 -1
- package/dist/pptx/render/text-warp-envelope-wrap.d.ts +29 -0
- package/dist/pptx/render/text-warp-envelope-wrap.d.ts.map +1 -0
- package/dist/pptx/render/text-warp-preset-definitions.d.ts +13 -0
- package/dist/pptx/render/text-warp-preset-definitions.d.ts.map +1 -1
- package/dist/pptx/render/text-warp-preset-sampler.d.ts +12 -0
- package/dist/pptx/render/text-warp-preset-sampler.d.ts.map +1 -1
- package/dist/pptx/render/text-warp.d.ts +3 -2
- package/dist/pptx/render/text-warp.d.ts.map +1 -1
- package/dist/pptx/render/viewer-props-manifest.d.ts.map +1 -1
- package/dist/pptx/{smartart-insert-preview-SKFD7NCQ.mjs → smartart-insert-preview-RQUFRLSV.mjs} +9 -9
- package/dist/pptx/{smartart-insert-preview-7OL7VWEK.cjs → smartart-insert-preview-YKNB37GE.cjs} +10 -10
- package/dist/recovery-scheduler.d.ts +18 -0
- package/dist/recovery-scheduler.d.ts.map +1 -0
- package/dist/smartart/smartart-geometry.d.ts +1 -3
- package/dist/smartart/smartart-paint.d.ts +2 -1
- package/dist/smartart/smartart-picture.d.ts +7 -0
- package/dist/smartart/smartart-svg.d.ts +2 -1
- package/dist/smartart/smartart.d.ts +6 -0
- package/dist/smartart.js +1 -1
- package/dist/teams.js +2 -2
- package/dist/theme-bridge.d.ts +0 -1
- package/dist/theme.d.ts +0 -1
- package/dist/visio/controller.d.ts +2 -2
- package/dist/visio/viewer-autorecover.d.ts +0 -1
- package/dist/visio/viewer-commands.d.ts +1 -1
- package/dist/visio/viewer-guides.d.ts +2 -2
- package/dist/visio/viewer-pointer-gestures.d.ts +1 -1
- package/dist/visio/viewer-resize-frame.d.ts +2 -2
- package/dist/visio/viewer-resize-handles.d.ts +1 -1
- package/dist/visio.js +109 -62
- package/dist/xlsx/grid/smartart.d.ts +1 -1
- package/dist/xlsx.js +91 -62
- package/package.json +2 -2
- package/dist/pptx/chunk-WM5SW737.mjs +0 -27
- package/dist/pptx/chunk-Y6DO6SVT.cjs +0 -29
|
@@ -1,32 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var opc = require('ooxml-core/opc');
|
|
4
|
+
|
|
3
5
|
// src/pptx/render/hyperlink-security.ts
|
|
4
|
-
var
|
|
5
|
-
`${"javascript"}:`,
|
|
6
|
-
"data:",
|
|
7
|
-
"vbscript:",
|
|
8
|
-
"mhtml:",
|
|
9
|
-
`x-]${"javascript"}:`
|
|
10
|
-
]);
|
|
6
|
+
var PPTX_HYPERLINK_POLICY = { additionalOpenSchemes: ["ftp", "tel", "file"], openRelative: true };
|
|
11
7
|
function isUrlSafe(url) {
|
|
12
|
-
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
const trimmed = url.trim();
|
|
16
|
-
if (trimmed.length === 0) {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
const lower = trimmed.toLowerCase();
|
|
20
|
-
const stripped = lower.replace(/[\s]/gu, "").replace(//gu, "").replace(//gu, "").split(String.fromCharCode(0)).join("");
|
|
21
|
-
for (const protocol of BLOCKED_PROTOCOLS) {
|
|
22
|
-
if (stripped.startsWith(protocol)) {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return true;
|
|
8
|
+
return isPpactionUrl(url) || opc.isStorableHyperlinkHref(url, PPTX_HYPERLINK_POLICY);
|
|
27
9
|
}
|
|
28
10
|
function safeOpenUrl(url, target = "_blank") {
|
|
29
|
-
if (!
|
|
11
|
+
if (isPpactionUrl(url) || !opc.isOpenableHyperlinkHref(url, PPTX_HYPERLINK_POLICY)) {
|
|
30
12
|
if (typeof console !== "undefined") {
|
|
31
13
|
console.warn(`[pptx-viewer] Blocked attempt to open unsafe URL: ${url.slice(0, 100)}`);
|
|
32
14
|
}
|
|
@@ -77,7 +59,7 @@ function isPpactionUrl(url) {
|
|
|
77
59
|
return url.toLowerCase().startsWith("ppaction://");
|
|
78
60
|
}
|
|
79
61
|
function resolveHyperlinkHref(url) {
|
|
80
|
-
if (!url || isPpactionUrl(url) || !
|
|
62
|
+
if (!url || isPpactionUrl(url) || !opc.isOpenableHyperlinkHref(url, PPTX_HYPERLINK_POLICY)) {
|
|
81
63
|
return void 0;
|
|
82
64
|
}
|
|
83
65
|
return url.trim();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createChatHistoryStore } from './chunk-LVDF75JU.mjs';
|
|
2
|
-
import { createControllerStore } from './chunk-
|
|
2
|
+
import { createControllerStore } from './chunk-PM2SOLK3.mjs';
|
|
3
3
|
import { updateTextSegmentStyle } from './chunk-PEDGPFLR.mjs';
|
|
4
4
|
import { hasTextProperties, hasShapeProperties } from 'ooxml-core/pptx';
|
|
5
5
|
|
|
@@ -112,7 +112,7 @@ async function loadChart3DThree() {
|
|
|
112
112
|
|
|
113
113
|
// src/pptx/three-view/scene-registry.ts
|
|
114
114
|
var loaders = {
|
|
115
|
-
chart: async () => (await import('./chart-3d-view-scene-
|
|
115
|
+
chart: async () => (await import('./chart-3d-view-scene-HNL4NWJT.mjs')).mountChart3DView,
|
|
116
116
|
smartart: async () => (await import('./view-scene-GHBN7QMR.mjs')).mountSmartArt3DView
|
|
117
117
|
};
|
|
118
118
|
async function loadThreeViewScene(kind) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunkA5MANNJR_cjs = require('./chunk-A5MANNJR.cjs');
|
|
4
|
-
var
|
|
4
|
+
var chunk3RIGT7H6_cjs = require('./chunk-3RIGT7H6.cjs');
|
|
5
5
|
var chunkPBZWDEXQ_cjs = require('./chunk-PBZWDEXQ.cjs');
|
|
6
6
|
var pptx = require('ooxml-core/pptx');
|
|
7
7
|
|
|
@@ -353,7 +353,7 @@ var INITIAL_STATE = {
|
|
|
353
353
|
changeBatch: null
|
|
354
354
|
};
|
|
355
355
|
function createPptxAiPanelController(deps) {
|
|
356
|
-
const store =
|
|
356
|
+
const store = chunk3RIGT7H6_cjs.createControllerStore(INITIAL_STATE);
|
|
357
357
|
let toolFocus = null;
|
|
358
358
|
let flashing = false;
|
|
359
359
|
let flashTimer = null;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// src/pptx/render/controller/controller.ts
|
|
2
|
+
function createControllerStore(initial) {
|
|
3
|
+
let snapshot = initial;
|
|
4
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
5
|
+
const set = (next) => {
|
|
6
|
+
if (Object.is(next, snapshot)) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
snapshot = next;
|
|
10
|
+
for (const listener of [...listeners]) {
|
|
11
|
+
listener();
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
getSnapshot: () => snapshot,
|
|
16
|
+
subscribe(listener) {
|
|
17
|
+
listeners.add(listener);
|
|
18
|
+
return () => {
|
|
19
|
+
listeners.delete(listener);
|
|
20
|
+
};
|
|
21
|
+
},
|
|
22
|
+
set,
|
|
23
|
+
update: (recipe) => set(recipe(snapshot))
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// src/pptx/render/controller/ai-assistant.ts
|
|
28
|
+
var HANDLE_TAG = "PptxAiAssistant";
|
|
29
|
+
var handlePrototype = Object.freeze(
|
|
30
|
+
Object.create(null, { [Symbol.toStringTag]: { value: HANDLE_TAG } })
|
|
31
|
+
);
|
|
32
|
+
var warned = /* @__PURE__ */ new WeakSet();
|
|
33
|
+
function createAiAssistantRegistry({
|
|
34
|
+
owner
|
|
35
|
+
}) {
|
|
36
|
+
const assistants = /* @__PURE__ */ new WeakMap();
|
|
37
|
+
return Object.freeze({
|
|
38
|
+
register(config, panel) {
|
|
39
|
+
const handle = Object.freeze(Object.create(handlePrototype));
|
|
40
|
+
assistants.set(handle, Object.freeze({ config, panel }));
|
|
41
|
+
return handle;
|
|
42
|
+
},
|
|
43
|
+
resolve(value, options = {}) {
|
|
44
|
+
if (value === void 0 || value === null) {
|
|
45
|
+
return void 0;
|
|
46
|
+
}
|
|
47
|
+
const entry = assistants.get(value);
|
|
48
|
+
if (entry) {
|
|
49
|
+
return entry;
|
|
50
|
+
}
|
|
51
|
+
if (isHandleShaped(value) && (options.development ?? isDevelopment())) {
|
|
52
|
+
warnOnce(value, unreadableHandleMessage(owner), options.warn);
|
|
53
|
+
}
|
|
54
|
+
return { config: value, panel: void 0 };
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function isHandleShaped(value) {
|
|
59
|
+
return typeof value === "object" && value !== null && Object.prototype.toString.call(value) === `[object ${HANDLE_TAG}]`;
|
|
60
|
+
}
|
|
61
|
+
function unreadableHandleMessage(owner) {
|
|
62
|
+
return `[pptx-viewer] The \`ai\` value is a createAiAssistant handle that ${owner}/ai did not create: it comes from another binding, or from another copy of the package (a second install, or the ESM and CommonJS builds mixed). ${owner} treats it as a plain config, and the assistant shows its error state. Create the handle with createAiAssistant from ${owner}/ai, loaded from the same copy of the package as the viewer.`;
|
|
63
|
+
}
|
|
64
|
+
function warnOnce(value, message, warn) {
|
|
65
|
+
if (warned.has(value)) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
warned.add(value);
|
|
69
|
+
(warn ?? console.warn)(message);
|
|
70
|
+
}
|
|
71
|
+
function isDevelopment() {
|
|
72
|
+
try {
|
|
73
|
+
return process.env.NODE_ENV !== "production";
|
|
74
|
+
} catch {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export { createAiAssistantRegistry, createControllerStore };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { COMMON_FONT_FAMILIES } from './chunk-SMSCEGAE.mjs';
|
|
2
2
|
|
|
3
|
-
// src/
|
|
3
|
+
// src/fonts/catalog.ts
|
|
4
4
|
var GROUP_LABEL_KEYS = {
|
|
5
|
-
theme: "
|
|
6
|
-
embedded: "
|
|
7
|
-
custom: "
|
|
8
|
-
all: "
|
|
5
|
+
theme: "theme",
|
|
6
|
+
embedded: "embedded",
|
|
7
|
+
custom: "custom",
|
|
8
|
+
all: "all"
|
|
9
9
|
};
|
|
10
10
|
function buildFontCatalog(input = {}) {
|
|
11
11
|
const themeEntries = [];
|
|
@@ -32,19 +32,16 @@ function buildFontCatalog(input = {}) {
|
|
|
32
32
|
}
|
|
33
33
|
const embedded = collect(input.embeddedFonts, claim);
|
|
34
34
|
const custom = collect(input.customFonts, claim);
|
|
35
|
-
const all = collect(input.allFonts
|
|
35
|
+
const all = collect(input.allFonts, claim);
|
|
36
36
|
return [
|
|
37
37
|
{ id: "theme", entries: themeEntries },
|
|
38
38
|
{ id: "embedded", entries: embedded },
|
|
39
39
|
{ id: "custom", entries: custom },
|
|
40
40
|
{ id: "all", entries: all }
|
|
41
|
-
].filter((group) => group.entries.length > 0).map((group) => ({
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const isHeading = normalized === "title" || normalized === "ctrtitle";
|
|
46
|
-
const preferred = isHeading ? themeFonts?.heading : themeFonts?.body;
|
|
47
|
-
return preferred?.trim() || themeFonts?.body?.trim() || themeFonts?.heading?.trim() || fallback;
|
|
41
|
+
].filter((group) => group.entries.length > 0).map((group) => ({
|
|
42
|
+
...group,
|
|
43
|
+
labelKey: input.labelKeys?.[group.id] ?? GROUP_LABEL_KEYS[group.id]
|
|
44
|
+
}));
|
|
48
45
|
}
|
|
49
46
|
function collect(families, claim) {
|
|
50
47
|
const entries = [];
|
|
@@ -57,4 +54,24 @@ function collect(families, claim) {
|
|
|
57
54
|
return entries;
|
|
58
55
|
}
|
|
59
56
|
|
|
60
|
-
|
|
57
|
+
// src/pptx/render/font-catalog.ts
|
|
58
|
+
function buildFontCatalog2(input = {}) {
|
|
59
|
+
return buildFontCatalog({
|
|
60
|
+
...input,
|
|
61
|
+
allFonts: input.allFonts ?? COMMON_FONT_FAMILIES,
|
|
62
|
+
labelKeys: {
|
|
63
|
+
theme: "pptx.font.group.theme",
|
|
64
|
+
embedded: "pptx.font.group.embedded",
|
|
65
|
+
custom: "pptx.font.group.custom",
|
|
66
|
+
all: "pptx.font.group.all"
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function resolveDefaultFontFamily(placeholderType, themeFonts, fallback = "Segoe UI") {
|
|
71
|
+
const normalized = placeholderType?.trim().toLowerCase();
|
|
72
|
+
const isHeading = normalized === "title" || normalized === "ctrtitle";
|
|
73
|
+
const preferred = isHeading ? themeFonts?.heading : themeFonts?.body;
|
|
74
|
+
return preferred?.trim() || themeFonts?.body?.trim() || themeFonts?.heading?.trim() || fallback;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export { buildFontCatalog2 as buildFontCatalog, resolveDefaultFontFamily };
|