@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 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
- const billboard = await import('billboard.js');
163
- const d3Format = await import('d3-format');
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';
@@ -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';