ooxml-core 1.13.0 → 1.15.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 (644) hide show
  1. package/dist/PptxHandler-OGLITB3F.cjs +12 -0
  2. package/dist/{PptxHandler-FIN6XDTI.mjs → PptxHandler-R5BVKEBW.mjs} +3 -3
  3. package/dist/PptxHandler-UKAA5T5U.mjs +3 -0
  4. package/dist/PresentationBuilder-4AF3PZHG.cjs +20 -0
  5. package/dist/PresentationBuilder-54QGEZ2F.mjs +3 -0
  6. package/dist/PresentationBuilder-W67DIJBV.mjs +7 -0
  7. package/dist/automation/docx.d.ts +18 -0
  8. package/dist/automation/docx.d.ts.map +1 -1
  9. package/dist/automation/index.cjs +21297 -8338
  10. package/dist/automation/index.d.ts +1 -0
  11. package/dist/automation/index.d.ts.map +1 -1
  12. package/dist/automation/index.mjs +21294 -8339
  13. package/dist/automation/node.cjs +66 -6
  14. package/dist/automation/node.d.ts +10 -0
  15. package/dist/automation/node.d.ts.map +1 -1
  16. package/dist/automation/node.mjs +67 -7
  17. package/dist/automation/outline.d.ts +29 -0
  18. package/dist/automation/outline.d.ts.map +1 -0
  19. package/dist/automation/xlsx.d.ts +21 -0
  20. package/dist/automation/xlsx.d.ts.map +1 -1
  21. package/dist/chart/auto-title.d.ts +31 -0
  22. package/dist/chart/auto-title.d.ts.map +1 -0
  23. package/dist/chart/axis-format.d.ts +13 -0
  24. package/dist/chart/axis-format.d.ts.map +1 -0
  25. package/dist/chart/bubble-radius.d.ts +30 -0
  26. package/dist/chart/bubble-radius.d.ts.map +1 -0
  27. package/dist/chart/error-bar-amount.d.ts +22 -0
  28. package/dist/chart/error-bar-amount.d.ts.map +1 -0
  29. package/dist/chart/hierarchy.d.ts +69 -0
  30. package/dist/chart/hierarchy.d.ts.map +1 -0
  31. package/dist/chart/index.cjs +2377 -527
  32. package/dist/chart/index.d.ts +12 -0
  33. package/dist/chart/index.d.ts.map +1 -1
  34. package/dist/chart/index.mjs +2338 -528
  35. package/dist/chart/model-analysis.d.ts +66 -0
  36. package/dist/chart/model-analysis.d.ts.map +1 -0
  37. package/dist/chart/model-series.d.ts +5 -0
  38. package/dist/chart/model-series.d.ts.map +1 -1
  39. package/dist/chart/number-format-pattern.d.ts +35 -0
  40. package/dist/chart/number-format-pattern.d.ts.map +1 -0
  41. package/dist/chart/number-format.d.ts +21 -0
  42. package/dist/chart/number-format.d.ts.map +1 -0
  43. package/dist/chart/parse-analysis.d.ts +13 -0
  44. package/dist/chart/parse-analysis.d.ts.map +1 -0
  45. package/dist/chart/parse-series.d.ts +1 -1
  46. package/dist/chart/parse-series.d.ts.map +1 -1
  47. package/dist/chart/parse-util.d.ts +2 -0
  48. package/dist/chart/parse-util.d.ts.map +1 -1
  49. package/dist/chart/render/chart-svg-analysis.d.ts +7 -0
  50. package/dist/chart/render/chart-svg-analysis.d.ts.map +1 -0
  51. package/dist/chart/render/chart-svg-bars.d.ts +5 -0
  52. package/dist/chart/render/chart-svg-bars.d.ts.map +1 -1
  53. package/dist/chart/render/chart-svg-cartesian.d.ts +7 -2
  54. package/dist/chart/render/chart-svg-cartesian.d.ts.map +1 -1
  55. package/dist/chart/render/chart-svg-hierarchy.d.ts +5 -0
  56. package/dist/chart/render/chart-svg-hierarchy.d.ts.map +1 -0
  57. package/dist/chart/render/chart-svg-plots.d.ts +5 -0
  58. package/dist/chart/render/chart-svg-plots.d.ts.map +1 -0
  59. package/dist/chart/render/chart-svg-stock.d.ts +4 -0
  60. package/dist/chart/render/chart-svg-stock.d.ts.map +1 -0
  61. package/dist/chart/render/chart-svg-waterfall.d.ts +4 -0
  62. package/dist/chart/render/chart-svg-waterfall.d.ts.map +1 -0
  63. package/dist/chart/render/chart-svg-xy.d.ts +4 -0
  64. package/dist/chart/render/chart-svg-xy.d.ts.map +1 -0
  65. package/dist/chart/render/chart-svg.d.ts +1 -1
  66. package/dist/chart/render/chart-svg.d.ts.map +1 -1
  67. package/dist/chart/render/chart-value-axis.d.ts +6 -1
  68. package/dist/chart/render/chart-value-axis.d.ts.map +1 -1
  69. package/dist/chart/render/chart-view-analysis.d.ts +30 -0
  70. package/dist/chart/render/chart-view-analysis.d.ts.map +1 -0
  71. package/dist/chart/render/chart-view-ex.d.ts +24 -0
  72. package/dist/chart/render/chart-view-ex.d.ts.map +1 -0
  73. package/dist/chart/render/chart-view-families.d.ts +10 -0
  74. package/dist/chart/render/chart-view-families.d.ts.map +1 -0
  75. package/dist/chart/render/chart-view-series.d.ts +36 -0
  76. package/dist/chart/render/chart-view-series.d.ts.map +1 -0
  77. package/dist/chart/render/chart-view-stock.d.ts +23 -0
  78. package/dist/chart/render/chart-view-stock.d.ts.map +1 -0
  79. package/dist/chart/render/chart-view.d.ts +49 -18
  80. package/dist/chart/render/chart-view.d.ts.map +1 -1
  81. package/dist/chart/render/index.d.ts +2 -0
  82. package/dist/chart/render/index.d.ts.map +1 -1
  83. package/dist/chart/render/render-space.d.ts +6 -1
  84. package/dist/chart/render/render-space.d.ts.map +1 -1
  85. package/dist/chart/render/summary-analysis.d.ts +11 -0
  86. package/dist/chart/render/summary-analysis.d.ts.map +1 -0
  87. package/dist/chart/render/summary-from-chartex.d.ts +11 -0
  88. package/dist/chart/render/summary-from-chartex.d.ts.map +1 -0
  89. package/dist/chart/render/summary-from-space.d.ts.map +1 -1
  90. package/dist/chart/render/summary.d.ts +86 -3
  91. package/dist/chart/render/summary.d.ts.map +1 -1
  92. package/dist/chart/stock-candles.d.ts +72 -0
  93. package/dist/chart/stock-candles.d.ts.map +1 -0
  94. package/dist/chart/style-palette.d.ts +29 -0
  95. package/dist/chart/style-palette.d.ts.map +1 -0
  96. package/dist/chart/sunburst-arcs.d.ts +41 -0
  97. package/dist/chart/sunburst-arcs.d.ts.map +1 -0
  98. package/dist/chart/trendline-fit.d.ts +39 -0
  99. package/dist/chart/trendline-fit.d.ts.map +1 -0
  100. package/dist/chart/waterfall.d.ts +31 -0
  101. package/dist/chart/waterfall.d.ts.map +1 -0
  102. package/dist/chart/write-analysis.d.ts +12 -0
  103. package/dist/chart/write-analysis.d.ts.map +1 -0
  104. package/dist/chart/write-series.d.ts.map +1 -1
  105. package/dist/{chunk-UAY26XOI.mjs → chunk-2EBMHIGJ.mjs} +1303 -994
  106. package/dist/{chunk-O6NIA4NG.mjs → chunk-7ZIZFJXT.mjs} +7392 -6581
  107. package/dist/{chunk-6DELVMYB.mjs → chunk-EMZIHAOH.mjs} +20558 -19733
  108. package/dist/{chunk-TVE6UIJF.mjs → chunk-HU36GIYM.mjs} +691 -208
  109. package/dist/{chunk-H2FRDUNV.mjs → chunk-JFMIPOPV.mjs} +868 -585
  110. package/dist/chunk-M4XLF4R7.mjs +387 -0
  111. package/dist/{chunk-G5PQKHCG.mjs → chunk-NWAQEXBK.mjs} +1 -1
  112. package/dist/{chunk-B2JBBAEQ.mjs → chunk-OPBZBSJF.mjs} +1 -1
  113. package/dist/{chunk-7QZGRB3T.cjs → chunk-X7MGZQ6C.cjs} +1321 -995
  114. package/dist/{chunk-IT3U6QD6.cjs → chunk-ZWI7MTLF.cjs} +11275 -10461
  115. package/dist/crypto/decrypt.d.ts +17 -3
  116. package/dist/crypto/decrypt.d.ts.map +1 -1
  117. package/dist/crypto/encryption-info.d.ts.map +1 -1
  118. package/dist/crypto/index.cjs +252 -78
  119. package/dist/crypto/index.d.ts +19 -4
  120. package/dist/crypto/index.d.ts.map +1 -1
  121. package/dist/crypto/index.mjs +252 -79
  122. package/dist/crypto/key-derivation.d.ts +2 -3
  123. package/dist/crypto/key-derivation.d.ts.map +1 -1
  124. package/dist/crypto/validate.d.ts +22 -0
  125. package/dist/crypto/validate.d.ts.map +1 -0
  126. package/dist/diagram/engine/layout-def-parse.d.ts.map +1 -1
  127. package/dist/diagram/engine/pres-tree.d.ts.map +1 -1
  128. package/dist/diagram/index.cjs +102 -52
  129. package/dist/diagram/index.mjs +102 -52
  130. package/dist/digest/index.cjs +23 -11
  131. package/dist/digest/index.d.ts +2 -1
  132. package/dist/digest/index.d.ts.map +1 -1
  133. package/dist/digest/index.mjs +21 -12
  134. package/dist/digest/password-hash.d.ts +19 -5
  135. package/dist/digest/password-hash.d.ts.map +1 -1
  136. package/dist/digest/timing-safe.d.ts +7 -0
  137. package/dist/digest/timing-safe.d.ts.map +1 -0
  138. package/dist/docx/block-parser.d.ts.map +1 -1
  139. package/dist/docx/chart-paint.d.ts.map +1 -1
  140. package/dist/docx/chart.d.ts +10 -2
  141. package/dist/docx/chart.d.ts.map +1 -1
  142. package/dist/docx/content-control-edit.d.ts +26 -0
  143. package/dist/docx/content-control-edit.d.ts.map +1 -0
  144. package/dist/docx/content-control-model.d.ts +51 -0
  145. package/dist/docx/content-control-model.d.ts.map +1 -0
  146. package/dist/docx/content-control.d.ts +9 -0
  147. package/dist/docx/content-control.d.ts.map +1 -0
  148. package/dist/docx/default-styles.d.ts.map +1 -1
  149. package/dist/docx/drawing.d.ts.map +1 -1
  150. package/dist/docx/embedded.cjs +9932 -935
  151. package/dist/docx/embedded.mjs +9932 -935
  152. package/dist/docx/equation.d.ts +7 -3
  153. package/dist/docx/equation.d.ts.map +1 -1
  154. package/dist/docx/index.cjs +14117 -1513
  155. package/dist/docx/index.d.ts +6 -0
  156. package/dist/docx/index.d.ts.map +1 -1
  157. package/dist/docx/index.mjs +14093 -1514
  158. package/dist/docx/inline-model.d.ts +3 -0
  159. package/dist/docx/inline-model.d.ts.map +1 -1
  160. package/dist/docx/layout/adapt-floats.d.ts +3 -3
  161. package/dist/docx/layout/adapt-floats.d.ts.map +1 -1
  162. package/dist/docx/layout/adapter.d.ts.map +1 -1
  163. package/dist/docx/layout/equation-object.d.ts +7 -0
  164. package/dist/docx/layout/equation-object.d.ts.map +1 -0
  165. package/dist/docx/layout/floats.d.ts +8 -0
  166. package/dist/docx/layout/floats.d.ts.map +1 -1
  167. package/dist/docx/layout/incremental-layout.d.ts +39 -0
  168. package/dist/docx/layout/incremental-layout.d.ts.map +1 -0
  169. package/dist/docx/layout/index.cjs +14177 -1707
  170. package/dist/docx/layout/index.d.ts +2 -2
  171. package/dist/docx/layout/index.d.ts.map +1 -1
  172. package/dist/docx/layout/index.mjs +14176 -1708
  173. package/dist/docx/layout/input.d.ts +4 -0
  174. package/dist/docx/layout/input.d.ts.map +1 -1
  175. package/dist/docx/layout/layout-session.d.ts +13 -2
  176. package/dist/docx/layout/layout-session.d.ts.map +1 -1
  177. package/dist/docx/layout/layout.d.ts +1 -1
  178. package/dist/docx/layout/layout.d.ts.map +1 -1
  179. package/dist/docx/layout/line-metrics.d.ts.map +1 -1
  180. package/dist/docx/layout/page-cursor.d.ts +1 -1
  181. package/dist/docx/layout/page-cursor.d.ts.map +1 -1
  182. package/dist/docx/layout/page-fields.d.ts +3 -1
  183. package/dist/docx/layout/page-fields.d.ts.map +1 -1
  184. package/dist/docx/layout/result.d.ts +14 -1
  185. package/dist/docx/layout/result.d.ts.map +1 -1
  186. package/dist/docx/layout/section-flow.d.ts +11 -1
  187. package/dist/docx/layout/section-flow.d.ts.map +1 -1
  188. package/dist/docx/ligatures.d.ts +2 -0
  189. package/dist/docx/ligatures.d.ts.map +1 -1
  190. package/dist/docx/load/index.cjs +12709 -3590
  191. package/dist/docx/load/index.mjs +12709 -3590
  192. package/dist/docx/model-paragraph.d.ts +3 -0
  193. package/dist/docx/model-paragraph.d.ts.map +1 -1
  194. package/dist/docx/model-run.d.ts +3 -0
  195. package/dist/docx/model-run.d.ts.map +1 -1
  196. package/dist/docx/model.d.ts +3 -0
  197. package/dist/docx/model.d.ts.map +1 -1
  198. package/dist/docx/numbering-parse.d.ts.map +1 -1
  199. package/dist/docx/numbering-text.d.ts.map +1 -1
  200. package/dist/docx/package-limits.d.ts +6 -0
  201. package/dist/docx/package-limits.d.ts.map +1 -0
  202. package/dist/docx/parse-content-control.d.ts +28 -0
  203. package/dist/docx/parse-content-control.d.ts.map +1 -0
  204. package/dist/docx/parse-table.d.ts.map +1 -1
  205. package/dist/docx/parse.d.ts.map +1 -1
  206. package/dist/docx/save.d.ts.map +1 -1
  207. package/dist/docx/shape-model.d.ts +31 -0
  208. package/dist/docx/shape-model.d.ts.map +1 -0
  209. package/dist/docx/shape-palette.d.ts +19 -0
  210. package/dist/docx/shape-palette.d.ts.map +1 -0
  211. package/dist/docx/shape-parse.d.ts +16 -0
  212. package/dist/docx/shape-parse.d.ts.map +1 -0
  213. package/dist/docx/shape-svg.d.ts +20 -0
  214. package/dist/docx/shape-svg.d.ts.map +1 -0
  215. package/dist/docx/table-model.d.ts +4 -0
  216. package/dist/docx/table-model.d.ts.map +1 -1
  217. package/dist/docx/ui/content-control-commands.d.ts +37 -0
  218. package/dist/docx/ui/content-control-commands.d.ts.map +1 -0
  219. package/dist/docx/ui/content-control-guard.d.ts +8 -0
  220. package/dist/docx/ui/content-control-guard.d.ts.map +1 -0
  221. package/dist/docx/ui/content-control-spans.d.ts +19 -0
  222. package/dist/docx/ui/content-control-spans.d.ts.map +1 -0
  223. package/dist/docx/ui/index.cjs +3132 -506
  224. package/dist/docx/ui/index.d.ts +3 -0
  225. package/dist/docx/ui/index.d.ts.map +1 -1
  226. package/dist/docx/ui/index.mjs +3117 -507
  227. package/dist/docx/ui/inline-content-schema.d.ts.map +1 -1
  228. package/dist/docx/ui/paragraph-attributes.d.ts.map +1 -1
  229. package/dist/docx/ui/ribbon-action-ids.d.ts +1 -1
  230. package/dist/docx/ui/ribbon-action-ids.d.ts.map +1 -1
  231. package/dist/docx/ui/run-adapter.d.ts.map +1 -1
  232. package/dist/docx/ui/run-compare.d.ts.map +1 -1
  233. package/dist/docx/ui/run-mark-properties.d.ts.map +1 -1
  234. package/dist/docx/ui/run-marks.d.ts.map +1 -1
  235. package/dist/docx/ui/schema-marks.d.ts +16 -1
  236. package/dist/docx/ui/schema-marks.d.ts.map +1 -1
  237. package/dist/docx/ui/table-structure-guard.d.ts.map +1 -1
  238. package/dist/docx/write-block-placement.d.ts +9 -0
  239. package/dist/docx/write-block-placement.d.ts.map +1 -0
  240. package/dist/docx/write-content-control.d.ts +12 -0
  241. package/dist/docx/write-content-control.d.ts.map +1 -0
  242. package/dist/docx/write-drawing.d.ts +2 -0
  243. package/dist/docx/write-drawing.d.ts.map +1 -1
  244. package/dist/docx/write-inline.d.ts.map +1 -1
  245. package/dist/docx/write-paragraph.d.ts.map +1 -1
  246. package/dist/docx/write-shape.d.ts +16 -0
  247. package/dist/docx/write-shape.d.ts.map +1 -0
  248. package/dist/docx/write-table.d.ts.map +1 -1
  249. package/dist/docx/write.d.ts.map +1 -1
  250. package/dist/drawingml/index.cjs +24 -0
  251. package/dist/drawingml/index.mjs +24 -0
  252. package/dist/geometry/index.cjs +322 -48
  253. package/dist/geometry/index.d.ts +1 -0
  254. package/dist/geometry/index.d.ts.map +1 -1
  255. package/dist/geometry/index.mjs +318 -49
  256. package/dist/geometry/preset-shape-definitions-table.d.ts.map +1 -1
  257. package/dist/geometry/shape-gallery-catalog.d.ts +32 -0
  258. package/dist/geometry/shape-gallery-catalog.d.ts.map +1 -0
  259. package/dist/index.cjs +4603 -1631
  260. package/dist/index.mjs +4603 -1631
  261. package/dist/math/equation-gallery.d.ts +10 -0
  262. package/dist/math/equation-gallery.d.ts.map +1 -0
  263. package/dist/math/index.cjs +777 -139
  264. package/dist/math/index.d.ts +3 -0
  265. package/dist/math/index.d.ts.map +1 -1
  266. package/dist/math/index.mjs +772 -140
  267. package/dist/math/latex-omml-siblings.d.ts.map +1 -1
  268. package/dist/math/latex-to-omml.d.ts.map +1 -1
  269. package/dist/math/omml-box-grouped.d.ts +9 -0
  270. package/dist/math/omml-box-grouped.d.ts.map +1 -0
  271. package/dist/math/omml-box-layout.d.ts +15 -0
  272. package/dist/math/omml-box-layout.d.ts.map +1 -0
  273. package/dist/math/omml-box-structures.d.ts +7 -0
  274. package/dist/math/omml-box-structures.d.ts.map +1 -0
  275. package/dist/math/omml-box.d.ts +85 -0
  276. package/dist/math/omml-box.d.ts.map +1 -0
  277. package/dist/math/omml-dom.d.ts.map +1 -1
  278. package/dist/math/omml-mathml-converters.d.ts.map +1 -1
  279. package/dist/math/omml-svg.d.ts +14 -0
  280. package/dist/math/omml-svg.d.ts.map +1 -0
  281. package/dist/math/omml-to-xml.d.ts +10 -0
  282. package/dist/math/omml-to-xml.d.ts.map +1 -0
  283. package/dist/opc/embedded-packages.d.ts.map +1 -1
  284. package/dist/opc/index.cjs +257 -22
  285. package/dist/opc/index.d.ts +1 -0
  286. package/dist/opc/index.d.ts.map +1 -1
  287. package/dist/opc/index.mjs +251 -23
  288. package/dist/opc/package.d.ts.map +1 -1
  289. package/dist/opc/signature/detection.d.ts +22 -6
  290. package/dist/opc/signature/detection.d.ts.map +1 -1
  291. package/dist/opc/signature/index.d.ts +1 -1
  292. package/dist/opc/signature/index.d.ts.map +1 -1
  293. package/dist/opc/signature/xml-utils.d.ts.map +1 -1
  294. package/dist/opc/zip-limits.d.ts +52 -0
  295. package/dist/opc/zip-limits.d.ts.map +1 -0
  296. package/dist/pptx/automation/index.cjs +3232 -1916
  297. package/dist/pptx/automation/index.d.ts +4 -4
  298. package/dist/pptx/automation/index.mjs +6 -6
  299. package/dist/pptx/chunks/{elements-DmbzOhFu.d.ts → elements-Cadkqht8.d.ts} +162 -10
  300. package/dist/pptx/chunks/elements-Cadkqht8.d.ts.map +1 -0
  301. package/dist/pptx/chunks/{index-BmvOxbsh.d.ts → index-CJI2EugA.d.ts} +27 -9
  302. package/dist/pptx/chunks/index-CJI2EugA.d.ts.map +1 -0
  303. package/dist/pptx/chunks/{index-Cija6Dih.d.ts → index-CozqpSPL.d.ts} +137 -5
  304. package/dist/pptx/chunks/index-CozqpSPL.d.ts.map +1 -0
  305. package/dist/pptx/chunks/inspection-status-DjiWd_Aa.d.ts.map +1 -1
  306. package/dist/pptx/chunks/{text-operations-sXxhsKDd.d.ts → text-operations-C3L9xrqx.d.ts} +2 -2
  307. package/dist/pptx/chunks/{text-operations-sXxhsKDd.d.ts.map → text-operations-C3L9xrqx.d.ts.map} +1 -1
  308. package/dist/pptx/cli/index.cjs +3156 -1848
  309. package/dist/pptx/cli/index.d.ts +1 -1
  310. package/dist/pptx/cli/index.mjs +5 -5
  311. package/dist/pptx/converter/index.cjs +87 -54
  312. package/dist/pptx/converter/index.d.ts +1 -1
  313. package/dist/pptx/converter/index.mjs +3 -3
  314. package/dist/pptx/editor/render/find-replace.cjs +14 -14
  315. package/dist/pptx/editor/render/find-replace.d.ts +2 -2
  316. package/dist/pptx/editor/render/find-replace.mjs +1 -1
  317. package/dist/pptx/editor/render/slide-operations.cjs +8 -8
  318. package/dist/pptx/editor/render/slide-operations.mjs +2 -2
  319. package/dist/pptx/editor/render/text-runs-style-patch.d.ts +1 -1
  320. package/dist/pptx/editor/render/text-style-scope.d.ts +1 -1
  321. package/dist/pptx/index.cjs +4105 -2075
  322. package/dist/pptx/index.d.ts +5 -5
  323. package/dist/pptx/index.mjs +6 -6
  324. package/dist/pptx/signature-node/index.cjs +342 -65
  325. package/dist/pptx/signature-node/index.d.ts +12 -1
  326. package/dist/pptx/signature-node/index.d.ts.map +1 -1
  327. package/dist/pptx/signature-node/index.mjs +112 -52
  328. package/dist/teams/activity-feed.d.ts +19 -0
  329. package/dist/teams/activity-feed.d.ts.map +1 -0
  330. package/dist/teams/activity-state.d.ts +12 -0
  331. package/dist/teams/activity-state.d.ts.map +1 -0
  332. package/dist/teams/activity.d.ts +52 -0
  333. package/dist/teams/activity.d.ts.map +1 -0
  334. package/dist/teams/calendar.d.ts +57 -0
  335. package/dist/teams/calendar.d.ts.map +1 -0
  336. package/dist/teams/chat-actions.d.ts +20 -0
  337. package/dist/teams/chat-actions.d.ts.map +1 -0
  338. package/dist/teams/chat-rooms.d.ts +42 -0
  339. package/dist/teams/chat-rooms.d.ts.map +1 -0
  340. package/dist/teams/chat-view.d.ts +56 -0
  341. package/dist/teams/chat-view.d.ts.map +1 -0
  342. package/dist/teams/chat.d.ts +19 -3
  343. package/dist/teams/chat.d.ts.map +1 -1
  344. package/dist/teams/chats.d.ts +52 -0
  345. package/dist/teams/chats.d.ts.map +1 -0
  346. package/dist/teams/ics-timezone.d.ts +17 -0
  347. package/dist/teams/ics-timezone.d.ts.map +1 -0
  348. package/dist/teams/ics.d.ts +20 -0
  349. package/dist/teams/ics.d.ts.map +1 -0
  350. package/dist/teams/index.cjs +7442 -3211
  351. package/dist/teams/index.d.ts +23 -0
  352. package/dist/teams/index.d.ts.map +1 -1
  353. package/dist/teams/index.mjs +7336 -3212
  354. package/dist/teams/meeting-actions.d.ts +31 -0
  355. package/dist/teams/meeting-actions.d.ts.map +1 -0
  356. package/dist/teams/meeting-exceptions.d.ts +28 -0
  357. package/dist/teams/meeting-exceptions.d.ts.map +1 -0
  358. package/dist/teams/meeting-reminders.d.ts +13 -0
  359. package/dist/teams/meeting-reminders.d.ts.map +1 -0
  360. package/dist/teams/meetings.d.ts +81 -0
  361. package/dist/teams/meetings.d.ts.map +1 -0
  362. package/dist/teams/mention-text.d.ts +11 -0
  363. package/dist/teams/mention-text.d.ts.map +1 -0
  364. package/dist/teams/mentions.d.ts +68 -0
  365. package/dist/teams/mentions.d.ts.map +1 -0
  366. package/dist/teams/model.d.ts +7 -0
  367. package/dist/teams/model.d.ts.map +1 -1
  368. package/dist/teams/notifications.d.ts +21 -0
  369. package/dist/teams/notifications.d.ts.map +1 -0
  370. package/dist/teams/recurrence-calendar.d.ts +41 -0
  371. package/dist/teams/recurrence-calendar.d.ts.map +1 -0
  372. package/dist/teams/recurrence.d.ts +18 -0
  373. package/dist/teams/recurrence.d.ts.map +1 -0
  374. package/dist/teams/roster.d.ts +12 -0
  375. package/dist/teams/roster.d.ts.map +1 -0
  376. package/dist/teams/server-config.d.ts +23 -2
  377. package/dist/teams/server-config.d.ts.map +1 -1
  378. package/dist/teams/server-session.d.ts +38 -0
  379. package/dist/teams/server-session.d.ts.map +1 -0
  380. package/dist/teams/shared-chat.d.ts +83 -0
  381. package/dist/teams/shared-chat.d.ts.map +1 -0
  382. package/dist/teams/store.d.ts +58 -4
  383. package/dist/teams/store.d.ts.map +1 -1
  384. package/dist/teams/sync-transport.d.ts +12 -0
  385. package/dist/teams/sync-transport.d.ts.map +1 -0
  386. package/dist/teams/time-zone.d.ts +32 -0
  387. package/dist/teams/time-zone.d.ts.map +1 -0
  388. package/dist/teams/view.d.ts +3 -0
  389. package/dist/teams/view.d.ts.map +1 -1
  390. package/dist/teams/workspace.d.ts +13 -2
  391. package/dist/teams/workspace.d.ts.map +1 -1
  392. package/dist/visio/edit-connector-follow.d.ts +15 -0
  393. package/dist/visio/edit-connector-follow.d.ts.map +1 -0
  394. package/dist/visio/edit-connector-obstacles.d.ts +9 -3
  395. package/dist/visio/edit-connector-obstacles.d.ts.map +1 -1
  396. package/dist/visio/edit-connector-reroute.d.ts.map +1 -1
  397. package/dist/visio/edit-connector.d.ts.map +1 -1
  398. package/dist/visio/edit-master-add.d.ts +37 -0
  399. package/dist/visio/edit-master-add.d.ts.map +1 -0
  400. package/dist/visio/edit-master-drop.d.ts +6 -0
  401. package/dist/visio/edit-master-drop.d.ts.map +1 -1
  402. package/dist/visio/edit-recalculate-index.d.ts +5 -0
  403. package/dist/visio/edit-recalculate-index.d.ts.map +1 -1
  404. package/dist/visio/edit-recalculate-values.d.ts.map +1 -1
  405. package/dist/visio/edit-stencil-connector-layout.d.ts +2 -0
  406. package/dist/visio/edit-stencil-connector-layout.d.ts.map +1 -1
  407. package/dist/visio/edit-stencil-connector.d.ts +1 -0
  408. package/dist/visio/edit-stencil-connector.d.ts.map +1 -1
  409. package/dist/visio/edit-stencil-import.d.ts +10 -0
  410. package/dist/visio/edit-stencil-import.d.ts.map +1 -0
  411. package/dist/visio/edit-stencil-line.d.ts +29 -0
  412. package/dist/visio/edit-stencil-line.d.ts.map +1 -0
  413. package/dist/visio/edit-stencil-master.d.ts +3 -8
  414. package/dist/visio/edit-stencil-master.d.ts.map +1 -1
  415. package/dist/visio/edit.d.ts.map +1 -1
  416. package/dist/visio/formula-evaluate.d.ts.map +1 -1
  417. package/dist/visio/formula-math-functions.d.ts +11 -0
  418. package/dist/visio/formula-math-functions.d.ts.map +1 -0
  419. package/dist/visio/formula-text-functions.d.ts +23 -0
  420. package/dist/visio/formula-text-functions.d.ts.map +1 -0
  421. package/dist/visio/formula.d.ts.map +1 -1
  422. package/dist/visio/index.cjs +2552 -1833
  423. package/dist/visio/index.d.ts +1 -0
  424. package/dist/visio/index.d.ts.map +1 -1
  425. package/dist/visio/index.mjs +2552 -1834
  426. package/dist/visio/parser.d.ts +6 -0
  427. package/dist/visio/parser.d.ts.map +1 -1
  428. package/dist/visio/stencil-file.d.ts +14 -0
  429. package/dist/visio/stencil-file.d.ts.map +1 -0
  430. package/dist/visio/ui/index.cjs +2398 -1679
  431. package/dist/visio/ui/index.mjs +2398 -1680
  432. package/dist/visio/ui/master-drop.d.ts +10 -0
  433. package/dist/visio/ui/master-drop.d.ts.map +1 -1
  434. package/dist/xlsx/edit/cell-values.d.ts.map +1 -1
  435. package/dist/xlsx/edit/clipboard-html-parse.d.ts +4 -0
  436. package/dist/xlsx/edit/clipboard-html-parse.d.ts.map +1 -1
  437. package/dist/xlsx/edit/data-table.d.ts +38 -0
  438. package/dist/xlsx/edit/data-table.d.ts.map +1 -0
  439. package/dist/xlsx/edit/drawings.d.ts.map +1 -1
  440. package/dist/xlsx/edit/goal-seek.d.ts +30 -0
  441. package/dist/xlsx/edit/goal-seek.d.ts.map +1 -0
  442. package/dist/xlsx/edit/goal-solver.d.ts +20 -0
  443. package/dist/xlsx/edit/goal-solver.d.ts.map +1 -0
  444. package/dist/xlsx/edit/history.d.ts +1 -1
  445. package/dist/xlsx/edit/history.d.ts.map +1 -1
  446. package/dist/xlsx/edit/index.d.ts +5 -0
  447. package/dist/xlsx/edit/index.d.ts.map +1 -1
  448. package/dist/xlsx/edit/input-text.d.ts.map +1 -1
  449. package/dist/xlsx/edit/pivots.d.ts +2 -1
  450. package/dist/xlsx/edit/pivots.d.ts.map +1 -1
  451. package/dist/xlsx/edit/scenarios.d.ts +41 -0
  452. package/dist/xlsx/edit/scenarios.d.ts.map +1 -0
  453. package/dist/xlsx/edit/session.d.ts.map +1 -1
  454. package/dist/xlsx/edit/slicers.d.ts +34 -0
  455. package/dist/xlsx/edit/slicers.d.ts.map +1 -0
  456. package/dist/xlsx/edit/table-edits.d.ts.map +1 -1
  457. package/dist/xlsx/edit/timelines.d.ts +26 -0
  458. package/dist/xlsx/edit/timelines.d.ts.map +1 -0
  459. package/dist/xlsx/edit/types.d.ts +39 -0
  460. package/dist/xlsx/edit/types.d.ts.map +1 -1
  461. package/dist/xlsx/formula/context.d.ts +13 -0
  462. package/dist/xlsx/formula/context.d.ts.map +1 -1
  463. package/dist/xlsx/formula/engine.d.ts.map +1 -1
  464. package/dist/xlsx/formula/evaluator.d.ts.map +1 -1
  465. package/dist/xlsx/formula/functions/helpers.d.ts +3 -2
  466. package/dist/xlsx/formula/functions/helpers.d.ts.map +1 -1
  467. package/dist/xlsx/formula/functions/text-regex.d.ts +8 -0
  468. package/dist/xlsx/formula/functions/text-regex.d.ts.map +1 -1
  469. package/dist/xlsx/formula/functions/text.d.ts.map +1 -1
  470. package/dist/xlsx/formula/functions/wildcard.d.ts +8 -0
  471. package/dist/xlsx/formula/functions/wildcard.d.ts.map +1 -0
  472. package/dist/xlsx/formula/values.d.ts +9 -0
  473. package/dist/xlsx/formula/values.d.ts.map +1 -1
  474. package/dist/xlsx/index.cjs +9203 -3496
  475. package/dist/xlsx/index.d.ts +1 -0
  476. package/dist/xlsx/index.d.ts.map +1 -1
  477. package/dist/xlsx/index.mjs +9117 -3496
  478. package/dist/xlsx/layout/chart-view.d.ts.map +1 -1
  479. package/dist/xlsx/layout/header-footer-edit.d.ts +16 -0
  480. package/dist/xlsx/layout/header-footer-edit.d.ts.map +1 -0
  481. package/dist/xlsx/layout/index.d.ts +3 -0
  482. package/dist/xlsx/layout/index.d.ts.map +1 -1
  483. package/dist/xlsx/layout/page-break-view.d.ts +39 -0
  484. package/dist/xlsx/layout/page-break-view.d.ts.map +1 -0
  485. package/dist/xlsx/layout/page-view.d.ts +69 -0
  486. package/dist/xlsx/layout/page-view.d.ts.map +1 -0
  487. package/dist/xlsx/layout/ref-evaluator.d.ts.map +1 -1
  488. package/dist/xlsx/load/index.cjs +4486 -1970
  489. package/dist/xlsx/load/index.mjs +4485 -1969
  490. package/dist/xlsx/model-pivots.d.ts +105 -6
  491. package/dist/xlsx/model-pivots.d.ts.map +1 -1
  492. package/dist/xlsx/model-slicers.d.ts +146 -0
  493. package/dist/xlsx/model-slicers.d.ts.map +1 -0
  494. package/dist/xlsx/model-whatif.d.ts +51 -0
  495. package/dist/xlsx/model-whatif.d.ts.map +1 -0
  496. package/dist/xlsx/model.d.ts +26 -1
  497. package/dist/xlsx/model.d.ts.map +1 -1
  498. package/dist/xlsx/pivot/admission.d.ts.map +1 -1
  499. package/dist/xlsx/pivot/aggregate.d.ts +18 -6
  500. package/dist/xlsx/pivot/aggregate.d.ts.map +1 -1
  501. package/dist/xlsx/pivot/axes.d.ts +11 -0
  502. package/dist/xlsx/pivot/axes.d.ts.map +1 -0
  503. package/dist/xlsx/pivot/cache-xml.d.ts.map +1 -1
  504. package/dist/xlsx/pivot/columns.d.ts +54 -0
  505. package/dist/xlsx/pivot/columns.d.ts.map +1 -0
  506. package/dist/xlsx/pivot/data.d.ts +9 -3
  507. package/dist/xlsx/pivot/data.d.ts.map +1 -1
  508. package/dist/xlsx/pivot/date-axes.d.ts +12 -0
  509. package/dist/xlsx/pivot/date-axes.d.ts.map +1 -0
  510. package/dist/xlsx/pivot/date-group-read.d.ts +11 -0
  511. package/dist/xlsx/pivot/date-group-read.d.ts.map +1 -0
  512. package/dist/xlsx/pivot/date-groups.d.ts +65 -0
  513. package/dist/xlsx/pivot/date-groups.d.ts.map +1 -0
  514. package/dist/xlsx/pivot/date-read.d.ts +10 -0
  515. package/dist/xlsx/pivot/date-read.d.ts.map +1 -0
  516. package/dist/xlsx/pivot/dates.d.ts +17 -0
  517. package/dist/xlsx/pivot/dates.d.ts.map +1 -0
  518. package/dist/xlsx/pivot/group-read.d.ts +9 -0
  519. package/dist/xlsx/pivot/group-read.d.ts.map +1 -0
  520. package/dist/xlsx/pivot/groups.d.ts +31 -0
  521. package/dist/xlsx/pivot/groups.d.ts.map +1 -0
  522. package/dist/xlsx/pivot/index.d.ts +8 -0
  523. package/dist/xlsx/pivot/index.d.ts.map +1 -1
  524. package/dist/xlsx/pivot/item-filters-read.d.ts +7 -0
  525. package/dist/xlsx/pivot/item-filters-read.d.ts.map +1 -0
  526. package/dist/xlsx/pivot/item-filters.d.ts +23 -0
  527. package/dist/xlsx/pivot/item-filters.d.ts.map +1 -0
  528. package/dist/xlsx/pivot/measures.d.ts +3 -8
  529. package/dist/xlsx/pivot/measures.d.ts.map +1 -1
  530. package/dist/xlsx/pivot/nested.d.ts +10 -0
  531. package/dist/xlsx/pivot/nested.d.ts.map +1 -0
  532. package/dist/xlsx/pivot/page-filter-admission.d.ts.map +1 -1
  533. package/dist/xlsx/pivot/page-filter.d.ts.map +1 -1
  534. package/dist/xlsx/pivot/read.d.ts +2 -1
  535. package/dist/xlsx/pivot/read.d.ts.map +1 -1
  536. package/dist/xlsx/pivot/subtotal-read.d.ts +9 -0
  537. package/dist/xlsx/pivot/subtotal-read.d.ts.map +1 -0
  538. package/dist/xlsx/pivot/subtotals.d.ts +28 -0
  539. package/dist/xlsx/pivot/subtotals.d.ts.map +1 -0
  540. package/dist/xlsx/pivot/table-xml.d.ts +1 -1
  541. package/dist/xlsx/pivot/table-xml.d.ts.map +1 -1
  542. package/dist/xlsx/pivot/values-axis.d.ts +9 -6
  543. package/dist/xlsx/pivot/values-axis.d.ts.map +1 -1
  544. package/dist/xlsx/read/chart-ex.d.ts +9 -0
  545. package/dist/xlsx/read/chart-ex.d.ts.map +1 -0
  546. package/dist/xlsx/read/chart.d.ts.map +1 -1
  547. package/dist/xlsx/read/drawing.d.ts.map +1 -1
  548. package/dist/xlsx/read/load.d.ts.map +1 -1
  549. package/dist/xlsx/read/package.d.ts +2 -1
  550. package/dist/xlsx/read/package.d.ts.map +1 -1
  551. package/dist/xlsx/read/scenarios.d.ts +4 -0
  552. package/dist/xlsx/read/scenarios.d.ts.map +1 -0
  553. package/dist/xlsx/read/sheet-data.d.ts.map +1 -1
  554. package/dist/xlsx/read/sheet-props.d.ts.map +1 -1
  555. package/dist/xlsx/read/tables.d.ts +3 -0
  556. package/dist/xlsx/read/tables.d.ts.map +1 -1
  557. package/dist/xlsx/read/worksheet.d.ts.map +1 -1
  558. package/dist/xlsx/slicer/book.d.ts +16 -0
  559. package/dist/xlsx/slicer/book.d.ts.map +1 -0
  560. package/dist/xlsx/slicer/frame.d.ts +14 -0
  561. package/dist/xlsx/slicer/frame.d.ts.map +1 -0
  562. package/dist/xlsx/slicer/index.d.ts +10 -0
  563. package/dist/xlsx/slicer/index.d.ts.map +1 -0
  564. package/dist/xlsx/slicer/items.d.ts +30 -0
  565. package/dist/xlsx/slicer/items.d.ts.map +1 -0
  566. package/dist/xlsx/slicer/layout.d.ts +67 -0
  567. package/dist/xlsx/slicer/layout.d.ts.map +1 -0
  568. package/dist/xlsx/slicer/read-slicers.d.ts +11 -0
  569. package/dist/xlsx/slicer/read-slicers.d.ts.map +1 -0
  570. package/dist/xlsx/slicer/read-timelines.d.ts +5 -0
  571. package/dist/xlsx/slicer/read-timelines.d.ts.map +1 -0
  572. package/dist/xlsx/slicer/read.d.ts +26 -0
  573. package/dist/xlsx/slicer/read.d.ts.map +1 -0
  574. package/dist/xlsx/slicer/select.d.ts +10 -0
  575. package/dist/xlsx/slicer/select.d.ts.map +1 -0
  576. package/dist/xlsx/slicer/styles.d.ts +36 -0
  577. package/dist/xlsx/slicer/styles.d.ts.map +1 -0
  578. package/dist/xlsx/slicer/table-filter.d.ts +28 -0
  579. package/dist/xlsx/slicer/table-filter.d.ts.map +1 -0
  580. package/dist/xlsx/slicer/timeline-periods.d.ts +35 -0
  581. package/dist/xlsx/slicer/timeline-periods.d.ts.map +1 -0
  582. package/dist/xlsx/slicer/timeline-view.d.ts +60 -0
  583. package/dist/xlsx/slicer/timeline-view.d.ts.map +1 -0
  584. package/dist/xlsx/slicer/write-plan.d.ts +31 -0
  585. package/dist/xlsx/slicer/write-plan.d.ts.map +1 -0
  586. package/dist/xlsx/slicer/write-timeline.d.ts +7 -0
  587. package/dist/xlsx/slicer/write-timeline.d.ts.map +1 -0
  588. package/dist/xlsx/slicer/write-xml.d.ts +17 -0
  589. package/dist/xlsx/slicer/write-xml.d.ts.map +1 -0
  590. package/dist/xlsx/ui/commands/i18n/index.d.ts.map +1 -1
  591. package/dist/xlsx/ui/commands/i18n/pivots.d.ts.map +1 -1
  592. package/dist/xlsx/ui/commands/i18n/print-layout.d.ts.map +1 -1
  593. package/dist/xlsx/ui/commands/i18n/slicers.d.ts +3 -0
  594. package/dist/xlsx/ui/commands/i18n/slicers.d.ts.map +1 -0
  595. package/dist/xlsx/ui/commands/i18n/what-if.d.ts +3 -0
  596. package/dist/xlsx/ui/commands/i18n/what-if.d.ts.map +1 -0
  597. package/dist/xlsx/ui/commands/icons.d.ts.map +1 -1
  598. package/dist/xlsx/ui/commands/slicers.d.ts +37 -0
  599. package/dist/xlsx/ui/commands/slicers.d.ts.map +1 -0
  600. package/dist/xlsx/ui/commands/what-if.d.ts +4 -0
  601. package/dist/xlsx/ui/commands/what-if.d.ts.map +1 -0
  602. package/dist/xlsx/ui/commands.d.ts +2 -0
  603. package/dist/xlsx/ui/commands.d.ts.map +1 -1
  604. package/dist/xlsx/ui/index.cjs +4142 -1570
  605. package/dist/xlsx/ui/index.d.ts +2 -0
  606. package/dist/xlsx/ui/index.d.ts.map +1 -1
  607. package/dist/xlsx/ui/index.mjs +4137 -1571
  608. package/dist/xlsx/ui/locales/de/shell.d.ts.map +1 -1
  609. package/dist/xlsx/ui/locales/en/shell.d.ts.map +1 -1
  610. package/dist/xlsx/ui/locales/es/shell.d.ts.map +1 -1
  611. package/dist/xlsx/ui/locales/fr/shell.d.ts.map +1 -1
  612. package/dist/xlsx/ui/locales/zh-CN/shell.d.ts.map +1 -1
  613. package/dist/xlsx/ui/ribbon/tabs/review-view.d.ts.map +1 -1
  614. package/dist/xlsx/write/carried-refs.d.ts.map +1 -1
  615. package/dist/xlsx/write/drawing.d.ts.map +1 -1
  616. package/dist/xlsx/write/package-writer.d.ts +2 -0
  617. package/dist/xlsx/write/package-writer.d.ts.map +1 -1
  618. package/dist/xlsx/write/save.d.ts.map +1 -1
  619. package/dist/xlsx/write/scenarios.d.ts +4 -0
  620. package/dist/xlsx/write/scenarios.d.ts.map +1 -0
  621. package/dist/xlsx/write/sheet-data.d.ts.map +1 -1
  622. package/dist/xlsx/write/sheet-parts.d.ts +1 -0
  623. package/dist/xlsx/write/sheet-parts.d.ts.map +1 -1
  624. package/dist/xlsx/write/sheet-props.d.ts.map +1 -1
  625. package/dist/xlsx/write/table-patch.d.ts.map +1 -1
  626. package/dist/xlsx/write/tables.d.ts.map +1 -1
  627. package/dist/xlsx/write/worksheet.d.ts.map +1 -1
  628. package/dist/xml/index.cjs +28 -0
  629. package/dist/xml/index.mjs +27 -1
  630. package/dist/xml/namespaces.d.ts +2 -0
  631. package/dist/xml/namespaces.d.ts.map +1 -1
  632. package/dist/xml/xml.d.ts +15 -0
  633. package/dist/xml/xml.d.ts.map +1 -1
  634. package/package.json +1 -1
  635. package/dist/PptxHandler-RWTOUCLC.mjs +0 -3
  636. package/dist/PptxHandler-UU4ZCT6H.cjs +0 -12
  637. package/dist/chunk-KBIJI6P5.mjs +0 -166
  638. package/dist/pptx/chunks/elements-DmbzOhFu.d.ts.map +0 -1
  639. package/dist/pptx/chunks/index-BmvOxbsh.d.ts.map +0 -1
  640. package/dist/pptx/chunks/index-Cija6Dih.d.ts.map +0 -1
  641. package/dist/xlsx/pivot/hierarchy-first.d.ts +0 -21
  642. package/dist/xlsx/pivot/hierarchy-first.d.ts.map +0 -1
  643. package/dist/xlsx/pivot/hierarchy.d.ts +0 -5
  644. package/dist/xlsx/pivot/hierarchy.d.ts.map +0 -1
