pptx-angular-viewer 2.13.1 → 2.13.2

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.
@@ -6974,8 +6974,11 @@ function formatAxisValue$1(val, formatCode) {
6974
6974
  * legend, optional secondary axes, and an optional data table.
6975
6975
  */
6976
6976
  function computeLayout(elementWidth, elementHeight, style, hasAxes, legendPos, options) {
6977
- const svgWidth = Math.max(320, elementWidth);
6978
- const svgHeight = Math.max(180, elementHeight);
6977
+ // Match the element frame exactly; bindings stretch the viewBox with
6978
+ // preserveAspectRatio "none", so a minimum would scale non-uniformly
6979
+ // (see computePlotLayout in chart-view-model.ts).
6980
+ const svgWidth = Math.max(1, elementWidth);
6981
+ const svgHeight = Math.max(1, elementHeight);
6979
6982
  let plotLeft = hasAxes ? 48 : 8;
6980
6983
  let plotTop = 8;
6981
6984
  let plotRight = svgWidth - 8;
@@ -7083,6 +7086,49 @@ function plotAreaFill(chartData) {
7083
7086
  return resolve(chartData?.style?.plotAreaFill, undefined);
7084
7087
  }
7085
7088
 
7089
+ /**
7090
+ * chart-font.ts: the single pt -> px boundary for chart text.
7091
+ *
7092
+ * Core parses every chart font size in POINTS (`c:txPr` run sizes are stored
7093
+ * as `sz / 100`, e.g. `sz="1195"` -> 11.95 pt; see core's chart-axis-parser),
7094
+ * and that unit is part of core's public model: editors and inspectors read
7095
+ * and write points. The SVG chart view-model, however, lives in slide-pixel
7096
+ * space (96 dpi), where PowerPoint paints one point as 4/3 px. Rendering the
7097
+ * parsed number directly as `SvgText.fontSize` therefore drew ALL chart text
7098
+ * at 75% of its true size (issue #132).
7099
+ *
7100
+ * Every parsed chart font size must cross the pt -> px boundary exactly once,
7101
+ * at the moment it enters an `SvgText` descriptor, and that conversion lives
7102
+ * here. Do NOT convert in core (its unit is points by contract) and do NOT
7103
+ * convert again in a binding projector (the view-model is already px).
7104
+ *
7105
+ * The default constants are PowerPoint's chart text defaults expressed in px:
7106
+ * 10 pt body text (axis ticks, category labels, axis titles) and 9 pt data
7107
+ * labels.
7108
+ *
7109
+ * @module chart-font
7110
+ */
7111
+ /** CSS pixels per typographic point (96 dpi / 72 dpi = 4/3). */
7112
+ const CHART_PX_PER_PT = 4 / 3;
7113
+ /**
7114
+ * Convert a chart font size parsed in points (core's unit) to slide-px for
7115
+ * `SvgText.fontSize`. E.g. 11.95 pt -> 15.93 px.
7116
+ */
7117
+ function chartFontPx(sizePt) {
7118
+ return sizePt * CHART_PX_PER_PT;
7119
+ }
7120
+ /**
7121
+ * PowerPoint's default chart body text size (10 pt) in slide-px (13.33):
7122
+ * axis tick labels, category labels, axis titles, and display-unit captions
7123
+ * fall back to this when the chart XML declares no explicit size.
7124
+ */
7125
+ const DEFAULT_CHART_TEXT_PX = chartFontPx(10);
7126
+ /**
7127
+ * PowerPoint's default data-label text size (9 pt) in slide-px (12): value /
7128
+ * category / percent labels attached to data marks fall back to this.
7129
+ */
7130
+ const DEFAULT_CHART_DATA_LABEL_PX = chartFontPx(9);
7131
+
7086
7132
  /**
7087
7133
  * Map a (possibly fractional / extrapolated) category index to an X pixel.
7088
7134
  * `mode === 'bar'` centres on category slots; `'line'` anchors at points.
@@ -8719,9 +8765,15 @@ function dashArray(style, width) {
8719
8765
  }
8720
8766
  return `${unit * 3} ${unit * 2}`;
8721
8767
  }
8722
- function chartAxisTextStyle(axis, defaultFontSize = 8) {
8768
+ /**
8769
+ * SvgText style for axis-driven chart text (tick labels, category labels,
8770
+ * captions). `axis.fontSize` is parsed in POINTS by core; it crosses the
8771
+ * pt -> px boundary exactly here (see chart-font.ts). `defaultFontSizePx` is
8772
+ * already px and defaults to PowerPoint's 10 pt chart text (13.33 px).
8773
+ */
8774
+ function chartAxisTextStyle(axis, defaultFontSizePx = DEFAULT_CHART_TEXT_PX) {
8723
8775
  return {
8724
- fontSize: axis?.fontSize ?? defaultFontSize,
8776
+ fontSize: axis?.fontSize !== undefined ? chartFontPx(axis.fontSize) : defaultFontSizePx,
8725
8777
  fill: axis?.fontColor ?? DEFAULT_COLOR$2,
8726
8778
  ...(axis?.fontBold !== undefined ? { fontWeight: axis.fontBold ? 'bold' : 'normal' } : {}),
8727
8779
  ...(axis?.fontFamily ? { fontFamily: axis.fontFamily } : {}),
@@ -8867,7 +8919,7 @@ function buildPrimaryAxis(range, layout, axis, axisX = layout.plotLeft) {
8867
8919
  x: labelX,
8868
8920
  y: midY,
8869
8921
  text: unitLabel,
8870
- ...chartAxisTextStyle(axis, 9),
8922
+ ...chartAxisTextStyle(axis),
8871
8923
  textAnchor: 'middle',
8872
8924
  transform: `rotate(-90, ${labelX}, ${midY})`,
8873
8925
  });
@@ -8884,7 +8936,7 @@ function buildSecondaryAxis(range, layout, axis, axisX = layout.plotRight) {
8884
8936
  const gridlines = [];
8885
8937
  const axisLabels = [];
8886
8938
  const textStyle = chartAxisTextStyle(axis);
8887
- const captionStyle = chartAxisTextStyle(axis, 9);
8939
+ const captionStyle = chartAxisTextStyle(axis);
8888
8940
  const axisLine = buildVerticalAxisLine(axis, axisX, layout);
8889
8941
  if (axisLine) {
8890
8942
  gridlines.push(axisLine);
@@ -9096,7 +9148,7 @@ function buildBars(chartData, catCount, layout, primaryRange, secondaryRange, se
9096
9148
  x: x + singleBarWidth / 2,
9097
9149
  y: val >= 0 ? y - 4 : y + h + 10,
9098
9150
  text: formatAxisValue(val, series[si].numberFormat),
9099
- fontSize: 7,
9151
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
9100
9152
  fill: '#334155',
9101
9153
  textAnchor: 'middle',
9102
9154
  });
@@ -9174,7 +9226,7 @@ function buildBars(chartData, catCount, layout, primaryRange, secondaryRange, se
9174
9226
  x: x + barW / 2,
9175
9227
  y: y + h / 2 + 3,
9176
9228
  text: `${Math.round(val)}%`,
9177
- fontSize: 7,
9229
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
9178
9230
  fill: '#ffffff',
9179
9231
  textAnchor: 'middle',
9180
9232
  fontWeight: 'bold',
@@ -9218,7 +9270,7 @@ function pushClusteredStackedLabels(series, sourceIndices, catCount, layout, ran
9218
9270
  x,
9219
9271
  y: labelY,
9220
9272
  text: formatAxisValue(val, series[si].numberFormat),
9221
- fontSize: 7,
9273
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
9222
9274
  fill: '#334155',
9223
9275
  textAnchor: 'middle',
9224
9276
  });
@@ -9574,7 +9626,7 @@ function buildLines(chartData, catCount, layout, primaryRange, secondaryRange, s
9574
9626
  x: pt.x,
9575
9627
  y: pt.y - 7,
9576
9628
  text: formatAxisValue(val, series.numberFormat),
9577
- fontSize: 7,
9629
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
9578
9630
  fill: '#334155',
9579
9631
  textAnchor: 'middle',
9580
9632
  });
@@ -9638,7 +9690,7 @@ function buildAreas(chartData, catCount, layout, range, sourceIndices, xPosition
9638
9690
  x: pt.x,
9639
9691
  y: pt.y - 6,
9640
9692
  text: formatAxisValue(val, series.numberFormat),
9641
- fontSize: 7,
9693
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
9642
9694
  fill: '#334155',
9643
9695
  textAnchor: 'middle',
9644
9696
  });
@@ -9674,7 +9726,7 @@ function buildScatter(chartData, layout, range) {
9674
9726
  x: dot.cx,
9675
9727
  y: dot.cy - 6,
9676
9728
  text: formatAxisValue(val, series.numberFormat),
9677
- fontSize: 7,
9729
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
9678
9730
  fill: '#334155',
9679
9731
  textAnchor: 'middle',
9680
9732
  });
@@ -9722,7 +9774,7 @@ function buildBubbles(chartData, layout, range) {
9722
9774
  x: dot.cx,
9723
9775
  y: dot.cy - 10,
9724
9776
  text: formatAxisValue(val, series.numberFormat),
9725
- fontSize: 7,
9777
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
9726
9778
  fill: '#334155',
9727
9779
  textAnchor: 'middle',
9728
9780
  });
