pptx-react-viewer 3.20.0 → 3.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/dist/{AiChatPanel-NBKG2CWE.js → AiChatPanel-B3QM7MIC.js} +25 -25
- package/dist/AiChatPanel-B3QM7MIC.js.br +0 -0
- package/dist/AiChatPanel-B3QM7MIC.js.gz +0 -0
- package/dist/{AiChatPanel-OXCJVBUS.mjs → AiChatPanel-UD756KAU.mjs} +4 -4
- package/dist/AiChatPanel-UD756KAU.mjs.br +0 -0
- package/dist/AiChatPanel-UD756KAU.mjs.gz +0 -0
- package/dist/{Area3DChartScene-7QPDPVR6.js → Area3DChartScene-435BFPLY.js} +2 -2
- package/dist/{Area3DChartScene-7QPDPVR6.js.br → Area3DChartScene-435BFPLY.js.br} +0 -0
- package/dist/Area3DChartScene-435BFPLY.js.gz +0 -0
- package/dist/{Area3DChartScene-5M3LEY6M.mjs → Area3DChartScene-MQKUWVMS.mjs} +1 -1
- package/dist/Area3DChartScene-MQKUWVMS.mjs.br +0 -0
- package/dist/Area3DChartScene-MQKUWVMS.mjs.gz +0 -0
- package/dist/{Bar3DChartScene-NNSTLO4V.mjs → Bar3DChartScene-D4GMQGPN.mjs} +1 -1
- package/dist/Bar3DChartScene-D4GMQGPN.mjs.br +0 -0
- package/dist/Bar3DChartScene-D4GMQGPN.mjs.gz +0 -0
- package/dist/{Bar3DChartScene-TAMPS6ZS.js → Bar3DChartScene-KEYLVYJA.js} +2 -2
- package/dist/Bar3DChartScene-KEYLVYJA.js.br +0 -0
- package/dist/Bar3DChartScene-KEYLVYJA.js.gz +0 -0
- package/dist/{Line3DChartScene-7S2DD45T.mjs → Line3DChartScene-B3AWFXE4.mjs} +1 -1
- package/dist/Line3DChartScene-B3AWFXE4.mjs.br +0 -0
- package/dist/Line3DChartScene-B3AWFXE4.mjs.gz +0 -0
- package/dist/{Line3DChartScene-T4SH37NU.js → Line3DChartScene-JYGXLE56.js} +2 -2
- package/dist/Line3DChartScene-JYGXLE56.js.br +0 -0
- package/dist/Line3DChartScene-JYGXLE56.js.gz +0 -0
- package/dist/{Model3DScene-CXRM7D3J.mjs → Model3DScene-4TG4YRVM.mjs} +1 -1
- package/dist/Model3DScene-4TG4YRVM.mjs.br +0 -0
- package/dist/Model3DScene-4TG4YRVM.mjs.gz +0 -0
- package/dist/{Model3DScene-IDRM7EZD.js → Model3DScene-JF5J6N6W.js} +2 -2
- package/dist/Model3DScene-JF5J6N6W.js.br +0 -0
- package/dist/Model3DScene-JF5J6N6W.js.gz +0 -0
- package/dist/{PieChart3DScene-VSCSEY2G.mjs → PieChart3DScene-4BQ6PR7P.mjs} +1 -1
- package/dist/PieChart3DScene-4BQ6PR7P.mjs.br +0 -0
- package/dist/PieChart3DScene-4BQ6PR7P.mjs.gz +0 -0
- package/dist/{PieChart3DScene-66Y5UP64.js → PieChart3DScene-CCQWSH3W.js} +2 -2
- package/dist/{PieChart3DScene-66Y5UP64.js.br → PieChart3DScene-CCQWSH3W.js.br} +0 -0
- package/dist/PieChart3DScene-CCQWSH3W.js.gz +0 -0
- package/dist/{SurfaceChart3DScene-NSHDK657.mjs → SurfaceChart3DScene-FRQC5HBG.mjs} +1 -1
- package/dist/SurfaceChart3DScene-FRQC5HBG.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-FRQC5HBG.mjs.gz +0 -0
- package/dist/{SurfaceChart3DScene-6J4A6XUH.js → SurfaceChart3DScene-UVZPT6OD.js} +2 -2
- package/dist/{SurfaceChart3DScene-6J4A6XUH.js.br → SurfaceChart3DScene-UVZPT6OD.js.br} +0 -0
- package/dist/SurfaceChart3DScene-UVZPT6OD.js.gz +0 -0
- package/dist/{chunk-W3RBIIZW.js → chunk-BFPIMU6Q.js} +1227 -1032
- package/dist/chunk-BFPIMU6Q.js.br +0 -0
- package/dist/chunk-BFPIMU6Q.js.gz +0 -0
- package/dist/{chunk-5PDGHTRJ.mjs → chunk-BXMPXKV5.mjs} +453 -258
- package/dist/chunk-BXMPXKV5.mjs.br +0 -0
- package/dist/chunk-BXMPXKV5.mjs.gz +0 -0
- package/dist/{chunk-2IBDKMY2.mjs → chunk-EJMDD4VV.mjs} +115 -69
- package/dist/chunk-EJMDD4VV.mjs.br +0 -0
- package/dist/chunk-EJMDD4VV.mjs.gz +0 -0
- package/dist/{chunk-WRXXPCZ7.js → chunk-H7QPQ4OR.js} +5 -5
- package/dist/chunk-H7QPQ4OR.js.br +0 -0
- package/dist/chunk-H7QPQ4OR.js.gz +0 -0
- package/dist/{chunk-FE4L26FT.mjs → chunk-HZEOZUUH.mjs} +7 -3
- package/dist/chunk-HZEOZUUH.mjs.br +0 -0
- package/dist/chunk-HZEOZUUH.mjs.gz +0 -0
- package/dist/{chunk-I5LPYESF.js → chunk-M24DEOP6.js} +4 -0
- package/dist/chunk-M24DEOP6.js.br +0 -0
- package/dist/chunk-M24DEOP6.js.gz +0 -0
- package/dist/{chunk-7SFA4A2E.js → chunk-M6QJKPU2.js} +1160 -1114
- package/dist/chunk-M6QJKPU2.js.br +0 -0
- package/dist/chunk-M6QJKPU2.js.gz +0 -0
- package/dist/chunk-MRWGWKA2.mjs +1076 -0
- package/dist/chunk-MRWGWKA2.mjs.br +0 -0
- package/dist/chunk-MRWGWKA2.mjs.gz +0 -0
- package/dist/{chunk-AVTH627G.mjs → chunk-R664EPDC.mjs} +4 -0
- package/dist/chunk-R664EPDC.mjs.br +0 -0
- package/dist/chunk-R664EPDC.mjs.gz +0 -0
- package/dist/{chunk-DW66NEST.js → chunk-SUZIFHXI.js} +187 -183
- package/dist/chunk-SUZIFHXI.js.br +0 -0
- package/dist/chunk-SUZIFHXI.js.gz +0 -0
- package/dist/{chunk-NGWA6L3N.js → chunk-T6V342NP.js} +448 -114
- package/dist/chunk-T6V342NP.js.br +0 -0
- package/dist/{chunk-NGWA6L3N.js.gz → chunk-T6V342NP.js.gz} +0 -0
- package/dist/{chunk-N4FLKADC.mjs → chunk-TMTQJAGK.mjs} +445 -115
- package/dist/chunk-TMTQJAGK.mjs.br +0 -0
- package/dist/{chunk-N4FLKADC.mjs.gz → chunk-TMTQJAGK.mjs.gz} +0 -0
- package/dist/{chunk-AYH6XSE7.mjs → chunk-TOOKJUPG.mjs} +1 -1
- package/dist/chunk-TOOKJUPG.mjs.br +0 -0
- package/dist/chunk-TOOKJUPG.mjs.gz +0 -0
- package/dist/chunk-YQQXFRZT.js +1160 -0
- package/dist/chunk-YQQXFRZT.js.br +0 -0
- package/dist/chunk-YQQXFRZT.js.gz +0 -0
- package/dist/i18n/de.cjs +4 -0
- package/dist/i18n/de.cjs.br +0 -0
- package/dist/i18n/de.cjs.gz +0 -0
- package/dist/i18n/de.mjs +4 -0
- package/dist/i18n/de.mjs.br +0 -0
- package/dist/i18n/de.mjs.gz +0 -0
- package/dist/i18n/es.cjs +4 -0
- package/dist/i18n/es.cjs.br +0 -0
- package/dist/i18n/es.cjs.gz +0 -0
- package/dist/i18n/es.mjs +4 -0
- package/dist/i18n/es.mjs.br +0 -0
- package/dist/i18n/es.mjs.gz +0 -0
- package/dist/i18n/fr.cjs +4 -0
- package/dist/i18n/fr.cjs.br +0 -0
- package/dist/i18n/fr.cjs.gz +0 -0
- package/dist/i18n/fr.mjs +4 -0
- package/dist/i18n/fr.mjs.br +0 -0
- package/dist/i18n/fr.mjs.gz +0 -0
- package/dist/i18n/zh-CN.cjs +4 -0
- package/dist/i18n/zh-CN.cjs.br +0 -0
- package/dist/i18n/zh-CN.cjs.gz +0 -0
- package/dist/i18n/zh-CN.mjs +4 -0
- package/dist/i18n/zh-CN.mjs.br +0 -0
- package/dist/i18n/zh-CN.mjs.gz +0 -0
- package/dist/i18n.js +4 -4
- package/dist/i18n.js.br +0 -0
- package/dist/i18n.js.gz +0 -0
- package/dist/i18n.mjs +1 -1
- package/dist/i18n.mjs.br +0 -0
- package/dist/i18n.mjs.gz +0 -0
- package/dist/index.d.ts +60 -2
- package/dist/index.js +48 -48
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/internals.d.ts +75 -43
- package/dist/internals.js +105 -105
- package/dist/internals.js.br +0 -0
- package/dist/internals.js.gz +0 -0
- package/dist/internals.mjs +4 -4
- package/dist/internals.mjs.br +0 -0
- package/dist/internals.mjs.gz +0 -0
- package/dist/viewer/index.d.ts +70 -6
- package/dist/viewer/index.js +27 -27
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +6 -6
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/dist/{y-webrtc-TAJBJIKH.js → y-webrtc-6H3ROPRC.js} +1079 -128
- package/dist/y-webrtc-6H3ROPRC.js.br +0 -0
- package/dist/y-webrtc-6H3ROPRC.js.gz +0 -0
- package/dist/{y-webrtc-7DLWG3LJ.mjs → y-webrtc-XJDH2YTR.mjs} +984 -33
- package/dist/y-webrtc-XJDH2YTR.mjs.br +0 -0
- package/dist/y-webrtc-XJDH2YTR.mjs.gz +0 -0
- package/dist/{y-websocket-YRPS7AFF.js → y-websocket-6ISNPON7.js} +79 -80
- package/dist/y-websocket-6ISNPON7.js.br +0 -0
- package/dist/y-websocket-6ISNPON7.js.gz +0 -0
- package/dist/{y-websocket-HUEA7LH7.mjs → y-websocket-SJ3NCLBZ.mjs} +3 -4
- package/dist/y-websocket-SJ3NCLBZ.mjs.br +0 -0
- package/dist/y-websocket-SJ3NCLBZ.mjs.gz +0 -0
- package/package.json +7 -4
- package/dist/AiChatPanel-NBKG2CWE.js.br +0 -0
- package/dist/AiChatPanel-NBKG2CWE.js.gz +0 -0
- package/dist/AiChatPanel-OXCJVBUS.mjs.br +0 -0
- package/dist/AiChatPanel-OXCJVBUS.mjs.gz +0 -0
- package/dist/Area3DChartScene-5M3LEY6M.mjs.br +0 -0
- package/dist/Area3DChartScene-5M3LEY6M.mjs.gz +0 -0
- package/dist/Area3DChartScene-7QPDPVR6.js.gz +0 -0
- package/dist/Bar3DChartScene-NNSTLO4V.mjs.br +0 -0
- package/dist/Bar3DChartScene-NNSTLO4V.mjs.gz +0 -0
- package/dist/Bar3DChartScene-TAMPS6ZS.js.br +0 -0
- package/dist/Bar3DChartScene-TAMPS6ZS.js.gz +0 -0
- package/dist/Line3DChartScene-7S2DD45T.mjs.br +0 -0
- package/dist/Line3DChartScene-7S2DD45T.mjs.gz +0 -0
- package/dist/Line3DChartScene-T4SH37NU.js.br +0 -0
- package/dist/Line3DChartScene-T4SH37NU.js.gz +0 -0
- package/dist/Model3DScene-CXRM7D3J.mjs.br +0 -0
- package/dist/Model3DScene-CXRM7D3J.mjs.gz +0 -0
- package/dist/Model3DScene-IDRM7EZD.js.br +0 -0
- package/dist/Model3DScene-IDRM7EZD.js.gz +0 -0
- package/dist/PieChart3DScene-66Y5UP64.js.gz +0 -0
- package/dist/PieChart3DScene-VSCSEY2G.mjs.br +0 -0
- package/dist/PieChart3DScene-VSCSEY2G.mjs.gz +0 -0
- package/dist/SurfaceChart3DScene-6J4A6XUH.js.gz +0 -0
- package/dist/SurfaceChart3DScene-NSHDK657.mjs.br +0 -0
- package/dist/SurfaceChart3DScene-NSHDK657.mjs.gz +0 -0
- package/dist/chunk-2IBDKMY2.mjs.br +0 -0
- package/dist/chunk-2IBDKMY2.mjs.gz +0 -0
- package/dist/chunk-5PDGHTRJ.mjs.br +0 -0
- package/dist/chunk-5PDGHTRJ.mjs.gz +0 -0
- package/dist/chunk-7SFA4A2E.js.br +0 -0
- package/dist/chunk-7SFA4A2E.js.gz +0 -0
- package/dist/chunk-AVTH627G.mjs.br +0 -0
- package/dist/chunk-AVTH627G.mjs.gz +0 -0
- package/dist/chunk-AYH6XSE7.mjs.br +0 -0
- package/dist/chunk-AYH6XSE7.mjs.gz +0 -0
- package/dist/chunk-DW66NEST.js.br +0 -0
- package/dist/chunk-DW66NEST.js.gz +0 -0
- package/dist/chunk-DWIIYEOG.mjs +0 -9596
- package/dist/chunk-DWIIYEOG.mjs.br +0 -0
- package/dist/chunk-DWIIYEOG.mjs.gz +0 -0
- package/dist/chunk-FE4L26FT.mjs.br +0 -0
- package/dist/chunk-FE4L26FT.mjs.gz +0 -0
- package/dist/chunk-FXGO5KLU.mjs +0 -304
- package/dist/chunk-FXGO5KLU.mjs.br +0 -0
- package/dist/chunk-FXGO5KLU.mjs.gz +0 -0
- package/dist/chunk-I5LPYESF.js.br +0 -0
- package/dist/chunk-I5LPYESF.js.gz +0 -0
- package/dist/chunk-N4FLKADC.mjs.br +0 -0
- package/dist/chunk-NB7M4XBG.js +0 -318
- package/dist/chunk-NB7M4XBG.js.br +0 -0
- package/dist/chunk-NB7M4XBG.js.gz +0 -0
- package/dist/chunk-NGWA6L3N.js.br +0 -0
- package/dist/chunk-W3RBIIZW.js.br +0 -0
- package/dist/chunk-W3RBIIZW.js.gz +0 -0
- package/dist/chunk-WRXXPCZ7.js.br +0 -0
- package/dist/chunk-WRXXPCZ7.js.gz +0 -0
- package/dist/chunk-ZYQT7I5C.js +0 -9743
- package/dist/chunk-ZYQT7I5C.js.br +0 -0
- package/dist/chunk-ZYQT7I5C.js.gz +0 -0
- package/dist/y-webrtc-7DLWG3LJ.mjs.br +0 -0
- package/dist/y-webrtc-7DLWG3LJ.mjs.gz +0 -0
- package/dist/y-webrtc-TAJBJIKH.js.br +0 -0
- package/dist/y-webrtc-TAJBJIKH.js.gz +0 -0
- package/dist/y-websocket-HUEA7LH7.mjs.br +0 -0
- package/dist/y-websocket-HUEA7LH7.mjs.gz +0 -0
- package/dist/y-websocket-YRPS7AFF.js.br +0 -0
- package/dist/y-websocket-YRPS7AFF.js.gz +0 -0
- package/dist/yjs-4ED7E5CZ.mjs +0 -2
- package/dist/yjs-4ED7E5CZ.mjs.br +0 -0
- package/dist/yjs-4ED7E5CZ.mjs.gz +0 -0
- package/dist/yjs-OWUA3UHD.js +0 -419
- package/dist/yjs-OWUA3UHD.js.br +0 -0
- package/dist/yjs-OWUA3UHD.js.gz +0 -0
|
@@ -138592,6 +138592,7 @@ var GroupElementProcessor = class {
|
|
|
138592
138592
|
return children13.join("\n\n");
|
|
138593
138593
|
}
|
|
138594
138594
|
};
|
|
138595
|
+
init_blob_url_to_data_url();
|
|
138595
138596
|
init_type_guards();
|
|
138596
138597
|
var ImageElementProcessor = class {
|
|
138597
138598
|
supportedTypes = ["image", "picture"];
|
|
@@ -138632,14 +138633,37 @@ var ImageElementProcessor = class {
|
|
|
138632
138633
|
return { w: maxW, h: Math.round(origH * scale2) };
|
|
138633
138634
|
}
|
|
138634
138635
|
async extractImage(imageElement, ctx) {
|
|
138635
|
-
|
|
138636
|
-
|
|
138636
|
+
const imageData = await this.resolveToDataUrl(imageElement.imageData, "image/png");
|
|
138637
|
+
if (imageData) {
|
|
138638
|
+
return await ctx.mediaContext.saveImage(imageData, `slide${ctx.slideNumber}`);
|
|
138637
138639
|
}
|
|
138638
|
-
|
|
138639
|
-
|
|
138640
|
+
const svgData = await this.resolveToDataUrl(imageElement.svgData, "image/svg+xml");
|
|
138641
|
+
if (svgData) {
|
|
138642
|
+
return await ctx.mediaContext.saveImage(svgData, `slide${ctx.slideNumber}`);
|
|
138640
138643
|
}
|
|
138641
138644
|
return null;
|
|
138642
138645
|
}
|
|
138646
|
+
/**
|
|
138647
|
+
* Accepts an already-decoded `data:` URI as-is. A `blob:` URL (e.g. a
|
|
138648
|
+
* Node `blob:nodedata:...` Object URL minted by `eagerDecodeImages` in a
|
|
138649
|
+
* non-browser runtime) is re-fetched and re-encoded, since only its own
|
|
138650
|
+
* process can resolve it and it would otherwise never satisfy the
|
|
138651
|
+
* `data:` check below. Anything else (undefined, an unresolved relative
|
|
138652
|
+
* path) is not extractable.
|
|
138653
|
+
*/
|
|
138654
|
+
async resolveToDataUrl(value, fallbackMimeType) {
|
|
138655
|
+
if (!value) {
|
|
138656
|
+
return void 0;
|
|
138657
|
+
}
|
|
138658
|
+
if (value.startsWith("data:")) {
|
|
138659
|
+
return value;
|
|
138660
|
+
}
|
|
138661
|
+
if (value.startsWith("blob:")) {
|
|
138662
|
+
const resolved = await blobUrlToDataUrl(value, fallbackMimeType);
|
|
138663
|
+
return resolved.startsWith("data:") ? resolved : void 0;
|
|
138664
|
+
}
|
|
138665
|
+
return void 0;
|
|
138666
|
+
}
|
|
138643
138667
|
/** Clean and truncate image alt text for readable markdown output. */
|
|
138644
138668
|
sanitiseAltText(raw) {
|
|
138645
138669
|
if (!raw) {
|
|
@@ -155049,17 +155073,17 @@ function buildCartesianViewModel(element, chartData, categoryLabels, kind) {
|
|
|
155049
155073
|
(axis) => axis.axisType === "valAx" && axis.axPos !== "r"
|
|
155050
155074
|
);
|
|
155051
155075
|
const primaryRange = isStacked ? {
|
|
155052
|
-
...stackedRange(chartData, catCount, isPercent, layout.
|
|
155076
|
+
...stackedRange(chartData, catCount, isPercent, layout.autoPlotHeight),
|
|
155053
155077
|
...primaryAxis?.orientation === "maxMin" ? { reverseOrder: true } : {}
|
|
155054
155078
|
} : computeValueRangeForChart(
|
|
155055
155079
|
primaryPlotSeries.length > 0 ? primaryPlotSeries : chartData.series,
|
|
155056
155080
|
chartData.axes,
|
|
155057
|
-
layout.
|
|
155081
|
+
layout.autoPlotHeight
|
|
155058
155082
|
);
|
|
155059
155083
|
const secondaryRange = useSecondary && secondaryPlotSeries.length > 0 ? computeValueRangeForAxis(
|
|
155060
155084
|
secondaryPlotSeries,
|
|
155061
155085
|
chartData.axes?.find((axis) => axis.axisType === "valAx" && axis.axPos === "r"),
|
|
155062
|
-
layout.
|
|
155086
|
+
layout.autoPlotHeight
|
|
155063
155087
|
) : void 0;
|
|
155064
155088
|
const axisRes = buildCartesianAxes(chartData, layout, primaryRange, secondaryRange, catCount);
|
|
155065
155089
|
const zeroLine = primaryRange.logScale ? void 0 : buildZeroLine(primaryRange, layout);
|
|
@@ -155325,11 +155349,11 @@ function buildComboViewModel(element, chartData, categoryLabels) {
|
|
|
155325
155349
|
const primaryAxisId = getPrimaryValueAxisId(chartData.axes);
|
|
155326
155350
|
const primaryAxis = chartData.axes?.find((axis) => axis.axisId === primaryAxisId);
|
|
155327
155351
|
const secondaryAxisFormatting = getSecondaryValueAxis(chartData.axes);
|
|
155328
|
-
const primaryRange = computeValueRangeForAxis(primarySeries, primaryAxis, layout.
|
|
155352
|
+
const primaryRange = computeValueRangeForAxis(primarySeries, primaryAxis, layout.autoPlotHeight);
|
|
155329
155353
|
const secondaryRange = secondary.length > 0 ? computeValueRangeForAxis(
|
|
155330
155354
|
secondary.map((entry2) => entry2.series),
|
|
155331
155355
|
secondaryAxisFormatting,
|
|
155332
|
-
layout.
|
|
155356
|
+
layout.autoPlotHeight
|
|
155333
155357
|
) : void 0;
|
|
155334
155358
|
const primaryCategoryAxis2 = chartData.axes?.find(
|
|
155335
155359
|
(axis) => (axis.axisType === "catAx" || axis.axisType === "dateAx") && axis.axisId === primaryAxis?.crossAxisId
|
|
@@ -156657,7 +156681,7 @@ function buildSurfaceWallPanels(cols, rows, cellSize, zScale, offsetX, offsetY,
|
|
|
156657
156681
|
}
|
|
156658
156682
|
function buildIsometricSurfaceViewModel(element, chartData, categoryLabels) {
|
|
156659
156683
|
const layout = computePlotLayout(element.width, element.height, chartData, false);
|
|
156660
|
-
const range = computeValueRange2(chartData.series, layout.
|
|
156684
|
+
const range = computeValueRange2(chartData.series, layout.autoPlotHeight);
|
|
156661
156685
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
156662
156686
|
const seriesCount = chartData.series.length;
|
|
156663
156687
|
const cols = Math.max(catCount - 1, 1);
|
|
@@ -156776,7 +156800,7 @@ function buildIsometricSurfaceViewModel(element, chartData, categoryLabels) {
|
|
|
156776
156800
|
}
|
|
156777
156801
|
function buildFlatSurfaceViewModel(element, chartData, categoryLabels) {
|
|
156778
156802
|
const layout = computePlotLayout(element.width, element.height, chartData, false);
|
|
156779
|
-
const range = computeValueRange2(chartData.series, layout.
|
|
156803
|
+
const range = computeValueRange2(chartData.series, layout.autoPlotHeight);
|
|
156780
156804
|
const catCount = Math.max(categoryLabels.length, 1);
|
|
156781
156805
|
const seriesCount = chartData.series.length;
|
|
156782
156806
|
const cellW = layout.plotWidth / Math.max(catCount - 1, 1);
|
|
@@ -157664,6 +157688,7 @@ function computePlotLayout(elementWidth, elementHeight, chartData, hasAxes, opti
|
|
|
157664
157688
|
const rowCount = options.dataTableRowCount ?? 1;
|
|
157665
157689
|
plotBottom -= 14 + rowCount * 14;
|
|
157666
157690
|
}
|
|
157691
|
+
const autoPlotHeight = Math.max(plotBottom - plotTop, 1);
|
|
157667
157692
|
const plotLayout = manualLayoutOf(chartData, "plotArea"), manual = resolveManualLayoutRect(
|
|
157668
157693
|
plotLayout,
|
|
157669
157694
|
{ width: svgWidth, height: svgHeight },
|
|
@@ -157688,7 +157713,8 @@ function computePlotLayout(elementWidth, elementHeight, chartData, hasAxes, opti
|
|
|
157688
157713
|
plotRight: plotLeft + plotWidth,
|
|
157689
157714
|
plotBottom: plotTop + plotHeight,
|
|
157690
157715
|
plotWidth,
|
|
157691
|
-
plotHeight
|
|
157716
|
+
plotHeight,
|
|
157717
|
+
autoPlotHeight
|
|
157692
157718
|
};
|
|
157693
157719
|
}
|
|
157694
157720
|
var RADAR_RINGS = 4;
|
|
@@ -158554,7 +158580,7 @@ function buildWaterfallViewModel(element, chartData, categoryLabels) {
|
|
|
158554
158580
|
const series = chartData.series[0];
|
|
158555
158581
|
const values = series?.values ?? [];
|
|
158556
158582
|
const steps = buildWaterfallSteps(values, series?.waterfallOptions);
|
|
158557
|
-
const range = computeWaterfallRange(steps, layout.
|
|
158583
|
+
const range = computeWaterfallRange(steps, layout.autoPlotHeight);
|
|
158558
158584
|
const catCount = Math.max(categoryLabels.length, values.length, 1);
|
|
158559
158585
|
const barWidth = layout.plotWidth / catCount * 0.6;
|
|
158560
158586
|
const gap = layout.plotWidth / catCount * 0.2;
|
|
@@ -159823,7 +159849,7 @@ function buildStackedDragGeometry(element, chartData, seriesIndex, pointIndex) {
|
|
|
159823
159849
|
), plots = computeStackedSeriesPlots(seriesValues, catCount, percent3), baseValue = plots[seriesIndex]?.base[pointIndex] ?? 0, otherAbsSum = seriesValues.reduce(
|
|
159824
159850
|
(sum, values, si) => si === seriesIndex ? sum : sum + Math.abs(values[pointIndex] ?? 0),
|
|
159825
159851
|
0
|
|
159826
|
-
), layoutOpts = computeLayoutOptions(chartData.axes, chartData.dataTable, chartData.series.length), layout = computePlotLayout(element.width, element.height, chartData, true, layoutOpts), range = percent3 ? { min: 0, max: 100, span: 100 } : computeStackedValueRange(chartData.series, catCount, layout.
|
|
159852
|
+
), layoutOpts = computeLayoutOptions(chartData.axes, chartData.dataTable, chartData.series.length), layout = computePlotLayout(element.width, element.height, chartData, true, layoutOpts), range = percent3 ? { min: 0, max: 100, span: 100 } : computeStackedValueRange(chartData.series, catCount, layout.autoPlotHeight);
|
|
159827
159853
|
return {
|
|
159828
159854
|
range,
|
|
159829
159855
|
plotTop: layout.plotTop,
|
|
@@ -173124,6 +173150,7 @@ var translationsEn = {
|
|
|
173124
173150
|
"pptx.sections.addAfter": "Add Section After",
|
|
173125
173151
|
// Notes
|
|
173126
173152
|
"pptx.notes.title": "Notes",
|
|
173153
|
+
"pptx.notes.hasNotes": "(has notes)",
|
|
173127
173154
|
"pptx.notes.slideN": "Slide {{n}}",
|
|
173128
173155
|
"pptx.notes.noSlide": "No slide selected",
|
|
173129
173156
|
"pptx.notes.clickToAddNotes": "Click to add notes",
|
|
@@ -173479,6 +173506,8 @@ var translationsEn = {
|
|
|
173479
173506
|
"pptx.slideShow.subtitles": "Subtitles",
|
|
173480
173507
|
// Record tab (camera overlay placeholders)
|
|
173481
173508
|
"pptx.record.cameo": "Cameo",
|
|
173509
|
+
"pptx.record.manage": "Manage",
|
|
173510
|
+
"pptx.record.camera": "Camera",
|
|
173482
173511
|
"pptx.record.clear": "Clear",
|
|
173483
173512
|
"pptx.record.learnMore": "Learn More",
|
|
173484
173513
|
"pptx.record.resetToCameo": "Reset to Cameo",
|
|
@@ -175588,6 +175617,7 @@ var translationsEn = {
|
|
|
175588
175617
|
"pptx.textFormatting.paragraphBefore": "Paragraph Before",
|
|
175589
175618
|
"pptx.textFormatting.textFlow": "Text Flow",
|
|
175590
175619
|
"pptx.textProperties.advancedTextHeading": "Advanced Text",
|
|
175620
|
+
"pptx.textProperties.autoFitToShape": "Auto-fit text to shape",
|
|
175591
175621
|
"pptx.textProperties.defaultFontOption": "Default ({{font}})",
|
|
175592
175622
|
"pptx.textProperties.firstIndent": "First Indent",
|
|
175593
175623
|
"pptx.textProperties.leftMargin": "Left Margin",
|
|
@@ -185705,105 +185735,90 @@ function presenceToCursors(presence, activeSlideIndex) {
|
|
|
185705
185735
|
}
|
|
185706
185736
|
return cursors;
|
|
185707
185737
|
}
|
|
185708
|
-
function
|
|
185709
|
-
|
|
185710
|
-
|
|
185711
|
-
|
|
185712
|
-
|
|
185713
|
-
|
|
185714
|
-
|
|
185715
|
-
|
|
185716
|
-
}
|
|
185717
|
-
|
|
185718
|
-
|
|
185719
|
-
|
|
185720
|
-
|
|
185721
|
-
|
|
185722
|
-
|
|
185723
|
-
}
|
|
185724
|
-
|
|
185725
|
-
|
|
185726
|
-
|
|
185727
|
-
|
|
185728
|
-
|
|
185729
|
-
|
|
185730
|
-
|
|
185731
|
-
|
|
185732
|
-
|
|
185733
|
-
|
|
185734
|
-
|
|
185735
|
-
}
|
|
185736
|
-
|
|
185737
|
-
|
|
185738
|
-
function presenceListsEqual(a, b) {
|
|
185739
|
-
if (a === b) {
|
|
185740
|
-
return true;
|
|
185741
|
-
}
|
|
185742
|
-
if (a.length !== b.length) {
|
|
185743
|
-
return false;
|
|
185738
|
+
function observeExternalCollaborationSession(session, onSnapshot) {
|
|
185739
|
+
let active2 = true;
|
|
185740
|
+
let subscribing = true;
|
|
185741
|
+
let previous;
|
|
185742
|
+
let unsubscribe;
|
|
185743
|
+
const notify = () => {
|
|
185744
|
+
if (!active2 || subscribing) {
|
|
185745
|
+
return;
|
|
185746
|
+
}
|
|
185747
|
+
const snapshot = session.getSnapshot();
|
|
185748
|
+
if (previous?.status === snapshot.status && previous.synced === snapshot.synced) {
|
|
185749
|
+
return;
|
|
185750
|
+
}
|
|
185751
|
+
previous = { status: snapshot.status, synced: snapshot.synced };
|
|
185752
|
+
onSnapshot(previous);
|
|
185753
|
+
};
|
|
185754
|
+
const dispose = () => {
|
|
185755
|
+
if (!active2) {
|
|
185756
|
+
return;
|
|
185757
|
+
}
|
|
185758
|
+
active2 = false;
|
|
185759
|
+
unsubscribe?.();
|
|
185760
|
+
};
|
|
185761
|
+
try {
|
|
185762
|
+
unsubscribe = session.subscribe(notify);
|
|
185763
|
+
subscribing = false;
|
|
185764
|
+
notify();
|
|
185765
|
+
} catch (error) {
|
|
185766
|
+
dispose();
|
|
185767
|
+
throw error;
|
|
185744
185768
|
}
|
|
185745
|
-
return
|
|
185746
|
-
const other = b[index];
|
|
185747
|
-
return other !== void 0 && presenceEntriesEqual(entry2, other);
|
|
185748
|
-
});
|
|
185769
|
+
return dispose;
|
|
185749
185770
|
}
|
|
185750
|
-
function
|
|
185751
|
-
let
|
|
185752
|
-
let
|
|
185753
|
-
let
|
|
185754
|
-
let
|
|
185771
|
+
function borrowExternalCollaborationAwareness(host) {
|
|
185772
|
+
let disposed = false;
|
|
185773
|
+
let ownsPresence = false;
|
|
185774
|
+
let hadPresence = false;
|
|
185775
|
+
let previousPresence;
|
|
185776
|
+
let lastPresence;
|
|
185777
|
+
const awareness = {
|
|
185778
|
+
clientID: host.clientID,
|
|
185779
|
+
getStates: () => host.getStates(),
|
|
185780
|
+
on: (event, callback) => host.on(event, callback),
|
|
185781
|
+
off: (event, callback) => host.off(event, callback),
|
|
185782
|
+
setLocalStateField: (field, value) => {
|
|
185783
|
+
if (disposed) {
|
|
185784
|
+
return;
|
|
185785
|
+
}
|
|
185786
|
+
const state = host.getLocalState();
|
|
185787
|
+
if (state === null) {
|
|
185788
|
+
return;
|
|
185789
|
+
}
|
|
185790
|
+
if (field === "presence") {
|
|
185791
|
+
if (!ownsPresence || state.presence !== lastPresence) {
|
|
185792
|
+
hadPresence = Object.hasOwn(state, "presence");
|
|
185793
|
+
previousPresence = state.presence;
|
|
185794
|
+
}
|
|
185795
|
+
lastPresence = value;
|
|
185796
|
+
ownsPresence = true;
|
|
185797
|
+
}
|
|
185798
|
+
host.setLocalStateField(field, value);
|
|
185799
|
+
}
|
|
185800
|
+
};
|
|
185755
185801
|
return {
|
|
185756
|
-
|
|
185757
|
-
|
|
185758
|
-
|
|
185759
|
-
|
|
185760
|
-
canvasWidth,
|
|
185761
|
-
canvasHeight,
|
|
185762
|
-
now ?? Date.now()
|
|
185763
|
-
);
|
|
185764
|
-
if (primed && localActiveSlideIndex === lastActiveSlideIndex && presenceListsEqual(lastList, list)) {
|
|
185765
|
-
return { list: lastList, cursors: lastCursors, changed: false };
|
|
185802
|
+
awareness,
|
|
185803
|
+
dispose: () => {
|
|
185804
|
+
if (disposed) {
|
|
185805
|
+
return;
|
|
185766
185806
|
}
|
|
185767
|
-
|
|
185768
|
-
|
|
185769
|
-
|
|
185770
|
-
|
|
185771
|
-
|
|
185772
|
-
|
|
185773
|
-
|
|
185774
|
-
|
|
185775
|
-
|
|
185776
|
-
|
|
185777
|
-
|
|
185807
|
+
disposed = true;
|
|
185808
|
+
const current = host.getLocalState();
|
|
185809
|
+
if (!ownsPresence || current === null || current.presence !== lastPresence) {
|
|
185810
|
+
return;
|
|
185811
|
+
}
|
|
185812
|
+
const restored = { ...current };
|
|
185813
|
+
if (hadPresence) {
|
|
185814
|
+
restored.presence = previousPresence;
|
|
185815
|
+
} else {
|
|
185816
|
+
delete restored.presence;
|
|
185817
|
+
}
|
|
185818
|
+
host.setLocalState(restored);
|
|
185778
185819
|
}
|
|
185779
185820
|
};
|
|
185780
185821
|
}
|
|
185781
|
-
var DEFAULT_LOCAL_COLOR = "#6366f1";
|
|
185782
|
-
function getUserInitials(name) {
|
|
185783
|
-
const trimmed = name.trim(), parts = trimmed.split(/\s+/u).filter(Boolean), first = parts[0], last = parts[parts.length - 1];
|
|
185784
|
-
if (parts.length >= 2 && first && last) {
|
|
185785
|
-
return (first[0] + last[0]).toUpperCase();
|
|
185786
|
-
}
|
|
185787
|
-
return trimmed.slice(0, 2).toUpperCase();
|
|
185788
|
-
}
|
|
185789
|
-
function buildActiveSessionUsers(params) {
|
|
185790
|
-
const local = {
|
|
185791
|
-
id: "local",
|
|
185792
|
-
name: params.localUserName,
|
|
185793
|
-
initials: params.localUserInitials?.trim() ? params.localUserInitials.trim().slice(0, 2).toUpperCase() : getUserInitials(params.localUserName),
|
|
185794
|
-
color: params.localUserColor ?? DEFAULT_LOCAL_COLOR,
|
|
185795
|
-
isLocal: true
|
|
185796
|
-
}, remote = params.remoteUsers.map((user) => ({
|
|
185797
|
-
id: String(user.clientId),
|
|
185798
|
-
name: user.userName,
|
|
185799
|
-
initials: getUserInitials(user.userName),
|
|
185800
|
-
color: user.userColor,
|
|
185801
|
-
avatarUrl: user.userAvatar,
|
|
185802
|
-
isLocal: false,
|
|
185803
|
-
slideNumber: user.activeSlideIndex + 1
|
|
185804
|
-
}));
|
|
185805
|
-
return [local, ...remote];
|
|
185806
|
-
}
|
|
185807
185822
|
var YDOC_ASSETS_KEY = "pptx:assets";
|
|
185808
185823
|
var ASSET_ELEMENT_FIELDS = /* @__PURE__ */ new Set([
|
|
185809
185824
|
"mediaData",
|
|
@@ -186072,8 +186087,14 @@ function decodeDelta(delta) {
|
|
|
186072
186087
|
} catch {
|
|
186073
186088
|
}
|
|
186074
186089
|
}
|
|
186075
|
-
const isBreakMarker = op2.insert
|
|
186076
|
-
if (
|
|
186090
|
+
const isBreakMarker = /^\n+$/u.test(op2.insert) && (a.pb === "1" || a.lb === "1");
|
|
186091
|
+
if (isBreakMarker) {
|
|
186092
|
+
for (let index = 0; index < op2.insert.length; index++) {
|
|
186093
|
+
segments.push(structuredClone(seg));
|
|
186094
|
+
}
|
|
186095
|
+
continue;
|
|
186096
|
+
}
|
|
186097
|
+
if (op2.insert !== "\u200B") {
|
|
186077
186098
|
seg.text = op2.insert;
|
|
186078
186099
|
}
|
|
186079
186100
|
segments.push(seg);
|
|
@@ -186399,9 +186420,6 @@ function observeYDocSlides(ydoc, onChange) {
|
|
|
186399
186420
|
arr.observeDeep(onChange);
|
|
186400
186421
|
return () => arr.unobserveDeep(onChange);
|
|
186401
186422
|
}
|
|
186402
|
-
function shouldAutoFollowBroadcaster(input) {
|
|
186403
|
-
return input.localRole === "viewer" && input.broadcasterRole === "owner";
|
|
186404
|
-
}
|
|
186405
186423
|
function isYTextEditable(value) {
|
|
186406
186424
|
return isYTextLike(value) && typeof value.delete === "function" && typeof value.format === "function";
|
|
186407
186425
|
}
|
|
@@ -186674,6 +186692,231 @@ function reconcileSlidesInYDoc(slides, ydoc, factories, origin = LOCAL_SYNC_ORIG
|
|
|
186674
186692
|
});
|
|
186675
186693
|
}, origin);
|
|
186676
186694
|
}
|
|
186695
|
+
function observeExternalCollaborationReadiness(session, options) {
|
|
186696
|
+
let active2 = true;
|
|
186697
|
+
let established = false;
|
|
186698
|
+
let awaitingJoin = options.sessionIntent === "join";
|
|
186699
|
+
let lastAdopted;
|
|
186700
|
+
let lastReadOnly;
|
|
186701
|
+
let unsubscribe;
|
|
186702
|
+
const canWrite = () => active2 && options.gate.isOpen() && session.getSnapshot().synced && options.role !== "viewer";
|
|
186703
|
+
const notifyReadOnly = () => {
|
|
186704
|
+
const readOnly = !canWrite();
|
|
186705
|
+
if (lastReadOnly !== readOnly) {
|
|
186706
|
+
lastReadOnly = readOnly;
|
|
186707
|
+
options.onReadOnlyChange?.(readOnly);
|
|
186708
|
+
}
|
|
186709
|
+
};
|
|
186710
|
+
const suspend = () => {
|
|
186711
|
+
options.gate.reset();
|
|
186712
|
+
options.livePatcher?.configure(null, null);
|
|
186713
|
+
options.onSuspend?.();
|
|
186714
|
+
notifyReadOnly();
|
|
186715
|
+
};
|
|
186716
|
+
const adopt = (slides) => {
|
|
186717
|
+
const serialized = JSON.stringify(slides);
|
|
186718
|
+
if (serialized !== lastAdopted) {
|
|
186719
|
+
lastAdopted = serialized;
|
|
186720
|
+
options.adoptSlides(slides);
|
|
186721
|
+
}
|
|
186722
|
+
};
|
|
186723
|
+
const refresh = () => {
|
|
186724
|
+
if (!active2) {
|
|
186725
|
+
return;
|
|
186726
|
+
}
|
|
186727
|
+
const snapshot = session.getSnapshot();
|
|
186728
|
+
options.onStatus(snapshot.status);
|
|
186729
|
+
if (!snapshot.synced) {
|
|
186730
|
+
suspend();
|
|
186731
|
+
return;
|
|
186732
|
+
}
|
|
186733
|
+
if (options.gate.isOpen()) {
|
|
186734
|
+
return;
|
|
186735
|
+
}
|
|
186736
|
+
lastAdopted = void 0;
|
|
186737
|
+
const slides = readSlidesFromYDoc(session.doc);
|
|
186738
|
+
if (slides.length > 0) {
|
|
186739
|
+
established = true;
|
|
186740
|
+
awaitingJoin = false;
|
|
186741
|
+
adopt(slides);
|
|
186742
|
+
} else if (established) {
|
|
186743
|
+
adopt(slides);
|
|
186744
|
+
} else if (awaitingJoin) {
|
|
186745
|
+
suspend();
|
|
186746
|
+
return;
|
|
186747
|
+
}
|
|
186748
|
+
options.livePatcher?.configure(
|
|
186749
|
+
options.role === "viewer" ? null : session.doc,
|
|
186750
|
+
options.role === "viewer" ? null : options.factories,
|
|
186751
|
+
// The host owns readiness, so accepted edits cannot wait in our timer.
|
|
186752
|
+
true
|
|
186753
|
+
);
|
|
186754
|
+
options.gate.open();
|
|
186755
|
+
notifyReadOnly();
|
|
186756
|
+
options.onReady?.({ seedEmptyRoom: slides.length === 0 && !established });
|
|
186757
|
+
};
|
|
186758
|
+
const unobserve = observeYDocSlides(session.doc, (_events, transaction) => {
|
|
186759
|
+
if (!active2 || !session.getSnapshot().synced) {
|
|
186760
|
+
return;
|
|
186761
|
+
}
|
|
186762
|
+
const slides = readSlidesFromYDoc(session.doc);
|
|
186763
|
+
if (slides.length > 0) {
|
|
186764
|
+
established = true;
|
|
186765
|
+
awaitingJoin = false;
|
|
186766
|
+
}
|
|
186767
|
+
if (transaction?.origin === LOCAL_SYNC_ORIGIN) {
|
|
186768
|
+
lastAdopted = JSON.stringify(slides);
|
|
186769
|
+
return;
|
|
186770
|
+
}
|
|
186771
|
+
if (!options.gate.isOpen()) {
|
|
186772
|
+
refresh();
|
|
186773
|
+
} else if (slides.length > 0 || established) {
|
|
186774
|
+
adopt(slides);
|
|
186775
|
+
}
|
|
186776
|
+
});
|
|
186777
|
+
const dispose = () => {
|
|
186778
|
+
if (!active2) {
|
|
186779
|
+
return;
|
|
186780
|
+
}
|
|
186781
|
+
active2 = false;
|
|
186782
|
+
unsubscribe?.();
|
|
186783
|
+
unobserve();
|
|
186784
|
+
suspend();
|
|
186785
|
+
};
|
|
186786
|
+
try {
|
|
186787
|
+
unsubscribe = observeExternalCollaborationSession(session, refresh);
|
|
186788
|
+
} catch (error) {
|
|
186789
|
+
dispose();
|
|
186790
|
+
throw error;
|
|
186791
|
+
}
|
|
186792
|
+
return Object.assign(dispose, {
|
|
186793
|
+
refresh,
|
|
186794
|
+
canWrite,
|
|
186795
|
+
handleLoad: (origin) => {
|
|
186796
|
+
if (!active2) {
|
|
186797
|
+
return false;
|
|
186798
|
+
}
|
|
186799
|
+
if (origin === "user") {
|
|
186800
|
+
awaitingJoin = false;
|
|
186801
|
+
refresh();
|
|
186802
|
+
} else if (session.getSnapshot().synced) {
|
|
186803
|
+
const slides = readSlidesFromYDoc(session.doc);
|
|
186804
|
+
if (slides.length > 0) {
|
|
186805
|
+
lastAdopted = void 0;
|
|
186806
|
+
adopt(slides);
|
|
186807
|
+
return true;
|
|
186808
|
+
}
|
|
186809
|
+
}
|
|
186810
|
+
return false;
|
|
186811
|
+
},
|
|
186812
|
+
allowLocalLoad: () => {
|
|
186813
|
+
awaitingJoin = false;
|
|
186814
|
+
refresh();
|
|
186815
|
+
}
|
|
186816
|
+
});
|
|
186817
|
+
}
|
|
186818
|
+
function zoomEqual(a, b) {
|
|
186819
|
+
if (a === b) {
|
|
186820
|
+
return true;
|
|
186821
|
+
}
|
|
186822
|
+
if (!a || !b) {
|
|
186823
|
+
return false;
|
|
186824
|
+
}
|
|
186825
|
+
return a.scale === b.scale && a.originX === b.originX && a.originY === b.originY;
|
|
186826
|
+
}
|
|
186827
|
+
function pointerEqual(a, b) {
|
|
186828
|
+
if (a === b) {
|
|
186829
|
+
return true;
|
|
186830
|
+
}
|
|
186831
|
+
if (!a || !b) {
|
|
186832
|
+
return false;
|
|
186833
|
+
}
|
|
186834
|
+
return a.tool === b.tool && a.x === b.x && a.y === b.y && a.color === b.color;
|
|
186835
|
+
}
|
|
186836
|
+
function presentationSnapshotsEqual(a, b) {
|
|
186837
|
+
if (a === b) {
|
|
186838
|
+
return true;
|
|
186839
|
+
}
|
|
186840
|
+
return a.slideIndex === b.slideIndex && a.buildStep === b.buildStep && a.blackout === b.blackout && a.paused === b.paused && a.elapsedMs === b.elapsedMs && a.caption === b.caption && a.subtitlesVisible === b.subtitlesVisible && a.inkMarkupVisible === b.inkMarkupVisible && a.inkStrokes === b.inkStrokes && zoomEqual(a.zoom, b.zoom) && pointerEqual(a.pointer, b.pointer);
|
|
186841
|
+
}
|
|
186842
|
+
function presenceEntriesEqual(a, b) {
|
|
186843
|
+
if (a === b) {
|
|
186844
|
+
return true;
|
|
186845
|
+
}
|
|
186846
|
+
return a.clientId === b.clientId && a.userName === b.userName && a.userColor === b.userColor && a.userAvatar === b.userAvatar && a.role === b.role && a.activeSlideIndex === b.activeSlideIndex && a.cursorX === b.cursorX && a.cursorY === b.cursorY && a.selectedElementId === b.selectedElementId;
|
|
186847
|
+
}
|
|
186848
|
+
function presenceListsEqual(a, b) {
|
|
186849
|
+
if (a === b) {
|
|
186850
|
+
return true;
|
|
186851
|
+
}
|
|
186852
|
+
if (a.length !== b.length) {
|
|
186853
|
+
return false;
|
|
186854
|
+
}
|
|
186855
|
+
return a.every((entry2, index) => {
|
|
186856
|
+
const other = b[index];
|
|
186857
|
+
return other !== void 0 && presenceEntriesEqual(entry2, other);
|
|
186858
|
+
});
|
|
186859
|
+
}
|
|
186860
|
+
function createPresenceProjector() {
|
|
186861
|
+
let lastList = [];
|
|
186862
|
+
let lastCursors = [];
|
|
186863
|
+
let lastActiveSlideIndex;
|
|
186864
|
+
let primed = false;
|
|
186865
|
+
return {
|
|
186866
|
+
project(states, localClientId, canvasWidth, canvasHeight, localActiveSlideIndex, now) {
|
|
186867
|
+
const list = derivePresenceList(
|
|
186868
|
+
states,
|
|
186869
|
+
localClientId,
|
|
186870
|
+
canvasWidth,
|
|
186871
|
+
canvasHeight,
|
|
186872
|
+
now ?? Date.now()
|
|
186873
|
+
);
|
|
186874
|
+
if (primed && localActiveSlideIndex === lastActiveSlideIndex && presenceListsEqual(lastList, list)) {
|
|
186875
|
+
return { list: lastList, cursors: lastCursors, changed: false };
|
|
186876
|
+
}
|
|
186877
|
+
lastList = list;
|
|
186878
|
+
lastCursors = presenceToCursors(list, localActiveSlideIndex);
|
|
186879
|
+
lastActiveSlideIndex = localActiveSlideIndex;
|
|
186880
|
+
primed = true;
|
|
186881
|
+
return { list, cursors: lastCursors, changed: true };
|
|
186882
|
+
},
|
|
186883
|
+
reset() {
|
|
186884
|
+
lastList = [];
|
|
186885
|
+
lastCursors = [];
|
|
186886
|
+
lastActiveSlideIndex = void 0;
|
|
186887
|
+
primed = false;
|
|
186888
|
+
}
|
|
186889
|
+
};
|
|
186890
|
+
}
|
|
186891
|
+
var DEFAULT_LOCAL_COLOR = "#6366f1";
|
|
186892
|
+
function getUserInitials(name) {
|
|
186893
|
+
const trimmed = name.trim(), parts = trimmed.split(/\s+/u).filter(Boolean), first = parts[0], last = parts[parts.length - 1];
|
|
186894
|
+
if (parts.length >= 2 && first && last) {
|
|
186895
|
+
return (first[0] + last[0]).toUpperCase();
|
|
186896
|
+
}
|
|
186897
|
+
return trimmed.slice(0, 2).toUpperCase();
|
|
186898
|
+
}
|
|
186899
|
+
function buildActiveSessionUsers(params) {
|
|
186900
|
+
const local = {
|
|
186901
|
+
id: "local",
|
|
186902
|
+
name: params.localUserName,
|
|
186903
|
+
initials: params.localUserInitials?.trim() ? params.localUserInitials.trim().slice(0, 2).toUpperCase() : getUserInitials(params.localUserName),
|
|
186904
|
+
color: params.localUserColor ?? DEFAULT_LOCAL_COLOR,
|
|
186905
|
+
isLocal: true
|
|
186906
|
+
}, remote = params.remoteUsers.map((user) => ({
|
|
186907
|
+
id: String(user.clientId),
|
|
186908
|
+
name: user.userName,
|
|
186909
|
+
initials: getUserInitials(user.userName),
|
|
186910
|
+
color: user.userColor,
|
|
186911
|
+
avatarUrl: user.userAvatar,
|
|
186912
|
+
isLocal: false,
|
|
186913
|
+
slideNumber: user.activeSlideIndex + 1
|
|
186914
|
+
}));
|
|
186915
|
+
return [local, ...remote];
|
|
186916
|
+
}
|
|
186917
|
+
function shouldAutoFollowBroadcaster(input) {
|
|
186918
|
+
return input.localRole === "viewer" && input.broadcasterRole === "owner";
|
|
186919
|
+
}
|
|
186677
186920
|
var GEOMETRY_KEYS = ["x", "y", "width", "height", "rotation"];
|
|
186678
186921
|
var MAX_LIVE_TEXT_LENGTH = 1e5;
|
|
186679
186922
|
var asMap = (value) => typeof value === "object" && value !== null && typeof value.get === "function" ? value : void 0;
|
|
@@ -186731,6 +186974,7 @@ function createCollaborationLivePatcher(options = {}) {
|
|
|
186731
186974
|
let factories = null;
|
|
186732
186975
|
let timer = null;
|
|
186733
186976
|
let lastWriteAt = Number.NEGATIVE_INFINITY;
|
|
186977
|
+
let immediate = false;
|
|
186734
186978
|
const cancelTimer = () => {
|
|
186735
186979
|
if (timer !== null) {
|
|
186736
186980
|
clearTimeout(timer);
|
|
@@ -186757,6 +187001,10 @@ function createCollaborationLivePatcher(options = {}) {
|
|
|
186757
187001
|
}
|
|
186758
187002
|
};
|
|
186759
187003
|
const schedule = () => {
|
|
187004
|
+
if (immediate) {
|
|
187005
|
+
writePending();
|
|
187006
|
+
return;
|
|
187007
|
+
}
|
|
186760
187008
|
if (timer !== null) {
|
|
186761
187009
|
return;
|
|
186762
187010
|
}
|
|
@@ -186783,14 +187031,15 @@ function createCollaborationLivePatcher(options = {}) {
|
|
|
186783
187031
|
return entry2;
|
|
186784
187032
|
};
|
|
186785
187033
|
return {
|
|
186786
|
-
configure(nextDoc, nextFactories) {
|
|
186787
|
-
if (nextDoc === doc && nextFactories === factories) {
|
|
187034
|
+
configure(nextDoc, nextFactories, nextImmediate = false) {
|
|
187035
|
+
if (nextDoc === doc && nextFactories === factories && nextImmediate === immediate) {
|
|
186788
187036
|
return;
|
|
186789
187037
|
}
|
|
186790
187038
|
cancelTimer();
|
|
186791
187039
|
pending.clear();
|
|
186792
187040
|
doc = nextDoc;
|
|
186793
187041
|
factories = nextFactories;
|
|
187042
|
+
immediate = nextImmediate;
|
|
186794
187043
|
lastWriteAt = Number.NEGATIVE_INFINITY;
|
|
186795
187044
|
},
|
|
186796
187045
|
isActive() {
|
|
@@ -186917,7 +187166,10 @@ function registerCollaborationTeardown(options) {
|
|
|
186917
187166
|
doLeave();
|
|
186918
187167
|
};
|
|
186919
187168
|
const onBeforeUnload = () => {
|
|
186920
|
-
|
|
187169
|
+
const allowed = typeof options.leaveOnBeforeUnload === "function" ? options.leaveOnBeforeUnload() : options.leaveOnBeforeUnload !== false;
|
|
187170
|
+
if (allowed) {
|
|
187171
|
+
doLeave();
|
|
187172
|
+
}
|
|
186921
187173
|
};
|
|
186922
187174
|
const onPageShow = (event) => {
|
|
186923
187175
|
if (event.persisted !== true || !left || !rejoin) {
|
|
@@ -187016,6 +187268,84 @@ function createDepartureChannel(roomId, awareness, factory) {
|
|
|
187016
187268
|
}
|
|
187017
187269
|
};
|
|
187018
187270
|
}
|
|
187271
|
+
var DEFAULT_DEBOUNCE_MS = 5e3;
|
|
187272
|
+
function createWriteBackScheduler(deps) {
|
|
187273
|
+
let timer = null;
|
|
187274
|
+
let generation = 0;
|
|
187275
|
+
let unsubscribe = null;
|
|
187276
|
+
function cancel() {
|
|
187277
|
+
generation++;
|
|
187278
|
+
unsubscribe?.();
|
|
187279
|
+
unsubscribe = null;
|
|
187280
|
+
if (timer !== null) {
|
|
187281
|
+
clearTimeout(timer);
|
|
187282
|
+
timer = null;
|
|
187283
|
+
}
|
|
187284
|
+
}
|
|
187285
|
+
function schedule(config) {
|
|
187286
|
+
const isReady = () => config.externalSession?.getSnapshot().synced ?? true;
|
|
187287
|
+
if (!config.onWriteBack || config.role !== "owner" || !deps.getYDoc()) {
|
|
187288
|
+
return;
|
|
187289
|
+
}
|
|
187290
|
+
cancel();
|
|
187291
|
+
if (!isReady()) {
|
|
187292
|
+
return;
|
|
187293
|
+
}
|
|
187294
|
+
const token2 = generation;
|
|
187295
|
+
if (config.externalSession) {
|
|
187296
|
+
const detach2 = config.externalSession.subscribe(() => {
|
|
187297
|
+
if (!isReady()) {
|
|
187298
|
+
cancel();
|
|
187299
|
+
}
|
|
187300
|
+
});
|
|
187301
|
+
if (token2 !== generation || !isReady()) {
|
|
187302
|
+
detach2();
|
|
187303
|
+
return;
|
|
187304
|
+
}
|
|
187305
|
+
unsubscribe = detach2;
|
|
187306
|
+
}
|
|
187307
|
+
const debounceMs = config.writeBackDebounceMs ?? DEFAULT_DEBOUNCE_MS;
|
|
187308
|
+
timer = setTimeout(async () => {
|
|
187309
|
+
timer = null;
|
|
187310
|
+
const ydoc = deps.getYDoc();
|
|
187311
|
+
const isCurrent = () => token2 === generation && isReady() && deps.getYDoc() === ydoc;
|
|
187312
|
+
try {
|
|
187313
|
+
if (!ydoc || !config.onWriteBack || !isReady()) {
|
|
187314
|
+
return;
|
|
187315
|
+
}
|
|
187316
|
+
if (deps.serialize) {
|
|
187317
|
+
const bytes2 = await deps.serialize(isCurrent);
|
|
187318
|
+
if (bytes2 && isCurrent()) {
|
|
187319
|
+
await config.onWriteBack(bytes2);
|
|
187320
|
+
}
|
|
187321
|
+
return;
|
|
187322
|
+
}
|
|
187323
|
+
const sourceBytes = deps.getSourceBytes?.();
|
|
187324
|
+
if (!sourceBytes) {
|
|
187325
|
+
return;
|
|
187326
|
+
}
|
|
187327
|
+
const handler = new exports.PptxHandler();
|
|
187328
|
+
await handler.load(sourceBytes.buffer);
|
|
187329
|
+
if (!isCurrent()) {
|
|
187330
|
+
return;
|
|
187331
|
+
}
|
|
187332
|
+
const slides = readSlidesFromYDoc(ydoc);
|
|
187333
|
+
const merged = deps.mergeTemplateElements ? deps.mergeTemplateElements(slides, deps.getTemplateElements?.() ?? {}) : slides;
|
|
187334
|
+
const bytes = await handler.save(merged, deps.getSaveOptions?.());
|
|
187335
|
+
if (isCurrent()) {
|
|
187336
|
+
await config.onWriteBack(bytes);
|
|
187337
|
+
}
|
|
187338
|
+
} catch {
|
|
187339
|
+
} finally {
|
|
187340
|
+
if (token2 === generation) {
|
|
187341
|
+
unsubscribe?.();
|
|
187342
|
+
unsubscribe = null;
|
|
187343
|
+
}
|
|
187344
|
+
}
|
|
187345
|
+
}, debounceMs);
|
|
187346
|
+
}
|
|
187347
|
+
return { schedule, cancel };
|
|
187348
|
+
}
|
|
187019
187349
|
var POSITION_THRESHOLD = 2;
|
|
187020
187350
|
var SIZE_THRESHOLD = 2;
|
|
187021
187351
|
function getElementText(element) {
|
|
@@ -207972,6 +208302,7 @@ exports.beginChartValueDrag = beginChartValueDrag;
|
|
|
207972
208302
|
exports.beginShapeAdjustment = beginShapeAdjustment;
|
|
207973
208303
|
exports.bindInlineListParagraph = bindInlineListParagraph;
|
|
207974
208304
|
exports.bindInlineListRun = bindInlineListRun;
|
|
208305
|
+
exports.borrowExternalCollaborationAwareness = borrowExternalCollaborationAwareness;
|
|
207975
208306
|
exports.bringForward = bringForward;
|
|
207976
208307
|
exports.bringToFront = bringToFront;
|
|
207977
208308
|
exports.build3DExtrusionData = build3DExtrusionData;
|
|
@@ -208174,6 +208505,7 @@ exports.createTouchGestureRecognizer = createTouchGestureRecognizer;
|
|
|
208174
208505
|
exports.createViewerOptionsStore = createViewerOptionsStore;
|
|
208175
208506
|
exports.createViewerZoomStore = createViewerZoomStore;
|
|
208176
208507
|
exports.createWheelStepBuffer = createWheelStepBuffer;
|
|
208508
|
+
exports.createWriteBackScheduler = createWriteBackScheduler;
|
|
208177
208509
|
exports.cursorForTool = cursorForTool;
|
|
208178
208510
|
exports.customGeometryPathsToSvgSubpaths = customGeometryPathsToSvgSubpaths;
|
|
208179
208511
|
exports.defaultCssVars = defaultCssVars;
|
|
@@ -208452,6 +208784,8 @@ exports.normalizeHexColor = normalizeHexColor2;
|
|
|
208452
208784
|
exports.normalizeStrokeDashType = normalizeStrokeDashType;
|
|
208453
208785
|
exports.normalizeTableStyleGuid = normalizeTableStyleGuid;
|
|
208454
208786
|
exports.notesSegmentsToSpans = notesSegmentsToSpans;
|
|
208787
|
+
exports.observeExternalCollaborationReadiness = observeExternalCollaborationReadiness;
|
|
208788
|
+
exports.observeExternalCollaborationSession = observeExternalCollaborationSession;
|
|
208455
208789
|
exports.observeYDocSlides = observeYDocSlides;
|
|
208456
208790
|
exports.ooxmlGradientAngleToCssDegrees = ooxmlGradientAngleToCssDegrees;
|
|
208457
208791
|
exports.openNativeEyeDropper = openNativeEyeDropper;
|