@@ -0,0 +1,31 @@
1
+ import { type Meeting, type MeetingInput, type MeetingStore, type OccurrencePatch } from './meetings.js';
2
+ import type { TeamsWorkspace } from './workspace.js';
3
+ export interface MeetingActions {
4
+ createMeeting: (input: MeetingFormInput) => Meeting | null;
5
+ updateMeeting: (id: string, patch: Partial<MeetingFormInput>) => Meeting | null;
6
+ cancelMeeting: (id: string) => boolean;
7
+ /** Cancel one occurrence of a repeating meeting (`recurrenceId` is its original start). */
8
+ cancelOccurrence: (id: string, recurrenceId: number) => boolean;
9
+ /** Change one occurrence of a repeating meeting; the series stays as it is. */
10
+ editOccurrence: (id: string, recurrenceId: number, patch: OccurrencePatch) => Meeting | null;
11
+ /** The `.ics` file for a meeting, or null when it does not exist. */
12
+ meetingIcs: (id: string) => {
13
+ name: string;
14
+ text: string;
15
+ } | null;
16
+ }
17
+ /** What the New meeting form submits: attendees are user ids, resolved through the roster. */
18
+ export interface MeetingFormInput extends Omit<MeetingInput, 'attendees'> {
19
+ attendeeIds?: readonly string[];
20
+ }
21
+ export interface MeetingActionDeps {
22
+ ws: TeamsWorkspace;
23
+ meetings: MeetingStore;
24
+ notice: (text: string) => void;
25
+ refresh: () => void;
26
+ /** Defaults to the clock; tests pass their own. */
27
+ now?: () => number;
28
+ }
29
+ export declare const meetingChatId: (meetingId: string) => string;
30
+ export declare function createMeetingActions(deps: MeetingActionDeps): MeetingActions;
31
+ //# sourceMappingURL=meeting-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-actions.d.ts","sourceRoot":"","sources":["../../teams/meeting-actions.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,cAAc;IAC9B,aAAa,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,GAAG,IAAI,CAAC;IAC3D,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC;IAChF,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,2FAA2F;IAC3F,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;IAChE,+EAA+E;IAC/E,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,OAAO,GAAG,IAAI,CAAC;IAC7F,qEAAqE;IACrE,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAClE;AAED,8FAA8F;AAC9F,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;IACxE,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,cAAc,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,aAAa,cAAe,MAAM,KAAG,MAAwC,CAAC;AAE3F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,CA8G5E"}
@@ -0,0 +1,28 @@
1
+ import * as Y from 'yjs';
2
+ export interface MeetingException {
3
+ /** UTC start the occurrence would have had without the exception. */
4
+ originalStart: number;
5
+ cancelled: boolean;
6
+ /** Overrides for a changed occurrence. */
7
+ start?: number;
8
+ end?: number;
9
+ title?: string;
10
+ description?: string;
11
+ }
12
+ export interface OccurrencePatch {
13
+ start?: number;
14
+ end?: number;
15
+ title?: string;
16
+ description?: string;
17
+ }
18
+ export declare const MAX_EXCEPTIONS = 400;
19
+ /** One stored value as an exception, or null when it is not a valid one. */
20
+ export declare function readException(key: string, raw: unknown): MeetingException | null;
21
+ export declare function readExceptions(raw: unknown): MeetingException[];
22
+ /** The exception for an occurrence that started at `originalStart`, if any. */
23
+ export declare const exceptionAt: (exceptions: readonly MeetingException[] | undefined, originalStart: number) => MeetingException | undefined;
24
+ /** The row's exception map, created on first use. */
25
+ export declare function exceptionMap(row: Y.Map<unknown>): Y.Map<unknown>;
26
+ /** The plain stored value for a change (only the fields that are set). */
27
+ export declare function exceptionValue(patch: OccurrencePatch, previous: MeetingException | undefined): Record<string, unknown>;
28
+ //# sourceMappingURL=meeting-exceptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-exceptions.d.ts","sourceRoot":"","sources":["../../teams/meeting-exceptions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,MAAM,WAAW,gBAAgB;IAChC,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,cAAc,MAAM,CAAC;AAKlC,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAmBhF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAQ/D;AAED,+EAA+E;AAC/E,eAAO,MAAM,WAAW,eACX,SAAS,gBAAgB,EAAE,GAAG,SAAS,iBACpC,MAAM,KACnB,gBAAgB,GAAG,SAAuE,CAAC;AAE9F,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAMhE;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAC7B,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GACpC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB"}
@@ -0,0 +1,13 @@
1
+ import type { ActivityItem } from './activity.js';
2
+ import { type Meeting } from './meetings.js';
3
+ import type { StorageLike } from './store.js';
4
+ export interface MeetingReminders {
5
+ /**
6
+ * Reminders that are due now and were not announced before. `allowed` says whether the person's
7
+ * settings and status let an item through; a reminder it refuses (Do not disturb) is not marked
8
+ * announced, so it still fires if the status changes before the meeting starts.
9
+ */
10
+ due: (meetings: readonly Meeting[], selfId: string, now: number, allowed: (item: ActivityItem) => boolean) => ActivityItem[];
11
+ }
12
+ export declare function createMeetingReminders(storage: StorageLike | undefined, key: string): MeetingReminders;
13
+ //# sourceMappingURL=meeting-reminders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-reminders.d.ts","sourceRoot":"","sources":["../../teams/meeting-reminders.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,KAAK,OAAO,EAAoB,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAK3C,MAAM,WAAW,gBAAgB;IAChC;;;;OAIG;IACH,GAAG,EAAE,CACJ,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,KACpC,YAAY,EAAE,CAAC;CACpB;AAED,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,GAAG,EAAE,MAAM,GACT,gBAAgB,CAmDlB"}
@@ -0,0 +1,81 @@
1
+ import * as Y from 'yjs';
2
+ import { type ChatMember } from './chats.js';
3
+ import { type MeetingException, type OccurrencePatch } from './meeting-exceptions.js';
4
+ import { type MonthlyBy } from './recurrence-calendar.js';
5
+ export type { MeetingException, OccurrencePatch } from './meeting-exceptions.js';
6
+ export type MeetingRepeat = 'none' | 'daily' | 'weekly' | 'monthly' | 'yearly';
7
+ export declare const MEETING_REPEATS: readonly MeetingRepeat[];
8
+ export interface Meeting {
9
+ id: string;
10
+ title: string;
11
+ description: string;
12
+ organizerId: string;
13
+ organizerName: string;
14
+ /** The organiser's IANA zone: repeats keep their wall-clock time in it. */
15
+ zone: string;
16
+ /** UTC milliseconds. */
17
+ start: number;
18
+ end: number;
19
+ repeat: MeetingRepeat;
20
+ /**
21
+ * Monthly repeats only: on the same date (`date`, the default) or on the same weekday by
22
+ * ordinal (`weekday`, "the third Tuesday"). Yearly repeats are always on the date.
23
+ */
24
+ monthlyBy?: MonthlyBy;
25
+ /** With `monthlyBy: 'weekday'`: 1 to 4, or -1 for the last. Defaults to the start's own. */
26
+ ordinal?: number;
27
+ /** The series ends once an occurrence would start after this instant. Never with `count`. */
28
+ until?: number;
29
+ /** The series has this many occurrences in all. Never with `until`. */
30
+ count?: number;
31
+ /** Single occurrences that were cancelled or changed. */
32
+ exceptions?: MeetingException[];
33
+ attendees: ChatMember[];
34
+ /** A channel meeting: the channel it was scheduled in (its chat is the channel). */
35
+ channelId?: string;
36
+ /** The group chat of a meeting with attendees. */
37
+ chatId?: string;
38
+ createdAt: number;
39
+ cancelled: boolean;
40
+ }
41
+ export interface MeetingInput {
42
+ title: string;
43
+ description?: string;
44
+ start: number;
45
+ end: number;
46
+ repeat?: MeetingRepeat;
47
+ monthlyBy?: MonthlyBy;
48
+ ordinal?: number;
49
+ /** Last instant a repeat may start at; null clears the end. */
50
+ until?: number | null;
51
+ /** Total occurrences of a repeat; null clears the end. */
52
+ count?: number | null;
53
+ attendees?: readonly ChatMember[];
54
+ channelId?: string;
55
+ chatId?: string;
56
+ /** The organiser's zone; defaults to the device's. */
57
+ zone?: string;
58
+ }
59
+ export declare const MAX_MEETING_TITLE = 120;
60
+ export declare const MAX_MEETING_DESCRIPTION = 2000;
61
+ export declare const MAX_MEETING_HOURS = 24;
62
+ export interface MeetingStore {
63
+ list: () => Meeting[];
64
+ get: (id: string) => Meeting | null;
65
+ /** Null when the title is empty or the times are not a positive span of at most 24 hours. */
66
+ create: (input: MeetingInput) => Meeting | null;
67
+ /** Organiser only. Returns the updated meeting. */
68
+ update: (id: string, patch: Partial<MeetingInput>) => Meeting | null;
69
+ /** Organiser only. The row stays so cards and reminders show it as cancelled. */
70
+ cancel: (id: string) => boolean;
71
+ /** Organiser only. Cancels one occurrence of a repeating meeting, keyed by its original start. */
72
+ cancelOccurrence: (id: string, originalStart: number) => boolean;
73
+ /** Organiser only. Changes one occurrence; the rest of the series is untouched. */
74
+ editOccurrence: (id: string, originalStart: number, patch: OccurrencePatch) => Meeting | null;
75
+ }
76
+ /** Whether a meeting belongs in this person's calendar. Channel meetings show for everyone. */
77
+ export declare const meetingVisibleTo: (meeting: Meeting, userId: string) => boolean;
78
+ export declare function createMeetingStore(doc: Y.Doc, user: ChatMember, now?: () => number): MeetingStore;
79
+ /** The channel-style key a meeting's call and live flag use. */
80
+ export declare const meetingCallKey: (meetingId: string) => string;
81
+ //# sourceMappingURL=meetings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meetings.d.ts","sourceRoot":"","sources":["../../teams/meetings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type MentionTarget } from './mentions.js';
2
+ import type { Message } from './model.js';
3
+ /**
4
+ * Turn the names picked in the composer back into stored `@Name` text. Each pick claims one
5
+ * occurrence (whole words, case-insensitive, longest name first, never one already preceded by
6
+ * `@`), so a plain word that happens to match a name elsewhere in the message stays plain.
7
+ */
8
+ export declare function promoteMentions(text: string, picks: readonly MentionTarget[]): string;
9
+ /** The composer's view of a stored message: mention names without the `@`. */
10
+ export declare function mentionDisplayText(message: Pick<Message, 'text' | 'mentions'>): string;
11
+ //# sourceMappingURL=mention-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mention-text.d.ts","sourceRoot":"","sources":["../../teams/mention-text.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,aAAa,EAAyB,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAKvC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,CA+BrF;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG,MAAM,CAStF"}
@@ -0,0 +1,68 @@
1
+ import type { Message } from './model.js';
2
+ /** `user` points at one person; `channel` and `team` address everyone (`@channel`, `@team`). */
3
+ export type MentionKind = 'user' | 'channel' | 'team';
4
+ /** Someone (or everyone) that can be mentioned, as offered by the picker. */
5
+ export interface MentionTarget {
6
+ kind: MentionKind;
7
+ /** The user id; `channel` / `team` for the group mentions. */
8
+ id: string;
9
+ /** The display name that follows the `@`. */
10
+ name: string;
11
+ }
12
+ /** A mention located in a message: `text.slice(start, end)` is `@` plus the name. */
13
+ export interface Mention extends MentionTarget {
14
+ start: number;
15
+ end: number;
16
+ }
17
+ export interface MentionSegment {
18
+ text: string;
19
+ mention?: Mention;
20
+ }
21
+ export declare const MAX_MENTIONS = 50;
22
+ /** `@channel` and `@team`, offered after the people. */
23
+ export declare const GROUP_MENTIONS: readonly MentionTarget[];
24
+ /** A mention name: markup removed, whitespace collapsed, no `@`, bounded. Empty when unusable. */
25
+ export declare function sanitizeMentionName(name: unknown): string;
26
+ /** Validate a target from an untrusted source (a peer's row, a host's property). */
27
+ export declare function sanitizeMentionTarget(raw: unknown): MentionTarget | null;
28
+ /**
29
+ * Find the mentions in `text`. Candidates are tried in the given order for ties; the longest name
30
+ * wins at a position (`@Ada Lovelace` beats `@Ada`). A mention needs a non-word character (or the
31
+ * edge of the text) on both sides, so an e-mail address is not a mention. Case-insensitive.
32
+ */
33
+ export declare function resolveMentions(text: string, candidates: readonly MentionTarget[]): Mention[];
34
+ /** Re-validate stored mentions against the text they claim to sit in. */
35
+ export declare function sanitizeMentions(raw: unknown, text: string): Mention[];
36
+ /** Split text into plain runs and mention runs, for rendering. */
37
+ export declare function mentionSegments(text: string, mentions?: readonly Mention[]): MentionSegment[];
38
+ /** Whether a message addresses this person: by name, or through `@channel` / `@team`. */
39
+ export declare function mentionsUser(message: Pick<Message, 'mentions'>, userId: string): boolean;
40
+ /** An open `@query` at the caret, as the composer's picker needs it. */
41
+ export interface MentionQuery {
42
+ /** Index of the `@`. */
43
+ start: number;
44
+ /** What was typed after it. */
45
+ query: string;
46
+ }
47
+ /** The `@query` being typed right before `caret`, or null. The `@` must start a word. */
48
+ export declare function mentionQueryAt(text: string, caret: number): MentionQuery | null;
49
+ /** Targets whose name matches what was typed; names starting with it (or a word of it) first. */
50
+ export declare function filterMentionTargets(targets: readonly MentionTarget[], query: string, limit?: number): MentionTarget[];
51
+ /**
52
+ * Replace the open `@query` with the person's name (and a trailing space) and place the caret.
53
+ * The `@` is only there while the picker is open, as in Teams; `promoteMentions` adds it back
54
+ * when the message is stored, so older clients still read `@Name`.
55
+ */
56
+ export declare function insertMention(text: string, query: MentionQuery, caret: number, target: MentionTarget): {
57
+ text: string;
58
+ caret: number;
59
+ };
60
+ /**
61
+ * Who the picker offers in a channel: people online now, people who wrote there, then the group
62
+ * mentions. The author of the draft is left out.
63
+ */
64
+ export declare function mentionTargetsFor(messages: readonly Pick<Message, 'authorId' | 'authorName'>[], people: readonly {
65
+ id: string;
66
+ name: string;
67
+ }[], selfId: string): MentionTarget[];
68
+ //# sourceMappingURL=mentions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../teams/mentions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,gGAAgG;AAChG,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAEtD,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,8DAA8D;IAC9D,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;CACb;AAED,qFAAqF;AACrF,MAAM,WAAW,OAAQ,SAAQ,aAAa;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,KAAK,CAAC;AAI/B,wDAAwD;AACxD,eAAO,MAAM,cAAc,EAAE,SAAS,aAAa,EAGlD,CAAC;AAKF,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAOzD;AAED,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CASxE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,aAAa,EAAE,GAAG,OAAO,EAAE,CA2B7F;AAED,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAetE;AAED,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,SAAS,OAAO,EAAO,GAAG,cAAc,EAAE,CAWjG;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAIxF;AAED,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC5B,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;CACd;AAED,yFAAyF;AACzF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQ/E;AAED,iGAAiG;AACjG,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,SAAS,aAAa,EAAE,EACjC,KAAK,EAAE,MAAM,EACb,KAAK,SAAI,GACP,aAAa,EAAE,CAcjB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKjC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,QAAQ,EAAE,SAAS,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,YAAY,CAAC,EAAE,EAC7D,MAAM,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAC/C,MAAM,EAAE,MAAM,GACZ,aAAa,EAAE,CAUjB"}
@@ -1,3 +1,4 @@
1
+ import type { Mention } from './mentions.js';
1
2
  export type ChannelKind = 'channel' | 'direct';
