ooxml-core 1.19.2 → 1.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.
Files changed (352) hide show
  1. package/README.md +47 -1
  2. package/dist/{PptxHandler-6TNIQ7S5.cjs → PptxHandler-DNSXWTQV.cjs} +3 -3
  3. package/dist/{PptxHandler-2V4PQL6O.mjs → PptxHandler-FSKKPZZC.mjs} +3 -3
  4. package/dist/PptxHandler-H7MEWJJJ.mjs +4 -0
  5. package/dist/{PresentationBuilder-G7MPEGXJ.mjs → PresentationBuilder-7TSENZTX.mjs} +2 -2
  6. package/dist/{PresentationBuilder-RM52LCVN.cjs → PresentationBuilder-A5NI35VN.cjs} +5 -5
  7. package/dist/{PresentationBuilder-HQ6C7L4V.mjs → PresentationBuilder-RIJWQSEU.mjs} +3 -3
  8. package/dist/automation/docx-forms.d.ts +26 -0
  9. package/dist/automation/docx-forms.d.ts.map +1 -0
  10. package/dist/automation/index.cjs +6280 -2506
  11. package/dist/automation/index.d.ts +1 -0
  12. package/dist/automation/index.d.ts.map +1 -1
  13. package/dist/automation/index.mjs +6277 -2507
  14. package/dist/automation/xlsx-read.d.ts +56 -0
  15. package/dist/automation/xlsx-read.d.ts.map +1 -0
  16. package/dist/automation/xlsx.d.ts +105 -4
  17. package/dist/automation/xlsx.d.ts.map +1 -1
  18. package/dist/chart/axis-range.d.ts.map +1 -1
  19. package/dist/chart/bubble-radius.d.ts +0 -5
  20. package/dist/chart/bubble-radius.d.ts.map +1 -1
  21. package/dist/chart/extent.d.ts +9 -0
  22. package/dist/chart/extent.d.ts.map +1 -0
  23. package/dist/chart/histogram-binning.d.ts.map +1 -1
  24. package/dist/chart/index.cjs +56 -18
  25. package/dist/chart/index.mjs +56 -18
  26. package/dist/chart/render/chart-svg-cartesian.d.ts.map +1 -1
  27. package/dist/chart/render/chart-svg-legend.d.ts.map +1 -1
  28. package/dist/chart/render/chart-view-ex.d.ts.map +1 -1
  29. package/dist/chart/render/chart-view.d.ts.map +1 -1
  30. package/dist/chart/trendline-fit.d.ts.map +1 -1
  31. package/dist/{chunk-NYTR4UZ5.cjs → chunk-4LZIUJI3.cjs} +52 -12
  32. package/dist/{chunk-SLNQNVQM.mjs → chunk-4QPOJCJG.mjs} +45 -8
  33. package/dist/{chunk-XTSHZGSM.mjs → chunk-6IIMI5RS.mjs} +52 -12
  34. package/dist/{chunk-TJPUAUWL.mjs → chunk-BA7Z6ATM.mjs} +9 -195
  35. package/dist/{chunk-JUABSM7C.mjs → chunk-DLFMCZZT.mjs} +1 -1
  36. package/dist/{chunk-M4XLF4R7.mjs → chunk-GBKBR4CX.mjs} +20 -8
  37. package/dist/{chunk-R5FIHHGB.cjs → chunk-HL3FBJ6X.cjs} +1648 -1205
  38. package/dist/{chunk-ZJ2OKIJN.mjs → chunk-LF5E5ZOH.mjs} +642 -199
  39. package/dist/{chunk-4FTUAD2B.mjs → chunk-Q5PKBQXH.mjs} +766 -202
  40. package/dist/{chunk-M6GDBVQ7.mjs → chunk-VQF6HQEE.mjs} +1 -1
  41. package/dist/collab/embedding.d.ts +103 -0
  42. package/dist/collab/embedding.d.ts.map +1 -0
  43. package/dist/collab/index.cjs +450 -342
  44. package/dist/collab/index.d.ts +1 -0
  45. package/dist/collab/index.d.ts.map +1 -1
  46. package/dist/collab/index.mjs +443 -343
  47. package/dist/color/theme-palette.d.ts +5 -1
  48. package/dist/color/theme-palette.d.ts.map +1 -1
  49. package/dist/crypto/index.cjs +27 -2
  50. package/dist/crypto/index.mjs +27 -2
  51. package/dist/diagram/index.cjs +31 -3
  52. package/dist/diagram/index.mjs +31 -3
  53. package/dist/docx/block-parser.d.ts.map +1 -1
  54. package/dist/docx/cell-blocks.d.ts +7 -1
  55. package/dist/docx/cell-blocks.d.ts.map +1 -1
  56. package/dist/docx/content-control-edit.d.ts +14 -0
  57. package/dist/docx/content-control-edit.d.ts.map +1 -1
  58. package/dist/docx/content-control-model.d.ts +8 -0
  59. package/dist/docx/content-control-model.d.ts.map +1 -1
  60. package/dist/docx/content-control-values.d.ts +20 -0
  61. package/dist/docx/content-control-values.d.ts.map +1 -0
  62. package/dist/docx/content-control.d.ts +7 -1
  63. package/dist/docx/content-control.d.ts.map +1 -1
  64. package/dist/docx/element-order.d.ts +10 -5
  65. package/dist/docx/element-order.d.ts.map +1 -1
  66. package/dist/docx/embedded.cjs +3861 -1379
  67. package/dist/docx/embedded.mjs +3861 -1379
  68. package/dist/docx/field-instruction.d.ts +22 -0
  69. package/dist/docx/field-instruction.d.ts.map +1 -0
  70. package/dist/docx/form-field-model.d.ts +48 -0
  71. package/dist/docx/form-field-model.d.ts.map +1 -0
  72. package/dist/docx/form-fields.d.ts +31 -0
  73. package/dist/docx/form-fields.d.ts.map +1 -0
  74. package/dist/docx/form-fill-fields.d.ts +61 -0
  75. package/dist/docx/form-fill-fields.d.ts.map +1 -0
  76. package/dist/docx/form-fill-labels.d.ts +8 -0
  77. package/dist/docx/form-fill-labels.d.ts.map +1 -0
  78. package/dist/docx/form-fill-sites.d.ts +59 -0
  79. package/dist/docx/form-fill-sites.d.ts.map +1 -0
  80. package/dist/docx/form-fill-values.d.ts +28 -0
  81. package/dist/docx/form-fill-values.d.ts.map +1 -0
  82. package/dist/docx/form-fill-write.d.ts +26 -0
  83. package/dist/docx/form-fill-write.d.ts.map +1 -0
  84. package/dist/docx/glossary.d.ts +15 -0
  85. package/dist/docx/glossary.d.ts.map +1 -0
  86. package/dist/docx/index.cjs +5929 -3153
  87. package/dist/docx/index.d.ts +7 -0
  88. package/dist/docx/index.d.ts.map +1 -1
  89. package/dist/docx/index.mjs +5913 -3154
  90. package/dist/docx/inline-annotations.d.ts +21 -0
  91. package/dist/docx/inline-annotations.d.ts.map +1 -0
  92. package/dist/docx/inline-container-markers.d.ts +14 -0
  93. package/dist/docx/inline-container-markers.d.ts.map +1 -0
  94. package/dist/docx/inline-containers.d.ts +54 -0
  95. package/dist/docx/inline-containers.d.ts.map +1 -0
  96. package/dist/docx/inline-form-field-bookmarks.d.ts +15 -0
  97. package/dist/docx/inline-form-field-bookmarks.d.ts.map +1 -0
  98. package/dist/docx/inline-marker-positions.d.ts +15 -0
  99. package/dist/docx/inline-marker-positions.d.ts.map +1 -0
  100. package/dist/docx/inline-markers.d.ts +63 -0
  101. package/dist/docx/inline-markers.d.ts.map +1 -0
  102. package/dist/docx/inline-slots.d.ts +24 -0
  103. package/dist/docx/inline-slots.d.ts.map +1 -0
  104. package/dist/docx/layout/adapter.d.ts.map +1 -1
  105. package/dist/docx/layout/index.cjs +1176 -563
  106. package/dist/docx/layout/index.d.ts +2 -1
  107. package/dist/docx/layout/index.d.ts.map +1 -1
  108. package/dist/docx/layout/index.mjs +1175 -564
  109. package/dist/docx/layout/input.d.ts +5 -1
  110. package/dist/docx/layout/input.d.ts.map +1 -1
  111. package/dist/docx/layout/page-style-refs.d.ts +21 -0
  112. package/dist/docx/layout/page-style-refs.d.ts.map +1 -0
  113. package/dist/docx/layout/paragraph-fragments.d.ts.map +1 -1
  114. package/dist/docx/layout/result.d.ts +1 -0
  115. package/dist/docx/layout/result.d.ts.map +1 -1
  116. package/dist/docx/layout/tab-stops.d.ts +8 -1
  117. package/dist/docx/layout/tab-stops.d.ts.map +1 -1
  118. package/dist/docx/load/index.cjs +3969 -1487
  119. package/dist/docx/load/index.mjs +3969 -1487
  120. package/dist/docx/model-run.d.ts +24 -2
  121. package/dist/docx/model-run.d.ts.map +1 -1
  122. package/dist/docx/model.d.ts +5 -0
  123. package/dist/docx/model.d.ts.map +1 -1
  124. package/dist/docx/numbering-format.d.ts.map +1 -1
  125. package/dist/docx/parse-warnings.d.ts.map +1 -1
  126. package/dist/docx/parse.d.ts.map +1 -1
  127. package/dist/docx/run-segmentation.d.ts +11 -0
  128. package/dist/docx/run-segmentation.d.ts.map +1 -0
  129. package/dist/docx/save.d.ts.map +1 -1
  130. package/dist/docx/section-model.d.ts +5 -0
  131. package/dist/docx/section-model.d.ts.map +1 -1
  132. package/dist/docx/sections.d.ts +4 -2
  133. package/dist/docx/sections.d.ts.map +1 -1
  134. package/dist/docx/settings.d.ts +9 -0
  135. package/dist/docx/settings.d.ts.map +1 -1
  136. package/dist/docx/special-characters.d.ts +34 -0
  137. package/dist/docx/special-characters.d.ts.map +1 -0
  138. package/dist/docx/style-ref-fields.d.ts +40 -0
  139. package/dist/docx/style-ref-fields.d.ts.map +1 -0
  140. package/dist/docx/style-ref.d.ts +85 -0
  141. package/dist/docx/style-ref.d.ts.map +1 -0
  142. package/dist/docx/table-model.d.ts +2 -2
  143. package/dist/docx/table-model.d.ts.map +1 -1
  144. package/dist/docx/ui/break-note-schema.d.ts.map +1 -1
  145. package/dist/docx/ui/content-control-commands.d.ts +20 -8
  146. package/dist/docx/ui/content-control-commands.d.ts.map +1 -1
  147. package/dist/docx/ui/content-control-guard.d.ts +4 -1
  148. package/dist/docx/ui/content-control-guard.d.ts.map +1 -1
  149. package/dist/docx/ui/content-control-paste.d.ts +23 -0
  150. package/dist/docx/ui/content-control-paste.d.ts.map +1 -0
  151. package/dist/docx/ui/content-control-rows.d.ts +15 -0
  152. package/dist/docx/ui/content-control-rows.d.ts.map +1 -0
  153. package/dist/docx/ui/content-control-sources.d.ts +12 -0
  154. package/dist/docx/ui/content-control-sources.d.ts.map +1 -0
  155. package/dist/docx/ui/content-control-spans.d.ts +29 -6
  156. package/dist/docx/ui/content-control-spans.d.ts.map +1 -1
  157. package/dist/docx/ui/content-control-temporary.d.ts +10 -0
  158. package/dist/docx/ui/content-control-temporary.d.ts.map +1 -0
  159. package/dist/docx/ui/form-field-commands.d.ts +41 -0
  160. package/dist/docx/ui/form-field-commands.d.ts.map +1 -0
  161. package/dist/docx/ui/form-field-guard.d.ts +24 -0
  162. package/dist/docx/ui/form-field-guard.d.ts.map +1 -0
  163. package/dist/docx/ui/form-text-blank.d.ts +18 -0
  164. package/dist/docx/ui/form-text-blank.d.ts.map +1 -0
  165. package/dist/docx/ui/index.cjs +9276 -7132
  166. package/dist/docx/ui/index.d.ts +5 -0
  167. package/dist/docx/ui/index.d.ts.map +1 -1
  168. package/dist/docx/ui/index.mjs +9259 -7137
  169. package/dist/docx/ui/positional-tab-input.d.ts +7 -0
  170. package/dist/docx/ui/positional-tab-input.d.ts.map +1 -0
  171. package/dist/docx/ui/run-compare.d.ts.map +1 -1
  172. package/dist/docx/ui/run-extra-mark.d.ts +1 -1
  173. package/dist/docx/ui/run-extra-mark.d.ts.map +1 -1
  174. package/dist/docx/ui/schema-marks.d.ts +1 -1
  175. package/dist/docx/ui/schema-marks.d.ts.map +1 -1
  176. package/dist/docx/ui/symbol-font.d.ts +4 -0
  177. package/dist/docx/ui/symbol-font.d.ts.map +1 -0
  178. package/dist/docx/ui/yjs-collaboration.d.ts +12 -1
  179. package/dist/docx/ui/yjs-collaboration.d.ts.map +1 -1
  180. package/dist/docx/write-block-placement.d.ts +7 -0
  181. package/dist/docx/write-block-placement.d.ts.map +1 -1
  182. package/dist/docx/write-content-control.d.ts +6 -0
  183. package/dist/docx/write-content-control.d.ts.map +1 -1
  184. package/dist/docx/write-header-footer.d.ts +6 -2
  185. package/dist/docx/write-header-footer.d.ts.map +1 -1
  186. package/dist/docx/write-inline.d.ts +12 -16
  187. package/dist/docx/write-inline.d.ts.map +1 -1
  188. package/dist/docx/write-paragraph.d.ts.map +1 -1
  189. package/dist/docx/write-revisions.d.ts.map +1 -1
  190. package/dist/docx/write-run.d.ts.map +1 -1
  191. package/dist/docx/write-section-properties.d.ts +5 -0
  192. package/dist/docx/write-section-properties.d.ts.map +1 -0
  193. package/dist/docx/write-sections.d.ts.map +1 -1
  194. package/dist/docx/write-table-controls.d.ts +15 -0
  195. package/dist/docx/write-table-controls.d.ts.map +1 -0
  196. package/dist/docx/write-table-properties.d.ts.map +1 -1
  197. package/dist/docx/write-table.d.ts.map +1 -1
  198. package/dist/docx/write.d.ts.map +1 -1
  199. package/dist/docx/xml.d.ts +6 -0
  200. package/dist/docx/xml.d.ts.map +1 -1
  201. package/dist/drawingml/index.cjs +31 -3
  202. package/dist/drawingml/index.mjs +31 -3
  203. package/dist/index.cjs +102 -26
  204. package/dist/index.mjs +102 -26
  205. package/dist/math/index.cjs +27 -2
  206. package/dist/math/index.mjs +27 -2
  207. package/dist/opc/index.cjs +51 -11
  208. package/dist/opc/index.mjs +51 -11
  209. package/dist/opc/zip-folders.d.ts +11 -0
  210. package/dist/opc/zip-folders.d.ts.map +1 -0
  211. package/dist/opc/zip-limits.d.ts +9 -0
  212. package/dist/opc/zip-limits.d.ts.map +1 -1
  213. package/dist/pptx/automation/index.cjs +995 -462
  214. package/dist/pptx/automation/index.d.ts +2 -2
  215. package/dist/pptx/automation/index.mjs +6 -6
  216. package/dist/pptx/chunks/{index-Bqm-jFG-.d.ts → index-CPhsd7Df.d.ts} +7580 -7507
  217. package/dist/pptx/chunks/index-CPhsd7Df.d.ts.map +1 -0
  218. package/dist/pptx/chunks/{index-B9x557hr.d.ts → index-Q5mM8kIR.d.ts} +2 -2
  219. package/dist/pptx/chunks/{index-B9x557hr.d.ts.map → index-Q5mM8kIR.d.ts.map} +1 -1
  220. package/dist/pptx/cli/index.cjs +770 -238
  221. package/dist/pptx/cli/index.mjs +5 -5
  222. package/dist/pptx/converter/index.cjs +12 -3
  223. package/dist/pptx/converter/index.d.ts +1 -1
  224. package/dist/pptx/converter/index.mjs +3 -3
  225. package/dist/pptx/editor/render/find-replace.cjs +14 -14
  226. package/dist/pptx/editor/render/find-replace.d.ts +1 -1
  227. package/dist/pptx/editor/render/find-replace.mjs +1 -1
  228. package/dist/pptx/editor/render/slide-operations.cjs +8 -8
  229. package/dist/pptx/editor/render/slide-operations.mjs +2 -2
  230. package/dist/pptx/index.cjs +1099 -628
  231. package/dist/pptx/index.d.ts +3 -3
  232. package/dist/pptx/index.mjs +6 -6
  233. package/dist/pptx/signature-node/index.cjs +20 -8
  234. package/dist/pptx/signature-node/index.mjs +2 -2
  235. package/dist/teams/index.cjs +105 -70
  236. package/dist/teams/index.mjs +105 -70
  237. package/dist/text/text-diff.d.ts +15 -0
  238. package/dist/text/text-diff.d.ts.map +1 -0
  239. package/dist/visio/index.cjs +220 -46
  240. package/dist/visio/index.mjs +220 -46
  241. package/dist/visio/ui/contract.d.ts +8 -2
  242. package/dist/visio/ui/contract.d.ts.map +1 -1
  243. package/dist/visio/ui/index.cjs +227 -50
  244. package/dist/visio/ui/index.mjs +227 -50
  245. package/dist/xlsx/collab/index.cjs +8 -3
  246. package/dist/xlsx/collab/index.mjs +8 -3
  247. package/dist/xlsx/compare/cells.d.ts +22 -0
  248. package/dist/xlsx/compare/cells.d.ts.map +1 -0
  249. package/dist/xlsx/compare/compare.d.ts +12 -0
  250. package/dist/xlsx/compare/compare.d.ts.map +1 -0
  251. package/dist/xlsx/compare/conditional.d.ts +7 -0
  252. package/dist/xlsx/compare/conditional.d.ts.map +1 -0
  253. package/dist/xlsx/compare/format-key.d.ts +34 -0
  254. package/dist/xlsx/compare/format-key.d.ts.map +1 -0
  255. package/dist/xlsx/compare/group.d.ts +8 -0
  256. package/dist/xlsx/compare/group.d.ts.map +1 -0
  257. package/dist/xlsx/compare/index.d.ts +5 -0
  258. package/dist/xlsx/compare/index.d.ts.map +1 -0
  259. package/dist/xlsx/compare/rich-text.d.ts +7 -0
  260. package/dist/xlsx/compare/rich-text.d.ts.map +1 -0
  261. package/dist/xlsx/compare/sheets.d.ts +22 -0
  262. package/dist/xlsx/compare/sheets.d.ts.map +1 -0
  263. package/dist/xlsx/compare/structure.d.ts +11 -0
  264. package/dist/xlsx/compare/structure.d.ts.map +1 -0
  265. package/dist/xlsx/compare/text.d.ts +8 -0
  266. package/dist/xlsx/compare/text.d.ts.map +1 -0
  267. package/dist/xlsx/compare/types.d.ts +173 -0
  268. package/dist/xlsx/compare/types.d.ts.map +1 -0
  269. package/dist/xlsx/edit/cell-values.d.ts.map +1 -1
  270. package/dist/xlsx/edit/clipboard-html.d.ts.map +1 -1
  271. package/dist/xlsx/edit/clipboard-text.d.ts.map +1 -1
  272. package/dist/xlsx/edit/clipboard.d.ts.map +1 -1
  273. package/dist/xlsx/edit/clone-cell.d.ts +9 -0
  274. package/dist/xlsx/edit/clone-cell.d.ts.map +1 -0
  275. package/dist/xlsx/edit/dimensions.d.ts.map +1 -1
  276. package/dist/xlsx/edit/history-rows.d.ts +7 -0
  277. package/dist/xlsx/edit/history-rows.d.ts.map +1 -0
  278. package/dist/xlsx/edit/history.d.ts +19 -4
  279. package/dist/xlsx/edit/history.d.ts.map +1 -1
  280. package/dist/xlsx/edit/outline.d.ts.map +1 -1
  281. package/dist/xlsx/edit/row-autofit.d.ts.map +1 -1
  282. package/dist/xlsx/edit/timelines.d.ts.map +1 -1
  283. package/dist/xlsx/formula/change-areas.d.ts +9 -0
  284. package/dist/xlsx/formula/change-areas.d.ts.map +1 -0
  285. package/dist/xlsx/formula/engine-prepare.d.ts +8 -0
  286. package/dist/xlsx/formula/engine-prepare.d.ts.map +1 -1
  287. package/dist/xlsx/formula/engine.d.ts.map +1 -1
  288. package/dist/xlsx/formula/spill.d.ts +5 -1
  289. package/dist/xlsx/formula/spill.d.ts.map +1 -1
  290. package/dist/xlsx/index.cjs +2551 -1208
  291. package/dist/xlsx/index.d.ts +1 -0
  292. package/dist/xlsx/index.d.ts.map +1 -1
  293. package/dist/xlsx/index.mjs +2544 -1209
  294. package/dist/xlsx/layout/cell-view.d.ts.map +1 -1
  295. package/dist/xlsx/layout/navigate.d.ts.map +1 -1
  296. package/dist/xlsx/layout/style-view.d.ts +5 -0
  297. package/dist/xlsx/layout/style-view.d.ts.map +1 -1
  298. package/dist/xlsx/load/csv-dates.d.ts +22 -0
  299. package/dist/xlsx/load/csv-dates.d.ts.map +1 -0
  300. package/dist/xlsx/load/csv-import.d.ts +64 -0
  301. package/dist/xlsx/load/csv-import.d.ts.map +1 -0
  302. package/dist/xlsx/load/csv-separators.d.ts +13 -0
  303. package/dist/xlsx/load/csv-separators.d.ts.map +1 -0
  304. package/dist/xlsx/load/csv-traits.d.ts +20 -0
  305. package/dist/xlsx/load/csv-traits.d.ts.map +1 -0
  306. package/dist/xlsx/load/csv.d.ts +8 -4
  307. package/dist/xlsx/load/csv.d.ts.map +1 -1
  308. package/dist/xlsx/load/detect.d.ts +13 -0
  309. package/dist/xlsx/load/detect.d.ts.map +1 -1
  310. package/dist/xlsx/load/errors.d.ts +1 -0
  311. package/dist/xlsx/load/errors.d.ts.map +1 -1
  312. package/dist/xlsx/load/index.cjs +598 -98
  313. package/dist/xlsx/load/index.d.ts +3 -1
  314. package/dist/xlsx/load/index.d.ts.map +1 -1
  315. package/dist/xlsx/load/index.mjs +597 -99
  316. package/dist/xlsx/numfmt/format.d.ts +8 -0
  317. package/dist/xlsx/numfmt/format.d.ts.map +1 -1
  318. package/dist/xlsx/numfmt/input-date.d.ts +2 -0
  319. package/dist/xlsx/numfmt/input-date.d.ts.map +1 -1
  320. package/dist/xlsx/pivot/cache-xml.d.ts.map +1 -1
  321. package/dist/xlsx/pivot/groups.d.ts.map +1 -1
  322. package/dist/xlsx/read/index.d.ts +2 -1
  323. package/dist/xlsx/read/index.d.ts.map +1 -1
  324. package/dist/xlsx/read/limits.d.ts +50 -0
  325. package/dist/xlsx/read/limits.d.ts.map +1 -0
  326. package/dist/xlsx/read/load.d.ts +11 -1
  327. package/dist/xlsx/read/load.d.ts.map +1 -1
  328. package/dist/xlsx/read/package.d.ts +5 -23
  329. package/dist/xlsx/read/package.d.ts.map +1 -1
  330. package/dist/xlsx/read/shared-strings.d.ts +2 -2
  331. package/dist/xlsx/read/shared-strings.d.ts.map +1 -1
  332. package/dist/xlsx/read/sheet-data-source.d.ts.map +1 -1
  333. package/dist/xlsx/read/worksheet.d.ts +2 -0
  334. package/dist/xlsx/read/worksheet.d.ts.map +1 -1
  335. package/dist/xlsx/stable-key.d.ts +3 -0
  336. package/dist/xlsx/stable-key.d.ts.map +1 -0
  337. package/dist/xlsx/styles.d.ts.map +1 -1
  338. package/dist/xlsx/ui/index.cjs +795 -388
  339. package/dist/xlsx/ui/index.d.ts +1 -0
  340. package/dist/xlsx/ui/index.d.ts.map +1 -1
  341. package/dist/xlsx/ui/index.mjs +795 -389
  342. package/dist/xlsx/ui/selection-format.d.ts +13 -0
  343. package/dist/xlsx/ui/selection-format.d.ts.map +1 -0
  344. package/dist/xlsx/write/sheet-props.d.ts.map +1 -1
  345. package/dist/xml/index.cjs +57 -3
  346. package/dist/xml/index.mjs +57 -4
  347. package/dist/xml/lite.d.ts.map +1 -1
  348. package/dist/xml/xml.d.ts +11 -1
  349. package/dist/xml/xml.d.ts.map +1 -1
  350. package/package.json +1 -1
  351. package/dist/PptxHandler-HSPKEP5E.mjs +0 -4
  352. package/dist/pptx/chunks/index-Bqm-jFG-.d.ts.map +0 -1
