pptx-angular-viewer 4.12.0 → 4.14.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/CHANGELOG.md +45 -0
- package/fesm2022/{pptx-angular-viewer-chart-3d-view-scene-Dv-HeL_n.mjs → pptx-angular-viewer-chart-3d-view-scene-DNVnaejM.mjs} +2 -2
- package/fesm2022/{pptx-angular-viewer-chart-3d-view-scene-Dv-HeL_n.mjs.map → pptx-angular-viewer-chart-3d-view-scene-DNVnaejM.mjs.map} +1 -1
- package/fesm2022/{pptx-angular-viewer-chat-history-idb-A_FqG3yo.mjs → pptx-angular-viewer-chat-history-idb-MBA8GX9Z.mjs} +2 -2
- package/fesm2022/{pptx-angular-viewer-chat-history-idb-A_FqG3yo.mjs.map → pptx-angular-viewer-chat-history-idb-MBA8GX9Z.mjs.map} +1 -1
- package/fesm2022/{pptx-angular-viewer-pptx-angular-viewer-DMrqbfPM.mjs → pptx-angular-viewer-pptx-angular-viewer-D4Bf7RDf.mjs} +1062 -58
- package/fesm2022/{pptx-angular-viewer-pptx-angular-viewer-DMrqbfPM.mjs.map → pptx-angular-viewer-pptx-angular-viewer-D4Bf7RDf.mjs.map} +1 -1
- package/fesm2022/{pptx-angular-viewer-view-scene-HXKpEkAE.mjs → pptx-angular-viewer-view-scene-Dj_JE1AM.mjs} +2 -2
- package/fesm2022/{pptx-angular-viewer-view-scene-HXKpEkAE.mjs.map → pptx-angular-viewer-view-scene-Dj_JE1AM.mjs.map} +1 -1
- package/fesm2022/pptx-angular-viewer.mjs +1 -1
- package/i18n/de.cjs +45 -15
- package/i18n/de.mjs +45 -15
- package/i18n/es.cjs +45 -15
- package/i18n/es.mjs +45 -15
- package/i18n/fr.cjs +45 -15
- package/i18n/fr.mjs +45 -15
- package/i18n/zh-CN.cjs +46 -16
- package/i18n/zh-CN.mjs +46 -16
- package/package.json +2 -2
- package/types/pptx-angular-viewer.d.ts +24 -3
- package/types/pptx-angular-viewer.d.ts.map +1 -1
|
@@ -16034,6 +16034,34 @@ function dataLabelBox(label) {
|
|
|
16034
16034
|
return { x, y, w, h };
|
|
16035
16035
|
}
|
|
16036
16036
|
|
|
16037
|
+
/**
|
|
16038
|
+
* chart-label-lines.ts: turn a data label whose text contains line breaks
|
|
16039
|
+
* (for example a pie's default "Category" + newline + "25%") into one
|
|
16040
|
+
* single-line `SvgText` per line.
|
|
16041
|
+
*
|
|
16042
|
+
* SVG `<text>` collapses a newline to a space, and each binding paints an
|
|
16043
|
+
* `SvgText` as one `<text>` node, so splitting here (pure, shared) makes every
|
|
16044
|
+
* binding draw the lines without any template change.
|
|
16045
|
+
*
|
|
16046
|
+
* @module chart-label-lines
|
|
16047
|
+
*/
|
|
16048
|
+
/**
|
|
16049
|
+
* Split `label` on `\n` into stacked single-line labels. A single-line label is
|
|
16050
|
+
* returned as-is (same object). A vertically centred label (`central` /
|
|
16051
|
+
* `middle`) stays centred as a block; otherwise `y` is the first line's
|
|
16052
|
+
* baseline and the rest stack below it.
|
|
16053
|
+
*/
|
|
16054
|
+
function splitLabelLines(label) {
|
|
16055
|
+
const lines = label.text.split(/\r?\n/);
|
|
16056
|
+
if (lines.length < 2) {
|
|
16057
|
+
return [label];
|
|
16058
|
+
}
|
|
16059
|
+
const step = label.fontSize * DATA_LABEL_LINE_HEIGHT;
|
|
16060
|
+
const centred = label.dominantBaseline === 'central' || label.dominantBaseline === 'middle';
|
|
16061
|
+
const top = centred ? label.y - ((lines.length - 1) * step) / 2 : label.y;
|
|
16062
|
+
return lines.map((text, i) => ({ ...label, text, y: top + i * step }));
|
|
16063
|
+
}
|
|
16064
|
+
|
|
16037
16065
|
/**
|
|
16038
16066
|
* Map a (possibly fractional / extrapolated) category index to an X pixel.
|
|
16039
16067
|
* `mode === 'bar'` centres on category slots; `'line'` anchors at points.
|
|
@@ -19088,6 +19116,12 @@ function pushPointLabel(dataLabels, boxes, chartData, series, pointIndex, target
|
|
|
19088
19116
|
|
|
19089
19117
|
/** PowerPoint's default separator between combined label components. */
|
|
19090
19118
|
const DEFAULT_SEPARATOR = ', ';
|
|
19119
|
+
/**
|
|
19120
|
+
* PowerPoint's default separator when a label shows the category name AND the
|
|
19121
|
+
* percentage and the file carries no `c:separator` (a pie's "Cat 1" over
|
|
19122
|
+
* "25%"): a line break, not ", ". Every other combination keeps ", ".
|
|
19123
|
+
*/
|
|
19124
|
+
const CATEGORY_PERCENT_SEPARATOR = '\n';
|
|
19091
19125
|
/**
|
|
19092
19126
|
* Resolve the label content flags for one point.
|
|
19093
19127
|
*
|
|
@@ -19137,7 +19171,12 @@ function resolveDataLabelContent(chartData, series, pointIndex) {
|
|
|
19137
19171
|
showSeriesName: showSeriesName === true,
|
|
19138
19172
|
showPercent: showPercent === true,
|
|
19139
19173
|
showBubbleSize: showBubbleSize === true,
|
|
19140
|
-
separator: point?.separator ??
|
|
19174
|
+
separator: point?.separator ??
|
|
19175
|
+
seriesLevel?.separator ??
|
|
19176
|
+
chartLevel?.separator ??
|
|
19177
|
+
(showCategory === true && showPercent === true
|
|
19178
|
+
? CATEGORY_PERCENT_SEPARATOR
|
|
19179
|
+
: DEFAULT_SEPARATOR),
|
|
19141
19180
|
deleted: point?.deleted === true,
|
|
19142
19181
|
...(point?.text !== undefined
|
|
19143
19182
|
? { customText: point.text }
|
|
@@ -25706,7 +25745,7 @@ function withManualLayouts(vm, chartData, frame) {
|
|
|
25706
25745
|
* - A label that does not fit goes OUTSIDE, on the mid-angle, with the box
|
|
25707
25746
|
* side facing the pie 2pt beyond the rim. PowerPoint then nudges outside
|
|
25708
25747
|
* labels apart when they collide and draws leader lines to the nudged
|
|
25709
|
-
* ones; that
|
|
25748
|
+
* ones; that pass is `chart-pie-label-collision` (an approximation).
|
|
25710
25749
|
*
|
|
25711
25750
|
* All lengths are in the chart's px space (1pt = 4/3px).
|
|
25712
25751
|
*
|
|
@@ -25786,12 +25825,97 @@ function placeBestFitLabel(slice, w, h) {
|
|
|
25786
25825
|
return { x: slice.cx + outside * ux, y: slice.cy + outside * uy, inside: false };
|
|
25787
25826
|
}
|
|
25788
25827
|
|
|
25789
|
-
/**
|
|
25790
|
-
|
|
25791
|
-
|
|
25792
|
-
|
|
25793
|
-
|
|
25828
|
+
/**
|
|
25829
|
+
* chart-pie-label-collision.ts: nudge colliding OUTSIDE pie labels apart.
|
|
25830
|
+
*
|
|
25831
|
+
* At `c:dLblPos val="bestFit"` PowerPoint puts a label that does not fit in its
|
|
25832
|
+
* slice outside the rim; when two such labels overlap it moves them apart
|
|
25833
|
+
* (vertically, within their own side of the pie) and draws a leader line to
|
|
25834
|
+
* each one it moved. This module is the pure geometry half: it takes the
|
|
25835
|
+
* outside label boxes and returns how far each one moves. The caller decides
|
|
25836
|
+
* what to draw (a moved label gets a leader line; see `chart-pie-labels`).
|
|
25837
|
+
*
|
|
25838
|
+
* The algorithm is a per-side sweep: labels on the right (or left) of the pie
|
|
25839
|
+
* are sorted top to bottom, each is pushed below the previous one when they
|
|
25840
|
+
* overlap, and if the stack then runs past the bottom bound it is shifted back
|
|
25841
|
+
* up. Constants are not COM-measured; the gap is one line of breathing room.
|
|
25842
|
+
*
|
|
25843
|
+
* @module chart-pie-label-collision
|
|
25844
|
+
*/
|
|
25845
|
+
/** Minimum vertical gap (px) kept between two nudged labels. */
|
|
25846
|
+
const LABEL_COLLISION_GAP = 2;
|
|
25847
|
+
/** Distance from the disc centre to the nearest point of a box centred at (`x`, `y`). */
|
|
25848
|
+
function boxDistanceToCentre(box, y, disc) {
|
|
25849
|
+
const nearestX = Math.max(box.x - box.w / 2, Math.min(disc.cx, box.x + box.w / 2));
|
|
25850
|
+
const nearestY = Math.max(y - box.h / 2, Math.min(disc.cy, y + box.h / 2));
|
|
25851
|
+
return Math.hypot(nearestX - disc.cx, nearestY - disc.cy);
|
|
25852
|
+
}
|
|
25853
|
+
/**
|
|
25854
|
+
* A vertical nudge moves a label ALONG the rim only near 3 and 9 o'clock; near
|
|
25855
|
+
* 6 and 12 o'clock it drives the label into the pie. Push such a label
|
|
25856
|
+
* outward horizontally until its box clears the disc again.
|
|
25857
|
+
*/
|
|
25858
|
+
function clearOfDisc(box, y, disc) {
|
|
25859
|
+
if (boxDistanceToCentre(box, y, disc) >= disc.r) {
|
|
25860
|
+
return 0;
|
|
25861
|
+
}
|
|
25862
|
+
const sign = box.x >= disc.cx ? 1 : -1;
|
|
25863
|
+
let dx = 0;
|
|
25864
|
+
while (dx < disc.r * 2 &&
|
|
25865
|
+
boxDistanceToCentre({ ...box, x: box.x + sign * dx }, y, disc) < disc.r) {
|
|
25866
|
+
dx += 1;
|
|
25867
|
+
}
|
|
25868
|
+
return sign * dx;
|
|
25869
|
+
}
|
|
25870
|
+
/** Whether two boxes overlap horizontally (they share x extent). */
|
|
25871
|
+
function overlapsX(a, b) {
|
|
25872
|
+
return Math.abs(a.x - b.x) < (a.w + b.w) / 2;
|
|
25873
|
+
}
|
|
25874
|
+
/** Sweep one side's labels; returns the resolved centre y per box, by input order. */
|
|
25875
|
+
function sweepSide(boxes, minY, maxY) {
|
|
25876
|
+
const sorted = [...boxes].sort((a, b) => a.y - b.y || a.id - b.id);
|
|
25877
|
+
const ys = sorted.map((box) => box.y);
|
|
25878
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
25879
|
+
const prev = sorted[i - 1];
|
|
25880
|
+
const box = sorted[i];
|
|
25881
|
+
if (overlapsX(prev, box)) {
|
|
25882
|
+
ys[i] = Math.max(ys[i], ys[i - 1] + (prev.h + box.h) / 2 + LABEL_COLLISION_GAP);
|
|
25883
|
+
}
|
|
25884
|
+
}
|
|
25885
|
+
// Past the bottom bound: shift the tail back up, keeping the gaps.
|
|
25886
|
+
for (let i = sorted.length - 1; i >= 0; i--) {
|
|
25887
|
+
const box = sorted[i];
|
|
25888
|
+
const limit = i === sorted.length - 1
|
|
25889
|
+
? maxY - box.h / 2
|
|
25890
|
+
: ys[i + 1] - (box.h + sorted[i + 1].h) / 2 - LABEL_COLLISION_GAP;
|
|
25891
|
+
if (ys[i] > limit) {
|
|
25892
|
+
ys[i] = Math.max(limit, minY + box.h / 2);
|
|
25893
|
+
}
|
|
25894
|
+
}
|
|
25895
|
+
return new Map(sorted.map((box, i) => [box.id, ys[i]]));
|
|
25794
25896
|
}
|
|
25897
|
+
/**
|
|
25898
|
+
* Compute the vertical nudges that separate overlapping outside labels.
|
|
25899
|
+
* `disc` splits the labels into a left and a right column and keeps every
|
|
25900
|
+
* nudged label outside the pie; `minY`/`maxY` bound the drawing area. Labels
|
|
25901
|
+
* that do not collide get `dx: 0, dy: 0`.
|
|
25902
|
+
*/
|
|
25903
|
+
function nudgeOutsideLabels(boxes, disc, minY, maxY) {
|
|
25904
|
+
const resolved = new Map();
|
|
25905
|
+
for (const side of [
|
|
25906
|
+
boxes.filter((box) => box.x >= disc.cx),
|
|
25907
|
+
boxes.filter((box) => box.x < disc.cx),
|
|
25908
|
+
]) {
|
|
25909
|
+
for (const [id, y] of sweepSide(side, minY, maxY)) {
|
|
25910
|
+
resolved.set(id, y);
|
|
25911
|
+
}
|
|
25912
|
+
}
|
|
25913
|
+
return boxes.map((box) => {
|
|
25914
|
+
const y = resolved.get(box.id) ?? box.y;
|
|
25915
|
+
return { id: box.id, dx: y === box.y ? 0 : clearOfDisc(box, y, disc), dy: y - box.y };
|
|
25916
|
+
});
|
|
25917
|
+
}
|
|
25918
|
+
|
|
25795
25919
|
/**
|
|
25796
25920
|
* Resolve a label's SvgText font, starting from the given defaults (the
|
|
25797
25921
|
* fixed inside/outside styling this module always used) and overriding with
|
|
@@ -25836,6 +25960,13 @@ function leaderLine(slice, cx, cy, outerR, to, style) {
|
|
|
25836
25960
|
strokeWidth: 0.75,
|
|
25837
25961
|
};
|
|
25838
25962
|
}
|
|
25963
|
+
|
|
25964
|
+
/** Distance (px) an outside label sits beyond the slice rim. */
|
|
25965
|
+
const LEADER_LENGTH = 14;
|
|
25966
|
+
/** Whether a data-label position renders outside the pie rim (a doughnut's `bestFit` too). */
|
|
25967
|
+
function isOutsidePosition(position) {
|
|
25968
|
+
return position === 'outEnd' || position === 'bestFit';
|
|
25969
|
+
}
|
|
25839
25970
|
/**
|
|
25840
25971
|
* Build pie/doughnut data labels. Inside positions reuse each slice's centroid
|
|
25841
25972
|
* (white bold, centred). Outside positions place the label beyond the rim with a
|
|
@@ -25848,13 +25979,24 @@ function buildPieDataLabels(params) {
|
|
|
25848
25979
|
const leaderLines = [];
|
|
25849
25980
|
const boxes = [];
|
|
25850
25981
|
const push = (i, label, midAngle) => {
|
|
25851
|
-
|
|
25982
|
+
// The box/callout is sized from the whole label; the painted text is
|
|
25983
|
+
// one primitive per line so no binding needs multi-line support.
|
|
25984
|
+
labels.push(...splitLabelLines(label));
|
|
25852
25985
|
const r = params.targetRadius ?? outerR;
|
|
25853
25986
|
if (decorate) {
|
|
25854
25987
|
const target = { x: cx + r * Math.cos(midAngle), y: cy + r * Math.sin(midAngle) };
|
|
25855
25988
|
boxes.push(...decorate(i, label, target));
|
|
25856
25989
|
}
|
|
25857
25990
|
};
|
|
25991
|
+
const pendingOutside = [];
|
|
25992
|
+
const placeBestFit = (i, slice, label, auto, nudged = auto) => {
|
|
25993
|
+
const moved = applyManualDrag(nudged, i, params);
|
|
25994
|
+
push(i, { ...label, x: moved.x, y: moved.y }, slice.midAngle);
|
|
25995
|
+
// PowerPoint draws a leader line only to a label that left its spot.
|
|
25996
|
+
if (showLeaderLines !== false && (moved.x !== auto.x || moved.y !== auto.y)) {
|
|
25997
|
+
leaderLines.push(leaderLine(slice, cx, cy, outerR, moved, leaderLineStyle));
|
|
25998
|
+
}
|
|
25999
|
+
};
|
|
25858
26000
|
slices.forEach((slice, i) => {
|
|
25859
26001
|
const val = values[i];
|
|
25860
26002
|
if (val === undefined) {
|
|
@@ -25879,12 +26021,12 @@ function buildPieDataLabels(params) {
|
|
|
25879
26021
|
};
|
|
25880
26022
|
const { w, h } = dataLabelBoxSize(label);
|
|
25881
26023
|
const auto = placeBestFitLabel({ ...slice, outerR }, w, h);
|
|
25882
|
-
|
|
25883
|
-
|
|
25884
|
-
|
|
25885
|
-
|
|
25886
|
-
leaderLines.push(leaderLine(slice, cx, cy, outerR, moved, leaderLineStyle));
|
|
26024
|
+
if (!auto.inside) {
|
|
26025
|
+
// Outside labels may collide: placed after the loop, once nudged apart.
|
|
26026
|
+
pendingOutside.push({ i, slice, label, auto, w, h });
|
|
26027
|
+
return;
|
|
25887
26028
|
}
|
|
26029
|
+
placeBestFit(i, slice, label, auto);
|
|
25888
26030
|
return;
|
|
25889
26031
|
}
|
|
25890
26032
|
if (!isOutsidePosition(pointPosition)) {
|
|
@@ -25927,6 +26069,16 @@ function buildPieDataLabels(params) {
|
|
|
25927
26069
|
leaderLines.push(leaderLine(slice, cx, cy, outerR, { x: labelX, y: labelY }, leaderLineStyle));
|
|
25928
26070
|
}
|
|
25929
26071
|
});
|
|
26072
|
+
// Outside bestFit labels: nudge colliding ones apart (a moved label gets a
|
|
26073
|
+
// leader line from placeBestFit), see chart-pie-label-collision.
|
|
26074
|
+
const nudges = nudgeOutsideLabels(pendingOutside.map((p) => ({ id: p.i, x: p.auto.x, y: p.auto.y, w: p.w, h: p.h })), { cx, cy, r: outerR }, 0, params.svgHeight ?? Number.POSITIVE_INFINITY);
|
|
26075
|
+
for (const p of pendingOutside) {
|
|
26076
|
+
const nudge = nudges.find((n) => n.id === p.i);
|
|
26077
|
+
placeBestFit(p.i, p.slice, p.label, p.auto, {
|
|
26078
|
+
x: p.auto.x + (nudge?.dx ?? 0),
|
|
26079
|
+
y: p.auto.y + (nudge?.dy ?? 0),
|
|
26080
|
+
});
|
|
26081
|
+
}
|
|
25930
26082
|
return { labels, leaderLines, boxes };
|
|
25931
26083
|
}
|
|
25932
26084
|
|
|
@@ -25987,9 +26139,19 @@ function computePieSlicePath(cx, cy, outerR, innerR, startAngle, endAngle) {
|
|
|
25987
26139
|
labelR = innerR > 0 ? (innerR + outerR) / 2 : outerR * 0.7, labelX = cx + labelR * Math.cos(midAngle), labelY = cy + labelR * Math.sin(midAngle);
|
|
25988
26140
|
return { d, midAngle, labelX, labelY, startAngle, endAngle, cx, cy };
|
|
25989
26141
|
}
|
|
26142
|
+
/** Constant padding (px) PowerPoint leaves inside an automatic pie plot area. */
|
|
26143
|
+
const PIE_AUTO_INSET_PX = 6.7;
|
|
25990
26144
|
function computePieLayout(elementWidth, elementHeight, chartData, isDoughnut) {
|
|
25991
26145
|
const size = Math.min(Math.max(elementWidth, 1), Math.max(elementHeight, 1)), titleOffset = chartTitleReservePx(chartData), legendOffset = chartData.style?.hasLegend ? 20 : 0;
|
|
25992
|
-
let cx = size / 2, cy = titleOffset + (size - titleOffset - legendOffset) / 2,
|
|
26146
|
+
let cx = size / 2, cy = titleOffset + (size - titleOffset - legendOffset) / 2,
|
|
26147
|
+
// Automatic plot area: 42% of the free height, less a fixed inset.
|
|
26148
|
+
// PowerPoint keeps a constant padding (about 5pt, 6.7px) between the
|
|
26149
|
+
// pie and the plot-area edge, so the pie is smaller than a pure
|
|
26150
|
+
// percentage of the box by the same PIXELS at every size: about 8% of the
|
|
26151
|
+
// radius in a small (~200px) chart, under 1% in a large one, which is
|
|
26152
|
+
// the documented discrepancy. Not COM-measured; the constant is fitted to
|
|
26153
|
+
// that reported worst case.
|
|
26154
|
+
outerR = Math.max((size - titleOffset - legendOffset) * 0.42 - PIE_AUTO_INSET_PX, 0);
|
|
25993
26155
|
// c:plotArea/c:layout/c:manualLayout is measured on the element, while the
|
|
25994
26156
|
// pie is laid out on a centred `size x size` square: translate the automatic
|
|
25995
26157
|
// disc out to the element, resolve, and translate the centre back in. The
|
|
@@ -27662,6 +27824,14 @@ function buildWaterfallViewModel(element, chartData, categoryLabels) {
|
|
|
27662
27824
|
// Main view-model builder
|
|
27663
27825
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
27664
27826
|
function buildChartViewModel(element) {
|
|
27827
|
+
const vm = buildChartViewModelInner(element);
|
|
27828
|
+
// A label with a line break (a "\n" `c:separator`) paints as one `<text>` per
|
|
27829
|
+
// line in every binding; single-line labels pass through untouched.
|
|
27830
|
+
return vm.dataLabels.some((label) => label.text.includes('\n'))
|
|
27831
|
+
? { ...vm, dataLabels: vm.dataLabels.flatMap(splitLabelLines) }
|
|
27832
|
+
: vm;
|
|
27833
|
+
}
|
|
27834
|
+
function buildChartViewModelInner(element) {
|
|
27665
27835
|
if (element.type !== 'chart') {
|
|
27666
27836
|
return buildFallbackViewModel(element.width, element.height, 'Chart');
|
|
27667
27837
|
}
|
|
@@ -30979,7 +31149,7 @@ const DEFAULT_ANIMATION_TIMING_CURVE = 'linear';
|
|
|
30979
31149
|
function effectiveTimingCurve(curve) {
|
|
30980
31150
|
return curve ?? DEFAULT_ANIMATION_TIMING_CURVE;
|
|
30981
31151
|
}
|
|
30982
|
-
function unit(value) {
|
|
31152
|
+
function unit$1(value) {
|
|
30983
31153
|
if (value === undefined || !Number.isFinite(value) || value <= 0) {
|
|
30984
31154
|
return 0;
|
|
30985
31155
|
}
|
|
@@ -30991,8 +31161,8 @@ function unit(value) {
|
|
|
30991
31161
|
* down proportionally so the ramps meet instead of overlapping.
|
|
30992
31162
|
*/
|
|
30993
31163
|
function normalizeAccelDecel(accel, decel) {
|
|
30994
|
-
const a = unit(accel);
|
|
30995
|
-
const d = unit(decel);
|
|
31164
|
+
const a = unit$1(accel);
|
|
31165
|
+
const d = unit$1(decel);
|
|
30996
31166
|
const sum = a + d;
|
|
30997
31167
|
return sum > 1 ? { accel: a / sum, decel: d / sum } : { accel: a, decel: d };
|
|
30998
31168
|
}
|
|
@@ -31899,6 +32069,20 @@ const DIRECTION_VALUES = [
|
|
|
31899
32069
|
'fromBottomLeft',
|
|
31900
32070
|
'fromBottomRight',
|
|
31901
32071
|
];
|
|
32072
|
+
/**
|
|
32073
|
+
* Direction -> i18n dictionary key, for every picker in every binding, so the
|
|
32074
|
+
* bindings spell a direction the same way without each keeping its own map.
|
|
32075
|
+
*/
|
|
32076
|
+
const ANIMATION_DIRECTION_LABEL_KEYS = {
|
|
32077
|
+
fromTop: 'pptx.animation.direction.fromTop',
|
|
32078
|
+
fromBottom: 'pptx.animation.direction.fromBottom',
|
|
32079
|
+
fromLeft: 'pptx.animation.direction.fromLeft',
|
|
32080
|
+
fromRight: 'pptx.animation.direction.fromRight',
|
|
32081
|
+
fromTopLeft: 'pptx.animation.direction.fromTopLeft',
|
|
32082
|
+
fromTopRight: 'pptx.animation.direction.fromTopRight',
|
|
32083
|
+
fromBottomLeft: 'pptx.animation.direction.fromBottomLeft',
|
|
32084
|
+
fromBottomRight: 'pptx.animation.direction.fromBottomRight',
|
|
32085
|
+
};
|
|
31902
32086
|
const EDGES$1 = DIRECTION_VALUES.slice(0, 4);
|
|
31903
32087
|
const PRESET_DIRECTIONS = {
|
|
31904
32088
|
flyIn: DIRECTION_VALUES,
|
|
@@ -34644,6 +34828,33 @@ function redirectMaskEffectByFilterSubtype(effect, filter) {
|
|
|
34644
34828
|
}
|
|
34645
34829
|
return effect;
|
|
34646
34830
|
}
|
|
34831
|
+
/** Shape reveals whose exit Effect Options "Out" opens a hole at the centre. */
|
|
34832
|
+
const EXIT_FROM_CENTER_REVEAL = {
|
|
34833
|
+
boxOut: { family: 'box', variant: 'boxOutFromCenter' },
|
|
34834
|
+
circleOut: { family: 'circle', variant: 'circleOutFromCenter' },
|
|
34835
|
+
diamondOut: { family: 'diamond', variant: 'diamondOutFromCenter' },
|
|
34836
|
+
plusOut: { family: 'plus', variant: 'plusOutFromCenter' },
|
|
34837
|
+
};
|
|
34838
|
+
/** `p:cTn/@presetSubtype` PowerPoint writes for the shape reveals' "Out" direction. */
|
|
34839
|
+
const SHAPE_REVEAL_OUT_SUBTYPE = 32;
|
|
34840
|
+
/**
|
|
34841
|
+
* Redirect the default Box / Circle / Diamond / Plus EXIT (which closes in
|
|
34842
|
+
* toward the centre, PowerPoint's "In") to its "Out" variant when the effect
|
|
34843
|
+
* asks for that direction: the filter's own subtype token (`box(out)`), else,
|
|
34844
|
+
* with no filter to read, `presetSubtype` 32. Mirrors how the entrance side
|
|
34845
|
+
* honours the same token in {@link redirectMaskEffectByFilterSubtype}.
|
|
34846
|
+
* Returns `effect` unchanged for any other effect or direction.
|
|
34847
|
+
*/
|
|
34848
|
+
function redirectExitShapeByDirection(effect, filter, presetSubtype) {
|
|
34849
|
+
const variant = effect ? EXIT_FROM_CENTER_REVEAL[effect] : undefined;
|
|
34850
|
+
if (!effect || !variant) {
|
|
34851
|
+
return effect;
|
|
34852
|
+
}
|
|
34853
|
+
const isOut = filter
|
|
34854
|
+
? filter.family === variant.family && filter.subtype === 'out'
|
|
34855
|
+
: presetSubtype === SHAPE_REVEAL_OUT_SUBTYPE;
|
|
34856
|
+
return isOut ? variant.variant : effect;
|
|
34857
|
+
}
|
|
34647
34858
|
|
|
34648
34859
|
/**
|
|
34649
34860
|
* `animation-presets` - OOXML preset-id -> effect-name lookup tables for the
|
|
@@ -36375,6 +36586,25 @@ const EXIT_SHAPE_KEYFRAME_DEFINITIONS = {
|
|
|
36375
36586
|
plusOut: `@keyframes pptx-plusOut {
|
|
36376
36587
|
from { ${maskShapeDecl('plusOut', 'shown')} opacity: 1; }
|
|
36377
36588
|
to { ${maskShapeDecl('plusOut', 'hidden')} opacity: 0; }
|
|
36589
|
+
}`,
|
|
36590
|
+
// Exit Effect Options "Out": a hole shaped like the preset opens at the
|
|
36591
|
+
// centre and grows to the element's edges (the entrance "In" hole
|
|
36592
|
+
// reveal played in reverse), so the element vanishes from the middle.
|
|
36593
|
+
boxOutFromCenter: `@keyframes pptx-boxOutFromCenter {
|
|
36594
|
+
from { ${maskHoleDecl('box', 'shown')} opacity: 1; }
|
|
36595
|
+
to { ${maskHoleDecl('box', 'hidden')} opacity: 1; }
|
|
36596
|
+
}`,
|
|
36597
|
+
circleOutFromCenter: `@keyframes pptx-circleOutFromCenter {
|
|
36598
|
+
from { ${maskHoleDecl('circle', 'shown')} opacity: 1; }
|
|
36599
|
+
to { ${maskHoleDecl('circle', 'hidden')} opacity: 1; }
|
|
36600
|
+
}`,
|
|
36601
|
+
diamondOutFromCenter: `@keyframes pptx-diamondOutFromCenter {
|
|
36602
|
+
from { ${maskHoleDecl('diamond', 'shown')} opacity: 1; }
|
|
36603
|
+
to { ${maskHoleDecl('diamond', 'hidden')} opacity: 1; }
|
|
36604
|
+
}`,
|
|
36605
|
+
plusOutFromCenter: `@keyframes pptx-plusOutFromCenter {
|
|
36606
|
+
from { ${maskPlusHoleDecl('shown')} opacity: 1; }
|
|
36607
|
+
to { ${maskPlusHoleDecl('hidden')} opacity: 1; }
|
|
36378
36608
|
}`,
|
|
36379
36609
|
// The hidden region is the entrance's two wedges opening from 12
|
|
36380
36610
|
// o'clock (CreateVideo-derived, see `animation-wedge-reveal`).
|
|
@@ -39155,7 +39385,7 @@ function resolveEffect(anim, pixelateMosaic) {
|
|
|
39155
39385
|
}
|
|
39156
39386
|
}
|
|
39157
39387
|
else if (cls === 'exit') {
|
|
39158
|
-
const effect = redirectStripsEffect(applyFlyDirection(PRESET_ID_TO_EFFECT.exit[id], anim.presetSubtype), anim.effectFilter, anim.presetSubtype);
|
|
39388
|
+
const effect = redirectStripsEffect(redirectExitShapeByDirection(applyFlyDirection(PRESET_ID_TO_EFFECT.exit[id], anim.presetSubtype), anim.effectFilter, anim.presetSubtype), anim.effectFilter, anim.presetSubtype);
|
|
39159
39389
|
if (effect) {
|
|
39160
39390
|
return effect;
|
|
39161
39391
|
}
|
|
@@ -55124,6 +55354,39 @@ const galleryTranslationsEn = {
|
|
|
55124
55354
|
'pptx.gallery.shapeStyles.gradientFill': 'Gradient Fill - {{color}}',
|
|
55125
55355
|
};
|
|
55126
55356
|
|
|
55357
|
+
/**
|
|
55358
|
+
* English copy for the Picture Format > Adjust galleries (Corrections, Color,
|
|
55359
|
+
* Artistic Effects; `render/ribbon-galleries/picture-*-gallery.ts`). Artistic
|
|
55360
|
+
* effect tiles reuse the `pptx.image.effect*` keys.
|
|
55361
|
+
*/
|
|
55362
|
+
const galleryAdjustTranslationsEn = {
|
|
55363
|
+
'pptx.ribbon.groupAdjust': 'Adjust',
|
|
55364
|
+
'pptx.gallery.pictureCorrections.title': 'Corrections',
|
|
55365
|
+
'pptx.gallery.pictureCorrections.sharpenSoften': 'Sharpen/Soften',
|
|
55366
|
+
'pptx.gallery.pictureCorrections.brightnessContrastTitle': 'Brightness/Contrast',
|
|
55367
|
+
'pptx.gallery.pictureCorrections.soften': 'Soften: {{amount}}%',
|
|
55368
|
+
'pptx.gallery.pictureCorrections.sharpen': 'Sharpen: {{amount}}%',
|
|
55369
|
+
'pptx.gallery.pictureCorrections.sharpenNormal': 'Sharpen: 0% (Normal)',
|
|
55370
|
+
'pptx.gallery.pictureCorrections.brightnessContrast': 'Brightness: {{brightness}}% Contrast: {{contrast}}%',
|
|
55371
|
+
'pptx.gallery.pictureCorrections.brightnessContrastNormal': 'Brightness: 0% Contrast: 0% (Normal)',
|
|
55372
|
+
'pptx.gallery.pictureColor.title': 'Color',
|
|
55373
|
+
'pptx.gallery.pictureColor.saturationTitle': 'Color Saturation',
|
|
55374
|
+
'pptx.gallery.pictureColor.toneTitle': 'Color Tone',
|
|
55375
|
+
'pptx.gallery.pictureColor.recolorTitle': 'Recolor',
|
|
55376
|
+
'pptx.gallery.pictureColor.saturation': 'Saturation: {{amount}}%',
|
|
55377
|
+
'pptx.gallery.pictureColor.saturationNormal': 'Saturation: 100% (Normal)',
|
|
55378
|
+
'pptx.gallery.pictureColor.tone': 'Temperature: {{kelvin}} K',
|
|
55379
|
+
'pptx.gallery.pictureColor.toneNormal': 'Temperature: 6500 K (Normal)',
|
|
55380
|
+
'pptx.gallery.pictureColor.recolorNone': 'No Recolor',
|
|
55381
|
+
'pptx.gallery.pictureColor.recolorGrayscale': 'Grayscale',
|
|
55382
|
+
'pptx.gallery.pictureColor.recolorSepia': 'Sepia',
|
|
55383
|
+
'pptx.gallery.pictureColor.recolorWashout': 'Washout',
|
|
55384
|
+
'pptx.gallery.pictureColor.recolorBlackWhite': 'Black and White: {{amount}}%',
|
|
55385
|
+
'pptx.gallery.pictureColor.recolorAccentDark': 'Accent {{n}}, Dark',
|
|
55386
|
+
'pptx.gallery.pictureColor.recolorAccentLight': 'Accent {{n}}, Light',
|
|
55387
|
+
'pptx.gallery.pictureArtisticEffects.title': 'Artistic Effects',
|
|
55388
|
+
};
|
|
55389
|
+
|
|
55127
55390
|
/**
|
|
55128
55391
|
* English copy for the Table Styles, chart, SmartArt and theme Variants
|
|
55129
55392
|
* galleries (`render/ribbon-galleries/`).
|
|
@@ -55370,6 +55633,7 @@ const translationsEn = {
|
|
|
55370
55633
|
...galleryEffectsTranslationsEn,
|
|
55371
55634
|
...galleryDataTranslationsEn,
|
|
55372
55635
|
...galleryPictureTranslationsEn,
|
|
55636
|
+
...galleryAdjustTranslationsEn,
|
|
55373
55637
|
// Status bar
|
|
55374
55638
|
'pptx.statusBar.allSaved': 'All saved',
|
|
55375
55639
|
'pptx.statusBar.unsavedChanges': 'Unsaved changes',
|
|
@@ -77414,6 +77678,8 @@ const COMPLEX_ELEMENT_FIELDS = {
|
|
|
77414
77678
|
customGeometryAdjustHandlesPolar: '_cgo',
|
|
77415
77679
|
customGeometryConnectionSites: '_cgc',
|
|
77416
77680
|
customGeometryTextRect: '_cgt',
|
|
77681
|
+
// A 3D model's authored camera, transform and lights (read-only view of `rawXml`).
|
|
77682
|
+
scene: '_m3s',
|
|
77417
77683
|
};
|
|
77418
77684
|
const REV_COMPLEX_ELEMENT = Object.fromEntries(Object.entries(COMPLEX_ELEMENT_FIELDS).map(([k, v]) => [v, k]));
|
|
77419
77685
|
const SCALAR_SLIDE_KEYS = new Set([
|
|
@@ -85435,7 +85701,7 @@ function computeSmartArtElementLayout(smartArtData, nodes, box, palette, style,
|
|
|
85435
85701
|
* @module color-contrast
|
|
85436
85702
|
*/
|
|
85437
85703
|
/** Parse `#rgb`/`#rrggbb` into `[r, g, b]` (0..255); falls back to mid-grey. */
|
|
85438
|
-
function parseHex(hex) {
|
|
85704
|
+
function parseHex$1(hex) {
|
|
85439
85705
|
let h = hex.trim().replace(/^#/u, '');
|
|
85440
85706
|
if (h.length === 3) {
|
|
85441
85707
|
h = h
|
|
@@ -85453,7 +85719,7 @@ function parseHex(hex) {
|
|
|
85453
85719
|
* using the WCAG relative-luminance threshold.
|
|
85454
85720
|
*/
|
|
85455
85721
|
function contrastTextColor(fill) {
|
|
85456
|
-
const [r, g, b] = parseHex(fill);
|
|
85722
|
+
const [r, g, b] = parseHex$1(fill);
|
|
85457
85723
|
const lum = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
|
85458
85724
|
return lum > 0.6 ? '#1a1a1a' : '#ffffff';
|
|
85459
85725
|
}
|
|
@@ -86562,7 +86828,7 @@ function blendOntoWhite(color, opacity) {
|
|
|
86562
86828
|
if (opacity === undefined || !color.startsWith('#')) {
|
|
86563
86829
|
return color;
|
|
86564
86830
|
}
|
|
86565
|
-
const hex = parseHex(color)
|
|
86831
|
+
const hex = parseHex$1(color)
|
|
86566
86832
|
.map((c) => Math.round(c * opacity + 255 * (1 - opacity)))
|
|
86567
86833
|
.map((c) => c.toString(16).padStart(2, '0'))
|
|
86568
86834
|
.join('');
|
|
@@ -88905,6 +89171,235 @@ function extraConnectionCount(data) {
|
|
|
88905
89171
|
return classifyExtraConnections(data).length;
|
|
88906
89172
|
}
|
|
88907
89173
|
|
|
89174
|
+
/**
|
|
89175
|
+
* Pure decision function: authored PowerPoint 3D scene data -> a
|
|
89176
|
+
* framework-neutral three.js scene descriptor.
|
|
89177
|
+
*
|
|
89178
|
+
* `resolveModel3DSceneDescriptor` reads the camera, model transform and lights
|
|
89179
|
+
* parsed by core (`Model3DSceneData`) and returns plain numbers/strings. All
|
|
89180
|
+
* lengths in the descriptor are METRES (EMU / 914400); the three.js applier
|
|
89181
|
+
* ({@link ./model3d-scene-apply}) converts metres into fitted scene units once
|
|
89182
|
+
* the model's size is known. When nothing is authored the descriptor reproduces
|
|
89183
|
+
* the viewer's long-standing default framing and lights.
|
|
89184
|
+
*
|
|
89185
|
+
* NOTE: not yet verified against PowerPoint renders (axis handedness of
|
|
89186
|
+
* `am3d:rot`, ordering of `preTrans`, and orthographic scale are unconfirmed).
|
|
89187
|
+
*/
|
|
89188
|
+
const EMU_PER_METER = 914400;
|
|
89189
|
+
/** Default vertical field of view (degrees) used when none is authored. */
|
|
89190
|
+
const DEFAULT_MODEL3D_FOV_DEG = 50;
|
|
89191
|
+
/** The built-in camera (unchanged pre-existing framing). */
|
|
89192
|
+
const DEFAULT_MODEL3D_CAMERA = {
|
|
89193
|
+
framing: 'default',
|
|
89194
|
+
kind: 'perspective',
|
|
89195
|
+
fovDeg: DEFAULT_MODEL3D_FOV_DEG,
|
|
89196
|
+
position: [0, 0, 5],
|
|
89197
|
+
up: [0, 1, 0],
|
|
89198
|
+
target: [0, 0, 0],
|
|
89199
|
+
};
|
|
89200
|
+
/** The built-in lights (unchanged pre-existing rig). */
|
|
89201
|
+
const DEFAULT_MODEL3D_LIGHTS = [
|
|
89202
|
+
{ kind: 'ambient', color: '#ffffff', intensity: 0.5 },
|
|
89203
|
+
{ kind: 'directional', color: '#ffffff', intensity: 1, position: [5, 5, 5] },
|
|
89204
|
+
{ kind: 'directional', color: '#ffffff', intensity: 0.3, position: [-3, -3, 2] },
|
|
89205
|
+
];
|
|
89206
|
+
const metres = (v, fallback) => v ? [v.x / EMU_PER_METER, v.y / EMU_PER_METER, v.z / EMU_PER_METER] : fallback;
|
|
89207
|
+
function unit(v) {
|
|
89208
|
+
if (!v) {
|
|
89209
|
+
return undefined;
|
|
89210
|
+
}
|
|
89211
|
+
const len = Math.hypot(v.x, v.y, v.z);
|
|
89212
|
+
return len > 0 ? [v.x / len, v.y / len, v.z / len] : undefined;
|
|
89213
|
+
}
|
|
89214
|
+
function resolveCamera(scene) {
|
|
89215
|
+
const cam = scene.camera;
|
|
89216
|
+
const position = cam?.position;
|
|
89217
|
+
if (!cam || !position) {
|
|
89218
|
+
return DEFAULT_MODEL3D_CAMERA;
|
|
89219
|
+
}
|
|
89220
|
+
const fov = cam.fovDeg !== undefined && cam.fovDeg > 0 && cam.fovDeg < 180 ? cam.fovDeg : undefined;
|
|
89221
|
+
return {
|
|
89222
|
+
framing: 'authored',
|
|
89223
|
+
kind: cam.projection,
|
|
89224
|
+
fovDeg: fov ?? DEFAULT_MODEL3D_FOV_DEG,
|
|
89225
|
+
position: metres(position, [0, 0, 5]),
|
|
89226
|
+
up: unit(cam.up) ?? [0, 1, 0],
|
|
89227
|
+
target: metres(cam.lookAt, [0, 0, 0]),
|
|
89228
|
+
};
|
|
89229
|
+
}
|
|
89230
|
+
function resolveLight(light) {
|
|
89231
|
+
const base = {
|
|
89232
|
+
kind: light.kind,
|
|
89233
|
+
color: light.color ?? '#ffffff',
|
|
89234
|
+
intensity: Math.max(0, light.illuminance ?? (light.kind === 'ambient' ? 0.5 : 1)),
|
|
89235
|
+
};
|
|
89236
|
+
if (light.kind === 'ambient') {
|
|
89237
|
+
return base;
|
|
89238
|
+
}
|
|
89239
|
+
return {
|
|
89240
|
+
...base,
|
|
89241
|
+
...(light.position ? { position: metres(light.position, [0, 0, 0]) } : {}),
|
|
89242
|
+
...(light.direction ? { direction: unit(light.direction) } : {}),
|
|
89243
|
+
...(light.kind === 'spot' && light.spotAngleDeg !== undefined
|
|
89244
|
+
? { spotAngleDeg: light.spotAngleDeg }
|
|
89245
|
+
: {}),
|
|
89246
|
+
};
|
|
89247
|
+
}
|
|
89248
|
+
function resolveTransform(scene) {
|
|
89249
|
+
const t = scene.transform;
|
|
89250
|
+
if (!t) {
|
|
89251
|
+
return undefined;
|
|
89252
|
+
}
|
|
89253
|
+
const mpu = t.meterPerModelUnit !== undefined && t.meterPerModelUnit > 0 ? t.meterPerModelUnit : undefined;
|
|
89254
|
+
const s = t.scale;
|
|
89255
|
+
const r = t.rotationDeg;
|
|
89256
|
+
return {
|
|
89257
|
+
...(mpu !== undefined ? { meterPerModelUnit: mpu } : {}),
|
|
89258
|
+
scale: s ? [s.x, s.y, s.z] : [1, 1, 1],
|
|
89259
|
+
rotationDeg: r ? [r.x, r.y, r.z] : [0, 0, 0],
|
|
89260
|
+
postTranslate: metres(t.postTranslate, [0, 0, 0]),
|
|
89261
|
+
};
|
|
89262
|
+
}
|
|
89263
|
+
/**
|
|
89264
|
+
* Turn parsed 3D scene data into a three.js scene descriptor. With no data
|
|
89265
|
+
* (or no authored camera / lights) the matching part falls back to the default
|
|
89266
|
+
* framing / lights, so `resolveModel3DSceneDescriptor(undefined)` equals the
|
|
89267
|
+
* previous hard-coded setup.
|
|
89268
|
+
*/
|
|
89269
|
+
function resolveModel3DSceneDescriptor(scene) {
|
|
89270
|
+
if (!scene) {
|
|
89271
|
+
return {
|
|
89272
|
+
authored: false,
|
|
89273
|
+
camera: DEFAULT_MODEL3D_CAMERA,
|
|
89274
|
+
lightsAuthored: false,
|
|
89275
|
+
lights: [...DEFAULT_MODEL3D_LIGHTS],
|
|
89276
|
+
};
|
|
89277
|
+
}
|
|
89278
|
+
const camera = resolveCamera(scene);
|
|
89279
|
+
const transform = resolveTransform(scene);
|
|
89280
|
+
const lights = scene.lights.length > 0 ? scene.lights.map(resolveLight) : [...DEFAULT_MODEL3D_LIGHTS];
|
|
89281
|
+
return {
|
|
89282
|
+
authored: camera.framing === 'authored' || transform !== undefined || scene.lights.length > 0,
|
|
89283
|
+
camera,
|
|
89284
|
+
lightsAuthored: scene.lights.length > 0,
|
|
89285
|
+
...(transform ? { transform } : {}),
|
|
89286
|
+
lights,
|
|
89287
|
+
};
|
|
89288
|
+
}
|
|
89289
|
+
|
|
89290
|
+
/**
|
|
89291
|
+
* three.js applier for a {@link Model3DSceneDescriptor}.
|
|
89292
|
+
*
|
|
89293
|
+
* Builds the camera, lights and (optional) model wrapper for
|
|
89294
|
+
* `mountModel3D` from the pure descriptor. `three` is passed in by the caller
|
|
89295
|
+
* (it is an optional, dynamically imported peer), so this file only carries
|
|
89296
|
+
* type-only imports.
|
|
89297
|
+
*/
|
|
89298
|
+
/** Distance of the built-in camera, and the fallback for authored ones. */
|
|
89299
|
+
const DEFAULT_DISTANCE = 5;
|
|
89300
|
+
const DEG = Math.PI / 180;
|
|
89301
|
+
/**
|
|
89302
|
+
* Scene units per metre. The model is auto-fitted to a 2-unit cube, so one
|
|
89303
|
+
* metre spans `2 / (maxModelDim * meterPerModelUnit)` units. Without an
|
|
89304
|
+
* authored `meterPerModelUnit` the authored camera distance is normalised to
|
|
89305
|
+
* the default distance so the model still fills the view sensibly.
|
|
89306
|
+
*/
|
|
89307
|
+
function computeMetresToSceneScale(desc, maxModelDim) {
|
|
89308
|
+
const mpu = desc.transform?.meterPerModelUnit;
|
|
89309
|
+
if (mpu && maxModelDim > 0) {
|
|
89310
|
+
return 2 / (maxModelDim * mpu);
|
|
89311
|
+
}
|
|
89312
|
+
const cam = desc.camera;
|
|
89313
|
+
const dist = Math.hypot(cam.position[0] - cam.target[0], cam.position[1] - cam.target[1], cam.position[2] - cam.target[2]);
|
|
89314
|
+
return dist > 0 ? DEFAULT_DISTANCE / dist : 1;
|
|
89315
|
+
}
|
|
89316
|
+
const scaled = (v, k) => [v[0] * k, v[1] * k, v[2] * k];
|
|
89317
|
+
function buildLight(three, light, k, authored) {
|
|
89318
|
+
const color = new three.Color(light.color);
|
|
89319
|
+
// Default-rig positions are already scene units; authored ones are metres.
|
|
89320
|
+
const pos = light.position ? (authored ? scaled(light.position, k) : light.position) : undefined;
|
|
89321
|
+
let obj;
|
|
89322
|
+
switch (light.kind) {
|
|
89323
|
+
case 'ambient':
|
|
89324
|
+
return new three.AmbientLight(color, light.intensity);
|
|
89325
|
+
case 'point':
|
|
89326
|
+
obj = new three.PointLight(color, light.intensity);
|
|
89327
|
+
break;
|
|
89328
|
+
case 'spot': {
|
|
89329
|
+
const spot = new three.SpotLight(color, light.intensity);
|
|
89330
|
+
if (light.spotAngleDeg !== undefined) {
|
|
89331
|
+
spot.angle = Math.min(Math.PI / 2, Math.max(0.01, light.spotAngleDeg * DEG));
|
|
89332
|
+
}
|
|
89333
|
+
obj = spot;
|
|
89334
|
+
break;
|
|
89335
|
+
}
|
|
89336
|
+
default:
|
|
89337
|
+
obj = new three.DirectionalLight(color, light.intensity);
|
|
89338
|
+
}
|
|
89339
|
+
if (pos) {
|
|
89340
|
+
obj.position.set(pos[0], pos[1], pos[2]);
|
|
89341
|
+
}
|
|
89342
|
+
else if (light.direction) {
|
|
89343
|
+
// No authored position: place the light up-stream of its direction.
|
|
89344
|
+
const d = light.direction;
|
|
89345
|
+
obj.position.set(-d[0] * DEFAULT_DISTANCE, -d[1] * DEFAULT_DISTANCE, -d[2] * DEFAULT_DISTANCE);
|
|
89346
|
+
}
|
|
89347
|
+
return obj;
|
|
89348
|
+
}
|
|
89349
|
+
/** Build camera, lights and model placement for a descriptor. */
|
|
89350
|
+
function buildModel3DRig(three, desc, aspect, maxModelDim) {
|
|
89351
|
+
const authoredCam = desc.camera.framing === 'authored';
|
|
89352
|
+
const k = authoredCam || desc.transform ? computeMetresToSceneScale(desc, maxModelDim) : 1;
|
|
89353
|
+
const pos = authoredCam ? scaled(desc.camera.position, k) : desc.camera.position;
|
|
89354
|
+
const target = authoredCam ? scaled(desc.camera.target, k) : desc.camera.target;
|
|
89355
|
+
const distance = Math.hypot(pos[0] - target[0], pos[1] - target[1], pos[2] - target[2]);
|
|
89356
|
+
const fov = desc.camera.fovDeg || DEFAULT_MODEL3D_FOV_DEG;
|
|
89357
|
+
// Orthographic frustum height chosen to match the perspective view at the
|
|
89358
|
+
// target distance (the authored orthographic scale is not yet mapped).
|
|
89359
|
+
const halfHeight = distance * Math.tan((fov * DEG) / 2);
|
|
89360
|
+
let camera;
|
|
89361
|
+
if (desc.camera.kind === 'orthographic') {
|
|
89362
|
+
camera = new three.OrthographicCamera(-halfHeight * aspect, halfHeight * aspect, halfHeight, -halfHeight, 0.1, 1000);
|
|
89363
|
+
}
|
|
89364
|
+
else {
|
|
89365
|
+
camera = new three.PerspectiveCamera(fov, aspect, 0.1, 1000);
|
|
89366
|
+
}
|
|
89367
|
+
camera.position.set(pos[0], pos[1], pos[2]);
|
|
89368
|
+
if (authoredCam) {
|
|
89369
|
+
camera.up.set(desc.camera.up[0], desc.camera.up[1], desc.camera.up[2]);
|
|
89370
|
+
}
|
|
89371
|
+
camera.lookAt(target[0], target[1], target[2]);
|
|
89372
|
+
const lights = desc.lights.map((l) => buildLight(three, l, k, desc.lightsAuthored));
|
|
89373
|
+
const t = desc.transform;
|
|
89374
|
+
return {
|
|
89375
|
+
camera,
|
|
89376
|
+
lights,
|
|
89377
|
+
distance,
|
|
89378
|
+
placeModel(model) {
|
|
89379
|
+
if (!t) {
|
|
89380
|
+
return model;
|
|
89381
|
+
}
|
|
89382
|
+
const group = new three.Group();
|
|
89383
|
+
group.add(model);
|
|
89384
|
+
group.scale.set(t.scale[0], t.scale[1], t.scale[2]);
|
|
89385
|
+
group.rotation.set(t.rotationDeg[0] * DEG, t.rotationDeg[1] * DEG, t.rotationDeg[2] * DEG);
|
|
89386
|
+
const post = scaled(t.postTranslate, k);
|
|
89387
|
+
group.position.set(post[0], post[1], post[2]);
|
|
89388
|
+
return group;
|
|
89389
|
+
},
|
|
89390
|
+
setAspect(next) {
|
|
89391
|
+
if (camera instanceof three.PerspectiveCamera) {
|
|
89392
|
+
camera.aspect = next;
|
|
89393
|
+
}
|
|
89394
|
+
else {
|
|
89395
|
+
camera.left = -halfHeight * next;
|
|
89396
|
+
camera.right = halfHeight * next;
|
|
89397
|
+
}
|
|
89398
|
+
camera.updateProjectionMatrix();
|
|
89399
|
+
},
|
|
89400
|
+
};
|
|
89401
|
+
}
|
|
89402
|
+
|
|
88908
89403
|
/**
|
|
88909
89404
|
* Vanilla three.js GLTF/GLB model scene controller (framework-agnostic).
|
|
88910
89405
|
*
|
|
@@ -88958,7 +89453,6 @@ const THREE_UNAVAILABLE = {
|
|
|
88958
89453
|
setInteractive: () => { },
|
|
88959
89454
|
dispose: () => { },
|
|
88960
89455
|
};
|
|
88961
|
-
const FOV = 50;
|
|
88962
89456
|
/** Dynamically load `three`; returns `null` when the package is not installed. */
|
|
88963
89457
|
async function loadThree() {
|
|
88964
89458
|
try {
|
|
@@ -89009,6 +89503,7 @@ function centerAndFit(three, root) {
|
|
|
89009
89503
|
const center = new three.Vector3();
|
|
89010
89504
|
box.getCenter(center);
|
|
89011
89505
|
root.position.sub(center.multiplyScalar(root.scale.x));
|
|
89506
|
+
return maxDim;
|
|
89012
89507
|
}
|
|
89013
89508
|
/**
|
|
89014
89509
|
* Mount an interactive GLTF/GLB model into `container` and start rendering.
|
|
@@ -89037,16 +89532,6 @@ async function mountModel3D(container, modelUrl, options) {
|
|
|
89037
89532
|
if (options.background) {
|
|
89038
89533
|
scene.background = new three.Color(options.background);
|
|
89039
89534
|
}
|
|
89040
|
-
const camera = new three.PerspectiveCamera(FOV, width / height, 0.1, 1000);
|
|
89041
|
-
camera.position.set(0, 0, 5);
|
|
89042
|
-
camera.lookAt(0, 0, 0);
|
|
89043
|
-
scene.add(new three.AmbientLight(0xffffff, 0.5));
|
|
89044
|
-
const key = new three.DirectionalLight(0xffffff, 1);
|
|
89045
|
-
key.position.set(5, 5, 5);
|
|
89046
|
-
scene.add(key);
|
|
89047
|
-
const fill = new three.DirectionalLight(0xffffff, 0.3);
|
|
89048
|
-
fill.position.set(-3, -3, 2);
|
|
89049
|
-
scene.add(fill);
|
|
89050
89535
|
let gltf;
|
|
89051
89536
|
try {
|
|
89052
89537
|
gltf = await loadGltf(new GltfLoaderCtor(), modelUrl);
|
|
@@ -89057,8 +89542,14 @@ async function mountModel3D(container, modelUrl, options) {
|
|
|
89057
89542
|
return THREE_UNAVAILABLE;
|
|
89058
89543
|
}
|
|
89059
89544
|
const model = gltf.scene;
|
|
89060
|
-
centerAndFit(three, model);
|
|
89061
|
-
scene
|
|
89545
|
+
const maxDim = centerAndFit(three, model);
|
|
89546
|
+
const descriptor = resolveModel3DSceneDescriptor(options.scene);
|
|
89547
|
+
const rig = buildModel3DRig(three, descriptor, width / height, maxDim);
|
|
89548
|
+
const camera = rig.camera;
|
|
89549
|
+
for (const light of rig.lights) {
|
|
89550
|
+
scene.add(light);
|
|
89551
|
+
}
|
|
89552
|
+
scene.add(rig.placeModel(model));
|
|
89062
89553
|
let controls = null;
|
|
89063
89554
|
const OrbitCtrlCtor = await loadOrbitControlsCtor();
|
|
89064
89555
|
const enableControls = (on) => {
|
|
@@ -89067,8 +89558,8 @@ async function mountModel3D(container, modelUrl, options) {
|
|
|
89067
89558
|
controls.enablePan = false;
|
|
89068
89559
|
controls.enableZoom = true;
|
|
89069
89560
|
controls.enableRotate = true;
|
|
89070
|
-
controls.minDistance = 2;
|
|
89071
|
-
controls.maxDistance = 20;
|
|
89561
|
+
controls.minDistance = descriptor.authored ? rig.distance * 0.2 : 2;
|
|
89562
|
+
controls.maxDistance = descriptor.authored ? rig.distance * 4 : 20;
|
|
89072
89563
|
controls.update();
|
|
89073
89564
|
}
|
|
89074
89565
|
else if (!on && controls) {
|
|
@@ -89109,8 +89600,7 @@ async function mountModel3D(container, modelUrl, options) {
|
|
|
89109
89600
|
resize(w, h) {
|
|
89110
89601
|
const nextW = Math.max(1, w);
|
|
89111
89602
|
const nextH = Math.max(1, h);
|
|
89112
|
-
|
|
89113
|
-
camera.updateProjectionMatrix();
|
|
89603
|
+
rig.setAspect(nextW / nextH);
|
|
89114
89604
|
renderer.setSize(nextW, nextH, false);
|
|
89115
89605
|
canvas.style.width = `${nextW}px`;
|
|
89116
89606
|
canvas.style.height = `${nextH}px`;
|
|
@@ -109412,6 +109902,14 @@ const RIBBON_CATALOG_TAIL_TABS = {
|
|
|
109412
109902
|
wordArtStyles: { label: 'WordArt Styles', controls: { gallery: 'WordArt Styles gallery' } },
|
|
109413
109903
|
},
|
|
109414
109904
|
pictureFormat: {
|
|
109905
|
+
adjust: {
|
|
109906
|
+
label: 'Adjust',
|
|
109907
|
+
controls: {
|
|
109908
|
+
corrections: 'Corrections gallery',
|
|
109909
|
+
color: 'Color gallery',
|
|
109910
|
+
artisticEffects: 'Artistic Effects gallery',
|
|
109911
|
+
},
|
|
109912
|
+
},
|
|
109415
109913
|
pictureStyles: {
|
|
109416
109914
|
label: 'Picture Styles',
|
|
109417
109915
|
controls: { gallery: 'Picture Styles gallery', pictureEffects: 'Picture Effects gallery' },
|
|
@@ -110227,7 +110725,7 @@ function paintDefs(paint, id) {
|
|
|
110227
110725
|
}
|
|
110228
110726
|
return { defs: '', fill: safeColor(paint.color) };
|
|
110229
110727
|
}
|
|
110230
|
-
function filterDefs(effects, id) {
|
|
110728
|
+
function filterDefs$1(effects, id) {
|
|
110231
110729
|
if (!effects) {
|
|
110232
110730
|
return { defs: '', attr: '' };
|
|
110233
110731
|
}
|
|
@@ -110265,7 +110763,7 @@ function shapeTileSvg(spec) {
|
|
|
110265
110763
|
const w = spec.width - inset * 2;
|
|
110266
110764
|
const h = spec.height - inset * 2 - (spec.effects?.reflection ? h3(spec) : 0);
|
|
110267
110765
|
const paint = paintDefs(spec.fill, `${id}-f`);
|
|
110268
|
-
const filter = filterDefs(spec.effects, `${id}-x`);
|
|
110766
|
+
const filter = filterDefs$1(spec.effects, `${id}-x`);
|
|
110269
110767
|
const stroke = spec.stroke && spec.stroke.width > 0
|
|
110270
110768
|
? ` stroke="${safeColor(spec.stroke.color, '#000000')}" stroke-width="${num$8(Math.min(spec.stroke.width, 6))}"${spec.stroke.opacity !== undefined && spec.stroke.opacity < 1 ? ` stroke-opacity="${num$8(spec.stroke.opacity)}"` : ''}${spec.stroke.dash ? ` stroke-dasharray="${spec.stroke.dash}"` : ''}`
|
|
110271
110769
|
: '';
|
|
@@ -111087,6 +111585,473 @@ function apply$3(itemId, ctx) {
|
|
|
111087
111585
|
}
|
|
111088
111586
|
const NUMBERING_GALLERY = { build: build$4, apply: apply$3 };
|
|
111089
111587
|
|
|
111588
|
+
/**
|
|
111589
|
+
* The Picture Adjust tile: a small stock "photo" (sky, hill, sun, house) with
|
|
111590
|
+
* the preset's preview filter applied, so each Corrections / Color / Artistic
|
|
111591
|
+
* Effects tile shows what the preset does. A CSS filter string carries most
|
|
111592
|
+
* presets; duotone and black-and-white recolors get a real SVG `<filter>`
|
|
111593
|
+
* because CSS filter functions cannot express them. Built only from catalogue
|
|
111594
|
+
* data, never user input.
|
|
111595
|
+
*
|
|
111596
|
+
* @module render/ribbon-galleries/picture-adjust-tile-svg
|
|
111597
|
+
*/
|
|
111598
|
+
const PICTURE_ADJUST_TILE = { width: 56, height: 44 };
|
|
111599
|
+
/** Characters a CSS filter list may contain; anything else is dropped. */
|
|
111600
|
+
function safeCss(css) {
|
|
111601
|
+
return /^[\w\s().,%+-]*$/u.test(css) ? css : '';
|
|
111602
|
+
}
|
|
111603
|
+
function hexChannels(color) {
|
|
111604
|
+
const hex = safeColor(color, '#000000').replace('#', '');
|
|
111605
|
+
const n = Number.parseInt(hex.length === 6 ? hex : '000000', 16);
|
|
111606
|
+
return [((n >> 16) & 255) / 255, ((n >> 8) & 255) / 255, (n & 255) / 255];
|
|
111607
|
+
}
|
|
111608
|
+
function filterDefs(id, preview) {
|
|
111609
|
+
const lum = '0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0';
|
|
111610
|
+
if (preview.duotone) {
|
|
111611
|
+
const [dark, light] = [hexChannels(preview.duotone[0]), hexChannels(preview.duotone[1])];
|
|
111612
|
+
const table = (i) => `${dark[i].toFixed(3)} ${light[i].toFixed(3)}`;
|
|
111613
|
+
return `<filter id="${id}" color-interpolation-filters="sRGB"><feColorMatrix type="matrix" values="${lum}"/><feComponentTransfer><feFuncR type="table" tableValues="${table(0)}"/><feFuncG type="table" tableValues="${table(1)}"/><feFuncB type="table" tableValues="${table(2)}"/></feComponentTransfer></filter>`;
|
|
111614
|
+
}
|
|
111615
|
+
if (typeof preview.threshold === 'number') {
|
|
111616
|
+
const t = Math.max(0, Math.min(100, preview.threshold)) / 100;
|
|
111617
|
+
const intercept = (-100 * t).toFixed(2);
|
|
111618
|
+
return `<filter id="${id}" color-interpolation-filters="sRGB"><feColorMatrix type="matrix" values="${lum}"/><feComponentTransfer><feFuncR type="linear" slope="100" intercept="${intercept}"/><feFuncG type="linear" slope="100" intercept="${intercept}"/><feFuncB type="linear" slope="100" intercept="${intercept}"/></feComponentTransfer></filter>`;
|
|
111619
|
+
}
|
|
111620
|
+
return '';
|
|
111621
|
+
}
|
|
111622
|
+
/** One tile: the stock photo under `preview`. `key` keeps filter ids unique per tile. */
|
|
111623
|
+
function pictureAdjustTileSvg(key, preview) {
|
|
111624
|
+
const { width: w, height: h } = PICTURE_ADJUST_TILE;
|
|
111625
|
+
const id = `padj-${svgId(key)}`;
|
|
111626
|
+
const filter = filterDefs(`${id}-f`, preview);
|
|
111627
|
+
const css = preview.css ? safeCss(preview.css) : '';
|
|
111628
|
+
const filterAttr = filter ? ` filter="url(#${id}-f)"` : '';
|
|
111629
|
+
const styleAttr = css ? ` style="filter:${css}"` : '';
|
|
111630
|
+
const defs = `<clipPath id="${id}-c"><rect x="2" y="2" width="${w - 4}" height="${h - 4}" rx="2"/></clipPath><linearGradient id="${id}-s" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#5fa8ef"/><stop offset="1" stop-color="#cfe8ff"/></linearGradient>${filter}`;
|
|
111631
|
+
const photo = `<g clip-path="url(#${id}-c)"><g${filterAttr}${styleAttr}>` +
|
|
111632
|
+
`<rect x="2" y="2" width="${w - 4}" height="${h - 4}" fill="url(#${id}-s)"/>` +
|
|
111633
|
+
`<circle cx="${w - 15}" cy="13" r="5" fill="#ffd23f"/>` +
|
|
111634
|
+
`<path d="M2 ${h - 14} Q18 ${h - 26} 32 ${h - 16} T${w - 2} ${h - 14} V${h - 2} H2 Z" fill="#3f9b4a"/>` +
|
|
111635
|
+
`<path d="M2 ${h - 8} Q22 ${h - 18} ${w - 2} ${h - 7} V${h - 2} H2 Z" fill="#2a7a38"/>` +
|
|
111636
|
+
`<rect x="14" y="${h - 20}" width="10" height="8" fill="#d9534f"/>` +
|
|
111637
|
+
`<path d="M12 ${h - 20} L19 ${h - 26} L26 ${h - 20} Z" fill="#7a3b2e"/>` +
|
|
111638
|
+
`</g></g>`;
|
|
111639
|
+
const frame = `<rect x="1.5" y="1.5" width="${w - 3}" height="${h - 3}" rx="2.5" fill="none" stroke="#8a8886" stroke-width="1"/>`;
|
|
111640
|
+
return svgTile(w, h, defs, photo + frame);
|
|
111641
|
+
}
|
|
111642
|
+
|
|
111643
|
+
function isPictureElement(element) {
|
|
111644
|
+
return element?.type === 'image' || element?.type === 'picture';
|
|
111645
|
+
}
|
|
111646
|
+
/** The picture's image effects (empty when it has none). */
|
|
111647
|
+
function pictureEffects(element) {
|
|
111648
|
+
return element.imageEffects ?? {};
|
|
111649
|
+
}
|
|
111650
|
+
/** `imageEffects` merged with `changes`, dropping keys set to `undefined`. */
|
|
111651
|
+
function mergeImageEffects$1(effects, changes) {
|
|
111652
|
+
const merged = { ...effects, ...changes };
|
|
111653
|
+
for (const key of Object.keys(merged)) {
|
|
111654
|
+
if (merged[key] === undefined) {
|
|
111655
|
+
delete merged[key];
|
|
111656
|
+
}
|
|
111657
|
+
}
|
|
111658
|
+
return merged;
|
|
111659
|
+
}
|
|
111660
|
+
/** Case-insensitive `#RRGGBB` equality. */
|
|
111661
|
+
function sameHex(a, b) {
|
|
111662
|
+
return (a ?? '').replace('#', '').toUpperCase() === b.replace('#', '').toUpperCase();
|
|
111663
|
+
}
|
|
111664
|
+
function toSection(galleryId, section, element) {
|
|
111665
|
+
const effects = element ? pictureEffects(element) : {};
|
|
111666
|
+
const out = {
|
|
111667
|
+
id: section.id,
|
|
111668
|
+
...(section.titleKey && { titleKey: section.titleKey }),
|
|
111669
|
+
...(section.title && { title: section.title }),
|
|
111670
|
+
columns: section.columns,
|
|
111671
|
+
tileWidth: PICTURE_ADJUST_TILE.width,
|
|
111672
|
+
tileHeight: PICTURE_ADJUST_TILE.height,
|
|
111673
|
+
items: section.presets.map((preset) => ({
|
|
111674
|
+
id: preset.id,
|
|
111675
|
+
labelKey: preset.labelKey,
|
|
111676
|
+
...(preset.labelParams && { labelParams: preset.labelParams }),
|
|
111677
|
+
label: preset.label,
|
|
111678
|
+
previewSvg: pictureAdjustTileSvg(`${galleryId}-${preset.id}`, preset.preview),
|
|
111679
|
+
...(preset.preview.css && { previewFilter: preset.preview.css }),
|
|
111680
|
+
applied: element !== null && preset.applied(effects),
|
|
111681
|
+
})),
|
|
111682
|
+
};
|
|
111683
|
+
return out;
|
|
111684
|
+
}
|
|
111685
|
+
/** Build a gallery module from its title and its presets (which may depend on the theme). */
|
|
111686
|
+
function adjustGalleryModule(id, labelKey, label, sectionsFor) {
|
|
111687
|
+
return {
|
|
111688
|
+
build(ctx) {
|
|
111689
|
+
const element = isPictureElement(ctx.element) ? ctx.element : null;
|
|
111690
|
+
return {
|
|
111691
|
+
id,
|
|
111692
|
+
labelKey,
|
|
111693
|
+
label,
|
|
111694
|
+
disabled: element === null,
|
|
111695
|
+
sections: sectionsFor(ctx).map((section) => toSection(id, section, element)),
|
|
111696
|
+
};
|
|
111697
|
+
},
|
|
111698
|
+
apply(itemId, ctx) {
|
|
111699
|
+
const element = ctx.element;
|
|
111700
|
+
if (!isPictureElement(element)) {
|
|
111701
|
+
return null;
|
|
111702
|
+
}
|
|
111703
|
+
const preset = sectionsFor(ctx)
|
|
111704
|
+
.flatMap((section) => section.presets)
|
|
111705
|
+
.find((candidate) => candidate.id === itemId);
|
|
111706
|
+
if (!preset) {
|
|
111707
|
+
return null;
|
|
111708
|
+
}
|
|
111709
|
+
const effects = pictureEffects(element);
|
|
111710
|
+
return {
|
|
111711
|
+
kind: 'element',
|
|
111712
|
+
elementId: element.id,
|
|
111713
|
+
patch: {
|
|
111714
|
+
imageEffects: mergeImageEffects$1(effects, preset.changes(effects)),
|
|
111715
|
+
},
|
|
111716
|
+
};
|
|
111717
|
+
},
|
|
111718
|
+
};
|
|
111719
|
+
}
|
|
111720
|
+
|
|
111721
|
+
/**
|
|
111722
|
+
* Picture Format > Adjust > Artistic Effects. Offers exactly the effects the
|
|
111723
|
+
* renderer draws AND core serialises as `a14:artistic*` elements (the
|
|
111724
|
+
* inspector's catalogue minus the recolor/correction entries `grayscale`,
|
|
111725
|
+
* `sepia` and `sharpen`, which OOXML does not store as artistic effects and
|
|
111726
|
+
* which live in the Color and Corrections galleries). A pick writes
|
|
111727
|
+
* `imageEffects.artisticEffect`, the same field the inspector gallery writes.
|
|
111728
|
+
*
|
|
111729
|
+
* @module render/ribbon-galleries/picture-artistic-gallery
|
|
111730
|
+
*/
|
|
111731
|
+
const KEY$4 = 'pptx.gallery.pictureArtisticEffects';
|
|
111732
|
+
/** Catalogue entries that are Color / Corrections settings in OOXML, not artistic effects. */
|
|
111733
|
+
const NOT_ARTISTIC = new Set(['grayscale', 'sepia', 'sharpen']);
|
|
111734
|
+
/**
|
|
111735
|
+
* Gallery names whose a14 element name is not `artistic` + the capitalised
|
|
111736
|
+
* name (core's `GALLERY_TO_A14`). A saved pick reloads under the a14 name.
|
|
111737
|
+
*/
|
|
111738
|
+
const IRREGULAR_A14 = {
|
|
111739
|
+
mosaic: 'artisticMosiaicBubbles',
|
|
111740
|
+
glow_edges: 'artisticGlowEdges',
|
|
111741
|
+
paint: 'artisticPaintBrush',
|
|
111742
|
+
};
|
|
111743
|
+
/** True when a stored `artisticEffect` is gallery effect `name` (either spelling). */
|
|
111744
|
+
function isSameArtisticEffect(stored, name) {
|
|
111745
|
+
if (!stored) {
|
|
111746
|
+
return false;
|
|
111747
|
+
}
|
|
111748
|
+
const a14 = IRREGULAR_A14[name] ?? `artistic${name.charAt(0).toUpperCase()}${name.slice(1)}`;
|
|
111749
|
+
return stored === name || stored === a14;
|
|
111750
|
+
}
|
|
111751
|
+
function artisticPreset(name, labelKey, css) {
|
|
111752
|
+
const none = name === 'none';
|
|
111753
|
+
return {
|
|
111754
|
+
id: none ? 'artisticNone' : name,
|
|
111755
|
+
labelKey,
|
|
111756
|
+
label: name,
|
|
111757
|
+
changes: (fx) => none
|
|
111758
|
+
? { artisticEffect: undefined, artisticParams: undefined, artisticRadius: undefined }
|
|
111759
|
+
: isSameArtisticEffect(fx.artisticEffect, name)
|
|
111760
|
+
? {}
|
|
111761
|
+
: { artisticEffect: name, artisticParams: undefined, artisticRadius: undefined },
|
|
111762
|
+
applied: (fx) => (none ? !fx.artisticEffect : isSameArtisticEffect(fx.artisticEffect, name)),
|
|
111763
|
+
preview: { css },
|
|
111764
|
+
};
|
|
111765
|
+
}
|
|
111766
|
+
/** The effect names this gallery offers, in tile order (`none` first). */
|
|
111767
|
+
const PICTURE_ARTISTIC_EFFECT_NAMES = ARTISTIC_EFFECTS.map(([name]) => name).filter((name) => !NOT_ARTISTIC.has(name));
|
|
111768
|
+
function pictureArtisticSections() {
|
|
111769
|
+
return [
|
|
111770
|
+
{
|
|
111771
|
+
id: 'effects',
|
|
111772
|
+
columns: 4,
|
|
111773
|
+
presets: ARTISTIC_EFFECTS.filter(([name]) => !NOT_ARTISTIC.has(name)).map(([name, labelKey, css]) => artisticPreset(name, labelKey, css)),
|
|
111774
|
+
},
|
|
111775
|
+
];
|
|
111776
|
+
}
|
|
111777
|
+
const PICTURE_ARTISTIC_EFFECTS_GALLERY = adjustGalleryModule('pictureArtisticEffects', `${KEY$4}.title`, 'Artistic Effects', pictureArtisticSections);
|
|
111778
|
+
|
|
111779
|
+
/**
|
|
111780
|
+
* Preset tables for the Picture Format > Adjust galleries (Corrections, Color).
|
|
111781
|
+
* Pure data: each preset carries the value it writes onto the picture's
|
|
111782
|
+
* `imageEffects` (the a14 Corrections / Color fields core already parses,
|
|
111783
|
+
* renders and serialises), in the units the model stores.
|
|
111784
|
+
*
|
|
111785
|
+
* @module render/ribbon-galleries/picture-adjust-catalog
|
|
111786
|
+
*/
|
|
111787
|
+
/** Sharpen/Soften presets in percent: negative softens, positive sharpens. */
|
|
111788
|
+
const SHARPEN_SOFTEN_PERCENTS = [-50, -25, 0, 25, 50];
|
|
111789
|
+
/** Brightness / contrast steps in percent, as PowerPoint's 5x5 grid. */
|
|
111790
|
+
const BRIGHTNESS_CONTRAST_STEPS = [-40, -20, 0, 20, 40];
|
|
111791
|
+
/** Colour saturation presets in percent (100 is unchanged). */
|
|
111792
|
+
const SATURATION_PERCENTS = [0, 33, 66, 100, 133, 166, 200, 300, 400];
|
|
111793
|
+
/** Colour temperature presets in Kelvin (6500 is neutral). */
|
|
111794
|
+
const TEMPERATURES_K = [4700, 5300, 5900, 6500, 7200, 8000, 8800, 9600, 10600];
|
|
111795
|
+
/** `a14:saturation/@sat` percent that leaves the picture unchanged. */
|
|
111796
|
+
const NEUTRAL_SATURATION_PERCENT = 100;
|
|
111797
|
+
/** `a14:colorTemperature/@colorTemp` Kelvin value that leaves the picture unchanged. */
|
|
111798
|
+
const NEUTRAL_TEMPERATURE_K = 6500;
|
|
111799
|
+
/** Black and White thresholds in percent (`a:biLevel/@thresh`). */
|
|
111800
|
+
const BI_LEVEL_THRESHOLDS = [25, 50, 75];
|
|
111801
|
+
/** `a:lum` values of PowerPoint's Washout recolor. */
|
|
111802
|
+
const WASHOUT_LUM = { bright: 70, contrast: -70 };
|
|
111803
|
+
/** Sepia as PowerPoint writes it: a black to warm-tan duotone. */
|
|
111804
|
+
const SEPIA_DUOTONE = { color1: '#000000', color2: '#D9C3A5' };
|
|
111805
|
+
/** Theme accent slots offered as duotone recolors, with fallbacks (Office theme). */
|
|
111806
|
+
const RECOLOR_ACCENTS = [
|
|
111807
|
+
{ key: 'accent1', fallback: '#156082' },
|
|
111808
|
+
{ key: 'accent2', fallback: '#E97132' },
|
|
111809
|
+
{ key: 'accent3', fallback: '#196B24' },
|
|
111810
|
+
{ key: 'accent4', fallback: '#0F9ED5' },
|
|
111811
|
+
{ key: 'accent5', fallback: '#A02B93' },
|
|
111812
|
+
{ key: 'accent6', fallback: '#4EA72E' },
|
|
111813
|
+
];
|
|
111814
|
+
/** Signed percent for a label: `+20`, `-40`, `0`. */
|
|
111815
|
+
function signedPercent(value) {
|
|
111816
|
+
return value > 0 ? `+${value}` : String(value);
|
|
111817
|
+
}
|
|
111818
|
+
function parseHex(color) {
|
|
111819
|
+
const match = /^#?([0-9a-f]{6})$/iu.exec(color.trim());
|
|
111820
|
+
if (!match) {
|
|
111821
|
+
return null;
|
|
111822
|
+
}
|
|
111823
|
+
const n = Number.parseInt(match[1], 16);
|
|
111824
|
+
return [(n >> 16) & 255, (n >> 8) & 255, n & 255];
|
|
111825
|
+
}
|
|
111826
|
+
/** `color` mixed toward `target` by `amount` (0..1), as an upper-case `#RRGGBB`. */
|
|
111827
|
+
function mixHex(color, target, amount) {
|
|
111828
|
+
const a = parseHex(color);
|
|
111829
|
+
const b = parseHex(target);
|
|
111830
|
+
if (!a || !b) {
|
|
111831
|
+
return color;
|
|
111832
|
+
}
|
|
111833
|
+
const channel = (i) => Math.round(a[i] + (b[i] - a[i]) * amount)
|
|
111834
|
+
.toString(16)
|
|
111835
|
+
.padStart(2, '0');
|
|
111836
|
+
return `#${channel(0)}${channel(1)}${channel(2)}`.toUpperCase();
|
|
111837
|
+
}
|
|
111838
|
+
/** The duotone colour pair of an accent recolor: black-to-accent (Dark), shade-to-white (Light). */
|
|
111839
|
+
function accentDuotone(accentHex, variant) {
|
|
111840
|
+
return variant === 'dark'
|
|
111841
|
+
? { color1: '#000000', color2: accentHex.toUpperCase() }
|
|
111842
|
+
: { color1: mixHex(accentHex, '#000000', 0.45), color2: '#FFFFFF' };
|
|
111843
|
+
}
|
|
111844
|
+
/** Resolve accent `slot` from the deck's theme colour map, else the Office fallback. */
|
|
111845
|
+
function resolveAccentHex(themeColorMap, slot) {
|
|
111846
|
+
const value = themeColorMap?.[slot.key];
|
|
111847
|
+
return value && parseHex(value) ? `#${value.replace('#', '')}`.toUpperCase() : slot.fallback;
|
|
111848
|
+
}
|
|
111849
|
+
|
|
111850
|
+
const KEY$3 = 'pptx.gallery.pictureColor';
|
|
111851
|
+
function saturationPreset(percent) {
|
|
111852
|
+
const sat = percent * 1000;
|
|
111853
|
+
const normal = percent === NEUTRAL_SATURATION_PERCENT;
|
|
111854
|
+
return {
|
|
111855
|
+
id: normal ? 'saturationNormal' : `saturation${percent}`,
|
|
111856
|
+
labelKey: normal ? `${KEY$3}.saturationNormal` : `${KEY$3}.saturation`,
|
|
111857
|
+
...(!normal && { labelParams: { amount: percent } }),
|
|
111858
|
+
label: normal ? 'Saturation: 100% (Normal)' : `Saturation: ${percent}%`,
|
|
111859
|
+
changes: () => ({ colorSaturation: normal ? undefined : { sat } }),
|
|
111860
|
+
applied: (fx) => (fx.colorSaturation?.sat ?? NEUTRAL_SATURATION_PERCENT * 1000) === sat,
|
|
111861
|
+
preview: { css: getImageCorrectionsFilterTokens({ colorSaturation: { sat } }).join(' ') },
|
|
111862
|
+
};
|
|
111863
|
+
}
|
|
111864
|
+
function tonePreset(kelvin) {
|
|
111865
|
+
const normal = kelvin === NEUTRAL_TEMPERATURE_K;
|
|
111866
|
+
return {
|
|
111867
|
+
id: normal ? 'toneNormal' : `tone${kelvin}`,
|
|
111868
|
+
labelKey: normal ? `${KEY$3}.toneNormal` : `${KEY$3}.tone`,
|
|
111869
|
+
...(!normal && { labelParams: { kelvin } }),
|
|
111870
|
+
label: normal ? 'Temperature: 6500 K (Normal)' : `Temperature: ${kelvin} K`,
|
|
111871
|
+
changes: () => ({ colorTemperature: normal ? undefined : { colorTemp: kelvin } }),
|
|
111872
|
+
applied: (fx) => (fx.colorTemperature?.colorTemp ?? NEUTRAL_TEMPERATURE_K) === kelvin,
|
|
111873
|
+
preview: {
|
|
111874
|
+
css: getImageCorrectionsFilterTokens({ colorTemperature: { colorTemp: kelvin } }).join(' '),
|
|
111875
|
+
},
|
|
111876
|
+
};
|
|
111877
|
+
}
|
|
111878
|
+
const isWashout = (fx) => fx.lum?.bright === WASHOUT_LUM.bright && fx.lum?.contrast === WASHOUT_LUM.contrast;
|
|
111879
|
+
/** Every recolor field cleared, so a recolor pick replaces the previous one. */
|
|
111880
|
+
function recolorReset(fx) {
|
|
111881
|
+
return {
|
|
111882
|
+
grayscale: undefined,
|
|
111883
|
+
grayscaleRawXml: undefined,
|
|
111884
|
+
duotone: undefined,
|
|
111885
|
+
biLevel: undefined,
|
|
111886
|
+
biLevelRawXml: undefined,
|
|
111887
|
+
colorWash: undefined,
|
|
111888
|
+
...(isWashout(fx) && { lum: undefined }),
|
|
111889
|
+
};
|
|
111890
|
+
}
|
|
111891
|
+
function duotonePreset(id, labelKey, label, colors, labelParams) {
|
|
111892
|
+
return {
|
|
111893
|
+
id,
|
|
111894
|
+
labelKey,
|
|
111895
|
+
...(labelParams && { labelParams }),
|
|
111896
|
+
label,
|
|
111897
|
+
changes: (fx) => ({ ...recolorReset(fx), duotone: { ...colors } }),
|
|
111898
|
+
applied: (fx) => sameHex(fx.duotone?.color1, colors.color1) && sameHex(fx.duotone?.color2, colors.color2),
|
|
111899
|
+
preview: { duotone: [colors.color1, colors.color2] },
|
|
111900
|
+
};
|
|
111901
|
+
}
|
|
111902
|
+
function recolorPresets(themeColorMap) {
|
|
111903
|
+
const none = {
|
|
111904
|
+
id: 'recolorNone',
|
|
111905
|
+
labelKey: `${KEY$3}.recolorNone`,
|
|
111906
|
+
label: 'No Recolor',
|
|
111907
|
+
changes: recolorReset,
|
|
111908
|
+
applied: (fx) => !fx.grayscale && !fx.duotone && typeof fx.biLevel !== 'number' && !isWashout(fx),
|
|
111909
|
+
preview: {},
|
|
111910
|
+
};
|
|
111911
|
+
const grayscale = {
|
|
111912
|
+
id: 'recolorGrayscale',
|
|
111913
|
+
labelKey: `${KEY$3}.recolorGrayscale`,
|
|
111914
|
+
label: 'Grayscale',
|
|
111915
|
+
changes: (fx) => ({ ...recolorReset(fx), grayscale: true }),
|
|
111916
|
+
applied: (fx) => Boolean(fx.grayscale),
|
|
111917
|
+
preview: { css: 'grayscale(100%)' },
|
|
111918
|
+
};
|
|
111919
|
+
const washout = {
|
|
111920
|
+
id: 'recolorWashout',
|
|
111921
|
+
labelKey: `${KEY$3}.recolorWashout`,
|
|
111922
|
+
label: 'Washout',
|
|
111923
|
+
changes: (fx) => ({ ...recolorReset(fx), lum: { ...WASHOUT_LUM } }),
|
|
111924
|
+
applied: isWashout,
|
|
111925
|
+
preview: { css: 'brightness(1.7) contrast(0.3)' },
|
|
111926
|
+
};
|
|
111927
|
+
const biLevels = BI_LEVEL_THRESHOLDS.map((percent) => ({
|
|
111928
|
+
id: `recolorBlackWhite${percent}`,
|
|
111929
|
+
labelKey: `${KEY$3}.recolorBlackWhite`,
|
|
111930
|
+
labelParams: { amount: percent },
|
|
111931
|
+
label: `Black and White: ${percent}%`,
|
|
111932
|
+
changes: (fx) => ({ ...recolorReset(fx), biLevel: percent }),
|
|
111933
|
+
applied: (fx) => fx.biLevel === percent,
|
|
111934
|
+
preview: { threshold: percent },
|
|
111935
|
+
}));
|
|
111936
|
+
const accents = RECOLOR_ACCENTS.flatMap((slot, index) => {
|
|
111937
|
+
const hex = resolveAccentHex(themeColorMap, slot);
|
|
111938
|
+
const n = index + 1;
|
|
111939
|
+
return ['dark', 'light'].map((variant) => duotonePreset(`recolorAccent${n}${variant === 'dark' ? 'Dark' : 'Light'}`, `${KEY$3}.recolorAccent${variant === 'dark' ? 'Dark' : 'Light'}`, `Accent ${n}, ${variant === 'dark' ? 'Dark' : 'Light'}`, accentDuotone(hex, variant), { n }));
|
|
111940
|
+
});
|
|
111941
|
+
return [
|
|
111942
|
+
none,
|
|
111943
|
+
grayscale,
|
|
111944
|
+
duotonePreset('recolorSepia', `${KEY$3}.recolorSepia`, 'Sepia', { ...SEPIA_DUOTONE }),
|
|
111945
|
+
washout,
|
|
111946
|
+
...biLevels,
|
|
111947
|
+
...accents,
|
|
111948
|
+
];
|
|
111949
|
+
}
|
|
111950
|
+
/** The Color gallery's sections; accent recolors follow the deck theme. */
|
|
111951
|
+
function pictureColorSections(ctx) {
|
|
111952
|
+
return [
|
|
111953
|
+
{
|
|
111954
|
+
id: 'saturation',
|
|
111955
|
+
titleKey: `${KEY$3}.saturationTitle`,
|
|
111956
|
+
title: 'Color Saturation',
|
|
111957
|
+
columns: 3,
|
|
111958
|
+
presets: SATURATION_PERCENTS.map(saturationPreset),
|
|
111959
|
+
},
|
|
111960
|
+
{
|
|
111961
|
+
id: 'tone',
|
|
111962
|
+
titleKey: `${KEY$3}.toneTitle`,
|
|
111963
|
+
title: 'Color Tone',
|
|
111964
|
+
columns: 3,
|
|
111965
|
+
presets: TEMPERATURES_K.map(tonePreset),
|
|
111966
|
+
},
|
|
111967
|
+
{
|
|
111968
|
+
id: 'recolor',
|
|
111969
|
+
titleKey: `${KEY$3}.recolorTitle`,
|
|
111970
|
+
title: 'Recolor',
|
|
111971
|
+
columns: 4,
|
|
111972
|
+
presets: recolorPresets(ctx.themeColorMap),
|
|
111973
|
+
},
|
|
111974
|
+
];
|
|
111975
|
+
}
|
|
111976
|
+
const PICTURE_COLOR_GALLERY = adjustGalleryModule('pictureColor', `${KEY$3}.title`, 'Color', pictureColorSections);
|
|
111977
|
+
|
|
111978
|
+
/**
|
|
111979
|
+
* Picture Format > Adjust > Corrections: the Sharpen/Soften presets and
|
|
111980
|
+
* PowerPoint's 5x5 Brightness/Contrast grid (-40% .. +40%). Presets write the
|
|
111981
|
+
* a14 Corrections fields (`sharpenSoften`, `brightnessContrast`) core already
|
|
111982
|
+
* parses, renders and serialises. The neutral preset removes the field.
|
|
111983
|
+
*
|
|
111984
|
+
* @module render/ribbon-galleries/picture-corrections-gallery
|
|
111985
|
+
*/
|
|
111986
|
+
const KEY$2 = 'pptx.gallery.pictureCorrections';
|
|
111987
|
+
function sharpenPreset(percent) {
|
|
111988
|
+
const amount = percent * 1000;
|
|
111989
|
+
const abs = Math.abs(percent);
|
|
111990
|
+
const id = percent < 0 ? `soften${abs}` : percent > 0 ? `sharpen${abs}` : 'sharpenNormal';
|
|
111991
|
+
const css = percent < 0
|
|
111992
|
+
? getImageCorrectionsFilterTokens({ sharpenSoften: { amount } }).join(' ')
|
|
111993
|
+
: // A sharpen is an SVG convolution at render time; a contrast lift previews it.
|
|
111994
|
+
percent > 0
|
|
111995
|
+
? `contrast(${1 + percent / 200})`
|
|
111996
|
+
: '';
|
|
111997
|
+
return {
|
|
111998
|
+
id,
|
|
111999
|
+
labelKey: percent === 0 ? `${KEY$2}.sharpenNormal` : `${KEY$2}.${percent < 0 ? 'soften' : 'sharpen'}`,
|
|
112000
|
+
...(percent !== 0 && { labelParams: { amount: abs } }),
|
|
112001
|
+
label: percent === 0 ? 'Sharpen: 0% (Normal)' : `${percent < 0 ? 'Soften' : 'Sharpen'}: ${abs}%`,
|
|
112002
|
+
changes: () => ({ sharpenSoften: percent === 0 ? undefined : { amount } }),
|
|
112003
|
+
applied: (fx) => (fx.sharpenSoften?.amount ?? 0) === amount,
|
|
112004
|
+
preview: { css },
|
|
112005
|
+
};
|
|
112006
|
+
}
|
|
112007
|
+
function brightnessContrastPreset(brightness, contrast) {
|
|
112008
|
+
const bright = brightness * 1000;
|
|
112009
|
+
const cont = contrast * 1000;
|
|
112010
|
+
const normal = brightness === 0 && contrast === 0;
|
|
112011
|
+
return {
|
|
112012
|
+
id: normal ? 'bcNormal' : `bc_b${brightness}_c${contrast}`,
|
|
112013
|
+
labelKey: normal ? `${KEY$2}.brightnessContrastNormal` : `${KEY$2}.brightnessContrast`,
|
|
112014
|
+
...(!normal && {
|
|
112015
|
+
labelParams: { brightness: signedPercent(brightness), contrast: signedPercent(contrast) },
|
|
112016
|
+
}),
|
|
112017
|
+
label: normal
|
|
112018
|
+
? 'Brightness: 0% Contrast: 0% (Normal)'
|
|
112019
|
+
: `Brightness: ${signedPercent(brightness)}% Contrast: ${signedPercent(contrast)}%`,
|
|
112020
|
+
changes: () => ({
|
|
112021
|
+
brightnessContrast: normal
|
|
112022
|
+
? undefined
|
|
112023
|
+
: { ...(bright !== 0 && { bright }), ...(cont !== 0 && { contrast: cont }) },
|
|
112024
|
+
}),
|
|
112025
|
+
applied: (fx) => (fx.brightnessContrast?.bright ?? 0) === bright &&
|
|
112026
|
+
(fx.brightnessContrast?.contrast ?? 0) === cont,
|
|
112027
|
+
preview: {
|
|
112028
|
+
css: getImageCorrectionsFilterTokens({
|
|
112029
|
+
brightnessContrast: { bright, contrast: cont },
|
|
112030
|
+
}).join(' '),
|
|
112031
|
+
},
|
|
112032
|
+
};
|
|
112033
|
+
}
|
|
112034
|
+
/** The Corrections gallery's sections. */
|
|
112035
|
+
function pictureCorrectionsSections() {
|
|
112036
|
+
return [
|
|
112037
|
+
{
|
|
112038
|
+
id: 'sharpenSoften',
|
|
112039
|
+
titleKey: `${KEY$2}.sharpenSoften`,
|
|
112040
|
+
title: 'Sharpen/Soften',
|
|
112041
|
+
columns: 5,
|
|
112042
|
+
presets: SHARPEN_SOFTEN_PERCENTS.map(sharpenPreset),
|
|
112043
|
+
},
|
|
112044
|
+
{
|
|
112045
|
+
id: 'brightnessContrast',
|
|
112046
|
+
titleKey: `${KEY$2}.brightnessContrastTitle`,
|
|
112047
|
+
title: 'Brightness/Contrast',
|
|
112048
|
+
columns: 5,
|
|
112049
|
+
presets: BRIGHTNESS_CONTRAST_STEPS.flatMap((brightness) => BRIGHTNESS_CONTRAST_STEPS.map((contrast) => brightnessContrastPreset(brightness, contrast))),
|
|
112050
|
+
},
|
|
112051
|
+
];
|
|
112052
|
+
}
|
|
112053
|
+
const PICTURE_CORRECTIONS_GALLERY = adjustGalleryModule('pictureCorrections', `${KEY$2}.title`, 'Corrections', pictureCorrectionsSections);
|
|
112054
|
+
|
|
111090
112055
|
/**
|
|
111091
112056
|
* The Picture Styles tile: a small stock "photo" (sky, hill and sun) cut to
|
|
111092
112057
|
* the style's geometry, framed, shadowed, reflected, soft-edged and tilted
|
|
@@ -114463,6 +115428,9 @@ const MODULES = {
|
|
|
114463
115428
|
shapeEffects: SHAPE_EFFECTS_GALLERY,
|
|
114464
115429
|
wordArtStyles: WORDART_STYLES_GALLERY,
|
|
114465
115430
|
pictureStyles: PICTURE_STYLES_GALLERY,
|
|
115431
|
+
pictureCorrections: PICTURE_CORRECTIONS_GALLERY,
|
|
115432
|
+
pictureColor: PICTURE_COLOR_GALLERY,
|
|
115433
|
+
pictureArtisticEffects: PICTURE_ARTISTIC_EFFECTS_GALLERY,
|
|
114466
115434
|
bullets: BULLETS_GALLERY,
|
|
114467
115435
|
numbering: NUMBERING_GALLERY,
|
|
114468
115436
|
tableStyles: TABLE_STYLES_GALLERY,
|
|
@@ -114514,6 +115482,24 @@ const CONTEXTUAL_TAB_GROUPS = {
|
|
|
114514
115482
|
},
|
|
114515
115483
|
],
|
|
114516
115484
|
pictureFormat: [
|
|
115485
|
+
{
|
|
115486
|
+
group: 'pictureFormat.adjust',
|
|
115487
|
+
labelKey: 'pptx.ribbon.groupAdjust',
|
|
115488
|
+
label: 'Adjust',
|
|
115489
|
+
galleries: [
|
|
115490
|
+
{
|
|
115491
|
+
gallery: 'pictureCorrections',
|
|
115492
|
+
control: 'pictureFormat.adjust.corrections',
|
|
115493
|
+
mode: 'dropdown',
|
|
115494
|
+
},
|
|
115495
|
+
{ gallery: 'pictureColor', control: 'pictureFormat.adjust.color', mode: 'dropdown' },
|
|
115496
|
+
{
|
|
115497
|
+
gallery: 'pictureArtisticEffects',
|
|
115498
|
+
control: 'pictureFormat.adjust.artisticEffects',
|
|
115499
|
+
mode: 'dropdown',
|
|
115500
|
+
},
|
|
115501
|
+
],
|
|
115502
|
+
},
|
|
114517
115503
|
{
|
|
114518
115504
|
group: 'pictureFormat.pictureStyles',
|
|
114519
115505
|
labelKey: 'pptx.ribbon.groupPictureStyles',
|
|
@@ -117483,8 +118469,8 @@ function resetThreeRendererHostForTests() {
|
|
|
117483
118469
|
}
|
|
117484
118470
|
|
|
117485
118471
|
const loaders = {
|
|
117486
|
-
chart: async () => (await import('./pptx-angular-viewer-chart-3d-view-scene-
|
|
117487
|
-
smartart: async () => (await import('./pptx-angular-viewer-view-scene-
|
|
118472
|
+
chart: async () => (await import('./pptx-angular-viewer-chart-3d-view-scene-DNVnaejM.mjs')).mountChart3DView,
|
|
118473
|
+
smartart: async () => (await import('./pptx-angular-viewer-view-scene-Dj_JE1AM.mjs')).mountSmartArt3DView,
|
|
117488
118474
|
};
|
|
117489
118475
|
/** Resolve the scene factory for a spec kind. */
|
|
117490
118476
|
async function loadThreeViewScene(kind) {
|
|
@@ -127659,7 +128645,7 @@ function createLocalStorageBackend(namespace) {
|
|
|
127659
128645
|
/** Try IndexedDB first; fall back to localStorage on any failure. */
|
|
127660
128646
|
async function resolveBackend(dbName, namespace) {
|
|
127661
128647
|
try {
|
|
127662
|
-
const { openChatDb, createIdbBackend } = await import('./pptx-angular-viewer-chat-history-idb-
|
|
128648
|
+
const { openChatDb, createIdbBackend } = await import('./pptx-angular-viewer-chat-history-idb-MBA8GX9Z.mjs');
|
|
127663
128649
|
const db = await openChatDb(dbName);
|
|
127664
128650
|
return createIdbBackend(db);
|
|
127665
128651
|
}
|
|
@@ -144763,6 +145749,19 @@ function deriveModel3DBlobUrl(element) {
|
|
|
144763
145749
|
const model = element;
|
|
144764
145750
|
return modelDataToBlobUrl(model.modelData, model.modelMimeType);
|
|
144765
145751
|
}
|
|
145752
|
+
/**
|
|
145753
|
+
* Options handed to the shared `mountModel3D` controller: size, interactivity
|
|
145754
|
+
* and the element's authored camera/transform/lights (`scene`, `undefined`
|
|
145755
|
+
* keeps the default framing).
|
|
145756
|
+
*/
|
|
145757
|
+
function buildModel3DMountOptions(element, interactive) {
|
|
145758
|
+
return {
|
|
145759
|
+
width: element.width,
|
|
145760
|
+
height: element.height,
|
|
145761
|
+
interactive,
|
|
145762
|
+
scene: element.type === 'model3d' ? element.scene : undefined,
|
|
145763
|
+
};
|
|
145764
|
+
}
|
|
144766
145765
|
|
|
144767
145766
|
/**
|
|
144768
145767
|
* Model3DRendererComponent: Angular Model3D renderer with interactive 3D.
|
|
@@ -144867,7 +145866,7 @@ class Model3DRendererComponent {
|
|
|
144867
145866
|
if (this.mountedUrl === url && this.handle) {
|
|
144868
145867
|
return;
|
|
144869
145868
|
}
|
|
144870
|
-
this.mount(fn, container, url
|
|
145869
|
+
this.mount(fn, container, url);
|
|
144871
145870
|
});
|
|
144872
145871
|
// Push interactivity toggles to the live handle without re-mounting.
|
|
144873
145872
|
effect(() => {
|
|
@@ -144900,12 +145899,12 @@ class Model3DRendererComponent {
|
|
|
144900
145899
|
this.failed.set(true);
|
|
144901
145900
|
}
|
|
144902
145901
|
}
|
|
144903
|
-
mount(fn, container, url
|
|
145902
|
+
mount(fn, container, url) {
|
|
144904
145903
|
this.teardownHandle();
|
|
144905
|
-
const
|
|
145904
|
+
const options = buildModel3DMountOptions(this.element(), this.interactive());
|
|
144906
145905
|
const mountedUrl = url;
|
|
144907
145906
|
this.mountedUrl = mountedUrl;
|
|
144908
|
-
void fn(container, url,
|
|
145907
|
+
void fn(container, url, options).then((handle) => {
|
|
144909
145908
|
// A newer mount (or teardown) superseded this one while loading.
|
|
144910
145909
|
if (this.mountedUrl !== mountedUrl) {
|
|
144911
145910
|
handle.dispose();
|
|
@@ -168466,47 +169465,52 @@ const REPEAT_MODE_OPTIONS = [
|
|
|
168466
169465
|
];
|
|
168467
169466
|
/** Direction options for directional presets (fly in/out, wipe). */
|
|
168468
169467
|
const DIRECTION_OPTIONS = [
|
|
168469
|
-
{
|
|
169468
|
+
{
|
|
169469
|
+
value: 'fromTop',
|
|
169470
|
+
label: 'From Top',
|
|
169471
|
+
labelKey: ANIMATION_DIRECTION_LABEL_KEYS.fromTop,
|
|
169472
|
+
arrow: '↓',
|
|
169473
|
+
},
|
|
168470
169474
|
{
|
|
168471
169475
|
value: 'fromBottom',
|
|
168472
169476
|
label: 'From Bottom',
|
|
168473
|
-
labelKey:
|
|
169477
|
+
labelKey: ANIMATION_DIRECTION_LABEL_KEYS.fromBottom,
|
|
168474
169478
|
arrow: '↑',
|
|
168475
169479
|
},
|
|
168476
169480
|
{
|
|
168477
169481
|
value: 'fromLeft',
|
|
168478
169482
|
label: 'From Left',
|
|
168479
|
-
labelKey:
|
|
169483
|
+
labelKey: ANIMATION_DIRECTION_LABEL_KEYS.fromLeft,
|
|
168480
169484
|
arrow: '→',
|
|
168481
169485
|
},
|
|
168482
169486
|
{
|
|
168483
169487
|
value: 'fromRight',
|
|
168484
169488
|
label: 'From Right',
|
|
168485
|
-
labelKey:
|
|
169489
|
+
labelKey: ANIMATION_DIRECTION_LABEL_KEYS.fromRight,
|
|
168486
169490
|
arrow: '←',
|
|
168487
169491
|
},
|
|
168488
169492
|
{
|
|
168489
169493
|
value: 'fromTopLeft',
|
|
168490
169494
|
label: 'From Top Left',
|
|
168491
|
-
labelKey:
|
|
169495
|
+
labelKey: ANIMATION_DIRECTION_LABEL_KEYS.fromTopLeft,
|
|
168492
169496
|
arrow: '↘',
|
|
168493
169497
|
},
|
|
168494
169498
|
{
|
|
168495
169499
|
value: 'fromTopRight',
|
|
168496
169500
|
label: 'From Top Right',
|
|
168497
|
-
labelKey:
|
|
169501
|
+
labelKey: ANIMATION_DIRECTION_LABEL_KEYS.fromTopRight,
|
|
168498
169502
|
arrow: '↙',
|
|
168499
169503
|
},
|
|
168500
169504
|
{
|
|
168501
169505
|
value: 'fromBottomLeft',
|
|
168502
169506
|
label: 'From Bottom Left',
|
|
168503
|
-
labelKey:
|
|
169507
|
+
labelKey: ANIMATION_DIRECTION_LABEL_KEYS.fromBottomLeft,
|
|
168504
169508
|
arrow: '↗',
|
|
168505
169509
|
},
|
|
168506
169510
|
{
|
|
168507
169511
|
value: 'fromBottomRight',
|
|
168508
169512
|
label: 'From Bottom Right',
|
|
168509
|
-
labelKey:
|
|
169513
|
+
labelKey: ANIMATION_DIRECTION_LABEL_KEYS.fromBottomRight,
|
|
168510
169514
|
arrow: '↖',
|
|
168511
169515
|
},
|
|
168512
169516
|
];
|
|
@@ -173644,7 +174648,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
173644
174648
|
}], propDecorators: { canEdit: [{ type: i0.Input, args: [{ isSignal: true, alias: "canEdit", required: false }] }], slideIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideIndex", required: false }] }], selectedElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedElement", required: false }] }] } });
|
|
173645
174649
|
|
|
173646
174650
|
// Generated by scripts/inline-shared.mjs from package.json. Do not edit.
|
|
173647
|
-
const PPTX_ANGULAR_VIEWER_VERSION = "4.
|
|
174651
|
+
const PPTX_ANGULAR_VIEWER_VERSION = "4.13.0";
|
|
173648
174652
|
|
|
173649
174653
|
/**
|
|
173650
174654
|
* account-page.component.ts: File > Account content.
|
|
@@ -211973,5 +212977,5 @@ function cn(...values) {
|
|
|
211973
212977
|
* Generated bundle index. Do not edit.
|
|
211974
212978
|
*/
|
|
211975
212979
|
|
|
211976
|
-
export { AiProposalCardComponent as $, smartArt3DEyeInDiagram as A, resolveSmartArt3DLightModel as B, AFTER_ANIMATION_VALUES as C, DEFAULT_PALETTE$1 as D, ALIGN_OPTIONS as E, ANIMATION_PRESET_CATEGORIES as F, AUDIENCE_HASH as G, AUDIENCE_NONCE_KEY as H, AVATAR_COLOR_SWATCHES as I, AXIS_LABEL_COLOR as J, AccessibilityPanelComponent as K, AccessibilityService as L, AccessibilityTextPanelComponent as M, NO_THREE_VIEW_OVERFLOW as N, AccountPageComponent as O, ActionSettingsPanelComponent as P, AdvancedChartEditorComponent as Q, AiChangeOverlayComponent as R, AiChatPanelComponent as S, AiChatService as T, AiComposerComponent as U, AiFocusBarComponent as V, AiFocusHighlightOverlayComponent as W, AiHistoryMenuComponent as X, AiHistoryService as Y, AiMessageListComponent as Z, AiPanelStore as _, appendChartLegendSvg as a, ELEMENT_CONTEXT_MENU_COMMAND_IDS as a$, AiSettingsSectionComponent as a0, AiToolCallCardComponent as a1, AnimationAuthorPanelComponent as a2, AnimationPanelComponent as a3, AnimationPlaybackService as a4, AutosaveRecoveryDialogComponent as a5, AutosaveService as a6, BACKSTAGE_CARD_IDS as a7, BACKSTAGE_PAGE_IDS as a8, BroadcastDialogComponent as a9, CommentsService as aA, ComparePanelComponent as aB, ConnectorRendererComponent as aC, ConnectorTextOverlayComponent as aD, CustomShowsComponent as aE, DEFAULT_BOUNDS as aF, DEFAULT_BROADCAST_SERVER_URL as aG, DEFAULT_CANVAS_HEIGHT as aH, DEFAULT_CANVAS_WIDTH as aI, DEFAULT_COLOR_SCHEME as aJ, DEFAULT_FILL_COLOR$1 as aK, DEFAULT_LAYOUT as aL, DEFAULT_MORPH_DURATION_MS as aM, DEFAULT_PATTERN_FILL_PRESET as aN, DEFAULT_PRINT_SETTINGS as aO, DEFAULT_SLIDE_BACKGROUND as aP, DEFAULT_STROKE_COLOR as aQ, DEFAULT_STYLE as aR, DEFAULT_TABLE_ROW_HEIGHT as aS, DEFAULT_TEXT_COLOR$2 as aT, DEFAULT_VIEWER_PROFILE as aU, DIRECTIONAL_PRESETS as aV, DIRECTION_OPTIONS as aW, DocumentPropertiesCardComponent as aX, EASE as aY, EDITOR_SHORTCUT_ACTION_IDS as aZ, EFFECT_SOUND_CATALOGUE as a_, CANVAS_CONTEXT_MENU_COMMAND_IDS as aa, CHART_EDITOR_STYLES as ab, CINEMATIC_TRANSITION_KEYFRAMES as ac, CURSOR_PALETTE as ad, CanvasFitService as ae, ChartAxisOptionsComponent as af, ChartAxisStyleOptionsComponent as ag, ChartComboTypeOptionsComponent as ah, ChartDataEditorComponent as ai, ChartDataLabelOptionsComponent as aj, ChartDatapointMarkerOptionsComponent as ak, ChartDatapointOptionsComponent as al, ChartDisplayOptionsComponent as am, ChartElementViewComponent as an, ChartErrorBarOptionsComponent as ao, ChartMarkerOptionsComponent as ap, ChartPartSelectionService as aq, ChartPrimitivesComponent as ar, ChartRendererComponent as as, ChartTrendlineOptionsComponent as at, ChartTypeSelectorComponent as au, CollaborationCursorsComponent as av, CollaborationService as aw, ColorChangedImageComponent as ax, CommentMarkersOverlayComponent as ay, CommentsPanelComponent as az, renderChartTextSvg as b, NotesToolbarComponent as b$, EMBEDDED_FONTS_STYLE_ID as b0, EMPHASIS_PRESETS as b1, ENTRANCE_PRESETS as b2, TEMPLATES as b3, EXIT_PRESETS as b4, EditorContextMenuComponent as b5, EditorHistory as b6, EditorStateService as b7, EditorToolbarComponent as b8, EffectsPanelComponent as b9, InsertSmartArtDialogComponent as bA, InspectorPaneHeaderComponent as bB, InspectorPanelComponent as bC, IsMobileService as bD, KeepAnnotationsDialogComponent as bE, LOCALE_CATALOG as bF, LONG_PRESS_DURATION_MS as bG, LONG_PRESS_MOVE_TOLERANCE_PX as bH, LoadContentService as bI, LocalPresencePublisher as bJ, MAX_ZOOM_SCALE as bK, MIN_ZOOM_SCALE as bL, MOTION_PATH_COLUMNS as bM, MediaPreviewComponent as bN, MediaPropertiesPanelComponent as bO, MediaRendererComponent as bP, MediaTrimTimelineComponent as bQ, MobileBottomBarComponent as bR, MobileMenuSheetComponent as bS, MobilePresenterViewComponent as bT, MobileSheetComponent as bU, MobileSlidesSheetComponent as bV, MobileToolbarComponent as bW, ModalDialogComponent as bX, Model3DRendererComponent as bY, NotesHandoutCardComponent as bZ, NotesPanelComponent as b_, ElementRendererComponent as ba, EmbeddedFontsService as bb, EncryptedFileDialogComponent as bc, EquationEditorDialogComponent as bd, EquationRendererComponent as be, EquationTemplateGalleryComponent as bf, ExportProgressModalComponent as bg, ExportService as bh, FieldContextService as bi, FindBarComponent as bj, FindReplaceBarComponent as bk, FollowModeBarComponent as bl, FontEmbeddingListComponent as bm, FontEmbeddingPanelComponent as bn, GALLERY_THEME_PRESETS as bo, GOOGLE_WEBFONTS_LINK_ID as bp, GRIDLINE_COLOR$1 as bq, GoogleWebfontsService as br, GradientPickerComponent as bs, HANDOUT_OPTIONS as bt, HeaderFooterDialogComponent as bu, HyperlinkDialogComponent as bv, INSTANT as bw, ImagePropertiesPanelComponent as bx, InkDrawingService as by, InkRendererComponent as bz, createSvgEl as c, RibbonSlideshowSectionComponent as c$, OPTIONS_PAGE_IDS as c0, OPTIONS_SECTION_IDS as c1, OPTIONS_SETTING_IDS as c2, OleRendererComponent as c3, OutlineViewOverlayComponent as c4, P14_TRANSITION_KEYFRAMES as c5, P14_TRANSITION_KEYFRAMES_2 as c6, P14_TRANSITION_KEYFRAMES_ALL as c7, POWER_POINT_VIEWER_PROVIDERS as c8, PPTX_OPEN_ACCEPT as c9, RESIZE_HANDLES as cA, RIBBON_TAB_IDS as cB, RULER_FONT_SIZE as cC, RULER_THICKNESS as cD, ReadingViewOverlayComponent as cE, RemoteSelectionOverlayComponent as cF, Rendering3DService as cG, RibbonAnimationGalleryComponent as cH, RibbonAnimationsSectionComponent as cI, RibbonArrangeSectionComponent as cJ, RibbonColorPopoverComponent as cK, RibbonComponent as cL, RibbonDesignSectionComponent as cM, RibbonDrawSectionComponent as cN, RibbonDrawingGroupComponent as cO, RibbonEditingSectionComponent as cP, RibbonFileSectionComponent as cQ, RibbonFontControlsComponent as cR, RibbonHomeSectionComponent as cS, RibbonHyperlinkButtonComponent as cT, RibbonInsertFieldsComponent as cU, RibbonInsertSectionComponent as cV, RibbonMotionPathGalleryComponent as cW, RibbonParagraphControlsComponent as cX, RibbonPrimaryRowComponent as cY, RibbonReviewSectionComponent as cZ, RibbonShapeExtrasComponent as c_, PRESENTATION_OPEN_EXTENSIONS as ca, PRESENTER_CHANNEL_NAME as cb, PRESENTER_MSG_ORIGIN as cc, PRESENTER_TIMER_SEGMENT_MS as cd, PX_PER_CM as ce, PX_PER_INCH as cf, PasswordProtectionDialogComponent as cg, PasswordStrengthMeterComponent as ch, PowerPointViewerComponent as ci, PresentToolbarAutoHide as cj, PresentationAnnotationOverlayComponent as ck, PresentationAnnotationsService as cl, PresentationOverlayComponent as cm, PresentationPropertiesPanelComponent as cn, PresentationSettingsCardComponent as co, PresentationSubtitleBarComponent as cp, PresentationToolbarComponent as cq, PresentationTransitionOverlayComponent as cr, PresenterViewComponent as cs, PresenterWindowService as ct, PrintDialogComponent as cu, PrintService as cv, PrintSettingsPanelComponent as cw, PropertiesDialogComponent as cx, RANDOM_ELIGIBLE_TYPES as cy, REPEAT_MODE_OPTIONS as cz, buildBarChart3DHoverTooltip as d, TableSelectionService as d$, RibbonTransitionsSectionComponent as d0, RibbonViewSectionComponent as d1, RulerGuidesService as d2, SEQUENCE_OPTIONS as d3, SEVERITY_GROUPS as d4, SEVERITY_LABELS as d5, DEFAULT_TRANSITION_DURATION_MS$1 as d6, SHORTCUT_REFERENCE_ITEMS as d7, SLIDE_TRANSITION_KEYFRAMES as d8, SLIDE_TRANSITION_KEYFRAMES_CSS as d9, SlideDiffThumbnailsComponent as dA, SlideSizeCardComponent as dB, SlideSorterOverlayComponent as dC, SlideThemeOverridePanelComponent as dD, SlideTransitionCardComponent as dE, SlidesPanelComponent as dF, SmartArt3DRendererComponent as dG, SmartArtPreviewComponent as dH, SmartArtPropertiesComponent as dI, SmartArtRendererComponent as dJ, StatusBarComponent as dK, TABLE_STRUCTURE_TOGGLES as dL, TEXT_3D_BOTTOM_BEVEL_KEYS as dM, TEXT_3D_TOP_BEVEL_KEYS as dN, TEXT_DIRECTION_OPTIONS$1 as dO, THEME_CATALOG as dP, TIMING_CURVE_OPTIONS as dQ, TOOLBAR_BUTTON_IDS as dR, TRANSITION_SPEED_DURATION_MS as dS, TRIGGER_OPTIONS as dT, TYPE_LABELS as dU, TableCellAdvancedFillComponent as dV, TableCellFormattingComponent as dW, TableDataEditorComponent as dX, TablePropertiesComponent as dY, TableRendererComponent as dZ, TableResizeOverlayComponent as d_, DEFAULT_PALETTE as da, PALETTES as db, SMART_ART_COLOR_SCHEMES as dc, SMART_ART_STYLE_OPTIONS as dd, SUB_ITEM_LABEL as de, SVG_WARP_PRESETS as df, SWIPE_MAX_VERTICAL_PX as dg, SWIPE_THRESHOLD_PX as dh, SelectionPaneComponent as di, SetUpSlideShowDialogComponent as dj, SettingsAppearanceTabComponent as dk, SettingsDialogComponent as dl, SettingsLanguageTabComponent as dm, ShareDialogComponent as dn, ShortcutPanelComponent as dp, ShowOptionsFieldsetComponent as dq, ShowSlidesFieldsetComponent as dr, SignatureStrippedDialogComponent as ds, SignaturesPanelComponent as dt, SignaturesService as du, SlideBackgroundCardComponent as dv, SlideCanvasComponent as dw, SlideDefaultInspectorComponent as dx, SlideDiffChangesComponent as dy, SlideDiffRowComponent as dz, roundDragValue as e, applyFormatToElement as e$, TagsCardComponent as e0, Text3DBevelSectionComponent as e1, Text3DPanelComponent as e2, TextAdvancedPanelComponent as e3, ThemeEditorFieldsComponent as e4, ThemeGalleryComponent as e5, ThemeSelectorCardComponent as e6, TitleBarComponent as e7, TitleBarSearchComponent as e8, TransitionDirectionPickerComponent as e9, ViewerPresentationModeService as eA, ViewerThemeGalleryService as eB, ViewerTouchGesturesService as eC, ViewerZoomService as eD, WEBM_MIME_CANDIDATES as eE, WHEEL_SPOKE_COUNTS as eF, WriteBackScheduler as eG, ZERO_LINE_COLOR as eH, ZoomNavigationService as eI, ZoomRendererComponent as eJ, ZoomTargetService as eK, addCategory as eL, addCommentToList as eM, addGradientStopPatch as eN, addItem as eO, addSeries as eP, addSubItem as eQ, advanceStep as eR, affordanceElements as eS, aiToggleVisible as eT, alignPatch as eU, animationFor as eV, animationPresetLabelKey as eW, annotationMapToInkInserts as eX, applyAcceptedDiff as eY, applyAnimationPreset as eZ, applyFindReplacements as e_, TransitionPreviewComponent as ea, VALIGN_OPTIONS as eb, VIEWER_DIALOG_IDS as ec, VIEWER_EXPORT_FORMAT_IDS as ed, VIEWER_FEATURE_IDS as ee, VIEWER_PANEL_IDS as ef, VIEWER_THEME as eg, VersionHistoryPanelComponent as eh, ViewerCanvasEditingService as ei, ViewerCollabCursorService as ej, ViewerCollaborationSessionService as ek, ViewerCollaborationShellService as el, ViewerCompareService as em, ViewerCustomShowsService as en, ViewerCustomizationHandle as eo, ViewerCustomizationService as ep, ViewerDialogsService as eq, ViewerDocumentPropertiesService as er, ViewerExportService as es, ViewerExtraDialogsComponent as et, ViewerFileIOService as eu, ViewerFindReplaceService as ev, ViewerFormatPainterService as ew, ViewerInspectorPanelService as ex, ViewerKeyboardService as ey, ViewerMobileSheetService as ez, buildPerspCamera as f, buildZeroLine as f$, applyMove as f0, applyResize as f1, asMediaElement as f2, assignUserColor as f3, attachShowVisibilityPause as f4, attachTouchGestures as f5, axisTickValues as f6, beginDrawingNodeEdit as f7, beginNodeEdit as f8, bevelSizePatch as f9, buildGridlinesAndLabels as fA, buildHyperlinkPatch as fB, buildInkContainerStyle as fC, buildInkStrokes as fD, buildLegend as fE, buildLiveInkStrokeView as fF, buildMarkTooltip as fG, buildModel3DContainerStyle as fH, buildModel3DViewModel as fI, buildOleActionModel as fJ, buildOleInfoRows as fK, buildPatternFillCss as fL, buildPieViewModel as fM, buildPrintHtmlDocument as fN, buildPropertiesPatch as fO, buildRadarViewModel as fP, buildRegionMapViewModel as fQ, buildSaveSlides as fR, buildShareUrl as fS, buildSmartArtInsertElement as fT, buildSmartArtNodes as fU, buildStockViewModel as fV, buildSurfaceViewModel as fW, buildTableViewModel as fX, buildTreemapViewModel as fY, buildTrimFragment as fZ, buildWaterfallViewModel as f_, boolFromEvent as fa, bringForward as fb, bringToFront as fc, buildBarActions as fd, buildBroadcastConfig as fe, buildBroadcastViewerUrl as ff, buildCategoryLabels as fg, buildCellParagraphs as fh, buildChartViewModel as fi, buildChatLogExport as fj, buildChatLogMarkdown as fk, buildChromeStyle as fl, buildClearHyperlinkPatch as fm, buildClickGroups as fn, buildColStyles as fo, buildCollaborationConfig as fp, buildComboViewModel as fq, buildCssGradientFromShapeStyle as fr, buildDuotoneFilter as fs, buildDuotoneFilterId as ft, buildEmbeddedFontStyles as fu, buildEquationElement as fv, buildEquationSegment as fw, buildFallbackViewModel as fx, buildFontFaceRule as fy, buildGradientFillCss as fz, perspToScreen as g, computeScatterXDomain as g$, buildZoomContainerStyle as g0, buildZoomViewModel as g1, bulletIndentPx as g2, canAddTopLevelNode as g3, canEditSmartArtNodes as g4, canGroupSelection as g5, canRemoveTopLevelNode as g6, canSetStrokeWidth as g7, canStartBroadcast as g8, canStartShare as g9, commitNodeText as gA, computeAlign as gB, computeAxisTitlePrimitives as gC, computeBarRects as gD, computeBubbleRadius as gE, computeCornerHandle as gF, computeDistribute as gG, computeDrawingViewBox as gH, computeErrorBarPrimitives as gI, computeFocusTargets as gJ, computeGridSpacingPx as gK, computeHandleBoxes as gL, computeHandoutLayout as gM, computeIsMobile as gN, computeIsTablet as gO, computeLinePoints as gP, computeLinearRegression as gQ, computePageCount as gR, computePieLayout as gS, computePieSlicePath as gT, computePieSlices as gU, computePlotLayout as gV, computeRSquared as gW, computeRadarPoints as gX, computeResizeHandleBoxes as gY, computeRotateHandleBox as gZ, computeScatterDots as g_, canUngroupSelection as ga, canUseClipboard as gb, captionDisplayText as gc, cellRunStyle as gd, cellStyleToStyleMap as ge, cellTdStyle as gf, changeCountLabel as gg, changeIcon as gh, characterSpacingPatch as gi, chartPreserveAspectRatio as gj, checkFontAvailable as gk, clampCursorPosition as gl, clampGifDimensions as gm, clampIndex as gn, clampNotesFontSize as go, clampScale as gp, clampStep as gq, clearAllLocalViewerData as gr, clearAudienceContent as gs, cn as gt, collectAccessibilityIssues as gu, collectElementText as gv, collectSlideText as gw, collectStoredChats as gx, collectUsedFontFamilies as gy, columnWidthStyle as gz, pieRimPoint as h, forgetSessionDeck as h$, computeSelectionBoxes as h0, computeSingleSelected as h1, computeSlideIndices as h2, computeSnap as h3, computeStackedBarRects as h4, computeStackedValueRange as h5, computeTrendlinePrimitives as h6, computeValueRange as h7, convertOmmlToMathMl as h8, copyFormatFromElement as h9, disableReflectionPatch as hA, disableSoftEdgePatch as hB, duplicateElementById as hC, durationOf as hD, effectsStateOf as hE, enableGlowPatch as hF, enableInnerShadowPatch as hG, enableOuterShadowPatch as hH, enableReflectionPatch as hI, enableSoftEdgePatch as hJ, encodeGif as hK, endShowMediaCleanup as hL, estimatePageCount as hM, exitPresentationFullscreen as hN, exportAiChatLogs as hO, extractPathPoints as hP, eyedropperAvailable as hQ, fillColorOf$1 as hR, findInSlides as hS, findOwningSlideIndex as hT, findSlideIndexByElementId as hU, firstVisibleIndex as hV, fitPolynomial as hW, fitZoom as hX, focusTargetChips as hY, fontMimeForFormat as hZ, fontSizeOf as h_, countAccessibilityIssues as ha, countAnnotationStrokes as hb, createAngularAiBridge as hc, createCustomShow as hd, createImageElementFromFile as he, createSwipeDismissDrag as hf, createWebrtcBundle as hg, createWebsocketBundle as hh, cssObjectToStyleMap as hi, currentColorScheme as hj, currentLayout as hk, currentStyle as hl, defaultCssVars as hm, defaultRadius as hn, defaultThemeColors as ho, deleteElementsByIds as hp, deleteVersion as hq, demoteNode as hr, deriveModel3DBlobUrl as hs, derivePresenceList as ht, describeCollaborationShellState as hu, describeSmartArtBounds as hv, directionPickerState as hw, disableGlowPatch as hx, disableInnerShadowPatch as hy, disableOuterShadowPatch as hz, isChartInteractionArmed as i, injectResolvedCustomization as i$, formatAxisValue as i0, formatBytes as i1, formatCursorLabel as i2, formatElapsed as i3, formatFileSize as i4, formatInlineListStyle as i5, formatPropertyDate as i6, formatTime as i7, fpsToFrameIntervalMs as i8, generateBroadcastRoomId as i9, getResolvedShapeClipPathFor as iA, getSessionTabId as iB, getShapeFillStrokeStyle as iC, getSlideBackgroundStyle as iD, getSlideTransitionAnimations as iE, getSmartArtNodeBounds as iF, getSpeechRecognitionCtor as iG, getTextBlockStyle as iH, getTextWarp as iI, getTouchDistance as iJ, getWarpCategory as iK, getWarpPath as iL, gradientStateFromStyle as iM, gradientStateOf as iN, gradientStatePatch as iO, gradientStopColorCommitPatch as iP, gridColumns as iQ, groupIssuesBySeverity as iR, hasAnimation as iS, hasCopyableFormat as iT, hasExistingLink as iU, hasExitedFullscreen as iV, hasGradientFill as iW, hasPressureVariation as iX, hasVisibleSlideAfter as iY, headerLabel as iZ, imageDimensions as i_, generateCommentId as ia, generateCustomShowId as ib, generatePressureCircles as ic, generateTicks as id, getCinematicTransitionAnimations as ie, getClrChangeParams as ig, getContainerStyle as ih, getDuotoneFilterDef as ii, getEffectSoundAsset as ij, getEffectSoundState as ik, getImageSrc as il, getLocalStorageUsageSummary as im, getOleAriaLabel as io, getOleBadgeLabel as ip, getOleDisplayName as iq, getOleDownloadFileName as ir, getOleTypeColor as is, getOleTypeLabel as it, getP14TransitionAnimations as iu, getPasswordStrength as iv, getPatternSvg as iw, getPlaceholderStyle as ix, getVersions as iy, getResolvedShapeClipPath as iz, computePieChartLayout as j, normalizeFontFormat as j$, inkViewBox as j0, insertTableElementColumn as j1, insertTableElementRow as j2, interpolateWidth as j3, isAudienceTab as j4, isBold as j5, isBrowserOpenableMime as j6, isChildNode as j7, isElementInteractive as j8, isInjectableUrl as j9, mergeCaptionResults as jA, mergeDown as jB, mergeRight as jC, mergeSelection as jD, mergeTablesDirective as jE, moveElementBy as jF, moveNodeDown as jG, moveNodeUp as jH, msToFrameDelayCs as jI, narrowToCircle as jJ, narrowToPolygon as jK, narrowToRect as jL, newChartElement as jM, newEquationElement as jN, newPresetShapeElement as jO, newShapeElement as jP, newSmartArtElement as jQ, newTableElement as jR, newTextElement as jS, nextVisibleIndex as jT, nodeBold as jU, nodeEditBox as jV, nodeFillColor as jW, nodeFontColor as jX, nodeIdFromKey as jY, nodeItalic as jZ, nodeStyle as j_, isItalic as ja, isLegacyBinaryPresentation as jb, isPpactionUrl as jc, isPresenterMessage as jd, isSigned as je, isSupportedPresentationFile as jf, isTextElement as jg, isTwoTableFocus as jh, isUnderline as ji, isUrlSafe as jj, isValidRoomId as jk, isViewportBackgroundPressTarget as jl, isZoomActivationKey as jm, issueTrackKey as jn, issueTypeLabel as jo, keyToLabel as jp, lastVisibleIndex as jq, latexToMathml as jr, layoutConnectorPaints as js, layoutNodeLabels as jt, linePointsToSvgString as ju, lineSpacingPatch as jv, loadAudienceContent as jw, loadSessionDeck as jx, mediaFallbackFor as jy, mediaSurfaceFor as jz, perspScreenToPlaneY as k, resolveHyperlinkHref as k$, normalizeSlidesPerPage as k0, normalizeValue as k1, numFromEvent as k2, oleActionsVisibleFor as k3, ommlToMathml as k4, ooxmlDashToCssBorderStyle as k5, openNativeEyeDropper as k6, overallStatus as k7, paletteColor as k8, parseAudienceNonce as k9, radarAngle as kA, radarRingPoints as kB, readAsDataUrl as kC, recordWebm as kD, registerCrossSlideAudio as kE, rememberSessionDeck as kF, removeAnimation as kG, removeCategory as kH, removeTableElementColumn as kI, removeCommentFromList as kJ, removeElementAnimation as kK, removeGradientStopPatch as kL, removeNode as kM, removeTableElementRow as kN, removeSeries as kO, renderToCanvas as kP, reorderAnimationDown as kQ, reorderAnimationUp as kR, replaceInSlides as kS, replaceMatch as kT, requestPresentationFullscreen as kU, resizeElement as kV, resolveCaptionTracks as kW, resolveChartKind as kX, resolveDirection as kY, resolveDirection8 as kZ, resolveFontVariant as k_, parseNodeTextarea as ka, partitionSlides as kb, patchChartData as kc, patchChartStyle as kd, patchTableData as ke, patchTextStyle as kf, patternPresetOptions as kg, pendingElementStyles as kh, pickColorByClickFallback as ki, pickFile as kj, pickSupportedMimeType as kk, planGifFrames as kl, planVideoSegments as km, pointFromPointerEvent as kn, pointsToSvgPathD as ko, presenceToCursors as kp, presentationBaseName as kq, presentationStageStyle as kr, presenterTimerProgress as ks, presetByLayout as kt, presetsForCategory as ku, pressuresToWidths as kv, prevVisibleIndex as kw, projectDrawingShapes as kx, promoteNode as ky, provideViewerTheme as kz, resolvePieSliceShareValue as l, setEffectSound as l$, resolveInteractiveElementId as l0, resolveLegendAnchorPosition as l1, resolveMediaSrc as l2, resolveOleType as l3, resolveOrientation as l4, resolveParagraphBullet as l5, resolvePresenterNotes as l6, resolveProfileInitial as l7, resolveRegionCode as l8, resolveRibbonCanGroup as l9, segmentFrameCount as lA, selectValue$3 as lB, sendBackward as lC, sendToBack as lD, sequentialColorScale as lE, serializeWriteBack as lF, seriesColor as lG, seriesXValues as lH, setAfterAnimation as lI, setAfterAnimationColor as lJ, setAnimationEmphasis as lK, setAnimationEntrance as lL, setAnimationExit as lM, setAxis as lN, setAxisLogScale as lO, setAxisTitleStyle as lP, setCategoryLabel as lQ, setCellText as lR, setColorScheme as lS, setDataLabels as lT, setDataPointExplosion as lU, setDataPointFill as lV, setDataPointLabel as lW, setDataPointMarker as lX, setDelay as lY, setDirection as lZ, setDuration as l_, resolveSlideAutoAdvanceMs as la, resolveSlideTransition as lb, resolvePalette as lc, resolveThemeCatalogEntry as ld, resolveTransitionDuration as le, resolveTransitionDurationMs as lf, resolveWheelSpokeCount as lg, restoreSessionDeck as lh, revealedElementStyles as li, routeOrthogonalConnector as lj, rowStyle as lk, rulerDragToGuidePosition as ll, rulerHighlight as lm, rulerStripTicks as ln, sampleColorFromSlide as lo, sanitizeColor as lp, sanitizeSlideIndex as lq, sanitizeUserName as lr, saveViewerProfile as ls, savedPresentationFileName as lt, scanAvailableFonts as lu, searchSlides as lv, seedBroadcastFields as lw, seedHyperlinkDraft as lx, seedPropertiesDraft as ly, seedShareFields as lz, hexToRgb as m, toggleNodeItalic as m$, setEffectStockSound as m0, setElementPosition as m1, setGridlineStyle as m2, setLayout as m3, setLegend as m4, setNodeStyle as m5, setNodeText as m6, setRepeatCount as m7, setRepeatMode as m8, setSequence as m9, paletteColour as mA, snapToGridStep as mB, splitCursorCell as mC, splitMergedCell as mD, statusKind as mE, statusLabel$1 as mF, storeAudienceContent as mG, stringFromEvent$5 as mH, strokeColorOf as mI, strokeToInkElement as mJ, strokeWidthOf as mK, styleShadowFilter as mL, surfaceColor as mM, textAdvancedPatch as mN, textAdvancedStateFromStyle as mO, textAdvancedStateOf as mP, textColorOf as mQ, textDirectionPatch as mR, textFontSizePatch as mS, textStyleOf as mT, textStylePatch as mU, themeStyle as mV, themeToCssVars as mW, thumbnailHeight as mX, thumbnailZoom as mY, toggleCommentResolvedInList as mZ, toggleNodeBold as m_, setSeriesChartType as ma, setSeriesColor as mb, setSeriesErrorBars as mc, setSeriesMarker as md, setSeriesName as me, setSeriesTrendline as mf, setSeriesValue as mg, setStyle as mh, setTimingCurve as mi, setTitle as mj, setTrigger as mk, setTriggerShapeId as ml, shapeStylePatch$1 as mm, sheetAfterNavigate as mn, shouldBlockClickAdvance as mo, shouldUseSvgWarp as mp, showDirectionPicker as mq, showsTemplateAffordance as mr, signatureCountLabel as ms, signatureKey as mt, signatureTimestamp as mu, signerName as mv, statusLabel as mw, slideNumberOf as mx, slidesWithReappliedLayout as my, smartArtNodes as mz, smartArt3DGradientColor as n, toggleSheet as n0, topLevelNodeCount as n1, transformSelectedTextCase as n2, translationsEn as n3, updateElementById as n4, updateGlowPatch as n5, updateGradientStopPatch as n6, updateInnerShadowPatch as n7, updateOuterShadowPatch as n8, updateReflectionPatch as n9, vAlignPatch as na, validatePassword as nb, validatePrintSettings as nc, validateRoomId as nd, valueToY as ne, vermilionDarkColors as nf, vermilionDarkTheme as ng, vermilionLightColors as nh, vermilionLightTheme as ni, vermilionRadius as nj, waypointsToPathD as nk, withManualLayouts as nl, worstStatus as nm, zoomTargetSlideIndex as nn, obliqueBarTaper as o, perspBoxMatrix as p, shadeSmartArt3DVertices as q, renderChartLineSvg as r, shade as s, toChatSummary as t, smartArt3DGradientCoordinate as u, threeViewOverflowFromNdc as v, widenPieViewModel as w, hasThreeViewOverflow as x, overflowViewOffset as y, smartArt3DCameraMatrix as z };
|
|
211977
|
-
//# sourceMappingURL=pptx-angular-viewer-pptx-angular-viewer-
|
|
212980
|
+
export { AiProposalCardComponent as $, smartArt3DEyeInDiagram as A, resolveSmartArt3DLightModel as B, AFTER_ANIMATION_VALUES as C, DEFAULT_PALETTE$1 as D, ALIGN_OPTIONS as E, ANIMATION_PRESET_CATEGORIES as F, AUDIENCE_HASH as G, AUDIENCE_NONCE_KEY as H, AVATAR_COLOR_SWATCHES as I, AXIS_LABEL_COLOR as J, AccessibilityPanelComponent as K, AccessibilityService as L, AccessibilityTextPanelComponent as M, NO_THREE_VIEW_OVERFLOW as N, AccountPageComponent as O, ActionSettingsPanelComponent as P, AdvancedChartEditorComponent as Q, AiChangeOverlayComponent as R, AiChatPanelComponent as S, AiChatService as T, AiComposerComponent as U, AiFocusBarComponent as V, AiFocusHighlightOverlayComponent as W, AiHistoryMenuComponent as X, AiHistoryService as Y, AiMessageListComponent as Z, AiPanelStore as _, appendChartLegendSvg as a, ELEMENT_CONTEXT_MENU_COMMAND_IDS as a$, AiSettingsSectionComponent as a0, AiToolCallCardComponent as a1, AnimationAuthorPanelComponent as a2, AnimationPanelComponent as a3, AnimationPlaybackService as a4, AutosaveRecoveryDialogComponent as a5, AutosaveService as a6, BACKSTAGE_CARD_IDS as a7, BACKSTAGE_PAGE_IDS as a8, BroadcastDialogComponent as a9, CommentsService as aA, ComparePanelComponent as aB, ConnectorRendererComponent as aC, ConnectorTextOverlayComponent as aD, CustomShowsComponent as aE, DEFAULT_BOUNDS as aF, DEFAULT_BROADCAST_SERVER_URL as aG, DEFAULT_CANVAS_HEIGHT as aH, DEFAULT_CANVAS_WIDTH as aI, DEFAULT_COLOR_SCHEME as aJ, DEFAULT_FILL_COLOR$1 as aK, DEFAULT_LAYOUT as aL, DEFAULT_MORPH_DURATION_MS as aM, DEFAULT_PATTERN_FILL_PRESET as aN, DEFAULT_PRINT_SETTINGS as aO, DEFAULT_SLIDE_BACKGROUND as aP, DEFAULT_STROKE_COLOR as aQ, DEFAULT_STYLE as aR, DEFAULT_TABLE_ROW_HEIGHT as aS, DEFAULT_TEXT_COLOR$2 as aT, DEFAULT_VIEWER_PROFILE as aU, DIRECTIONAL_PRESETS as aV, DIRECTION_OPTIONS as aW, DocumentPropertiesCardComponent as aX, EASE as aY, EDITOR_SHORTCUT_ACTION_IDS as aZ, EFFECT_SOUND_CATALOGUE as a_, CANVAS_CONTEXT_MENU_COMMAND_IDS as aa, CHART_EDITOR_STYLES as ab, CINEMATIC_TRANSITION_KEYFRAMES as ac, CURSOR_PALETTE as ad, CanvasFitService as ae, ChartAxisOptionsComponent as af, ChartAxisStyleOptionsComponent as ag, ChartComboTypeOptionsComponent as ah, ChartDataEditorComponent as ai, ChartDataLabelOptionsComponent as aj, ChartDatapointMarkerOptionsComponent as ak, ChartDatapointOptionsComponent as al, ChartDisplayOptionsComponent as am, ChartElementViewComponent as an, ChartErrorBarOptionsComponent as ao, ChartMarkerOptionsComponent as ap, ChartPartSelectionService as aq, ChartPrimitivesComponent as ar, ChartRendererComponent as as, ChartTrendlineOptionsComponent as at, ChartTypeSelectorComponent as au, CollaborationCursorsComponent as av, CollaborationService as aw, ColorChangedImageComponent as ax, CommentMarkersOverlayComponent as ay, CommentsPanelComponent as az, renderChartTextSvg as b, NotesToolbarComponent as b$, EMBEDDED_FONTS_STYLE_ID as b0, EMPHASIS_PRESETS as b1, ENTRANCE_PRESETS as b2, TEMPLATES as b3, EXIT_PRESETS as b4, EditorContextMenuComponent as b5, EditorHistory as b6, EditorStateService as b7, EditorToolbarComponent as b8, EffectsPanelComponent as b9, InsertSmartArtDialogComponent as bA, InspectorPaneHeaderComponent as bB, InspectorPanelComponent as bC, IsMobileService as bD, KeepAnnotationsDialogComponent as bE, LOCALE_CATALOG as bF, LONG_PRESS_DURATION_MS as bG, LONG_PRESS_MOVE_TOLERANCE_PX as bH, LoadContentService as bI, LocalPresencePublisher as bJ, MAX_ZOOM_SCALE as bK, MIN_ZOOM_SCALE as bL, MOTION_PATH_COLUMNS as bM, MediaPreviewComponent as bN, MediaPropertiesPanelComponent as bO, MediaRendererComponent as bP, MediaTrimTimelineComponent as bQ, MobileBottomBarComponent as bR, MobileMenuSheetComponent as bS, MobilePresenterViewComponent as bT, MobileSheetComponent as bU, MobileSlidesSheetComponent as bV, MobileToolbarComponent as bW, ModalDialogComponent as bX, Model3DRendererComponent as bY, NotesHandoutCardComponent as bZ, NotesPanelComponent as b_, ElementRendererComponent as ba, EmbeddedFontsService as bb, EncryptedFileDialogComponent as bc, EquationEditorDialogComponent as bd, EquationRendererComponent as be, EquationTemplateGalleryComponent as bf, ExportProgressModalComponent as bg, ExportService as bh, FieldContextService as bi, FindBarComponent as bj, FindReplaceBarComponent as bk, FollowModeBarComponent as bl, FontEmbeddingListComponent as bm, FontEmbeddingPanelComponent as bn, GALLERY_THEME_PRESETS as bo, GOOGLE_WEBFONTS_LINK_ID as bp, GRIDLINE_COLOR$1 as bq, GoogleWebfontsService as br, GradientPickerComponent as bs, HANDOUT_OPTIONS as bt, HeaderFooterDialogComponent as bu, HyperlinkDialogComponent as bv, INSTANT as bw, ImagePropertiesPanelComponent as bx, InkDrawingService as by, InkRendererComponent as bz, createSvgEl as c, RibbonShapeExtrasComponent as c$, OPTIONS_PAGE_IDS as c0, OPTIONS_SECTION_IDS as c1, OPTIONS_SETTING_IDS as c2, OleRendererComponent as c3, OutlineViewOverlayComponent as c4, P14_TRANSITION_KEYFRAMES as c5, P14_TRANSITION_KEYFRAMES_2 as c6, P14_TRANSITION_KEYFRAMES_ALL as c7, PIE_AUTO_INSET_PX as c8, POWER_POINT_VIEWER_PROVIDERS as c9, REPEAT_MODE_OPTIONS as cA, RESIZE_HANDLES as cB, RIBBON_TAB_IDS as cC, RULER_FONT_SIZE as cD, RULER_THICKNESS as cE, ReadingViewOverlayComponent as cF, RemoteSelectionOverlayComponent as cG, Rendering3DService as cH, RibbonAnimationGalleryComponent as cI, RibbonAnimationsSectionComponent as cJ, RibbonArrangeSectionComponent as cK, RibbonColorPopoverComponent as cL, RibbonComponent as cM, RibbonDesignSectionComponent as cN, RibbonDrawSectionComponent as cO, RibbonDrawingGroupComponent as cP, RibbonEditingSectionComponent as cQ, RibbonFileSectionComponent as cR, RibbonFontControlsComponent as cS, RibbonHomeSectionComponent as cT, RibbonHyperlinkButtonComponent as cU, RibbonInsertFieldsComponent as cV, RibbonInsertSectionComponent as cW, RibbonMotionPathGalleryComponent as cX, RibbonParagraphControlsComponent as cY, RibbonPrimaryRowComponent as cZ, RibbonReviewSectionComponent as c_, PPTX_OPEN_ACCEPT as ca, PRESENTATION_OPEN_EXTENSIONS as cb, PRESENTER_CHANNEL_NAME as cc, PRESENTER_MSG_ORIGIN as cd, PRESENTER_TIMER_SEGMENT_MS as ce, PX_PER_CM as cf, PX_PER_INCH as cg, PasswordProtectionDialogComponent as ch, PasswordStrengthMeterComponent as ci, PowerPointViewerComponent as cj, PresentToolbarAutoHide as ck, PresentationAnnotationOverlayComponent as cl, PresentationAnnotationsService as cm, PresentationOverlayComponent as cn, PresentationPropertiesPanelComponent as co, PresentationSettingsCardComponent as cp, PresentationSubtitleBarComponent as cq, PresentationToolbarComponent as cr, PresentationTransitionOverlayComponent as cs, PresenterViewComponent as ct, PresenterWindowService as cu, PrintDialogComponent as cv, PrintService as cw, PrintSettingsPanelComponent as cx, PropertiesDialogComponent as cy, RANDOM_ELIGIBLE_TYPES as cz, buildBarChart3DHoverTooltip as d, TableResizeOverlayComponent as d$, RibbonSlideshowSectionComponent as d0, RibbonTransitionsSectionComponent as d1, RibbonViewSectionComponent as d2, RulerGuidesService as d3, SEQUENCE_OPTIONS as d4, SEVERITY_GROUPS as d5, SEVERITY_LABELS as d6, DEFAULT_TRANSITION_DURATION_MS$1 as d7, SHORTCUT_REFERENCE_ITEMS as d8, SLIDE_TRANSITION_KEYFRAMES as d9, SlideDiffRowComponent as dA, SlideDiffThumbnailsComponent as dB, SlideSizeCardComponent as dC, SlideSorterOverlayComponent as dD, SlideThemeOverridePanelComponent as dE, SlideTransitionCardComponent as dF, SlidesPanelComponent as dG, SmartArt3DRendererComponent as dH, SmartArtPreviewComponent as dI, SmartArtPropertiesComponent as dJ, SmartArtRendererComponent as dK, StatusBarComponent as dL, TABLE_STRUCTURE_TOGGLES as dM, TEXT_3D_BOTTOM_BEVEL_KEYS as dN, TEXT_3D_TOP_BEVEL_KEYS as dO, TEXT_DIRECTION_OPTIONS$1 as dP, THEME_CATALOG as dQ, TIMING_CURVE_OPTIONS as dR, TOOLBAR_BUTTON_IDS as dS, TRANSITION_SPEED_DURATION_MS as dT, TRIGGER_OPTIONS as dU, TYPE_LABELS as dV, TableCellAdvancedFillComponent as dW, TableCellFormattingComponent as dX, TableDataEditorComponent as dY, TablePropertiesComponent as dZ, TableRendererComponent as d_, SLIDE_TRANSITION_KEYFRAMES_CSS as da, DEFAULT_PALETTE as db, PALETTES as dc, SMART_ART_COLOR_SCHEMES as dd, SMART_ART_STYLE_OPTIONS as de, SUB_ITEM_LABEL as df, SVG_WARP_PRESETS as dg, SWIPE_MAX_VERTICAL_PX as dh, SWIPE_THRESHOLD_PX as di, SelectionPaneComponent as dj, SetUpSlideShowDialogComponent as dk, SettingsAppearanceTabComponent as dl, SettingsDialogComponent as dm, SettingsLanguageTabComponent as dn, ShareDialogComponent as dp, ShortcutPanelComponent as dq, ShowOptionsFieldsetComponent as dr, ShowSlidesFieldsetComponent as ds, SignatureStrippedDialogComponent as dt, SignaturesPanelComponent as du, SignaturesService as dv, SlideBackgroundCardComponent as dw, SlideCanvasComponent as dx, SlideDefaultInspectorComponent as dy, SlideDiffChangesComponent as dz, roundDragValue as e, applyFindReplacements as e$, TableSelectionService as e0, TagsCardComponent as e1, Text3DBevelSectionComponent as e2, Text3DPanelComponent as e3, TextAdvancedPanelComponent as e4, ThemeEditorFieldsComponent as e5, ThemeGalleryComponent as e6, ThemeSelectorCardComponent as e7, TitleBarComponent as e8, TitleBarSearchComponent as e9, ViewerMobileSheetService as eA, ViewerPresentationModeService as eB, ViewerThemeGalleryService as eC, ViewerTouchGesturesService as eD, ViewerZoomService as eE, WEBM_MIME_CANDIDATES as eF, WHEEL_SPOKE_COUNTS as eG, WriteBackScheduler as eH, ZERO_LINE_COLOR as eI, ZoomNavigationService as eJ, ZoomRendererComponent as eK, ZoomTargetService as eL, addCategory as eM, addCommentToList as eN, addGradientStopPatch as eO, addItem as eP, addSeries as eQ, addSubItem as eR, advanceStep as eS, affordanceElements as eT, aiToggleVisible as eU, alignPatch as eV, animationFor as eW, animationPresetLabelKey as eX, annotationMapToInkInserts as eY, applyAcceptedDiff as eZ, applyAnimationPreset as e_, TransitionDirectionPickerComponent as ea, TransitionPreviewComponent as eb, VALIGN_OPTIONS as ec, VIEWER_DIALOG_IDS as ed, VIEWER_EXPORT_FORMAT_IDS as ee, VIEWER_FEATURE_IDS as ef, VIEWER_PANEL_IDS as eg, VIEWER_THEME as eh, VersionHistoryPanelComponent as ei, ViewerCanvasEditingService as ej, ViewerCollabCursorService as ek, ViewerCollaborationSessionService as el, ViewerCollaborationShellService as em, ViewerCompareService as en, ViewerCustomShowsService as eo, ViewerCustomizationHandle as ep, ViewerCustomizationService as eq, ViewerDialogsService as er, ViewerDocumentPropertiesService as es, ViewerExportService as et, ViewerExtraDialogsComponent as eu, ViewerFileIOService as ev, ViewerFindReplaceService as ew, ViewerFormatPainterService as ex, ViewerInspectorPanelService as ey, ViewerKeyboardService as ez, buildPerspCamera as f, buildTrimFragment as f$, applyFormatToElement as f0, applyMove as f1, applyResize as f2, asMediaElement as f3, assignUserColor as f4, attachShowVisibilityPause as f5, attachTouchGestures as f6, axisTickValues as f7, beginDrawingNodeEdit as f8, beginNodeEdit as f9, buildGradientFillCss as fA, buildGridlinesAndLabels as fB, buildHyperlinkPatch as fC, buildInkContainerStyle as fD, buildInkStrokes as fE, buildLegend as fF, buildLiveInkStrokeView as fG, buildMarkTooltip as fH, buildModel3DContainerStyle as fI, buildModel3DMountOptions as fJ, buildModel3DViewModel as fK, buildOleActionModel as fL, buildOleInfoRows as fM, buildPatternFillCss as fN, buildPieViewModel as fO, buildPrintHtmlDocument as fP, buildPropertiesPatch as fQ, buildRadarViewModel as fR, buildRegionMapViewModel as fS, buildSaveSlides as fT, buildShareUrl as fU, buildSmartArtInsertElement as fV, buildSmartArtNodes as fW, buildStockViewModel as fX, buildSurfaceViewModel as fY, buildTableViewModel as fZ, buildTreemapViewModel as f_, bevelSizePatch as fa, boolFromEvent as fb, bringForward as fc, bringToFront as fd, buildBarActions as fe, buildBroadcastConfig as ff, buildBroadcastViewerUrl as fg, buildCategoryLabels as fh, buildCellParagraphs as fi, buildChartViewModel as fj, buildChatLogExport as fk, buildChatLogMarkdown as fl, buildChromeStyle as fm, buildClearHyperlinkPatch as fn, buildClickGroups as fo, buildColStyles as fp, buildCollaborationConfig as fq, buildComboViewModel as fr, buildCssGradientFromShapeStyle as fs, buildDuotoneFilter as ft, buildDuotoneFilterId as fu, buildEmbeddedFontStyles as fv, buildEquationElement as fw, buildEquationSegment as fx, buildFallbackViewModel as fy, buildFontFaceRule as fz, perspToScreen as g, computeRotateHandleBox as g$, buildWaterfallViewModel as g0, buildZeroLine as g1, buildZoomContainerStyle as g2, buildZoomViewModel as g3, bulletIndentPx as g4, canAddTopLevelNode as g5, canEditSmartArtNodes as g6, canGroupSelection as g7, canRemoveTopLevelNode as g8, canSetStrokeWidth as g9, collectUsedFontFamilies as gA, columnWidthStyle as gB, commitNodeText as gC, computeAlign as gD, computeAxisTitlePrimitives as gE, computeBarRects as gF, computeBubbleRadius as gG, computeCornerHandle as gH, computeDistribute as gI, computeDrawingViewBox as gJ, computeErrorBarPrimitives as gK, computeFocusTargets as gL, computeGridSpacingPx as gM, computeHandleBoxes as gN, computeHandoutLayout as gO, computeIsMobile as gP, computeIsTablet as gQ, computeLinePoints as gR, computeLinearRegression as gS, computePageCount as gT, computePieLayout as gU, computePieSlicePath as gV, computePieSlices as gW, computePlotLayout as gX, computeRSquared as gY, computeRadarPoints as gZ, computeResizeHandleBoxes as g_, canStartBroadcast as ga, canStartShare as gb, canUngroupSelection as gc, canUseClipboard as gd, captionDisplayText as ge, cellRunStyle as gf, cellStyleToStyleMap as gg, cellTdStyle as gh, changeCountLabel as gi, changeIcon as gj, characterSpacingPatch as gk, chartPreserveAspectRatio as gl, checkFontAvailable as gm, clampCursorPosition as gn, clampGifDimensions as go, clampIndex as gp, clampNotesFontSize as gq, clampScale as gr, clampStep as gs, clearAllLocalViewerData as gt, clearAudienceContent as gu, cn as gv, collectAccessibilityIssues as gw, collectElementText as gx, collectSlideText as gy, collectStoredChats as gz, pieRimPoint as h, fontMimeForFormat as h$, computeScatterDots as h0, computeScatterXDomain as h1, computeSelectionBoxes as h2, computeSingleSelected as h3, computeSlideIndices as h4, computeSnap as h5, computeStackedBarRects as h6, computeStackedValueRange as h7, computeTrendlinePrimitives as h8, computeValueRange as h9, disableInnerShadowPatch as hA, disableOuterShadowPatch as hB, disableReflectionPatch as hC, disableSoftEdgePatch as hD, duplicateElementById as hE, durationOf as hF, effectsStateOf as hG, enableGlowPatch as hH, enableInnerShadowPatch as hI, enableOuterShadowPatch as hJ, enableReflectionPatch as hK, enableSoftEdgePatch as hL, encodeGif as hM, endShowMediaCleanup as hN, estimatePageCount as hO, exitPresentationFullscreen as hP, exportAiChatLogs as hQ, extractPathPoints as hR, eyedropperAvailable as hS, fillColorOf$1 as hT, findInSlides as hU, findOwningSlideIndex as hV, findSlideIndexByElementId as hW, firstVisibleIndex as hX, fitPolynomial as hY, fitZoom as hZ, focusTargetChips as h_, convertOmmlToMathMl as ha, copyFormatFromElement as hb, countAccessibilityIssues as hc, countAnnotationStrokes as hd, createAngularAiBridge as he, createCustomShow as hf, createImageElementFromFile as hg, createSwipeDismissDrag as hh, createWebrtcBundle as hi, createWebsocketBundle as hj, cssObjectToStyleMap as hk, currentColorScheme as hl, currentLayout as hm, currentStyle as hn, defaultCssVars as ho, defaultRadius as hp, defaultThemeColors as hq, deleteElementsByIds as hr, deleteVersion as hs, demoteNode as ht, deriveModel3DBlobUrl as hu, derivePresenceList as hv, describeCollaborationShellState as hw, describeSmartArtBounds as hx, directionPickerState as hy, disableGlowPatch as hz, isChartInteractionArmed as i, headerLabel as i$, fontSizeOf as i0, forgetSessionDeck as i1, formatAxisValue as i2, formatBytes as i3, formatCursorLabel as i4, formatElapsed as i5, formatFileSize as i6, formatInlineListStyle as i7, formatPropertyDate as i8, formatTime as i9, getVersions as iA, getResolvedShapeClipPath as iB, getResolvedShapeClipPathFor as iC, getSessionTabId as iD, getShapeFillStrokeStyle as iE, getSlideBackgroundStyle as iF, getSlideTransitionAnimations as iG, getSmartArtNodeBounds as iH, getSpeechRecognitionCtor as iI, getTextBlockStyle as iJ, getTextWarp as iK, getTouchDistance as iL, getWarpCategory as iM, getWarpPath as iN, gradientStateFromStyle as iO, gradientStateOf as iP, gradientStatePatch as iQ, gradientStopColorCommitPatch as iR, gridColumns as iS, groupIssuesBySeverity as iT, hasAnimation as iU, hasCopyableFormat as iV, hasExistingLink as iW, hasExitedFullscreen as iX, hasGradientFill as iY, hasPressureVariation as iZ, hasVisibleSlideAfter as i_, fpsToFrameIntervalMs as ia, generateBroadcastRoomId as ib, generateCommentId as ic, generateCustomShowId as id, generatePressureCircles as ie, generateTicks as ig, getCinematicTransitionAnimations as ih, getClrChangeParams as ii, getContainerStyle as ij, getDuotoneFilterDef as ik, getEffectSoundAsset as il, getEffectSoundState as im, getImageSrc as io, getLocalStorageUsageSummary as ip, getOleAriaLabel as iq, getOleBadgeLabel as ir, getOleDisplayName as is, getOleDownloadFileName as it, getOleTypeColor as iu, getOleTypeLabel as iv, getP14TransitionAnimations as iw, getPasswordStrength as ix, getPatternSvg as iy, getPlaceholderStyle as iz, computePieChartLayout as j, nodeItalic as j$, imageDimensions as j0, injectResolvedCustomization as j1, inkViewBox as j2, insertTableElementColumn as j3, insertTableElementRow as j4, interpolateWidth as j5, isAudienceTab as j6, isBold as j7, isBrowserOpenableMime as j8, isChildNode as j9, mediaFallbackFor as jA, mediaSurfaceFor as jB, mergeCaptionResults as jC, mergeDown as jD, mergeRight as jE, mergeSelection as jF, mergeTablesDirective as jG, moveElementBy as jH, moveNodeDown as jI, moveNodeUp as jJ, msToFrameDelayCs as jK, narrowToCircle as jL, narrowToPolygon as jM, narrowToRect as jN, newChartElement as jO, newEquationElement as jP, newPresetShapeElement as jQ, newShapeElement as jR, newSmartArtElement as jS, newTableElement as jT, newTextElement as jU, nextVisibleIndex as jV, nodeBold as jW, nodeEditBox as jX, nodeFillColor as jY, nodeFontColor as jZ, nodeIdFromKey as j_, isElementInteractive as ja, isInjectableUrl as jb, isItalic as jc, isLegacyBinaryPresentation as jd, isPpactionUrl as je, isPresenterMessage as jf, isSigned as jg, isSupportedPresentationFile as jh, isTextElement as ji, isTwoTableFocus as jj, isUnderline as jk, isUrlSafe as jl, isValidRoomId as jm, isViewportBackgroundPressTarget as jn, isZoomActivationKey as jo, issueTrackKey as jp, issueTypeLabel as jq, keyToLabel as jr, lastVisibleIndex as js, latexToMathml as jt, layoutConnectorPaints as ju, layoutNodeLabels as jv, linePointsToSvgString as jw, lineSpacingPatch as jx, loadAudienceContent as jy, loadSessionDeck as jz, perspScreenToPlaneY as k, resolveDirection8 as k$, nodeStyle as k0, normalizeFontFormat as k1, normalizeSlidesPerPage as k2, normalizeValue as k3, numFromEvent as k4, oleActionsVisibleFor as k5, ommlToMathml as k6, ooxmlDashToCssBorderStyle as k7, openNativeEyeDropper as k8, overallStatus as k9, promoteNode as kA, provideViewerTheme as kB, radarAngle as kC, radarRingPoints as kD, readAsDataUrl as kE, recordWebm as kF, registerCrossSlideAudio as kG, rememberSessionDeck as kH, removeAnimation as kI, removeCategory as kJ, removeTableElementColumn as kK, removeCommentFromList as kL, removeElementAnimation as kM, removeGradientStopPatch as kN, removeNode as kO, removeTableElementRow as kP, removeSeries as kQ, renderToCanvas as kR, reorderAnimationDown as kS, reorderAnimationUp as kT, replaceInSlides as kU, replaceMatch as kV, requestPresentationFullscreen as kW, resizeElement as kX, resolveCaptionTracks as kY, resolveChartKind as kZ, resolveDirection as k_, paletteColor as ka, parseAudienceNonce as kb, parseNodeTextarea as kc, partitionSlides as kd, patchChartData as ke, patchChartStyle as kf, patchTableData as kg, patchTextStyle as kh, patternPresetOptions as ki, pendingElementStyles as kj, pickColorByClickFallback as kk, pickFile as kl, pickSupportedMimeType as km, planGifFrames as kn, planVideoSegments as ko, pointFromPointerEvent as kp, pointsToSvgPathD as kq, presenceToCursors as kr, presentationBaseName as ks, presentationStageStyle as kt, presenterTimerProgress as ku, presetByLayout as kv, presetsForCategory as kw, pressuresToWidths as kx, prevVisibleIndex as ky, projectDrawingShapes as kz, resolvePieSliceShareValue as l, setDirection as l$, resolveFontVariant as l0, resolveHyperlinkHref as l1, resolveInteractiveElementId as l2, resolveLegendAnchorPosition as l3, resolveMediaSrc as l4, resolveOleType as l5, resolveOrientation as l6, resolveParagraphBullet as l7, resolvePresenterNotes as l8, resolveProfileInitial as l9, seedPropertiesDraft as lA, seedShareFields as lB, segmentFrameCount as lC, selectValue$3 as lD, sendBackward as lE, sendToBack as lF, sequentialColorScale as lG, serializeWriteBack as lH, seriesColor as lI, seriesXValues as lJ, setAfterAnimation as lK, setAfterAnimationColor as lL, setAnimationEmphasis as lM, setAnimationEntrance as lN, setAnimationExit as lO, setAxis as lP, setAxisLogScale as lQ, setAxisTitleStyle as lR, setCategoryLabel as lS, setCellText as lT, setColorScheme as lU, setDataLabels as lV, setDataPointExplosion as lW, setDataPointFill as lX, setDataPointLabel as lY, setDataPointMarker as lZ, setDelay as l_, resolveRegionCode as la, resolveRibbonCanGroup as lb, resolveSlideAutoAdvanceMs as lc, resolveSlideTransition as ld, resolvePalette as le, resolveThemeCatalogEntry as lf, resolveTransitionDuration as lg, resolveTransitionDurationMs as lh, resolveWheelSpokeCount as li, restoreSessionDeck as lj, revealedElementStyles as lk, routeOrthogonalConnector as ll, rowStyle as lm, rulerDragToGuidePosition as ln, rulerHighlight as lo, rulerStripTicks as lp, sampleColorFromSlide as lq, sanitizeColor as lr, sanitizeSlideIndex as ls, sanitizeUserName as lt, saveViewerProfile as lu, savedPresentationFileName as lv, scanAvailableFonts as lw, searchSlides as lx, seedBroadcastFields as ly, seedHyperlinkDraft as lz, hexToRgb as m, toggleCommentResolvedInList as m$, setDuration as m0, setEffectSound as m1, setEffectStockSound as m2, setElementPosition as m3, setGridlineStyle as m4, setLayout as m5, setLegend as m6, setNodeStyle as m7, setNodeText as m8, setRepeatCount as m9, slidesWithReappliedLayout as mA, smartArtNodes as mB, paletteColour as mC, snapToGridStep as mD, splitCursorCell as mE, splitMergedCell as mF, statusKind as mG, statusLabel$1 as mH, storeAudienceContent as mI, stringFromEvent$5 as mJ, strokeColorOf as mK, strokeToInkElement as mL, strokeWidthOf as mM, styleShadowFilter as mN, surfaceColor as mO, textAdvancedPatch as mP, textAdvancedStateFromStyle as mQ, textAdvancedStateOf as mR, textColorOf as mS, textDirectionPatch as mT, textFontSizePatch as mU, textStyleOf as mV, textStylePatch as mW, themeStyle as mX, themeToCssVars as mY, thumbnailHeight as mZ, thumbnailZoom as m_, setRepeatMode as ma, setSequence as mb, setSeriesChartType as mc, setSeriesColor as md, setSeriesErrorBars as me, setSeriesMarker as mf, setSeriesName as mg, setSeriesTrendline as mh, setSeriesValue as mi, setStyle as mj, setTimingCurve as mk, setTitle as ml, setTrigger as mm, setTriggerShapeId as mn, shapeStylePatch$1 as mo, sheetAfterNavigate as mp, shouldBlockClickAdvance as mq, shouldUseSvgWarp as mr, showDirectionPicker as ms, showsTemplateAffordance as mt, signatureCountLabel as mu, signatureKey as mv, signatureTimestamp as mw, signerName as mx, statusLabel as my, slideNumberOf as mz, smartArt3DGradientColor as n, toggleNodeBold as n0, toggleNodeItalic as n1, toggleSheet as n2, topLevelNodeCount as n3, transformSelectedTextCase as n4, translationsEn as n5, updateElementById as n6, updateGlowPatch as n7, updateGradientStopPatch as n8, updateInnerShadowPatch as n9, updateOuterShadowPatch as na, updateReflectionPatch as nb, vAlignPatch as nc, validatePassword as nd, validatePrintSettings as ne, validateRoomId as nf, valueToY as ng, vermilionDarkColors as nh, vermilionDarkTheme as ni, vermilionLightColors as nj, vermilionLightTheme as nk, vermilionRadius as nl, waypointsToPathD as nm, withManualLayouts as nn, worstStatus as no, zoomTargetSlideIndex as np, obliqueBarTaper as o, perspBoxMatrix as p, shadeSmartArt3DVertices as q, renderChartLineSvg as r, shade as s, toChatSummary as t, smartArt3DGradientCoordinate as u, threeViewOverflowFromNdc as v, widenPieViewModel as w, hasThreeViewOverflow as x, overflowViewOffset as y, smartArt3DCameraMatrix as z };
|
|
212981
|
+
//# sourceMappingURL=pptx-angular-viewer-pptx-angular-viewer-D4Bf7RDf.mjs.map
|