@@ -9918,7 +9970,9 @@ function buildMultiLevelCategoryLabels(categoryLabels, categoryLevels, sourceInd
9918
9970
  const skip = Math.max(1, axis?.tickLabelSkip ?? 1);
9919
9971
  const textAnchor = axis?.labelAlignment === 'l' ? 'start' : axis?.labelAlignment === 'r' ? 'end' : 'middle';
9920
9972
  const direction = labelsAbove ? -1 : 1;
9921
- const bandHeight = Math.max(axis?.fontSize ?? 8, 8) + 4;
9973
+ // Band height tracks the rendered px size (axis.fontSize is parsed in points).
9974
+ const fontPx = axis?.fontSize !== undefined ? chartFontPx(axis.fontSize) : DEFAULT_CHART_TEXT_PX;
9975
+ const bandHeight = Math.max(fontPx, 8) + 4;
9922
9976
  return levels.flatMap((level, levelIndex) => {
9923
9977
  const values = sourceIndices.map((sourceIndex) => level[sourceIndex] ?? '');
9924
9978
  return groupedLabels(values).flatMap((group) => {
@@ -10707,7 +10761,7 @@ function computeTrendlinePrimitives(chartData, catCount, layout, range, mode = '
10707
10761
  x: last.x,
10708
10762
  y: last.y - 6,
10709
10763
  text: labelParts.join(' '),
10710
- fontSize: 7,
10764
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
10711
10765
  fill: strokeColor,
10712
10766
  textAnchor: 'end',
10713
10767
  };
@@ -10746,6 +10800,10 @@ function computeAxisTitlePrimitives(chartData, layout) {
10746
10800
  if (!axes || axes.length === 0) {
10747
10801
  return out;
10748
10802
  }
10803
+ // Axis-title font: core folds a parsed/edited title size into `axis.fontSize`
10804
+ // (points); convert at the pt -> px boundary, defaulting to PowerPoint's
10805
+ // 10 pt chart text. See chart-font.ts.
10806
+ const titleFontPx = (axis) => axis.fontSize !== undefined ? chartFontPx(axis.fontSize) : DEFAULT_CHART_TEXT_PX;
10749
10807
  // X axis title (category axis at bottom).
10750
10808
  const catAxis = axes.find((a) => a.axisType === 'catAx' && a.axPos !== 'r' && a.titleText);
10751
10809
  if (catAxis?.titleText) {
@@ -10754,7 +10812,7 @@ function computeAxisTitlePrimitives(chartData, layout) {
10754
10812
  x: layout.plotLeft + layout.plotWidth / 2,
10755
10813
  y: layout.plotBottom + 22,
10756
10814
  text: catAxis.titleText,
10757
- fontSize: 9,
10815
+ fontSize: titleFontPx(catAxis),
10758
10816
  fill: AXIS_TITLE_COLOR,
10759
10817
  textAnchor: 'middle',
10760
10818
  fontWeight: 'bold',
@@ -10773,7 +10831,7 @@ function computeAxisTitlePrimitives(chartData, layout) {
10773
10831
  x: yx,
10774
10832
  y: yy,
10775
10833
  text: valAxis.titleText,
10776
- fontSize: 9,
10834
+ fontSize: titleFontPx(valAxis),
10777
10835
  fill: AXIS_TITLE_COLOR,
10778
10836
  textAnchor: 'middle',
10779
10837
  fontWeight: 'bold',
@@ -10800,6 +10858,8 @@ function formatDataValue(val) {
10800
10858
  /**
10801
10859
  * Layout constants for the SVG data table rendered below the plot area.
10802
10860
  * Kept as named constants so tests can assert against them without magic numbers.
10861
+ * Cell text stays at 8 px deliberately: it is sized to fit this 14 px row
10862
+ * grid (a geometry fit, not a PowerPoint text-class default; see chart-font.ts).
10803
10863
  */
10804
10864
  const DATA_TABLE_ROW_H = 14;
10805
10865
  const DATA_TABLE_HEADER_H = 14;
@@ -11225,7 +11285,7 @@ function buildComboViewModel(element, chartData, categoryLabels) {
11225
11285
  x: point.x,
11226
11286
  y: point.y - 7,
11227
11287
  text: formatAxisValue(point.value, series.numberFormat),
11228
- fontSize: 7,
11288
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
11229
11289
  fill: '#334155',
11230
11290
  textAnchor: 'middle',
11231
11291
  });
@@ -11277,7 +11337,7 @@ function appendBarLabels(series, chartData, layout, catCount, range, sourceIndic
11277
11337
  layout.plotLeft + groupWidth * displayIndex + offset + barWidth / 2,
11278
11338
  y: value >= 0 ? Math.min(zeroY, valueY) - 4 : Math.max(zeroY, valueY) + 10,
11279
11339
  text: formatAxisValue(value, series.numberFormat),
11280
- fontSize: 7,
11340
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
11281
11341
  fill: '#334155',
11282
11342
  textAnchor: 'middle',
11283
11343
  });
@@ -11412,7 +11472,7 @@ function buildStockViewModel(element, chartData, categoryLabels) {
11412
11472
  x: cx,
11413
11473
  y: highY - 4,
11414
11474
  text: formatAxisValue(close),
11415
- fontSize: 7,
11475
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
11416
11476
  fill: '#334155',
11417
11477
  textAnchor: 'middle',
11418
11478
  });
@@ -11851,7 +11911,7 @@ function buildHistogramViewModel(element, chartData, categoryLabels) {
11851
11911
  x: bar.x + bar.w / 2,
11852
11912
  y: bar.y - 4,
11853
11913
  text: formatAxisValue(values[index]),
11854
- fontSize: 7,
11914
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
11855
11915
  fill: DATA_LABEL_COLOR,
11856
11916
  textAnchor: 'middle',
11857
11917
  }))
@@ -12212,8 +12272,10 @@ function sliceAngles(values) {
12212
12272
  }
12213
12273
  /** Compute the primary + secondary plot placement for a chart element. */
12214
12274
  function computeOfPieGeom(element, secondPieSize) {
12215
- const svgWidth = Math.max(element.width, 320);
12216
- const svgHeight = Math.max(element.height, 180);
12275
+ // Match the element frame exactly; bindings stretch the viewBox with
12276
+ // preserveAspectRatio "none", so a minimum would scale non-uniformly.
12277
+ const svgWidth = Math.max(element.width, 1);
12278
+ const svgHeight = Math.max(element.height, 1);
12217
12279
  const primaryR = Math.max(Math.min(svgWidth * 0.28, svgHeight * 0.4), 4);
12218
12280
  const secScale = Math.min(Math.max(secondPieSize / 100, 0.3), 1.4);
12219
12281
  return {
@@ -12228,6 +12290,16 @@ function computeOfPieGeom(element, secondPieSize) {
12228
12290
  };
12229
12291
  }
12230
12292
 
12293
+ /**
12294
+ * chart-ofpie-secondary.ts: secondary-plot + connector builders for the
12295
+ * pie-of-pie / bar-of-pie chart (`c:ofPieChart`).
12296
+ *
12297
+ * Split out of `chart-ofpie.ts` to keep each module within the repo's ~300-LOC
12298
+ * limit. Builds the expanded secondary plot (a smaller pie or a vertical stacked
12299
+ * bar) and the `c:serLines` connectors joining the primary "Other" slice to it.
12300
+ *
12301
+ * @module chart-ofpie-secondary
12302
+ */
12231
12303
  /** A bold centred value label for a slice / bar segment. */
12232
12304
  function sliceLabel(x, y, value) {
12233
12305
  return {
@@ -12235,7 +12307,7 @@ function sliceLabel(x, y, value) {
12235
12307
  x,
12236
12308
  y,
12237
12309
  text: formatAxisValue(value),
12238
- fontSize: 8,
12310
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
12239
12311
  fill: '#ffffff',
12240
12312
  textAnchor: 'middle',
12241
12313
  fontWeight: 'bold',
@@ -12421,7 +12493,7 @@ function buildPieDataLabels(params) {
12421
12493
  x: slice.labelX,
12422
12494
  y: slice.labelY,
12423
12495
  text: formatAxisValue(val, numberFormat),
12424
- fontSize: 8,
12496
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
12425
12497
  fill: '#ffffff',
12426
12498
  textAnchor: 'middle',
12427
12499
  fontWeight: 'bold',
@@ -12441,7 +12513,7 @@ function buildPieDataLabels(params) {
12441
12513
  x: labelX + (cos >= 0 ? 2 : -2),
12442
12514
  y: labelY,
12443
12515
  text: formatAxisValue(val, numberFormat),
12444
- fontSize: 8,
12516
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
12445
12517
  fill: '#334155',
12446
12518
  textAnchor: anchor,
12447
12519
  dominantBaseline: 'central',
@@ -12910,7 +12982,10 @@ function textPrimitives(shape, box) {
12910
12982
  if (!shape.paragraphs || shape.paragraphs.length === 0) {
12911
12983
  return [];
12912
12984
  }
12913
- const lineH = 12;
12985
+ // para.fontSize is parsed in POINTS (core's chart-user-shapes-parser); it
12986
+ // crosses the pt -> px boundary here (see chart-font.ts).
12987
+ const fontPxOf = (para) => para.fontSize !== undefined ? chartFontPx(para.fontSize) : DEFAULT_CHART_TEXT_PX;
12988
+ const lineH = Math.max(12, ...shape.paragraphs.map((para) => fontPxOf(para) * 1.2));
12914
12989
  const totalH = shape.paragraphs.length * lineH;
12915
12990
  let cursorY = box.y + Math.max((box.h - totalH) / 2, 0) + lineH * 0.75;
12916
12991
  const out = [];
@@ -12927,7 +13002,7 @@ function textPrimitives(shape, box) {
12927
13002
  x: tx,
12928
13003
  y: cursorY,
12929
13004
  text: para.text,
12930
- fontSize: para.fontSize ?? 9,
13005
+ fontSize: fontPxOf(para),
12931
13006
  fill: para.color ?? '#1e293b',
12932
13007
  textAnchor: anchor,
12933
13008
  fontWeight: para.bold ? 'bold' : 'normal',
@@ -13180,7 +13255,7 @@ function buildWaterfallViewModel(element, chartData, categoryLabels) {
13180
13255
  x: x + barWidth / 2,
13181
13256
  y: y - 4,
13182
13257
  text: formatAxisValue(value),
13183
- fontSize: 7,
13258
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
13184
13259
  fill: '#334155',
13185
13260
  textAnchor: 'middle',
13186
13261
  });
@@ -13528,8 +13603,10 @@ function regionViewBounds(viewedRegionType, regionValues) {
13528
13603
  * Mirrors `renderMapChart` in React's `chart-map.tsx`.
13529
13604
  */
13530
13605
  function buildRegionMapViewModel(element, chartData, categoryLabels) {
13531
- const svgWidth = Math.max(element.width, 320);
13532
- const svgHeight = Math.max(element.height, 200);
13606
+ // Match the element frame exactly; bindings stretch the viewBox with
13607
+ // preserveAspectRatio "none", so a minimum would scale non-uniformly.
13608
+ const svgWidth = Math.max(element.width, 1);
13609
+ const svgHeight = Math.max(element.height, 1);
13533
13610
  const categories = categoryLabels.length > 0 ? categoryLabels : chartData.categories;
13534
13611
  const series = chartData.series[0];
13535
13612
  const options = series?.regionMapOptions;
@@ -13999,8 +14076,12 @@ function formatAxisValue(val, formatCode) {
13999
14076
  * only apply when explicitly requested.
14000
14077
  */
14001
14078
  function computePlotLayout(elementWidth, elementHeight, chartData, hasAxes, options) {
14002
- const svgWidth = Math.max(320, elementWidth);
14003
- const svgHeight = Math.max(180, elementHeight);
14079
+ // The SVG viewBox must equal the element's frame box exactly: bindings render
14080
+ // it with `preserveAspectRatio="none"`, so ANY minimum here (historically
14081
+ // 320x180) makes the chart scale non-uniformly inside its host (issue #132:
14082
+ // a 475x174 frame got a 475x180 viewBox, squeezing y by 0.967).
14083
+ const svgWidth = Math.max(1, elementWidth);
14084
+ const svgHeight = Math.max(1, elementHeight);
14004
14085
  let plotLeft = hasAxes ? 48 : 8;
14005
14086
  let plotTop = 8;
14006
14087
  let plotRight = svgWidth - 8;
@@ -14091,7 +14172,7 @@ function buildGridlinesAndLabels(range, layout) {
14091
14172
  x: layout.plotLeft - 4,
14092
14173
  y,
14093
14174
  text: formatAxisValue(val),
14094
- fontSize: 8,
14175
+ fontSize: DEFAULT_CHART_TEXT_PX,
14095
14176
  fill: AXIS_LABEL_COLOR,
14096
14177
  textAnchor: 'end',
14097
14178
  dominantBaseline: 'central',
@@ -14127,7 +14208,7 @@ function buildCategoryLabels(categoryLabels, layout, catSpacing) {
14127
14208
  x,
14128
14209
  y: layout.plotBottom + 12,
14129
14210
  text: label,
14130
- fontSize: 8,
14211
+ fontSize: DEFAULT_CHART_TEXT_PX,
14131
14212
  fill: AXIS_LABEL_COLOR,
14132
14213
  textAnchor: 'middle',
14133
14214
  };
@@ -14506,8 +14587,10 @@ function buildFlatViewModel(element, chartData, categoryLabels, kind) {
14506
14587
  return buildCartesianViewModel(element, chartData, categoryLabels, kind);
14507
14588
  }
14508
14589
  function buildFallbackViewModel(width, height, label) {
14509
- const svgWidth = Math.max(width, 100);
14510
- const svgHeight = Math.max(height, 60);
14590
+ // Match the frame box exactly (bindings stretch with preserveAspectRatio
14591
+ // "none"; a minimum here would scale the fallback non-uniformly).
14592
+ const svgWidth = Math.max(width, 1);
14593
+ const svgHeight = Math.max(height, 1);
14511
14594
  return {
14512
14595
  svgWidth,
14513
14596
  svgHeight,
@@ -14669,7 +14752,7 @@ function buildRadarViewModel(element, chartData, categoryLabels) {
14669
14752
  x: cx + labelR * Math.cos(angle),
14670
14753
  y: cy + labelR * Math.sin(angle),
14671
14754
  text: categoryLabels[i] ?? '',
14672
- fontSize: 8,
14755
+ fontSize: DEFAULT_CHART_TEXT_PX,
14673
14756
  fill: RADAR_LABEL_COLOR,
14674
14757
  textAnchor: 'middle',
14675
14758
  dominantBaseline: 'central',
@@ -14714,7 +14797,7 @@ function buildRadarViewModel(element, chartData, categoryLabels) {
14714
14797
  x: p.x,
14715
14798
  y: p.y - 8,
14716
14799
  text: formatAxisValue(val, series.numberFormat),
14717
- fontSize: 7,
14800
+ fontSize: DEFAULT_CHART_DATA_LABEL_PX,
14718
14801
  fill: '#334155',
14719
14802
  textAnchor: 'middle',
14720
14803
  });
@@ -34028,6 +34111,10 @@ const SCALAR_ELEMENT_KEYS = new Set([
34028
34111
  'cropTop',
34029
34112
  'cropRight',
34030
34113
  'cropBottom',
34114
+ 'fillRectLeft',
34115
+ 'fillRectTop',
34116
+ 'fillRectRight',
34117
+ 'fillRectBottom',
34031
34118
  'tileOffsetX',
34032
34119
  'tileOffsetY',
34033
34120
  'tileScaleX',
@@ -36372,9 +36459,16 @@ const CINEMATIC_TRANSITION_KEYFRAMES = `
36372
36459
  /* ── Airplane (fly off like a paper plane) ──────────────────────────── */
36373
36460
  @keyframes pptx-tr-airplane-out { 0% { transform: perspective(1200px) translate3d(0, 0, 0) rotate3d(1, -1, 0, 0deg) scale(1); opacity: 1; } 40% { transform: perspective(1200px) translate3d(10%, -10%, 0) rotate3d(1, -1, 0, 25deg) scale(.85); opacity: 1; } 100% { transform: perspective(1200px) translate3d(150%, -70%, 0) rotate3d(1, -1, 1, 70deg) scale(.05); opacity: 0; } }
36374
36461
 
36375
- /* ── Origami (fold out / unfold in) ─────────────────────────────────── */
36376
- @keyframes pptx-tr-origami-out { from { transform: perspective(1600px) rotateY(0deg) scaleX(1); transform-origin: left center; opacity: 1; } to { transform: perspective(1600px) rotateY(75deg) scaleX(.25); transform-origin: left center; opacity: .2; } }
36377
- @keyframes pptx-tr-origami-in { from { transform: perspective(1600px) rotateY(-75deg) scaleX(.25); transform-origin: right center; opacity: .2; } to { transform: perspective(1600px) rotateY(0deg) scaleX(1); transform-origin: right center; opacity: 1; } }
36462
+ /* ── Origami (fold the sheet over its top edge; the next unfolds up) ──
36463
+ The old single-phase rotateY + scaleX compressed the outgoing slide into a
36464
+ narrow vertical sliver for most of the (3+ second) duration, which read as
36465
+ "just a grey line" instead of paper folding (issue #132). The fold is now
36466
+ hinged like a real sheet: the outgoing slide creases over its TOP edge,
36467
+ dims as it tips through edge-on, and tumbles away shrinking; the incoming
36468
+ slide lies folded at its BOTTOM edge and rises into place. The edge-on
36469
+ moment is brief and already mid-fade, so no line artifact survives. */
36470
+ @keyframes pptx-tr-origami-out { 0% { transform: perspective(1400px) rotateX(0deg) translateY(0) scale(1); transform-origin: top center; opacity: 1; filter: brightness(1); } 45% { transform: perspective(1400px) rotateX(-52deg) translateY(2%) scale(.96); transform-origin: top center; opacity: 1; filter: brightness(.82); } 70% { transform: perspective(1400px) rotateX(-84deg) translateY(8%) scale(.88); transform-origin: top center; opacity: .8; filter: brightness(.68); } 100% { transform: perspective(1400px) rotateX(-125deg) translateY(30%) scale(.68); transform-origin: top center; opacity: 0; filter: brightness(.55); } }
36471
+ @keyframes pptx-tr-origami-in { 0% { transform: perspective(1400px) rotateX(62deg) scale(.94); transform-origin: bottom center; opacity: 0; filter: brightness(.7); } 30% { transform: perspective(1400px) rotateX(62deg) scale(.94); transform-origin: bottom center; opacity: .65; filter: brightness(.75); } 100% { transform: perspective(1400px) rotateX(0deg) scale(1); transform-origin: bottom center; opacity: 1; filter: brightness(1); } }
36378
36472
  `;
36379
36473
 
36380
36474
  /**
@@ -49063,33 +49157,45 @@ function resumeAllPersistentAudio() {
49063
49157
  }
49064
49158
 
49065
49159
  /**
49066
- * Presentation visibility pause: while a slide show is running, hiding the
49067
- * tab (switching tabs, minimising the window) must pause what the audience
49068
- * can no longer see or follow, exactly like pressing pause:
49160
+ * Presentation visibility pause: while a slide show is running, backgrounding
49161
+ * the browser must pause what the audience can no longer see or follow,
49162
+ * exactly like pressing pause:
49069
49163
  *
49070
49164
  * - slide-stage `<audio>` / `<video>` elements that are currently playing,
49071
49165
  * - cross-slide persistent audio ({@link pauseAllPersistentAudio}),
49072
49166
  * - the auto-advance timer (via the binding's arm/cancel callbacks).
49073
49167
  *
49074
- * Everything resumes when the document becomes visible again. Each binding
49075
- * attaches this once when presentation mode starts and calls the returned
49076
- * detach function when it ends.
49168
+ * "Backgrounded" covers BOTH signals: the tab being hidden (switching tabs,
49169
+ * minimising) via `visibilitychange`, and the window merely losing focus
49170
+ * (clicking another application while the browser stays on screen) via
49171
+ * `window` blur/focus. The issue #132 reporter alt-tabbed away with the
49172
+ * browser still visible and the soundtrack kept playing; visibility alone
49173
+ * never fires for that. Everything resumes when the document is visible AND
49174
+ * focused again. Each binding attaches this once when presentation mode
49175
+ * starts and calls the returned detach function when it ends.
49077
49176
  */
49078
49177
  /**
49079
- * Attach the `visibilitychange` handler for a running presentation.
49178
+ * Attach the backgrounding handlers for a running presentation.
49080
49179
  *
49081
- * @returns Detach function; also resumes nothing (a hidden-paused show that
49082
- * exits presentation mode tears its media down anyway).
49180
+ * @returns Detach function; it resumes nothing (a suspended show that exits
49181
+ * presentation mode tears its media down anyway).
49083
49182
  */
49084
49183
  function attachPresentationVisibilityPause(options = {}) {
49085
49184
  if (typeof document === 'undefined') {
49086
49185
  return () => { };
49087
49186
  }
49088
49187
  const root = options.root ?? document;
49089
- /** Stage media paused by the last hide, to resume on the next show. */
49188
+ /** Stage media paused by the last suspension, to resume on the next. */
49090
49189
  let pausedMedia = [];
49091
- const onVisibilityChange = () => {
49092
- if (document.visibilityState === 'hidden') {
49190
+ /** Whether the show is currently suspended (transition-edge tracking). */
49191
+ let suspended = false;
49192
+ const update = () => {
49193
+ const shouldSuspend = document.visibilityState === 'hidden' || !document.hasFocus();
49194
+ if (shouldSuspend === suspended) {
49195
+ return;
49196
+ }
49197
+ suspended = shouldSuspend;
49198
+ if (shouldSuspend) {
49093
49199
  pausedMedia = [];
49094
49200
  for (const media of root.querySelectorAll('audio, video')) {
49095
49201
  if (!media.paused && !media.ended) {
@@ -49112,9 +49218,13 @@ function attachPresentationVisibilityPause(options = {}) {
49112
49218
  resumeAllPersistentAudio();
49113
49219
  options.onVisible?.();
49114
49220
  };
49115
- document.addEventListener('visibilitychange', onVisibilityChange);
49221
+ document.addEventListener('visibilitychange', update);
49222
+ window.addEventListener('blur', update);
49223
+ window.addEventListener('focus', update);
49116
49224
  return () => {
49117
- document.removeEventListener('visibilitychange', onVisibilityChange);
49225
+ document.removeEventListener('visibilitychange', update);
49226
+ window.removeEventListener('blur', update);
49227
+ window.removeEventListener('focus', update);
49118
49228
  };
49119
49229
  }
49120
49230
 
@@ -61117,7 +61227,7 @@ function createLocalStorageBackend(namespace) {
61117
61227
  /** Try IndexedDB first; fall back to localStorage on any failure. */
61118
61228
  async function resolveBackend(dbName, namespace) {
61119
61229
  try {
61120
- const { openChatDb, createIdbBackend } = await import('./pptx-angular-viewer-chat-history-idb-DKKITk3s.mjs');
61230
+ const { openChatDb, createIdbBackend } = await import('./pptx-angular-viewer-chat-history-idb-D5YdTW3K.mjs');
61121
61231
  const db = await openChatDb(dbName);
61122
61232
  return createIdbBackend(db);
61123
61233
  }
@@ -92125,7 +92235,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
92125
92235
  }], propDecorators: { canEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "canEdit", required: false }] }], slideIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideIndex", required: false }] }] } });
92126
92236
 
92127
92237
  // Generated by scripts/inline-shared.mjs from package.json. Do not edit.
92128
- const PPTX_ANGULAR_VIEWER_VERSION = "2.13.0";
92238
+ const PPTX_ANGULAR_VIEWER_VERSION = "2.13.1";
92129
92239
 
92130
92240
  /**
92131
92241
  * account-page.component.ts: File > Account content.
@@ -123209,4 +123319,4 @@ function cn(...values) {
123209
123319
  */
123210
123320
 
123211
123321
  export { CustomShowsComponent as $, ALIGN_OPTIONS as A, BroadcastDialogComponent as B, CHART_EDITOR_STYLES as C, CanvasFitService as D, ChartAxisOptionsComponent as E, ChartAxisStyleOptionsComponent as F, ChartComboTypeOptionsComponent as G, ChartDataEditorComponent as H, ChartDataLabelOptionsComponent as I, ChartDatapointMarkerOptionsComponent as J, ChartDatapointOptionsComponent as K, ChartDisplayOptionsComponent as L, ChartElementViewComponent as M, ChartErrorBarOptionsComponent as N, ChartMarkerOptionsComponent as O, ChartPartSelectionService as P, ChartPrimitivesComponent as Q, ChartRendererComponent as R, ChartTrendlineOptionsComponent as S, CollaborationCursorsComponent as T, CollaborationService as U, ColorChangedImageComponent as V, CommentsPanelComponent as W, CommentsService as X, ComparePanelComponent as Y, ConnectorRendererComponent as Z, ConnectorTextOverlayComponent as _, ANIMATION_PRESET_CATEGORIES as a, LoadContentService as a$, DATA_TABLE_HEADER_H as a0, DATA_TABLE_KEY_W as a1, DATA_TABLE_PADDING as a2, DATA_TABLE_ROW_H as a3, DEFAULT_BOUNDS as a4, DEFAULT_BROADCAST_SERVER_URL as a5, DEFAULT_CANVAS_HEIGHT as a6, DEFAULT_CANVAS_WIDTH as a7, DEFAULT_COLOR_SCHEME as a8, DEFAULT_FILL_COLOR as a9, EquationEditorDialogComponent as aA, EquationRendererComponent as aB, EquationTemplateGalleryComponent as aC, ExportProgressModalComponent as aD, ExportService as aE, FieldContextService as aF, FindBarComponent as aG, FindReplaceBarComponent as aH, FollowModeBarComponent as aI, FontEmbeddingListComponent as aJ, FontEmbeddingPanelComponent as aK, GALLERY_THEME_PRESETS as aL, GradientPickerComponent as aM, HANDOUT_OPTIONS as aN, HeaderFooterDialogComponent as aO, HyperlinkDialogComponent as aP, ImagePropertiesPanelComponent as aQ, InkDrawingService as aR, InkRendererComponent as aS, InsertSmartArtDialogComponent as aT, InspectorPaneHeaderComponent as aU, InspectorPanelComponent as aV, IsMobileService as aW, KeepAnnotationsDialogComponent as aX, LOCALE_CATALOG as aY, LONG_PRESS_DURATION_MS as aZ, LONG_PRESS_MOVE_TOLERANCE_PX as a_, DEFAULT_LAYOUT as aa, DEFAULT_PALETTE$1 as ab, DEFAULT_PATTERN_FILL_PRESET as ac, DEFAULT_PRINT_SETTINGS as ad, DEFAULT_SLIDE_BACKGROUND as ae, DEFAULT_STROKE_COLOR as af, DEFAULT_STYLE as ag, DEFAULT_TABLE_ROW_HEIGHT as ah, DEFAULT_TEXT_COLOR$1 as ai, DEFAULT_VIEWER_PROFILE as aj, DIRECTIONAL_PRESETS as ak, DIRECTION_OPTIONS as al, DocumentPropertiesCardComponent as am, EMBEDDED_FONTS_STYLE_ID as an, EMPHASIS_PRESETS as ao, ENTRANCE_PRESETS as ap, TEMPLATES as aq, EXIT_PRESETS as ar, EditorContextMenuComponent as as, EditorHistory as at, EditorStateService as au, EditorToolbarComponent as av, EffectsPanelComponent as aw, ElementRendererComponent as ax, EmbeddedFontsService as ay, EncryptedFileDialogComponent as az, AUDIENCE_HASH as b, RibbonHyperlinkButtonComponent as b$, LocalPresencePublisher as b0, MAX_ZOOM_SCALE as b1, MIN_ZOOM_SCALE as b2, MOTION_PATH_COLUMNS as b3, MediaPreviewComponent as b4, MediaPropertiesPanelComponent as b5, MediaRendererComponent as b6, MediaTrimTimelineComponent as b7, MobileBottomBarComponent as b8, MobileMenuSheetComponent as b9, PresentationSubtitleBarComponent as bA, PresentationToolbarComponent as bB, PresentationTransitionOverlayComponent as bC, PresenterViewComponent as bD, PresenterWindowService as bE, PrintDialogComponent as bF, PrintService as bG, PrintSettingsPanelComponent as bH, PropertiesDialogComponent as bI, REPEAT_MODE_OPTIONS as bJ, RESIZE_HANDLES as bK, RULER_FONT_SIZE as bL, RULER_THICKNESS as bM, ReadingViewOverlayComponent as bN, RemoteSelectionOverlayComponent as bO, RibbonAnimationGalleryComponent as bP, RibbonAnimationsSectionComponent as bQ, RibbonArrangeSectionComponent as bR, RibbonColorPopoverComponent as bS, RibbonComponent as bT, RibbonDesignSectionComponent as bU, RibbonDrawSectionComponent as bV, RibbonDrawingGroupComponent as bW, RibbonEditingSectionComponent as bX, RibbonFileSectionComponent as bY, RibbonFontControlsComponent as bZ, RibbonHomeSectionComponent as b_, MobilePresenterViewComponent as ba, MobileSheetComponent as bb, MobileSlidesSheetComponent as bc, MobileToolbarComponent as bd, ModalDialogComponent as be, Model3DRendererComponent as bf, NotesHandoutCardComponent as bg, NotesPanelComponent as bh, NotesToolbarComponent as bi, OleRendererComponent as bj, OutlineViewOverlayComponent as bk, POWER_POINT_VIEWER_PROVIDERS as bl, PRESENTER_CHANNEL_NAME as bm, PRESENTER_MSG_ORIGIN as bn, PRESENTER_TIMER_SEGMENT_MS as bo, PX_PER_CM as bp, PX_PER_INCH as bq, PasswordProtectionDialogComponent as br, PasswordStrengthMeterComponent as bs, PowerPointViewerComponent as bt, PresentToolbarAutoHide as bu, PresentationAnnotationOverlayComponent as bv, PresentationAnnotationsService as bw, PresentationOverlayComponent as bx, PresentationPropertiesPanelComponent as by, PresentationSettingsCardComponent as bz, AUDIENCE_NONCE_KEY as c, TableDataEditorComponent as c$, RibbonInsertFieldsComponent as c0, RibbonInsertSectionComponent as c1, RibbonMotionPathGalleryComponent as c2, RibbonParagraphControlsComponent as c3, RibbonPrimaryRowComponent as c4, RibbonReviewSectionComponent as c5, RibbonShapeExtrasComponent as c6, RibbonSlideshowSectionComponent as c7, RibbonTransitionsSectionComponent as c8, RibbonViewSectionComponent as c9, SlideBackgroundCardComponent as cA, SlideCanvasComponent as cB, SlideDefaultInspectorComponent as cC, SlideDiffChangesComponent as cD, SlideDiffRowComponent as cE, SlideDiffThumbnailsComponent as cF, SlideSizeCardComponent as cG, SlideSorterOverlayComponent as cH, SlideThemeOverridePanelComponent as cI, SlideTransitionCardComponent as cJ, SlidesPanelComponent as cK, SmartArt3DRendererComponent as cL, SmartArt3DService as cM, SmartArtPreviewComponent as cN, SmartArtPropertiesComponent as cO, SmartArtRendererComponent as cP, StatusBarComponent as cQ, TABLE_STRUCTURE_TOGGLES as cR, TEXT_3D_BOTTOM_BEVEL_KEYS as cS, TEXT_3D_TOP_BEVEL_KEYS as cT, TEXT_DIRECTION_OPTIONS$1 as cU, THEME_CATALOG as cV, TIMING_CURVE_OPTIONS as cW, TRIGGER_OPTIONS as cX, TYPE_LABELS as cY, TableCellAdvancedFillComponent as cZ, TableCellFormattingComponent as c_, RulerGuidesService as ca, SEQUENCE_OPTIONS as cb, SEVERITY_GROUPS as cc, SEVERITY_LABELS as cd, SHORTCUT_REFERENCE_ITEMS as ce, SLIDE_TRANSITION_KEYFRAMES as cf, DEFAULT_PALETTE as cg, PALETTES$1 as ch, SMART_ART_COLOR_SCHEMES as ci, SMART_ART_STYLE_OPTIONS as cj, SUB_ITEM_LABEL as ck, SVG_WARP_PRESETS as cl, SWIPE_MAX_VERTICAL_PX as cm, SWIPE_THRESHOLD_PX as cn, SelectionPaneComponent as co, SetUpSlideShowDialogComponent as cp, SettingsAppearanceTabComponent as cq, SettingsDialogComponent as cr, SettingsLanguageTabComponent as cs, ShareDialogComponent as ct, ShortcutPanelComponent as cu, ShowOptionsFieldsetComponent as cv, ShowSlidesFieldsetComponent as cw, SignatureStrippedDialogComponent as cx, SignaturesPanelComponent as cy, SignaturesService as cz, AVATAR_COLOR_SWATCHES as d, asMediaElement as d$, TablePropertiesComponent as d0, TableRendererComponent as d1, TableResizeOverlayComponent as d2, TableSelectionService as d3, TagsCardComponent as d4, Text3DBevelSectionComponent as d5, Text3DPanelComponent as d6, TextAdvancedPanelComponent as d7, ThemeEditorFieldsComponent as d8, ThemeGalleryComponent as d9, ViewerTouchGesturesService as dA, ViewerZoomService as dB, WEBM_MIME_CANDIDATES as dC, WriteBackScheduler as dD, ZoomNavigationService as dE, ZoomRendererComponent as dF, ZoomTargetService as dG, addCategory as dH, addCommentToList as dI, addGradientStopPatch as dJ, addItem as dK, addSeries as dL, addSubItem as dM, advanceStep as dN, affordanceElements as dO, aiToggleVisible as dP, alignPatch as dQ, animationFor as dR, animationPresetLabelKey as dS, annotationMapToInkInserts as dT, applyAcceptedDiff as dU, applyAnimationPreset as dV, applyFindReplacements as dW, applyFormatToElement as dX, applyMove as dY, applyResize as dZ, applyTableStylePreset as d_, ThemeSelectorCardComponent as da, TitleBarComponent as db, TitleBarSearchComponent as dc, TransitionDirectionPickerComponent as dd, TransitionPreviewComponent as de, VALIGN_OPTIONS as df, VIEWER_THEME as dg, VersionHistoryPanelComponent as dh, ViewerCanvasEditingService as di, ViewerCollabCursorService as dj, ViewerCollaborationSessionService as dk, ViewerCompareService as dl, ViewerCustomShowsService as dm, ViewerDialogsService as dn, ViewerDocumentPropertiesService as dp, ViewerExportService as dq, ViewerExtraDialogsComponent as dr, ViewerFileIOService as ds, ViewerFindReplaceService as dt, ViewerFormatPainterService as du, ViewerInspectorPanelService as dv, ViewerKeyboardService as dw, ViewerMobileSheetService as dx, ViewerPresentationModeService as dy, ViewerThemeGalleryService as dz, AccessibilityPanelComponent as e, canStartShare as e$, assignUserColor as e0, attachShowVisibilityPause as e1, attachTouchGestures as e2, beginNodeEdit as e3, bevelSizePatch as e4, boolFromEvent as e5, bringForward as e6, bringToFront as e7, buildBarActions as e8, buildBroadcastConfig as e9, buildModel3DContainerStyle as eA, buildModel3DViewModel as eB, buildOleActionModel as eC, buildOleInfoRows as eD, buildPatternFillCss as eE, buildPrintHtmlDocument as eF, buildPropertiesPatch as eG, buildRegionMapViewModel as eH, buildSaveSlides as eI, buildShareUrl as eJ, buildSmartArtInsertElement as eK, buildSmartArtNodes as eL, buildStockViewModel as eM, buildSurfaceViewModel as eN, buildTableViewModel as eO, buildTreemapViewModel as eP, buildTrimFragment as eQ, buildWaterfallViewModel as eR, buildZeroLine as eS, buildZoomContainerStyle as eT, buildZoomViewModel as eU, bulletIndentPx as eV, canAddTopLevelNode as eW, canGroupSelection as eX, canRemoveTopLevelNode as eY, canSetStrokeWidth as eZ, canStartBroadcast as e_, buildBroadcastViewerUrl as ea, buildCategoryLabels as eb, buildCellParagraphs as ec, buildChartViewModel as ed, buildChatLogExport as ee, buildChatLogMarkdown as ef, buildChromeStyle as eg, buildClearHyperlinkPatch as eh, buildClickGroups as ei, buildColStyles as ej, buildCollaborationConfig as ek, buildComboViewModel as el, buildCssGradientFromShapeStyle as em, buildDuotoneFilter as en, buildDuotoneFilterId as eo, buildEmbeddedFontStyles as ep, buildEquationElement as eq, buildEquationSegment as er, buildFallbackViewModel as es, buildFontFaceRule as et, buildGradientFillCss as eu, buildGridlinesAndLabels as ev, buildHyperlinkPatch as ew, buildInkContainerStyle as ex, buildInkStrokes as ey, buildLegend as ez, AccessibilityService as f, createAngularAiBridge as f$, canUngroupSelection as f0, canUseClipboard as f1, captionDisplayText as f2, cellRunStyle as f3, cellStyleToStyleMap as f4, cellTdStyle as f5, changeCountLabel as f6, changeIcon as f7, characterSpacingPatch as f8, checkFontAvailable as f9, computeHandleBoxes as fA, computeHandoutLayout as fB, computeIsMobile as fC, computeIsTablet as fD, computeLinePoints as fE, computeLinearRegression as fF, computePageCount as fG, computePieLayout as fH, computePieSlicePath as fI, computePieSlices as fJ, computePlotLayout as fK, computeRSquared as fL, computeRadarPoints as fM, computeScatterDots as fN, computeSelectionBoxes as fO, computeSingleSelected as fP, computeSlideIndices as fQ, computeSnap as fR, computeStackedBarRects as fS, computeStackedValueRange as fT, computeTextLines as fU, computeTrendlinePrimitives as fV, computeValueRange as fW, convertOmmlToMathMl as fX, copyFormatFromElement as fY, countAccessibilityIssues as fZ, countAnnotationStrokes as f_, clampCursorPosition as fa, clampGifDimensions as fb, clampIndex as fc, clampNotesFontSize as fd, clampScale as fe, clampStep as ff, clearAllLocalViewerData as fg, clearAudienceContent as fh, cn as fi, collectAccessibilityIssues as fj, collectElementText as fk, collectSlideText as fl, collectStoredChats as fm, collectUsedFontFamilies as fn, columnWidthStyle as fo, commitNodeText as fp, computeAlign as fq, computeAxisTitlePrimitives as fr, computeBarRects as fs, computeBubbleRadius as ft, computeCornerHandle as fu, computeDataTablePrimitives as fv, computeDistribute as fw, computeDrawingViewBox as fx, computeErrorBarPrimitives as fy, computeFocusTargets as fz, AccountPageComponent as g, getClrChangeParams as g$, createCustomShow as g0, createSwipeDismissDrag as g1, createWebrtcBundle as g2, createWebsocketBundle as g3, cssObjectToStyleMap as g4, currentColorScheme as g5, currentLayout as g6, currentStyle as g7, defaultCssVars as g8, defaultRadius as g9, exportAiChatLogs as gA, extractPathPoints as gB, eyedropperAvailable as gC, fillColorOf as gD, findInSlides as gE, findOwningSlideIndex as gF, findSlideIndexByElementId as gG, firstVisibleIndex as gH, fitPolynomial as gI, fitZoom as gJ, focusTargetChips as gK, fontMimeForFormat as gL, fontSizeOf as gM, formatAutoNumber as gN, formatAxisValue as gO, formatBytes as gP, formatCursorLabel as gQ, formatElapsed as gR, formatFileSize as gS, formatPropertyDate as gT, formatTime as gU, fpsToFrameIntervalMs as gV, generateBroadcastRoomId as gW, generateCommentId as gX, generateCustomShowId as gY, generatePressureCircles as gZ, generateTicks as g_, defaultThemeColors as ga, deleteElementsByIds as gb, deleteVersion as gc, demoteNode as gd, deriveModel3DBlobUrl as ge, derivePresenceList as gf, describeSmartArtBounds as gg, disableGlowPatch as gh, disableInnerShadowPatch as gi, disableOuterShadowPatch as gj, disableReflectionPatch as gk, disableSoftEdgePatch as gl, duplicateElementById as gm, durationOf as gn, effectsStateOf as go, enableGlowPatch as gp, enableInnerShadowPatch as gq, enableOuterShadowPatch as gr, enableReflectionPatch as gs, enableSoftEdgePatch as gt, encodeGif as gu, endShowMediaCleanup as gv, estimatePageCount as gw, evenColumnWidths as gx, evenRowHeights as gy, exitPresentationFullscreen as gz, ActionSettingsPanelComponent as h, issueTypeLabel as h$, getContainerStyle as h0, getDuotoneFilterDef as h1, getImageSrc as h2, getLocalStorageUsageSummary as h3, getOleAriaLabel as h4, getOleBadgeLabel as h5, getOleDisplayName as h6, getOleDownloadFileName as h7, getOleTypeColor as h8, getOleTypeLabel as h9, hasGradientFill as hA, hasPressureVariation as hB, hasVisibleSlideAfter as hC, headerLabel as hD, imageDimensions as hE, inkViewBox as hF, insertTableElementColumn as hG, insertTableElementRow as hH, interpolateWidth as hI, isAudienceTab as hJ, isBold as hK, isBrowserOpenableMime as hL, isChildNode as hM, isElementInteractive as hN, isInjectableUrl as hO, isItalic as hP, isPpactionUrl as hQ, isPresenterMessage as hR, isSigned as hS, isTextElement as hT, isTwoTableFocus as hU, isUnderline as hV, isUrlSafe as hW, isValidRoomId as hX, isViewportBackgroundPressTarget as hY, isZoomActivationKey as hZ, issueTrackKey as h_, getPasswordStrength as ha, getPatternSvg as hb, getPlaceholderStyle as hc, getVersions as hd, getResolvedShapeClipPath as he, getResolvedShapeClipPathFor as hf, getShapeFillStrokeStyle as hg, getSlideBackgroundStyle as hh, getSlideTransitionAnimations as hi, getSmartArtNodeBounds as hj, getSpeechRecognitionCtor as hk, getTextBlockStyle as hl, getTextWarp as hm, getTouchDistance as hn, getWarpCategory as ho, getWarpPath as hp, gradientStateFromStyle as hq, gradientStateOf as hr, gradientStatePatch as hs, gridColumns as ht, groupElements as hu, groupIssuesBySeverity as hv, hasAnimation as hw, hasCopyableFormat as hx, hasExistingLink as hy, hasExitedFullscreen as hz, AdvancedChartEditorComponent as i, prevVisibleIndex as i$, keyToLabel as i0, lastVisibleIndex as i1, latexToMathml as i2, linePointsToSvgString as i3, lineSpacingPatch as i4, loadAudienceContent as i5, mergeCaptionResults as i6, mergeDown as i7, mergeRight as i8, mergeSelection as i9, normalizeValue as iA, numFromEvent as iB, ommlToMathml as iC, ooxmlDashToCssBorderStyle as iD, openNativeEyeDropper as iE, overallStatus as iF, paletteColor as iG, parseAudienceNonce as iH, parseNodeTextarea as iI, partitionSlides as iJ, patchChartData as iK, patchChartStyle as iL, patchTableData as iM, patchTextStyle as iN, patternPresetOptions as iO, pendingElementStyles as iP, pickColorByClickFallback as iQ, pickFile as iR, pickSupportedMimeType as iS, planGifFrames as iT, planVideoSegments as iU, pointsToSvgPathD as iV, presenceToCursors as iW, presenterTimerProgress as iX, presetByLayout as iY, presetsForCategory as iZ, pressuresToWidths as i_, moveElementBy as ia, moveNodeDown as ib, moveNodeUp as ic, msToFrameDelayCs as id, narrowToCircle as ie, narrowToPolygon as ig, narrowToRect as ih, newChartElement as ii, newEquationElement as ij, newPresetShapeElement as ik, newShapeElement as il, newSmartArtElement as im, newTableElement as io, newTextElement as ip, nextVisibleIndex as iq, nodeBold as ir, nodeEditBox as is, nodeFillColor as it, nodeFontColor as iu, nodeIdFromKey as iv, nodeItalic as iw, nodeStyle as ix, normalizeFontFormat as iy, normalizeSlidesPerPage as iz, AiChangeOverlayComponent as j, seriesColor as j$, projectDrawingShapes as j0, promoteNode as j1, provideViewerTheme as j2, radarAngle as j3, radarRingPoints as j4, readAsDataUrl as j5, recordWebm as j6, redistributeColumnWidth as j7, registerCrossSlideAudio as j8, removeAnimation as j9, resolveSlideAutoAdvanceMs as jA, resolvePalette as jB, resolveThemeCatalogEntry as jC, resolveTransitionDuration as jD, revealedElementStyles as jE, routeOrthogonalConnector as jF, rowStyle as jG, rulerDragToGuidePosition as jH, rulerHighlight as jI, rulerStripTicks as jJ, sampleColorFromSlide as jK, sanitizeColor as jL, sanitizeSlideIndex as jM, sanitizeUserName as jN, saveViewerProfile as jO, scanAvailableFonts as jP, searchSlides as jQ, seedBroadcastFields as jR, seedHyperlinkDraft as jS, seedPropertiesDraft as jT, seedShareFields as jU, segmentFrameCount as jV, selectValue$2 as jW, sendBackward as jX, sendToBack as jY, sequentialColorScale as jZ, serializeWriteBack as j_, removeCategory as ja, removeTableElementColumn as jb, removeCommentFromList as jc, removeElementAnimation as jd, removeGradientStopPatch as je, removeNode as jf, removeTableElementRow as jg, removeSeries as jh, renderToCanvas as ji, reorderAnimationDown as jj, reorderAnimationUp as jk, replaceInSlides as jl, replaceMatch as jm, requestPresentationFullscreen as jn, resizeElement as jo, resolveCaptionTracks as jp, resolveChartKind as jq, resolveFontVariant as jr, resolveHyperlinkHref as js, resolveInteractiveElementId as jt, resolveMediaSrc as ju, resolveOleType as jv, resolveParagraphBullet as jw, resolvePresenterNotes as jx, resolveProfileInitial as jy, resolveRegionCode as jz, AiChatPanelComponent as k, textAdvancedPatch as k$, setAnimationEmphasis as k0, setAnimationEntrance as k1, setAnimationExit as k2, setAxis as k3, setAxisLogScale as k4, setAxisTitleStyle as k5, setCategoryLabel as k6, setCellText as k7, setColorScheme as k8, setDataLabels as k9, setTrigger as kA, setTriggerShapeId as kB, shapeStylePatch as kC, sheetAfterNavigate as kD, shouldBlockClickAdvance as kE, shouldUseSvgWarp as kF, showDirectionPicker as kG, showsTemplateAffordance as kH, signatureCountLabel as kI, signatureKey as kJ, signatureTimestamp as kK, signerName as kL, statusLabel as kM, slideNumberOf as kN, smartArtNodes as kO, paletteColour as kP, snapToGridStep as kQ, splitCursorCell as kR, splitMergedCell as kS, statusKind as kT, statusLabel$1 as kU, storeAudienceContent as kV, stringFromEvent$5 as kW, strokeColorOf as kX, strokeToInkElement as kY, strokeWidthOf as kZ, styleShadowFilter as k_, setDataPointExplosion as ka, setDataPointFill as kb, setDataPointLabel as kc, setDataPointMarker as kd, setDelay as ke, setDirection as kf, setDuration as kg, setElementPosition as kh, setGridlineStyle as ki, setLayout as kj, setLegend as kk, setNodeStyle as kl, setNodeText as km, setRepeatCount as kn, setRepeatMode as ko, setSequence as kp, setSeriesChartType as kq, setSeriesColor as kr, setSeriesErrorBars as ks, setSeriesMarker as kt, setSeriesName as ku, setSeriesTrendline as kv, setSeriesValue as kw, setStyle as kx, setTimingCurve as ky, setTitle as kz, AiChatService as l, textAdvancedStateFromStyle as l0, textAdvancedStateOf as l1, textColorOf as l2, textDirectionPatch as l3, textStyleOf as l4, textStylePatch as l5, themeStyle as l6, themeToCssVars as l7, thumbnailHeight as l8, thumbnailZoom as l9, zoomTargetSlideIndex as lA, toggleCommentResolvedInList as la, toggleNodeBold as lb, toggleNodeItalic as lc, toggleSheet as ld, topLevelNodeCount as le, transformSelectedTextCase as lf, translationsEn as lg, ungroupElements as lh, updateElementById as li, updateGlowPatch as lj, updateGradientStopPatch as lk, updateInnerShadowPatch as ll, updateOuterShadowPatch as lm, updateReflectionPatch as ln, vAlignPatch as lo, validatePassword as lp, validatePrintSettings as lq, validateRoomId as lr, valueToY as ls, vermilionDarkColors as lt, vermilionDarkTheme as lu, vermilionLightColors as lv, vermilionLightTheme as lw, vermilionRadius as lx, waypointsToPathD as ly, worstStatus as lz, AiComposerComponent as m, AiFocusBarComponent as n, AiFocusHighlightOverlayComponent as o, AiMessageListComponent as p, AiPanelStore as q, AiProposalCardComponent as r, AiSettingsSectionComponent as s, toChatSummary as t, AiToolCallCardComponent as u, AnimationAuthorPanelComponent as v, AnimationPanelComponent as w, AnimationPlaybackService as x, AutosaveService as y, CURSOR_PALETTE as z };
123212
- //# sourceMappingURL=pptx-angular-viewer-pptx-angular-viewer-DAtBsZGj.mjs.map
123322
+ //# sourceMappingURL=pptx-angular-viewer-pptx-angular-viewer-CrXInU5f.mjs.map