pptx-react-viewer 4.0.0 → 4.1.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.
Files changed (188) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{AiChatPanel-MHURGN6G.mjs → AiChatPanel-C3ACRWOY.mjs} +4 -4
  3. package/dist/AiChatPanel-C3ACRWOY.mjs.br +0 -0
  4. package/dist/AiChatPanel-C3ACRWOY.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-WMVQFNDC.js → AiChatPanel-GQNSKMP6.js} +25 -25
  6. package/dist/AiChatPanel-GQNSKMP6.js.br +0 -0
  7. package/dist/AiChatPanel-GQNSKMP6.js.gz +0 -0
  8. package/dist/{Area3DChartScene-IMGZEZNU.js → Area3DChartScene-3I6KB2DN.js} +2 -2
  9. package/dist/Area3DChartScene-3I6KB2DN.js.br +0 -0
  10. package/dist/Area3DChartScene-3I6KB2DN.js.gz +0 -0
  11. package/dist/{Area3DChartScene-LKOWSMAU.mjs → Area3DChartScene-4TPNRYXS.mjs} +1 -1
  12. package/dist/{Area3DChartScene-LKOWSMAU.mjs.br → Area3DChartScene-4TPNRYXS.mjs.br} +0 -0
  13. package/dist/Area3DChartScene-4TPNRYXS.mjs.gz +0 -0
  14. package/dist/{Bar3DChartScene-NQNSIMUL.mjs → Bar3DChartScene-V45IUIT7.mjs} +1 -1
  15. package/dist/{Bar3DChartScene-NQNSIMUL.mjs.br → Bar3DChartScene-V45IUIT7.mjs.br} +0 -0
  16. package/dist/Bar3DChartScene-V45IUIT7.mjs.gz +0 -0
  17. package/dist/{Bar3DChartScene-VLSYVFRT.js → Bar3DChartScene-ZSCATOYF.js} +2 -2
  18. package/dist/Bar3DChartScene-ZSCATOYF.js.br +0 -0
  19. package/dist/Bar3DChartScene-ZSCATOYF.js.gz +0 -0
  20. package/dist/{Line3DChartScene-ANZBJYQI.mjs → Line3DChartScene-DCQJEZK6.mjs} +1 -1
  21. package/dist/{Line3DChartScene-ANZBJYQI.mjs.br → Line3DChartScene-DCQJEZK6.mjs.br} +0 -0
  22. package/dist/Line3DChartScene-DCQJEZK6.mjs.gz +0 -0
  23. package/dist/{Line3DChartScene-IWZHA563.js → Line3DChartScene-DK55LQ2D.js} +2 -2
  24. package/dist/Line3DChartScene-DK55LQ2D.js.br +0 -0
  25. package/dist/Line3DChartScene-DK55LQ2D.js.gz +0 -0
  26. package/dist/{Model3DScene-2L3YRAMR.js → Model3DScene-2WNP4XBP.js} +2 -2
  27. package/dist/Model3DScene-2WNP4XBP.js.br +0 -0
  28. package/dist/Model3DScene-2WNP4XBP.js.gz +0 -0
  29. package/dist/{Model3DScene-Y34HTZXK.mjs → Model3DScene-SA5XMR2D.mjs} +1 -1
  30. package/dist/Model3DScene-SA5XMR2D.mjs.br +0 -0
  31. package/dist/Model3DScene-SA5XMR2D.mjs.gz +0 -0
  32. package/dist/{PieChart3DScene-FBRPLHLG.mjs → PieChart3DScene-HC2ZWL42.mjs} +1 -1
  33. package/dist/{PieChart3DScene-FBRPLHLG.mjs.br → PieChart3DScene-HC2ZWL42.mjs.br} +0 -0
  34. package/dist/PieChart3DScene-HC2ZWL42.mjs.gz +0 -0
  35. package/dist/{PieChart3DScene-NE3GN5VG.js → PieChart3DScene-Q75D66HS.js} +2 -2
  36. package/dist/PieChart3DScene-Q75D66HS.js.br +0 -0
  37. package/dist/PieChart3DScene-Q75D66HS.js.gz +0 -0
  38. package/dist/{SmartArt3DScene-QZGIABOK.mjs → SmartArt3DScene-D4VNNPHS.mjs} +124 -19
  39. package/dist/SmartArt3DScene-D4VNNPHS.mjs.br +0 -0
  40. package/dist/SmartArt3DScene-D4VNNPHS.mjs.gz +0 -0
  41. package/dist/{SmartArt3DScene-T236GYUT.js → SmartArt3DScene-NHD7CZJ5.js} +123 -18
  42. package/dist/SmartArt3DScene-NHD7CZJ5.js.br +0 -0
  43. package/dist/SmartArt3DScene-NHD7CZJ5.js.gz +0 -0
  44. package/dist/{SurfaceChart3DScene-7HE5DA3X.mjs → SurfaceChart3DScene-JRMX4PN5.mjs} +1 -1
  45. package/dist/SurfaceChart3DScene-JRMX4PN5.mjs.br +0 -0
  46. package/dist/SurfaceChart3DScene-JRMX4PN5.mjs.gz +0 -0
  47. package/dist/{SurfaceChart3DScene-OSMAVZJC.js → SurfaceChart3DScene-ODS5E6ZG.js} +2 -2
  48. package/dist/SurfaceChart3DScene-ODS5E6ZG.js.br +0 -0
  49. package/dist/SurfaceChart3DScene-ODS5E6ZG.js.gz +0 -0
  50. package/dist/{chunk-H7J4EYXS.mjs → chunk-25CABWCR.mjs} +131 -329
  51. package/dist/chunk-25CABWCR.mjs.br +0 -0
  52. package/dist/chunk-25CABWCR.mjs.gz +0 -0
  53. package/dist/{chunk-IWHZ2DUD.mjs → chunk-3B6YIH4K.mjs} +626 -133
  54. package/dist/chunk-3B6YIH4K.mjs.br +0 -0
  55. package/dist/chunk-3B6YIH4K.mjs.gz +0 -0
  56. package/dist/{chunk-L6I73WMO.js → chunk-A6JKOHSV.js} +2143 -1644
  57. package/dist/chunk-A6JKOHSV.js.br +0 -0
  58. package/dist/chunk-A6JKOHSV.js.gz +0 -0
  59. package/dist/{chunk-5F426BCZ.mjs → chunk-GRAARMUW.mjs} +1 -1
  60. package/dist/chunk-GRAARMUW.mjs.br +0 -0
  61. package/dist/chunk-GRAARMUW.mjs.gz +0 -0
  62. package/dist/{chunk-ZOB6ITIM.js → chunk-MQHMMB6V.js} +5 -5
  63. package/dist/chunk-MQHMMB6V.js.br +0 -0
  64. package/dist/chunk-MQHMMB6V.js.gz +0 -0
  65. package/dist/{chunk-I5F3XLVR.js → chunk-NR4MQJM5.js} +1961 -2161
  66. package/dist/chunk-NR4MQJM5.js.br +0 -0
  67. package/dist/chunk-NR4MQJM5.js.gz +0 -0
  68. package/dist/{chunk-M24DEOP6.js → chunk-NXGUR2DO.js} +2 -0
  69. package/dist/chunk-NXGUR2DO.js.br +0 -0
  70. package/dist/chunk-NXGUR2DO.js.gz +0 -0
  71. package/dist/{chunk-R664EPDC.mjs → chunk-PC7H3C5W.mjs} +2 -0
  72. package/dist/chunk-PC7H3C5W.mjs.br +0 -0
  73. package/dist/chunk-PC7H3C5W.mjs.gz +0 -0
  74. package/dist/{chunk-NKACTGK5.js → chunk-PUALTXTU.js} +182 -182
  75. package/dist/chunk-PUALTXTU.js.br +0 -0
  76. package/dist/chunk-PUALTXTU.js.gz +0 -0
  77. package/dist/{chunk-33YE6E2O.mjs → chunk-Q6QJOD56.mjs} +2145 -470
  78. package/dist/chunk-Q6QJOD56.mjs.br +0 -0
  79. package/dist/chunk-Q6QJOD56.mjs.gz +0 -0
  80. package/dist/{chunk-LAAXFMRE.js → chunk-SK2CZQ6P.js} +2151 -469
  81. package/dist/chunk-SK2CZQ6P.js.br +0 -0
  82. package/dist/chunk-SK2CZQ6P.js.gz +0 -0
  83. package/dist/{chunk-GITM3RKP.mjs → chunk-WLWAYLL6.mjs} +2 -2
  84. package/dist/chunk-WLWAYLL6.mjs.br +0 -0
  85. package/dist/chunk-WLWAYLL6.mjs.gz +0 -0
  86. package/dist/i18n/de.cjs +2 -0
  87. package/dist/i18n/de.cjs.br +0 -0
  88. package/dist/i18n/de.cjs.gz +0 -0
  89. package/dist/i18n/de.mjs +2 -0
  90. package/dist/i18n/de.mjs.br +0 -0
  91. package/dist/i18n/de.mjs.gz +0 -0
  92. package/dist/i18n/es.cjs +2 -0
  93. package/dist/i18n/es.cjs.br +0 -0
  94. package/dist/i18n/es.cjs.gz +0 -0
  95. package/dist/i18n/es.mjs +2 -0
  96. package/dist/i18n/es.mjs.br +0 -0
  97. package/dist/i18n/es.mjs.gz +0 -0
  98. package/dist/i18n/fr.cjs +2 -0
  99. package/dist/i18n/fr.cjs.br +0 -0
  100. package/dist/i18n/fr.cjs.gz +0 -0
  101. package/dist/i18n/fr.mjs +2 -0
  102. package/dist/i18n/fr.mjs.br +0 -0
  103. package/dist/i18n/fr.mjs.gz +0 -0
  104. package/dist/i18n/zh-CN.cjs +2 -0
  105. package/dist/i18n/zh-CN.cjs.br +0 -0
  106. package/dist/i18n/zh-CN.cjs.gz +0 -0
  107. package/dist/i18n/zh-CN.mjs +2 -0
  108. package/dist/i18n/zh-CN.mjs.br +0 -0
  109. package/dist/i18n/zh-CN.mjs.gz +0 -0
  110. package/dist/i18n.js +4 -4
  111. package/dist/i18n.js.br +0 -0
  112. package/dist/i18n.js.gz +0 -0
  113. package/dist/i18n.mjs +1 -1
  114. package/dist/i18n.mjs.br +0 -0
  115. package/dist/i18n.mjs.gz +0 -0
  116. package/dist/index.d.ts +586 -7
  117. package/dist/index.js +52 -48
  118. package/dist/index.js.br +0 -0
  119. package/dist/index.js.gz +0 -0
  120. package/dist/index.mjs +6 -6
  121. package/dist/index.mjs.br +0 -0
  122. package/dist/index.mjs.gz +0 -0
  123. package/dist/internals.d.ts +447 -13
  124. package/dist/internals.js +105 -105
  125. package/dist/internals.js.br +0 -0
  126. package/dist/internals.js.gz +0 -0
  127. package/dist/internals.mjs +4 -4
  128. package/dist/internals.mjs.br +0 -0
  129. package/dist/internals.mjs.gz +0 -0
  130. package/dist/viewer/index.js +32 -32
  131. package/dist/viewer/index.js.br +0 -0
  132. package/dist/viewer/index.js.gz +0 -0
  133. package/dist/viewer/index.mjs +6 -6
  134. package/dist/viewer/index.mjs.br +0 -0
  135. package/dist/viewer/index.mjs.gz +0 -0
  136. package/package.json +2 -2
  137. package/dist/AiChatPanel-MHURGN6G.mjs.br +0 -0
  138. package/dist/AiChatPanel-MHURGN6G.mjs.gz +0 -0
  139. package/dist/AiChatPanel-WMVQFNDC.js.br +0 -0
  140. package/dist/AiChatPanel-WMVQFNDC.js.gz +0 -0
  141. package/dist/Area3DChartScene-IMGZEZNU.js.br +0 -0
  142. package/dist/Area3DChartScene-IMGZEZNU.js.gz +0 -0
  143. package/dist/Area3DChartScene-LKOWSMAU.mjs.gz +0 -0
  144. package/dist/Bar3DChartScene-NQNSIMUL.mjs.gz +0 -0
  145. package/dist/Bar3DChartScene-VLSYVFRT.js.br +0 -0
  146. package/dist/Bar3DChartScene-VLSYVFRT.js.gz +0 -0
  147. package/dist/Line3DChartScene-ANZBJYQI.mjs.gz +0 -0
  148. package/dist/Line3DChartScene-IWZHA563.js.br +0 -0
  149. package/dist/Line3DChartScene-IWZHA563.js.gz +0 -0
  150. package/dist/Model3DScene-2L3YRAMR.js.br +0 -0
  151. package/dist/Model3DScene-2L3YRAMR.js.gz +0 -0
  152. package/dist/Model3DScene-Y34HTZXK.mjs.br +0 -0
  153. package/dist/Model3DScene-Y34HTZXK.mjs.gz +0 -0
  154. package/dist/PieChart3DScene-FBRPLHLG.mjs.gz +0 -0
  155. package/dist/PieChart3DScene-NE3GN5VG.js.br +0 -0
  156. package/dist/PieChart3DScene-NE3GN5VG.js.gz +0 -0
  157. package/dist/SmartArt3DScene-QZGIABOK.mjs.br +0 -0
  158. package/dist/SmartArt3DScene-QZGIABOK.mjs.gz +0 -0
  159. package/dist/SmartArt3DScene-T236GYUT.js.br +0 -0
  160. package/dist/SmartArt3DScene-T236GYUT.js.gz +0 -0
  161. package/dist/SurfaceChart3DScene-7HE5DA3X.mjs.br +0 -0
  162. package/dist/SurfaceChart3DScene-7HE5DA3X.mjs.gz +0 -0
  163. package/dist/SurfaceChart3DScene-OSMAVZJC.js.br +0 -0
  164. package/dist/SurfaceChart3DScene-OSMAVZJC.js.gz +0 -0
  165. package/dist/chunk-33YE6E2O.mjs.br +0 -0
  166. package/dist/chunk-33YE6E2O.mjs.gz +0 -0
  167. package/dist/chunk-5F426BCZ.mjs.br +0 -0
  168. package/dist/chunk-5F426BCZ.mjs.gz +0 -0
  169. package/dist/chunk-GITM3RKP.mjs.br +0 -0
  170. package/dist/chunk-GITM3RKP.mjs.gz +0 -0
  171. package/dist/chunk-H7J4EYXS.mjs.br +0 -0
  172. package/dist/chunk-H7J4EYXS.mjs.gz +0 -0
  173. package/dist/chunk-I5F3XLVR.js.br +0 -0
  174. package/dist/chunk-I5F3XLVR.js.gz +0 -0
  175. package/dist/chunk-IWHZ2DUD.mjs.br +0 -0
  176. package/dist/chunk-IWHZ2DUD.mjs.gz +0 -0
  177. package/dist/chunk-L6I73WMO.js.br +0 -0
  178. package/dist/chunk-L6I73WMO.js.gz +0 -0
  179. package/dist/chunk-LAAXFMRE.js.br +0 -0
  180. package/dist/chunk-LAAXFMRE.js.gz +0 -0
  181. package/dist/chunk-M24DEOP6.js.br +0 -0
  182. package/dist/chunk-M24DEOP6.js.gz +0 -0
  183. package/dist/chunk-NKACTGK5.js.br +0 -0
  184. package/dist/chunk-NKACTGK5.js.gz +0 -0
  185. package/dist/chunk-R664EPDC.mjs.br +0 -0
  186. package/dist/chunk-R664EPDC.mjs.gz +0 -0
  187. package/dist/chunk-ZOB6ITIM.js.br +0 -0
  188. package/dist/chunk-ZOB6ITIM.js.gz +0 -0
