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
@@ -629,107 +629,6 @@ var Emitter = class {
629
629
  }
630
630
  };
631
631
 
632
- // collab/external-provider.ts
633
- function adaptYjsProvider(provider) {
634
- const events = new Emitter();
635
- let destroyed = false;
636
- let status = provider.wsconnected || provider.connected ? "connected" : provider.wsconnecting ? "connecting" : "disconnected";
637
- let synced = Boolean(provider.synced);
638
- const subscriptions = [];
639
- const listen = (name, handler) => {
640
- const wrapped = handler;
641
- provider.on(name, wrapped);
642
- subscriptions.push([name, wrapped]);
643
- };
644
- const setStatus = (next) => {
645
- if (destroyed || next === status) return;
646
- status = next;
647
- events.emit("status", next);
648
- };
649
- const setSynced = (next) => {
650
- if (destroyed || next === synced) return;
651
- synced = next;
652
- events.emit("synced", next);
653
- };
654
- listen("status", (payload) => {
655
- if (typeof payload.connected === "boolean") {
656
- if (!payload.connected) setSynced(false);
657
- return setStatus(payload.connected ? "connected" : "disconnected");
658
- }
659
- if (payload.status === "connected" || payload.status === "connecting")
660
- setStatus(payload.status);
661
- else if (payload.status === "disconnected") {
662
- setSynced(false);
663
- setStatus("disconnected");
664
- }
665
- });
666
- const onSync = (value) => setSynced(typeof value === "boolean" ? value : value.synced === true);
667
- listen("sync", onSync);
668
- listen("synced", onSync);
669
- listen("connection-error", (cause) => {
670
- if (destroyed) return;
671
- setStatus("error");
672
- events.emit("error", cause instanceof Error ? cause : new Error("Provider connection error"));
673
- });
674
- return {
675
- get status() {
676
- return status;
677
- },
678
- get synced() {
679
- return synced;
680
- },
681
- connect: () => {
682
- if (destroyed || status === "connected" || status === "connecting") return;
683
- setStatus("connecting");
684
- provider.connect?.();
685
- },
686
- disconnect: () => {
687
- if (destroyed) return;
688
- provider.disconnect?.();
689
- setSynced(false);
690
- setStatus("disconnected");
691
- },
692
- destroy: () => {
693
- if (destroyed) return;
694
- setSynced(false);
695
- setStatus("disconnected");
696
- destroyed = true;
697
- for (const [name, handler] of subscriptions) provider.off?.(name, handler);
698
- subscriptions.length = 0;
699
- events.clear();
700
- provider.destroy?.();
701
- },
702
- on: (event, listener) => events.on(event, listener)
703
- };
704
- }
705
- function observeExternalSession(session, onSnapshot) {
706
- let active = true;
707
- let subscribing = true;
708
- let previous;
709
- let unsubscribe;
710
- const notify = () => {
711
- if (!active || subscribing) return;
712
- const snapshot = session.getSnapshot();
713
- if (previous?.status === snapshot.status && previous.synced === snapshot.synced) return;
714
- previous = { status: snapshot.status, synced: snapshot.synced };
715
- onSnapshot(previous);
716
- };
717
- const dispose = () => {
718
- if (!active) return;
719
- active = false;
720
- unsubscribe?.();
721
- };
722
- try {
723
- unsubscribe = session.subscribe(notify);
724
- subscribing = false;
725
- notify();
726
- } catch (error) {
727
- dispose();
728
- throw error;
729
- }
730
- return dispose;
731
- }
732
-
733
632
  // collab/lifecycle.ts
734
633
  var COLLAB_LEAVE_MESSAGE = "ooxml-core:collab-leave";
735
634
  var DEPARTURE_CHANNEL = "ooxml-core:collab-departures";
@@ -812,250 +711,77 @@ function createDepartureChannel(roomId, awareness, factory, channelName = DEPART
812
711
  };
813
712
  }
814
713
 