@@ -653,107 +653,6 @@ var Emitter = class {
653
653
  }
654
654
  };
655
655
 
656
- // collab/external-provider.ts
657
- function adaptYjsProvider(provider) {
658
- const events = new Emitter();
659
- let destroyed = false;
660
- let status = provider.wsconnected || provider.connected ? "connected" : provider.wsconnecting ? "connecting" : "disconnected";
661
- let synced = Boolean(provider.synced);
662
- const subscriptions = [];
663
- const listen = (name, handler) => {
664
- const wrapped = handler;
665
- provider.on(name, wrapped);
666
- subscriptions.push([name, wrapped]);
667
- };
668
- const setStatus = (next) => {
669
- if (destroyed || next === status) return;
670
- status = next;
671
- events.emit("status", next);
672
- };
673
- const setSynced = (next) => {
674
- if (destroyed || next === synced) return;
675
- synced = next;
676
- events.emit("synced", next);
677
- };
678
- listen("status", (payload) => {
679
- if (typeof payload.connected === "boolean") {
680
- if (!payload.connected) setSynced(false);
681
- return setStatus(payload.connected ? "connected" : "disconnected");
682
- }
683
- if (payload.status === "connected" || payload.status === "connecting")
684
- setStatus(payload.status);
685
- else if (payload.status === "disconnected") {
686
- setSynced(false);
687
- setStatus("disconnected");
688
- }
689
- });
690
- const onSync = (value) => setSynced(typeof value === "boolean" ? value : value.synced === true);
691
- listen("sync", onSync);
692
- listen("synced", onSync);
693
- listen("connection-error", (cause) => {
694
- if (destroyed) return;
695
- setStatus("error");
696
- events.emit("error", cause instanceof Error ? cause : new Error("Provider connection error"));
697
- });
698
- return {
699
- get status() {
700
- return status;
701
- },
702
- get synced() {
703
- return synced;
704
- },
705
- connect: () => {
706
- if (destroyed || status === "connected" || status === "connecting") return;
707
- setStatus("connecting");
708
- provider.connect?.();
709
- },
710
- disconnect: () => {
711
- if (destroyed) return;
712
- provider.disconnect?.();
713
- setSynced(false);
714
- setStatus("disconnected");
715
- },
716
- destroy: () => {
717
- if (destroyed) return;
718
- setSynced(false);
719
- setStatus("disconnected");
720
- destroyed = true;
721
- for (const [name, handler] of subscriptions) provider.off?.(name, handler);
722
- subscriptions.length = 0;
723
- events.clear();
724
- provider.destroy?.();
725
- },
726
- on: (event, listener) => events.on(event, listener)
727
- };
728
- }
729
- function observeExternalSession(session, onSnapshot) {
730
- let active = true;
731
- let subscribing = true;
732
- let previous;
733
- let unsubscribe;
734
- const notify = () => {
735
- if (!active || subscribing) return;
736
- const snapshot = session.getSnapshot();
737
- if (previous?.status === snapshot.status && previous.synced === snapshot.synced) return;
738
- previous = { status: snapshot.status, synced: snapshot.synced };
739
- onSnapshot(previous);
740
- };
741
- const dispose = () => {
742
- if (!active) return;
743
- active = false;
744
- unsubscribe?.();
745
- };
746
- try {
747
- unsubscribe = session.subscribe(notify);
748
- subscribing = false;
749
- notify();
750
- } catch (error) {
751
- dispose();
752
- throw error;
753
- }
754
- return dispose;
755
- }
756
-
757
656
  // collab/lifecycle.ts
