pptx-angular-viewer 3.0.0 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/fesm2022/{pptx-angular-viewer-chat-history-idb-DHuKb-vv.mjs → pptx-angular-viewer-chat-history-idb-CeqlCly5.mjs} +2 -2
- package/fesm2022/{pptx-angular-viewer-chat-history-idb-DHuKb-vv.mjs.map → pptx-angular-viewer-chat-history-idb-CeqlCly5.mjs.map} +1 -1
- package/fesm2022/{pptx-angular-viewer-pptx-angular-viewer-DlV7l9lS.mjs → pptx-angular-viewer-pptx-angular-viewer-HXAPZylf.mjs} +69 -55
- package/fesm2022/{pptx-angular-viewer-pptx-angular-viewer-DlV7l9lS.mjs.map → pptx-angular-viewer-pptx-angular-viewer-HXAPZylf.mjs.map} +1 -1
- package/fesm2022/pptx-angular-viewer.mjs +1 -1
- package/package.json +3 -3
- package/types/pptx-angular-viewer.d.ts +1 -1
- package/types/pptx-angular-viewer.d.ts.map +1 -1
|
@@ -2474,6 +2474,39 @@ function strokeOnlyPresetPathData(element) {
|
|
|
2474
2474
|
return stroked.length > 0 ? stroked.join(' ') : undefined;
|
|
2475
2475
|
}
|
|
2476
2476
|
|
|
2477
|
+
/**
|
|
2478
|
+
* Should this shape/picture outline be painted at all?
|
|
2479
|
+
*
|
|
2480
|
+
* OOXML allows a width-only line, e.g. `<a:ln w="12700"><a:miter .../></a:ln>`,
|
|
2481
|
+
* with no fill child and no `<p:style>/<a:lnRef>` reference. That leaves the
|
|
2482
|
+
* line FILL unspecified, and PowerPoint paints no outline for it (verified
|
|
2483
|
+
* against a PowerPoint render of the real-world media deck, whose photos all
|
|
2484
|
+
* carry exactly that markup: the pictures are frameless). Core parses it as
|
|
2485
|
+
* `strokeWidth > 0` with `strokeColor`/`strokeFillMode` both `undefined`, so a
|
|
2486
|
+
* renderer must treat the missing colour as "no line", never substitute a
|
|
2487
|
+
* default stroke colour: React did, and painted a dark 1px frame around every
|
|
2488
|
+
* such picture that no other binding (and not PowerPoint) draws.
|
|
2489
|
+
*
|
|
2490
|
+
* When a line has any fill source (an explicit `a:solidFill`, an averaged
|
|
2491
|
+
* gradient/pattern colour, or a colour resolved from the theme's `lnStyleLst`
|
|
2492
|
+
* via `a:lnRef`), core writes `strokeColor` (and `strokeFillMode`), and the
|
|
2493
|
+
* outline paints as before.
|
|
2494
|
+
*/
|
|
2495
|
+
function hasStrokePaint(style) {
|
|
2496
|
+
if (!style || Math.max(0, style.strokeWidth ?? 0) <= 0) {
|
|
2497
|
+
return false;
|
|
2498
|
+
}
|
|
2499
|
+
return style.strokeColor !== undefined || style.strokeFillMode !== undefined;
|
|
2500
|
+
}
|
|
2501
|
+
/**
|
|
2502
|
+
* The stroke width a renderer should paint: the parsed width when the line has
|
|
2503
|
+
* a fill source, `0` when it is a width-only (fill-less) line. Bindings that
|
|
2504
|
+
* gate their CSS border on `strokeWidth > 0` can substitute this directly.
|
|
2505
|
+
*/
|
|
2506
|
+
function paintedStrokeWidth(style) {
|
|
2507
|
+
return hasStrokePaint(style) ? Math.max(0, style?.strokeWidth ?? 0) : 0;
|
|
2508
|
+
}
|
|
2509
|
+
|
|
2477
2510
|
/** Clamp a number to the inclusive `[0, 1]` range. */
|
|
2478
2511
|
function clampUnit(value) {
|
|
2479
2512
|
return value < 0 ? 0 : value > 1 ? 1 : value;
|
|
@@ -3548,9 +3581,15 @@ function outlineStrands(compoundLine, strokeWidth) {
|
|
|
3548
3581
|
* open it, in which case `getResolvedShapeClipPath` fails identically and
|
|
3549
3582
|
* `outlinePathData` would fall back to a full rectangle - worse than the
|
|
3550
3583
|
* single-edge `lineEdge` CSS approximation the binding falls back to.
|
|
3584
|
+
* - A width-only, fill-less line (see `hasStrokePaint`): PowerPoint paints no
|
|
3585
|
+
* outline for it at all, so this overlay must not invent one from
|
|
3586
|
+
* `DEFAULT_STROKE_COLOR` either. This is the same picture-frame case
|
|
3587
|
+
* `getComputedStrokeStyle` already excludes from the CSS border; missing it
|
|
3588
|
+
* here reintroduced the bug through the overlay instead, painting every
|
|
3589
|
+
* frameless picture in the real-world media deck with a dark 1px frame.
|
|
3551
3590
|
*/
|
|
3552
3591
|
function needsCenteredStrokeOverlay(element, style, declaredWidth) {
|
|
3553
|
-
if (!style || declaredWidth <= 0 || element.type === 'connector') {
|
|
3592
|
+
if (!style || declaredWidth <= 0 || element.type === 'connector' || !hasStrokePaint(style)) {
|
|
3554
3593
|
return false;
|
|
3555
3594
|
}
|
|
3556
3595
|
const shapeType = getShapeType(element.shapeType);
|
|
@@ -3847,39 +3886,6 @@ function resolveShapeGeometry(element) {
|
|
|
3847
3886
|
return { kind: 'none' };
|
|
3848
3887
|
}
|
|
3849
3888
|
|
|
3850
|
-
/**
|
|
3851
|
-
* Should this shape/picture outline be painted at all?
|
|
3852
|
-
*
|
|
3853
|
-
* OOXML allows a width-only line, e.g. `<a:ln w="12700"><a:miter .../></a:ln>`,
|
|
3854
|
-
* with no fill child and no `<p:style>/<a:lnRef>` reference. That leaves the
|
|
3855
|
-
* line FILL unspecified, and PowerPoint paints no outline for it (verified
|
|
3856
|
-
* against a PowerPoint render of the real-world media deck, whose photos all
|
|
3857
|
-
* carry exactly that markup: the pictures are frameless). Core parses it as
|
|
3858
|
-
* `strokeWidth > 0` with `strokeColor`/`strokeFillMode` both `undefined`, so a
|
|
3859
|
-
* renderer must treat the missing colour as "no line", never substitute a
|
|
3860
|
-
* default stroke colour: React did, and painted a dark 1px frame around every
|
|
3861
|
-
* such picture that no other binding (and not PowerPoint) draws.
|
|
3862
|
-
*
|
|
3863
|
-
* When a line has any fill source (an explicit `a:solidFill`, an averaged
|
|
3864
|
-
* gradient/pattern colour, or a colour resolved from the theme's `lnStyleLst`
|
|
3865
|
-
* via `a:lnRef`), core writes `strokeColor` (and `strokeFillMode`), and the
|
|
3866
|
-
* outline paints as before.
|
|
3867
|
-
*/
|
|
3868
|
-
function hasStrokePaint(style) {
|
|
3869
|
-
if (!style || Math.max(0, style.strokeWidth ?? 0) <= 0) {
|
|
3870
|
-
return false;
|
|
3871
|
-
}
|
|
3872
|
-
return style.strokeColor !== undefined || style.strokeFillMode !== undefined;
|
|
3873
|
-
}
|
|
3874
|
-
/**
|
|
3875
|
-
* The stroke width a renderer should paint: the parsed width when the line has
|
|
3876
|
-
* a fill source, `0` when it is a width-only (fill-less) line. Bindings that
|
|
3877
|
-
* gate their CSS border on `strokeWidth > 0` can substitute this directly.
|
|
3878
|
-
*/
|
|
3879
|
-
function paintedStrokeWidth(style) {
|
|
3880
|
-
return hasStrokePaint(style) ? Math.max(0, style?.strokeWidth ?? 0) : 0;
|
|
3881
|
-
}
|
|
3882
|
-
|
|
3883
3889
|
/** Nothing painted: the shared "no outline" answer. */
|
|
3884
3890
|
const NO_STROKE = {
|
|
3885
3891
|
borderWidth: 0,
|
|
@@ -73040,7 +73046,7 @@ function createLocalStorageBackend(namespace) {
|
|
|
73040
73046
|
/** Try IndexedDB first; fall back to localStorage on any failure. */
|
|
73041
73047
|
async function resolveBackend(dbName, namespace) {
|
|
73042
73048
|
try {
|
|
73043
|
-
const { openChatDb, createIdbBackend } = await import('./pptx-angular-viewer-chat-history-idb-
|
|
73049
|
+
const { openChatDb, createIdbBackend } = await import('./pptx-angular-viewer-chat-history-idb-CeqlCly5.mjs');
|
|
73044
73050
|
const db = await openChatDb(dbName);
|
|
73045
73051
|
return createIdbBackend(db);
|
|
73046
73052
|
}
|
|
@@ -80491,7 +80497,7 @@ class FollowModeBarComponent {
|
|
|
80491
80497
|
{{ 'pptx.followMode.stop' | translate }}
|
|
80492
80498
|
</button>
|
|
80493
80499
|
} @else {
|
|
80494
|
-
{{ 'pptx.followMode.followCollaborator' | translate }}
|
|
80500
|
+
<ng-container>{{ 'pptx.followMode.followCollaborator' | translate }}</ng-container>
|
|
80495
80501
|
}
|
|
80496
80502
|
</span>
|
|
80497
80503
|
<ul class="pptx-ng-follow-list">
|
|
@@ -80535,7 +80541,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
80535
80541
|
{{ 'pptx.followMode.stop' | translate }}
|
|
80536
80542
|
</button>
|
|
80537
80543
|
} @else {
|
|
80538
|
-
{{ 'pptx.followMode.followCollaborator' | translate }}
|
|
80544
|
+
<ng-container>{{ 'pptx.followMode.followCollaborator' | translate }}</ng-container>
|
|
80539
80545
|
}
|
|
80540
80546
|
</span>
|
|
80541
80547
|
<ul class="pptx-ng-follow-list">
|
|
@@ -87972,11 +87978,11 @@ class TableRendererComponent {
|
|
|
87972
87978
|
this.tableChange.emit({ id: this.element().id, tableData: { ...td, rows } });
|
|
87973
87979
|
}
|
|
87974
87980
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: TableRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
87975
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: TableRendererComponent, isStandalone: true, selector: "pptx-table-renderer", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cellCommit: "cellCommit", tableChange: "tableChange" }, viewQueries: [{ propertyName: "cellInput", first: true, predicate: ["cellInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<pptx-table-resize-overlay\n\t[columnWidths]=\"columnWidths()\"\n\t[editable]=\"editable()\"\n\t(resizeColumns)=\"onResizeColumns($event)\"\n\t(resizeRow)=\"onResizeRow($event)\"\n>\n\t<div class=\"pptx-ng-table-wrapper\">\n\t\t<!-- Load-bearing family: an unstyled cell otherwise inherits the HOST\n\t\t chrome's font; all five bindings declare the same shared default. -->\n\t\t<table\n\t\t\tclass=\"pptx-ng-table\"\n\t\t\t[style.font-family]=\"defaultTableFontFamily\"\n\t\t\t[ngStyle]=\"tableRootStyle()\"\n\t\t>\n\t\t\t@if (colStyles().length > 0) {\n\t\t\t\t<colgroup>\n\t\t\t\t\t@for (colStyle of colStyles(); track $index) {\n\t\t\t\t\t\t<col [ngStyle]=\"colStyle\" />\n\t\t\t\t\t}\n\t\t\t\t</colgroup>\n\t\t\t}\n\t\t\t<tbody>\n\t\t\t\t@for (row of rows(); track $index) {\n\t\t\t\t\t<tr [ngStyle]=\"row.rowStyle\">\n\t\t\t\t\t\t@for (vm of row.cells; track $index) {\n\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\tclass=\"pptx-ng-cell\"\n\t\t\t\t\t\t\t\t[class.is-selected]=\"isSelectedAnchor(vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t\t[class.is-in-range]=\"isInRange(vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t\t[class.is-editable]=\"editable()\"\n\t\t\t\t\t\t\t\t[ngStyle]=\"vm.tdStyle\"\n\t\t\t\t\t\t\t\t[attr.colspan]=\"vm.colSpan ?? null\"\n\t\t\t\t\t\t\t\t[attr.rowspan]=\"vm.rowSpan ?? null\"\n\t\t\t\t\t\t\t\t(click)=\"onCellClick($event, vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t\t(dblclick)=\"onCellDblClick($event, vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (isEditing(vm.rowIndex, vm.colIndex)) {\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t#cellInput\n\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\tclass=\"pptx-ng-cell-input\"\n\t\t\t\t\t\t\t\t\t\t[value]=\"vm.cell.text ?? ''\"\n\t\t\t\t\t\t\t\t\t\t(pointerdown)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(mousedown)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(dblclick)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(blur)=\"commitCellEdit($event)\"\n\t\t\t\t\t\t\t\t\t\t(keydown)=\"onCellInputKeydown($event)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t} @else if (vm.paragraphs.length > 0) {\n\t\t\t\t\t\t\t\t\t@for (para of vm.paragraphs; track $index) {\n\t\t\t\t\t\t\t\t\t\t<p class=\"pptx-ng-cell-para\">\n\t\t\t\t\t\t\t\t\t\t\t@for (run of para; track $index) {\n\t\t\t\t\t\t\t\t\t\t\t\t@if (run.isLineBreak) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span [ngStyle]=\"run.style\">{{ run.text }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t{{ vm.displayText }}
|
|
87981
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: TableRendererComponent, isStandalone: true, selector: "pptx-table-renderer", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cellCommit: "cellCommit", tableChange: "tableChange" }, viewQueries: [{ propertyName: "cellInput", first: true, predicate: ["cellInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<pptx-table-resize-overlay\n\t[columnWidths]=\"columnWidths()\"\n\t[editable]=\"editable()\"\n\t(resizeColumns)=\"onResizeColumns($event)\"\n\t(resizeRow)=\"onResizeRow($event)\"\n>\n\t<div class=\"pptx-ng-table-wrapper\">\n\t\t<!-- Load-bearing family: an unstyled cell otherwise inherits the HOST\n\t\t chrome's font; all five bindings declare the same shared default. -->\n\t\t<table\n\t\t\tclass=\"pptx-ng-table\"\n\t\t\t[style.font-family]=\"defaultTableFontFamily\"\n\t\t\t[ngStyle]=\"tableRootStyle()\"\n\t\t>\n\t\t\t@if (colStyles().length > 0) {\n\t\t\t\t<colgroup>\n\t\t\t\t\t@for (colStyle of colStyles(); track $index) {\n\t\t\t\t\t\t<col [ngStyle]=\"colStyle\" />\n\t\t\t\t\t}\n\t\t\t\t</colgroup>\n\t\t\t}\n\t\t\t<tbody>\n\t\t\t\t@for (row of rows(); track $index) {\n\t\t\t\t\t<tr [ngStyle]=\"row.rowStyle\">\n\t\t\t\t\t\t@for (vm of row.cells; track $index) {\n\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\tclass=\"pptx-ng-cell\"\n\t\t\t\t\t\t\t\t[class.is-selected]=\"isSelectedAnchor(vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t\t[class.is-in-range]=\"isInRange(vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t\t[class.is-editable]=\"editable()\"\n\t\t\t\t\t\t\t\t[ngStyle]=\"vm.tdStyle\"\n\t\t\t\t\t\t\t\t[attr.colspan]=\"vm.colSpan ?? null\"\n\t\t\t\t\t\t\t\t[attr.rowspan]=\"vm.rowSpan ?? null\"\n\t\t\t\t\t\t\t\t(click)=\"onCellClick($event, vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t\t(dblclick)=\"onCellDblClick($event, vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (isEditing(vm.rowIndex, vm.colIndex)) {\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t#cellInput\n\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\tclass=\"pptx-ng-cell-input\"\n\t\t\t\t\t\t\t\t\t\t[value]=\"vm.cell.text ?? ''\"\n\t\t\t\t\t\t\t\t\t\t(pointerdown)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(mousedown)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(dblclick)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(blur)=\"commitCellEdit($event)\"\n\t\t\t\t\t\t\t\t\t\t(keydown)=\"onCellInputKeydown($event)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t} @else if (vm.paragraphs.length > 0) {\n\t\t\t\t\t\t\t\t\t@for (para of vm.paragraphs; track $index) {\n\t\t\t\t\t\t\t\t\t\t<p class=\"pptx-ng-cell-para\">\n\t\t\t\t\t\t\t\t\t\t\t@for (run of para; track $index) {\n\t\t\t\t\t\t\t\t\t\t\t\t@if (run.isLineBreak) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span [ngStyle]=\"run.style\">{{ run.text }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t<ng-container>{{ vm.displayText }}</ng-container>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@if (vm.diagonal; as diag) {\n\t\t\t\t\t\t\t\t\t<svg class=\"pptx-ng-cell-diag\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t@if (diag.diagDownColor && diag.diagDownWidth) {\n\t\t\t\t\t\t\t\t\t\t\t<line\n\t\t\t\t\t\t\t\t\t\t\t\tx1=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t\ty1=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t\tx2=\"100%\"\n\t\t\t\t\t\t\t\t\t\t\t\ty2=\"100%\"\n\t\t\t\t\t\t\t\t\t\t\t\t[attr.stroke]=\"diag.diagDownColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t[attr.stroke-width]=\"diag.diagDownWidth\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (diag.diagUpColor && diag.diagUpWidth) {\n\t\t\t\t\t\t\t\t\t\t\t<line\n\t\t\t\t\t\t\t\t\t\t\t\tx1=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t\ty1=\"100%\"\n\t\t\t\t\t\t\t\t\t\t\t\tx2=\"100%\"\n\t\t\t\t\t\t\t\t\t\t\t\ty2=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t\t[attr.stroke]=\"diag.diagUpColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t[attr.stroke-width]=\"diag.diagUpWidth\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t}\n\t\t\t\t\t</tr>\n\t\t\t\t}\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n</pptx-table-resize-overlay>\n", styles: [".pptx-ng-cell{position:relative}.pptx-ng-cell.is-editable{cursor:cell}.pptx-ng-cell.is-selected{outline:2px solid rgba(59,130,246,.9);outline-offset:-2px}.pptx-ng-cell.is-in-range{background-color:#3b82f626;outline:1px solid rgba(96,165,250,.5);outline-offset:-1px}.pptx-ng-cell-diag{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: TableResizeOverlayComponent, selector: "pptx-table-resize-overlay", inputs: ["columnWidths", "editable"], outputs: ["resizeColumns", "resizeRow"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
87976
87982
|
}
|
|
87977
87983
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: TableRendererComponent, decorators: [{
|
|
87978
87984
|
type: Component,
|
|
87979
|
-
args: [{ selector: 'pptx-table-renderer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgStyle, TableResizeOverlayComponent], template: "<pptx-table-resize-overlay\n\t[columnWidths]=\"columnWidths()\"\n\t[editable]=\"editable()\"\n\t(resizeColumns)=\"onResizeColumns($event)\"\n\t(resizeRow)=\"onResizeRow($event)\"\n>\n\t<div class=\"pptx-ng-table-wrapper\">\n\t\t<!-- Load-bearing family: an unstyled cell otherwise inherits the HOST\n\t\t chrome's font; all five bindings declare the same shared default. -->\n\t\t<table\n\t\t\tclass=\"pptx-ng-table\"\n\t\t\t[style.font-family]=\"defaultTableFontFamily\"\n\t\t\t[ngStyle]=\"tableRootStyle()\"\n\t\t>\n\t\t\t@if (colStyles().length > 0) {\n\t\t\t\t<colgroup>\n\t\t\t\t\t@for (colStyle of colStyles(); track $index) {\n\t\t\t\t\t\t<col [ngStyle]=\"colStyle\" />\n\t\t\t\t\t}\n\t\t\t\t</colgroup>\n\t\t\t}\n\t\t\t<tbody>\n\t\t\t\t@for (row of rows(); track $index) {\n\t\t\t\t\t<tr [ngStyle]=\"row.rowStyle\">\n\t\t\t\t\t\t@for (vm of row.cells; track $index) {\n\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\tclass=\"pptx-ng-cell\"\n\t\t\t\t\t\t\t\t[class.is-selected]=\"isSelectedAnchor(vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t\t[class.is-in-range]=\"isInRange(vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t\t[class.is-editable]=\"editable()\"\n\t\t\t\t\t\t\t\t[ngStyle]=\"vm.tdStyle\"\n\t\t\t\t\t\t\t\t[attr.colspan]=\"vm.colSpan ?? null\"\n\t\t\t\t\t\t\t\t[attr.rowspan]=\"vm.rowSpan ?? null\"\n\t\t\t\t\t\t\t\t(click)=\"onCellClick($event, vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t\t(dblclick)=\"onCellDblClick($event, vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (isEditing(vm.rowIndex, vm.colIndex)) {\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t#cellInput\n\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\tclass=\"pptx-ng-cell-input\"\n\t\t\t\t\t\t\t\t\t\t[value]=\"vm.cell.text ?? ''\"\n\t\t\t\t\t\t\t\t\t\t(pointerdown)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(mousedown)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(dblclick)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(blur)=\"commitCellEdit($event)\"\n\t\t\t\t\t\t\t\t\t\t(keydown)=\"onCellInputKeydown($event)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t} @else if (vm.paragraphs.length > 0) {\n\t\t\t\t\t\t\t\t\t@for (para of vm.paragraphs; track $index) {\n\t\t\t\t\t\t\t\t\t\t<p class=\"pptx-ng-cell-para\">\n\t\t\t\t\t\t\t\t\t\t\t@for (run of para; track $index) {\n\t\t\t\t\t\t\t\t\t\t\t\t@if (run.isLineBreak) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span [ngStyle]=\"run.style\">{{ run.text }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t{{ vm.displayText }}
|
|
87985
|
+
args: [{ selector: 'pptx-table-renderer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgStyle, TableResizeOverlayComponent], template: "<pptx-table-resize-overlay\n\t[columnWidths]=\"columnWidths()\"\n\t[editable]=\"editable()\"\n\t(resizeColumns)=\"onResizeColumns($event)\"\n\t(resizeRow)=\"onResizeRow($event)\"\n>\n\t<div class=\"pptx-ng-table-wrapper\">\n\t\t<!-- Load-bearing family: an unstyled cell otherwise inherits the HOST\n\t\t chrome's font; all five bindings declare the same shared default. -->\n\t\t<table\n\t\t\tclass=\"pptx-ng-table\"\n\t\t\t[style.font-family]=\"defaultTableFontFamily\"\n\t\t\t[ngStyle]=\"tableRootStyle()\"\n\t\t>\n\t\t\t@if (colStyles().length > 0) {\n\t\t\t\t<colgroup>\n\t\t\t\t\t@for (colStyle of colStyles(); track $index) {\n\t\t\t\t\t\t<col [ngStyle]=\"colStyle\" />\n\t\t\t\t\t}\n\t\t\t\t</colgroup>\n\t\t\t}\n\t\t\t<tbody>\n\t\t\t\t@for (row of rows(); track $index) {\n\t\t\t\t\t<tr [ngStyle]=\"row.rowStyle\">\n\t\t\t\t\t\t@for (vm of row.cells; track $index) {\n\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\tclass=\"pptx-ng-cell\"\n\t\t\t\t\t\t\t\t[class.is-selected]=\"isSelectedAnchor(vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t\t[class.is-in-range]=\"isInRange(vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t\t[class.is-editable]=\"editable()\"\n\t\t\t\t\t\t\t\t[ngStyle]=\"vm.tdStyle\"\n\t\t\t\t\t\t\t\t[attr.colspan]=\"vm.colSpan ?? null\"\n\t\t\t\t\t\t\t\t[attr.rowspan]=\"vm.rowSpan ?? null\"\n\t\t\t\t\t\t\t\t(click)=\"onCellClick($event, vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t\t(dblclick)=\"onCellDblClick($event, vm.rowIndex, vm.colIndex)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (isEditing(vm.rowIndex, vm.colIndex)) {\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t#cellInput\n\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\tclass=\"pptx-ng-cell-input\"\n\t\t\t\t\t\t\t\t\t\t[value]=\"vm.cell.text ?? ''\"\n\t\t\t\t\t\t\t\t\t\t(pointerdown)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(mousedown)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(dblclick)=\"$event.stopPropagation()\"\n\t\t\t\t\t\t\t\t\t\t(blur)=\"commitCellEdit($event)\"\n\t\t\t\t\t\t\t\t\t\t(keydown)=\"onCellInputKeydown($event)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t} @else if (vm.paragraphs.length > 0) {\n\t\t\t\t\t\t\t\t\t@for (para of vm.paragraphs; track $index) {\n\t\t\t\t\t\t\t\t\t\t<p class=\"pptx-ng-cell-para\">\n\t\t\t\t\t\t\t\t\t\t\t@for (run of para; track $index) {\n\t\t\t\t\t\t\t\t\t\t\t\t@if (run.isLineBreak) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span [ngStyle]=\"run.style\">{{ run.text }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t<ng-container>{{ vm.displayText }}</ng-container>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t@if (vm.diagonal; as diag) {\n\t\t\t\t\t\t\t\t\t<svg class=\"pptx-ng-cell-diag\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t@if (diag.diagDownColor && diag.diagDownWidth) {\n\t\t\t\t\t\t\t\t\t\t\t<line\n\t\t\t\t\t\t\t\t\t\t\t\tx1=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t\ty1=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t\tx2=\"100%\"\n\t\t\t\t\t\t\t\t\t\t\t\ty2=\"100%\"\n\t\t\t\t\t\t\t\t\t\t\t\t[attr.stroke]=\"diag.diagDownColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t[attr.stroke-width]=\"diag.diagDownWidth\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t@if (diag.diagUpColor && diag.diagUpWidth) {\n\t\t\t\t\t\t\t\t\t\t\t<line\n\t\t\t\t\t\t\t\t\t\t\t\tx1=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t\ty1=\"100%\"\n\t\t\t\t\t\t\t\t\t\t\t\tx2=\"100%\"\n\t\t\t\t\t\t\t\t\t\t\t\ty2=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t\t[attr.stroke]=\"diag.diagUpColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t[attr.stroke-width]=\"diag.diagUpWidth\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t}\n\t\t\t\t\t</tr>\n\t\t\t\t}\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n</pptx-table-resize-overlay>\n", styles: [".pptx-ng-cell{position:relative}.pptx-ng-cell.is-editable{cursor:cell}.pptx-ng-cell.is-selected{outline:2px solid rgba(59,130,246,.9);outline-offset:-2px}.pptx-ng-cell.is-in-range{background-color:#3b82f626;outline:1px solid rgba(96,165,250,.5);outline-offset:-1px}.pptx-ng-cell-diag{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}\n"] }]
|
|
87980
87986
|
}], ctorParameters: () => [], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], editable: [{ type: i0.Input, args: [{ isSignal: true, alias: "editable", required: false }] }], cellCommit: [{ type: i0.Output, args: ["cellCommit"] }], tableChange: [{ type: i0.Output, args: ["tableChange"] }], cellInput: [{ type: i0.ViewChild, args: ['cellInput', { isSignal: true }] }] } });
|
|
87981
87987
|
|
|
87982
87988
|
/**
|
|
@@ -88962,7 +88968,7 @@ class ElementRendererComponent {
|
|
|
88962
88968
|
return { ...(span.style ?? {}), ...textBuildSpanStyle(span) };
|
|
88963
88969
|
}
|
|
88964
88970
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ElementRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
88965
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: ElementRendererComponent, isStandalone: true, selector: "pptx-element-renderer", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, mediaDataUrls: { classPropertyName: "mediaDataUrls", publicName: "mediaDataUrls", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, obstacles: { classPropertyName: "obstacles", publicName: "obstacles", isSignal: true, isRequired: false, transformFunction: null }, canvasWidth: { classPropertyName: "canvasWidth", publicName: "canvasWidth", isSignal: true, isRequired: false, transformFunction: null }, canvasHeight: { classPropertyName: "canvasHeight", publicName: "canvasHeight", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, marked: { classPropertyName: "marked", publicName: "marked", isSignal: true, isRequired: false, transformFunction: null }, exposeElementId: { classPropertyName: "exposeElementId", publicName: "exposeElementId", isSignal: true, isRequired: false, transformFunction: null }, presenting: { classPropertyName: "presenting", publicName: "presenting", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, fieldContext: { classPropertyName: "fieldContext", publicName: "fieldContext", isSignal: true, isRequired: false, transformFunction: null }, slideElements: { classPropertyName: "slideElements", publicName: "slideElements", isSignal: true, isRequired: false, transformFunction: null }, editTemplateMode: { classPropertyName: "editTemplateMode", publicName: "editTemplateMode", isSignal: true, isRequired: false, transformFunction: null }, parentGroupFill: { classPropertyName: "parentGroupFill", publicName: "parentGroupFill", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cellCommit: "cellCommit", tableChange: "tableChange" }, host: { classAttribute: "contents" }, ngImport: i0, template: "@switch (true) {\n\t@case (isHidden()) {\n\t\t<!--\n\t\t\tHidden via the Selection Pane: draw nothing, exactly as PowerPoint\n\t\t\tdoes. This is the FIRST case on purpose - @switch takes the first\n\t\t\tmatch, so one empty branch suppresses every element type at once\n\t\t\twithout wrapping (and re-indenting) the whole template. The host\n\t\t\tcarries \\`display: contents\\`, so an empty component collapses.\n\t\t\tRendering nothing (rather than an invisible box) is what keeps the\n\t\t\telement out of hit-testing, the tab order and the export raster; it\n\t\t\tstays listed in and selectable from the Selection Pane, which reads\n\t\t\tthe slide model rather than the DOM.\n\t\t-->\n\t}\n\t@case (element().type === 'connector') {\n\t\t<pptx-connector-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[obstacles]=\"obstacles()\"\n\t\t\t[canvasWidth]=\"canvasWidth()\"\n\t\t\t[canvasHeight]=\"canvasHeight()\"\n\t\t\t[interactive]=\"interactive()\"\n\t\t\t[marked]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t\t[animationState]=\"animationState()\"\n\t\t/>\n\t}\n\t@case (element().type === 'ink') {\n\t\t<!--\n\t\t\tThis renderer (and zoom / model3d / 3D SmartArt below) positions its\n\t\t\town root box, so it takes the neutral element marker\n\t\t\t(data-pptx-element) as an input instead of being wrapped in a marked\n\t\t\tbox the way chart / table / OLE are: an outer positioned box would\n\t\t\toffset it twice.\n\t\t-->\n\t\t<pptx-ink-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[replay]=\"presenting()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'contentPart') {\n\t\t<!--\n\t\t\tReal PowerPoint ink. Same positioning contract as pptx-ink-renderer\n\t\t\tabove: the renderer's own root is absolutely positioned, so it takes\n\t\t\tthe neutral element marker as an input rather than being wrapped.\n\t\t-->\n\t\t<pptx-content-part-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[replay]=\"presenting()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'zoom') {\n\t\t<pptx-zoom-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t/>\n\t}\n\t@case (element().type === 'model3d') {\n\t\t<pptx-model3d-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'smartArt' && smartArt3D()) {\n\t\t<pptx-smart-art-3d-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[canEdit]=\"interactive() && editable()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t/>\n\t}\n\t@case (element().type === 'smartArt') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-smartart\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-smart-art-renderer\n\t\t\t\t[element]=\"element()\"\n\t\t\t\t[editable]=\"interactive() && editable()\"\n\t\t\t\t[animationState]=\"animationState()\"\n\t\t\t/>\n\t\t</div>\n\t}\n\t@case (element().type === 'ole') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-ole\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-ole-renderer [element]=\"element()\" />\n\t\t</div>\n\t}\n\t@case (element().type === 'chart') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-chart\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-chart-element-view\n\t\t\t\t[element]=\"element()\"\n\t\t\t\t[editable]=\"interactive() && editable()\"\n\t\t\t\t[animationState]=\"animationState()\"\n\t\t\t/>\n\t\t</div>\n\t}\n\t@case (element().type === 'table') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-table\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-table-renderer\n\t\t\t\t[element]=\"element()\"\n\t\t\t\t[editable]=\"interactive() && editable()\"\n\t\t\t\t(cellCommit)=\"cellCommit.emit({ id: element().id, commit: $event })\"\n\t\t\t\t(tableChange)=\"tableChange.emit($event)\"\n\t\t\t/>\n\t\t</div>\n\t}\n\t@case (element().type === 'group') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-group\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t@for (child of children(); track child.id) {\n\t\t\t\t<pptx-element-renderer\n\t\t\t\t\t[element]=\"child\"\n\t\t\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t\t\t[zIndex]=\"$index\"\n\t\t\t\t\t[interactive]=\"interactive()\"\n\t\t\t\t\t[marked]=\"marked()\"\n\t\t\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t\t\t\t[presenting]=\"presenting()\"\n\t\t\t\t\t[fieldContext]=\"fieldContext()\"\n\t\t\t\t\t[slideElements]=\"slideElements()\"\n\t\t\t\t\t[parentGroupFill]=\"childParentGroupFill()\"\n\t\t\t\t/>\n\t\t\t}\n\t\t</div>\n\t}\n\t@case (isImageLike()) {\n\t\t<pptx-image-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[interactive]=\"interactive()\"\n\t\t\t[marked]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'media') {\n\t\t<pptx-media-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[interactive]=\"interactive()\"\n\t\t\t[marked]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t\t[presenting]=\"presenting()\"\n\t\t\t[placeholderLabel]=\"placeholderLabel()\"\n\t\t/>\n\t}\n\t@case (isShapeLike()) {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-shape\"\n\t\t\t[ngStyle]=\"shapeContainerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<!-- Per-sub-path fill overlay: a multi-sub-path preset (`smileyFace`'s\n\t\t\t open eyes, `actionButtonBlank`'s darkened bevel well) or custom\n\t\t\t geometry whose sub-paths cannot share one CSS background-color. -->\n\t\t\t@if (subpathFill(); as sf) {\n\t\t\t\t<svg\n\t\t\t\t\tclass=\"pptx-ng-subpath-fill\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t[attr.viewBox]=\"subpathFillViewBox()\"\n\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\tstyle=\"position: absolute; inset: 0; width: 100%; height: 100%\"\n\t\t\t\t>\n\t\t\t\t\t@for (paint of sf.paints; track $index) {\n\t\t\t\t\t\t<path [attr.d]=\"paint.d\" [attr.fill]=\"paint.fill\" stroke=\"none\" />\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\t\t\t}\n\t\t\t@if (fillOverlay(); as ov) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"pptx-ng-fill-overlay\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle=\"position: absolute; inset: 0; pointer-events: none\"\n\t\t\t\t\t[style.background]=\"ov.color\"\n\t\t\t\t\t[style.mix-blend-mode]=\"ov.blendMode\"\n\t\t\t\t></div>\n\t\t\t}\n\t\t\t<!-- Mirrored reflection sibling (`a:reflection`): cross-browser, unlike\n\t\t\t the `-webkit-box-reflect` this replaced (Firefox never implemented\n\t\t\t that property, so reflections were invisible there entirely). -->\n\t\t\t@if (reflection(); as refl) {\n\t\t\t\t<div class=\"pptx-ng-reflection\" aria-hidden=\"true\" [ngStyle]=\"refl.wrapperStyle\">\n\t\t\t\t\t@if (refl.imgSrc) {\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t[src]=\"refl.imgSrc\"\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t\t\tstyle=\"width: 100%; height: 100%\"\n\t\t\t\t\t\t\t[ngStyle]=\"refl.imgFitStyle\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t} @else if (refl.fill) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle=\"width: 100%; height: 100%\"\n\t\t\t\t\t\t\t[style.background-color]=\"refl.fill.backgroundColor\"\n\t\t\t\t\t\t\t[style.background-image]=\"refl.fill.backgroundImage\"\n\t\t\t\t\t\t\t[style.background-size]=\"refl.fill.backgroundSize\"\n\t\t\t\t\t\t\t[style.background-position]=\"refl.fill.backgroundPosition\"\n\t\t\t\t\t\t\t[style.background-repeat]=\"refl.fill.backgroundRepeat\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<!-- Hollow frame hit target: an unfilled, textless shape is hit-tested\n\t\t\t on its outline only, so its interior lets clicks through. -->\n\t\t\t@if (hollowHit(); as hit) {\n\t\t\t\t<svg\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t[attr.viewBox]=\"outlineViewBox()\"\n\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\tstyle=\"\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\tinset: 0;\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\toverflow: visible;\n\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\t[attr.d]=\"hit.d\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"transparent\"\n\t\t\t\t\t\t[attr.stroke-width]=\"hit.strokeWidth\"\n\t\t\t\t\t\tstyle=\"pointer-events: stroke\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t}\n\t\t\t<!-- Stroked outline: a CSS border takes one flat colour, and cannot\n\t\t\t outline an open preset (`line`, `arc`) at all. -->\n\t\t\t@if (gradientOutline(); as go) {\n\t\t\t\t<svg\n\t\t\t\t\tclass=\"pptx-ng-gradient-outline\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t[attr.viewBox]=\"outlineViewBox()\"\n\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\tstyle=\"\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\tinset: 0;\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\toverflow: visible;\n\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\"\n\t\t\t\t>\n\t\t\t\t\t@if (go.paint; as paint) {\n\t\t\t\t\t\t<defs>\n\t\t\t\t\t\t\t@if (paint.kind === 'pattern') {\n\t\t\t\t\t\t\t\t<pattern\n\t\t\t\t\t\t\t\t\t[attr.id]=\"paint.id\"\n\t\t\t\t\t\t\t\t\t[attr.width]=\"paint.width\"\n\t\t\t\t\t\t\t\t\t[attr.height]=\"paint.height\"\n\t\t\t\t\t\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<image\n\t\t\t\t\t\t\t\t\t\t[attr.href]=\"paint.href\"\n\t\t\t\t\t\t\t\t\t\t[attr.width]=\"paint.width\"\n\t\t\t\t\t\t\t\t\t\t[attr.height]=\"paint.height\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</pattern>\n\t\t\t\t\t\t\t} @else if (paint.kind === 'radial') {\n\t\t\t\t\t\t\t\t<radialGradient\n\t\t\t\t\t\t\t\t\t[attr.id]=\"paint.id\"\n\t\t\t\t\t\t\t\t\t[attr.cx]=\"paint.cx\"\n\t\t\t\t\t\t\t\t\t[attr.cy]=\"paint.cy\"\n\t\t\t\t\t\t\t\t\t[attr.r]=\"paint.r\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t@for (stop of paint.stops; track $index) {\n\t\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\t\t[attr.offset]=\"stop.offset\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-color]=\"stop.color\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-opacity]=\"stop.opacity\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</radialGradient>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<linearGradient\n\t\t\t\t\t\t\t\t\t[attr.id]=\"paint.id\"\n\t\t\t\t\t\t\t\t\t[attr.x1]=\"paint.x1\"\n\t\t\t\t\t\t\t\t\t[attr.y1]=\"paint.y1\"\n\t\t\t\t\t\t\t\t\t[attr.x2]=\"paint.x2\"\n\t\t\t\t\t\t\t\t\t[attr.y2]=\"paint.y2\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t@for (stop of paint.stops; track $index) {\n\t\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\t\t[attr.offset]=\"stop.offset\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-color]=\"stop.color\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-opacity]=\"stop.opacity\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</defs>\n\t\t\t\t\t}\n\t\t\t\t\t@for (strand of go.strands; track $index) {\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t[attr.d]=\"go.d\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t[attr.stroke]=\"go.stroke\"\n\t\t\t\t\t\t\t[attr.stroke-width]=\"strand.strokeWidth\"\n\t\t\t\t\t\t\t[attr.stroke-dasharray]=\"go.dashArray\"\n\t\t\t\t\t\t\t[attr.stroke-linecap]=\"go.lineCap\"\n\t\t\t\t\t\t\t[attr.stroke-linejoin]=\"go.lineJoin\"\n\t\t\t\t\t\t\t[style.transform]=\"\n\t\t\t\t\t\t\t\tstrand.offset !== 0 ? 'translate(0, ' + strand.offset + 'px)' : null\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\t\t\t}\n\t\t\t@if (pathWarp(); as warp) {\n\t\t\t\t<svg\n\t\t\t\t\t[attr.width]=\"warp.width\"\n\t\t\t\t\t[attr.height]=\"warp.height\"\n\t\t\t\t\t[attr.viewBox]=\"'0 0 ' + warp.width + ' ' + warp.height\"\n\t\t\t\t\tstyle=\"position: absolute; inset: 0; overflow: visible; pointer-events: none\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t@for (line of warp.pathLines; track line.pathId) {\n\t\t\t\t\t\t\t<path [attr.id]=\"line.pathId\" [attr.d]=\"line.d\" fill=\"none\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t</defs>\n\t\t\t\t\t@for (line of warp.pathLines; track line.pathId) {\n\t\t\t\t\t\t<text\n\t\t\t\t\t\t\t[attr.font-size]=\"warp.baseFontSize\"\n\t\t\t\t\t\t\t[attr.font-family]=\"warp.baseFontFamily\"\n\t\t\t\t\t\t\t[attr.fill]=\"warp.baseColor\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<textPath\n\t\t\t\t\t\t\t\t[attr.href]=\"'#' + line.pathId\"\n\t\t\t\t\t\t\t\t[attr.startOffset]=\"warp.startOffset\"\n\t\t\t\t\t\t\t\t[attr.text-anchor]=\"warp.textAnchor\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@for (seg of line.segments; track $index) {\n\t\t\t\t\t\t\t\t\t<tspan\n\t\t\t\t\t\t\t\t\t\t[attr.fill]=\"seg.style?.color ?? warp.baseColor\"\n\t\t\t\t\t\t\t\t\t\t[attr.font-weight]=\"seg.style?.bold ? 700 : 400\"\n\t\t\t\t\t\t\t\t\t\t[attr.font-style]=\"seg.style?.italic ? 'italic' : 'normal'\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ seg.text }}\n\t\t\t\t\t\t\t\t\t</tspan>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</textPath>\n\t\t\t\t\t\t</text>\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\t\t\t} @else if (hasText()) {\n\t\t\t\t<div class=\"pptx-ng-text\" [ngStyle]=\"warpedTextStyle()\">\n\t\t\t\t\t@for (para of paragraphs(); track $index) {\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclass=\"pptx-ng-para\"\n\t\t\t\t\t\t\t[ngStyle]=\"para.paragraphStyle ?? null\"\n\t\t\t\t\t\t\t[style.padding-left.px]=\"para.indentPx\"\n\t\t\t\t\t\t\t[style.text-indent.px]=\"para.textIndentPx ?? null\"\n\t\t\t\t\t\t\t[style.line-height]=\"para.lineHeight ?? null\"\n\t\t\t\t\t\t\t[style.margin-top.px]=\"para.spaceBeforePx ?? null\"\n\t\t\t\t\t\t\t[style.margin-bottom.px]=\"para.spaceAfterPx ?? null\"\n\t\t\t\t\t\t\t[style.font-size.px]=\"para.strutFontSizePx ?? null\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (para.bulletPicture?.src) {\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tclass=\"pptx-ng-bullet-image\"\n\t\t\t\t\t\t\t\t\t[src]=\"para.bulletPicture.src\"\n\t\t\t\t\t\t\t\t\t[alt]=\"para.bulletPicture.accessibleLabel\"\n\t\t\t\t\t\t\t\t\t[style.width.px]=\"para.bulletPicture.sizePx\"\n\t\t\t\t\t\t\t\t\t[style.height.px]=\"para.bulletPicture.sizePx\"\n\t\t\t\t\t\t\t\t\tstyle=\"\n\t\t\t\t\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\t\t\t\t\t\tmargin-inline-end: 4px;\n\t\t\t\t\t\t\t\t\t\tobject-fit: contain;\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t} @else if (para.bulletMarker) {\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"pptx-ng-bullet\"\n\t\t\t\t\t\t\t\t\t[ngStyle]=\"para.bulletStyle\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"para.bulletPicture?.accessibleLabel ?? null\"\n\t\t\t\t\t\t\t\t\t>{{ para.bulletMarker }}</span\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (textBuildSpecs()[$index]; as spec) {\n\t\t\t\t\t\t\t\t<!-- Staged text build: render the split pieces so each one\n\t\t\t\t\t\t\t\t carries its own sub-animation. -->\n\t\t\t\t\t\t\t\t@if (spec.granularity === 'paragraph') {\n\t\t\t\t\t\t\t\t\t<span [attr.data-anim-id]=\"spec.animId\" [ngStyle]=\"buildSpanStyle(spec)\">{{\n\t\t\t\t\t\t\t\t\t\tparagraphText(para)\n\t\t\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t@for (span of spec.spans ?? []; track $index) {\n\t\t\t\t\t\t\t\t\t\t<span [attr.data-anim-id]=\"span.animId\" [ngStyle]=\"buildSpanStyle(span)\">{{\n\t\t\t\t\t\t\t\t\t\t\tspan.text\n\t\t\t\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t@for (run of para.runs; track $index) {\n\t\t\t\t\t\t\t\t\t@if (run.equationXml) {\n\t\t\t\t\t\t\t\t\t\t<pptx-equation-renderer\n\t\t\t\t\t\t\t\t\t\t\t[equationXml]=\"run.equationXml\"\n\t\t\t\t\t\t\t\t\t\t\t[equationNumber]=\"run.equationNumber\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t} @else if (\n\t\t\t\t\t\t\t\t\t\trun.text ===\n\t\t\t\t\t\t\t\t\t\t'\n'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t} @else if (run.reflection; as refl) {\n\t\t\t\t\t\t\t\t\t\t<!-- `a:reflection`: wrapped HERE, around the whole base\n\t\t\t\t\t\t\t\t\t\t run (`runBase`), rather than inside its href/ruby/plain\n\t\t\t\t\t\t\t\t\t\t branches - a `<ruby>` run's own `display: ruby` (which\n\t\t\t\t\t\t\t\t\t\t positions the annotation above its base text) would\n\t\t\t\t\t\t\t\t\t\t break if forced to `display: inline-block` to host the\n\t\t\t\t\t\t\t\t\t\t mirror. Cross-browser, unlike the `-webkit-box-reflect`\n\t\t\t\t\t\t\t\t\t\t this replaced (Firefox never implemented it). -->\n\t\t\t\t\t\t\t\t\t\t<span style=\"position: relative; display: inline-block\">\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"runBase; context: { run: run }\" />\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pptx-ng-text-reflection\" aria-hidden=\"true\" [ngStyle]=\"refl\"\n\t\t\t\t\t\t\t\t\t\t\t\t><span [ngStyle]=\"run.style\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><ng-container\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t*ngTemplateOutlet=\"runContent; context: { run: run }\" /></span\n\t\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"runBase; context: { run: run }\" />\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (para.isEmpty) {\n\t\t\t\t\t\t\t\t<!-- An authored blank line has no runs, so without this the\n\t\t\t\t\t\t\t\t <p> collapses to zero height and the gap a deck puts\n\t\t\t\t\t\t\t\t between a heading and its bullet list disappears. -->\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t}\n\t@default {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-unsupported\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<div class=\"pptx-ng-placeholder\">{{ placeholderLabel() }}</div>\n\t\t</div>\n\t}\n}\n\n<!-- Soft-edge feather <filter> def, referenced via filter: url(#soft-edge-<id>). -->\n@if (softEdgeFilter(); as sef) {\n\t<svg\n\t\twidth=\"0\"\n\t\theight=\"0\"\n\t\taria-hidden=\"true\"\n\t\tstyle=\"position: absolute; width: 0; height: 0; overflow: hidden\"\n\t>\n\t\t<defs>\n\t\t\t<filter\n\t\t\t\t[attr.id]=\"sef.id\"\n\t\t\t\tx=\"-20%\"\n\t\t\t\ty=\"-20%\"\n\t\t\t\twidth=\"140%\"\n\t\t\t\theight=\"140%\"\n\t\t\t\tcolor-interpolation-filters=\"sRGB\"\n\t\t\t>\n\t\t\t\t<feGaussianBlur in=\"SourceAlpha\" [attr.stdDeviation]=\"sef.radius\" result=\"softEdgeAlpha\" />\n\t\t\t\t<feComposite in=\"SourceGraphic\" in2=\"softEdgeAlpha\" operator=\"in\" />\n\t\t\t</filter>\n\t\t</defs>\n\t</svg>\n}\n\n<!-- Duotone image-effect <filter> def, referenced via filter: url(#id). -->\n@if (duotoneFilter(); as df) {\n\t<svg\n\t\twidth=\"0\"\n\t\theight=\"0\"\n\t\taria-hidden=\"true\"\n\t\tstyle=\"position: absolute; width: 0; height: 0; overflow: hidden\"\n\t>\n\t\t<defs>\n\t\t\t<filter [attr.id]=\"df.id\" color-interpolation-filters=\"sRGB\">\n\t\t\t\t<feColorMatrix type=\"matrix\" [attr.values]=\"df.primitives[0].values\" />\n\t\t\t\t<feComponentTransfer>\n\t\t\t\t\t<feFuncR\n\t\t\t\t\t\ttype=\"linear\"\n\t\t\t\t\t\t[attr.slope]=\"df.primitives[1].channels[0].slope\"\n\t\t\t\t\t\t[attr.intercept]=\"df.primitives[1].channels[0].intercept\"\n\t\t\t\t\t/>\n\t\t\t\t\t<feFuncG\n\t\t\t\t\t\ttype=\"linear\"\n\t\t\t\t\t\t[attr.slope]=\"df.primitives[1].channels[1].slope\"\n\t\t\t\t\t\t[attr.intercept]=\"df.primitives[1].channels[1].intercept\"\n\t\t\t\t\t/>\n\t\t\t\t\t<feFuncB\n\t\t\t\t\t\ttype=\"linear\"\n\t\t\t\t\t\t[attr.slope]=\"df.primitives[1].channels[2].slope\"\n\t\t\t\t\t\t[attr.intercept]=\"df.primitives[1].channels[2].intercept\"\n\t\t\t\t\t/>\n\t\t\t\t</feComponentTransfer>\n\t\t\t</filter>\n\t\t</defs>\n\t</svg>\n}\n\n<!--\n\tOne run's base element (hyperlink / ruby / plain span), reused via\n\t`ngTemplateOutlet` both directly and inside the `a:reflection` wrapper above,\n\tso the reflection case does not duplicate this three-way branch.\n-->\n<ng-template #runBase let-run=\"run\">\n\t@if (run.href) {\n\t\t<a\n\t\t\tclass=\"pptx-ng-link\"\n\t\t\t[href]=\"run.href\"\n\t\t\ttarget=\"_blank\"\n\t\t\trel=\"noopener noreferrer\"\n\t\t\t[attr.title]=\"run.tooltip ?? null\"\n\t\t\t[ngStyle]=\"run.style\"\n\t\t\t><ng-container *ngTemplateOutlet=\"runContent; context: { run: run }\"\n\t\t/></a>\n\t} @else if (run.rubyText) {\n\t\t<!-- `a:ruby`: the phonetic guide sits above its base\n\t\t text; the <rp> parentheses are the fallback for a\n\t\t browser without ruby support. -->\n\t\t<ruby [ngStyle]=\"run.style\"\n\t\t\t><ng-container *ngTemplateOutlet=\"runContent; context: { run: run }\" /><rp>(</rp\n\t\t\t><rt [ngStyle]=\"run.rubyStyle\">{{ run.rubyText }}</rt\n\t\t\t><rp>)</rp></ruby\n\t\t>\n\t} @else {\n\t\t<span [ngStyle]=\"run.style\"\n\t\t\t><ng-container *ngTemplateOutlet=\"runContent; context: { run: run }\"\n\t\t/></span>\n\t}\n</ng-template>\n\n<!--\n\tA run's text content, honouring shared's per-script font split\n\t(`run.scriptRuns`) and measured tab-stop layout (`run.tabLines`) when\n\teither is present. Both descriptors come from `pptx-viewer-shared`'s\n\t`buildParagraphs` (the per-script split was React-only before this\n\ttemplate existed: CJK, Arabic, Hebrew and Thai text rendered in the wrong\n\ttypeface here; the tab layout was likewise React-only, so a TOC-style row\n\tlost its leader dots and right-aligned page number). Reused via\n\t`ngTemplateOutlet` for the run's span / anchor / ruby base text, so all\n\tthree carry the same content logic.\n-->\n<ng-template #runContent let-run=\"run\">\n\t@if (run.tabLines) {\n\t\t@for (line of run.tabLines; track $index) {\n\t\t\t<span style=\"display: inline-block; white-space: nowrap\">\n\t\t\t\t@for (piece of line.pieces; track $index) {\n\t\t\t\t\t@if (piece.leaderStyle) {\n\t\t\t\t\t\t<span aria-hidden=\"true\" [ngStyle]=\"piece.leaderStyle\">{{ piece.leaderText }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<span [ngStyle]=\"piece.style\">{{ piece.text }}</span>\n\t\t\t\t}\n\t\t\t</span>\n\t\t\t@if (!$last) {\n\t\t\t\t<br />\n\t\t\t}\n\t\t}\n\t} @else if (run.scriptRuns) {\n\t\t@for (piece of run.scriptRuns; track $index) {\n\t\t\t@if (piece.style) {\n\t\t\t\t<span [ngStyle]=\"piece.style\">{{ piece.text }}</span>\n\t\t\t} @else {\n\t\t\t\t{{ piece.text }}\n\t\t\t}\n\t\t}\n\t} @else {\n\t\t{{ run.text }}\n\t}\n</ng-template>\n", dependencies: [{ kind: "component", type: ElementRendererComponent, selector: "pptx-element-renderer", inputs: ["element", "mediaDataUrls", "zIndex", "obstacles", "canvasWidth", "canvasHeight", "interactive", "marked", "exposeElementId", "presenting", "editable", "fieldContext", "slideElements", "editTemplateMode", "parentGroupFill"], outputs: ["cellCommit", "tableChange"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ConnectorRendererComponent, selector: "pptx-connector-renderer", inputs: ["element", "zIndex", "obstacles", "canvasWidth", "canvasHeight", "interactive", "marked", "exposeElementId", "animationState"] }, { kind: "component", type: TableRendererComponent, selector: "pptx-table-renderer", inputs: ["element", "editable"], outputs: ["cellCommit", "tableChange"] }, { kind: "component", type: ChartElementViewComponent, selector: "pptx-chart-element-view", inputs: ["element", "editable", "animationState"] }, { kind: "component", type: SmartArtRendererComponent, selector: "pptx-smart-art-renderer", inputs: ["element", "editable", "animationState"] }, { kind: "component", type: SmartArt3DRendererComponent, selector: "pptx-smart-art-3d-renderer", inputs: ["element", "zIndex", "canEdit", "markElement"] }, { kind: "component", type: InkRendererComponent, selector: "pptx-ink-renderer", inputs: ["element", "zIndex", "mediaDataUrls", "replay", "markElement", "exposeElementId"] }, { kind: "component", type: ContentPartRendererComponent, selector: "pptx-content-part-renderer", inputs: ["element", "zIndex", "replay", "markElement", "exposeElementId"] }, { kind: "component", type: MediaRendererComponent, selector: "pptx-media-renderer", inputs: ["element", "mediaDataUrls", "zIndex", "interactive", "marked", "exposeElementId", "presenting", "placeholderLabel"] }, { kind: "component", type: OleRendererComponent, selector: "pptx-ole-renderer", inputs: ["element"] }, { kind: "component", type: Model3DRendererComponent, selector: "pptx-model3d-renderer", inputs: ["element", "zIndex", "mediaDataUrls", "interactive", "markElement", "exposeElementId"] }, { kind: "component", type: ZoomRendererComponent, selector: "pptx-zoom-renderer", inputs: ["element", "zIndex", "mediaDataUrls", "markElement"] }, { kind: "component", type: EquationRendererComponent, selector: "pptx-equation-renderer", inputs: ["equationXml", "equationNumber"] }, { kind: "component", type: ImageRendererComponent, selector: "pptx-image-renderer", inputs: ["element", "mediaDataUrls", "zIndex", "interactive", "marked", "exposeElementId"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
88971
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: ElementRendererComponent, isStandalone: true, selector: "pptx-element-renderer", inputs: { element: { classPropertyName: "element", publicName: "element", isSignal: true, isRequired: true, transformFunction: null }, mediaDataUrls: { classPropertyName: "mediaDataUrls", publicName: "mediaDataUrls", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, obstacles: { classPropertyName: "obstacles", publicName: "obstacles", isSignal: true, isRequired: false, transformFunction: null }, canvasWidth: { classPropertyName: "canvasWidth", publicName: "canvasWidth", isSignal: true, isRequired: false, transformFunction: null }, canvasHeight: { classPropertyName: "canvasHeight", publicName: "canvasHeight", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, marked: { classPropertyName: "marked", publicName: "marked", isSignal: true, isRequired: false, transformFunction: null }, exposeElementId: { classPropertyName: "exposeElementId", publicName: "exposeElementId", isSignal: true, isRequired: false, transformFunction: null }, presenting: { classPropertyName: "presenting", publicName: "presenting", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, fieldContext: { classPropertyName: "fieldContext", publicName: "fieldContext", isSignal: true, isRequired: false, transformFunction: null }, slideElements: { classPropertyName: "slideElements", publicName: "slideElements", isSignal: true, isRequired: false, transformFunction: null }, editTemplateMode: { classPropertyName: "editTemplateMode", publicName: "editTemplateMode", isSignal: true, isRequired: false, transformFunction: null }, parentGroupFill: { classPropertyName: "parentGroupFill", publicName: "parentGroupFill", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cellCommit: "cellCommit", tableChange: "tableChange" }, host: { classAttribute: "contents" }, ngImport: i0, template: "@switch (true) {\n\t@case (isHidden()) {\n\t\t<!--\n\t\t\tHidden via the Selection Pane: draw nothing, exactly as PowerPoint\n\t\t\tdoes. This is the FIRST case on purpose - @switch takes the first\n\t\t\tmatch, so one empty branch suppresses every element type at once\n\t\t\twithout wrapping (and re-indenting) the whole template. The host\n\t\t\tcarries \\`display: contents\\`, so an empty component collapses.\n\t\t\tRendering nothing (rather than an invisible box) is what keeps the\n\t\t\telement out of hit-testing, the tab order and the export raster; it\n\t\t\tstays listed in and selectable from the Selection Pane, which reads\n\t\t\tthe slide model rather than the DOM.\n\t\t-->\n\t}\n\t@case (element().type === 'connector') {\n\t\t<pptx-connector-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[obstacles]=\"obstacles()\"\n\t\t\t[canvasWidth]=\"canvasWidth()\"\n\t\t\t[canvasHeight]=\"canvasHeight()\"\n\t\t\t[interactive]=\"interactive()\"\n\t\t\t[marked]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t\t[animationState]=\"animationState()\"\n\t\t/>\n\t}\n\t@case (element().type === 'ink') {\n\t\t<!--\n\t\t\tThis renderer (and zoom / model3d / 3D SmartArt below) positions its\n\t\t\town root box, so it takes the neutral element marker\n\t\t\t(data-pptx-element) as an input instead of being wrapped in a marked\n\t\t\tbox the way chart / table / OLE are: an outer positioned box would\n\t\t\toffset it twice.\n\t\t-->\n\t\t<pptx-ink-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[replay]=\"presenting()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'contentPart') {\n\t\t<!--\n\t\t\tReal PowerPoint ink. Same positioning contract as pptx-ink-renderer\n\t\t\tabove: the renderer's own root is absolutely positioned, so it takes\n\t\t\tthe neutral element marker as an input rather than being wrapped.\n\t\t-->\n\t\t<pptx-content-part-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[replay]=\"presenting()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'zoom') {\n\t\t<pptx-zoom-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t/>\n\t}\n\t@case (element().type === 'model3d') {\n\t\t<pptx-model3d-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'smartArt' && smartArt3D()) {\n\t\t<pptx-smart-art-3d-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[canEdit]=\"interactive() && editable()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t/>\n\t}\n\t@case (element().type === 'smartArt') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-smartart\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-smart-art-renderer\n\t\t\t\t[element]=\"element()\"\n\t\t\t\t[editable]=\"interactive() && editable()\"\n\t\t\t\t[animationState]=\"animationState()\"\n\t\t\t/>\n\t\t</div>\n\t}\n\t@case (element().type === 'ole') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-ole\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-ole-renderer [element]=\"element()\" />\n\t\t</div>\n\t}\n\t@case (element().type === 'chart') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-chart\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-chart-element-view\n\t\t\t\t[element]=\"element()\"\n\t\t\t\t[editable]=\"interactive() && editable()\"\n\t\t\t\t[animationState]=\"animationState()\"\n\t\t\t/>\n\t\t</div>\n\t}\n\t@case (element().type === 'table') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-table\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-table-renderer\n\t\t\t\t[element]=\"element()\"\n\t\t\t\t[editable]=\"interactive() && editable()\"\n\t\t\t\t(cellCommit)=\"cellCommit.emit({ id: element().id, commit: $event })\"\n\t\t\t\t(tableChange)=\"tableChange.emit($event)\"\n\t\t\t/>\n\t\t</div>\n\t}\n\t@case (element().type === 'group') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-group\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t@for (child of children(); track child.id) {\n\t\t\t\t<pptx-element-renderer\n\t\t\t\t\t[element]=\"child\"\n\t\t\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t\t\t[zIndex]=\"$index\"\n\t\t\t\t\t[interactive]=\"interactive()\"\n\t\t\t\t\t[marked]=\"marked()\"\n\t\t\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t\t\t\t[presenting]=\"presenting()\"\n\t\t\t\t\t[fieldContext]=\"fieldContext()\"\n\t\t\t\t\t[slideElements]=\"slideElements()\"\n\t\t\t\t\t[parentGroupFill]=\"childParentGroupFill()\"\n\t\t\t\t/>\n\t\t\t}\n\t\t</div>\n\t}\n\t@case (isImageLike()) {\n\t\t<pptx-image-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[interactive]=\"interactive()\"\n\t\t\t[marked]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'media') {\n\t\t<pptx-media-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[interactive]=\"interactive()\"\n\t\t\t[marked]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t\t[presenting]=\"presenting()\"\n\t\t\t[placeholderLabel]=\"placeholderLabel()\"\n\t\t/>\n\t}\n\t@case (isShapeLike()) {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-shape\"\n\t\t\t[ngStyle]=\"shapeContainerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<!-- Per-sub-path fill overlay: a multi-sub-path preset (`smileyFace`'s\n\t\t\t open eyes, `actionButtonBlank`'s darkened bevel well) or custom\n\t\t\t geometry whose sub-paths cannot share one CSS background-color. -->\n\t\t\t@if (subpathFill(); as sf) {\n\t\t\t\t<svg\n\t\t\t\t\tclass=\"pptx-ng-subpath-fill\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t[attr.viewBox]=\"subpathFillViewBox()\"\n\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\tstyle=\"position: absolute; inset: 0; width: 100%; height: 100%\"\n\t\t\t\t>\n\t\t\t\t\t@for (paint of sf.paints; track $index) {\n\t\t\t\t\t\t<path [attr.d]=\"paint.d\" [attr.fill]=\"paint.fill\" stroke=\"none\" />\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\t\t\t}\n\t\t\t@if (fillOverlay(); as ov) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"pptx-ng-fill-overlay\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle=\"position: absolute; inset: 0; pointer-events: none\"\n\t\t\t\t\t[style.background]=\"ov.color\"\n\t\t\t\t\t[style.mix-blend-mode]=\"ov.blendMode\"\n\t\t\t\t></div>\n\t\t\t}\n\t\t\t<!-- Mirrored reflection sibling (`a:reflection`): cross-browser, unlike\n\t\t\t the `-webkit-box-reflect` this replaced (Firefox never implemented\n\t\t\t that property, so reflections were invisible there entirely). -->\n\t\t\t@if (reflection(); as refl) {\n\t\t\t\t<div class=\"pptx-ng-reflection\" aria-hidden=\"true\" [ngStyle]=\"refl.wrapperStyle\">\n\t\t\t\t\t@if (refl.imgSrc) {\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t[src]=\"refl.imgSrc\"\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t\t\tstyle=\"width: 100%; height: 100%\"\n\t\t\t\t\t\t\t[ngStyle]=\"refl.imgFitStyle\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t} @else if (refl.fill) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle=\"width: 100%; height: 100%\"\n\t\t\t\t\t\t\t[style.background-color]=\"refl.fill.backgroundColor\"\n\t\t\t\t\t\t\t[style.background-image]=\"refl.fill.backgroundImage\"\n\t\t\t\t\t\t\t[style.background-size]=\"refl.fill.backgroundSize\"\n\t\t\t\t\t\t\t[style.background-position]=\"refl.fill.backgroundPosition\"\n\t\t\t\t\t\t\t[style.background-repeat]=\"refl.fill.backgroundRepeat\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<!-- Hollow frame hit target: an unfilled, textless shape is hit-tested\n\t\t\t on its outline only, so its interior lets clicks through. -->\n\t\t\t@if (hollowHit(); as hit) {\n\t\t\t\t<svg\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t[attr.viewBox]=\"outlineViewBox()\"\n\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\tstyle=\"\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\tinset: 0;\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\toverflow: visible;\n\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\t[attr.d]=\"hit.d\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"transparent\"\n\t\t\t\t\t\t[attr.stroke-width]=\"hit.strokeWidth\"\n\t\t\t\t\t\tstyle=\"pointer-events: stroke\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t}\n\t\t\t<!-- Stroked outline: a CSS border takes one flat colour, and cannot\n\t\t\t outline an open preset (`line`, `arc`) at all. -->\n\t\t\t@if (gradientOutline(); as go) {\n\t\t\t\t<svg\n\t\t\t\t\tclass=\"pptx-ng-gradient-outline\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t[attr.viewBox]=\"outlineViewBox()\"\n\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\tstyle=\"\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\tinset: 0;\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\toverflow: visible;\n\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\"\n\t\t\t\t>\n\t\t\t\t\t@if (go.paint; as paint) {\n\t\t\t\t\t\t<defs>\n\t\t\t\t\t\t\t@if (paint.kind === 'pattern') {\n\t\t\t\t\t\t\t\t<pattern\n\t\t\t\t\t\t\t\t\t[attr.id]=\"paint.id\"\n\t\t\t\t\t\t\t\t\t[attr.width]=\"paint.width\"\n\t\t\t\t\t\t\t\t\t[attr.height]=\"paint.height\"\n\t\t\t\t\t\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<image\n\t\t\t\t\t\t\t\t\t\t[attr.href]=\"paint.href\"\n\t\t\t\t\t\t\t\t\t\t[attr.width]=\"paint.width\"\n\t\t\t\t\t\t\t\t\t\t[attr.height]=\"paint.height\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</pattern>\n\t\t\t\t\t\t\t} @else if (paint.kind === 'radial') {\n\t\t\t\t\t\t\t\t<radialGradient\n\t\t\t\t\t\t\t\t\t[attr.id]=\"paint.id\"\n\t\t\t\t\t\t\t\t\t[attr.cx]=\"paint.cx\"\n\t\t\t\t\t\t\t\t\t[attr.cy]=\"paint.cy\"\n\t\t\t\t\t\t\t\t\t[attr.r]=\"paint.r\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t@for (stop of paint.stops; track $index) {\n\t\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\t\t[attr.offset]=\"stop.offset\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-color]=\"stop.color\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-opacity]=\"stop.opacity\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</radialGradient>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<linearGradient\n\t\t\t\t\t\t\t\t\t[attr.id]=\"paint.id\"\n\t\t\t\t\t\t\t\t\t[attr.x1]=\"paint.x1\"\n\t\t\t\t\t\t\t\t\t[attr.y1]=\"paint.y1\"\n\t\t\t\t\t\t\t\t\t[attr.x2]=\"paint.x2\"\n\t\t\t\t\t\t\t\t\t[attr.y2]=\"paint.y2\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t@for (stop of paint.stops; track $index) {\n\t\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\t\t[attr.offset]=\"stop.offset\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-color]=\"stop.color\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-opacity]=\"stop.opacity\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</defs>\n\t\t\t\t\t}\n\t\t\t\t\t@for (strand of go.strands; track $index) {\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t[attr.d]=\"go.d\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t[attr.stroke]=\"go.stroke\"\n\t\t\t\t\t\t\t[attr.stroke-width]=\"strand.strokeWidth\"\n\t\t\t\t\t\t\t[attr.stroke-dasharray]=\"go.dashArray\"\n\t\t\t\t\t\t\t[attr.stroke-linecap]=\"go.lineCap\"\n\t\t\t\t\t\t\t[attr.stroke-linejoin]=\"go.lineJoin\"\n\t\t\t\t\t\t\t[style.transform]=\"\n\t\t\t\t\t\t\t\tstrand.offset !== 0 ? 'translate(0, ' + strand.offset + 'px)' : null\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\t\t\t}\n\t\t\t@if (pathWarp(); as warp) {\n\t\t\t\t<svg\n\t\t\t\t\t[attr.width]=\"warp.width\"\n\t\t\t\t\t[attr.height]=\"warp.height\"\n\t\t\t\t\t[attr.viewBox]=\"'0 0 ' + warp.width + ' ' + warp.height\"\n\t\t\t\t\tstyle=\"position: absolute; inset: 0; overflow: visible; pointer-events: none\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t@for (line of warp.pathLines; track line.pathId) {\n\t\t\t\t\t\t\t<path [attr.id]=\"line.pathId\" [attr.d]=\"line.d\" fill=\"none\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t</defs>\n\t\t\t\t\t@for (line of warp.pathLines; track line.pathId) {\n\t\t\t\t\t\t<text\n\t\t\t\t\t\t\t[attr.font-size]=\"warp.baseFontSize\"\n\t\t\t\t\t\t\t[attr.font-family]=\"warp.baseFontFamily\"\n\t\t\t\t\t\t\t[attr.fill]=\"warp.baseColor\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<textPath\n\t\t\t\t\t\t\t\t[attr.href]=\"'#' + line.pathId\"\n\t\t\t\t\t\t\t\t[attr.startOffset]=\"warp.startOffset\"\n\t\t\t\t\t\t\t\t[attr.text-anchor]=\"warp.textAnchor\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@for (seg of line.segments; track $index) {\n\t\t\t\t\t\t\t\t\t<tspan\n\t\t\t\t\t\t\t\t\t\t[attr.fill]=\"seg.style?.color ?? warp.baseColor\"\n\t\t\t\t\t\t\t\t\t\t[attr.font-weight]=\"seg.style?.bold ? 700 : 400\"\n\t\t\t\t\t\t\t\t\t\t[attr.font-style]=\"seg.style?.italic ? 'italic' : 'normal'\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ seg.text }}\n\t\t\t\t\t\t\t\t\t</tspan>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</textPath>\n\t\t\t\t\t\t</text>\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\t\t\t} @else if (hasText()) {\n\t\t\t\t<div class=\"pptx-ng-text\" [ngStyle]=\"warpedTextStyle()\">\n\t\t\t\t\t@for (para of paragraphs(); track $index) {\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclass=\"pptx-ng-para\"\n\t\t\t\t\t\t\t[ngStyle]=\"para.paragraphStyle ?? null\"\n\t\t\t\t\t\t\t[style.padding-left.px]=\"para.indentPx\"\n\t\t\t\t\t\t\t[style.text-indent.px]=\"para.textIndentPx ?? null\"\n\t\t\t\t\t\t\t[style.line-height]=\"para.lineHeight ?? null\"\n\t\t\t\t\t\t\t[style.margin-top.px]=\"para.spaceBeforePx ?? null\"\n\t\t\t\t\t\t\t[style.margin-bottom.px]=\"para.spaceAfterPx ?? null\"\n\t\t\t\t\t\t\t[style.font-size.px]=\"para.strutFontSizePx ?? null\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (para.bulletPicture?.src) {\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tclass=\"pptx-ng-bullet-image\"\n\t\t\t\t\t\t\t\t\t[src]=\"para.bulletPicture.src\"\n\t\t\t\t\t\t\t\t\t[alt]=\"para.bulletPicture.accessibleLabel\"\n\t\t\t\t\t\t\t\t\t[style.width.px]=\"para.bulletPicture.sizePx\"\n\t\t\t\t\t\t\t\t\t[style.height.px]=\"para.bulletPicture.sizePx\"\n\t\t\t\t\t\t\t\t\tstyle=\"\n\t\t\t\t\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\t\t\t\t\t\tmargin-inline-end: 4px;\n\t\t\t\t\t\t\t\t\t\tobject-fit: contain;\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t} @else if (para.bulletMarker) {\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"pptx-ng-bullet\"\n\t\t\t\t\t\t\t\t\t[ngStyle]=\"para.bulletStyle\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"para.bulletPicture?.accessibleLabel ?? null\"\n\t\t\t\t\t\t\t\t\t>{{ para.bulletMarker }}</span\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (textBuildSpecs()[$index]; as spec) {\n\t\t\t\t\t\t\t\t<!-- Staged text build: render the split pieces so each one\n\t\t\t\t\t\t\t\t carries its own sub-animation. -->\n\t\t\t\t\t\t\t\t@if (spec.granularity === 'paragraph') {\n\t\t\t\t\t\t\t\t\t<span [attr.data-anim-id]=\"spec.animId\" [ngStyle]=\"buildSpanStyle(spec)\">{{\n\t\t\t\t\t\t\t\t\t\tparagraphText(para)\n\t\t\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t@for (span of spec.spans ?? []; track $index) {\n\t\t\t\t\t\t\t\t\t\t<span [attr.data-anim-id]=\"span.animId\" [ngStyle]=\"buildSpanStyle(span)\">{{\n\t\t\t\t\t\t\t\t\t\t\tspan.text\n\t\t\t\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t@for (run of para.runs; track $index) {\n\t\t\t\t\t\t\t\t\t@if (run.equationXml) {\n\t\t\t\t\t\t\t\t\t\t<pptx-equation-renderer\n\t\t\t\t\t\t\t\t\t\t\t[equationXml]=\"run.equationXml\"\n\t\t\t\t\t\t\t\t\t\t\t[equationNumber]=\"run.equationNumber\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t} @else if (\n\t\t\t\t\t\t\t\t\t\trun.text ===\n\t\t\t\t\t\t\t\t\t\t'\n'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t} @else if (run.reflection; as refl) {\n\t\t\t\t\t\t\t\t\t\t<!-- `a:reflection`: wrapped HERE, around the whole base\n\t\t\t\t\t\t\t\t\t\t run (`runBase`), rather than inside its href/ruby/plain\n\t\t\t\t\t\t\t\t\t\t branches - a `<ruby>` run's own `display: ruby` (which\n\t\t\t\t\t\t\t\t\t\t positions the annotation above its base text) would\n\t\t\t\t\t\t\t\t\t\t break if forced to `display: inline-block` to host the\n\t\t\t\t\t\t\t\t\t\t mirror. Cross-browser, unlike the `-webkit-box-reflect`\n\t\t\t\t\t\t\t\t\t\t this replaced (Firefox never implemented it). -->\n\t\t\t\t\t\t\t\t\t\t<span style=\"position: relative; display: inline-block\">\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"runBase; context: { run: run }\" />\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pptx-ng-text-reflection\" aria-hidden=\"true\" [ngStyle]=\"refl\"\n\t\t\t\t\t\t\t\t\t\t\t\t><span [ngStyle]=\"run.style\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><ng-container\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t*ngTemplateOutlet=\"runContent; context: { run: run }\" /></span\n\t\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"runBase; context: { run: run }\" />\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (para.isEmpty) {\n\t\t\t\t\t\t\t\t<!-- An authored blank line has no runs, so without this the\n\t\t\t\t\t\t\t\t <p> collapses to zero height and the gap a deck puts\n\t\t\t\t\t\t\t\t between a heading and its bullet list disappears. -->\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t}\n\t@default {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-unsupported\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<div class=\"pptx-ng-placeholder\">{{ placeholderLabel() }}</div>\n\t\t</div>\n\t}\n}\n\n<!-- Soft-edge feather <filter> def, referenced via filter: url(#soft-edge-<id>). -->\n@if (softEdgeFilter(); as sef) {\n\t<svg\n\t\twidth=\"0\"\n\t\theight=\"0\"\n\t\taria-hidden=\"true\"\n\t\tstyle=\"position: absolute; width: 0; height: 0; overflow: hidden\"\n\t>\n\t\t<defs>\n\t\t\t<filter\n\t\t\t\t[attr.id]=\"sef.id\"\n\t\t\t\tx=\"-20%\"\n\t\t\t\ty=\"-20%\"\n\t\t\t\twidth=\"140%\"\n\t\t\t\theight=\"140%\"\n\t\t\t\tcolor-interpolation-filters=\"sRGB\"\n\t\t\t>\n\t\t\t\t<feGaussianBlur in=\"SourceAlpha\" [attr.stdDeviation]=\"sef.radius\" result=\"softEdgeAlpha\" />\n\t\t\t\t<feComposite in=\"SourceGraphic\" in2=\"softEdgeAlpha\" operator=\"in\" />\n\t\t\t</filter>\n\t\t</defs>\n\t</svg>\n}\n\n<!-- Duotone image-effect <filter> def, referenced via filter: url(#id). -->\n@if (duotoneFilter(); as df) {\n\t<svg\n\t\twidth=\"0\"\n\t\theight=\"0\"\n\t\taria-hidden=\"true\"\n\t\tstyle=\"position: absolute; width: 0; height: 0; overflow: hidden\"\n\t>\n\t\t<defs>\n\t\t\t<filter [attr.id]=\"df.id\" color-interpolation-filters=\"sRGB\">\n\t\t\t\t<feColorMatrix type=\"matrix\" [attr.values]=\"df.primitives[0].values\" />\n\t\t\t\t<feComponentTransfer>\n\t\t\t\t\t<feFuncR\n\t\t\t\t\t\ttype=\"linear\"\n\t\t\t\t\t\t[attr.slope]=\"df.primitives[1].channels[0].slope\"\n\t\t\t\t\t\t[attr.intercept]=\"df.primitives[1].channels[0].intercept\"\n\t\t\t\t\t/>\n\t\t\t\t\t<feFuncG\n\t\t\t\t\t\ttype=\"linear\"\n\t\t\t\t\t\t[attr.slope]=\"df.primitives[1].channels[1].slope\"\n\t\t\t\t\t\t[attr.intercept]=\"df.primitives[1].channels[1].intercept\"\n\t\t\t\t\t/>\n\t\t\t\t\t<feFuncB\n\t\t\t\t\t\ttype=\"linear\"\n\t\t\t\t\t\t[attr.slope]=\"df.primitives[1].channels[2].slope\"\n\t\t\t\t\t\t[attr.intercept]=\"df.primitives[1].channels[2].intercept\"\n\t\t\t\t\t/>\n\t\t\t\t</feComponentTransfer>\n\t\t\t</filter>\n\t\t</defs>\n\t</svg>\n}\n\n<!--\n\tOne run's base element (hyperlink / ruby / plain span), reused via\n\t`ngTemplateOutlet` both directly and inside the `a:reflection` wrapper above,\n\tso the reflection case does not duplicate this three-way branch.\n-->\n<ng-template #runBase let-run=\"run\">\n\t@if (run.href) {\n\t\t<a\n\t\t\tclass=\"pptx-ng-link\"\n\t\t\t[href]=\"run.href\"\n\t\t\ttarget=\"_blank\"\n\t\t\trel=\"noopener noreferrer\"\n\t\t\t[attr.title]=\"run.tooltip ?? null\"\n\t\t\t[ngStyle]=\"run.style\"\n\t\t\t><ng-container *ngTemplateOutlet=\"runContent; context: { run: run }\"\n\t\t/></a>\n\t} @else if (run.rubyText) {\n\t\t<!-- `a:ruby`: the phonetic guide sits above its base\n\t\t text; the <rp> parentheses are the fallback for a\n\t\t browser without ruby support. -->\n\t\t<ruby [ngStyle]=\"run.style\"\n\t\t\t><ng-container *ngTemplateOutlet=\"runContent; context: { run: run }\" /><rp>(</rp\n\t\t\t><rt [ngStyle]=\"run.rubyStyle\">{{ run.rubyText }}</rt\n\t\t\t><rp>)</rp></ruby\n\t\t>\n\t} @else {\n\t\t<span [ngStyle]=\"run.style\"\n\t\t\t><ng-container *ngTemplateOutlet=\"runContent; context: { run: run }\"\n\t\t/></span>\n\t}\n</ng-template>\n\n<!--\n\tA run's text content, honouring shared's per-script font split\n\t(`run.scriptRuns`) and measured tab-stop layout (`run.tabLines`) when\n\teither is present. Both descriptors come from `pptx-viewer-shared`'s\n\t`buildParagraphs` (the per-script split was React-only before this\n\ttemplate existed: CJK, Arabic, Hebrew and Thai text rendered in the wrong\n\ttypeface here; the tab layout was likewise React-only, so a TOC-style row\n\tlost its leader dots and right-aligned page number). Reused via\n\t`ngTemplateOutlet` for the run's span / anchor / ruby base text, so all\n\tthree carry the same content logic.\n-->\n<ng-template #runContent let-run=\"run\">\n\t@if (run.tabLines) {\n\t\t@for (line of run.tabLines; track $index) {\n\t\t\t<span style=\"display: inline-block; white-space: nowrap\">\n\t\t\t\t@for (piece of line.pieces; track $index) {\n\t\t\t\t\t@if (piece.leaderStyle) {\n\t\t\t\t\t\t<span aria-hidden=\"true\" [ngStyle]=\"piece.leaderStyle\">{{ piece.leaderText }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<span [ngStyle]=\"piece.style\">{{ piece.text }}</span>\n\t\t\t\t}\n\t\t\t</span>\n\t\t\t@if (!$last) {\n\t\t\t\t<br />\n\t\t\t}\n\t\t}\n\t} @else if (run.scriptRuns) {\n\t\t<!--\n\t\t\tA bare interpolation as the sole content of an `@if`/`@else` block\n\t\t\tleaks a real leading + trailing whitespace text node: Angular does\n\t\t\tnot collapse that whitespace the way it collapses whitespace between\n\t\t\telement TAGS. Worse, oxfmt's Angular-template printer always breaks a\n\t\t\tblock's content onto its own indented line, even when the block was\n\t\t\twritten as a single line with the braces touching, so writing the\n\t\t\t`{{ x }}` compact ourselves does not survive the next `bun run fmt` /\n\t\t\tpre-commit `lint-staged` pass: it silently re-introduces the leak\n\t\t\t(this happened twice, see `20d4d177`, `18eebb6f`). `<ng-container>`\n\t\t\tdoes not render any DOM node of its own, so wrapping the\n\t\t\tinterpolation in one keeps the no-wrapper-element behaviour of\n\t\t\tReact's `<>{piece.text}</>` fragment while making the interpolation\n\t\t\ttag-adjacent, which both Angular AND oxfmt already treat as safely\n\t\t\tcollapsible (see the many `<span>{{ x }}</span>` one-liners in this\n\t\t\tfile). That was invisible while a paragraph was one run per script\n\t\t\t(two stray spaces at the run's own edges, trimmed visually by the\n\t\t\tbrowser but still present in `textContent`), but shared's per-word /\n\t\t\tper-gap metric split (`text-run-spacing.ts`, issue #149) re-emits\n\t\t\tevery WORD and inter-word GAP as its own sibling run, so the same\n\t\t\tone-space leak lands between every word: \"will choose\" rendered as\n\t\t\t\"will choose\" (five spaces: the word's own trailing leak, the\n\t\t\tgap run's real space plus its OWN two leaks, the next word's leading\n\t\t\tleak). The same leak also showed up one paragraph at a time:\n\t\t\t\"Project\" / \"Atlas\" as two separate paragraphs read back as\n\t\t\t\"ProjectAtlas\" instead of React's \"Project Atlas\", because the\n\t\t\tplain-run `@else` below had the same bug.\n\t\t-->\n\t\t@for (piece of run.scriptRuns; track $index) {\n\t\t\t@if (piece.style) {\n\t\t\t\t<span [ngStyle]=\"piece.style\">{{ piece.text }}</span>\n\t\t\t} @else {\n\t\t\t\t<ng-container>{{ piece.text }}</ng-container>\n\t\t\t}\n\t\t}\n\t} @else {\n\t\t<ng-container>{{ run.text }}</ng-container>\n\t}\n</ng-template>\n", dependencies: [{ kind: "component", type: ElementRendererComponent, selector: "pptx-element-renderer", inputs: ["element", "mediaDataUrls", "zIndex", "obstacles", "canvasWidth", "canvasHeight", "interactive", "marked", "exposeElementId", "presenting", "editable", "fieldContext", "slideElements", "editTemplateMode", "parentGroupFill"], outputs: ["cellCommit", "tableChange"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ConnectorRendererComponent, selector: "pptx-connector-renderer", inputs: ["element", "zIndex", "obstacles", "canvasWidth", "canvasHeight", "interactive", "marked", "exposeElementId", "animationState"] }, { kind: "component", type: TableRendererComponent, selector: "pptx-table-renderer", inputs: ["element", "editable"], outputs: ["cellCommit", "tableChange"] }, { kind: "component", type: ChartElementViewComponent, selector: "pptx-chart-element-view", inputs: ["element", "editable", "animationState"] }, { kind: "component", type: SmartArtRendererComponent, selector: "pptx-smart-art-renderer", inputs: ["element", "editable", "animationState"] }, { kind: "component", type: SmartArt3DRendererComponent, selector: "pptx-smart-art-3d-renderer", inputs: ["element", "zIndex", "canEdit", "markElement"] }, { kind: "component", type: InkRendererComponent, selector: "pptx-ink-renderer", inputs: ["element", "zIndex", "mediaDataUrls", "replay", "markElement", "exposeElementId"] }, { kind: "component", type: ContentPartRendererComponent, selector: "pptx-content-part-renderer", inputs: ["element", "zIndex", "replay", "markElement", "exposeElementId"] }, { kind: "component", type: MediaRendererComponent, selector: "pptx-media-renderer", inputs: ["element", "mediaDataUrls", "zIndex", "interactive", "marked", "exposeElementId", "presenting", "placeholderLabel"] }, { kind: "component", type: OleRendererComponent, selector: "pptx-ole-renderer", inputs: ["element"] }, { kind: "component", type: Model3DRendererComponent, selector: "pptx-model3d-renderer", inputs: ["element", "zIndex", "mediaDataUrls", "interactive", "markElement", "exposeElementId"] }, { kind: "component", type: ZoomRendererComponent, selector: "pptx-zoom-renderer", inputs: ["element", "zIndex", "mediaDataUrls", "markElement"] }, { kind: "component", type: EquationRendererComponent, selector: "pptx-equation-renderer", inputs: ["equationXml", "equationNumber"] }, { kind: "component", type: ImageRendererComponent, selector: "pptx-image-renderer", inputs: ["element", "mediaDataUrls", "zIndex", "interactive", "marked", "exposeElementId"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
88966
88972
|
}
|
|
88967
88973
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ElementRendererComponent, decorators: [{
|
|
88968
88974
|
type: Component,
|
|
@@ -88982,7 +88988,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
88982
88988
|
ZoomRendererComponent,
|
|
88983
88989
|
EquationRendererComponent,
|
|
88984
88990
|
ImageRendererComponent,
|
|
88985
|
-
], template: "@switch (true) {\n\t@case (isHidden()) {\n\t\t<!--\n\t\t\tHidden via the Selection Pane: draw nothing, exactly as PowerPoint\n\t\t\tdoes. This is the FIRST case on purpose - @switch takes the first\n\t\t\tmatch, so one empty branch suppresses every element type at once\n\t\t\twithout wrapping (and re-indenting) the whole template. The host\n\t\t\tcarries \\`display: contents\\`, so an empty component collapses.\n\t\t\tRendering nothing (rather than an invisible box) is what keeps the\n\t\t\telement out of hit-testing, the tab order and the export raster; it\n\t\t\tstays listed in and selectable from the Selection Pane, which reads\n\t\t\tthe slide model rather than the DOM.\n\t\t-->\n\t}\n\t@case (element().type === 'connector') {\n\t\t<pptx-connector-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[obstacles]=\"obstacles()\"\n\t\t\t[canvasWidth]=\"canvasWidth()\"\n\t\t\t[canvasHeight]=\"canvasHeight()\"\n\t\t\t[interactive]=\"interactive()\"\n\t\t\t[marked]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t\t[animationState]=\"animationState()\"\n\t\t/>\n\t}\n\t@case (element().type === 'ink') {\n\t\t<!--\n\t\t\tThis renderer (and zoom / model3d / 3D SmartArt below) positions its\n\t\t\town root box, so it takes the neutral element marker\n\t\t\t(data-pptx-element) as an input instead of being wrapped in a marked\n\t\t\tbox the way chart / table / OLE are: an outer positioned box would\n\t\t\toffset it twice.\n\t\t-->\n\t\t<pptx-ink-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[replay]=\"presenting()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'contentPart') {\n\t\t<!--\n\t\t\tReal PowerPoint ink. Same positioning contract as pptx-ink-renderer\n\t\t\tabove: the renderer's own root is absolutely positioned, so it takes\n\t\t\tthe neutral element marker as an input rather than being wrapped.\n\t\t-->\n\t\t<pptx-content-part-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[replay]=\"presenting()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'zoom') {\n\t\t<pptx-zoom-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t/>\n\t}\n\t@case (element().type === 'model3d') {\n\t\t<pptx-model3d-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'smartArt' && smartArt3D()) {\n\t\t<pptx-smart-art-3d-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[canEdit]=\"interactive() && editable()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t/>\n\t}\n\t@case (element().type === 'smartArt') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-smartart\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-smart-art-renderer\n\t\t\t\t[element]=\"element()\"\n\t\t\t\t[editable]=\"interactive() && editable()\"\n\t\t\t\t[animationState]=\"animationState()\"\n\t\t\t/>\n\t\t</div>\n\t}\n\t@case (element().type === 'ole') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-ole\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-ole-renderer [element]=\"element()\" />\n\t\t</div>\n\t}\n\t@case (element().type === 'chart') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-chart\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-chart-element-view\n\t\t\t\t[element]=\"element()\"\n\t\t\t\t[editable]=\"interactive() && editable()\"\n\t\t\t\t[animationState]=\"animationState()\"\n\t\t\t/>\n\t\t</div>\n\t}\n\t@case (element().type === 'table') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-table\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-table-renderer\n\t\t\t\t[element]=\"element()\"\n\t\t\t\t[editable]=\"interactive() && editable()\"\n\t\t\t\t(cellCommit)=\"cellCommit.emit({ id: element().id, commit: $event })\"\n\t\t\t\t(tableChange)=\"tableChange.emit($event)\"\n\t\t\t/>\n\t\t</div>\n\t}\n\t@case (element().type === 'group') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-group\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t@for (child of children(); track child.id) {\n\t\t\t\t<pptx-element-renderer\n\t\t\t\t\t[element]=\"child\"\n\t\t\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t\t\t[zIndex]=\"$index\"\n\t\t\t\t\t[interactive]=\"interactive()\"\n\t\t\t\t\t[marked]=\"marked()\"\n\t\t\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t\t\t\t[presenting]=\"presenting()\"\n\t\t\t\t\t[fieldContext]=\"fieldContext()\"\n\t\t\t\t\t[slideElements]=\"slideElements()\"\n\t\t\t\t\t[parentGroupFill]=\"childParentGroupFill()\"\n\t\t\t\t/>\n\t\t\t}\n\t\t</div>\n\t}\n\t@case (isImageLike()) {\n\t\t<pptx-image-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[interactive]=\"interactive()\"\n\t\t\t[marked]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'media') {\n\t\t<pptx-media-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[interactive]=\"interactive()\"\n\t\t\t[marked]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t\t[presenting]=\"presenting()\"\n\t\t\t[placeholderLabel]=\"placeholderLabel()\"\n\t\t/>\n\t}\n\t@case (isShapeLike()) {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-shape\"\n\t\t\t[ngStyle]=\"shapeContainerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<!-- Per-sub-path fill overlay: a multi-sub-path preset (`smileyFace`'s\n\t\t\t open eyes, `actionButtonBlank`'s darkened bevel well) or custom\n\t\t\t geometry whose sub-paths cannot share one CSS background-color. -->\n\t\t\t@if (subpathFill(); as sf) {\n\t\t\t\t<svg\n\t\t\t\t\tclass=\"pptx-ng-subpath-fill\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t[attr.viewBox]=\"subpathFillViewBox()\"\n\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\tstyle=\"position: absolute; inset: 0; width: 100%; height: 100%\"\n\t\t\t\t>\n\t\t\t\t\t@for (paint of sf.paints; track $index) {\n\t\t\t\t\t\t<path [attr.d]=\"paint.d\" [attr.fill]=\"paint.fill\" stroke=\"none\" />\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\t\t\t}\n\t\t\t@if (fillOverlay(); as ov) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"pptx-ng-fill-overlay\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle=\"position: absolute; inset: 0; pointer-events: none\"\n\t\t\t\t\t[style.background]=\"ov.color\"\n\t\t\t\t\t[style.mix-blend-mode]=\"ov.blendMode\"\n\t\t\t\t></div>\n\t\t\t}\n\t\t\t<!-- Mirrored reflection sibling (`a:reflection`): cross-browser, unlike\n\t\t\t the `-webkit-box-reflect` this replaced (Firefox never implemented\n\t\t\t that property, so reflections were invisible there entirely). -->\n\t\t\t@if (reflection(); as refl) {\n\t\t\t\t<div class=\"pptx-ng-reflection\" aria-hidden=\"true\" [ngStyle]=\"refl.wrapperStyle\">\n\t\t\t\t\t@if (refl.imgSrc) {\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t[src]=\"refl.imgSrc\"\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t\t\tstyle=\"width: 100%; height: 100%\"\n\t\t\t\t\t\t\t[ngStyle]=\"refl.imgFitStyle\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t} @else if (refl.fill) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle=\"width: 100%; height: 100%\"\n\t\t\t\t\t\t\t[style.background-color]=\"refl.fill.backgroundColor\"\n\t\t\t\t\t\t\t[style.background-image]=\"refl.fill.backgroundImage\"\n\t\t\t\t\t\t\t[style.background-size]=\"refl.fill.backgroundSize\"\n\t\t\t\t\t\t\t[style.background-position]=\"refl.fill.backgroundPosition\"\n\t\t\t\t\t\t\t[style.background-repeat]=\"refl.fill.backgroundRepeat\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<!-- Hollow frame hit target: an unfilled, textless shape is hit-tested\n\t\t\t on its outline only, so its interior lets clicks through. -->\n\t\t\t@if (hollowHit(); as hit) {\n\t\t\t\t<svg\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t[attr.viewBox]=\"outlineViewBox()\"\n\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\tstyle=\"\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\tinset: 0;\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\toverflow: visible;\n\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\t[attr.d]=\"hit.d\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"transparent\"\n\t\t\t\t\t\t[attr.stroke-width]=\"hit.strokeWidth\"\n\t\t\t\t\t\tstyle=\"pointer-events: stroke\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t}\n\t\t\t<!-- Stroked outline: a CSS border takes one flat colour, and cannot\n\t\t\t outline an open preset (`line`, `arc`) at all. -->\n\t\t\t@if (gradientOutline(); as go) {\n\t\t\t\t<svg\n\t\t\t\t\tclass=\"pptx-ng-gradient-outline\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t[attr.viewBox]=\"outlineViewBox()\"\n\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\tstyle=\"\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\tinset: 0;\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\toverflow: visible;\n\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\"\n\t\t\t\t>\n\t\t\t\t\t@if (go.paint; as paint) {\n\t\t\t\t\t\t<defs>\n\t\t\t\t\t\t\t@if (paint.kind === 'pattern') {\n\t\t\t\t\t\t\t\t<pattern\n\t\t\t\t\t\t\t\t\t[attr.id]=\"paint.id\"\n\t\t\t\t\t\t\t\t\t[attr.width]=\"paint.width\"\n\t\t\t\t\t\t\t\t\t[attr.height]=\"paint.height\"\n\t\t\t\t\t\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<image\n\t\t\t\t\t\t\t\t\t\t[attr.href]=\"paint.href\"\n\t\t\t\t\t\t\t\t\t\t[attr.width]=\"paint.width\"\n\t\t\t\t\t\t\t\t\t\t[attr.height]=\"paint.height\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</pattern>\n\t\t\t\t\t\t\t} @else if (paint.kind === 'radial') {\n\t\t\t\t\t\t\t\t<radialGradient\n\t\t\t\t\t\t\t\t\t[attr.id]=\"paint.id\"\n\t\t\t\t\t\t\t\t\t[attr.cx]=\"paint.cx\"\n\t\t\t\t\t\t\t\t\t[attr.cy]=\"paint.cy\"\n\t\t\t\t\t\t\t\t\t[attr.r]=\"paint.r\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t@for (stop of paint.stops; track $index) {\n\t\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\t\t[attr.offset]=\"stop.offset\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-color]=\"stop.color\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-opacity]=\"stop.opacity\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</radialGradient>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<linearGradient\n\t\t\t\t\t\t\t\t\t[attr.id]=\"paint.id\"\n\t\t\t\t\t\t\t\t\t[attr.x1]=\"paint.x1\"\n\t\t\t\t\t\t\t\t\t[attr.y1]=\"paint.y1\"\n\t\t\t\t\t\t\t\t\t[attr.x2]=\"paint.x2\"\n\t\t\t\t\t\t\t\t\t[attr.y2]=\"paint.y2\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t@for (stop of paint.stops; track $index) {\n\t\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\t\t[attr.offset]=\"stop.offset\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-color]=\"stop.color\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-opacity]=\"stop.opacity\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</defs>\n\t\t\t\t\t}\n\t\t\t\t\t@for (strand of go.strands; track $index) {\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t[attr.d]=\"go.d\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t[attr.stroke]=\"go.stroke\"\n\t\t\t\t\t\t\t[attr.stroke-width]=\"strand.strokeWidth\"\n\t\t\t\t\t\t\t[attr.stroke-dasharray]=\"go.dashArray\"\n\t\t\t\t\t\t\t[attr.stroke-linecap]=\"go.lineCap\"\n\t\t\t\t\t\t\t[attr.stroke-linejoin]=\"go.lineJoin\"\n\t\t\t\t\t\t\t[style.transform]=\"\n\t\t\t\t\t\t\t\tstrand.offset !== 0 ? 'translate(0, ' + strand.offset + 'px)' : null\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\t\t\t}\n\t\t\t@if (pathWarp(); as warp) {\n\t\t\t\t<svg\n\t\t\t\t\t[attr.width]=\"warp.width\"\n\t\t\t\t\t[attr.height]=\"warp.height\"\n\t\t\t\t\t[attr.viewBox]=\"'0 0 ' + warp.width + ' ' + warp.height\"\n\t\t\t\t\tstyle=\"position: absolute; inset: 0; overflow: visible; pointer-events: none\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t@for (line of warp.pathLines; track line.pathId) {\n\t\t\t\t\t\t\t<path [attr.id]=\"line.pathId\" [attr.d]=\"line.d\" fill=\"none\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t</defs>\n\t\t\t\t\t@for (line of warp.pathLines; track line.pathId) {\n\t\t\t\t\t\t<text\n\t\t\t\t\t\t\t[attr.font-size]=\"warp.baseFontSize\"\n\t\t\t\t\t\t\t[attr.font-family]=\"warp.baseFontFamily\"\n\t\t\t\t\t\t\t[attr.fill]=\"warp.baseColor\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<textPath\n\t\t\t\t\t\t\t\t[attr.href]=\"'#' + line.pathId\"\n\t\t\t\t\t\t\t\t[attr.startOffset]=\"warp.startOffset\"\n\t\t\t\t\t\t\t\t[attr.text-anchor]=\"warp.textAnchor\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@for (seg of line.segments; track $index) {\n\t\t\t\t\t\t\t\t\t<tspan\n\t\t\t\t\t\t\t\t\t\t[attr.fill]=\"seg.style?.color ?? warp.baseColor\"\n\t\t\t\t\t\t\t\t\t\t[attr.font-weight]=\"seg.style?.bold ? 700 : 400\"\n\t\t\t\t\t\t\t\t\t\t[attr.font-style]=\"seg.style?.italic ? 'italic' : 'normal'\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ seg.text }}\n\t\t\t\t\t\t\t\t\t</tspan>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</textPath>\n\t\t\t\t\t\t</text>\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\t\t\t} @else if (hasText()) {\n\t\t\t\t<div class=\"pptx-ng-text\" [ngStyle]=\"warpedTextStyle()\">\n\t\t\t\t\t@for (para of paragraphs(); track $index) {\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclass=\"pptx-ng-para\"\n\t\t\t\t\t\t\t[ngStyle]=\"para.paragraphStyle ?? null\"\n\t\t\t\t\t\t\t[style.padding-left.px]=\"para.indentPx\"\n\t\t\t\t\t\t\t[style.text-indent.px]=\"para.textIndentPx ?? null\"\n\t\t\t\t\t\t\t[style.line-height]=\"para.lineHeight ?? null\"\n\t\t\t\t\t\t\t[style.margin-top.px]=\"para.spaceBeforePx ?? null\"\n\t\t\t\t\t\t\t[style.margin-bottom.px]=\"para.spaceAfterPx ?? null\"\n\t\t\t\t\t\t\t[style.font-size.px]=\"para.strutFontSizePx ?? null\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (para.bulletPicture?.src) {\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tclass=\"pptx-ng-bullet-image\"\n\t\t\t\t\t\t\t\t\t[src]=\"para.bulletPicture.src\"\n\t\t\t\t\t\t\t\t\t[alt]=\"para.bulletPicture.accessibleLabel\"\n\t\t\t\t\t\t\t\t\t[style.width.px]=\"para.bulletPicture.sizePx\"\n\t\t\t\t\t\t\t\t\t[style.height.px]=\"para.bulletPicture.sizePx\"\n\t\t\t\t\t\t\t\t\tstyle=\"\n\t\t\t\t\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\t\t\t\t\t\tmargin-inline-end: 4px;\n\t\t\t\t\t\t\t\t\t\tobject-fit: contain;\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t} @else if (para.bulletMarker) {\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"pptx-ng-bullet\"\n\t\t\t\t\t\t\t\t\t[ngStyle]=\"para.bulletStyle\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"para.bulletPicture?.accessibleLabel ?? null\"\n\t\t\t\t\t\t\t\t\t>{{ para.bulletMarker }}</span\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (textBuildSpecs()[$index]; as spec) {\n\t\t\t\t\t\t\t\t<!-- Staged text build: render the split pieces so each one\n\t\t\t\t\t\t\t\t carries its own sub-animation. -->\n\t\t\t\t\t\t\t\t@if (spec.granularity === 'paragraph') {\n\t\t\t\t\t\t\t\t\t<span [attr.data-anim-id]=\"spec.animId\" [ngStyle]=\"buildSpanStyle(spec)\">{{\n\t\t\t\t\t\t\t\t\t\tparagraphText(para)\n\t\t\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t@for (span of spec.spans ?? []; track $index) {\n\t\t\t\t\t\t\t\t\t\t<span [attr.data-anim-id]=\"span.animId\" [ngStyle]=\"buildSpanStyle(span)\">{{\n\t\t\t\t\t\t\t\t\t\t\tspan.text\n\t\t\t\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t@for (run of para.runs; track $index) {\n\t\t\t\t\t\t\t\t\t@if (run.equationXml) {\n\t\t\t\t\t\t\t\t\t\t<pptx-equation-renderer\n\t\t\t\t\t\t\t\t\t\t\t[equationXml]=\"run.equationXml\"\n\t\t\t\t\t\t\t\t\t\t\t[equationNumber]=\"run.equationNumber\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t} @else if (\n\t\t\t\t\t\t\t\t\t\trun.text ===\n\t\t\t\t\t\t\t\t\t\t'\n'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t} @else if (run.reflection; as refl) {\n\t\t\t\t\t\t\t\t\t\t<!-- `a:reflection`: wrapped HERE, around the whole base\n\t\t\t\t\t\t\t\t\t\t run (`runBase`), rather than inside its href/ruby/plain\n\t\t\t\t\t\t\t\t\t\t branches - a `<ruby>` run's own `display: ruby` (which\n\t\t\t\t\t\t\t\t\t\t positions the annotation above its base text) would\n\t\t\t\t\t\t\t\t\t\t break if forced to `display: inline-block` to host the\n\t\t\t\t\t\t\t\t\t\t mirror. Cross-browser, unlike the `-webkit-box-reflect`\n\t\t\t\t\t\t\t\t\t\t this replaced (Firefox never implemented it). -->\n\t\t\t\t\t\t\t\t\t\t<span style=\"position: relative; display: inline-block\">\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"runBase; context: { run: run }\" />\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pptx-ng-text-reflection\" aria-hidden=\"true\" [ngStyle]=\"refl\"\n\t\t\t\t\t\t\t\t\t\t\t\t><span [ngStyle]=\"run.style\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><ng-container\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t*ngTemplateOutlet=\"runContent; context: { run: run }\" /></span\n\t\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"runBase; context: { run: run }\" />\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (para.isEmpty) {\n\t\t\t\t\t\t\t\t<!-- An authored blank line has no runs, so without this the\n\t\t\t\t\t\t\t\t <p> collapses to zero height and the gap a deck puts\n\t\t\t\t\t\t\t\t between a heading and its bullet list disappears. -->\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t}\n\t@default {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-unsupported\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<div class=\"pptx-ng-placeholder\">{{ placeholderLabel() }}</div>\n\t\t</div>\n\t}\n}\n\n<!-- Soft-edge feather <filter> def, referenced via filter: url(#soft-edge-<id>). -->\n@if (softEdgeFilter(); as sef) {\n\t<svg\n\t\twidth=\"0\"\n\t\theight=\"0\"\n\t\taria-hidden=\"true\"\n\t\tstyle=\"position: absolute; width: 0; height: 0; overflow: hidden\"\n\t>\n\t\t<defs>\n\t\t\t<filter\n\t\t\t\t[attr.id]=\"sef.id\"\n\t\t\t\tx=\"-20%\"\n\t\t\t\ty=\"-20%\"\n\t\t\t\twidth=\"140%\"\n\t\t\t\theight=\"140%\"\n\t\t\t\tcolor-interpolation-filters=\"sRGB\"\n\t\t\t>\n\t\t\t\t<feGaussianBlur in=\"SourceAlpha\" [attr.stdDeviation]=\"sef.radius\" result=\"softEdgeAlpha\" />\n\t\t\t\t<feComposite in=\"SourceGraphic\" in2=\"softEdgeAlpha\" operator=\"in\" />\n\t\t\t</filter>\n\t\t</defs>\n\t</svg>\n}\n\n<!-- Duotone image-effect <filter> def, referenced via filter: url(#id). -->\n@if (duotoneFilter(); as df) {\n\t<svg\n\t\twidth=\"0\"\n\t\theight=\"0\"\n\t\taria-hidden=\"true\"\n\t\tstyle=\"position: absolute; width: 0; height: 0; overflow: hidden\"\n\t>\n\t\t<defs>\n\t\t\t<filter [attr.id]=\"df.id\" color-interpolation-filters=\"sRGB\">\n\t\t\t\t<feColorMatrix type=\"matrix\" [attr.values]=\"df.primitives[0].values\" />\n\t\t\t\t<feComponentTransfer>\n\t\t\t\t\t<feFuncR\n\t\t\t\t\t\ttype=\"linear\"\n\t\t\t\t\t\t[attr.slope]=\"df.primitives[1].channels[0].slope\"\n\t\t\t\t\t\t[attr.intercept]=\"df.primitives[1].channels[0].intercept\"\n\t\t\t\t\t/>\n\t\t\t\t\t<feFuncG\n\t\t\t\t\t\ttype=\"linear\"\n\t\t\t\t\t\t[attr.slope]=\"df.primitives[1].channels[1].slope\"\n\t\t\t\t\t\t[attr.intercept]=\"df.primitives[1].channels[1].intercept\"\n\t\t\t\t\t/>\n\t\t\t\t\t<feFuncB\n\t\t\t\t\t\ttype=\"linear\"\n\t\t\t\t\t\t[attr.slope]=\"df.primitives[1].channels[2].slope\"\n\t\t\t\t\t\t[attr.intercept]=\"df.primitives[1].channels[2].intercept\"\n\t\t\t\t\t/>\n\t\t\t\t</feComponentTransfer>\n\t\t\t</filter>\n\t\t</defs>\n\t</svg>\n}\n\n<!--\n\tOne run's base element (hyperlink / ruby / plain span), reused via\n\t`ngTemplateOutlet` both directly and inside the `a:reflection` wrapper above,\n\tso the reflection case does not duplicate this three-way branch.\n-->\n<ng-template #runBase let-run=\"run\">\n\t@if (run.href) {\n\t\t<a\n\t\t\tclass=\"pptx-ng-link\"\n\t\t\t[href]=\"run.href\"\n\t\t\ttarget=\"_blank\"\n\t\t\trel=\"noopener noreferrer\"\n\t\t\t[attr.title]=\"run.tooltip ?? null\"\n\t\t\t[ngStyle]=\"run.style\"\n\t\t\t><ng-container *ngTemplateOutlet=\"runContent; context: { run: run }\"\n\t\t/></a>\n\t} @else if (run.rubyText) {\n\t\t<!-- `a:ruby`: the phonetic guide sits above its base\n\t\t text; the <rp> parentheses are the fallback for a\n\t\t browser without ruby support. -->\n\t\t<ruby [ngStyle]=\"run.style\"\n\t\t\t><ng-container *ngTemplateOutlet=\"runContent; context: { run: run }\" /><rp>(</rp\n\t\t\t><rt [ngStyle]=\"run.rubyStyle\">{{ run.rubyText }}</rt\n\t\t\t><rp>)</rp></ruby\n\t\t>\n\t} @else {\n\t\t<span [ngStyle]=\"run.style\"\n\t\t\t><ng-container *ngTemplateOutlet=\"runContent; context: { run: run }\"\n\t\t/></span>\n\t}\n</ng-template>\n\n<!--\n\tA run's text content, honouring shared's per-script font split\n\t(`run.scriptRuns`) and measured tab-stop layout (`run.tabLines`) when\n\teither is present. Both descriptors come from `pptx-viewer-shared`'s\n\t`buildParagraphs` (the per-script split was React-only before this\n\ttemplate existed: CJK, Arabic, Hebrew and Thai text rendered in the wrong\n\ttypeface here; the tab layout was likewise React-only, so a TOC-style row\n\tlost its leader dots and right-aligned page number). Reused via\n\t`ngTemplateOutlet` for the run's span / anchor / ruby base text, so all\n\tthree carry the same content logic.\n-->\n<ng-template #runContent let-run=\"run\">\n\t@if (run.tabLines) {\n\t\t@for (line of run.tabLines; track $index) {\n\t\t\t<span style=\"display: inline-block; white-space: nowrap\">\n\t\t\t\t@for (piece of line.pieces; track $index) {\n\t\t\t\t\t@if (piece.leaderStyle) {\n\t\t\t\t\t\t<span aria-hidden=\"true\" [ngStyle]=\"piece.leaderStyle\">{{ piece.leaderText }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<span [ngStyle]=\"piece.style\">{{ piece.text }}</span>\n\t\t\t\t}\n\t\t\t</span>\n\t\t\t@if (!$last) {\n\t\t\t\t<br />\n\t\t\t}\n\t\t}\n\t} @else if (run.scriptRuns) {\n\t\t@for (piece of run.scriptRuns; track $index) {\n\t\t\t@if (piece.style) {\n\t\t\t\t<span [ngStyle]=\"piece.style\">{{ piece.text }}</span>\n\t\t\t} @else {\n\t\t\t\t{{ piece.text }}\n\t\t\t}\n\t\t}\n\t} @else {\n\t\t{{ run.text }}\n\t}\n</ng-template>\n" }]
|
|
88991
|
+
], template: "@switch (true) {\n\t@case (isHidden()) {\n\t\t<!--\n\t\t\tHidden via the Selection Pane: draw nothing, exactly as PowerPoint\n\t\t\tdoes. This is the FIRST case on purpose - @switch takes the first\n\t\t\tmatch, so one empty branch suppresses every element type at once\n\t\t\twithout wrapping (and re-indenting) the whole template. The host\n\t\t\tcarries \\`display: contents\\`, so an empty component collapses.\n\t\t\tRendering nothing (rather than an invisible box) is what keeps the\n\t\t\telement out of hit-testing, the tab order and the export raster; it\n\t\t\tstays listed in and selectable from the Selection Pane, which reads\n\t\t\tthe slide model rather than the DOM.\n\t\t-->\n\t}\n\t@case (element().type === 'connector') {\n\t\t<pptx-connector-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[obstacles]=\"obstacles()\"\n\t\t\t[canvasWidth]=\"canvasWidth()\"\n\t\t\t[canvasHeight]=\"canvasHeight()\"\n\t\t\t[interactive]=\"interactive()\"\n\t\t\t[marked]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t\t[animationState]=\"animationState()\"\n\t\t/>\n\t}\n\t@case (element().type === 'ink') {\n\t\t<!--\n\t\t\tThis renderer (and zoom / model3d / 3D SmartArt below) positions its\n\t\t\town root box, so it takes the neutral element marker\n\t\t\t(data-pptx-element) as an input instead of being wrapped in a marked\n\t\t\tbox the way chart / table / OLE are: an outer positioned box would\n\t\t\toffset it twice.\n\t\t-->\n\t\t<pptx-ink-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[replay]=\"presenting()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'contentPart') {\n\t\t<!--\n\t\t\tReal PowerPoint ink. Same positioning contract as pptx-ink-renderer\n\t\t\tabove: the renderer's own root is absolutely positioned, so it takes\n\t\t\tthe neutral element marker as an input rather than being wrapped.\n\t\t-->\n\t\t<pptx-content-part-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[replay]=\"presenting()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'zoom') {\n\t\t<pptx-zoom-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t/>\n\t}\n\t@case (element().type === 'model3d') {\n\t\t<pptx-model3d-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'smartArt' && smartArt3D()) {\n\t\t<pptx-smart-art-3d-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[canEdit]=\"interactive() && editable()\"\n\t\t\t[markElement]=\"elementMarked()\"\n\t\t/>\n\t}\n\t@case (element().type === 'smartArt') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-smartart\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-smart-art-renderer\n\t\t\t\t[element]=\"element()\"\n\t\t\t\t[editable]=\"interactive() && editable()\"\n\t\t\t\t[animationState]=\"animationState()\"\n\t\t\t/>\n\t\t</div>\n\t}\n\t@case (element().type === 'ole') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-ole\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-ole-renderer [element]=\"element()\" />\n\t\t</div>\n\t}\n\t@case (element().type === 'chart') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-chart\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-chart-element-view\n\t\t\t\t[element]=\"element()\"\n\t\t\t\t[editable]=\"interactive() && editable()\"\n\t\t\t\t[animationState]=\"animationState()\"\n\t\t\t/>\n\t\t</div>\n\t}\n\t@case (element().type === 'table') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-table\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<pptx-table-renderer\n\t\t\t\t[element]=\"element()\"\n\t\t\t\t[editable]=\"interactive() && editable()\"\n\t\t\t\t(cellCommit)=\"cellCommit.emit({ id: element().id, commit: $event })\"\n\t\t\t\t(tableChange)=\"tableChange.emit($event)\"\n\t\t\t/>\n\t\t</div>\n\t}\n\t@case (element().type === 'group') {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-group\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t@for (child of children(); track child.id) {\n\t\t\t\t<pptx-element-renderer\n\t\t\t\t\t[element]=\"child\"\n\t\t\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t\t\t[zIndex]=\"$index\"\n\t\t\t\t\t[interactive]=\"interactive()\"\n\t\t\t\t\t[marked]=\"marked()\"\n\t\t\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t\t\t\t[presenting]=\"presenting()\"\n\t\t\t\t\t[fieldContext]=\"fieldContext()\"\n\t\t\t\t\t[slideElements]=\"slideElements()\"\n\t\t\t\t\t[parentGroupFill]=\"childParentGroupFill()\"\n\t\t\t\t/>\n\t\t\t}\n\t\t</div>\n\t}\n\t@case (isImageLike()) {\n\t\t<pptx-image-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[interactive]=\"interactive()\"\n\t\t\t[marked]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t/>\n\t}\n\t@case (element().type === 'media') {\n\t\t<pptx-media-renderer\n\t\t\t[element]=\"element()\"\n\t\t\t[mediaDataUrls]=\"mediaDataUrls()\"\n\t\t\t[zIndex]=\"zIndex()\"\n\t\t\t[interactive]=\"interactive()\"\n\t\t\t[marked]=\"elementMarked()\"\n\t\t\t[exposeElementId]=\"exposeElementId()\"\n\t\t\t[presenting]=\"presenting()\"\n\t\t\t[placeholderLabel]=\"placeholderLabel()\"\n\t\t/>\n\t}\n\t@case (isShapeLike()) {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-shape\"\n\t\t\t[ngStyle]=\"shapeContainerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<!-- Per-sub-path fill overlay: a multi-sub-path preset (`smileyFace`'s\n\t\t\t open eyes, `actionButtonBlank`'s darkened bevel well) or custom\n\t\t\t geometry whose sub-paths cannot share one CSS background-color. -->\n\t\t\t@if (subpathFill(); as sf) {\n\t\t\t\t<svg\n\t\t\t\t\tclass=\"pptx-ng-subpath-fill\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t[attr.viewBox]=\"subpathFillViewBox()\"\n\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\tstyle=\"position: absolute; inset: 0; width: 100%; height: 100%\"\n\t\t\t\t>\n\t\t\t\t\t@for (paint of sf.paints; track $index) {\n\t\t\t\t\t\t<path [attr.d]=\"paint.d\" [attr.fill]=\"paint.fill\" stroke=\"none\" />\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\t\t\t}\n\t\t\t@if (fillOverlay(); as ov) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"pptx-ng-fill-overlay\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle=\"position: absolute; inset: 0; pointer-events: none\"\n\t\t\t\t\t[style.background]=\"ov.color\"\n\t\t\t\t\t[style.mix-blend-mode]=\"ov.blendMode\"\n\t\t\t\t></div>\n\t\t\t}\n\t\t\t<!-- Mirrored reflection sibling (`a:reflection`): cross-browser, unlike\n\t\t\t the `-webkit-box-reflect` this replaced (Firefox never implemented\n\t\t\t that property, so reflections were invisible there entirely). -->\n\t\t\t@if (reflection(); as refl) {\n\t\t\t\t<div class=\"pptx-ng-reflection\" aria-hidden=\"true\" [ngStyle]=\"refl.wrapperStyle\">\n\t\t\t\t\t@if (refl.imgSrc) {\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t[src]=\"refl.imgSrc\"\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t\t\tstyle=\"width: 100%; height: 100%\"\n\t\t\t\t\t\t\t[ngStyle]=\"refl.imgFitStyle\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t} @else if (refl.fill) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle=\"width: 100%; height: 100%\"\n\t\t\t\t\t\t\t[style.background-color]=\"refl.fill.backgroundColor\"\n\t\t\t\t\t\t\t[style.background-image]=\"refl.fill.backgroundImage\"\n\t\t\t\t\t\t\t[style.background-size]=\"refl.fill.backgroundSize\"\n\t\t\t\t\t\t\t[style.background-position]=\"refl.fill.backgroundPosition\"\n\t\t\t\t\t\t\t[style.background-repeat]=\"refl.fill.backgroundRepeat\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t\t<!-- Hollow frame hit target: an unfilled, textless shape is hit-tested\n\t\t\t on its outline only, so its interior lets clicks through. -->\n\t\t\t@if (hollowHit(); as hit) {\n\t\t\t\t<svg\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t[attr.viewBox]=\"outlineViewBox()\"\n\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\tstyle=\"\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\tinset: 0;\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\toverflow: visible;\n\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\t[attr.d]=\"hit.d\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"transparent\"\n\t\t\t\t\t\t[attr.stroke-width]=\"hit.strokeWidth\"\n\t\t\t\t\t\tstyle=\"pointer-events: stroke\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t}\n\t\t\t<!-- Stroked outline: a CSS border takes one flat colour, and cannot\n\t\t\t outline an open preset (`line`, `arc`) at all. -->\n\t\t\t@if (gradientOutline(); as go) {\n\t\t\t\t<svg\n\t\t\t\t\tclass=\"pptx-ng-gradient-outline\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t[attr.viewBox]=\"outlineViewBox()\"\n\t\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\t\tstyle=\"\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\tinset: 0;\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\theight: 100%;\n\t\t\t\t\t\toverflow: visible;\n\t\t\t\t\t\tpointer-events: none;\n\t\t\t\t\t\"\n\t\t\t\t>\n\t\t\t\t\t@if (go.paint; as paint) {\n\t\t\t\t\t\t<defs>\n\t\t\t\t\t\t\t@if (paint.kind === 'pattern') {\n\t\t\t\t\t\t\t\t<pattern\n\t\t\t\t\t\t\t\t\t[attr.id]=\"paint.id\"\n\t\t\t\t\t\t\t\t\t[attr.width]=\"paint.width\"\n\t\t\t\t\t\t\t\t\t[attr.height]=\"paint.height\"\n\t\t\t\t\t\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<image\n\t\t\t\t\t\t\t\t\t\t[attr.href]=\"paint.href\"\n\t\t\t\t\t\t\t\t\t\t[attr.width]=\"paint.width\"\n\t\t\t\t\t\t\t\t\t\t[attr.height]=\"paint.height\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</pattern>\n\t\t\t\t\t\t\t} @else if (paint.kind === 'radial') {\n\t\t\t\t\t\t\t\t<radialGradient\n\t\t\t\t\t\t\t\t\t[attr.id]=\"paint.id\"\n\t\t\t\t\t\t\t\t\t[attr.cx]=\"paint.cx\"\n\t\t\t\t\t\t\t\t\t[attr.cy]=\"paint.cy\"\n\t\t\t\t\t\t\t\t\t[attr.r]=\"paint.r\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t@for (stop of paint.stops; track $index) {\n\t\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\t\t[attr.offset]=\"stop.offset\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-color]=\"stop.color\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-opacity]=\"stop.opacity\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</radialGradient>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<linearGradient\n\t\t\t\t\t\t\t\t\t[attr.id]=\"paint.id\"\n\t\t\t\t\t\t\t\t\t[attr.x1]=\"paint.x1\"\n\t\t\t\t\t\t\t\t\t[attr.y1]=\"paint.y1\"\n\t\t\t\t\t\t\t\t\t[attr.x2]=\"paint.x2\"\n\t\t\t\t\t\t\t\t\t[attr.y2]=\"paint.y2\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t@for (stop of paint.stops; track $index) {\n\t\t\t\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\t\t\t\t[attr.offset]=\"stop.offset\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-color]=\"stop.color\"\n\t\t\t\t\t\t\t\t\t\t\t[attr.stop-opacity]=\"stop.opacity\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</defs>\n\t\t\t\t\t}\n\t\t\t\t\t@for (strand of go.strands; track $index) {\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t[attr.d]=\"go.d\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t[attr.stroke]=\"go.stroke\"\n\t\t\t\t\t\t\t[attr.stroke-width]=\"strand.strokeWidth\"\n\t\t\t\t\t\t\t[attr.stroke-dasharray]=\"go.dashArray\"\n\t\t\t\t\t\t\t[attr.stroke-linecap]=\"go.lineCap\"\n\t\t\t\t\t\t\t[attr.stroke-linejoin]=\"go.lineJoin\"\n\t\t\t\t\t\t\t[style.transform]=\"\n\t\t\t\t\t\t\t\tstrand.offset !== 0 ? 'translate(0, ' + strand.offset + 'px)' : null\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\t\t\t}\n\t\t\t@if (pathWarp(); as warp) {\n\t\t\t\t<svg\n\t\t\t\t\t[attr.width]=\"warp.width\"\n\t\t\t\t\t[attr.height]=\"warp.height\"\n\t\t\t\t\t[attr.viewBox]=\"'0 0 ' + warp.width + ' ' + warp.height\"\n\t\t\t\t\tstyle=\"position: absolute; inset: 0; overflow: visible; pointer-events: none\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t@for (line of warp.pathLines; track line.pathId) {\n\t\t\t\t\t\t\t<path [attr.id]=\"line.pathId\" [attr.d]=\"line.d\" fill=\"none\" />\n\t\t\t\t\t\t}\n\t\t\t\t\t</defs>\n\t\t\t\t\t@for (line of warp.pathLines; track line.pathId) {\n\t\t\t\t\t\t<text\n\t\t\t\t\t\t\t[attr.font-size]=\"warp.baseFontSize\"\n\t\t\t\t\t\t\t[attr.font-family]=\"warp.baseFontFamily\"\n\t\t\t\t\t\t\t[attr.fill]=\"warp.baseColor\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<textPath\n\t\t\t\t\t\t\t\t[attr.href]=\"'#' + line.pathId\"\n\t\t\t\t\t\t\t\t[attr.startOffset]=\"warp.startOffset\"\n\t\t\t\t\t\t\t\t[attr.text-anchor]=\"warp.textAnchor\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@for (seg of line.segments; track $index) {\n\t\t\t\t\t\t\t\t\t<tspan\n\t\t\t\t\t\t\t\t\t\t[attr.fill]=\"seg.style?.color ?? warp.baseColor\"\n\t\t\t\t\t\t\t\t\t\t[attr.font-weight]=\"seg.style?.bold ? 700 : 400\"\n\t\t\t\t\t\t\t\t\t\t[attr.font-style]=\"seg.style?.italic ? 'italic' : 'normal'\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{{ seg.text }}\n\t\t\t\t\t\t\t\t\t</tspan>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</textPath>\n\t\t\t\t\t\t</text>\n\t\t\t\t\t}\n\t\t\t\t</svg>\n\t\t\t} @else if (hasText()) {\n\t\t\t\t<div class=\"pptx-ng-text\" [ngStyle]=\"warpedTextStyle()\">\n\t\t\t\t\t@for (para of paragraphs(); track $index) {\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclass=\"pptx-ng-para\"\n\t\t\t\t\t\t\t[ngStyle]=\"para.paragraphStyle ?? null\"\n\t\t\t\t\t\t\t[style.padding-left.px]=\"para.indentPx\"\n\t\t\t\t\t\t\t[style.text-indent.px]=\"para.textIndentPx ?? null\"\n\t\t\t\t\t\t\t[style.line-height]=\"para.lineHeight ?? null\"\n\t\t\t\t\t\t\t[style.margin-top.px]=\"para.spaceBeforePx ?? null\"\n\t\t\t\t\t\t\t[style.margin-bottom.px]=\"para.spaceAfterPx ?? null\"\n\t\t\t\t\t\t\t[style.font-size.px]=\"para.strutFontSizePx ?? null\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@if (para.bulletPicture?.src) {\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tclass=\"pptx-ng-bullet-image\"\n\t\t\t\t\t\t\t\t\t[src]=\"para.bulletPicture.src\"\n\t\t\t\t\t\t\t\t\t[alt]=\"para.bulletPicture.accessibleLabel\"\n\t\t\t\t\t\t\t\t\t[style.width.px]=\"para.bulletPicture.sizePx\"\n\t\t\t\t\t\t\t\t\t[style.height.px]=\"para.bulletPicture.sizePx\"\n\t\t\t\t\t\t\t\t\tstyle=\"\n\t\t\t\t\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\t\t\t\t\t\tmargin-inline-end: 4px;\n\t\t\t\t\t\t\t\t\t\tobject-fit: contain;\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t} @else if (para.bulletMarker) {\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"pptx-ng-bullet\"\n\t\t\t\t\t\t\t\t\t[ngStyle]=\"para.bulletStyle\"\n\t\t\t\t\t\t\t\t\t[attr.aria-label]=\"para.bulletPicture?.accessibleLabel ?? null\"\n\t\t\t\t\t\t\t\t\t>{{ para.bulletMarker }}</span\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (textBuildSpecs()[$index]; as spec) {\n\t\t\t\t\t\t\t\t<!-- Staged text build: render the split pieces so each one\n\t\t\t\t\t\t\t\t carries its own sub-animation. -->\n\t\t\t\t\t\t\t\t@if (spec.granularity === 'paragraph') {\n\t\t\t\t\t\t\t\t\t<span [attr.data-anim-id]=\"spec.animId\" [ngStyle]=\"buildSpanStyle(spec)\">{{\n\t\t\t\t\t\t\t\t\t\tparagraphText(para)\n\t\t\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t@for (span of spec.spans ?? []; track $index) {\n\t\t\t\t\t\t\t\t\t\t<span [attr.data-anim-id]=\"span.animId\" [ngStyle]=\"buildSpanStyle(span)\">{{\n\t\t\t\t\t\t\t\t\t\t\tspan.text\n\t\t\t\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t@for (run of para.runs; track $index) {\n\t\t\t\t\t\t\t\t\t@if (run.equationXml) {\n\t\t\t\t\t\t\t\t\t\t<pptx-equation-renderer\n\t\t\t\t\t\t\t\t\t\t\t[equationXml]=\"run.equationXml\"\n\t\t\t\t\t\t\t\t\t\t\t[equationNumber]=\"run.equationNumber\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t} @else if (\n\t\t\t\t\t\t\t\t\t\trun.text ===\n\t\t\t\t\t\t\t\t\t\t'\n'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t} @else if (run.reflection; as refl) {\n\t\t\t\t\t\t\t\t\t\t<!-- `a:reflection`: wrapped HERE, around the whole base\n\t\t\t\t\t\t\t\t\t\t run (`runBase`), rather than inside its href/ruby/plain\n\t\t\t\t\t\t\t\t\t\t branches - a `<ruby>` run's own `display: ruby` (which\n\t\t\t\t\t\t\t\t\t\t positions the annotation above its base text) would\n\t\t\t\t\t\t\t\t\t\t break if forced to `display: inline-block` to host the\n\t\t\t\t\t\t\t\t\t\t mirror. Cross-browser, unlike the `-webkit-box-reflect`\n\t\t\t\t\t\t\t\t\t\t this replaced (Firefox never implemented it). -->\n\t\t\t\t\t\t\t\t\t\t<span style=\"position: relative; display: inline-block\">\n\t\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"runBase; context: { run: run }\" />\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pptx-ng-text-reflection\" aria-hidden=\"true\" [ngStyle]=\"refl\"\n\t\t\t\t\t\t\t\t\t\t\t\t><span [ngStyle]=\"run.style\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><ng-container\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t*ngTemplateOutlet=\"runContent; context: { run: run }\" /></span\n\t\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"runBase; context: { run: run }\" />\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (para.isEmpty) {\n\t\t\t\t\t\t\t\t<!-- An authored blank line has no runs, so without this the\n\t\t\t\t\t\t\t\t <p> collapses to zero height and the gap a deck puts\n\t\t\t\t\t\t\t\t between a heading and its bullet list disappears. -->\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t}\n\t@default {\n\t\t<div\n\t\t\tclass=\"pptx-ng-element pptx-ng-unsupported\"\n\t\t\t[ngStyle]=\"containerStyle()\"\n\t\t\t[style.pointer-events]=\"rootPointerEvents()\"\n\t\t\t[attr.data-element-id]=\"elementIdAttr()\"\n\t\t\t[attr.data-pptx-element]=\"elementMarked() ? 'true' : null\"\n\t\t>\n\t\t\t<div class=\"pptx-ng-placeholder\">{{ placeholderLabel() }}</div>\n\t\t</div>\n\t}\n}\n\n<!-- Soft-edge feather <filter> def, referenced via filter: url(#soft-edge-<id>). -->\n@if (softEdgeFilter(); as sef) {\n\t<svg\n\t\twidth=\"0\"\n\t\theight=\"0\"\n\t\taria-hidden=\"true\"\n\t\tstyle=\"position: absolute; width: 0; height: 0; overflow: hidden\"\n\t>\n\t\t<defs>\n\t\t\t<filter\n\t\t\t\t[attr.id]=\"sef.id\"\n\t\t\t\tx=\"-20%\"\n\t\t\t\ty=\"-20%\"\n\t\t\t\twidth=\"140%\"\n\t\t\t\theight=\"140%\"\n\t\t\t\tcolor-interpolation-filters=\"sRGB\"\n\t\t\t>\n\t\t\t\t<feGaussianBlur in=\"SourceAlpha\" [attr.stdDeviation]=\"sef.radius\" result=\"softEdgeAlpha\" />\n\t\t\t\t<feComposite in=\"SourceGraphic\" in2=\"softEdgeAlpha\" operator=\"in\" />\n\t\t\t</filter>\n\t\t</defs>\n\t</svg>\n}\n\n<!-- Duotone image-effect <filter> def, referenced via filter: url(#id). -->\n@if (duotoneFilter(); as df) {\n\t<svg\n\t\twidth=\"0\"\n\t\theight=\"0\"\n\t\taria-hidden=\"true\"\n\t\tstyle=\"position: absolute; width: 0; height: 0; overflow: hidden\"\n\t>\n\t\t<defs>\n\t\t\t<filter [attr.id]=\"df.id\" color-interpolation-filters=\"sRGB\">\n\t\t\t\t<feColorMatrix type=\"matrix\" [attr.values]=\"df.primitives[0].values\" />\n\t\t\t\t<feComponentTransfer>\n\t\t\t\t\t<feFuncR\n\t\t\t\t\t\ttype=\"linear\"\n\t\t\t\t\t\t[attr.slope]=\"df.primitives[1].channels[0].slope\"\n\t\t\t\t\t\t[attr.intercept]=\"df.primitives[1].channels[0].intercept\"\n\t\t\t\t\t/>\n\t\t\t\t\t<feFuncG\n\t\t\t\t\t\ttype=\"linear\"\n\t\t\t\t\t\t[attr.slope]=\"df.primitives[1].channels[1].slope\"\n\t\t\t\t\t\t[attr.intercept]=\"df.primitives[1].channels[1].intercept\"\n\t\t\t\t\t/>\n\t\t\t\t\t<feFuncB\n\t\t\t\t\t\ttype=\"linear\"\n\t\t\t\t\t\t[attr.slope]=\"df.primitives[1].channels[2].slope\"\n\t\t\t\t\t\t[attr.intercept]=\"df.primitives[1].channels[2].intercept\"\n\t\t\t\t\t/>\n\t\t\t\t</feComponentTransfer>\n\t\t\t</filter>\n\t\t</defs>\n\t</svg>\n}\n\n<!--\n\tOne run's base element (hyperlink / ruby / plain span), reused via\n\t`ngTemplateOutlet` both directly and inside the `a:reflection` wrapper above,\n\tso the reflection case does not duplicate this three-way branch.\n-->\n<ng-template #runBase let-run=\"run\">\n\t@if (run.href) {\n\t\t<a\n\t\t\tclass=\"pptx-ng-link\"\n\t\t\t[href]=\"run.href\"\n\t\t\ttarget=\"_blank\"\n\t\t\trel=\"noopener noreferrer\"\n\t\t\t[attr.title]=\"run.tooltip ?? null\"\n\t\t\t[ngStyle]=\"run.style\"\n\t\t\t><ng-container *ngTemplateOutlet=\"runContent; context: { run: run }\"\n\t\t/></a>\n\t} @else if (run.rubyText) {\n\t\t<!-- `a:ruby`: the phonetic guide sits above its base\n\t\t text; the <rp> parentheses are the fallback for a\n\t\t browser without ruby support. -->\n\t\t<ruby [ngStyle]=\"run.style\"\n\t\t\t><ng-container *ngTemplateOutlet=\"runContent; context: { run: run }\" /><rp>(</rp\n\t\t\t><rt [ngStyle]=\"run.rubyStyle\">{{ run.rubyText }}</rt\n\t\t\t><rp>)</rp></ruby\n\t\t>\n\t} @else {\n\t\t<span [ngStyle]=\"run.style\"\n\t\t\t><ng-container *ngTemplateOutlet=\"runContent; context: { run: run }\"\n\t\t/></span>\n\t}\n</ng-template>\n\n<!--\n\tA run's text content, honouring shared's per-script font split\n\t(`run.scriptRuns`) and measured tab-stop layout (`run.tabLines`) when\n\teither is present. Both descriptors come from `pptx-viewer-shared`'s\n\t`buildParagraphs` (the per-script split was React-only before this\n\ttemplate existed: CJK, Arabic, Hebrew and Thai text rendered in the wrong\n\ttypeface here; the tab layout was likewise React-only, so a TOC-style row\n\tlost its leader dots and right-aligned page number). Reused via\n\t`ngTemplateOutlet` for the run's span / anchor / ruby base text, so all\n\tthree carry the same content logic.\n-->\n<ng-template #runContent let-run=\"run\">\n\t@if (run.tabLines) {\n\t\t@for (line of run.tabLines; track $index) {\n\t\t\t<span style=\"display: inline-block; white-space: nowrap\">\n\t\t\t\t@for (piece of line.pieces; track $index) {\n\t\t\t\t\t@if (piece.leaderStyle) {\n\t\t\t\t\t\t<span aria-hidden=\"true\" [ngStyle]=\"piece.leaderStyle\">{{ piece.leaderText }}</span>\n\t\t\t\t\t}\n\t\t\t\t\t<span [ngStyle]=\"piece.style\">{{ piece.text }}</span>\n\t\t\t\t}\n\t\t\t</span>\n\t\t\t@if (!$last) {\n\t\t\t\t<br />\n\t\t\t}\n\t\t}\n\t} @else if (run.scriptRuns) {\n\t\t<!--\n\t\t\tA bare interpolation as the sole content of an `@if`/`@else` block\n\t\t\tleaks a real leading + trailing whitespace text node: Angular does\n\t\t\tnot collapse that whitespace the way it collapses whitespace between\n\t\t\telement TAGS. Worse, oxfmt's Angular-template printer always breaks a\n\t\t\tblock's content onto its own indented line, even when the block was\n\t\t\twritten as a single line with the braces touching, so writing the\n\t\t\t`{{ x }}` compact ourselves does not survive the next `bun run fmt` /\n\t\t\tpre-commit `lint-staged` pass: it silently re-introduces the leak\n\t\t\t(this happened twice, see `20d4d177`, `18eebb6f`). `<ng-container>`\n\t\t\tdoes not render any DOM node of its own, so wrapping the\n\t\t\tinterpolation in one keeps the no-wrapper-element behaviour of\n\t\t\tReact's `<>{piece.text}</>` fragment while making the interpolation\n\t\t\ttag-adjacent, which both Angular AND oxfmt already treat as safely\n\t\t\tcollapsible (see the many `<span>{{ x }}</span>` one-liners in this\n\t\t\tfile). That was invisible while a paragraph was one run per script\n\t\t\t(two stray spaces at the run's own edges, trimmed visually by the\n\t\t\tbrowser but still present in `textContent`), but shared's per-word /\n\t\t\tper-gap metric split (`text-run-spacing.ts`, issue #149) re-emits\n\t\t\tevery WORD and inter-word GAP as its own sibling run, so the same\n\t\t\tone-space leak lands between every word: \"will choose\" rendered as\n\t\t\t\"will choose\" (five spaces: the word's own trailing leak, the\n\t\t\tgap run's real space plus its OWN two leaks, the next word's leading\n\t\t\tleak). The same leak also showed up one paragraph at a time:\n\t\t\t\"Project\" / \"Atlas\" as two separate paragraphs read back as\n\t\t\t\"ProjectAtlas\" instead of React's \"Project Atlas\", because the\n\t\t\tplain-run `@else` below had the same bug.\n\t\t-->\n\t\t@for (piece of run.scriptRuns; track $index) {\n\t\t\t@if (piece.style) {\n\t\t\t\t<span [ngStyle]=\"piece.style\">{{ piece.text }}</span>\n\t\t\t} @else {\n\t\t\t\t<ng-container>{{ piece.text }}</ng-container>\n\t\t\t}\n\t\t}\n\t} @else {\n\t\t<ng-container>{{ run.text }}</ng-container>\n\t}\n</ng-template>\n" }]
|
|
88986
88992
|
}], propDecorators: { element: [{ type: i0.Input, args: [{ isSignal: true, alias: "element", required: true }] }], mediaDataUrls: [{ type: i0.Input, args: [{ isSignal: true, alias: "mediaDataUrls", required: false }] }], zIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "zIndex", required: false }] }], obstacles: [{ type: i0.Input, args: [{ isSignal: true, alias: "obstacles", required: false }] }], canvasWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "canvasWidth", required: false }] }], canvasHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "canvasHeight", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], marked: [{ type: i0.Input, args: [{ isSignal: true, alias: "marked", required: false }] }], exposeElementId: [{ type: i0.Input, args: [{ isSignal: true, alias: "exposeElementId", required: false }] }], presenting: [{ type: i0.Input, args: [{ isSignal: true, alias: "presenting", required: false }] }], editable: [{ type: i0.Input, args: [{ isSignal: true, alias: "editable", required: false }] }], fieldContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldContext", required: false }] }], slideElements: [{ type: i0.Input, args: [{ isSignal: true, alias: "slideElements", required: false }] }], editTemplateMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "editTemplateMode", required: false }] }], parentGroupFill: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentGroupFill", required: false }] }], cellCommit: [{ type: i0.Output, args: ["cellCommit"] }], tableChange: [{ type: i0.Output, args: ["tableChange"] }] } });
|
|
88987
88993
|
|
|
88988
88994
|
/**
|
|
@@ -107288,7 +107294,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
107288
107294
|
}], 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 }] }] } });
|
|
107289
107295
|
|
|
107290
107296
|
// Generated by scripts/inline-shared.mjs from package.json. Do not edit.
|
|
107291
|
-
const PPTX_ANGULAR_VIEWER_VERSION = "
|
|
107297
|
+
const PPTX_ANGULAR_VIEWER_VERSION = "3.0.1";
|
|
107292
107298
|
|
|
107293
107299
|
/**
|
|
107294
107300
|
* account-page.component.ts: File > Account content.
|
|
@@ -112261,7 +112267,7 @@ class SelectionPaneComponent {
|
|
|
112261
112267
|
(blur)="commitRename(el.id, $event)"
|
|
112262
112268
|
/>
|
|
112263
112269
|
} @else {
|
|
112264
|
-
{{ elLabel(el) }}
|
|
112270
|
+
<ng-container>{{ elLabel(el) }}</ng-container>
|
|
112265
112271
|
}
|
|
112266
112272
|
</span>
|
|
112267
112273
|
|
|
@@ -112361,7 +112367,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
112361
112367
|
(blur)="commitRename(el.id, $event)"
|
|
112362
112368
|
/>
|
|
112363
112369
|
} @else {
|
|
112364
|
-
{{ elLabel(el) }}
|
|
112370
|
+
<ng-container>{{ elLabel(el) }}</ng-container>
|
|
112365
112371
|
}
|
|
112366
112372
|
</span>
|
|
112367
112373
|
|
|
@@ -112537,11 +112543,11 @@ class ShareDialogComponent {
|
|
|
112537
112543
|
this.stop.emit();
|
|
112538
112544
|
}
|
|
112539
112545
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ShareDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
112540
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: ShareDialogComponent, isStandalone: true, selector: "pptx-share-dialog", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, defaults: { classPropertyName: "defaults", publicName: "defaults", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, connected: { classPropertyName: "connected", publicName: "connected", isSignal: true, isRequired: false, transformFunction: null }, userCount: { classPropertyName: "userCount", publicName: "userCount", isSignal: true, isRequired: false, transformFunction: null }, shareUrl: { classPropertyName: "shareUrl", publicName: "shareUrl", isSignal: true, isRequired: false, transformFunction: null }, p2p: { classPropertyName: "p2p", publicName: "p2p", isSignal: true, isRequired: false, transformFunction: null }, activeRoomId: { classPropertyName: "activeRoomId", publicName: "activeRoomId", isSignal: true, isRequired: false, transformFunction: null }, activeServerUrl: { classPropertyName: "activeServerUrl", publicName: "activeServerUrl", isSignal: true, isRequired: false, transformFunction: null }, users: { classPropertyName: "users", publicName: "users", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { start: "start", stop: "stop", close: "close" }, ngImport: i0, template: "<pptx-modal-dialog\n\t[open]=\"open()\"\n\t[title]=\"(active() ? 'pptx.share.activeTitle' : 'pptx.toolbar.share') | translate\"\n\t(close)=\"close.emit()\"\n>\n\t@if (active()) {\n\t\t<div class=\"pptx-ng-share-active\">\n\t\t\t<div class=\"pptx-ng-share-status-row\">\n\t\t\t\t<span class=\"pptx-ng-share-status-dot\" [class.is-on]=\"connected()\"></span>\n\t\t\t\t<span class=\"pptx-ng-share-status-text\">\n\t\t\t\t\t{{\n\t\t\t\t\t\t(connected() ? 'pptx.collaboration.status.connected' : 'pptx.share.connecting')\n\t\t\t\t\t\t\t| translate\n\t\t\t\t\t}}\n\t\t\t\t</span>\n\t\t\t\t<span class=\"pptx-ng-share-count\">\n\t\t\t\t\t{{ userCount() }}\n\t\t\t\t\t{{\n\t\t\t\t\t\t(userCount() === 1 ? 'pptx.share.participantSingular' : 'pptx.share.participantPlural')\n\t\t\t\t\t\t\t| translate\n\t\t\t\t\t}}\n\t\t\t\t</span>\n\t\t\t</div>\n\n\t\t\t@if (activeRoomId()) {\n\t\t\t\t<div class=\"pptx-ng-share-details-row\">\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{{ 'pptx.share.room' | translate }}\n\t\t\t\t\t\t<code>{{ activeRoomId() }}</code>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{{ 'pptx.share.server' | translate }}\n\t\t\t\t\t\t<code>{{ p2p() ? ('pptx.share.p2pServerValue' | translate) : activeServerUrl() }}</code>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t} @else if (p2p()) {\n\t\t\t\t<div class=\"pptx-ng-share-status-row\">\n\t\t\t\t\t<span class=\"pptx-ng-share-count\" style=\"margin-left: 0\">\n\t\t\t\t\t\t{{ 'pptx.share.p2pServerValue' | translate }}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t@if (shareUrl()) {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label class=\"pptx-ng-share-label\">{{ 'pptx.share.shareLink' | translate }}</label>\n\t\t\t\t\t<div class=\"pptx-ng-share-link-row\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\t[value]=\"shareUrl()\"\n\t\t\t\t\t\t\t(focus)=\"selectAll($event)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"pptx-ng-share-btn\"\n\t\t\t\t\t\t\t[disabled]=\"!canCopy()\"\n\t\t\t\t\t\t\t(click)=\"onCopyLink()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ (copied() ? 'pptx.share.copied' : 'pptx.share.copyLinkButton') | translate }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<p class=\"pptx-ng-share-hint\">{{ 'pptx.share.shareHint' | translate }}</p>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t@if (users().length > 0) {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label class=\"pptx-ng-share-label\">{{ 'pptx.share.connectedUsers' | translate }}</label>\n\t\t\t\t\t<div class=\"pptx-ng-share-users\">\n\t\t\t\t\t\t@for (user of users(); track user.id) {\n\t\t\t\t\t\t\t<div class=\"pptx-ng-share-user\">\n\t\t\t\t\t\t\t\t<span class=\"pptx-ng-share-user-avatar\" [style.background-color]=\"user.color\">\n\t\t\t\t\t\t\t\t\t@if (user.avatarUrl) {\n\t\t\t\t\t\t\t\t\t\t<img [src]=\"user.avatarUrl\" alt=\"\" />\n\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t{{ user.initials }}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span class=\"pptx-ng-share-user-name\">{{ user.name }}</span>\n\t\t\t\t\t\t\t\t<span class=\"pptx-ng-share-user-meta\">\n\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\tuser.isLocal\n\t\t\t\t\t\t\t\t\t\t\t? ('pptx.share.you' | translate)\n\t\t\t\t\t\t\t\t\t\t\t: ('pptx.notes.slideN' | translate: { n: user.slideNumber })\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t<button type=\"button\" class=\"pptx-ng-share-stop\" (click)=\"handleStop()\">\n\t\t\t\t{{ 'pptx.share.stopSharing' | translate }}\n\t\t\t</button>\n\t\t</div>\n\t} @else {\n\t\t<div class=\"pptx-ng-share-form\">\n\t\t\t<div class=\"pptx-ng-share-tabs\" role=\"tablist\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t[attr.aria-selected]=\"mode() === 'create'\"\n\t\t\t\t\t(click)=\"mode.set('create')\"\n\t\t\t\t>\n\t\t\t\t\t{{ 'pptx.share.createSession' | translate }}\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t[attr.aria-selected]=\"mode() === 'join'\"\n\t\t\t\t\t(click)=\"mode.set('join')\"\n\t\t\t\t>\n\t\t\t\t\t{{ 'pptx.share.joinSession' | translate }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<p class=\"pptx-ng-share-desc\">\n\t\t\t\t{{\n\t\t\t\t\t(mode() === 'join' ? 'pptx.share.joinDescription' : 'pptx.share.formDescription')\n\t\t\t\t\t\t| translate\n\t\t\t\t}}\n\t\t\t</p>\n\n\t\t\t@if (mode() === 'join') {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label for=\"pptx-ng-share-invitation\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t\t'pptx.share.invitationLabel' | translate\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\tid=\"pptx-ng-share-invitation\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t\t[attr.placeholder]=\"'pptx.share.invitationPlaceholder' | translate\"\n\t\t\t\t\t\t[value]=\"invitation()\"\n\t\t\t\t\t\t(input)=\"invitation.set(asValue($event))\"\n\t\t\t\t\t/>\n\t\t\t\t\t<p class=\"pptx-ng-share-hint\">{{ 'pptx.share.invitationHint' | translate }}</p>\n\t\t\t\t</div>\n\t\t\t} @else {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label for=\"pptx-ng-share-room\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t\t'pptx.share.roomId' | translate\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\tid=\"pptx-ng-share-room\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t\t[attr.placeholder]=\"'pptx.share.roomIdPlaceholder' | translate\"\n\t\t\t\t\t\t[value]=\"roomId()\"\n\t\t\t\t\t\t(input)=\"roomId.set(asValue($event))\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t<label for=\"pptx-ng-share-name\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t'pptx.share.yourName' | translate\n\t\t\t\t}}</label>\n\t\t\t\t<input\n\t\t\t\t\tid=\"pptx-ng-share-name\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t[attr.placeholder]=\"'pptx.share.yourNamePlaceholder' | translate\"\n\t\t\t\t\t[value]=\"userName()\"\n\t\t\t\t\t(input)=\"userName.set(asValue($event))\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t<label for=\"pptx-ng-share-server\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t'pptx.share.serverUrl' | translate\n\t\t\t\t}}</label>\n\t\t\t\t<input\n\t\t\t\t\tid=\"pptx-ng-share-server\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t[attr.placeholder]=\"'pptx.share.serverPlaceholder' | translate\"\n\t\t\t\t\t[value]=\"serverUrl()\"\n\t\t\t\t\t(input)=\"serverUrl.set(asValue($event))\"\n\t\t\t\t/>\n\t\t\t\t@if (isP2p()) {\n\t\t\t\t\t<p class=\"pptx-ng-share-hint\">{{ 'pptx.share.p2pHint' | translate }}</p>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t}\n\n\t<div footer>\n\t\t<button type=\"button\" class=\"pptx-ng-share-btn\" (click)=\"close.emit()\">\n\t\t\t{{ (active() ? 'pptx.common.close' : 'pptx.common.cancel') | translate }}\n\t\t</button>\n\t\t@if (!active()) {\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"pptx-ng-share-btn pptx-ng-share-btn-primary\"\n\t\t\t\t[disabled]=\"!canStart()\"\n\t\t\t\t(click)=\"handleStart()\"\n\t\t\t>\n\t\t\t\t{{ (mode() === 'join' ? 'pptx.share.joinSession' : 'pptx.share.startSharing') | translate }}\n\t\t\t</button>\n\t\t}\n\t</div>\n</pptx-modal-dialog>\n", styles: [".pptx-ng-share-form,.pptx-ng-share-active{display:flex;flex-direction:column;gap:1rem}.pptx-ng-share-desc{margin:0;font-size:.8125rem;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-tabs{display:grid;grid-template-columns:1fr 1fr;gap:.25rem;padding:.25rem;border-radius:.5rem;background:var(--pptx-muted, #2a2a2a)}.pptx-ng-share-tabs button{border:0;border-radius:.375rem;background:transparent;color:var(--pptx-muted-foreground, #9a9a9a);padding:.375rem .625rem;font:500 .75rem/1.2 inherit;cursor:pointer}.pptx-ng-share-tabs button[aria-selected=true]{background:var(--pptx-background, #111);color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-field{display:flex;flex-direction:column;gap:.375rem}.pptx-ng-share-label{font-size:.75rem;font-weight:500;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-input{width:100%;padding:.375rem .75rem;border-radius:.375rem;border:1px solid var(--pptx-border, #2a2a2a);background:var(--pptx-background, #111);color:var(--pptx-foreground, #e5e5e5);font-size:.8125rem}.pptx-ng-share-input:focus{outline:none;border-color:var(--pptx-primary, #6366f1);box-shadow:0 0 0 1px var(--pptx-primary, #6366f1)}.pptx-ng-share-btn{padding:.375rem .75rem;border:none;border-radius:.375rem;background:var(--pptx-muted, #2a2a2a);color:var(--pptx-foreground, #e5e5e5);font-size:.75rem;cursor:pointer}.pptx-ng-share-btn-primary{background:var(--pptx-primary, #6366f1);color:var(--pptx-primary-foreground, #fff)}.pptx-ng-share-btn-primary:disabled{opacity:.4;cursor:not-allowed}.pptx-ng-share-stop{width:100%;padding:.5rem .75rem;border:1px solid rgba(239,68,68,.3);border-radius:.375rem;background:#ef44441a;color:#f87171;font-size:.75rem;font-weight:500;cursor:pointer}.pptx-ng-share-stop:hover{background:#ef444433}.pptx-ng-share-status-row{display:flex;align-items:center;gap:.5rem;font-size:.8125rem}.pptx-ng-share-status-dot{width:.5rem;height:.5rem;border-radius:9999px;background:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-status-dot.is-on{background:#22c55e}.pptx-ng-share-status-text{font-weight:500;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-count{margin-left:auto;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-link-row{display:flex;align-items:center;gap:.5rem}.pptx-ng-share-hint{margin:0;font-size:.6875rem;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-details-row{display:flex;align-items:center;gap:.75rem;font-size:.6875rem;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-details-row code{font-family:inherit;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-users{max-height:140px;overflow-y:auto;border:1px solid var(--pptx-border, #2a2a2a);border-radius:.375rem;background:var(--pptx-background, #111)}.pptx-ng-share-user{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem}.pptx-ng-share-user:not(:last-child){border-bottom:1px solid var(--pptx-border, #2a2a2a)}.pptx-ng-share-user-avatar{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:9999px;color:#fff;font-size:.5625rem;font-weight:600}.pptx-ng-share-user-avatar img{width:100%;height:100%;border-radius:9999px;object-fit:cover}.pptx-ng-share-user-name{overflow:hidden;font-size:.75rem;color:var(--pptx-foreground, #e5e5e5);text-overflow:ellipsis;white-space:nowrap}.pptx-ng-share-user-meta{margin-left:auto;color:var(--pptx-muted-foreground, #9a9a9a);font-size:.625rem}\n"], dependencies: [{ kind: "component", type: ModalDialogComponent, selector: "pptx-modal-dialog", inputs: ["open", "title"], outputs: ["close"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
112546
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: ShareDialogComponent, isStandalone: true, selector: "pptx-share-dialog", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, defaults: { classPropertyName: "defaults", publicName: "defaults", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, connected: { classPropertyName: "connected", publicName: "connected", isSignal: true, isRequired: false, transformFunction: null }, userCount: { classPropertyName: "userCount", publicName: "userCount", isSignal: true, isRequired: false, transformFunction: null }, shareUrl: { classPropertyName: "shareUrl", publicName: "shareUrl", isSignal: true, isRequired: false, transformFunction: null }, p2p: { classPropertyName: "p2p", publicName: "p2p", isSignal: true, isRequired: false, transformFunction: null }, activeRoomId: { classPropertyName: "activeRoomId", publicName: "activeRoomId", isSignal: true, isRequired: false, transformFunction: null }, activeServerUrl: { classPropertyName: "activeServerUrl", publicName: "activeServerUrl", isSignal: true, isRequired: false, transformFunction: null }, users: { classPropertyName: "users", publicName: "users", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { start: "start", stop: "stop", close: "close" }, ngImport: i0, template: "<pptx-modal-dialog\n\t[open]=\"open()\"\n\t[title]=\"(active() ? 'pptx.share.activeTitle' : 'pptx.toolbar.share') | translate\"\n\t(close)=\"close.emit()\"\n>\n\t@if (active()) {\n\t\t<div class=\"pptx-ng-share-active\">\n\t\t\t<div class=\"pptx-ng-share-status-row\">\n\t\t\t\t<span class=\"pptx-ng-share-status-dot\" [class.is-on]=\"connected()\"></span>\n\t\t\t\t<span class=\"pptx-ng-share-status-text\">\n\t\t\t\t\t{{\n\t\t\t\t\t\t(connected() ? 'pptx.collaboration.status.connected' : 'pptx.share.connecting')\n\t\t\t\t\t\t\t| translate\n\t\t\t\t\t}}\n\t\t\t\t</span>\n\t\t\t\t<span class=\"pptx-ng-share-count\">\n\t\t\t\t\t{{ userCount() }}\n\t\t\t\t\t{{\n\t\t\t\t\t\t(userCount() === 1 ? 'pptx.share.participantSingular' : 'pptx.share.participantPlural')\n\t\t\t\t\t\t\t| translate\n\t\t\t\t\t}}\n\t\t\t\t</span>\n\t\t\t</div>\n\n\t\t\t@if (activeRoomId()) {\n\t\t\t\t<div class=\"pptx-ng-share-details-row\">\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{{ 'pptx.share.room' | translate }}\n\t\t\t\t\t\t<code>{{ activeRoomId() }}</code>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{{ 'pptx.share.server' | translate }}\n\t\t\t\t\t\t<code>{{ p2p() ? ('pptx.share.p2pServerValue' | translate) : activeServerUrl() }}</code>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t} @else if (p2p()) {\n\t\t\t\t<div class=\"pptx-ng-share-status-row\">\n\t\t\t\t\t<span class=\"pptx-ng-share-count\" style=\"margin-left: 0\">\n\t\t\t\t\t\t{{ 'pptx.share.p2pServerValue' | translate }}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t@if (shareUrl()) {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label class=\"pptx-ng-share-label\">{{ 'pptx.share.shareLink' | translate }}</label>\n\t\t\t\t\t<div class=\"pptx-ng-share-link-row\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\t[value]=\"shareUrl()\"\n\t\t\t\t\t\t\t(focus)=\"selectAll($event)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"pptx-ng-share-btn\"\n\t\t\t\t\t\t\t[disabled]=\"!canCopy()\"\n\t\t\t\t\t\t\t(click)=\"onCopyLink()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ (copied() ? 'pptx.share.copied' : 'pptx.share.copyLinkButton') | translate }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<p class=\"pptx-ng-share-hint\">{{ 'pptx.share.shareHint' | translate }}</p>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t@if (users().length > 0) {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label class=\"pptx-ng-share-label\">{{ 'pptx.share.connectedUsers' | translate }}</label>\n\t\t\t\t\t<div class=\"pptx-ng-share-users\">\n\t\t\t\t\t\t@for (user of users(); track user.id) {\n\t\t\t\t\t\t\t<div class=\"pptx-ng-share-user\">\n\t\t\t\t\t\t\t\t<span class=\"pptx-ng-share-user-avatar\" [style.background-color]=\"user.color\">\n\t\t\t\t\t\t\t\t\t@if (user.avatarUrl) {\n\t\t\t\t\t\t\t\t\t\t<img [src]=\"user.avatarUrl\" alt=\"\" />\n\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t<ng-container>{{ user.initials }}</ng-container>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span class=\"pptx-ng-share-user-name\">{{ user.name }}</span>\n\t\t\t\t\t\t\t\t<span class=\"pptx-ng-share-user-meta\">\n\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\tuser.isLocal\n\t\t\t\t\t\t\t\t\t\t\t? ('pptx.share.you' | translate)\n\t\t\t\t\t\t\t\t\t\t\t: ('pptx.notes.slideN' | translate: { n: user.slideNumber })\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t<button type=\"button\" class=\"pptx-ng-share-stop\" (click)=\"handleStop()\">\n\t\t\t\t{{ 'pptx.share.stopSharing' | translate }}\n\t\t\t</button>\n\t\t</div>\n\t} @else {\n\t\t<div class=\"pptx-ng-share-form\">\n\t\t\t<div class=\"pptx-ng-share-tabs\" role=\"tablist\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t[attr.aria-selected]=\"mode() === 'create'\"\n\t\t\t\t\t(click)=\"mode.set('create')\"\n\t\t\t\t>\n\t\t\t\t\t{{ 'pptx.share.createSession' | translate }}\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t[attr.aria-selected]=\"mode() === 'join'\"\n\t\t\t\t\t(click)=\"mode.set('join')\"\n\t\t\t\t>\n\t\t\t\t\t{{ 'pptx.share.joinSession' | translate }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<p class=\"pptx-ng-share-desc\">\n\t\t\t\t{{\n\t\t\t\t\t(mode() === 'join' ? 'pptx.share.joinDescription' : 'pptx.share.formDescription')\n\t\t\t\t\t\t| translate\n\t\t\t\t}}\n\t\t\t</p>\n\n\t\t\t@if (mode() === 'join') {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label for=\"pptx-ng-share-invitation\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t\t'pptx.share.invitationLabel' | translate\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\tid=\"pptx-ng-share-invitation\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t\t[attr.placeholder]=\"'pptx.share.invitationPlaceholder' | translate\"\n\t\t\t\t\t\t[value]=\"invitation()\"\n\t\t\t\t\t\t(input)=\"invitation.set(asValue($event))\"\n\t\t\t\t\t/>\n\t\t\t\t\t<p class=\"pptx-ng-share-hint\">{{ 'pptx.share.invitationHint' | translate }}</p>\n\t\t\t\t</div>\n\t\t\t} @else {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label for=\"pptx-ng-share-room\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t\t'pptx.share.roomId' | translate\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\tid=\"pptx-ng-share-room\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t\t[attr.placeholder]=\"'pptx.share.roomIdPlaceholder' | translate\"\n\t\t\t\t\t\t[value]=\"roomId()\"\n\t\t\t\t\t\t(input)=\"roomId.set(asValue($event))\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t<label for=\"pptx-ng-share-name\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t'pptx.share.yourName' | translate\n\t\t\t\t}}</label>\n\t\t\t\t<input\n\t\t\t\t\tid=\"pptx-ng-share-name\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t[attr.placeholder]=\"'pptx.share.yourNamePlaceholder' | translate\"\n\t\t\t\t\t[value]=\"userName()\"\n\t\t\t\t\t(input)=\"userName.set(asValue($event))\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t<label for=\"pptx-ng-share-server\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t'pptx.share.serverUrl' | translate\n\t\t\t\t}}</label>\n\t\t\t\t<input\n\t\t\t\t\tid=\"pptx-ng-share-server\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t[attr.placeholder]=\"'pptx.share.serverPlaceholder' | translate\"\n\t\t\t\t\t[value]=\"serverUrl()\"\n\t\t\t\t\t(input)=\"serverUrl.set(asValue($event))\"\n\t\t\t\t/>\n\t\t\t\t@if (isP2p()) {\n\t\t\t\t\t<p class=\"pptx-ng-share-hint\">{{ 'pptx.share.p2pHint' | translate }}</p>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t}\n\n\t<div footer>\n\t\t<button type=\"button\" class=\"pptx-ng-share-btn\" (click)=\"close.emit()\">\n\t\t\t{{ (active() ? 'pptx.common.close' : 'pptx.common.cancel') | translate }}\n\t\t</button>\n\t\t@if (!active()) {\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"pptx-ng-share-btn pptx-ng-share-btn-primary\"\n\t\t\t\t[disabled]=\"!canStart()\"\n\t\t\t\t(click)=\"handleStart()\"\n\t\t\t>\n\t\t\t\t{{ (mode() === 'join' ? 'pptx.share.joinSession' : 'pptx.share.startSharing') | translate }}\n\t\t\t</button>\n\t\t}\n\t</div>\n</pptx-modal-dialog>\n", styles: [".pptx-ng-share-form,.pptx-ng-share-active{display:flex;flex-direction:column;gap:1rem}.pptx-ng-share-desc{margin:0;font-size:.8125rem;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-tabs{display:grid;grid-template-columns:1fr 1fr;gap:.25rem;padding:.25rem;border-radius:.5rem;background:var(--pptx-muted, #2a2a2a)}.pptx-ng-share-tabs button{border:0;border-radius:.375rem;background:transparent;color:var(--pptx-muted-foreground, #9a9a9a);padding:.375rem .625rem;font:500 .75rem/1.2 inherit;cursor:pointer}.pptx-ng-share-tabs button[aria-selected=true]{background:var(--pptx-background, #111);color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-field{display:flex;flex-direction:column;gap:.375rem}.pptx-ng-share-label{font-size:.75rem;font-weight:500;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-input{width:100%;padding:.375rem .75rem;border-radius:.375rem;border:1px solid var(--pptx-border, #2a2a2a);background:var(--pptx-background, #111);color:var(--pptx-foreground, #e5e5e5);font-size:.8125rem}.pptx-ng-share-input:focus{outline:none;border-color:var(--pptx-primary, #6366f1);box-shadow:0 0 0 1px var(--pptx-primary, #6366f1)}.pptx-ng-share-btn{padding:.375rem .75rem;border:none;border-radius:.375rem;background:var(--pptx-muted, #2a2a2a);color:var(--pptx-foreground, #e5e5e5);font-size:.75rem;cursor:pointer}.pptx-ng-share-btn-primary{background:var(--pptx-primary, #6366f1);color:var(--pptx-primary-foreground, #fff)}.pptx-ng-share-btn-primary:disabled{opacity:.4;cursor:not-allowed}.pptx-ng-share-stop{width:100%;padding:.5rem .75rem;border:1px solid rgba(239,68,68,.3);border-radius:.375rem;background:#ef44441a;color:#f87171;font-size:.75rem;font-weight:500;cursor:pointer}.pptx-ng-share-stop:hover{background:#ef444433}.pptx-ng-share-status-row{display:flex;align-items:center;gap:.5rem;font-size:.8125rem}.pptx-ng-share-status-dot{width:.5rem;height:.5rem;border-radius:9999px;background:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-status-dot.is-on{background:#22c55e}.pptx-ng-share-status-text{font-weight:500;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-count{margin-left:auto;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-link-row{display:flex;align-items:center;gap:.5rem}.pptx-ng-share-hint{margin:0;font-size:.6875rem;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-details-row{display:flex;align-items:center;gap:.75rem;font-size:.6875rem;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-details-row code{font-family:inherit;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-users{max-height:140px;overflow-y:auto;border:1px solid var(--pptx-border, #2a2a2a);border-radius:.375rem;background:var(--pptx-background, #111)}.pptx-ng-share-user{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem}.pptx-ng-share-user:not(:last-child){border-bottom:1px solid var(--pptx-border, #2a2a2a)}.pptx-ng-share-user-avatar{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:9999px;color:#fff;font-size:.5625rem;font-weight:600}.pptx-ng-share-user-avatar img{width:100%;height:100%;border-radius:9999px;object-fit:cover}.pptx-ng-share-user-name{overflow:hidden;font-size:.75rem;color:var(--pptx-foreground, #e5e5e5);text-overflow:ellipsis;white-space:nowrap}.pptx-ng-share-user-meta{margin-left:auto;color:var(--pptx-muted-foreground, #9a9a9a);font-size:.625rem}\n"], dependencies: [{ kind: "component", type: ModalDialogComponent, selector: "pptx-modal-dialog", inputs: ["open", "title"], outputs: ["close"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
112541
112547
|
}
|
|
112542
112548
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: ShareDialogComponent, decorators: [{
|
|
112543
112549
|
type: Component,
|
|
112544
|
-
args: [{ selector: 'pptx-share-dialog', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ModalDialogComponent, TranslatePipe], template: "<pptx-modal-dialog\n\t[open]=\"open()\"\n\t[title]=\"(active() ? 'pptx.share.activeTitle' : 'pptx.toolbar.share') | translate\"\n\t(close)=\"close.emit()\"\n>\n\t@if (active()) {\n\t\t<div class=\"pptx-ng-share-active\">\n\t\t\t<div class=\"pptx-ng-share-status-row\">\n\t\t\t\t<span class=\"pptx-ng-share-status-dot\" [class.is-on]=\"connected()\"></span>\n\t\t\t\t<span class=\"pptx-ng-share-status-text\">\n\t\t\t\t\t{{\n\t\t\t\t\t\t(connected() ? 'pptx.collaboration.status.connected' : 'pptx.share.connecting')\n\t\t\t\t\t\t\t| translate\n\t\t\t\t\t}}\n\t\t\t\t</span>\n\t\t\t\t<span class=\"pptx-ng-share-count\">\n\t\t\t\t\t{{ userCount() }}\n\t\t\t\t\t{{\n\t\t\t\t\t\t(userCount() === 1 ? 'pptx.share.participantSingular' : 'pptx.share.participantPlural')\n\t\t\t\t\t\t\t| translate\n\t\t\t\t\t}}\n\t\t\t\t</span>\n\t\t\t</div>\n\n\t\t\t@if (activeRoomId()) {\n\t\t\t\t<div class=\"pptx-ng-share-details-row\">\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{{ 'pptx.share.room' | translate }}\n\t\t\t\t\t\t<code>{{ activeRoomId() }}</code>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{{ 'pptx.share.server' | translate }}\n\t\t\t\t\t\t<code>{{ p2p() ? ('pptx.share.p2pServerValue' | translate) : activeServerUrl() }}</code>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t} @else if (p2p()) {\n\t\t\t\t<div class=\"pptx-ng-share-status-row\">\n\t\t\t\t\t<span class=\"pptx-ng-share-count\" style=\"margin-left: 0\">\n\t\t\t\t\t\t{{ 'pptx.share.p2pServerValue' | translate }}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t@if (shareUrl()) {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label class=\"pptx-ng-share-label\">{{ 'pptx.share.shareLink' | translate }}</label>\n\t\t\t\t\t<div class=\"pptx-ng-share-link-row\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\t[value]=\"shareUrl()\"\n\t\t\t\t\t\t\t(focus)=\"selectAll($event)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"pptx-ng-share-btn\"\n\t\t\t\t\t\t\t[disabled]=\"!canCopy()\"\n\t\t\t\t\t\t\t(click)=\"onCopyLink()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ (copied() ? 'pptx.share.copied' : 'pptx.share.copyLinkButton') | translate }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<p class=\"pptx-ng-share-hint\">{{ 'pptx.share.shareHint' | translate }}</p>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t@if (users().length > 0) {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label class=\"pptx-ng-share-label\">{{ 'pptx.share.connectedUsers' | translate }}</label>\n\t\t\t\t\t<div class=\"pptx-ng-share-users\">\n\t\t\t\t\t\t@for (user of users(); track user.id) {\n\t\t\t\t\t\t\t<div class=\"pptx-ng-share-user\">\n\t\t\t\t\t\t\t\t<span class=\"pptx-ng-share-user-avatar\" [style.background-color]=\"user.color\">\n\t\t\t\t\t\t\t\t\t@if (user.avatarUrl) {\n\t\t\t\t\t\t\t\t\t\t<img [src]=\"user.avatarUrl\" alt=\"\" />\n\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t{{ user.initials }}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span class=\"pptx-ng-share-user-name\">{{ user.name }}</span>\n\t\t\t\t\t\t\t\t<span class=\"pptx-ng-share-user-meta\">\n\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\tuser.isLocal\n\t\t\t\t\t\t\t\t\t\t\t? ('pptx.share.you' | translate)\n\t\t\t\t\t\t\t\t\t\t\t: ('pptx.notes.slideN' | translate: { n: user.slideNumber })\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t<button type=\"button\" class=\"pptx-ng-share-stop\" (click)=\"handleStop()\">\n\t\t\t\t{{ 'pptx.share.stopSharing' | translate }}\n\t\t\t</button>\n\t\t</div>\n\t} @else {\n\t\t<div class=\"pptx-ng-share-form\">\n\t\t\t<div class=\"pptx-ng-share-tabs\" role=\"tablist\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t[attr.aria-selected]=\"mode() === 'create'\"\n\t\t\t\t\t(click)=\"mode.set('create')\"\n\t\t\t\t>\n\t\t\t\t\t{{ 'pptx.share.createSession' | translate }}\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t[attr.aria-selected]=\"mode() === 'join'\"\n\t\t\t\t\t(click)=\"mode.set('join')\"\n\t\t\t\t>\n\t\t\t\t\t{{ 'pptx.share.joinSession' | translate }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<p class=\"pptx-ng-share-desc\">\n\t\t\t\t{{\n\t\t\t\t\t(mode() === 'join' ? 'pptx.share.joinDescription' : 'pptx.share.formDescription')\n\t\t\t\t\t\t| translate\n\t\t\t\t}}\n\t\t\t</p>\n\n\t\t\t@if (mode() === 'join') {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label for=\"pptx-ng-share-invitation\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t\t'pptx.share.invitationLabel' | translate\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\tid=\"pptx-ng-share-invitation\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t\t[attr.placeholder]=\"'pptx.share.invitationPlaceholder' | translate\"\n\t\t\t\t\t\t[value]=\"invitation()\"\n\t\t\t\t\t\t(input)=\"invitation.set(asValue($event))\"\n\t\t\t\t\t/>\n\t\t\t\t\t<p class=\"pptx-ng-share-hint\">{{ 'pptx.share.invitationHint' | translate }}</p>\n\t\t\t\t</div>\n\t\t\t} @else {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label for=\"pptx-ng-share-room\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t\t'pptx.share.roomId' | translate\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\tid=\"pptx-ng-share-room\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t\t[attr.placeholder]=\"'pptx.share.roomIdPlaceholder' | translate\"\n\t\t\t\t\t\t[value]=\"roomId()\"\n\t\t\t\t\t\t(input)=\"roomId.set(asValue($event))\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t<label for=\"pptx-ng-share-name\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t'pptx.share.yourName' | translate\n\t\t\t\t}}</label>\n\t\t\t\t<input\n\t\t\t\t\tid=\"pptx-ng-share-name\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t[attr.placeholder]=\"'pptx.share.yourNamePlaceholder' | translate\"\n\t\t\t\t\t[value]=\"userName()\"\n\t\t\t\t\t(input)=\"userName.set(asValue($event))\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t<label for=\"pptx-ng-share-server\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t'pptx.share.serverUrl' | translate\n\t\t\t\t}}</label>\n\t\t\t\t<input\n\t\t\t\t\tid=\"pptx-ng-share-server\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t[attr.placeholder]=\"'pptx.share.serverPlaceholder' | translate\"\n\t\t\t\t\t[value]=\"serverUrl()\"\n\t\t\t\t\t(input)=\"serverUrl.set(asValue($event))\"\n\t\t\t\t/>\n\t\t\t\t@if (isP2p()) {\n\t\t\t\t\t<p class=\"pptx-ng-share-hint\">{{ 'pptx.share.p2pHint' | translate }}</p>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t}\n\n\t<div footer>\n\t\t<button type=\"button\" class=\"pptx-ng-share-btn\" (click)=\"close.emit()\">\n\t\t\t{{ (active() ? 'pptx.common.close' : 'pptx.common.cancel') | translate }}\n\t\t</button>\n\t\t@if (!active()) {\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"pptx-ng-share-btn pptx-ng-share-btn-primary\"\n\t\t\t\t[disabled]=\"!canStart()\"\n\t\t\t\t(click)=\"handleStart()\"\n\t\t\t>\n\t\t\t\t{{ (mode() === 'join' ? 'pptx.share.joinSession' : 'pptx.share.startSharing') | translate }}\n\t\t\t</button>\n\t\t}\n\t</div>\n</pptx-modal-dialog>\n", styles: [".pptx-ng-share-form,.pptx-ng-share-active{display:flex;flex-direction:column;gap:1rem}.pptx-ng-share-desc{margin:0;font-size:.8125rem;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-tabs{display:grid;grid-template-columns:1fr 1fr;gap:.25rem;padding:.25rem;border-radius:.5rem;background:var(--pptx-muted, #2a2a2a)}.pptx-ng-share-tabs button{border:0;border-radius:.375rem;background:transparent;color:var(--pptx-muted-foreground, #9a9a9a);padding:.375rem .625rem;font:500 .75rem/1.2 inherit;cursor:pointer}.pptx-ng-share-tabs button[aria-selected=true]{background:var(--pptx-background, #111);color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-field{display:flex;flex-direction:column;gap:.375rem}.pptx-ng-share-label{font-size:.75rem;font-weight:500;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-input{width:100%;padding:.375rem .75rem;border-radius:.375rem;border:1px solid var(--pptx-border, #2a2a2a);background:var(--pptx-background, #111);color:var(--pptx-foreground, #e5e5e5);font-size:.8125rem}.pptx-ng-share-input:focus{outline:none;border-color:var(--pptx-primary, #6366f1);box-shadow:0 0 0 1px var(--pptx-primary, #6366f1)}.pptx-ng-share-btn{padding:.375rem .75rem;border:none;border-radius:.375rem;background:var(--pptx-muted, #2a2a2a);color:var(--pptx-foreground, #e5e5e5);font-size:.75rem;cursor:pointer}.pptx-ng-share-btn-primary{background:var(--pptx-primary, #6366f1);color:var(--pptx-primary-foreground, #fff)}.pptx-ng-share-btn-primary:disabled{opacity:.4;cursor:not-allowed}.pptx-ng-share-stop{width:100%;padding:.5rem .75rem;border:1px solid rgba(239,68,68,.3);border-radius:.375rem;background:#ef44441a;color:#f87171;font-size:.75rem;font-weight:500;cursor:pointer}.pptx-ng-share-stop:hover{background:#ef444433}.pptx-ng-share-status-row{display:flex;align-items:center;gap:.5rem;font-size:.8125rem}.pptx-ng-share-status-dot{width:.5rem;height:.5rem;border-radius:9999px;background:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-status-dot.is-on{background:#22c55e}.pptx-ng-share-status-text{font-weight:500;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-count{margin-left:auto;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-link-row{display:flex;align-items:center;gap:.5rem}.pptx-ng-share-hint{margin:0;font-size:.6875rem;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-details-row{display:flex;align-items:center;gap:.75rem;font-size:.6875rem;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-details-row code{font-family:inherit;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-users{max-height:140px;overflow-y:auto;border:1px solid var(--pptx-border, #2a2a2a);border-radius:.375rem;background:var(--pptx-background, #111)}.pptx-ng-share-user{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem}.pptx-ng-share-user:not(:last-child){border-bottom:1px solid var(--pptx-border, #2a2a2a)}.pptx-ng-share-user-avatar{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:9999px;color:#fff;font-size:.5625rem;font-weight:600}.pptx-ng-share-user-avatar img{width:100%;height:100%;border-radius:9999px;object-fit:cover}.pptx-ng-share-user-name{overflow:hidden;font-size:.75rem;color:var(--pptx-foreground, #e5e5e5);text-overflow:ellipsis;white-space:nowrap}.pptx-ng-share-user-meta{margin-left:auto;color:var(--pptx-muted-foreground, #9a9a9a);font-size:.625rem}\n"] }]
|
|
112550
|
+
args: [{ selector: 'pptx-share-dialog', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ModalDialogComponent, TranslatePipe], template: "<pptx-modal-dialog\n\t[open]=\"open()\"\n\t[title]=\"(active() ? 'pptx.share.activeTitle' : 'pptx.toolbar.share') | translate\"\n\t(close)=\"close.emit()\"\n>\n\t@if (active()) {\n\t\t<div class=\"pptx-ng-share-active\">\n\t\t\t<div class=\"pptx-ng-share-status-row\">\n\t\t\t\t<span class=\"pptx-ng-share-status-dot\" [class.is-on]=\"connected()\"></span>\n\t\t\t\t<span class=\"pptx-ng-share-status-text\">\n\t\t\t\t\t{{\n\t\t\t\t\t\t(connected() ? 'pptx.collaboration.status.connected' : 'pptx.share.connecting')\n\t\t\t\t\t\t\t| translate\n\t\t\t\t\t}}\n\t\t\t\t</span>\n\t\t\t\t<span class=\"pptx-ng-share-count\">\n\t\t\t\t\t{{ userCount() }}\n\t\t\t\t\t{{\n\t\t\t\t\t\t(userCount() === 1 ? 'pptx.share.participantSingular' : 'pptx.share.participantPlural')\n\t\t\t\t\t\t\t| translate\n\t\t\t\t\t}}\n\t\t\t\t</span>\n\t\t\t</div>\n\n\t\t\t@if (activeRoomId()) {\n\t\t\t\t<div class=\"pptx-ng-share-details-row\">\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{{ 'pptx.share.room' | translate }}\n\t\t\t\t\t\t<code>{{ activeRoomId() }}</code>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{{ 'pptx.share.server' | translate }}\n\t\t\t\t\t\t<code>{{ p2p() ? ('pptx.share.p2pServerValue' | translate) : activeServerUrl() }}</code>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t} @else if (p2p()) {\n\t\t\t\t<div class=\"pptx-ng-share-status-row\">\n\t\t\t\t\t<span class=\"pptx-ng-share-count\" style=\"margin-left: 0\">\n\t\t\t\t\t\t{{ 'pptx.share.p2pServerValue' | translate }}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t@if (shareUrl()) {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label class=\"pptx-ng-share-label\">{{ 'pptx.share.shareLink' | translate }}</label>\n\t\t\t\t\t<div class=\"pptx-ng-share-link-row\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\t[value]=\"shareUrl()\"\n\t\t\t\t\t\t\t(focus)=\"selectAll($event)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"pptx-ng-share-btn\"\n\t\t\t\t\t\t\t[disabled]=\"!canCopy()\"\n\t\t\t\t\t\t\t(click)=\"onCopyLink()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ (copied() ? 'pptx.share.copied' : 'pptx.share.copyLinkButton') | translate }}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<p class=\"pptx-ng-share-hint\">{{ 'pptx.share.shareHint' | translate }}</p>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t@if (users().length > 0) {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label class=\"pptx-ng-share-label\">{{ 'pptx.share.connectedUsers' | translate }}</label>\n\t\t\t\t\t<div class=\"pptx-ng-share-users\">\n\t\t\t\t\t\t@for (user of users(); track user.id) {\n\t\t\t\t\t\t\t<div class=\"pptx-ng-share-user\">\n\t\t\t\t\t\t\t\t<span class=\"pptx-ng-share-user-avatar\" [style.background-color]=\"user.color\">\n\t\t\t\t\t\t\t\t\t@if (user.avatarUrl) {\n\t\t\t\t\t\t\t\t\t\t<img [src]=\"user.avatarUrl\" alt=\"\" />\n\t\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t\t<ng-container>{{ user.initials }}</ng-container>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span class=\"pptx-ng-share-user-name\">{{ user.name }}</span>\n\t\t\t\t\t\t\t\t<span class=\"pptx-ng-share-user-meta\">\n\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\tuser.isLocal\n\t\t\t\t\t\t\t\t\t\t\t? ('pptx.share.you' | translate)\n\t\t\t\t\t\t\t\t\t\t\t: ('pptx.notes.slideN' | translate: { n: user.slideNumber })\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t<button type=\"button\" class=\"pptx-ng-share-stop\" (click)=\"handleStop()\">\n\t\t\t\t{{ 'pptx.share.stopSharing' | translate }}\n\t\t\t</button>\n\t\t</div>\n\t} @else {\n\t\t<div class=\"pptx-ng-share-form\">\n\t\t\t<div class=\"pptx-ng-share-tabs\" role=\"tablist\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t[attr.aria-selected]=\"mode() === 'create'\"\n\t\t\t\t\t(click)=\"mode.set('create')\"\n\t\t\t\t>\n\t\t\t\t\t{{ 'pptx.share.createSession' | translate }}\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t[attr.aria-selected]=\"mode() === 'join'\"\n\t\t\t\t\t(click)=\"mode.set('join')\"\n\t\t\t\t>\n\t\t\t\t\t{{ 'pptx.share.joinSession' | translate }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<p class=\"pptx-ng-share-desc\">\n\t\t\t\t{{\n\t\t\t\t\t(mode() === 'join' ? 'pptx.share.joinDescription' : 'pptx.share.formDescription')\n\t\t\t\t\t\t| translate\n\t\t\t\t}}\n\t\t\t</p>\n\n\t\t\t@if (mode() === 'join') {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label for=\"pptx-ng-share-invitation\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t\t'pptx.share.invitationLabel' | translate\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\tid=\"pptx-ng-share-invitation\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t\t[attr.placeholder]=\"'pptx.share.invitationPlaceholder' | translate\"\n\t\t\t\t\t\t[value]=\"invitation()\"\n\t\t\t\t\t\t(input)=\"invitation.set(asValue($event))\"\n\t\t\t\t\t/>\n\t\t\t\t\t<p class=\"pptx-ng-share-hint\">{{ 'pptx.share.invitationHint' | translate }}</p>\n\t\t\t\t</div>\n\t\t\t} @else {\n\t\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t\t<label for=\"pptx-ng-share-room\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t\t'pptx.share.roomId' | translate\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\tid=\"pptx-ng-share-room\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t\t[attr.placeholder]=\"'pptx.share.roomIdPlaceholder' | translate\"\n\t\t\t\t\t\t[value]=\"roomId()\"\n\t\t\t\t\t\t(input)=\"roomId.set(asValue($event))\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t}\n\n\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t<label for=\"pptx-ng-share-name\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t'pptx.share.yourName' | translate\n\t\t\t\t}}</label>\n\t\t\t\t<input\n\t\t\t\t\tid=\"pptx-ng-share-name\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t[attr.placeholder]=\"'pptx.share.yourNamePlaceholder' | translate\"\n\t\t\t\t\t[value]=\"userName()\"\n\t\t\t\t\t(input)=\"userName.set(asValue($event))\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div class=\"pptx-ng-share-field\">\n\t\t\t\t<label for=\"pptx-ng-share-server\" class=\"pptx-ng-share-label\">{{\n\t\t\t\t\t'pptx.share.serverUrl' | translate\n\t\t\t\t}}</label>\n\t\t\t\t<input\n\t\t\t\t\tid=\"pptx-ng-share-server\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tclass=\"pptx-ng-share-input\"\n\t\t\t\t\t[attr.placeholder]=\"'pptx.share.serverPlaceholder' | translate\"\n\t\t\t\t\t[value]=\"serverUrl()\"\n\t\t\t\t\t(input)=\"serverUrl.set(asValue($event))\"\n\t\t\t\t/>\n\t\t\t\t@if (isP2p()) {\n\t\t\t\t\t<p class=\"pptx-ng-share-hint\">{{ 'pptx.share.p2pHint' | translate }}</p>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t}\n\n\t<div footer>\n\t\t<button type=\"button\" class=\"pptx-ng-share-btn\" (click)=\"close.emit()\">\n\t\t\t{{ (active() ? 'pptx.common.close' : 'pptx.common.cancel') | translate }}\n\t\t</button>\n\t\t@if (!active()) {\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"pptx-ng-share-btn pptx-ng-share-btn-primary\"\n\t\t\t\t[disabled]=\"!canStart()\"\n\t\t\t\t(click)=\"handleStart()\"\n\t\t\t>\n\t\t\t\t{{ (mode() === 'join' ? 'pptx.share.joinSession' : 'pptx.share.startSharing') | translate }}\n\t\t\t</button>\n\t\t}\n\t</div>\n</pptx-modal-dialog>\n", styles: [".pptx-ng-share-form,.pptx-ng-share-active{display:flex;flex-direction:column;gap:1rem}.pptx-ng-share-desc{margin:0;font-size:.8125rem;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-tabs{display:grid;grid-template-columns:1fr 1fr;gap:.25rem;padding:.25rem;border-radius:.5rem;background:var(--pptx-muted, #2a2a2a)}.pptx-ng-share-tabs button{border:0;border-radius:.375rem;background:transparent;color:var(--pptx-muted-foreground, #9a9a9a);padding:.375rem .625rem;font:500 .75rem/1.2 inherit;cursor:pointer}.pptx-ng-share-tabs button[aria-selected=true]{background:var(--pptx-background, #111);color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-field{display:flex;flex-direction:column;gap:.375rem}.pptx-ng-share-label{font-size:.75rem;font-weight:500;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-input{width:100%;padding:.375rem .75rem;border-radius:.375rem;border:1px solid var(--pptx-border, #2a2a2a);background:var(--pptx-background, #111);color:var(--pptx-foreground, #e5e5e5);font-size:.8125rem}.pptx-ng-share-input:focus{outline:none;border-color:var(--pptx-primary, #6366f1);box-shadow:0 0 0 1px var(--pptx-primary, #6366f1)}.pptx-ng-share-btn{padding:.375rem .75rem;border:none;border-radius:.375rem;background:var(--pptx-muted, #2a2a2a);color:var(--pptx-foreground, #e5e5e5);font-size:.75rem;cursor:pointer}.pptx-ng-share-btn-primary{background:var(--pptx-primary, #6366f1);color:var(--pptx-primary-foreground, #fff)}.pptx-ng-share-btn-primary:disabled{opacity:.4;cursor:not-allowed}.pptx-ng-share-stop{width:100%;padding:.5rem .75rem;border:1px solid rgba(239,68,68,.3);border-radius:.375rem;background:#ef44441a;color:#f87171;font-size:.75rem;font-weight:500;cursor:pointer}.pptx-ng-share-stop:hover{background:#ef444433}.pptx-ng-share-status-row{display:flex;align-items:center;gap:.5rem;font-size:.8125rem}.pptx-ng-share-status-dot{width:.5rem;height:.5rem;border-radius:9999px;background:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-status-dot.is-on{background:#22c55e}.pptx-ng-share-status-text{font-weight:500;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-count{margin-left:auto;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-link-row{display:flex;align-items:center;gap:.5rem}.pptx-ng-share-hint{margin:0;font-size:.6875rem;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-details-row{display:flex;align-items:center;gap:.75rem;font-size:.6875rem;color:var(--pptx-muted-foreground, #9a9a9a)}.pptx-ng-share-details-row code{font-family:inherit;color:var(--pptx-foreground, #e5e5e5)}.pptx-ng-share-users{max-height:140px;overflow-y:auto;border:1px solid var(--pptx-border, #2a2a2a);border-radius:.375rem;background:var(--pptx-background, #111)}.pptx-ng-share-user{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem}.pptx-ng-share-user:not(:last-child){border-bottom:1px solid var(--pptx-border, #2a2a2a)}.pptx-ng-share-user-avatar{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:9999px;color:#fff;font-size:.5625rem;font-weight:600}.pptx-ng-share-user-avatar img{width:100%;height:100%;border-radius:9999px;object-fit:cover}.pptx-ng-share-user-name{overflow:hidden;font-size:.75rem;color:var(--pptx-foreground, #e5e5e5);text-overflow:ellipsis;white-space:nowrap}.pptx-ng-share-user-meta{margin-left:auto;color:var(--pptx-muted-foreground, #9a9a9a);font-size:.625rem}\n"] }]
|
|
112545
112551
|
}], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], defaults: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaults", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], connected: [{ type: i0.Input, args: [{ isSignal: true, alias: "connected", required: false }] }], userCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "userCount", required: false }] }], shareUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "shareUrl", required: false }] }], p2p: [{ type: i0.Input, args: [{ isSignal: true, alias: "p2p", required: false }] }], activeRoomId: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeRoomId", required: false }] }], activeServerUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeServerUrl", required: false }] }], users: [{ type: i0.Input, args: [{ isSignal: true, alias: "users", required: false }] }], start: [{ type: i0.Output, args: ["start"] }], stop: [{ type: i0.Output, args: ["stop"] }], close: [{ type: i0.Output, args: ["close"] }] } });
|
|
112546
112552
|
|
|
112547
112553
|
/**
|
|
@@ -132516,9 +132522,11 @@ class AiSettingsSectionComponent {
|
|
|
132516
132522
|
|
|
132517
132523
|
<p class="text-xs text-muted-foreground">
|
|
132518
132524
|
@if (chatCount() === null) {
|
|
132519
|
-
{{ 'pptx.ai.exportLogsCounting' | translate }}
|
|
132525
|
+
<ng-container>{{ 'pptx.ai.exportLogsCounting' | translate }}</ng-container>
|
|
132520
132526
|
} @else {
|
|
132521
|
-
{{
|
|
132527
|
+
<ng-container>{{
|
|
132528
|
+
'pptx.ai.exportLogsStoredCount' | translate: { count: chatCount() }
|
|
132529
|
+
}}</ng-container>
|
|
132522
132530
|
}
|
|
132523
132531
|
</p>
|
|
132524
132532
|
|
|
@@ -132556,9 +132564,11 @@ class AiSettingsSectionComponent {
|
|
|
132556
132564
|
@if (doneCount() !== null) {
|
|
132557
132565
|
<p class="text-xs text-muted-foreground" role="status">
|
|
132558
132566
|
@if (doneCount()! > 0) {
|
|
132559
|
-
{{
|
|
132567
|
+
<ng-container>{{
|
|
132568
|
+
'pptx.ai.exportLogsDone' | translate: { count: doneCount() }
|
|
132569
|
+
}}</ng-container>
|
|
132560
132570
|
} @else {
|
|
132561
|
-
{{ 'pptx.ai.noChatsToExport' | translate }}
|
|
132571
|
+
<ng-container>{{ 'pptx.ai.noChatsToExport' | translate }}</ng-container>
|
|
132562
132572
|
}
|
|
132563
132573
|
</p>
|
|
132564
132574
|
}
|
|
@@ -132588,9 +132598,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
132588
132598
|
|
|
132589
132599
|
<p class="text-xs text-muted-foreground">
|
|
132590
132600
|
@if (chatCount() === null) {
|
|
132591
|
-
{{ 'pptx.ai.exportLogsCounting' | translate }}
|
|
132601
|
+
<ng-container>{{ 'pptx.ai.exportLogsCounting' | translate }}</ng-container>
|
|
132592
132602
|
} @else {
|
|
132593
|
-
{{
|
|
132603
|
+
<ng-container>{{
|
|
132604
|
+
'pptx.ai.exportLogsStoredCount' | translate: { count: chatCount() }
|
|
132605
|
+
}}</ng-container>
|
|
132594
132606
|
}
|
|
132595
132607
|
</p>
|
|
132596
132608
|
|
|
@@ -132628,9 +132640,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
132628
132640
|
@if (doneCount() !== null) {
|
|
132629
132641
|
<p class="text-xs text-muted-foreground" role="status">
|
|
132630
132642
|
@if (doneCount()! > 0) {
|
|
132631
|
-
{{
|
|
132643
|
+
<ng-container>{{
|
|
132644
|
+
'pptx.ai.exportLogsDone' | translate: { count: doneCount() }
|
|
132645
|
+
}}</ng-container>
|
|
132632
132646
|
} @else {
|
|
132633
|
-
{{ 'pptx.ai.noChatsToExport' | translate }}
|
|
132647
|
+
<ng-container>{{ 'pptx.ai.noChatsToExport' | translate }}</ng-container>
|
|
132634
132648
|
}
|
|
132635
132649
|
</p>
|
|
132636
132650
|
}
|
|
@@ -140740,4 +140754,4 @@ function cn(...values) {
|
|
|
140740
140754
|
*/
|
|
140741
140755
|
|
|
140742
140756
|
export { CommentMarkersOverlayComponent as $, ALIGN_OPTIONS as A, AnimationPlaybackService as B, AutosaveRecoveryDialogComponent as C, AutosaveService as D, BroadcastDialogComponent as E, CHART_EDITOR_STYLES as F, CURSOR_PALETTE as G, CanvasFitService as H, ChartAxisOptionsComponent as I, ChartAxisStyleOptionsComponent as J, ChartComboTypeOptionsComponent as K, ChartDataEditorComponent as L, ChartDataLabelOptionsComponent as M, ChartDatapointMarkerOptionsComponent as N, ChartDatapointOptionsComponent as O, ChartDisplayOptionsComponent as P, ChartElementViewComponent as Q, ChartErrorBarOptionsComponent as R, ChartMarkerOptionsComponent as S, ChartPartSelectionService as T, ChartPrimitivesComponent as U, ChartRendererComponent as V, ChartTrendlineOptionsComponent as W, ChartTypeSelectorComponent as X, CollaborationCursorsComponent as Y, CollaborationService as Z, ColorChangedImageComponent as _, ANIMATION_PRESET_CATEGORIES as a, LOCALE_CATALOG as a$, CommentsPanelComponent as a0, CommentsService as a1, ComparePanelComponent as a2, ConnectorRendererComponent as a3, ConnectorTextOverlayComponent as a4, CustomShowsComponent as a5, DEFAULT_BOUNDS as a6, DEFAULT_BROADCAST_SERVER_URL as a7, DEFAULT_CANVAS_HEIGHT as a8, DEFAULT_CANVAS_WIDTH as a9, EmbeddedFontsService as aA, EncryptedFileDialogComponent as aB, EquationEditorDialogComponent as aC, EquationRendererComponent as aD, EquationTemplateGalleryComponent as aE, ExportProgressModalComponent as aF, ExportService as aG, FieldContextService as aH, FindBarComponent as aI, FindReplaceBarComponent as aJ, FollowModeBarComponent as aK, FontEmbeddingListComponent as aL, FontEmbeddingPanelComponent as aM, GALLERY_THEME_PRESETS as aN, GRIDLINE_COLOR as aO, GradientPickerComponent as aP, HANDOUT_OPTIONS as aQ, HeaderFooterDialogComponent as aR, HyperlinkDialogComponent as aS, ImagePropertiesPanelComponent as aT, InkDrawingService as aU, InkRendererComponent as aV, InsertSmartArtDialogComponent as aW, InspectorPaneHeaderComponent as aX, InspectorPanelComponent as aY, IsMobileService as aZ, KeepAnnotationsDialogComponent as a_, DEFAULT_COLOR_SCHEME as aa, DEFAULT_FILL_COLOR$1 as ab, DEFAULT_LAYOUT as ac, DEFAULT_PALETTE$1 as ad, DEFAULT_PATTERN_FILL_PRESET as ae, DEFAULT_PRINT_SETTINGS as af, DEFAULT_SLIDE_BACKGROUND as ag, DEFAULT_STROKE_COLOR as ah, DEFAULT_STYLE as ai, DEFAULT_TABLE_ROW_HEIGHT as aj, DEFAULT_TEXT_COLOR$2 as ak, DEFAULT_VIEWER_PROFILE as al, DIRECTIONAL_PRESETS as am, DIRECTION_OPTIONS as an, DocumentPropertiesCardComponent as ao, EMBEDDED_FONTS_STYLE_ID as ap, EMPHASIS_PRESETS as aq, ENTRANCE_PRESETS as ar, TEMPLATES as as, EXIT_PRESETS as at, EditorContextMenuComponent as au, EditorHistory as av, EditorStateService as aw, EditorToolbarComponent as ax, EffectsPanelComponent as ay, ElementRendererComponent as az, AUDIENCE_HASH as b, RibbonDrawingGroupComponent as b$, LONG_PRESS_DURATION_MS as b0, LONG_PRESS_MOVE_TOLERANCE_PX as b1, LoadContentService as b2, LocalPresencePublisher as b3, MAX_ZOOM_SCALE as b4, MIN_ZOOM_SCALE as b5, MOTION_PATH_COLUMNS as b6, MediaPreviewComponent as b7, MediaPropertiesPanelComponent as b8, MediaRendererComponent as b9, PresentationAnnotationOverlayComponent as bA, PresentationAnnotationsService as bB, PresentationOverlayComponent as bC, PresentationPropertiesPanelComponent as bD, PresentationSettingsCardComponent as bE, PresentationSubtitleBarComponent as bF, PresentationToolbarComponent as bG, PresentationTransitionOverlayComponent as bH, PresenterViewComponent as bI, PresenterWindowService as bJ, PrintDialogComponent as bK, PrintService as bL, PrintSettingsPanelComponent as bM, PropertiesDialogComponent as bN, REPEAT_MODE_OPTIONS as bO, RESIZE_HANDLES as bP, RULER_FONT_SIZE as bQ, RULER_THICKNESS as bR, ReadingViewOverlayComponent as bS, RemoteSelectionOverlayComponent as bT, RibbonAnimationGalleryComponent as bU, RibbonAnimationsSectionComponent as bV, RibbonArrangeSectionComponent as bW, RibbonColorPopoverComponent as bX, RibbonComponent as bY, RibbonDesignSectionComponent as bZ, RibbonDrawSectionComponent as b_, MediaTrimTimelineComponent as ba, MobileBottomBarComponent as bb, MobileMenuSheetComponent as bc, MobilePresenterViewComponent as bd, MobileSheetComponent as be, MobileSlidesSheetComponent as bf, MobileToolbarComponent as bg, ModalDialogComponent as bh, Model3DRendererComponent as bi, NotesHandoutCardComponent as bj, NotesPanelComponent as bk, NotesToolbarComponent as bl, OleRendererComponent as bm, OutlineViewOverlayComponent as bn, POWER_POINT_VIEWER_PROVIDERS as bo, PPTX_OPEN_ACCEPT as bp, PRESENTATION_OPEN_EXTENSIONS as bq, PRESENTER_CHANNEL_NAME as br, PRESENTER_MSG_ORIGIN as bs, PRESENTER_TIMER_SEGMENT_MS as bt, PX_PER_CM as bu, PX_PER_INCH as bv, PasswordProtectionDialogComponent as bw, PasswordStrengthMeterComponent as bx, PowerPointViewerComponent as by, PresentToolbarAutoHide as bz, AUDIENCE_NONCE_KEY as c, TIMING_CURVE_OPTIONS as c$, RibbonEditingSectionComponent as c0, RibbonFileSectionComponent as c1, RibbonFontControlsComponent as c2, RibbonHomeSectionComponent as c3, RibbonHyperlinkButtonComponent as c4, RibbonInsertFieldsComponent as c5, RibbonInsertSectionComponent as c6, RibbonMotionPathGalleryComponent as c7, RibbonParagraphControlsComponent as c8, RibbonPrimaryRowComponent as c9, ShowOptionsFieldsetComponent as cA, ShowSlidesFieldsetComponent as cB, SignatureStrippedDialogComponent as cC, SignaturesPanelComponent as cD, SignaturesService as cE, SlideBackgroundCardComponent as cF, SlideCanvasComponent as cG, SlideDefaultInspectorComponent as cH, SlideDiffChangesComponent as cI, SlideDiffRowComponent as cJ, SlideDiffThumbnailsComponent as cK, SlideSizeCardComponent as cL, SlideSorterOverlayComponent as cM, SlideThemeOverridePanelComponent as cN, SlideTransitionCardComponent as cO, SlidesPanelComponent as cP, SmartArt3DRendererComponent as cQ, SmartArt3DService as cR, SmartArtPreviewComponent as cS, SmartArtPropertiesComponent as cT, SmartArtRendererComponent as cU, StatusBarComponent as cV, TABLE_STRUCTURE_TOGGLES as cW, TEXT_3D_BOTTOM_BEVEL_KEYS as cX, TEXT_3D_TOP_BEVEL_KEYS as cY, TEXT_DIRECTION_OPTIONS$1 as cZ, THEME_CATALOG as c_, RibbonReviewSectionComponent as ca, RibbonShapeExtrasComponent as cb, RibbonSlideshowSectionComponent as cc, RibbonTransitionsSectionComponent as cd, RibbonViewSectionComponent as ce, RulerGuidesService as cf, SEQUENCE_OPTIONS as cg, SEVERITY_GROUPS as ch, SEVERITY_LABELS as ci, SHORTCUT_REFERENCE_ITEMS as cj, SLIDE_TRANSITION_KEYFRAMES as ck, DEFAULT_PALETTE as cl, PALETTES$1 as cm, SMART_ART_COLOR_SCHEMES as cn, SMART_ART_STYLE_OPTIONS as co, SUB_ITEM_LABEL as cp, SVG_WARP_PRESETS as cq, SWIPE_MAX_VERTICAL_PX as cr, SWIPE_THRESHOLD_PX as cs, SelectionPaneComponent as ct, SetUpSlideShowDialogComponent as cu, SettingsAppearanceTabComponent as cv, SettingsDialogComponent as cw, SettingsLanguageTabComponent as cx, ShareDialogComponent as cy, ShortcutPanelComponent as cz, AVATAR_COLOR_SWATCHES as d, applyAnimationPreset as d$, TRIGGER_OPTIONS as d0, TYPE_LABELS as d1, TableCellAdvancedFillComponent as d2, TableCellFormattingComponent as d3, TableDataEditorComponent as d4, TablePropertiesComponent as d5, TableRendererComponent as d6, TableResizeOverlayComponent as d7, TableSelectionService as d8, TagsCardComponent as d9, ViewerInspectorPanelService as dA, ViewerKeyboardService as dB, ViewerMobileSheetService as dC, ViewerPresentationModeService as dD, ViewerThemeGalleryService as dE, ViewerTouchGesturesService as dF, ViewerZoomService as dG, WEBM_MIME_CANDIDATES as dH, WriteBackScheduler as dI, ZERO_LINE_COLOR as dJ, ZoomNavigationService as dK, ZoomRendererComponent as dL, ZoomTargetService as dM, addCategory as dN, addCommentToList as dO, addGradientStopPatch as dP, addItem as dQ, addSeries as dR, addSubItem as dS, advanceStep as dT, affordanceElements as dU, aiToggleVisible as dV, alignPatch as dW, animationFor as dX, animationPresetLabelKey as dY, annotationMapToInkInserts as dZ, applyAcceptedDiff as d_, Text3DBevelSectionComponent as da, Text3DPanelComponent as db, TextAdvancedPanelComponent as dc, ThemeEditorFieldsComponent as dd, ThemeGalleryComponent as de, ThemeSelectorCardComponent as df, TitleBarComponent as dg, TitleBarSearchComponent as dh, TransitionDirectionPickerComponent as di, TransitionPreviewComponent as dj, VALIGN_OPTIONS as dk, VIEWER_THEME as dl, VersionHistoryPanelComponent as dm, ViewerCanvasEditingService as dn, ViewerCollabCursorService as dp, ViewerCollaborationSessionService as dq, ViewerCompareService as dr, ViewerCustomShowsService as ds, ViewerDialogsService as dt, ViewerDocumentPropertiesService as du, ViewerExportService as dv, ViewerExtraDialogsComponent as dw, ViewerFileIOService as dx, ViewerFindReplaceService as dy, ViewerFormatPainterService as dz, AXIS_LABEL_COLOR as e, buildZoomViewModel as e$, applyFindReplacements as e0, applyFormatToElement as e1, applyMove as e2, applyResize as e3, asMediaElement as e4, assignUserColor as e5, attachShowVisibilityPause as e6, attachTouchGestures as e7, axisTickValues as e8, beginNodeEdit as e9, buildGradientFillCss as eA, buildGridlinesAndLabels as eB, buildHyperlinkPatch as eC, buildInkContainerStyle as eD, buildInkStrokes as eE, buildLegend as eF, buildMarkTooltip as eG, buildModel3DContainerStyle as eH, buildModel3DViewModel as eI, buildOleActionModel as eJ, buildOleInfoRows as eK, buildPatternFillCss as eL, buildPrintHtmlDocument as eM, buildPropertiesPatch as eN, buildRegionMapViewModel as eO, buildSaveSlides as eP, buildShareUrl as eQ, buildSmartArtInsertElement as eR, buildSmartArtNodes as eS, buildStockViewModel as eT, buildSurfaceViewModel as eU, buildTableViewModel as eV, buildTreemapViewModel as eW, buildTrimFragment as eX, buildWaterfallViewModel as eY, buildZeroLine as eZ, buildZoomContainerStyle as e_, bevelSizePatch as ea, boolFromEvent as eb, bringForward as ec, bringToFront as ed, buildBarActions as ee, buildBroadcastConfig as ef, buildBroadcastViewerUrl as eg, buildCategoryLabels as eh, buildCellParagraphs as ei, buildChartViewModel as ej, buildChatLogExport as ek, buildChatLogMarkdown as el, buildChromeStyle as em, buildClearHyperlinkPatch as en, buildClickGroups as eo, buildColStyles as ep, buildCollaborationConfig as eq, buildComboViewModel as er, buildCssGradientFromShapeStyle as es, buildDuotoneFilter as et, buildDuotoneFilterId as eu, buildEmbeddedFontStyles as ev, buildEquationElement as ew, buildEquationSegment as ex, buildFallbackViewModel as ey, buildFontFaceRule as ez, AccessibilityPanelComponent as f, computeSlideIndices as f$, bulletIndentPx as f0, canAddTopLevelNode as f1, canGroupSelection as f2, canRemoveTopLevelNode as f3, canSetStrokeWidth as f4, canStartBroadcast as f5, canStartShare as f6, canUngroupSelection as f7, canUseClipboard as f8, captionDisplayText as f9, computeBarRects as fA, computeBubbleRadius as fB, computeCornerHandle as fC, computeDistribute as fD, computeDrawingViewBox as fE, computeErrorBarPrimitives as fF, computeFocusTargets as fG, computeGridSpacingPx as fH, computeHandleBoxes as fI, computeHandoutLayout as fJ, computeIsMobile as fK, computeIsTablet as fL, computeLinePoints as fM, computeLinearRegression as fN, computePageCount as fO, computePieLayout as fP, computePieSlicePath as fQ, computePieSlices as fR, computePlotLayout as fS, computeRSquared as fT, computeRadarPoints as fU, computeResizeHandleBoxes as fV, computeRotateHandleBox as fW, computeScatterDots as fX, computeScatterXDomain as fY, computeSelectionBoxes as fZ, computeSingleSelected as f_, cellRunStyle as fa, cellStyleToStyleMap as fb, cellTdStyle as fc, changeCountLabel as fd, changeIcon as fe, characterSpacingPatch as ff, chartPreserveAspectRatio as fg, checkFontAvailable as fh, clampCursorPosition as fi, clampGifDimensions as fj, clampIndex as fk, clampNotesFontSize as fl, clampScale as fm, clampStep as fn, clearAllLocalViewerData as fo, clearAudienceContent as fp, cn as fq, collectAccessibilityIssues as fr, collectElementText as fs, collectSlideText as ft, collectStoredChats as fu, collectUsedFontFamilies as fv, columnWidthStyle as fw, commitNodeText as fx, computeAlign as fy, computeAxisTitlePrimitives as fz, AccessibilityService as g, formatPropertyDate as g$, computeSnap as g0, computeStackedBarRects as g1, computeStackedValueRange as g2, computeTrendlinePrimitives as g3, computeValueRange as g4, convertOmmlToMathMl as g5, copyFormatFromElement as g6, countAccessibilityIssues as g7, countAnnotationStrokes as g8, createAngularAiBridge as g9, enableInnerShadowPatch as gA, enableOuterShadowPatch as gB, enableReflectionPatch as gC, enableSoftEdgePatch as gD, encodeGif as gE, endShowMediaCleanup as gF, estimatePageCount as gG, exitPresentationFullscreen as gH, exportAiChatLogs as gI, extractPathPoints as gJ, eyedropperAvailable as gK, fillColorOf$1 as gL, findInSlides as gM, findOwningSlideIndex as gN, findSlideIndexByElementId as gO, firstVisibleIndex as gP, fitPolynomial as gQ, fitZoom as gR, focusTargetChips as gS, fontMimeForFormat as gT, fontSizeOf as gU, forgetSessionDeck as gV, formatAxisValue as gW, formatBytes as gX, formatCursorLabel as gY, formatElapsed as gZ, formatFileSize as g_, createCustomShow as ga, createSwipeDismissDrag as gb, createWebrtcBundle as gc, createWebsocketBundle as gd, cssObjectToStyleMap as ge, currentColorScheme as gf, currentLayout as gg, currentStyle as gh, defaultCssVars as gi, defaultRadius as gj, defaultThemeColors as gk, deleteElementsByIds as gl, deleteVersion as gm, demoteNode as gn, deriveModel3DBlobUrl as go, derivePresenceList as gp, describeSmartArtBounds as gq, disableGlowPatch as gr, disableInnerShadowPatch as gs, disableOuterShadowPatch as gt, disableReflectionPatch as gu, disableSoftEdgePatch as gv, duplicateElementById as gw, durationOf as gx, effectsStateOf as gy, enableGlowPatch as gz, AccountPageComponent as h, isSigned as h$, formatTime as h0, fpsToFrameIntervalMs as h1, generateBroadcastRoomId as h2, generateCommentId as h3, generateCustomShowId as h4, generatePressureCircles as h5, generateTicks as h6, getClrChangeParams as h7, getContainerStyle as h8, getDuotoneFilterDef as h9, gradientStateOf as hA, gradientStatePatch as hB, gridColumns as hC, groupIssuesBySeverity as hD, hasAnimation as hE, hasCopyableFormat as hF, hasExistingLink as hG, hasExitedFullscreen as hH, hasGradientFill as hI, hasPressureVariation as hJ, hasVisibleSlideAfter as hK, headerLabel as hL, imageDimensions as hM, inkViewBox as hN, insertTableElementColumn as hO, insertTableElementRow as hP, interpolateWidth as hQ, isAudienceTab as hR, isBold as hS, isBrowserOpenableMime as hT, isChildNode as hU, isElementInteractive as hV, isInjectableUrl as hW, isItalic as hX, isLegacyBinaryPresentation as hY, isPpactionUrl as hZ, isPresenterMessage as h_, getImageSrc as ha, getLocalStorageUsageSummary as hb, getOleAriaLabel as hc, getOleBadgeLabel as hd, getOleDisplayName as he, getOleDownloadFileName as hf, getOleTypeColor as hg, getOleTypeLabel as hh, getPasswordStrength as hi, getPatternSvg as hj, getPlaceholderStyle as hk, getVersions as hl, getResolvedShapeClipPath as hm, getResolvedShapeClipPathFor as hn, getSessionTabId as ho, getShapeFillStrokeStyle as hp, getSlideBackgroundStyle as hq, getSlideTransitionAnimations as hr, getSmartArtNodeBounds as hs, getSpeechRecognitionCtor as ht, getTextBlockStyle as hu, getTextWarp as hv, getTouchDistance as hw, getWarpCategory as hx, getWarpPath as hy, gradientStateFromStyle as hz, ActionSettingsPanelComponent as i, patchTableData as i$, isSupportedPresentationFile as i0, isTextElement as i1, isTwoTableFocus as i2, isUnderline as i3, isUrlSafe as i4, isValidRoomId as i5, isViewportBackgroundPressTarget as i6, isZoomActivationKey as i7, issueTrackKey as i8, issueTypeLabel as i9, newPresetShapeElement as iA, newShapeElement as iB, newSmartArtElement as iC, newTableElement as iD, newTextElement as iE, nextVisibleIndex as iF, nodeBold as iG, nodeEditBox as iH, nodeFillColor as iI, nodeFontColor as iJ, nodeIdFromKey as iK, nodeItalic as iL, nodeStyle as iM, normalizeFontFormat as iN, normalizeSlidesPerPage as iO, normalizeValue as iP, numFromEvent as iQ, ommlToMathml as iR, ooxmlDashToCssBorderStyle as iS, openNativeEyeDropper as iT, overallStatus as iU, paletteColor as iV, parseAudienceNonce as iW, parseNodeTextarea as iX, partitionSlides as iY, patchChartData as iZ, patchChartStyle as i_, keyToLabel as ia, lastVisibleIndex as ib, latexToMathml as ic, layoutConnectorPaints as id, layoutNodeLabels as ie, linePointsToSvgString as ig, lineSpacingPatch as ih, loadAudienceContent as ii, loadSessionDeck as ij, mediaFallbackFor as ik, mediaSurfaceFor as il, mergeCaptionResults as im, mergeDown as io, mergeRight as ip, mergeSelection as iq, moveElementBy as ir, moveNodeDown as is, moveNodeUp as it, msToFrameDelayCs as iu, narrowToCircle as iv, narrowToPolygon as iw, narrowToRect as ix, newChartElement as iy, newEquationElement as iz, AdvancedChartEditorComponent as j, rulerStripTicks as j$, patchTextStyle as j0, patternPresetOptions as j1, pendingElementStyles as j2, pickColorByClickFallback as j3, pickFile as j4, pickSupportedMimeType as j5, planGifFrames as j6, planVideoSegments as j7, pointsToSvgPathD as j8, presenceToCursors as j9, reorderAnimationDown as jA, reorderAnimationUp as jB, replaceInSlides as jC, replaceMatch as jD, requestPresentationFullscreen as jE, resizeElement as jF, resolveCaptionTracks as jG, resolveChartKind as jH, resolveFontVariant as jI, resolveHyperlinkHref as jJ, resolveInteractiveElementId as jK, resolveMediaSrc as jL, resolveOleType as jM, resolveParagraphBullet as jN, resolvePresenterNotes as jO, resolveProfileInitial as jP, resolveRegionCode as jQ, resolveSlideAutoAdvanceMs as jR, resolvePalette as jS, resolveThemeCatalogEntry as jT, resolveTransitionDuration as jU, restoreSessionDeck as jV, revealedElementStyles as jW, routeOrthogonalConnector as jX, rowStyle as jY, rulerDragToGuidePosition as jZ, rulerHighlight as j_, presentationBaseName as ja, presentationStageStyle as jb, presenterTimerProgress as jc, presetByLayout as jd, presetsForCategory as je, pressuresToWidths as jf, prevVisibleIndex as jg, projectDrawingShapes as jh, promoteNode as ji, provideViewerTheme as jj, radarAngle as jk, radarRingPoints as jl, readAsDataUrl as jm, recordWebm as jn, registerCrossSlideAudio as jo, rememberSessionDeck as jp, removeAnimation as jq, removeCategory as jr, removeTableElementColumn as js, removeCommentFromList as jt, removeElementAnimation as ju, removeGradientStopPatch as jv, removeNode as jw, removeTableElementRow as jx, removeSeries as jy, renderToCanvas as jz, AiChangeOverlayComponent as k, signatureCountLabel as k$, sampleColorFromSlide as k0, sanitizeColor as k1, sanitizeSlideIndex as k2, sanitizeUserName as k3, saveViewerProfile as k4, savedPresentationFileName as k5, scanAvailableFonts as k6, searchSlides as k7, seedBroadcastFields as k8, seedHyperlinkDraft as k9, setElementPosition as kA, setGridlineStyle as kB, setLayout as kC, setLegend as kD, setNodeStyle as kE, setNodeText as kF, setRepeatCount as kG, setRepeatMode as kH, setSequence as kI, setSeriesChartType as kJ, setSeriesColor as kK, setSeriesErrorBars as kL, setSeriesMarker as kM, setSeriesName as kN, setSeriesTrendline as kO, setSeriesValue as kP, setStyle as kQ, setTimingCurve as kR, setTitle as kS, setTrigger as kT, setTriggerShapeId as kU, shapeStylePatch$1 as kV, sheetAfterNavigate as kW, shouldBlockClickAdvance as kX, shouldUseSvgWarp as kY, showDirectionPicker as kZ, showsTemplateAffordance as k_, seedPropertiesDraft as ka, seedShareFields as kb, segmentFrameCount as kc, selectValue$2 as kd, sendBackward as ke, sendToBack as kf, sequentialColorScale as kg, serializeWriteBack as kh, seriesColor as ki, setAnimationEmphasis as kj, setAnimationEntrance as kk, setAnimationExit as kl, setAxis as km, setAxisLogScale as kn, setAxisTitleStyle as ko, setCategoryLabel as kp, setCellText as kq, setColorScheme as kr, setDataLabels as ks, setDataPointExplosion as kt, setDataPointFill as ku, setDataPointLabel as kv, setDataPointMarker as kw, setDelay as kx, setDirection as ky, setDuration as kz, AiChatPanelComponent as l, signatureKey as l0, signatureTimestamp as l1, signerName as l2, statusLabel as l3, slideNumberOf as l4, slidesWithReappliedLayout as l5, smartArtNodes as l6, paletteColour as l7, snapToGridStep as l8, splitCursorCell as l9, transformSelectedTextCase as lA, translationsEn as lB, updateElementById as lC, updateGlowPatch as lD, updateGradientStopPatch as lE, updateInnerShadowPatch as lF, updateOuterShadowPatch as lG, updateReflectionPatch as lH, vAlignPatch as lI, validatePassword as lJ, validatePrintSettings as lK, validateRoomId as lL, valueToY as lM, vermilionDarkColors as lN, vermilionDarkTheme as lO, vermilionLightColors as lP, vermilionLightTheme as lQ, vermilionRadius as lR, waypointsToPathD as lS, worstStatus as lT, zoomTargetSlideIndex as lU, splitMergedCell as la, statusKind as lb, statusLabel$1 as lc, storeAudienceContent as ld, stringFromEvent$5 as le, strokeColorOf as lf, strokeToInkElement as lg, strokeWidthOf as lh, styleShadowFilter as li, surfaceColor as lj, textAdvancedPatch as lk, textAdvancedStateFromStyle as ll, textAdvancedStateOf as lm, textColorOf as ln, textDirectionPatch as lo, textStyleOf as lp, textStylePatch as lq, themeStyle as lr, themeToCssVars as ls, thumbnailHeight as lt, thumbnailZoom as lu, toggleCommentResolvedInList as lv, toggleNodeBold as lw, toggleNodeItalic as lx, toggleSheet as ly, topLevelNodeCount as lz, AiChatService as m, AiComposerComponent as n, AiFocusBarComponent as o, AiFocusHighlightOverlayComponent as p, AiHistoryMenuComponent as q, AiHistoryService as r, AiMessageListComponent as s, toChatSummary as t, AiPanelStore as u, AiProposalCardComponent as v, AiSettingsSectionComponent as w, AiToolCallCardComponent as x, AnimationAuthorPanelComponent as y, AnimationPanelComponent as z };
|
|
140743
|
-
//# sourceMappingURL=pptx-angular-viewer-pptx-angular-viewer-
|
|
140757
|
+
//# sourceMappingURL=pptx-angular-viewer-pptx-angular-viewer-HXAPZylf.mjs.map
|