815
- // collab/memory-transport.ts
816
- function createMemoryHub(options = {}) {
817
- const rooms = /* @__PURE__ */ new Map();
818
- let nextId = 0;
819
- const deliver = (task) => {
820
- if (options.async) queueMicrotask(task);
821
- else task();
714
+ // collab/provider.ts
715
+ var CONNECTION_TIMEOUT_MS = 3e4;
716
+
717
+ // collab/session.ts
718
+ function createCollabSession(options) {
719
+ const roomId = validateRoomId(options.roomId);
720
+ const ownsDoc = !options.doc;
721
+ const doc = options.doc ?? new Y.Doc();
722
+ const awareness = new Awareness(doc);
723
+ const events = new Emitter();
724
+ const role = options.user.role;
725
+ const identity = {
726
+ userName: sanitizeUserName(options.user.name),
727
+ userColor: sanitizeColor(options.user.color, assignUserColor(doc.clientID)),
728
+ userAvatar: options.user.avatar,
729
+ role
822
730
  };
823
- return {
824
- size: (roomId) => rooms.get(roomId)?.size ?? 0,
825
- createTransport(roomId) {
826
- const id = nextId++;
827
- let endpoint = null;
828
- const peers = () => {
829
- let room = rooms.get(roomId);
830
- if (!room) rooms.set(roomId, room = /* @__PURE__ */ new Set());
831
- return room;
832
- };
833
- return {
834
- get connected() {
835
- return endpoint !== null;
836
- },
837
- connect(handlers) {
838
- if (endpoint) peers().delete(endpoint);
839
- const self = { id, handlers };
840
- const others = [...peers()];
841
- peers().add(self);
842
- endpoint = self;
843
- deliver(() => {
844
- if (endpoint !== self) return;
845
- handlers.open();
846
- for (const other of others) other.handlers.peer?.();
847
- });
848
- },
849
- send(data) {
850
- const self = endpoint;
851
- if (!self || options.filter && !options.filter(data, id)) return;
852
- for (const other of [...peers()])
853
- if (other !== self) deliver(() => other.handlers.message(data.slice()));
854
- },
855
- disconnect() {
856
- const self = endpoint;
857
- if (!self) return;
858
- endpoint = null;
859
- peers().delete(self);
860
- self.handlers.close("disconnected");
861
- }
862
- };
863
- }
731
+ const sanitizePayload = options.sanitizePayload ?? (() => ({}));
732
+ const publisher = createPresencePublisher(
733
+ awareness,
734
+ identity,
735
+ options.initialPresence ?? {}
736
+ );
737
+ let destroyed = false;
738
+ let timeout = null;
739
+ const gate = createSyncGate(() => {
740
+ if (destroyed) return;
741
+ options.onReady?.({ synced: provider.synced });
742
+ events.emit("ready", void 0);
743
+ }, options.syncGraceMs ?? INITIAL_SYNC_GRACE_MS);
744
+ const peers = () => derivePresence(awareness.getStates(), doc.clientID, sanitizePayload);
745
+ const emitPeers = () => events.emit("peers", peers());
746
+ awareness.on("change", emitPeers);
747
+ const provider = options.provider({ doc, awareness, roomId });
748
+ const clearTimeoutTimer = () => {
749
+ if (timeout !== null) clearTimeout(timeout);
750
+ timeout = null;
864
751
  };
865
- }
866
-
867
- // collab/package-adapter.ts
868
- var DEFAULT_MAX_PACKAGE_BYTES = 32 * 1024 * 1024;
869
- function packageAdapter(options = {}) {
870
- const name = options.name ?? "package";
871
- const maxBytes = options.maxBytes ?? DEFAULT_MAX_PACKAGE_BYTES;
872
- const map = (doc) => doc.getMap(name);
873
- const check = (bytes) => {
874
- if (!(bytes instanceof Uint8Array)) throw new Error("The shared package is not binary data.");
875
- if (bytes.byteLength > maxBytes)
876
- throw new Error(`The shared package exceeds ${Math.round(maxBytes / 1024 / 1024)} MiB.`);
877
- return bytes;
752
+ provider.on("status", (status) => {
753
+ clearTimeoutTimer();
754
+ events.emit("status", status);
755
+ if (status === "connecting")
756
+ timeout = setTimeout(() => {
757
+ events.emit("error", new Error("Collaboration connection timed out"));
758
+ events.emit("status", "error");
759
+ }, options.connectionTimeoutMs ?? CONNECTION_TIMEOUT_MS);
760
+ if (status === "connected") gate.arm();
761
+ });
762
+ provider.on("synced", (synced) => {
763
+ events.emit("synced", synced);
764
+ if (synced) gate.open();
765
+ });
766
+ provider.on("error", (error) => events.emit("error", error));
767
+ const heartbeatMs = options.heartbeatMs ?? PRESENCE_HEARTBEAT_MS;
768
+ const heartbeat = heartbeatMs > 0 ? setInterval(() => {
769
+ publisher.flush();
770
+ emitPeers();
771
+ }, heartbeatMs) : null;
772
+ heartbeat?.unref?.();
773
+ const departure = createDepartureChannel(roomId, awareness);
774
+ const leave = () => {
775
+ departure.announce();
776
+ publisher.dispose();
777
+ awareness.setLocalState(null);
778
+ provider.disconnect();
878
779
  };
879
- return {
880
- isEmpty: (doc) => !(map(doc).get("bytes") instanceof Uint8Array),
881
- read: (doc) => {
882
- const shared = map(doc);
883
- const revision = shared.get("revision");
884
- return {
885
- bytes: check(shared.get("bytes")).slice(),
886
- revision: typeof revision === "number" && Number.isSafeInteger(revision) ? revision : 0
887
- };
888
- },
889
- write: (doc, model, origin) => {
890
- const bytes = check(model.bytes);
891
- doc.transact(() => {
892
- const shared = map(doc);
893
- const current = shared.get("revision");
894
- const revision = Math.max(model.revision, typeof current === "number" ? current : 0) + 1;
895
- shared.set("bytes", bytes.slice());
896
- shared.set("revision", revision);
897
- }, origin);
898
- },
899
- observe: (doc, onChange) => {
900
- const shared = map(doc);
901
- const handler = (event) => {
902
- if (event.keysChanged.has("bytes")) onChange(event.transaction.origin);
903
- };
904
- shared.observe(handler);
905
- return () => shared.unobserve(handler);
906
- }
907
- };
908
- }
909
-
910
- // collab/ordering.ts
911
- function classifyVersion(messageVersion, currentVersion) {
912
- if (!isNonNegativeSafeInteger(messageVersion) || !isNonNegativeSafeInteger(currentVersion))
913
- return "invalid";
914
- if (messageVersion < currentVersion) return "stale";
915
- return messageVersion > currentVersion ? "out-of-order" : "apply";
916
- }
917
- var BoundedMap = class {
918
- constructor(limit) {
919
- this.limit = limit;
920
- if (!Number.isSafeInteger(limit) || limit < 1) throw new Error("limit must be positive");
921
- }
922
- limit;
923
- entries = /* @__PURE__ */ new Map();
924
- get size() {
925
- return this.entries.size;
926
- }
927
- get(key) {
928
- return this.entries.get(key);
929
- }
930
- has(key) {
931
- return this.entries.has(key);
932
- }
933
- set(key, value) {
934
- this.entries.delete(key);
935
- this.entries.set(key, value);
936
- if (this.entries.size > this.limit) {
937
- const oldest = this.entries.keys().next();
938
- if (!oldest.done) this.entries.delete(oldest.value);
939
- }
940
- }
941
- delete(key) {
942
- return this.entries.delete(key);
943
- }
944
- clear() {
945
- this.entries.clear();
946
- }
947
- };
948
- var IdempotencyCache = class {
949
- seen;
950
- constructor(limit = 5e3) {
951
- this.seen = new BoundedMap(limit);
952
- }
953
- check(clientId, messageId, fingerprint) {
954
- const prior = this.seen.get(`${clientId}\0${messageId}`);
955
- if (!prior) return { status: "fresh" };
956
- return prior.fingerprint === fingerprint ? { status: "duplicate", value: prior.value } : { status: "reused" };
957
- }
958
- remember(clientId, messageId, fingerprint, value) {
959
- this.seen.set(`${clientId}\0${messageId}`, { fingerprint, value });
960
- }
961
- };
962
- var SequenceTracker = class {
963
- last;
964
- constructor(limit = 200) {
965
- this.last = new BoundedMap(limit);
966
- }
967
- /** Classify without recording; call {@link commit} once the message was actually applied. */
968
- classify(peerId, sequence, fingerprint) {
969
- if (!isNonNegativeSafeInteger(sequence) || sequence < 1) return "invalid";
970
- const previous = this.last.get(peerId);
971
- if (!previous || sequence > previous.sequence) return "apply";
972
- if (sequence < previous.sequence) return "stale";
973
- return previous.fingerprint === fingerprint ? "duplicate" : "invalid";
974
- }
975
- commit(peerId, sequence, fingerprint) {
976
- this.last.set(peerId, { sequence, fingerprint });
977
- }
978
- forget(peerId) {
979
- this.last.delete(peerId);
980
- }
981
- };
982
- function freezeDeep(value) {
983
- if (value && typeof value === "object" && !Object.isFrozen(value)) {
984
- for (const child of Object.values(value)) freezeDeep(child);
985
- Object.freeze(value);
986
- }
987
- return value;
988
- }
989
-
990
- // collab/provider.ts
991
- var CONNECTION_TIMEOUT_MS = 3e4;
992
- function createCollabSession(options) {
993
- const roomId = validateRoomId(options.roomId);
994
- const ownsDoc = !options.doc;
995
- const doc = options.doc ?? new Y.Doc();
996
- const awareness = new Awareness(doc);
997
- const events = new Emitter();
998
- const role = options.user.role;
999
- const identity = {
1000
- userName: sanitizeUserName(options.user.name),
1001
- userColor: sanitizeColor(options.user.color, assignUserColor(doc.clientID)),
1002
- userAvatar: options.user.avatar,
1003
- role
1004
- };
1005
- const sanitizePayload = options.sanitizePayload ?? (() => ({}));
1006
- const publisher = createPresencePublisher(
1007
- awareness,
1008
- identity,
1009
- options.initialPresence ?? {}
1010
- );
1011
- let destroyed = false;
1012
- let timeout = null;
1013
- const gate = createSyncGate(() => {
1014
- if (destroyed) return;
1015
- options.onReady?.({ synced: provider.synced });
1016
- events.emit("ready", void 0);
1017
- }, options.syncGraceMs ?? INITIAL_SYNC_GRACE_MS);
1018
- const peers = () => derivePresence(awareness.getStates(), doc.clientID, sanitizePayload);
1019
- const emitPeers = () => events.emit("peers", peers());
1020
- awareness.on("change", emitPeers);
1021
- const provider = options.provider({ doc, awareness, roomId });
1022
- const clearTimeoutTimer = () => {
1023
- if (timeout !== null) clearTimeout(timeout);
1024
- timeout = null;
1025
- };
1026
- provider.on("status", (status) => {
1027
- clearTimeoutTimer();
1028
- events.emit("status", status);
1029
- if (status === "connecting")
1030
- timeout = setTimeout(() => {
1031
- events.emit("error", new Error("Collaboration connection timed out"));
1032
- events.emit("status", "error");
1033
- }, options.connectionTimeoutMs ?? CONNECTION_TIMEOUT_MS);
1034
- if (status === "connected") gate.arm();
1035
- });
1036
- provider.on("synced", (synced) => {
1037
- events.emit("synced", synced);
1038
- if (synced) gate.open();
1039
- });
1040
- provider.on("error", (error) => events.emit("error", error));
1041
- const heartbeatMs = options.heartbeatMs ?? PRESENCE_HEARTBEAT_MS;
1042
- const heartbeat = heartbeatMs > 0 ? setInterval(() => {
1043
- publisher.flush();
1044
- emitPeers();
1045
- }, heartbeatMs) : null;
1046
- heartbeat?.unref?.();
1047
- const departure = createDepartureChannel(roomId, awareness);
1048
- const leave = () => {
1049
- departure.announce();
1050
- publisher.dispose();
1051
- awareness.setLocalState(null);
1052
- provider.disconnect();
1053
- };
1054
- const unregisterTeardown = options.teardown ? registerTeardown({
1055
- leave,
1056
- rejoin: () => {
1057
- publisher.flush();
1058
- provider.connect();
780
+ const unregisterTeardown = options.teardown ? registerTeardown({
781
+ leave,
782
+ rejoin: () => {
783
+ publisher.flush();
784
+ provider.connect();
1059
785
  },
1060
786
  ...typeof options.teardown === "object" ? options.teardown : {}
1061
787
  }) : () => {
@@ -1378,4 +1104,378 @@ function trimTrailingSlashes(value) {
1378
1104
  return value.slice(0, end);
1379
1105
  }
1380
1106
 
1381
- export { BROADCAST_THROTTLE_MS, BoundedMap, COLLABORATION_ROLES, COLLAB_LEAVE_MESSAGE, CONNECTION_TIMEOUT_MS, CURSOR_PALETTE, DEFAULT_COLOR, DEFAULT_MAX_PACKAGE_BYTES, DEPARTURE_CHANNEL, Emitter, INITIAL_SYNC_GRACE_MS, IdempotencyCache, LEGACY_PPTX_DEPARTURE_CHANNEL, LEGACY_PPTX_LEAVE_MESSAGE, LOCAL_ORIGIN, MAX_LABEL_CHARS, MAX_UPDATE_BYTES, MESSAGE_AWARENESS, MESSAGE_QUERY_AWARENESS, MESSAGE_SYNC, PRESENCE_FIELD, PRESENCE_HEARTBEAT_MS, STALE_PRESENCE_MS, SequenceTracker, adaptYjsProvider, applyUpdateSafe, asSelectionIds, assignUserColor, bindDocument, borrowAwareness, buildRoster, canBroadcast, canWrite, clampCoordinate, classifyVersion, clearLocalAwareness, createAssetSync, createBroadcastTransport, createClientId, createCollabSession, createDepartureChannel, createIdGenerator, createMemoryHub, createPresencePublisher, createSyncGate, createTransportProvider, createWebSocketTransport, deriveCanvasPresence, derivePresence, encodeDiff, encodeSnapshot, encodeStateVector2 as encodeStateVector, formatCursorLabel, freezeDeep, fromBase64, getUserInitials, isMixedContentBlocked, isNonNegativeSafeInteger, isPresenceFresh, isValidId, isValidRoomId, mergeUpdates2 as mergeUpdates, observeExternalSession, packageAdapter, presenceToCursors, randomToken, registerTeardown, removeAwarenessStatesLocally, restoreSnapshot, roomUrl, sanitizeAvatarUrl, sanitizeCanvasPayload, sanitizeColor, sanitizeIdentity, sanitizeIndex, sanitizeRole, sanitizeUserName, shouldAutoFollowBroadcaster, shouldRoomReplaceLoad, stripHtmlTags, toBase64, transportProvider, validateDisplayName, validateRoomId, validateUpdate };
1107
+ // collab/embedding.ts
1108
+ var COLLABORATION_CHANGE_EVENT = "collaboration-change";
1109
+ var COLLABORATION_OFF_STATE = Object.freeze({
1110
+ active: false,
1111
+ roomId: void 0,
1112
+ status: "off",
1113
+ synced: false,
1114
+ people: []
1115
+ });
1116
+ var INVALID_ROOM_MESSAGE = "Use 1 to 128 letters, digits, hyphens or underscores for the room name.";
1117
+ var NO_BROADCAST_MESSAGE = "This browser cannot share between windows; pass a server URL.";
1118
+ function openCollaborationSession(options, defaults) {
1119
+ if (options.session) return { session: options.session, owned: false };
1120
+ const roomId = options.roomId ?? "";
1121
+ if (!isValidRoomId(roomId)) throw new Error(INVALID_ROOM_MESSAGE);
1122
+ let provider = options.provider;
1123
+ if (!provider && options.serverUrl)
1124
+ provider = transportProvider({
1125
+ transport: createWebSocketTransport({ url: roomUrl(options.serverUrl, roomId) })
1126
+ });
1127
+ if (!provider) {
1128
+ if (!canBroadcast()) throw new Error(NO_BROADCAST_MESSAGE);
1129
+ provider = transportProvider({
1130
+ transport: createBroadcastTransport({ roomId, prefix: defaults.broadcastPrefix })
1131
+ });
1132
+ }
1133
+ const user = options.user ?? {};
1134
+ const session = createCollabSession({
1135
+ roomId,
1136
+ provider,
1137
+ user: {
1138
+ name: user.name || defaults.defaultName,
1139
+ ...user.color ? { color: user.color } : {},
1140
+ ...user.avatar ? { avatar: user.avatar } : {},
1141
+ ...user.role ? { role: user.role } : {}
1142
+ },
1143
+ ...defaults.initialPresence ? { initialPresence: defaults.initialPresence } : {},
1144
+ ...defaults.sanitizePayload ? { sanitizePayload: defaults.sanitizePayload } : {},
1145
+ teardown: true
1146
+ });
1147
+ return { session, owned: true };
1148
+ }
1149
+ function collaborationStateOf(session) {
1150
+ return {
1151
+ active: true,
1152
+ roomId: session.roomId,
1153
+ status: session.status,
1154
+ synced: session.synced,
1155
+ people: [
1156
+ {
1157
+ clientId: session.clientId,
1158
+ name: session.identity.userName,
1159
+ color: session.identity.userColor,
1160
+ self: true
1161
+ },
1162
+ ...session.peers().map((peer) => ({
1163
+ clientId: peer.clientId,
1164
+ name: peer.userName,
1165
+ color: peer.userColor,
1166
+ self: false
1167
+ }))
1168
+ ]
1169
+ };
1170
+ }
1171
+ function onCollaborationStateChange(session, listener) {
1172
+ const stops = [
1173
+ session.on("status", listener),
1174
+ session.on("synced", listener),
1175
+ session.on("peers", listener)
1176
+ ];
1177
+ return () => {
1178
+ for (const stop of stops) stop();
1179
+ };
1180
+ }
1181
+ function toExternalSession(session) {
1182
+ let snapshot = { status: session.status, synced: false };
1183
+ return {
1184
+ doc: session.doc,
1185
+ awareness: session.awareness,
1186
+ getSnapshot: () => {
1187
+ const status = session.status;
1188
+ const synced = session.synced || session.gate.isOpen();
1189
+ if (snapshot.status !== status || snapshot.synced !== synced) snapshot = { status, synced };
1190
+ return snapshot;
1191
+ },
1192
+ subscribe: (listener) => {
1193
+ const stops = [
1194
+ session.on("status", listener),
1195
+ session.on("synced", listener),
1196
+ session.on("ready", listener)
1197
+ ];
1198
+ return () => {
1199
+ for (const stop of stops) stop();
1200
+ };
1201
+ }
1202
+ };
1203
+ }
1204
+
1205
+ // collab/external-provider.ts
1206
+ function adaptYjsProvider(provider) {
1207
+ const events = new Emitter();
1208
+ let destroyed = false;
1209
+ let status = provider.wsconnected || provider.connected ? "connected" : provider.wsconnecting ? "connecting" : "disconnected";
1210
+ let synced = Boolean(provider.synced);
1211
+ const subscriptions = [];
1212
+ const listen = (name, handler) => {
1213
+ const wrapped = handler;
1214
+ provider.on(name, wrapped);
1215
+ subscriptions.push([name, wrapped]);
1216
+ };
1217
+ const setStatus = (next) => {
1218
+ if (destroyed || next === status) return;
1219
+ status = next;
1220
+ events.emit("status", next);
1221
+ };
1222
+ const setSynced = (next) => {
1223
+ if (destroyed || next === synced) return;
1224
+ synced = next;
1225
+ events.emit("synced", next);
1226
+ };
1227
+ listen("status", (payload) => {
1228
+ if (typeof payload.connected === "boolean") {
1229
+ if (!payload.connected) setSynced(false);
1230
+ return setStatus(payload.connected ? "connected" : "disconnected");
1231
+ }
1232
+ if (payload.status === "connected" || payload.status === "connecting")
1233
+ setStatus(payload.status);
1234
+ else if (payload.status === "disconnected") {
1235
+ setSynced(false);
1236
+ setStatus("disconnected");
1237
+ }
1238
+ });
1239
+ const onSync = (value) => setSynced(typeof value === "boolean" ? value : value.synced === true);
1240
+ listen("sync", onSync);
1241
+ listen("synced", onSync);
1242
+ listen("connection-error", (cause) => {
1243
+ if (destroyed) return;
1244
+ setStatus("error");
1245
+ events.emit("error", cause instanceof Error ? cause : new Error("Provider connection error"));
1246
+ });
1247
+ return {
1248
+ get status() {
1249
+ return status;
1250
+ },
1251
+ get synced() {
1252
+ return synced;
1253
+ },
1254
+ connect: () => {
1255
+ if (destroyed || status === "connected" || status === "connecting") return;
1256
+ setStatus("connecting");
1257
+ provider.connect?.();
1258
+ },
1259
+ disconnect: () => {
1260
+ if (destroyed) return;
1261
+ provider.disconnect?.();
1262
+ setSynced(false);
1263
+ setStatus("disconnected");
1264
+ },
1265
+ destroy: () => {
1266
+ if (destroyed) return;
1267
+ setSynced(false);
1268
+ setStatus("disconnected");
1269
+ destroyed = true;
1270
+ for (const [name, handler] of subscriptions) provider.off?.(name, handler);
1271
+ subscriptions.length = 0;
1272
+ events.clear();
1273
+ provider.destroy?.();
1274
+ },
1275
+ on: (event, listener) => events.on(event, listener)
1276
+ };
1277
+ }
1278
+ function observeExternalSession(session, onSnapshot) {
1279
+ let active = true;
1280
+ let subscribing = true;
1281
+ let previous;
1282
+ let unsubscribe;
1283
+ const notify = () => {
1284
+ if (!active || subscribing) return;
1285
+ const snapshot = session.getSnapshot();
1286
+ if (previous?.status === snapshot.status && previous.synced === snapshot.synced) return;
1287
+ previous = { status: snapshot.status, synced: snapshot.synced };
1288
+ onSnapshot(previous);
1289
+ };
1290
+ const dispose = () => {
1291
+ if (!active) return;
1292
+ active = false;
1293
+ unsubscribe?.();
1294
+ };
1295
+ try {
1296
+ unsubscribe = session.subscribe(notify);
1297
+ subscribing = false;
1298
+ notify();
1299
+ } catch (error) {
1300
+ dispose();
1301
+ throw error;
1302
+ }
1303
+ return dispose;
1304
+ }
1305
+
1306
+ // collab/memory-transport.ts
1307
+ function createMemoryHub(options = {}) {
1308
+ const rooms = /* @__PURE__ */ new Map();
1309
+ let nextId = 0;
1310
+ const deliver = (task) => {
1311
+ if (options.async) queueMicrotask(task);
1312
+ else task();
1313
+ };
1314
+ return {
1315
+ size: (roomId) => rooms.get(roomId)?.size ?? 0,
1316
+ createTransport(roomId) {
1317
+ const id = nextId++;
1318
+ let endpoint = null;
1319
+ const peers = () => {
1320
+ let room = rooms.get(roomId);
1321
+ if (!room) rooms.set(roomId, room = /* @__PURE__ */ new Set());
1322
+ return room;
1323
+ };
1324
+ return {
1325
+ get connected() {
1326
+ return endpoint !== null;
1327
+ },
1328
+ connect(handlers) {
1329
+ if (endpoint) peers().delete(endpoint);
1330
+ const self = { id, handlers };
1331
+ const others = [...peers()];
1332
+ peers().add(self);
1333
+ endpoint = self;
1334
+ deliver(() => {
1335
+ if (endpoint !== self) return;
1336
+ handlers.open();
1337
+ for (const other of others) other.handlers.peer?.();
1338
+ });
1339
+ },
1340
+ send(data) {
1341
+ const self = endpoint;
1342
+ if (!self || options.filter && !options.filter(data, id)) return;
1343
+ for (const other of [...peers()])
1344
+ if (other !== self) deliver(() => other.handlers.message(data.slice()));
1345
+ },
1346
+ disconnect() {
1347
+ const self = endpoint;
1348
+ if (!self) return;
1349
+ endpoint = null;
1350
+ peers().delete(self);
1351
+ self.handlers.close("disconnected");
1352
+ }
1353
+ };
1354
+ }
1355
+ };
1356
+ }
1357
+
1358
+ // collab/package-adapter.ts
1359
+ var DEFAULT_MAX_PACKAGE_BYTES = 32 * 1024 * 1024;
1360
+ function packageAdapter(options = {}) {
1361
+ const name = options.name ?? "package";
1362
+ const maxBytes = options.maxBytes ?? DEFAULT_MAX_PACKAGE_BYTES;
1363
+ const map = (doc) => doc.getMap(name);
1364
+ const check = (bytes) => {
1365
+ if (!(bytes instanceof Uint8Array)) throw new Error("The shared package is not binary data.");
1366
+ if (bytes.byteLength > maxBytes)
1367
+ throw new Error(`The shared package exceeds ${Math.round(maxBytes / 1024 / 1024)} MiB.`);
1368
+ return bytes;
1369
+ };
1370
+ return {
1371
+ isEmpty: (doc) => !(map(doc).get("bytes") instanceof Uint8Array),
1372
+ read: (doc) => {
1373
+ const shared = map(doc);
1374
+ const revision = shared.get("revision");
1375
+ return {
1376
+ bytes: check(shared.get("bytes")).slice(),
1377
+ revision: typeof revision === "number" && Number.isSafeInteger(revision) ? revision : 0
1378
+ };
1379
+ },
1380
+ write: (doc, model, origin) => {
1381
+ const bytes = check(model.bytes);
1382
+ doc.transact(() => {
1383
+ const shared = map(doc);
1384
+ const current = shared.get("revision");
1385
+ const revision = Math.max(model.revision, typeof current === "number" ? current : 0) + 1;
1386
+ shared.set("bytes", bytes.slice());
1387
+ shared.set("revision", revision);
1388
+ }, origin);
1389
+ },
1390
+ observe: (doc, onChange) => {
1391
+ const shared = map(doc);
1392
+ const handler = (event) => {
1393
+ if (event.keysChanged.has("bytes")) onChange(event.transaction.origin);
1394
+ };
1395
+ shared.observe(handler);
1396
+ return () => shared.unobserve(handler);
1397
+ }
1398
+ };
1399
+ }
1400
+
1401
+ // collab/ordering.ts
1402
+ function classifyVersion(messageVersion, currentVersion) {
1403
+ if (!isNonNegativeSafeInteger(messageVersion) || !isNonNegativeSafeInteger(currentVersion))
1404
+ return "invalid";
1405
+ if (messageVersion < currentVersion) return "stale";
1406
+ return messageVersion > currentVersion ? "out-of-order" : "apply";
1407
+ }
1408
+ var BoundedMap = class {
1409
+ constructor(limit) {
1410
+ this.limit = limit;
1411
+ if (!Number.isSafeInteger(limit) || limit < 1) throw new Error("limit must be positive");
1412
+ }
1413
+ limit;
1414
+ entries = /* @__PURE__ */ new Map();
1415
+ get size() {
1416
+ return this.entries.size;
1417
+ }
1418
+ get(key) {
1419
+ return this.entries.get(key);
1420
+ }
1421
+ has(key) {
1422
+ return this.entries.has(key);
1423
+ }
1424
+ set(key, value) {
1425
+ this.entries.delete(key);
1426
+ this.entries.set(key, value);
1427
+ if (this.entries.size > this.limit) {
1428
+ const oldest = this.entries.keys().next();
1429
+ if (!oldest.done) this.entries.delete(oldest.value);
1430
+ }
1431
+ }
1432
+ delete(key) {
1433
+ return this.entries.delete(key);
1434
+ }
1435
+ clear() {
1436
+ this.entries.clear();
1437
+ }
1438
+ };
1439
+ var IdempotencyCache = class {
1440
+ seen;
1441
+ constructor(limit = 5e3) {
1442
+ this.seen = new BoundedMap(limit);
1443
+ }
1444
+ check(clientId, messageId, fingerprint) {
1445
+ const prior = this.seen.get(`${clientId}\0${messageId}`);
1446
+ if (!prior) return { status: "fresh" };
1447
+ return prior.fingerprint === fingerprint ? { status: "duplicate", value: prior.value } : { status: "reused" };
1448
+ }
1449
+ remember(clientId, messageId, fingerprint, value) {
1450
+ this.seen.set(`${clientId}\0${messageId}`, { fingerprint, value });
1451
+ }
1452
+ };
1453
+ var SequenceTracker = class {
1454
+ last;
1455
+ constructor(limit = 200) {
1456
+ this.last = new BoundedMap(limit);
1457
+ }
1458
+ /** Classify without recording; call {@link commit} once the message was actually applied. */
1459
+ classify(peerId, sequence, fingerprint) {
1460
+ if (!isNonNegativeSafeInteger(sequence) || sequence < 1) return "invalid";
1461
+ const previous = this.last.get(peerId);
1462
+ if (!previous || sequence > previous.sequence) return "apply";
1463
+ if (sequence < previous.sequence) return "stale";
1464
+ return previous.fingerprint === fingerprint ? "duplicate" : "invalid";
1465
+ }
1466
+ commit(peerId, sequence, fingerprint) {
1467
+ this.last.set(peerId, { sequence, fingerprint });
1468
+ }
1469
+ forget(peerId) {
1470
+ this.last.delete(peerId);
1471
+ }
1472
+ };
1473
+ function freezeDeep(value) {
1474
+ if (value && typeof value === "object" && !Object.isFrozen(value)) {
1475
+ for (const child of Object.values(value)) freezeDeep(child);
1476
+ Object.freeze(value);
1477
+ }
1478
+ return value;
1479
+ }
1480
+
1481
+ export { BROADCAST_THROTTLE_MS, BoundedMap, COLLABORATION_CHANGE_EVENT, COLLABORATION_OFF_STATE, COLLABORATION_ROLES, COLLAB_LEAVE_MESSAGE, CONNECTION_TIMEOUT_MS, CURSOR_PALETTE, DEFAULT_COLOR, DEFAULT_MAX_PACKAGE_BYTES, DEPARTURE_CHANNEL, Emitter, INITIAL_SYNC_GRACE_MS, INVALID_ROOM_MESSAGE, IdempotencyCache, LEGACY_PPTX_DEPARTURE_CHANNEL, LEGACY_PPTX_LEAVE_MESSAGE, LOCAL_ORIGIN, MAX_LABEL_CHARS, MAX_UPDATE_BYTES, MESSAGE_AWARENESS, MESSAGE_QUERY_AWARENESS, MESSAGE_SYNC, NO_BROADCAST_MESSAGE, PRESENCE_FIELD, PRESENCE_HEARTBEAT_MS, STALE_PRESENCE_MS, SequenceTracker, adaptYjsProvider, applyUpdateSafe, asSelectionIds, assignUserColor, bindDocument, borrowAwareness, buildRoster, canBroadcast, canWrite, clampCoordinate, classifyVersion, clearLocalAwareness, collaborationStateOf, createAssetSync, createBroadcastTransport, createClientId, createCollabSession, createDepartureChannel, createIdGenerator, createMemoryHub, createPresencePublisher, createSyncGate, createTransportProvider, createWebSocketTransport, deriveCanvasPresence, derivePresence, encodeDiff, encodeSnapshot, encodeStateVector2 as encodeStateVector, formatCursorLabel, freezeDeep, fromBase64, getUserInitials, isMixedContentBlocked, isNonNegativeSafeInteger, isPresenceFresh, isValidId, isValidRoomId, mergeUpdates2 as mergeUpdates, observeExternalSession, onCollaborationStateChange, openCollaborationSession, packageAdapter, presenceToCursors, randomToken, registerTeardown, removeAwarenessStatesLocally, restoreSnapshot, roomUrl, sanitizeAvatarUrl, sanitizeCanvasPayload, sanitizeColor, sanitizeIdentity, sanitizeIndex, sanitizeRole, sanitizeUserName, shouldAutoFollowBroadcaster, shouldRoomReplaceLoad, stripHtmlTags, toBase64, toExternalSession, transportProvider, validateDisplayName, validateRoomId, validateUpdate };