@@ -11492,6 +11492,23 @@ interface TextStyleAnimationDescriptor {
11492
11492
  //#region src/render/collaboration-presence.d.ts
11493
11493
  /** Connection lifecycle states for the Yjs WebSocket provider. */
11494
11494
  type ConnectionStatus$1 = 'disconnected' | 'connecting' | 'connected' | 'error';
11495
+ /**
11496
+ * Presence data for a remote collaborator, sanitised from the awareness
11497
+ * protocol. Returned by {@link sanitizePresence}; coordinates are in unscaled
11498
+ * slide pixels, clamped to the supplied canvas bounds.
11499
+ */
11500
+ interface SanitizedPresence {
11501
+ clientId: number;
11502
+ userName: string;
11503
+ userAvatar?: string;
11504
+ userColor: string;
11505
+ activeSlideIndex: number;
11506
+ cursorX: number;
11507
+ cursorY: number;
11508
+ lastUpdated: string;
11509
+ selectedElementId?: string;
11510
+ role?: CollaborationRole;
11511
+ }
11495
11512
  //#endregion
11496
11513
  //#region src/render/collaboration-presence-publisher.d.ts
11497
11514
  /**
@@ -11745,6 +11762,47 @@ interface CollaborationConfig {
11745
11762
  writeBackDebounceMs?: number;
11746
11763
  }
11747
11764
  //#endregion
11765
+ //#region src/render/text-run-style.d.ts
11766
+ /** A plain CSS style map (keys are CSS properties; binding-agnostic). */
11767
+ type RunStyle = Record<string, string | number>;
11768
+ /** One script-tagged piece of a run's text, ready for a binding's nested span. */
11769
+ interface ScriptFontPiece {
11770
+ text: string;
11771
+ /**
11772
+ * CSS for a nested span wrapping `text`, or `undefined` when this piece
11773
+ * needs no span at all (its script's font equals the run's own, so plain
11774
+ * text renders identically). When present it carries the `fontFamily`
11775
+ * override plus the run's own decoration subset, repeated because
11776
+ * `text-decoration-*` does not inherit into a nested span (see
11777
+ * `nestedTextDecorationStyle`).
11778
+ */
11779
+ style?: RunStyle;
11780
+ }
11781
+ //#endregion
11782
+ //#region src/render/reflection.d.ts
11783
+ /**
11784
+ * CSS `mask-image`/`-webkit-mask-image` value plus the raw `transform` for a
11785
+ * mirrored reflection sibling. Every value is a ready-to-apply CSS string (or
11786
+ * `'none'` sentinel avoided - fields are omitted when the browser default
11787
+ * already matches), so a binding can spread this directly onto its own style
11788
+ * object with no further per-framework logic.
11789
+ */
11790
+ interface ReflectionWrapperStyle {
11791
+ position: 'absolute';
11792
+ left: string;
11793
+ /** `calc(100% + <dist>px)`: sits `@dist` px below the source element's box. */
11794
+ top: string;
11795
+ width: string;
11796
+ height: string;
11797
+ /** Mirror (`scaleY(-1)`) composed with `@sx`/`@sy`/`@kx`/`@ky`/`@rot`. */
11798
+ transform: string;
11799
+ /** Anchor point for the transform above, from `@algn` (default `center top`). */
11800
+ transformOrigin: string;
11801
+ maskImage: string;
11802
+ WebkitMaskImage: string;
11803
+ pointerEvents: 'none';
11804
+ }
11805
+ //#endregion
11748
11806
  //#region src/render/animation-timeline-build-descriptors.d.ts
11749
11807
  /**
11750
11808
  * `animation-timeline-build-descriptors` - staged-build (`p:bldChart` /
@@ -11925,6 +11983,272 @@ type AnimationApplyGroup = 'entrance' | 'emphasis' | 'exit' | 'motionPath';
11925
11983
  type SlideTemplateId = 'title' | 'titleAndContent' | 'sectionHeader' | 'agenda' | 'twoContent' | 'comparison' | 'quote' | 'timeline' | 'keyMetrics' | 'titleOnly' | 'blank' | 'closing';
11926
11984
  /** The unit system used for ruler display. */
11927
11985
  type RulerUnit = 'inches' | 'centimetres';
11986
+ /** Framework-neutral picture-bullet source, sizing, and accessible fallback. */
11987
+ interface PictureBulletMarker {
11988
+ src?: string;
11989
+ sizePx: number;
11990
+ fallbackMarker: string;
11991
+ accessibleLabel: string;
11992
+ imageRelId?: string;
11993
+ }
11994
+ //#endregion
11995
+ //#region src/render/text-run-meta.d.ts
11996
+ /** A run's resolved hyperlink target. */
11997
+ interface RunHyperlink {
11998
+ /**
11999
+ * The URL to hand a click handler. For an internal `ppaction://hlinksldjump`
12000
+ * the resolved slide index is appended as a `slideIndex` query parameter, so
12001
+ * the target survives a callback whose only argument is the URL (see
12002
+ * `parsePpactionUrl`, which reads it back off).
12003
+ */
12004
+ url: string;
12005
+ /**
12006
+ * A safe, renderable `href` for a plain `<a>`, or `undefined` when the target
12007
+ * is an internal `ppaction://` action or fails the URL safety check. A
12008
+ * binding with no click handler renders the run as text in that case, which
12009
+ * is what every binding did for every link before this field existed.
12010
+ */
12011
+ href?: string;
12012
+ /** `a:hlinkClick/@tooltip`, for the anchor's `title`. */
12013
+ tooltip?: string;
12014
+ /**
12015
+ * `<a target>` for a real (non-`ppaction://`) hyperlink, from
12016
+ * `a:hlinkClick/@tgtFrame` when authored, else `_blank` (every binding's
12017
+ * pre-existing hardcoded default). Only meaningful alongside {@link href}.
12018
+ */
12019
+ target?: string;
12020
+ /** `<a rel>` paired with {@link target} (see `resolveHyperlinkTargetAttrs`). */
12021
+ rel?: string;
12022
+ /** Resolved target slide for an internal slide jump. */
12023
+ targetSlideIndex?: number;
12024
+ /**
12025
+ * True when the target came from `a:hlinkMouseOver` rather than
12026
+ * `a:hlinkClick`: PowerPoint follows it on hover, not on click, so a binding
12027
+ * that renders a plain anchor should not make it look clickable.
12028
+ */
12029
+ onHover?: boolean;
12030
+ }
12031
+ /** An inline equation run (`m:oMath`), rendered as MathML rather than text. */
12032
+ interface RunEquation {
12033
+ /** The raw OMML node, for `convertOmmlToMathMl`. */
12034
+ xml: Record<string, unknown>;
12035
+ /** Display number for a numbered equation, without its parentheses. */
12036
+ number?: string;
12037
+ }
12038
+ //#endregion
12039
+ //#region src/render/text-run-ruby.d.ts
12040
+ /** A run's phonetic guide, ready to render as `<rt>` above the base text. */
12041
+ interface RunRuby {
12042
+ /** The annotation itself (`a:ruby/a:rt`), e.g. the furigana reading. */
12043
+ text: string;
12044
+ /** Inline style for the `<rt>` element (size, family, alignment, colour). */
12045
+ style: RunStyle;
12046
+ }
12047
+ //#endregion
12048
+ //#region src/render/text-tab-run-build.d.ts
12049
+ /** One tabbed-line piece, ready to spread onto a binding's own span element. */
12050
+ interface TabbedRunPiece {
12051
+ text: string;
12052
+ /**
12053
+ * CSS for the span that wraps `text`: inline-block layout, this run's own
12054
+ * decoration repeated, and this piece's own PowerPoint advance-width
12055
+ * correction as `letter-spacing` (see `buildTabbedLine`). The piece is
12056
+ * nested inside the run's own span, and neither property inherits the way a
12057
+ * caller would want: `text-decoration-*` does not inherit into a nested
12058
+ * element at all (an ancestor's underline is drawn *through* its
12059
+ * descendants, but each descendant still computes `none` of its own), so a
12060
+ * caller passes the run's decoration subset (`nestedTextDecorationStyle`) to
12061
+ * have it repeated here; `letter-spacing` DOES inherit, which is exactly why
12062
+ * this piece sets it explicitly rather than only when non-zero - the run's
12063
+ * container span carries its own (wrong, whole-text) correction that would
12064
+ * otherwise leak in.
12065
+ */
12066
+ style: RunStyle;
12067
+ /** CSS for the leader-fill span preceding this piece, or `undefined` when there is no gap to fill. */
12068
+ leaderStyle?: RunStyle;
12069
+ /** Leader glyphs sized to fill `leaderStyle`'s width. Present only alongside `leaderStyle`. */
12070
+ leaderText?: string;
12071
+ /**
12072
+ * `a:rPr/@u="words"` per-word/gap sub-pieces of THIS tab piece's own text
12073
+ * (see `splitWordsForUnderline`), present only when the run's underline is
12074
+ * `words`. A tab-separated piece is otherwise rendered as a single span
12075
+ * (`text` + `style`), which underlines it continuously - correct for a
12076
+ * one-word piece, but wrong for a piece like `"Hello World"` between two tab
12077
+ * stops, which needs a gap under the space. A binding renders one SIBLING
12078
+ * span per entry IN PLACE OF the piece's single `text` span: each entry's
12079
+ * `style` is the piece's own `style` (the same inline-block layout and
12080
+ * advance-width correction, so the line measures exactly as before), with
12081
+ * the underline stripped on a gap entry. They must be siblings, not spans
12082
+ * nested inside the piece span: an ancestor's underline is drawn through
12083
+ * every inline descendant, so a nested gap could not lose it. `text`/`style`
12084
+ * stay the continuous-underline fallback for a binding that does not
12085
+ * render this field.
12086
+ */
12087
+ words?: Array<{
12088
+ text: string;
12089
+ style: RunStyle;
12090
+ }>;
12091
+ }
12092
+ /** One `\n`-split line of a run's tabbed text. */
12093
+ interface TabbedLineRun {
12094
+ pieces: TabbedRunPiece[];
12095
+ }
12096
+ //#endregion
12097
+ //#region src/render/paragraph-types.d.ts
12098
+ /** A single rendered run within a paragraph. */
12099
+ interface ParagraphRun {
12100
+ text: string;
12101
+ style: RunStyle;
12102
+ /**
12103
+ * The run's hyperlink (`a:hlinkClick` / `a:hlinkMouseOver`), when it has one.
12104
+ * A binding renders the run inside an `<a href>` when {@link RunHyperlink.href}
12105
+ * is set, and routes {@link RunHyperlink.url} to its click handler otherwise
12106
+ * (internal `ppaction://` slide jumps).
12107
+ */
12108
+ hyperlink?: RunHyperlink;
12109
+ /**
12110
+ * An inline equation (`m:oMath`) this run renders INSTEAD of `text`, which is
12111
+ * empty for it. Emitted in the run sequence so the maths lands at its
12112
+ * authored position between the runs around it.
12113
+ */
12114
+ equation?: RunEquation;
12115
+ /**
12116
+ * The run's phonetic guide (`a:ruby`: furigana, pinyin, bopomofo), when it
12117
+ * has one. A binding renders `<ruby>{text}<rt style>{ruby.text}</rt></ruby>`;
12118
+ * a run carrying one is never split per word, so the annotation appears once
12119
+ * over the whole base run.
12120
+ *
12121
+ * Core parsed and saved ruby from the start, but `buildParagraphs` never read
12122
+ * it, so the annotation rendered in React alone.
12123
+ */
12124
+ ruby?: RunRuby;
12125
+ /**
12126
+ * Index of the `textSegments` entry (of the override list when one was
12127
+ * supplied) this run was built from.
12128
+ *
12129
+ * Shared splits one authored run into several per-word runs for PowerPoint's
12130
+ * metric tracking, so this is many-to-one. It is the seam a binding uses to
12131
+ * reach the facts the neutral model does not carry - React's find-match
12132
+ * highlights, per-script font spans, tab stops and ruby all key off the
12133
+ * originating segment - without regrouping the segments itself and drifting
12134
+ * from the grouping here.
12135
+ */
12136
+ segmentIndex?: number;
12137
+ /**
12138
+ * Offset of this run's `text` within its segment's RENDERED text (after field
12139
+ * substitution), so a caller holding per-segment character offsets can map
12140
+ * them onto the split runs.
12141
+ */
12142
+ charStart?: number;
12143
+ /**
12144
+ * Per-script (`a:ea`/`a:cs`/`a:sym`) font-fallback pieces for this run's
12145
+ * text, when a script it contains needs a font distinct from its own. A
12146
+ * binding renders these as nested spans in place of `text` (see
12147
+ * `text-script-fonts.ts`); absent for the common single-font case.
12148
+ */
12149
+ scriptRuns?: ScriptFontPiece[];
12150
+ /**
12151
+ * Measured tab-stop layout for this run's text, present when it contains an
12152
+ * authored `\t` and the paragraph declares explicit tab stops. A binding
12153
+ * renders these lines/pieces in place of `text`, honouring per-stop
12154
+ * alignment and leader glyphs a plain CSS `tab-size` cannot express (see
12155
+ * `text-tab-run-build.ts`). Absent for the common no-tab case.
12156
+ */
12157
+ tabLines?: TabbedLineRun[];
12158
+ /**
12159
+ * `a:rPr/@u="words"` word/gap pieces of a RUBY run's base text, present only
12160
+ * when such a run's underline is `words` (the ordinary per-word split emits
12161
+ * sibling runs instead; a tab piece carries its own `words`). Same shape as
12162
+ * `scriptRuns` and rendered the same way, in place of `text`: a word entry
12163
+ * carries the decoration for its own span, a gap entry is bare text. The
12164
+ * run's own `style` has the underline stripped when this is set (see
12165
+ * `paragraph-run-build.ts`).
12166
+ */
12167
+ underlineWordPieces?: ScriptFontPiece[];
12168
+ /**
12169
+ * `a:reflection` mirrored-sibling wrapper style for this run (the text-run
12170
+ * counterpart of a shape/picture's `ComputedEffectStyle.reflection`), or
12171
+ * `undefined` for the common no-reflection case. A binding renders a sibling
12172
+ * node just below the run's own, painted with the same text, positioned and
12173
+ * masked by this style - see `render/reflection.ts`'s
12174
+ * `getTextReflectionWrapperStyle`.
12175
+ */
12176
+ reflection?: ReflectionWrapperStyle;
12177
+ }
12178
+ /** A rendered paragraph: runs plus resolved bullet + hanging-indent metadata. */
12179
+ interface RenderParagraph {
12180
+ runs: ParagraphRun[];
12181
+ /** Bullet glyph / number to render before the runs (or `undefined`). */
12182
+ bulletMarker?: string;
12183
+ /** Picture marker rendered before runs, or fallback metadata when unresolved. */
12184
+ bulletPicture?: PictureBulletMarker;
12185
+ /** Inline style for the bullet marker (font / size / colour). */
12186
+ bulletStyle: RunStyle;
12187
+ /** `margin-left` in px for the whole paragraph (hanging-indent layout). */
12188
+ marginLeftPx?: number;
12189
+ /** `text-indent` in px (first-line / hanging indent). */
12190
+ textIndentPx?: number;
12191
+ /**
12192
+ * Per-paragraph `line-height` from this paragraph's own `a:pPr > a:lnSpc`.
12193
+ * A unitless multiplier for proportional spacing (`a:spcPct`) or a `"<n>pt"`
12194
+ * string for exact spacing (`a:spcPts`). Undefined when the paragraph does
12195
+ * not override spacing (binding keeps the body-level line-height).
12196
+ */
12197
+ lineHeight?: number | string;
12198
+ /** `margin-top` in px from this paragraph's `a:pPr > a:spcBef` (space before). */
12199
+ spaceBeforePx?: number;
12200
+ /** `margin-bottom` in px from this paragraph's `a:pPr > a:spcAft` (space after). */
12201
+ spaceAfterPx?: number;
12202
+ /**
12203
+ * `font-size` in px to set on the paragraph element so its CSS line boxes
12204
+ * are built from its OWN runs rather than the text body's default size.
12205
+ * Undefined when the paragraph already matches the body default.
12206
+ *
12207
+ * See `resolveParagraphStrutFontSize` for why this is needed: without it a
12208
+ * paragraph of small runs inside a larger-defaulting body is laid out on
12209
+ * too-tall lines and overflows its shape.
12210
+ */
12211
+ strutFontSizePx?: number;
12212
+ /**
12213
+ * True when the paragraph has no runs and no bullet: an authored blank line
12214
+ * (`<a:p><a:endParaRPr/></a:p>`).
12215
+ *
12216
+ * PowerPoint gives such a paragraph a full line box, which is how decks
12217
+ * space a heading away from the bullet list under it. A binding must render
12218
+ * something with height for it (a `<br>`), or the gap disappears and the
12219
+ * block reads as one dense run of text (issue #131, slides 13-14).
12220
+ */
12221
+ isEmpty?: boolean;
12222
+ /**
12223
+ * Indices of this paragraph's segments in the rendered segment list (the
12224
+ * override list when one was supplied), in authored order and INCLUDING the
12225
+ * bullet-marker segment the runs drop.
12226
+ *
12227
+ * The seam a binding uses to reach paragraph facts the neutral model does not
12228
+ * carry, without regrouping the segments itself and drifting from the
12229
+ * grouping here - which is exactly how React ended up splitting on every
12230
+ * `"\n"` and treating a soft `a:br` as a paragraph break.
12231
+ */
12232
+ segmentIndices: number[];
12233
+ /**
12234
+ * True when this paragraph resolves right-to-left (`a:pPr/@rtl`, or the text
12235
+ * body's default). A binding that mirrors its hanging indent for RTL reads
12236
+ * this; the direction itself is already in {@link paragraphStyle}.
12237
+ */
12238
+ rtl?: boolean;
12239
+ /**
12240
+ * Extra CSS for the paragraph box, beyond the margin / indent / spacing
12241
+ * fields above: this paragraph's own `text-align` (`a:pPr/@algn`), its BiDi
12242
+ * `direction`, and the kinsoku line-breaking rules (`@eaLnBrk`,
12243
+ * `@latinLnBrk`, `@hangingPunct`). Absent when the paragraph overrides none
12244
+ * of them, which is the common case.
12245
+ *
12246
+ * All three used to be resolved in React's private paragraph renderer only,
12247
+ * so a deck that centred one paragraph of a left-aligned body, or set CJK
12248
+ * break rules, rendered differently in the other four bindings.
12249
+ */
12250
+ paragraphStyle?: RunStyle;
12251
+ }
11928
12252
  //#endregion
11929
12253
  //#region src/render/inline-list-types.d.ts
11930
12254
  /** Current editor payload. Missing segments explicitly denotes plain-text fallback. */
@@ -11933,6 +12257,15 @@ interface InlineTextEditSnapshot {
11933
12257
  text: string;
11934
12258
  textSegments?: TextSegment[];
11935
12259
  }
12260
+ type InlineListReadResult = {
12261
+ kind: 'supported';
12262
+ snapshot: InlineTextEditSnapshot;
12263
+ paragraphs: RenderParagraph[];
12264
+ } | {
12265
+ kind: 'unsupported';
12266
+ reason: string;
12267
+ text: string;
12268
+ };
11936
12269
  //#endregion
11937
12270
  //#region src/render/text-field-substitution.d.ts
11938
12271
  /**
@@ -12179,6 +12512,12 @@ interface ShapeAdjustmentDragState {
12179
12512
  */
12180
12513
  startAdjustments?: Record<string, number>;
12181
12514
  }