2
3
  export interface Channel {
3
4
  id: string;
@@ -27,11 +28,17 @@ export interface Message {
27
28
  ts: number;
28
29
  editedAt?: number;
29
30
  deleted: boolean;
31
+ /** A notice the app wrote (someone joined or left a chat), not something a person typed. */
32
+ system?: boolean;
33
+ /** A meeting card: the scheduled meeting this message announces. */
34
+ meetingId?: string;
30
35
  /** Id of the thread root this message answers. */
31
36
  replyTo?: string;
32
37
  /** Shared tab discussed by this root post. Replies use replyTo as usual. */
33
38
  tabId?: string;
34
39
  attachments: Attachment[];
40
+ /** People (or everyone) addressed with @, as ranges of `text`. Absent on plain messages. */
41
+ mentions?: Mention[];
35
42
  /** emoji -> user ids, derived from the reaction map. */
36
43
  reactions: Record<string, string[]>;
37
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../teams/model.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE/C,MAAM,WAAW,OAAO;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAErE,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACpC;AAED,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,eAAe,KAAK,CAAC;AAoBlC,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAUxE;AAED,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAOzD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAGzD;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3D;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKpD;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAYlE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,CAQ9D"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../teams/model.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE/C,MAAM,WAAW,OAAO;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAErE,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,4FAA4F;IAC5F,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACpC;AAED,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,eAAe,KAAK,CAAC;AAoBlC,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAUxE;AAED,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAOzD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAGzD;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3D;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKpD;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAYlE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,CAQ9D"}
@@ -0,0 +1,21 @@
1
+ import type { ActivityItem } from './activity.js';
2
+ import type { PresenceStatus } from './presence.js';
3
+ import type { StorageLike } from './store.js';
4
+ /** `all`: every kind of activity. `mentions`: only when you are mentioned. `off`: nothing. */
5
+ export type NotificationLevel = 'all' | 'mentions' | 'off';
6
+ export interface NotificationSettings {
7
+ level: NotificationLevel;
8
+ sound: boolean;
9
+ }
10
+ export declare const NOTIFICATION_LEVELS: readonly NotificationLevel[];
11
+ export declare const DEFAULT_NOTIFICATION_SETTINGS: NotificationSettings;
12
+ export declare const isNotificationLevel: (value: unknown) => value is NotificationLevel;
13
+ /** Whether `item` is announced to a person with these settings and this (effective) status. */
14
+ export declare function shouldNotify(item: Pick<ActivityItem, 'kind' | 'read'>, settings: NotificationSettings, status: PresenceStatus): boolean;
15
+ export interface NotificationSettingsStore {
16
+ get: () => NotificationSettings;
17
+ /** Returns whether anything changed. Unknown values are ignored. */
18
+ set: (next: Partial<NotificationSettings>) => boolean;
19
+ }
20
+ export declare function createNotificationSettings(storage: StorageLike | undefined, key: string): NotificationSettingsStore;
21
+ //# sourceMappingURL=notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../teams/notifications.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,8FAA8F;AAC9F,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;CACf;AAED,eAAO,MAAM,mBAAmB,EAAE,SAAS,iBAAiB,EAA+B,CAAC;AAC5F,eAAO,MAAM,6BAA6B,EAAE,oBAAoD,CAAC;AAEjG,eAAO,MAAM,mBAAmB,UAAW,OAAO,KAAG,KAAK,IAAI,iBACL,CAAC;AAE1D,+FAA+F;AAC/F,wBAAgB,YAAY,CAC3B,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,EACzC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,cAAc,GACpB,OAAO,CAIT;AAED,MAAM,WAAW,yBAAyB;IACzC,GAAG,EAAE,MAAM,oBAAoB,CAAC;IAChC,oEAAoE;IACpE,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,KAAK,OAAO,CAAC;CACtD;AAED,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,GAAG,EAAE,MAAM,GACT,yBAAyB,CA8B3B"}
@@ -0,0 +1,41 @@
1
+ import type { Meeting } from './meetings.js';
2
+ export type MonthlyBy = 'date' | 'weekday';
3
+ /** Ordinals a weekday rule may use: the first to fourth, or the last (-1). */
4
+ export declare const WEEKDAY_ORDINALS: readonly number[];
5
+ type CalendarSeries = Pick<Meeting, 'start' | 'zone' | 'repeat' | 'monthlyBy' | 'ordinal'>;
6
+ export interface CalendarSlot {
7
+ /** 0 for the first occurrence. Skipped months do not take an index. */
8
+ index: number;
9
+ /** The wall-clock date in the organiser's zone (the time of day is the series start's). */
10
+ year: number;
11
+ month: number;
12
+ day: number;
13
+ }
14
+ export declare const isCalendarRepeat: (repeat: Meeting['repeat']) => boolean;
15
+ export declare const daysInMonth: (year: number, month: number) => number;
16
+ /** The ordinal of a day of the month for its weekday: 1 to 4, and -1 (last) for the fifth. */
17
+ export declare const ordinalOfDay: (day: number) => number;
18
+ /** Whether `day` is the `ordinal`-th weekday of its month, by that ordinal's own meaning. */
19
+ export declare function dayMatchesOrdinal(year: number, month: number, day: number, ordinal: number): boolean;
20
+ /** The day of the month on which weekday `weekday` (0 = Sunday) falls for this ordinal. */
21
+ export declare function nthWeekdayOfMonth(year: number, month: number, weekday: number, ordinal: number): number;
22
+ /** Every date of a monthly or yearly series, in order, until the scan limit. */
23
+ export declare function calendarSlots(meeting: CalendarSeries): Generator<CalendarSlot>;
24
+ /** The instant of a slot: the series' time of day on that date in the organiser's zone. */
25
+ export declare function slotStart(meeting: CalendarSeries, slot: CalendarSlot): number;
26
+ /** The slot at `index`, or null when the series has fewer dates within the scan limit. */
27
+ export declare function slotAt(meeting: CalendarSeries, index: number): CalendarSlot | null;
28
+ /** The slot that starts exactly at `start`, or null. */
29
+ export declare function slotStarting(meeting: CalendarSeries, start: number): CalendarSlot | null;
30
+ /** The calendar facts of a start instant in a zone that a repeat picker needs. */
31
+ export interface RepeatChoices {
32
+ month: number;
33
+ day: number;
34
+ /** 0 = Sunday. */
35
+ weekday: number;
36
+ /** The ordinals that fit this date, e.g. `[4, -1]` for a Friday that is fourth and last. */
37
+ ordinals: number[];
38
+ }
39
+ export declare function repeatChoices(start: number, zone: string): RepeatChoices;
40
+ export {};
41
+ //# sourceMappingURL=recurrence-calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurrence-calendar.d.ts","sourceRoot":"","sources":["../../teams/recurrence-calendar.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAE3C,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAAqB,CAAC;AAMpE,KAAK,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC,CAAC;AAE3F,MAAM,WAAW,YAAY;IAC5B,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,eAAO,MAAM,gBAAgB,WAAY,OAAO,CAAC,QAAQ,CAAC,KAAG,OACjB,CAAC;AAE7C,eAAO,MAAM,WAAW,SAAU,MAAM,SAAS,MAAM,KAAG,MACV,CAAC;AAEjD,8FAA8F;AAC9F,eAAO,MAAM,YAAY,QAAS,MAAM,KAAG,MAA8C,CAAC;AAE1F,6FAA6F;AAC7F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAI1F;AAED,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACb,MAAM,CAQR;AAgCD,gFAAgF;AAChF,wBAAiB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,CAAC,YAAY,CAAC,CAQ/E;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CAG7E;AAED,0FAA0F;AAC1F,wBAAgB,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGlF;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQxF;AAED,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,4FAA4F;IAC5F,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAKxE"}
@@ -0,0 +1,18 @@
1
+ import type { Meeting } from './meetings.js';
2
+ export declare const MAX_RECURRENCE_COUNT = 999;
3
+ type Series = Pick<Meeting, 'start' | 'end' | 'zone' | 'repeat' | 'until' | 'count' | 'monthlyBy' | 'ordinal'>;
4
+ export interface SeriesSlot {
5
+ /** 0 for the first occurrence. */
6
+ index: number;
7
+ start: number;
8
+ }
9
+ /** The start of the `index`-th occurrence, ignoring the end of the series. */
10
+ export declare function seriesStart(meeting: Series, index: number): number;
11
+ /** Whether the series still has an occurrence at this index and start. */
12
+ export declare function withinSeries(meeting: Series, index: number, start: number): boolean;
13
+ /** Series occurrences that overlap `[from, to)`, in start order, at most `limit`. */
14
+ export declare function seriesBetween(meeting: Series, from: number, to: number, limit?: number): SeriesSlot[];
15
+ /** The index of the occurrence that starts exactly at `start`, or null when there is none. */
16
+ export declare function seriesIndexOf(meeting: Series, start: number): number | null;
17
+ export {};
18
+ //# sourceMappingURL=recurrence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurrence.d.ts","sourceRoot":"","sources":["../../teams/recurrence.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAU1C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,KAAK,MAAM,GAAG,IAAI,CACjB,OAAO,EACP,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,CACjF,CAAC;AAEF,MAAM,WAAW,UAAU;IAC1B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd;AAID,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAKnF;AAED,qFAAqF;AACrF,wBAAgB,aAAa,CAC5B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,KAAK,SAAM,GACT,UAAU,EAAE,CAoBd;AAoBD,8FAA8F;AAC9F,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW3E"}
@@ -0,0 +1,12 @@
1
+ import * as Y from 'yjs';
2
+ import { type ChatMember } from './chats.js';
3
+ export interface RosterEntry extends ChatMember {
4
+ lastSeen: number;
5
+ }
6
+ export interface Roster {
7
+ /** Add yourself, or refresh your name and last-seen time. Cheap: writes only when needed. */
8
+ register: () => void;
9
+ list: () => RosterEntry[];
10
+ }
11
+ export declare function createRoster(doc: Y.Doc, user: ChatMember, now?: () => number): Roster;
12
+ //# sourceMappingURL=roster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roster.d.ts","sourceRoot":"","sources":["../../teams/roster.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,KAAK,UAAU,EAAgB,MAAM,SAAS,CAAC;AAMxD,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC9C,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACtB,6FAA6F;IAC7F,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,WAAW,EAAE,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,GAAE,MAAM,MAAiB,GAAG,MAAM,CA4B/F"}
@@ -10,18 +10,39 @@ export interface TeamsServerConfig {
10
10
  iceTransportPolicy?: 'all' | 'relay';
11
11
  /** Bearer token sent as `?token=` on both sockets. Treat it as a secret. */
12
12
  token?: string;
13
+ /**
14
+ * Signed session from the server's `POST /auth/session` (see `requestSession`), sent as
15
+ * `?session=` on both sockets. The server takes the user id from it, not from the client's claim.
16
+ * Short-lived and secret: never persist it with the settings.
17
+ */
18
+ sessionToken?: string;
13
19
  }
14
20
  export interface ServerConfigResult {
15
21
  config: TeamsServerConfig;
16
22
  /** Human-readable problems; the offending field is left out of `config`. */
17
23
  issues: string[];
24
+ /**
25
+ * True when the input came from a URL or fragment, which anyone can craft in a link: a UI should
26
+ * ask the user to confirm before connecting (it can carry a token to an attacker's server).
27
+ */
28
+ untrusted?: boolean;
29
+ }
30
+ export interface ParseServerConfigOptions {
31
+ /**
32
+ * Protocol of the page hosting the workspace (`https:`). Defaults to `location.protocol` when a
33
+ * `location` exists. On an `https:` page only `wss://` endpoints are accepted (loopback hosts
34
+ * excepted), so a token is never sent in clear text.
35
+ */
36
+ pageProtocol?: string;
37
+ /** Where the input came from; `url` and `fragment` mark the result `untrusted`. */
38
+ source?: 'settings' | 'storage' | 'file' | 'url' | 'fragment';
18
39
  }
19
40
  /** Public STUN only: enough on open networks, never enough behind symmetric NAT (add TURN). */
20
41
  export declare const DEFAULT_ICE_SERVERS: readonly IceServer[];
21
42
  /** Validate untrusted server settings into a usable config plus a list of issues. */
22
- export declare function parseServerConfig(input: unknown): ServerConfigResult;
43
+ export declare function parseServerConfig(input: unknown, options?: ParseServerConfigOptions): ServerConfigResult;
23
44
  /** `base/room?token=...` for a sync or signaling endpoint. The room is URL-encoded. */
24
- export declare function endpointUrl(base: string, roomId: string, token?: string): string;
45
+ export declare function endpointUrl(base: string, roomId: string, token?: string, params?: Record<string, string>): string;
25
46
  /** The local-only config: no server, same-browser tabs. */
26
47
  export declare function localServerConfig(): TeamsServerConfig;
27
48
  //# sourceMappingURL=server-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../teams/server-config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,UAAU,CAAC;IACjB,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IACrC,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,4EAA4E;IAC5E,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,+FAA+F;AAC/F,eAAO,MAAM,mBAAmB,EAAE,SAAS,SAAS,EAA+C,CAAC;AAuCpG,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CA4BpE;AAED,uFAAuF;AACvF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,IAAI,iBAAiB,CAErD"}
1
+ {"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../teams/server-config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,UAAU,CAAC;IACjB,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IACrC,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,4EAA4E;IAC5E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACxC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC;CAC9D;AAED,+FAA+F;AAC/F,eAAO,MAAM,mBAAmB,EAAE,SAAS,SAAS,EAA+C,CAAC;AAkDpG,qFAAqF;AACrF,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,wBAA6B,GACpC,kBAAkB,CAsCpB;AAED,uFAAuF;AACvF,wBAAgB,WAAW,CAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACjC,MAAM,CAMR;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,IAAI,iBAAiB,CAErD"}
@@ -0,0 +1,38 @@
1
+ import type { TeamsServerConfig } from './server-config.js';
2
+ export interface TeamsSession {
3
+ /** Pass as `config.sessionToken`. */
4
+ token: string;
5
+ /** The id the server authenticated: use it as the workspace user id. */
6
+ userId: string;
7
+ /** Epoch milliseconds; request a new session before then. */
8
+ expiresAt: number;
9
+ }
10
+ /** Why a sign-in did not complete; `retryAfterSec` accompanies `rate-limited`. */
11
+ export type SignInFailure = 'credentials' | 'rate-limited' | 'network' | 'server';
12
+ export declare class TeamsSignInError extends Error {
13
+ readonly reason: SignInFailure;
14
+ readonly retryAfterSec: number | undefined;
15
+ constructor(reason: SignInFailure, message: string, retryAfterSec?: number);
16
+ }
17
+ export interface RequestSessionOptions {
18
+ signal?: AbortSignal;
19
+ fetch?: typeof fetch;
20
+ }
21
+ /** Ask the server of `config` for a session. Rejects with a generic message on any refusal. */
22
+ export declare function requestTeamsSession(config: TeamsServerConfig, credentials: {
23
+ userId: string;
24
+ credential?: string;
25
+ }, options?: RequestSessionOptions): Promise<TeamsSession>;
26
+ /** `https://host` for the HTTP side of a server config (the origin of its sync or signaling URL). */
27
+ export declare function serverOrigin(config: TeamsServerConfig): string | null;
28
+ /**
29
+ * Whether the server requires accounts (`/health` reports `accounts`). Null when it cannot be
30
+ * asked (unreachable, not a Teams server): callers then carry on as before, without a sign-in.
31
+ */
32
+ export declare function probeTeamsAccounts(config: TeamsServerConfig, options?: RequestSessionOptions): Promise<boolean | null>;
33
+ /** `valid`, `rejected` (expired, revoked or forged: sign in again) or `unreachable` (try later). */
34
+ export type SessionCheck = 'valid' | 'rejected' | 'unreachable';
35
+ export declare function checkTeamsSession(config: TeamsServerConfig, session: string, options?: RequestSessionOptions): Promise<SessionCheck>;
36
+ /** End every session of the signed-in user on the server. Best effort: resolves on any outcome. */
37
+ export declare function signOutTeamsSession(config: TeamsServerConfig, session: string, options?: RequestSessionOptions): Promise<SessionCheck>;
38
+ //# sourceMappingURL=server-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-session.d.ts","sourceRoot":"","sources":["../../teams/server-session.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC5B,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElF,qBAAa,gBAAiB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,YAAY,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAKzE;CACD;AAED,MAAM,WAAW,qBAAqB;IACrC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACrB;AAED,+FAA+F;AAC/F,wBAAsB,mBAAmB,CACxC,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,YAAY,CAAC,CAwCvB;AAED,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAMrE;AAUD;;;GAGG;AACH,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAezB;AAED,oGAAoG;AACpG,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC;AAEhE,wBAAsB,iBAAiB,CACtC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED,mGAAmG;AACnG,wBAAsB,mBAAmB,CACxC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,YAAY,CAAC,CAEvB"}
@@ -0,0 +1,83 @@
1
+ import * as Y from 'yjs';
2
+ import type { BroadcastChannelConstructor } from '../collab/broadcast-transport.js';
3
+ import type { Transport } from '../collab/provider.js';
4
+ import { type CollabSession } from '../collab/session.js';
5
+ import type { WebSocketConstructor } from '../collab/websocket-transport.js';
6
+ import { type TeamsServerConfig } from './server-config.js';
7
+ export type SharedChatRole = 'user' | 'assistant';
8
+ export interface SharedChatMessage {
9
+ id: string;
10
+ role: SharedChatRole;
11
+ content: string;
12
+ authorId: string;
13
+ authorName: string;
14
+ ts: number;
15
+ /** The asker's client is still writing this reply. */
16
+ streaming: boolean;
17
+ /** The host's own fields (attached file names, proposed actions, versions). JSON only; re-validate it. */
18
+ data: Record<string, unknown>;
19
+ }
20
+ export type SharedChatInput = Omit<SharedChatMessage, 'authorId' | 'authorName' | 'ts'> & Partial<Pick<SharedChatMessage, 'authorId' | 'authorName' | 'ts'>>;
21
+ /** What a person in the chat is doing right now. */
22
+ export type SharedChatActivity = 'idle' | 'typing' | 'asking';
23
+ export interface SharedChatPerson {
24
+ clientId: number;
25
+ name: string;
26
+ color: string;
27
+ activity: SharedChatActivity;
28
+ }
29
+ export declare const MAX_SHARED_CHAT_CHARS = 200000;
30
+ export declare const MAX_SHARED_CHAT_DATA_CHARS = 1000000;
31
+ export declare const MAX_SHARED_CHAT_TITLE_CHARS = 120;
32
+ /** A new, unguessable room id: whoever holds it can join, so it carries 128 random bits. */
33
+ export declare function sharedChatRoomId(): string;
34
+ /** True for a room id made by {@link sharedChatRoomId}. */
35
+ export declare const isSharedChatRoomId: (value: unknown) => value is string;
36
+ export interface SharedChatStore {
37
+ title: () => string;
38
+ setTitle: (title: string) => void;
39
+ /** The messages in order, each re-validated. */
40
+ messages: () => SharedChatMessage[];
41
+ /** Adds a message, or replaces the one with its id. Unchanged messages are not written again. */
42
+ put: (message: SharedChatInput) => void;
43
+ /** Removes a message and everything after it, as editing and resending an earlier request does. */
44
+ truncateFrom: (id: string) => void;
45
+ /** Fires after any change, local or remote. */
46
+ observe: (listener: () => void) => () => void;
47
+ }
48
+ export declare function createSharedChatStore(doc: Y.Doc, user: {
49
+ id: string;
50
+ name: string;
51
+ }): SharedChatStore;
52
+ export interface SharedChatOptions {
53
+ roomId: string;
54
+ user: {
55
+ id?: string;
56
+ name: string;
57
+ color?: string;
58
+ };
59
+ config?: TeamsServerConfig;
60
+ /** Use this transport instead of the one the config selects (tests, custom hosts). */
61
+ transport?: Transport;
62
+ doc?: Y.Doc;
63
+ WebSocket?: WebSocketConstructor;
64
+ BroadcastChannel?: BroadcastChannelConstructor;
65
+ }
66
+ export interface SharedChat {
67
+ readonly roomId: string;
68
+ readonly user: {
69
+ id: string;
70
+ name: string;
71
+ };
72
+ readonly session: CollabSession<{
73
+ activity?: SharedChatActivity;
74
+ }>;
75
+ readonly store: SharedChatStore;
76
+ /** The other people in the chat now. */
77
+ people: () => SharedChatPerson[];
78
+ onPeople: (listener: (people: SharedChatPerson[]) => void) => () => void;
79
+ setActivity: (activity: SharedChatActivity) => void;
80
+ destroy: () => void;
81
+ }
82
+ export declare function createSharedChat(options: SharedChatOptions): SharedChat;
83
+ //# sourceMappingURL=shared-chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-chat.d.ts","sourceRoot":"","sources":["../../teams/shared-chat.ts"],"names":[],"mappings":"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"}