@file-viewer/pptx 2.4.0 → 3.0.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/dist/chart.d.ts +6 -0
- package/dist/chart.js +22 -10
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/styles/pptxjs.css +14 -0
- package/dist/styles.js +3 -1
- package/dist/worker/pptx.worker.js +12 -12
- package/package.json +5 -5
package/dist/chart.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
export type PptxChartLibraries = {
|
|
2
|
+
billboard: any;
|
|
3
|
+
d3Format: typeof import('d3-format');
|
|
4
|
+
};
|
|
5
|
+
export type PptxChartLibraryLoader = () => Promise<PptxChartLibraries>;
|
|
6
|
+
export declare const registerPptxChartLibraryLoader: (loader: PptxChartLibraryLoader | null) => void;
|
|
1
7
|
export type PptxPostProcessingHandle = {
|
|
2
8
|
destroy: () => void;
|
|
3
9
|
};
|
package/dist/chart.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
let chartLibraryLoader = null;
|
|
2
|
+
export const registerPptxChartLibraryLoader = (loader) => {
|
|
3
|
+
chartLibraryLoader = loader;
|
|
4
|
+
};
|
|
1
5
|
const asChartQueue = (charts) => {
|
|
2
6
|
return Array.isArray(charts === null || charts === void 0 ? void 0 : charts.MsgQueue) ? charts.MsgQueue : [];
|
|
3
7
|
};
|
|
@@ -113,21 +117,21 @@ const applyTextFitScale = (block, scale) => {
|
|
|
113
117
|
setScaledPx(child, 'paddingRight', scale, computed);
|
|
114
118
|
});
|
|
115
119
|
};
|
|
116
|
-
const hasTextOverflow = (block) => block.scrollHeight > block.clientHeight + TEXT_FIT_TOLERANCE ||
|
|
117
|
-
block.scrollWidth > block.clientWidth + TEXT_FIT_TOLERANCE;
|
|
118
|
-
const fitOverflowingTextBlock = (block) => {
|
|
120
|
+
const hasTextOverflow = (block, fitWidth = true) => block.scrollHeight > block.clientHeight + TEXT_FIT_TOLERANCE ||
|
|
121
|
+
(fitWidth && block.scrollWidth > block.clientWidth + TEXT_FIT_TOLERANCE);
|
|
122
|
+
const fitOverflowingTextBlock = (block, fitWidth = true) => {
|
|
119
123
|
if (!block.querySelector('.text-block') || block.clientWidth <= 0 || block.clientHeight <= 0) {
|
|
120
124
|
return;
|
|
121
125
|
}
|
|
122
126
|
let scale = Number(block.dataset.pptxTextFitScale) || 1;
|
|
123
|
-
if (!hasTextOverflow(block)) {
|
|
127
|
+
if (!hasTextOverflow(block, fitWidth)) {
|
|
124
128
|
return;
|
|
125
129
|
}
|
|
126
|
-
for (let pass = 0; pass < TEXT_FIT_MAX_PASSES && hasTextOverflow(block); pass += 1) {
|
|
130
|
+
for (let pass = 0; pass < TEXT_FIT_MAX_PASSES && hasTextOverflow(block, fitWidth); pass += 1) {
|
|
127
131
|
const heightRatio = block.scrollHeight > 0
|
|
128
132
|
? Math.min(1, block.clientHeight / block.scrollHeight)
|
|
129
133
|
: 1;
|
|
130
|
-
const widthRatio = block.scrollWidth > 0
|
|
134
|
+
const widthRatio = fitWidth && block.scrollWidth > 0
|
|
131
135
|
? Math.min(1, block.clientWidth / block.scrollWidth)
|
|
132
136
|
: 1;
|
|
133
137
|
const ratio = Math.min(heightRatio, widthRatio, 0.98);
|
|
@@ -139,7 +143,7 @@ const fitOverflowingTextBlock = (block) => {
|
|
|
139
143
|
scale = nextScale;
|
|
140
144
|
}
|
|
141
145
|
applyTextFitScale(block, scale);
|
|
142
|
-
if (scale <= TEXT_FIT_MIN_SCALE && hasTextOverflow(block)) {
|
|
146
|
+
if (scale <= TEXT_FIT_MIN_SCALE && hasTextOverflow(block, fitWidth)) {
|
|
143
147
|
break;
|
|
144
148
|
}
|
|
145
149
|
}
|
|
@@ -147,7 +151,10 @@ const fitOverflowingTextBlock = (block) => {
|
|
|
147
151
|
const fitOverflowingTextBlocks = (root) => {
|
|
148
152
|
root
|
|
149
153
|
.querySelectorAll('.slide div.content, .slide div.content-rtl')
|
|
150
|
-
.forEach(fitOverflowingTextBlock);
|
|
154
|
+
.forEach(block => fitOverflowingTextBlock(block));
|
|
155
|
+
root
|
|
156
|
+
.querySelectorAll('.slide .pptx-table-cell-content')
|
|
157
|
+
.forEach(block => fitOverflowingTextBlock(block, false));
|
|
151
158
|
};
|
|
152
159
|
const renderChart = async (message, root) => {
|
|
153
160
|
var _a;
|
|
@@ -159,8 +166,13 @@ const renderChart = async (message, root) => {
|
|
|
159
166
|
if (!chartTarget) {
|
|
160
167
|
return;
|
|
161
168
|
}
|
|
162
|
-
|
|
163
|
-
|
|
169
|
+
if (!chartLibraryLoader) {
|
|
170
|
+
chartTarget.dataset.fileViewerMissingCapability = 'pptx-charts';
|
|
171
|
+
chartTarget.setAttribute('title', 'PPTX chart rendering requires @file-viewer/capability-pptx-charts. Run `npx file-viewer-cli add pptx-charts --write`, then `npx file-viewer-cli install --yes`.');
|
|
172
|
+
console.warn('[file-viewer] PPTX chart rendering requires @file-viewer/capability-pptx-charts. Run `npx file-viewer-cli add pptx-charts --write`, then `npx file-viewer-cli install --yes`.');
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const { billboard, d3Format } = await chartLibraryLoader();
|
|
164
176
|
const bb = billboard.default || billboard;
|
|
165
177
|
const { area, bar, line, pie, scatter } = billboard;
|
|
166
178
|
const chart = {
|
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,7 @@ export { PptxViewer } from './viewer';
|
|
|
2
2
|
export { PptxPresentation } from './presentation';
|
|
3
3
|
export type { PptxPresentationLabels, PptxPresentationState } from './presentation';
|
|
4
4
|
export { createPptxWorker } from './worker';
|
|
5
|
+
export { registerPptxChartLibraryLoader } from './chart';
|
|
6
|
+
export type { PptxChartLibraries, PptxChartLibraryLoader } from './chart';
|
|
5
7
|
export { RECOMMENDED_ZIP_LIMITS, createDefaultPptxOptions, resolvePptxEngineOptions, } from './options';
|
|
6
8
|
export type { NativePptxEngineOptions, PptxDiagnosticError, PptxDiagnosticErrorCode, PptxFitMode, PptxListOptions, PptxSlideSize, PptxViewerOptions, PptxWorkerFactoryOptions, PptxWorkerMessage, PptxZipLimits, } from './types';
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { PptxViewer } from './viewer.js';
|
|
2
2
|
export { PptxPresentation } from './presentation.js';
|
|
3
3
|
export { createPptxWorker } from './worker.js';
|
|
4
|
+
export { registerPptxChartLibraryLoader } from './chart.js';
|
|
4
5
|
export { RECOMMENDED_ZIP_LIMITS, createDefaultPptxOptions, resolvePptxEngineOptions, } from './options.js';
|
package/dist/styles/pptxjs.css
CHANGED
|
@@ -147,6 +147,20 @@
|
|
|
147
147
|
|
|
148
148
|
.slide table {
|
|
149
149
|
position: absolute;
|
|
150
|
+
table-layout: fixed;
|
|
151
|
+
box-sizing: border-box;
|
|
152
|
+
overflow: hidden;
|
|
153
|
+
}
|
|
154
|
+
.slide table tr,
|
|
155
|
+
.slide table td {
|
|
156
|
+
box-sizing: border-box;
|
|
157
|
+
min-width: 0;
|
|
158
|
+
overflow: hidden;
|
|
159
|
+
}
|
|
160
|
+
.slide .pptx-table-cell-content {
|
|
161
|
+
box-sizing: border-box;
|
|
162
|
+
min-height: 0;
|
|
163
|
+
overflow: hidden;
|
|
150
164
|
}
|
|
151
165
|
|
|
152
166
|
.slide svg.drawing {
|
package/dist/styles.js
CHANGED
|
@@ -28,7 +28,9 @@ const legacyPptxCss = `
|
|
|
28
28
|
.slide div.down-center{justify-content:flex-end;align-items:center}
|
|
29
29
|
.slide div.down-right{justify-content:flex-end;align-items:flex-end}
|
|
30
30
|
.slide li.slide{margin:10px 0;font-size:18px}
|
|
31
|
-
.slide table{position:absolute}
|
|
31
|
+
.slide table{position:absolute;table-layout:fixed;box-sizing:border-box;overflow:hidden}
|
|
32
|
+
.slide table tr,.slide table td{box-sizing:border-box;min-width:0;overflow:hidden}
|
|
33
|
+
.slide .pptx-table-cell-content{box-sizing:border-box;min-height:0;overflow:hidden}
|
|
32
34
|
.slide svg.drawing{position:absolute;overflow:visible}
|
|
33
35
|
`;
|
|
34
36
|
const PPTX_CONTENT_STYLE_SCOPE = '.flyfish-pptx-content';
|