12515
+ interface CollaborationShellState {
12516
+ canEdit: boolean;
12517
+ status: ConnectionStatus$1;
12518
+ remoteUsers: readonly SanitizedPresence[];
12519
+ connectedCount: number;
12520
+ }
12182
12521
  //#endregion
12183
12522
  //#region src/render/collaboration-text-codec.d.ts
12184
12523
  /**
@@ -12203,6 +12542,62 @@ interface YTextLike {
12203
12542
  toString: () => string;
12204
12543
  }
12205
12544
  //#endregion
12545
+ //#region src/render/collaboration-text-merge.d.ts
12546
+ /** Y.Text surface needed for in-place edits (delete/format on top of insert). */
12547
+ interface YTextEditableLike extends YTextLike {
12548
+ delete: (index: number, length: number) => void;
12549
+ format: (index: number, length: number, attributes: Record<string, string | null>) => void;
12550
+ }
12551
+ //#endregion
12552
+ //#region src/render/collaboration-text-positions.d.ts
12553
+ interface TextPositionCell {
12554
+ index: number;
12555
+ left?: TextPositionCell;
12556
+ right?: TextPositionCell;
12557
+ }
12558
+ interface TrackedTextPosition {
12559
+ /** Internal identity, shared by snapshots that observed the same character. */
12560
+ readonly cell: TextPositionCell;
12561
+ readonly association: number;
12562
+ }
12563
+ //#endregion
12564
+ //#region src/render/collaboration-text-session-delta.d.ts
12565
+ /** Browser edit range mapped to the editor's pre-input encoded coordinates. */
12566
+ interface LocalTextReplacement {
12567
+ from: number;
12568
+ to: number;
12569
+ }
12570
+ /** Desired UTF-16 units mapped to the editor's previously observed identities. */
12571
+ interface TextSessionCorrespondence {
12572
+ readonly retainedIndices: readonly (number | null)[];
12573
+ /** Old carriers for known paragraph attributes, independently of character identity. */
12574
+ readonly paragraphSources?: readonly (number | null)[];
12575
+ }
12576
+ type LocalTextEdit = LocalTextReplacement | TextSessionCorrespondence;
12577
+ //#endregion
12578
+ //#region src/render/collaboration-text-session.d.ts
12579
+ /** Supplied by the binding's existing Yjs runtime, bound to this exact Y.Text. */
12580
+ interface TextSessionPositions<Position> {
12581
+ capture: (index: number, association: number) => Position;
12582
+ resolve: (position: Position) => number | null;
12583
+ /** Synchronize tracked positions once per batch, including in-transaction writes. */
12584
+ refresh?: () => boolean | void;
12585
+ /** Release only resources created for this session. */
12586
+ dispose?: () => void;
12587
+ }
12588
+ /** Opaque acknowledgement identity for an exact remote snapshot painted by an adapter. */
12589
+ interface CollaborationTextSnapshot {
12590
+ readonly delta: readonly DeltaOp[];
12591
+ }
12592
+ interface CollaborationTextSession {
12593
+ applyLocalDelta: (delta: readonly DeltaOp[], edit?: LocalTextEdit) => boolean;
12594
+ readMerged: () => CollaborationTextSnapshot | undefined;
12595
+ adoptMerged: (snapshot: CollaborationTextSnapshot) => boolean;
12596
+ /** Capture an offset in the last painted/local draft, not the newer remote string. */
12597
+ bookmark: (index: number, association: number) => () => number | null;
12598
+ dispose: () => void;
12599
+ }
12600
+ //#endregion
12206
12601
  //#region src/render/collaboration-sync.d.ts