758
657
  var COLLAB_LEAVE_MESSAGE = "ooxml-core:collab-leave";
759
658
  var DEPARTURE_CHANNEL = "ooxml-core:collab-departures";
@@ -836,250 +735,77 @@ function createDepartureChannel(roomId, awareness, factory, channelName = DEPART
836
735
  };
837
736
  }
838
737
 
839
- // collab/memory-transport.ts
840
- function createMemoryHub(options = {}) {
841
- const rooms = /* @__PURE__ */ new Map();
842
- let nextId = 0;
843
- const deliver = (task) => {
844
- if (options.async) queueMicrotask(task);
845
- else task();
738
+ // collab/provider.ts
739
+ var CONNECTION_TIMEOUT_MS = 3e4;
740
+
741
+ // collab/session.ts
742
+ function createCollabSession(options) {
743
+ const roomId = validateRoomId(options.roomId);
744
+ const ownsDoc = !options.doc;
745
+ const doc = options.doc ?? new Y__namespace.Doc();
746
+ const awareness = new awarenessProtocol.Awareness(doc);
747
+ const events = new Emitter();
748
+ const role = options.user.role;
749
+ const identity = {
750
+ userName: sanitizeUserName(options.user.name),
751
+ userColor: sanitizeColor(options.user.color, assignUserColor(doc.clientID)),
752
+ userAvatar: options.user.avatar,
753
+ role
846
754
  };
847
- return {
848
- size: (roomId) => rooms.get(roomId)?.size ?? 0,
849
- createTransport(roomId) {
850
- const id = nextId++;
851
- let endpoint = null;
852
- const peers = () => {
853
- let room = rooms.get(roomId);
854
- if (!room) rooms.set(roomId, room = /* @__PURE__ */ new Set());
855
- return room;
856
- };
857
- return {
858
- get connected() {
859
- return endpoint !== null;
860
- },
861
- connect(handlers) {
862
- if (endpoint) peers().delete(endpoint);
863
- const self = { id, handlers };
864
- const others = [...peers()];
865
- peers().add(self);
866
- endpoint = self;
867
- deliver(() => {
868
- if (endpoint !== self) return;
869
- handlers.open();
870
- for (const other of others) other.handlers.peer?.();
871
- });
872
- },
873
- send(data) {
874
- const self = endpoint;
875
- if (!self || options.filter && !options.filter(data, id)) return;
876
- for (const other of [...peers()])
877
- if (other !== self) deliver(() => other.handlers.message(data.slice()));
878
- },
879
- disconnect() {
880
- const self = endpoint;
881
- if (!self) return;
882
- endpoint = null;
883
- peers().delete(self);
884
- self.handlers.close("disconnected");
885
- }
886
- };
887
- }
755
+ const sanitizePayload = options.sanitizePayload ?? (() => ({}));
756
+ const publisher = createPresencePublisher(
757
+ awareness,
758
+ identity,
759
+ options.initialPresence ?? {}
760
+ );
761
+ let destroyed = false;
762
+ let timeout = null;
763
+ const gate = createSyncGate(() => {
764
+ if (destroyed) return;
765
+ options.onReady?.({ synced: provider.synced });
766
+ events.emit("ready", void 0);
767
+ }, options.syncGraceMs ?? INITIAL_SYNC_GRACE_MS);
768
+ const peers = () => derivePresence(awareness.getStates(), doc.clientID, sanitizePayload);
769
+ const emitPeers = () => events.emit("peers", peers());
770
+ awareness.on("change", emitPeers);
771
+ const provider = options.provider({ doc, awareness, roomId });
772
+ const clearTimeoutTimer = () => {
773
+ if (timeout !== null) clearTimeout(timeout);
774
+ timeout = null;
888
775
  };
889
- }
890
-
891
- // collab/package-adapter.ts
892
- var DEFAULT_MAX_PACKAGE_BYTES = 32 * 1024 * 1024;
893
- function packageAdapter(options = {}) {
894
- const name = options.name ?? "package";
895
- const maxBytes = options.maxBytes ?? DEFAULT_MAX_PACKAGE_BYTES;
896
- const map = (doc) => doc.getMap(name);
897
- const check = (bytes) => {
898
- if (!(bytes instanceof Uint8Array)) throw new Error("The shared package is not binary data.");
899
- if (bytes.byteLength > maxBytes)
900
- throw new Error(`The shared package exceeds ${Math.round(maxBytes / 1024 / 1024)} MiB.`);
901
- return bytes;
776
+ provider.on("status", (status) => {
777
+ clearTimeoutTimer();
778
+ events.emit("status", status);
779
+ if (status === "connecting")
780
+ timeout = setTimeout(() => {
781
+ events.emit("error", new Error("Collaboration connection timed out"));
782
+ events.emit("status", "error");
783
+ }, options.connectionTimeoutMs ?? CONNECTION_TIMEOUT_MS);
784
+ if (status === "connected") gate.arm();
785
+ });
786
+ provider.on("synced", (synced) => {
787
+ events.emit("synced", synced);
788
+ if (synced) gate.open();
789
+ });
790
+ provider.on("error", (error) => events.emit("error", error));
791
+ const heartbeatMs = options.heartbeatMs ?? PRESENCE_HEARTBEAT_MS;
792
+ const heartbeat = heartbeatMs > 0 ? setInterval(() => {
793
+ publisher.flush();
794
+ emitPeers();
795
+ }, heartbeatMs) : null;
796
+ heartbeat?.unref?.();
797
+ const departure = createDepartureChannel(roomId, awareness);
798
+ const leave = () => {
799
+ departure.announce();
800
+ publisher.dispose();
801
+ awareness.setLocalState(null);
802
+ provider.disconnect();
902
803
  };
903
- return {
904
- isEmpty: (doc) => !(map(doc).get("bytes") instanceof Uint8Array),
905
- read: (doc) => {
906
- const shared = map(doc);
907
- const revision = shared.get("revision");
908
- return {
909
- bytes: check(shared.get("bytes")).slice(),
910
- revision: typeof revision === "number" && Number.isSafeInteger(revision) ? revision : 0
911
- };
912
- },
913
- write: (doc, model, origin) => {
914
- const bytes = check(model.bytes);
915
- doc.transact(() => {
916
- const shared = map(doc);
917
- const current = shared.get("revision");
918
- const revision = Math.max(model.revision, typeof current === "number" ? current : 0) + 1;
919
- shared.set("bytes", bytes.slice());
920
- shared.set("revision", revision);
921
- }, origin);
922
- },
923
- observe: (doc, onChange) => {
924
- const shared = map(doc);
925
- const handler = (event) => {
926
- if (event.keysChanged.has("bytes")) onChange(event.transaction.origin);
927
- };
928
- shared.observe(handler);
929
- return () => shared.unobserve(handler);
930
- }
931
- };
932
- }
933
-
934
- // collab/ordering.ts
935
- function classifyVersion(messageVersion, currentVersion) {
936
- if (!isNonNegativeSafeInteger(messageVersion) || !isNonNegativeSafeInteger(currentVersion))
937
- return "invalid";
938
- if (messageVersion < currentVersion) return "stale";
939
- return messageVersion > currentVersion ? "out-of-order" : "apply";
940
- }
941
- var BoundedMap = class {
942
- constructor(limit) {
943
- this.limit = limit;
944
- if (!Number.isSafeInteger(limit) || limit < 1) throw new Error("limit must be positive");
945
- }
946
- limit;
947
- entries = /* @__PURE__ */ new Map();
948
- get size() {
949
- return this.entries.size;
950
- }
951
- get(key) {
952
- return this.entries.get(key);
953
- }
954
- has(key) {
955
- return this.entries.has(key);
956
- }
957
- set(key, value) {
958
- this.entries.delete(key);
959
- this.entries.set(key, value);
960
- if (this.entries.size > this.limit) {
961
- const oldest = this.entries.keys().next();
962
- if (!oldest.done) this.entries.delete(oldest.value);
963
- }
964
- }
965
- delete(key) {
966
- return this.entries.delete(key);
967
- }
968
- clear() {
969
- this.entries.clear();
970
- }
971
- };
972
- var IdempotencyCache = class {
973
- seen;
974
- constructor(limit = 5e3) {
975
- this.seen = new BoundedMap(limit);
976
- }
977
- check(clientId, messageId, fingerprint) {
978
- const prior = this.seen.get(`${clientId}\0${messageId}`);
979
- if (!prior) return { status: "fresh" };
980
- return prior.fingerprint === fingerprint ? { status: "duplicate", value: prior.value } : { status: "reused" };
981
- }
982
- remember(clientId, messageId, fingerprint, value) {
983
- this.seen.set(`${clientId}\0${messageId}`, { fingerprint, value });
984
- }
985
- };
986
- var SequenceTracker = class {
987
- last;
988
- constructor(limit = 200) {
989
- this.last = new BoundedMap(limit);
990
- }
991
- /** Classify without recording; call {@link commit} once the message was actually applied. */
992
- classify(peerId, sequence, fingerprint) {
993
- if (!isNonNegativeSafeInteger(sequence) || sequence < 1) return "invalid";
994
- const previous = this.last.get(peerId);
995
- if (!previous || sequence > previous.sequence) return "apply";
996
- if (sequence < previous.sequence) return "stale";
997
- return previous.fingerprint === fingerprint ? "duplicate" : "invalid";
998
- }
999
- commit(peerId, sequence, fingerprint) {
1000
- this.last.set(peerId, { sequence, fingerprint });
1001
- }
1002
- forget(peerId) {
1003
- this.last.delete(peerId);
1004
- }
1005
- };
1006
- function freezeDeep(value) {
1007
- if (value && typeof value === "object" && !Object.isFrozen(value)) {
1008
- for (const child of Object.values(value)) freezeDeep(child);
1009
- Object.freeze(value);
1010
- }
1011
- return value;
1012
- }
1013
-
1014
- // collab/provider.ts
1015
- var CONNECTION_TIMEOUT_MS = 3e4;
1016
- function createCollabSession(options) {
1017
- const roomId = validateRoomId(options.roomId);
1018
- const ownsDoc = !options.doc;
1019
- const doc = options.doc ?? new Y__namespace.Doc();
1020
- const awareness = new awarenessProtocol.Awareness(doc);
1021
- const events = new Emitter();
1022
- const role = options.user.role;
1023
- const identity = {
1024
- userName: sanitizeUserName(options.user.name),
1025
- userColor: sanitizeColor(options.user.color, assignUserColor(doc.clientID)),
1026
- userAvatar: options.user.avatar,
1027
- role
1028
- };
1029
- const sanitizePayload = options.sanitizePayload ?? (() => ({}));
1030
- const publisher = createPresencePublisher(
1031
- awareness,
1032
- identity,
1033
- options.initialPresence ?? {}
1034
- );
1035
- let destroyed = false;
1036
- let timeout = null;
1037
- const gate = createSyncGate(() => {
1038
- if (destroyed) return;
1039
- options.onReady?.({ synced: provider.synced });
1040
- events.emit("ready", void 0);
1041
- }, options.syncGraceMs ?? INITIAL_SYNC_GRACE_MS);
1042
- const peers = () => derivePresence(awareness.getStates(), doc.clientID, sanitizePayload);
1043
- const emitPeers = () => events.emit("peers", peers());
1044
- awareness.on("change", emitPeers);
1045
- const provider = options.provider({ doc, awareness, roomId });
1046
- const clearTimeoutTimer = () => {
1047
- if (timeout !== null) clearTimeout(timeout);
1048
- timeout = null;
1049
- };
1050
- provider.on("status", (status) => {
1051
- clearTimeoutTimer();
1052
- events.emit("status", status);
1053
- if (status === "connecting")
1054
- timeout = setTimeout(() => {
1055
- events.emit("error", new Error("Collaboration connection timed out"));
1056
- events.emit("status", "error");
1057
- }, options.connectionTimeoutMs ?? CONNECTION_TIMEOUT_MS);
1058
- if (status === "connected") gate.arm();
1059
- });
1060
- provider.on("synced", (synced) => {
1061
- events.emit("synced", synced);
1062
- if (synced) gate.open();
1063
- });
1064
- provider.on("error", (error) => events.emit("error", error));
1065
- const heartbeatMs = options.heartbeatMs ?? PRESENCE_HEARTBEAT_MS;
1066
- const heartbeat = heartbeatMs > 0 ? setInterval(() => {
1067
- publisher.flush();
1068
- emitPeers();
1069
- }, heartbeatMs) : null;
1070
- heartbeat?.unref?.();
1071
- const departure = createDepartureChannel(roomId, awareness);
1072
- const leave = () => {
1073
- departure.announce();
1074
- publisher.dispose();
1075
- awareness.setLocalState(null);
1076
- provider.disconnect();
1077
- };
1078
- const unregisterTeardown = options.teardown ? registerTeardown({
1079
- leave,
1080
- rejoin: () => {
1081
- publisher.flush();
1082
- provider.connect();
804
+ const unregisterTeardown = options.teardown ? registerTeardown({
805
+ leave,
806
+ rejoin: () => {
807
+ publisher.flush();
808
+ provider.connect();
1083
809
  },
1084
810
  ...typeof options.teardown === "object" ? options.teardown : {}
1085
811
  }) : () => {
@@ -1402,8 +1128,384 @@ function trimTrailingSlashes(value) {
1402
1128
  return value.slice(0, end);
1403
1129
  }
1404
1130
 
1131
+ // collab/embedding.ts
1132
+ var COLLABORATION_CHANGE_EVENT = "collaboration-change";
1133
+ var COLLABORATION_OFF_STATE = Object.freeze({
1134
+ active: false,
1135
+ roomId: void 0,
1136
+ status: "off",
1137
+ synced: false,
1138
+ people: []
1139
+ });
1140
+ var INVALID_ROOM_MESSAGE = "Use 1 to 128 letters, digits, hyphens or underscores for the room name.";
1141
+ var NO_BROADCAST_MESSAGE = "This browser cannot share between windows; pass a server URL.";
1142
+ function openCollaborationSession(options, defaults) {
1143
+ if (options.session) return { session: options.session, owned: false };
1144
+ const roomId = options.roomId ?? "";
1145
+ if (!isValidRoomId(roomId)) throw new Error(INVALID_ROOM_MESSAGE);
1146
+ let provider = options.provider;
1147
+ if (!provider && options.serverUrl)
1148
+ provider = transportProvider({
1149
+ transport: createWebSocketTransport({ url: roomUrl(options.serverUrl, roomId) })
1150
+ });
1151
+ if (!provider) {
1152
+ if (!canBroadcast()) throw new Error(NO_BROADCAST_MESSAGE);
1153
+ provider = transportProvider({
1154
+ transport: createBroadcastTransport({ roomId, prefix: defaults.broadcastPrefix })
1155
+ });
1156
+ }
1157
+ const user = options.user ?? {};
1158
+ const session = createCollabSession({
1159
+ roomId,
1160
+ provider,
1161
+ user: {
1162
+ name: user.name || defaults.defaultName,
1163
+ ...user.color ? { color: user.color } : {},
1164
+ ...user.avatar ? { avatar: user.avatar } : {},
1165
+ ...user.role ? { role: user.role } : {}
1166
+ },
1167
+ ...defaults.initialPresence ? { initialPresence: defaults.initialPresence } : {},
1168
+ ...defaults.sanitizePayload ? { sanitizePayload: defaults.sanitizePayload } : {},
1169
+ teardown: true
1170
+ });
1171
+ return { session, owned: true };
1172
+ }
1173
+ function collaborationStateOf(session) {
1174
+ return {
1175
+ active: true,
1176
+ roomId: session.roomId,
1177
+ status: session.status,
1178
+ synced: session.synced,
1179
+ people: [
1180
+ {
1181
+ clientId: session.clientId,
1182
+ name: session.identity.userName,
1183
+ color: session.identity.userColor,
1184
+ self: true
1185
+ },
1186
+ ...session.peers().map((peer) => ({
1187
+ clientId: peer.clientId,
1188
+ name: peer.userName,
1189
+ color: peer.userColor,
1190
+ self: false
1191
+ }))
1192
+ ]
1193
+ };
1194
+ }
1195
+ function onCollaborationStateChange(session, listener) {
1196
+ const stops = [
1197
+ session.on("status", listener),
1198
+ session.on("synced", listener),
1199
+ session.on("peers", listener)
1200
+ ];
1201
+ return () => {
1202
+ for (const stop of stops) stop();
1203
+ };
1204
+ }
1205
+ function toExternalSession(session) {
1206
+ let snapshot = { status: session.status, synced: false };
1207
+ return {
1208
+ doc: session.doc,
1209
+ awareness: session.awareness,
1210
+ getSnapshot: () => {
1211
+ const status = session.status;
1212
+ const synced = session.synced || session.gate.isOpen();
1213
+ if (snapshot.status !== status || snapshot.synced !== synced) snapshot = { status, synced };
1214
+ return snapshot;
1215
+ },
1216
+ subscribe: (listener) => {
1217
+ const stops = [
1218
+ session.on("status", listener),
1219
+ session.on("synced", listener),
1220
+ session.on("ready", listener)
1221
+ ];
1222
+ return () => {
1223
+ for (const stop of stops) stop();
1224
+ };
1225
+ }
1226
+ };
1227
+ }
1228
+
1229
+ // collab/external-provider.ts
1230
+ function adaptYjsProvider(provider) {
1231
+ const events = new Emitter();
1232
+ let destroyed = false;
1233
+ let status = provider.wsconnected || provider.connected ? "connected" : provider.wsconnecting ? "connecting" : "disconnected";
1234
+ let synced = Boolean(provider.synced);
1235
+ const subscriptions = [];
1236
+ const listen = (name, handler) => {
1237
+ const wrapped = handler;
1238
+ provider.on(name, wrapped);
1239
+ subscriptions.push([name, wrapped]);
1240
+ };
1241
+ const setStatus = (next) => {
1242
+ if (destroyed || next === status) return;
1243
+ status = next;
1244
+ events.emit("status", next);
1245
+ };
1246
+ const setSynced = (next) => {
1247
+ if (destroyed || next === synced) return;
1248
+ synced = next;
1249
+ events.emit("synced", next);
1250
+ };
1251
+ listen("status", (payload) => {
1252
+ if (typeof payload.connected === "boolean") {
1253
+ if (!payload.connected) setSynced(false);
1254
+ return setStatus(payload.connected ? "connected" : "disconnected");
1255
+ }
1256
+ if (payload.status === "connected" || payload.status === "connecting")
1257
+ setStatus(payload.status);
1258
+ else if (payload.status === "disconnected") {
1259
+ setSynced(false);
1260
+ setStatus("disconnected");
1261
+ }
1262
+ });
1263
+ const onSync = (value) => setSynced(typeof value === "boolean" ? value : value.synced === true);
1264
+ listen("sync", onSync);
1265
+ listen("synced", onSync);
1266
+ listen("connection-error", (cause) => {
1267
+ if (destroyed) return;
1268
+ setStatus("error");
1269
+ events.emit("error", cause instanceof Error ? cause : new Error("Provider connection error"));
1270
+ });
1271
+ return {
1272
+ get status() {
1273
+ return status;
1274
+ },
1275
+ get synced() {
1276
+ return synced;
1277
+ },
1278
+ connect: () => {
1279
+ if (destroyed || status === "connected" || status === "connecting") return;
1280
+ setStatus("connecting");
1281
+ provider.connect?.();
1282
+ },
1283
+ disconnect: () => {
1284
+ if (destroyed) return;
1285
+ provider.disconnect?.();
1286
+ setSynced(false);
1287
+ setStatus("disconnected");
1288
+ },
1289
+ destroy: () => {
1290
+ if (destroyed) return;
1291
+ setSynced(false);
1292
+ setStatus("disconnected");
1293
+ destroyed = true;
1294
+ for (const [name, handler] of subscriptions) provider.off?.(name, handler);
1295
+ subscriptions.length = 0;
1296
+ events.clear();
1297
+ provider.destroy?.();
1298
+ },
1299
+ on: (event, listener) => events.on(event, listener)
1300
+ };
1301
+ }
1302
+ function observeExternalSession(session, onSnapshot) {
1303
+ let active = true;
1304
+ let subscribing = true;
1305
+ let previous;
1306
+ let unsubscribe;
1307
+ const notify = () => {
1308
+ if (!active || subscribing) return;
1309
+ const snapshot = session.getSnapshot();
1310
+ if (previous?.status === snapshot.status && previous.synced === snapshot.synced) return;
1311
+ previous = { status: snapshot.status, synced: snapshot.synced };
1312
+ onSnapshot(previous);
1313
+ };
1314
+ const dispose = () => {
1315
+ if (!active) return;
1316
+ active = false;
1317
+ unsubscribe?.();
1318
+ };
1319
+ try {
1320
+ unsubscribe = session.subscribe(notify);
1321
+ subscribing = false;
1322
+ notify();
1323
+ } catch (error) {
1324
+ dispose();
1325
+ throw error;
1326
+ }
1327
+ return dispose;
1328
+ }
1329
+
1330
+ // collab/memory-transport.ts
1331
+ function createMemoryHub(options = {}) {
1332
+ const rooms = /* @__PURE__ */ new Map();
1333
+ let nextId = 0;
1334
+ const deliver = (task) => {
1335
+ if (options.async) queueMicrotask(task);
1336
+ else task();
1337
+ };
1338
+ return {
1339
+ size: (roomId) => rooms.get(roomId)?.size ?? 0,
1340
+ createTransport(roomId) {
1341
+ const id = nextId++;
1342
+ let endpoint = null;
1343
+ const peers = () => {
1344
+ let room = rooms.get(roomId);
1345
+ if (!room) rooms.set(roomId, room = /* @__PURE__ */ new Set());
1346
+ return room;
1347
+ };
1348
+ return {
1349
+ get connected() {
1350
+ return endpoint !== null;
1351
+ },
1352
+ connect(handlers) {
1353
+ if (endpoint) peers().delete(endpoint);
1354
+ const self = { id, handlers };
1355
+ const others = [...peers()];
1356
+ peers().add(self);
1357
+ endpoint = self;
1358
+ deliver(() => {
1359
+ if (endpoint !== self) return;
1360
+ handlers.open();
1361
+ for (const other of others) other.handlers.peer?.();
1362
+ });
1363
+ },
1364
+ send(data) {
1365
+ const self = endpoint;
1366
+ if (!self || options.filter && !options.filter(data, id)) return;
1367
+ for (const other of [...peers()])
1368
+ if (other !== self) deliver(() => other.handlers.message(data.slice()));
1369
+ },
1370
+ disconnect() {
1371
+ const self = endpoint;
1372
+ if (!self) return;
1373
+ endpoint = null;
1374
+ peers().delete(self);
1375
+ self.handlers.close("disconnected");
1376
+ }
1377
+ };
1378
+ }
1379
+ };
1380
+ }
1381
+
1382
+ // collab/package-adapter.ts
1383
+ var DEFAULT_MAX_PACKAGE_BYTES = 32 * 1024 * 1024;
1384
+ function packageAdapter(options = {}) {
1385
+ const name = options.name ?? "package";
1386
+ const maxBytes = options.maxBytes ?? DEFAULT_MAX_PACKAGE_BYTES;
1387
+ const map = (doc) => doc.getMap(name);
1388
+ const check = (bytes) => {
1389
+ if (!(bytes instanceof Uint8Array)) throw new Error("The shared package is not binary data.");
1390
+ if (bytes.byteLength > maxBytes)
1391
+ throw new Error(`The shared package exceeds ${Math.round(maxBytes / 1024 / 1024)} MiB.`);
1392
+ return bytes;
1393
+ };
1394
+ return {
1395
+ isEmpty: (doc) => !(map(doc).get("bytes") instanceof Uint8Array),
1396
+ read: (doc) => {
1397
+ const shared = map(doc);
1398
+ const revision = shared.get("revision");
1399
+ return {
1400
+ bytes: check(shared.get("bytes")).slice(),
1401
+ revision: typeof revision === "number" && Number.isSafeInteger(revision) ? revision : 0
1402
+ };
1403
+ },
1404
+ write: (doc, model, origin) => {
1405
+ const bytes = check(model.bytes);
1406
+ doc.transact(() => {
1407
+ const shared = map(doc);
1408
+ const current = shared.get("revision");
1409
+ const revision = Math.max(model.revision, typeof current === "number" ? current : 0) + 1;
1410
+ shared.set("bytes", bytes.slice());
1411
+ shared.set("revision", revision);
1412
+ }, origin);
1413
+ },
1414
+ observe: (doc, onChange) => {
1415
+ const shared = map(doc);
1416
+ const handler = (event) => {
1417
+ if (event.keysChanged.has("bytes")) onChange(event.transaction.origin);
1418
+ };
1419
+ shared.observe(handler);
1420
+ return () => shared.unobserve(handler);
1421
+ }
1422
+ };
1423
+ }
1424
+
1425
+ // collab/ordering.ts
1426
+ function classifyVersion(messageVersion, currentVersion) {
1427
+ if (!isNonNegativeSafeInteger(messageVersion) || !isNonNegativeSafeInteger(currentVersion))
1428
+ return "invalid";
1429
+ if (messageVersion < currentVersion) return "stale";
1430
+ return messageVersion > currentVersion ? "out-of-order" : "apply";
1431
+ }
1432
+ var BoundedMap = class {
1433
+ constructor(limit) {
1434
+ this.limit = limit;
1435
+ if (!Number.isSafeInteger(limit) || limit < 1) throw new Error("limit must be positive");
1436
+ }
1437
+ limit;
1438
+ entries = /* @__PURE__ */ new Map();
1439
+ get size() {
1440
+ return this.entries.size;
1441
+ }
1442
+ get(key) {
1443
+ return this.entries.get(key);
1444
+ }
1445
+ has(key) {
1446
+ return this.entries.has(key);
1447
+ }
1448
+ set(key, value) {
1449
+ this.entries.delete(key);
1450
+ this.entries.set(key, value);
1451
+ if (this.entries.size > this.limit) {
1452
+ const oldest = this.entries.keys().next();
1453
+ if (!oldest.done) this.entries.delete(oldest.value);
1454
+ }
1455
+ }
1456
+ delete(key) {
1457
+ return this.entries.delete(key);
1458
+ }
1459
+ clear() {
1460
+ this.entries.clear();
1461
+ }
1462
+ };
1463
+ var IdempotencyCache = class {
1464
+ seen;
1465
+ constructor(limit = 5e3) {
1466
+ this.seen = new BoundedMap(limit);
1467
+ }
1468
+ check(clientId, messageId, fingerprint) {
1469
+ const prior = this.seen.get(`${clientId}\0${messageId}`);
1470
+ if (!prior) return { status: "fresh" };
1471
+ return prior.fingerprint === fingerprint ? { status: "duplicate", value: prior.value } : { status: "reused" };
1472
+ }
1473
+ remember(clientId, messageId, fingerprint, value) {
1474
+ this.seen.set(`${clientId}\0${messageId}`, { fingerprint, value });
1475
+ }
1476
+ };
1477
+ var SequenceTracker = class {
1478
+ last;
1479
+ constructor(limit = 200) {
1480
+ this.last = new BoundedMap(limit);
1481
+ }
1482
+ /** Classify without recording; call {@link commit} once the message was actually applied. */
1483
+ classify(peerId, sequence, fingerprint) {
1484
+ if (!isNonNegativeSafeInteger(sequence) || sequence < 1) return "invalid";
1485
+ const previous = this.last.get(peerId);
1486
+ if (!previous || sequence > previous.sequence) return "apply";
1487
+ if (sequence < previous.sequence) return "stale";
1488
+ return previous.fingerprint === fingerprint ? "duplicate" : "invalid";
1489
+ }
1490
+ commit(peerId, sequence, fingerprint) {
1491
+ this.last.set(peerId, { sequence, fingerprint });
1492
+ }
1493
+ forget(peerId) {
1494
+ this.last.delete(peerId);
1495
+ }
1496
+ };
1497
+ function freezeDeep(value) {
1498
+ if (value && typeof value === "object" && !Object.isFrozen(value)) {
1499
+ for (const child of Object.values(value)) freezeDeep(child);
1500
+ Object.freeze(value);
1501
+ }
1502
+ return value;
1503
+ }
1504
+
1405
1505
  exports.BROADCAST_THROTTLE_MS = BROADCAST_THROTTLE_MS;
1406
1506
  exports.BoundedMap = BoundedMap;
1507
+ exports.COLLABORATION_CHANGE_EVENT = COLLABORATION_CHANGE_EVENT;
1508
+ exports.COLLABORATION_OFF_STATE = COLLABORATION_OFF_STATE;
1407
1509
  exports.COLLABORATION_ROLES = COLLABORATION_ROLES;
1408
1510
  exports.COLLAB_LEAVE_MESSAGE = COLLAB_LEAVE_MESSAGE;
1409
1511
  exports.CONNECTION_TIMEOUT_MS = CONNECTION_TIMEOUT_MS;
@@ -1413,6 +1515,7 @@ exports.DEFAULT_MAX_PACKAGE_BYTES = DEFAULT_MAX_PACKAGE_BYTES;
1413
1515
  exports.DEPARTURE_CHANNEL = DEPARTURE_CHANNEL;
1414
1516
  exports.Emitter = Emitter;
1415
1517
  exports.INITIAL_SYNC_GRACE_MS = INITIAL_SYNC_GRACE_MS;
1518
+ exports.INVALID_ROOM_MESSAGE = INVALID_ROOM_MESSAGE;
1416
1519
  exports.IdempotencyCache = IdempotencyCache;
1417
1520
  exports.LEGACY_PPTX_DEPARTURE_CHANNEL = LEGACY_PPTX_DEPARTURE_CHANNEL;
1418
1521
  exports.LEGACY_PPTX_LEAVE_MESSAGE = LEGACY_PPTX_LEAVE_MESSAGE;
@@ -1422,6 +1525,7 @@ exports.MAX_UPDATE_BYTES = MAX_UPDATE_BYTES;
1422
1525
  exports.MESSAGE_AWARENESS = MESSAGE_AWARENESS;
1423
1526
  exports.MESSAGE_QUERY_AWARENESS = MESSAGE_QUERY_AWARENESS;
1424
1527
  exports.MESSAGE_SYNC = MESSAGE_SYNC;
1528
+ exports.NO_BROADCAST_MESSAGE = NO_BROADCAST_MESSAGE;
1425
1529
  exports.PRESENCE_FIELD = PRESENCE_FIELD;
1426
1530
  exports.PRESENCE_HEARTBEAT_MS = PRESENCE_HEARTBEAT_MS;
1427
1531
  exports.STALE_PRESENCE_MS = STALE_PRESENCE_MS;
@@ -1438,6 +1542,7 @@ exports.canWrite = canWrite;
1438
1542
  exports.clampCoordinate = clampCoordinate;
1439
1543
  exports.classifyVersion = classifyVersion;
1440
1544
  exports.clearLocalAwareness = clearLocalAwareness;
1545
+ exports.collaborationStateOf = collaborationStateOf;
1441
1546
  exports.createAssetSync = createAssetSync;
1442
1547
  exports.createBroadcastTransport = createBroadcastTransport;
1443
1548
  exports.createClientId = createClientId;
@@ -1465,6 +1570,8 @@ exports.isValidId = isValidId;
1465
1570
  exports.isValidRoomId = isValidRoomId;
1466
1571
  exports.mergeUpdates = mergeUpdates2;
1467
1572
  exports.observeExternalSession = observeExternalSession;
1573
+ exports.onCollaborationStateChange = onCollaborationStateChange;
1574
+ exports.openCollaborationSession = openCollaborationSession;
1468
1575
  exports.packageAdapter = packageAdapter;
1469
1576
  exports.presenceToCursors = presenceToCursors;
1470
1577
  exports.randomToken = randomToken;
@@ -1483,6 +1590,7 @@ exports.shouldAutoFollowBroadcaster = shouldAutoFollowBroadcaster;
1483
1590
  exports.shouldRoomReplaceLoad = shouldRoomReplaceLoad;
1484
1591
  exports.stripHtmlTags = stripHtmlTags;
1485
1592
  exports.toBase64 = toBase64;
1593
+ exports.toExternalSession = toExternalSession;
1486
1594
  exports.transportProvider = transportProvider;
1487
1595
  exports.validateDisplayName = validateDisplayName;
1488
1596
  exports.validateRoomId = validateRoomId;