12207
12602
  interface YMapLike {
12208
12603
  get: (key: string) => unknown;
@@ -12236,6 +12631,8 @@ interface YjsFactories {
12236
12631
  createMap: () => YMapLike;
12237
12632
  createArray: () => YArrayLike;
12238
12633
  createText: () => YTextLike;
12634
+ /** Track character identities using the binding's existing Yjs runtime. */
12635
+ createTextPositions?: (text: YTextEditableLike) => TextSessionPositions<TrackedTextPosition>;
12239
12636
  }
12240
12637
  //#endregion
12241
12638
  //#region src/render/collaboration-live-patch-target.d.ts
@@ -12252,7 +12649,20 @@ interface LiveTextSource {
12252
12649
  textSegments?: TextSegment[];
12253
12650
  textStyle?: TextStyle;
12254
12651
  }
12652
+ //#endregion
12653
+ //#region src/render/collaboration-text-target.d.ts
12654
+ interface CollaborationInlineSnapshot extends CollaborationTextSnapshot {
12655
+ readonly inline: InlineTextEditSnapshot;
12656
+ }
12657
+ /** A mounted editor owns this handle, never the document or its provider. */
12658
+ interface CollaborationTextTarget extends CollaborationTextSession {
12659
+ readMerged: () => CollaborationInlineSnapshot | undefined;
12660
+ /** A bookmark follows character identity rather than a mutable numeric offset. */
12661
+ bookmark: (index: number, association: number) => () => number | null;
12662
+ }
12255
12663
  interface CollaborationLivePatcher {
12664
+ /** Bind a mounted native editor; its handle must be disposed on unmount. */
12665
+ beginTextEdit?: (slideId: string | undefined, elementId: string, onChange?: () => void, ownsModel?: (element: PptxElement) => boolean) => CollaborationTextTarget | undefined;
12256
12666
  /** Attach a live doc (or `null` to go dormant). Pending patches are dropped. */
12257
12667
  configure: (doc: YDocLike | null, factories: YjsFactories | null,
12258
12668
  /** Publish synchronously when the host may revoke write readiness at any time. */
@@ -13594,6 +14004,23 @@ interface ToolbarProps {
13594
14004
  onQuickCommand?: (id: string) => void;
13595
14005
  }
13596
14006
  //#endregion
14007
+ //#region src/viewer/hooks/useInlineEditingState.d.ts
14008
+ interface PendingInlineEditReader {
14009
+ elementId: string;
14010
+ read: () => InlineListReadResult;
14011
+ }
14012
+ interface InlineEditingState {
14013
+ inlineEditingElementId: string | null;
14014
+ setInlineEditingElementId: Dispatch<SetStateAction<string | null>>;
14015
+ inlineEditingText: string;
14016
+ setInlineEditingText: (value: SetStateAction<string>, snapshot?: InlineTextEditSnapshot) => void;
14017
+ inlineEditingElementIdRef: MutableRefObject<string | null>;
14018
+ inlineEditingTextRef: MutableRefObject<string>;
14019
+ inlineEditingSnapshotRef: MutableRefObject<InlineTextEditSnapshot | undefined>;
14020
+ inlineEditingReaderRef?: MutableRefObject<PendingInlineEditReader | undefined>;
14021
+ registerInlineEditReader?: (elementId: string, read: () => InlineListReadResult) => () => void;
14022
+ }
14023
+ //#endregion
13597
14024
  //#region src/viewer/hooks/canvas-interaction-types.d.ts
13598
14025
  /**
13599
14026
  * Shared type for canvas interaction handler signatures.
@@ -13790,6 +14217,7 @@ interface UseCanvasInteractionsInput {
13790
14217
  inlineEditingText: string;
13791
14218
  inlineEditingTextRef?: React.MutableRefObject<string>;
13792
14219
  inlineEditingSnapshotRef?: React.MutableRefObject<InlineTextEditSnapshot | undefined>;
14220
+ inlineEditingReaderRef?: React.MutableRefObject<PendingInlineEditReader | undefined>;
13793
14221
  ops: ElementOperations;
13794
14222
  history: EditorHistoryResult;
13795
14223
  presentationHandleAction: (action: Record<string, unknown>) => void;
@@ -14525,17 +14953,6 @@ interface ViewerDialogsResult {
14525
14953
  //#region src/viewer/hooks/useViewerDialogs.d.ts
14526
14954
  declare function useViewerDialogs(input: UseViewerDialogsInput): ViewerDialogsResult;
14527
14955
  //#endregion
14528
- //#region src/viewer/hooks/useInlineEditingState.d.ts
14529
- interface InlineEditingState {
14530
- inlineEditingElementId: string | null;
14531
- setInlineEditingElementId: Dispatch<SetStateAction<string | null>>;
14532
- inlineEditingText: string;
14533
- setInlineEditingText: (value: SetStateAction<string>, snapshot?: InlineTextEditSnapshot) => void;
14534
- inlineEditingElementIdRef: MutableRefObject<string | null>;
14535
- inlineEditingTextRef: MutableRefObject<string>;
14536
- inlineEditingSnapshotRef: MutableRefObject<InlineTextEditSnapshot | undefined>;
14537
- }
14538
- //#endregion
14539
14956
  //#region src/viewer/hooks/viewer-core-state-types.d.ts
14540
14957
  /**
14541
14958
  * Input parameters for the {@link useViewerCoreState} hook.
@@ -14982,6 +15399,9 @@ interface ZoomViewport {
14982
15399
  editorScale: number;
14983
15400
  }
14984
15401
  interface SlideCanvasProps {
15402
+ /** The viewer-owned live channel; absent for static/custom non-collaborative canvases. */
15403
+ livePatcher?: CollaborationLivePatcher;
15404
+ registerInlineEditReader?: (elementId: string, read: () => InlineListReadResult) => () => void;
14985
15405
  /** Native image paste commands supplied by the stock or headless editor. */
14986
15406
  imagePaste?: CanvasImagePasteHandlers;
14987
15407
  activeSlide: PptxSlide | undefined;
@@ -15178,8 +15598,10 @@ interface UseAutosaveResult {
15178
15598
  }
15179
15599
  declare function useAutosave(input: UseAutosaveInput): UseAutosaveResult;
15180
15600
  //#endregion
15181
- //#region src/viewer/hooks/useViewerBuildingBlocks.d.ts
15601
+ //#region src/viewer/hooks/useViewerBuildingBlocks-types.d.ts
15182
15602
  interface UseViewerBuildingBlocksInput extends ViewportFitOptions {
15603
+ /** Optional collaboration, including a host-owned document and presence session. */
15604
+ collaboration?: CollaborationConfig;
15183
15605
  /** PPTX content as ArrayBuffer/Uint8Array, or null/undefined while no file is loaded. */
15184
15606
  content: ArrayBuffer | Uint8Array | null | undefined;
15185
15607
  /** Whether editing actions are enabled. Defaults to false (view-only). */
@@ -15195,7 +15617,7 @@ interface UseViewerBuildingBlocksInput extends ViewportFitOptions {
15195
15617
  /** Host-supplied list of toolbar buttons/ribbon tabs to hide. */
15196
15618
  hiddenActions?: readonly ToolbarActionId[];
15197
15619
  /** Imperative handle ref, exposing the same `PowerPointViewerHandle` API `PowerPointViewer` does. */
15198
- handle?: React.ForwardedRef<PowerPointViewerHandle>;
15620
+ handle?: React$1.ForwardedRef<PowerPointViewerHandle>;
15199
15621
  onContentChange?: (content: Uint8Array) => void;
15200
15622
  onDirtyChange?: (dirty: boolean) => void;
15201
15623
  onActiveSlideChange?: (index: number) => void;
@@ -15211,6 +15633,15 @@ interface UseViewerBuildingBlocksInput extends ViewportFitOptions {
15211
15633
  onOpenShareDialog?: () => void;
15212
15634
  }
15213
15635
  interface ViewerBuildingBlocksResult {
15636
+ /** Connection and presence state for a custom status bar, or null when disabled. */
15637
+ collaboration: CollaborationContextValue | null;
15638
+ /**
15639
+ * Effective edit permission plus connection/presence counts, in the shape
15640
+ * every binding's custom shell receives (Vue/Svelte `shellState`, Angular
15641
+ * `state()`, Vanilla `getState()`); pass it to
15642
+ * `describeCollaborationShellState` for a localised status line.
15643
+ */
15644
+ shellState: CollaborationShellState;
15214
15645
  /** Flat, self-contained props for the standalone `<Toolbar>` component. */
15215
15646
  toolbarProps: ToolbarProps;
15216
15647
  /** Flat, self-contained props for the standalone `<SlideCanvas>` component. */
@@ -15224,6 +15655,8 @@ interface ViewerBuildingBlocksResult {
15224
15655
  /** Current autosave-to-localStorage recovery status. */
15225
15656
  autosaveStatus: AutosaveStatus;
15226
15657
  }
15658
+ //#endregion
15659
+ //#region src/viewer/hooks/useViewerBuildingBlocks.d.ts
15227
15660
  declare function useViewerBuildingBlocks(input: UseViewerBuildingBlocksInput): ViewerBuildingBlocksResult;
15228
15661
 
15229
15662
  //#region src/viewer/hooks/useThemeSwitching.d.ts
@@ -15946,6 +16379,7 @@ interface UseSerializeInput {
15946
16379
  inlineEditingElementIdRef: React$1.MutableRefObject<string | null>;
15947
16380
  inlineEditingTextRef: React$1.MutableRefObject<string>;
15948
16381
  inlineEditingSnapshotRef?: React$1.MutableRefObject<InlineTextEditSnapshot | undefined>;
16382
+ inlineEditingReaderRef?: React$1.MutableRefObject<PendingInlineEditReader | undefined>;
15949
16383
  transformCommittedText?: (text: string) => string;
15950
16384
  password?: string;
15951
16385
  /**