@beyondwork/docx-react-component 1.0.29 → 1.0.30

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 (381) hide show
  1. package/package.json +65 -96
  2. package/src/README.md +85 -0
  3. package/src/api/README.md +26 -0
  4. package/src/api/public-types.ts +1952 -0
  5. package/src/api/session-state.ts +62 -0
  6. package/src/compare/diff-engine.ts +623 -0
  7. package/src/compare/export-redlines.ts +280 -0
  8. package/src/compare/index.ts +25 -0
  9. package/src/compare/snapshot.ts +97 -0
  10. package/src/component-inventory.md +99 -0
  11. package/src/core/README.md +10 -0
  12. package/src/core/commands/README.md +3 -0
  13. package/{dist/chunk-TJBP2K4T.js → src/core/commands/formatting-commands.ts} +536 -196
  14. package/src/core/commands/image-commands.ts +373 -0
  15. package/src/core/commands/index.ts +1879 -0
  16. package/src/core/commands/list-commands.ts +565 -0
  17. package/src/core/commands/paragraph-layout-commands.ts +339 -0
  18. package/src/core/commands/review-commands.ts +108 -0
  19. package/{dist/core/commands/section-layout-commands.cjs → src/core/commands/section-layout-commands.ts} +340 -137
  20. package/src/core/commands/structural-helpers.ts +309 -0
  21. package/{dist/core/commands/style-commands.cjs → src/core/commands/style-commands.ts} +113 -65
  22. package/src/core/commands/table-structure-commands.ts +854 -0
  23. package/{dist/chunk-UZXBISGO.js → src/core/commands/text-commands.ts} +142 -86
  24. package/src/core/schema/README.md +3 -0
  25. package/src/core/schema/text-schema.ts +516 -0
  26. package/src/core/search/search-text.ts +357 -0
  27. package/src/core/selection/README.md +3 -0
  28. package/src/core/selection/mapping.ts +289 -0
  29. package/src/core/selection/review-anchors.ts +183 -0
  30. package/src/core/state/README.md +3 -0
  31. package/src/core/state/editor-state.ts +892 -0
  32. package/src/core/state/text-transaction.ts +869 -0
  33. package/src/formats/xlsx/io/parse-shared-strings.ts +41 -0
  34. package/src/formats/xlsx/io/parse-sheet.ts +459 -0
  35. package/src/formats/xlsx/io/parse-styles.ts +59 -0
  36. package/src/formats/xlsx/io/parse-workbook.ts +75 -0
  37. package/src/formats/xlsx/io/serialize-shared-strings.ts +72 -0
  38. package/src/formats/xlsx/io/serialize-sheet.ts +333 -0
  39. package/src/formats/xlsx/io/serialize-styles.ts +98 -0
  40. package/src/formats/xlsx/io/serialize-workbook.ts +429 -0
  41. package/src/formats/xlsx/io/xlsx-session.ts +314 -0
  42. package/src/formats/xlsx/model/cell.ts +189 -0
  43. package/src/formats/xlsx/model/sheet.ts +326 -0
  44. package/src/formats/xlsx/model/styles.ts +118 -0
  45. package/src/formats/xlsx/model/workbook.ts +453 -0
  46. package/src/formats/xlsx/runtime/cell-commands.ts +567 -0
  47. package/src/formats/xlsx/runtime/sheet-commands.ts +206 -0
  48. package/src/formats/xlsx/runtime/workbook-runtime.ts +177 -0
  49. package/src/formats/xlsx/runtime/workbook-transaction.ts +822 -0
  50. package/src/index.ts +142 -0
  51. package/src/io/README.md +10 -0
  52. package/src/io/docx-session.ts +3175 -0
  53. package/src/io/export/README.md +3 -0
  54. package/src/io/export/export-session.ts +220 -0
  55. package/src/io/export/minimal-docx.ts +115 -0
  56. package/src/io/export/reattach-preserved-parts.ts +54 -0
  57. package/src/io/export/serialize-comments.ts +947 -0
  58. package/src/io/export/serialize-footnotes.ts +394 -0
  59. package/src/io/export/serialize-headers-footers.ts +368 -0
  60. package/src/io/export/serialize-main-document.ts +1342 -0
  61. package/src/io/export/serialize-numbering.ts +218 -0
  62. package/src/io/export/serialize-revisions.ts +389 -0
  63. package/src/io/export/serialize-runtime-revisions.ts +463 -0
  64. package/src/io/export/serialize-tables.ts +174 -0
  65. package/src/io/export/split-review-boundaries.ts +356 -0
  66. package/src/io/export/split-story-blocks-for-runtime-revisions.ts +252 -0
  67. package/src/io/export/table-properties-xml.ts +318 -0
  68. package/src/io/normalize/README.md +3 -0
  69. package/src/io/normalize/normalize-text.ts +670 -0
  70. package/src/io/ooxml/README.md +3 -0
  71. package/src/io/ooxml/highlight-colors.ts +39 -0
  72. package/src/io/ooxml/numbering-sentinels.ts +44 -0
  73. package/src/io/ooxml/parse-comments.ts +852 -0
  74. package/src/io/ooxml/parse-complex-content.ts +287 -0
  75. package/src/io/ooxml/parse-fields.ts +834 -0
  76. package/src/io/ooxml/parse-footnotes.ts +952 -0
  77. package/src/io/ooxml/parse-headers-footers.ts +1212 -0
  78. package/src/io/ooxml/parse-inline-media.ts +461 -0
  79. package/src/io/ooxml/parse-main-document.ts +2947 -0
  80. package/src/io/ooxml/parse-numbering.ts +747 -0
  81. package/src/io/ooxml/parse-revisions.ts +1045 -0
  82. package/src/io/ooxml/parse-settings.ts +184 -0
  83. package/src/io/ooxml/parse-shapes.ts +296 -0
  84. package/src/io/ooxml/parse-styles.ts +639 -0
  85. package/src/io/ooxml/parse-tables.ts +627 -0
  86. package/src/io/ooxml/parse-theme.ts +346 -0
  87. package/src/io/ooxml/part-manifest.ts +136 -0
  88. package/src/io/ooxml/revision-boundaries.ts +475 -0
  89. package/src/io/ooxml/workflow-payload.ts +544 -0
  90. package/src/io/opc/README.md +3 -0
  91. package/src/io/opc/corrupt-package.ts +166 -0
  92. package/src/io/opc/docx-package.ts +74 -0
  93. package/src/io/opc/package-reader.ts +325 -0
  94. package/src/io/opc/package-writer.ts +273 -0
  95. package/src/io/source-package-provenance.ts +241 -0
  96. package/{dist/chunk-RMH72RZI.js → src/legal/bookmarks.ts} +130 -44
  97. package/src/legal/cross-references.ts +414 -0
  98. package/src/legal/defined-terms.ts +203 -0
  99. package/src/legal/index.ts +32 -0
  100. package/src/legal/signature-blocks.ts +259 -0
  101. package/src/model/README.md +3 -0
  102. package/src/model/canonical-document.ts +2722 -0
  103. package/src/model/cds-1.0.0.ts +212 -0
  104. package/src/model/snapshot.ts +760 -0
  105. package/src/preservation/README.md +3 -0
  106. package/src/preservation/markup-compatibility.ts +48 -0
  107. package/src/preservation/opaque-fragment-store.ts +89 -0
  108. package/src/preservation/opaque-region.ts +233 -0
  109. package/src/preservation/package-preservation.ts +113 -0
  110. package/src/preservation/preserved-part-manifest.ts +56 -0
  111. package/src/preservation/relationship-retention.ts +57 -0
  112. package/src/preservation/store.ts +255 -0
  113. package/src/review/README.md +16 -0
  114. package/src/review/store/README.md +3 -0
  115. package/src/review/store/comment-anchors.ts +70 -0
  116. package/src/review/store/comment-remapping.ts +154 -0
  117. package/src/review/store/comment-store.ts +349 -0
  118. package/src/review/store/comment-thread.ts +109 -0
  119. package/src/review/store/revision-actions.ts +423 -0
  120. package/src/review/store/revision-store.ts +323 -0
  121. package/src/review/store/revision-types.ts +182 -0
  122. package/src/review/store/runtime-comment-store.ts +43 -0
  123. package/src/runtime/README.md +3 -0
  124. package/src/runtime/ai-action-policy.ts +764 -0
  125. package/src/runtime/context-analytics.ts +824 -0
  126. package/src/runtime/document-layout.ts +332 -0
  127. package/src/runtime/document-locations.ts +521 -0
  128. package/src/runtime/document-navigation.ts +616 -0
  129. package/src/runtime/document-outline.ts +440 -0
  130. package/src/runtime/document-runtime.ts +4055 -0
  131. package/src/runtime/document-search.ts +145 -0
  132. package/src/runtime/event-refresh-hints.ts +137 -0
  133. package/src/runtime/numbering-prefix.ts +244 -0
  134. package/src/runtime/page-layout-estimation.ts +305 -0
  135. package/src/runtime/read-only-diagnostics-runtime.ts +241 -0
  136. package/src/runtime/resolved-numbering-geometry.ts +293 -0
  137. package/src/runtime/review-runtime.ts +44 -0
  138. package/src/runtime/revision-runtime.ts +107 -0
  139. package/src/runtime/session-capabilities.ts +192 -0
  140. package/src/runtime/story-context.ts +164 -0
  141. package/src/runtime/story-targeting.ts +162 -0
  142. package/src/runtime/suggestions-snapshot.ts +137 -0
  143. package/src/runtime/surface-projection.ts +1553 -0
  144. package/src/runtime/table-commands.ts +173 -0
  145. package/src/runtime/table-schema.ts +309 -0
  146. package/src/runtime/table-style-resolver.ts +409 -0
  147. package/src/runtime/view-state.ts +493 -0
  148. package/src/runtime/virtualized-rendering.ts +258 -0
  149. package/src/runtime/workflow-markup.ts +393 -0
  150. package/src/ui/README.md +30 -0
  151. package/src/ui/WordReviewEditor.tsx +5268 -0
  152. package/src/ui/browser-export.ts +52 -0
  153. package/src/ui/comments/README.md +3 -0
  154. package/src/ui/compatibility/README.md +3 -0
  155. package/src/ui/editor-command-bag.ts +127 -0
  156. package/src/ui/editor-runtime-boundary.ts +1558 -0
  157. package/src/ui/editor-shell-view.tsx +144 -0
  158. package/src/ui/editor-surface/README.md +3 -0
  159. package/src/ui/editor-surface-controller.tsx +66 -0
  160. package/src/ui/headless/comment-decoration-model.ts +124 -0
  161. package/src/ui/headless/preserve-editor-selection.ts +5 -0
  162. package/src/ui/headless/revision-decoration-model.ts +128 -0
  163. package/src/ui/headless/selection-helpers.ts +54 -0
  164. package/src/ui/headless/selection-tool-context.ts +19 -0
  165. package/src/ui/headless/selection-tool-resolver.ts +752 -0
  166. package/src/ui/headless/selection-tool-types.ts +129 -0
  167. package/src/ui/headless/selection-toolbar-model.ts +11 -0
  168. package/src/ui/headless/use-editor-keyboard.ts +103 -0
  169. package/src/ui/review/README.md +3 -0
  170. package/src/ui/runtime-shortcut-dispatch.ts +365 -0
  171. package/src/ui/runtime-snapshot-selectors.ts +197 -0
  172. package/src/ui/shared/revision-filters.ts +31 -0
  173. package/src/ui/status/README.md +3 -0
  174. package/src/ui/theme/README.md +3 -0
  175. package/src/ui/toolbar/README.md +3 -0
  176. package/src/ui/workflow-surface-blocked-rails.ts +94 -0
  177. package/src/ui-tailwind/chrome/chrome-preset-model.ts +107 -0
  178. package/src/ui-tailwind/chrome/chrome-preset-toolbar.tsx +15 -0
  179. package/src/ui-tailwind/chrome/review-queue-bar.tsx +97 -0
  180. package/src/ui-tailwind/chrome/tw-alert-banner.tsx +64 -0
  181. package/src/ui-tailwind/chrome/tw-context-analytics-summary.tsx +122 -0
  182. package/src/ui-tailwind/chrome/tw-image-context-toolbar.tsx +121 -0
  183. package/src/ui-tailwind/chrome/tw-layout-panel.tsx +114 -0
  184. package/src/ui-tailwind/chrome/tw-object-context-toolbar.tsx +30 -0
  185. package/src/ui-tailwind/chrome/tw-page-ruler.tsx +365 -0
  186. package/src/ui-tailwind/chrome/tw-selection-tool-blocked.tsx +23 -0
  187. package/src/ui-tailwind/chrome/tw-selection-tool-comment.tsx +35 -0
  188. package/src/ui-tailwind/chrome/tw-selection-tool-formatting.tsx +37 -0
  189. package/src/ui-tailwind/chrome/tw-selection-tool-host.tsx +298 -0
  190. package/src/ui-tailwind/chrome/tw-selection-tool-structure.tsx +116 -0
  191. package/src/ui-tailwind/chrome/tw-selection-tool-suggestion.tsx +29 -0
  192. package/src/ui-tailwind/chrome/tw-selection-tool-workflow.tsx +27 -0
  193. package/src/ui-tailwind/chrome/tw-selection-toolbar.tsx +186 -0
  194. package/src/ui-tailwind/chrome/tw-suggestion-card.tsx +139 -0
  195. package/src/ui-tailwind/chrome/tw-table-context-toolbar.tsx +200 -0
  196. package/src/ui-tailwind/chrome/tw-unsaved-modal.tsx +58 -0
  197. package/src/ui-tailwind/chrome/use-before-unload.ts +20 -0
  198. package/src/ui-tailwind/editor-surface/perf-probe.ts +179 -0
  199. package/src/ui-tailwind/editor-surface/pm-command-bridge.ts +189 -0
  200. package/src/ui-tailwind/editor-surface/pm-contextual-ui.ts +31 -0
  201. package/src/ui-tailwind/editor-surface/pm-decorations.ts +411 -0
  202. package/src/ui-tailwind/editor-surface/pm-position-map.ts +123 -0
  203. package/src/ui-tailwind/editor-surface/pm-schema.ts +927 -0
  204. package/src/ui-tailwind/editor-surface/pm-state-from-snapshot.ts +567 -0
  205. package/src/ui-tailwind/editor-surface/search-plugin.ts +168 -0
  206. package/src/ui-tailwind/editor-surface/surface-build-keys.ts +65 -0
  207. package/src/ui-tailwind/editor-surface/tw-caret.tsx +12 -0
  208. package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +150 -0
  209. package/src/ui-tailwind/editor-surface/tw-inline-token.tsx +129 -0
  210. package/src/ui-tailwind/editor-surface/tw-opaque-block.tsx +58 -0
  211. package/src/ui-tailwind/editor-surface/tw-paragraph-block.tsx +151 -0
  212. package/src/ui-tailwind/editor-surface/tw-prosemirror-surface.tsx +1047 -0
  213. package/src/ui-tailwind/editor-surface/tw-segment-view.tsx +111 -0
  214. package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +503 -0
  215. package/src/ui-tailwind/index.ts +62 -0
  216. package/src/ui-tailwind/page-chrome-model.ts +27 -0
  217. package/src/ui-tailwind/review/tw-comment-sidebar.tsx +406 -0
  218. package/src/ui-tailwind/review/tw-health-panel.tsx +149 -0
  219. package/src/ui-tailwind/review/tw-review-rail.tsx +122 -0
  220. package/src/ui-tailwind/review/tw-revision-sidebar.tsx +164 -0
  221. package/src/ui-tailwind/status/tw-status-bar.tsx +65 -0
  222. package/{dist → src}/ui-tailwind/theme/editor-theme.css +58 -40
  223. package/src/ui-tailwind/toolbar/tw-toolbar-icon-button.tsx +52 -0
  224. package/src/ui-tailwind/toolbar/tw-toolbar.tsx +1133 -0
  225. package/src/ui-tailwind/tw-review-workspace.tsx +1460 -0
  226. package/src/validation/README.md +3 -0
  227. package/src/validation/compatibility-engine.ts +878 -0
  228. package/src/validation/compatibility-report.ts +161 -0
  229. package/src/validation/diagnostics.ts +204 -0
  230. package/src/validation/docx-comment-proof.ts +720 -0
  231. package/src/validation/import-diagnostics.ts +128 -0
  232. package/src/validation/low-priority-word-surfaces.ts +373 -0
  233. package/dist/canonical-document-BLEbzL2J.d.cts +0 -844
  234. package/dist/canonical-document-BLEbzL2J.d.ts +0 -844
  235. package/dist/chunk-2FJS5GZM.js +0 -763
  236. package/dist/chunk-2FJS5GZM.js.map +0 -1
  237. package/dist/chunk-2OQBZS3F.js +0 -446
  238. package/dist/chunk-2OQBZS3F.js.map +0 -1
  239. package/dist/chunk-2S7W4KFO.js +0 -127
  240. package/dist/chunk-2S7W4KFO.js.map +0 -1
  241. package/dist/chunk-2TG72QSW.js +0 -3874
  242. package/dist/chunk-2TG72QSW.js.map +0 -1
  243. package/dist/chunk-36QNIZBO.js +0 -532
  244. package/dist/chunk-36QNIZBO.js.map +0 -1
  245. package/dist/chunk-4AQOYAW4.js +0 -3069
  246. package/dist/chunk-4AQOYAW4.js.map +0 -1
  247. package/dist/chunk-4D5EWJ3P.js +0 -77
  248. package/dist/chunk-4D5EWJ3P.js.map +0 -1
  249. package/dist/chunk-5FN54NDH.js +0 -2257
  250. package/dist/chunk-5FN54NDH.js.map +0 -1
  251. package/dist/chunk-BOYGQYRQ.js +0 -7306
  252. package/dist/chunk-BOYGQYRQ.js.map +0 -1
  253. package/dist/chunk-CN3XMECL.js +0 -212
  254. package/dist/chunk-CN3XMECL.js.map +0 -1
  255. package/dist/chunk-EBI3BX6U.js +0 -164
  256. package/dist/chunk-EBI3BX6U.js.map +0 -1
  257. package/dist/chunk-EILUG3VB.js +0 -1275
  258. package/dist/chunk-EILUG3VB.js.map +0 -1
  259. package/dist/chunk-FUDY333O.js +0 -70
  260. package/dist/chunk-FUDY333O.js.map +0 -1
  261. package/dist/chunk-GBVOWFIK.js +0 -1237
  262. package/dist/chunk-GBVOWFIK.js.map +0 -1
  263. package/dist/chunk-H4TQ3H3Y.js +0 -262
  264. package/dist/chunk-H4TQ3H3Y.js.map +0 -1
  265. package/dist/chunk-JGB3IXZO.js +0 -189
  266. package/dist/chunk-JGB3IXZO.js.map +0 -1
  267. package/dist/chunk-KD2QRQPY.js +0 -4342
  268. package/dist/chunk-KD2QRQPY.js.map +0 -1
  269. package/dist/chunk-KLMXQVYK.js +0 -369
  270. package/dist/chunk-KLMXQVYK.js.map +0 -1
  271. package/dist/chunk-KZUG5KFQ.js +0 -214
  272. package/dist/chunk-KZUG5KFQ.js.map +0 -1
  273. package/dist/chunk-QDAQ4CJU.js +0 -345
  274. package/dist/chunk-QDAQ4CJU.js.map +0 -1
  275. package/dist/chunk-RMH72RZI.js.map +0 -1
  276. package/dist/chunk-SWKWQZXM.js +0 -117
  277. package/dist/chunk-SWKWQZXM.js.map +0 -1
  278. package/dist/chunk-TJBP2K4T.js.map +0 -1
  279. package/dist/chunk-TLCEAQDQ.js +0 -542
  280. package/dist/chunk-TLCEAQDQ.js.map +0 -1
  281. package/dist/chunk-UZXBISGO.js.map +0 -1
  282. package/dist/chunk-WGBAKP3Q.js +0 -3220
  283. package/dist/chunk-WGBAKP3Q.js.map +0 -1
  284. package/dist/compare/index.cjs +0 -5475
  285. package/dist/compare/index.cjs.map +0 -1
  286. package/dist/compare/index.d.cts +0 -114
  287. package/dist/compare/index.d.ts +0 -114
  288. package/dist/compare/index.js +0 -731
  289. package/dist/compare/index.js.map +0 -1
  290. package/dist/core/commands/formatting-commands.cjs +0 -828
  291. package/dist/core/commands/formatting-commands.cjs.map +0 -1
  292. package/dist/core/commands/formatting-commands.d.cts +0 -63
  293. package/dist/core/commands/formatting-commands.d.ts +0 -63
  294. package/dist/core/commands/formatting-commands.js +0 -37
  295. package/dist/core/commands/formatting-commands.js.map +0 -1
  296. package/dist/core/commands/image-commands.cjs +0 -2023
  297. package/dist/core/commands/image-commands.cjs.map +0 -1
  298. package/dist/core/commands/image-commands.d.cts +0 -58
  299. package/dist/core/commands/image-commands.d.ts +0 -58
  300. package/dist/core/commands/image-commands.js +0 -18
  301. package/dist/core/commands/image-commands.js.map +0 -1
  302. package/dist/core/commands/section-layout-commands.cjs.map +0 -1
  303. package/dist/core/commands/section-layout-commands.d.cts +0 -62
  304. package/dist/core/commands/section-layout-commands.d.ts +0 -62
  305. package/dist/core/commands/section-layout-commands.js +0 -21
  306. package/dist/core/commands/section-layout-commands.js.map +0 -1
  307. package/dist/core/commands/style-commands.cjs.map +0 -1
  308. package/dist/core/commands/style-commands.d.cts +0 -13
  309. package/dist/core/commands/style-commands.d.ts +0 -13
  310. package/dist/core/commands/style-commands.js +0 -9
  311. package/dist/core/commands/style-commands.js.map +0 -1
  312. package/dist/core/commands/table-structure-commands.cjs +0 -1883
  313. package/dist/core/commands/table-structure-commands.cjs.map +0 -1
  314. package/dist/core/commands/table-structure-commands.d.cts +0 -59
  315. package/dist/core/commands/table-structure-commands.d.ts +0 -59
  316. package/dist/core/commands/table-structure-commands.js +0 -12
  317. package/dist/core/commands/table-structure-commands.js.map +0 -1
  318. package/dist/core/commands/text-commands.cjs +0 -2391
  319. package/dist/core/commands/text-commands.cjs.map +0 -1
  320. package/dist/core/commands/text-commands.d.cts +0 -24
  321. package/dist/core/commands/text-commands.d.ts +0 -24
  322. package/dist/core/commands/text-commands.js +0 -28
  323. package/dist/core/commands/text-commands.js.map +0 -1
  324. package/dist/core/selection/mapping.cjs +0 -200
  325. package/dist/core/selection/mapping.cjs.map +0 -1
  326. package/dist/core/selection/mapping.d.cts +0 -2
  327. package/dist/core/selection/mapping.d.ts +0 -2
  328. package/dist/core/selection/mapping.js +0 -31
  329. package/dist/core/selection/mapping.js.map +0 -1
  330. package/dist/core/state/editor-state.cjs +0 -2278
  331. package/dist/core/state/editor-state.cjs.map +0 -1
  332. package/dist/core/state/editor-state.d.cts +0 -2
  333. package/dist/core/state/editor-state.d.ts +0 -2
  334. package/dist/core/state/editor-state.js +0 -26
  335. package/dist/core/state/editor-state.js.map +0 -1
  336. package/dist/index.cjs +0 -38553
  337. package/dist/index.cjs.map +0 -1
  338. package/dist/index.d.cts +0 -15
  339. package/dist/index.d.ts +0 -15
  340. package/dist/index.js +0 -7856
  341. package/dist/index.js.map +0 -1
  342. package/dist/io/docx-session.cjs +0 -16236
  343. package/dist/io/docx-session.cjs.map +0 -1
  344. package/dist/io/docx-session.d.cts +0 -21
  345. package/dist/io/docx-session.d.ts +0 -21
  346. package/dist/io/docx-session.js +0 -18
  347. package/dist/io/docx-session.js.map +0 -1
  348. package/dist/legal/index.cjs +0 -3900
  349. package/dist/legal/index.cjs.map +0 -1
  350. package/dist/legal/index.d.cts +0 -86
  351. package/dist/legal/index.d.ts +0 -86
  352. package/dist/legal/index.js +0 -616
  353. package/dist/legal/index.js.map +0 -1
  354. package/dist/public-types-7ZL_94cz.d.ts +0 -1573
  355. package/dist/public-types-CeMaDueh.d.cts +0 -1573
  356. package/dist/public-types.cjs +0 -19
  357. package/dist/public-types.cjs.map +0 -1
  358. package/dist/public-types.d.cts +0 -2
  359. package/dist/public-types.d.ts +0 -2
  360. package/dist/public-types.js +0 -1
  361. package/dist/public-types.js.map +0 -1
  362. package/dist/runtime/document-runtime.cjs +0 -11140
  363. package/dist/runtime/document-runtime.cjs.map +0 -1
  364. package/dist/runtime/document-runtime.d.cts +0 -231
  365. package/dist/runtime/document-runtime.d.ts +0 -231
  366. package/dist/runtime/document-runtime.js +0 -21
  367. package/dist/runtime/document-runtime.js.map +0 -1
  368. package/dist/structural-helpers-CilgOVhh.d.cts +0 -10
  369. package/dist/structural-helpers-q0Gd-eBN.d.ts +0 -10
  370. package/dist/ui-tailwind/editor-surface/search-plugin.cjs +0 -313
  371. package/dist/ui-tailwind/editor-surface/search-plugin.cjs.map +0 -1
  372. package/dist/ui-tailwind/editor-surface/search-plugin.d.cts +0 -67
  373. package/dist/ui-tailwind/editor-surface/search-plugin.d.ts +0 -67
  374. package/dist/ui-tailwind/editor-surface/search-plugin.js +0 -23
  375. package/dist/ui-tailwind/editor-surface/search-plugin.js.map +0 -1
  376. package/dist/ui-tailwind/index.cjs +0 -4833
  377. package/dist/ui-tailwind/index.cjs.map +0 -1
  378. package/dist/ui-tailwind/index.d.cts +0 -617
  379. package/dist/ui-tailwind/index.d.ts +0 -617
  380. package/dist/ui-tailwind/index.js +0 -575
  381. package/dist/ui-tailwind/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/state/editor-state.ts","../../../src/core/selection/mapping.ts","../../../src/model/cds-1.0.0.ts","../../../src/model/canonical-document.ts","../../../src/model/snapshot.ts"],"sourcesContent":["import {\n DEFAULT_BOUNDARY_ASSOC,\n createDetachedAnchor,\n createNodeAnchor,\n createRangeAnchor,\n type EditorAnchorProjection,\n} from \"../selection/mapping.ts\";\nimport { isUuid } from \"../../model/cds-1.0.0.ts\";\nimport {\n assertPersistedEditorSnapshot as assertModelPersistedEditorSnapshot,\n createPersistedEditorSnapshot as createModelPersistedEditorSnapshot,\n validatePersistedEditorSnapshot as validateModelPersistedEditorSnapshot,\n type ProtectionSnapshotRecord as ModelProtectionSnapshotRecord,\n type PersistedEditorSnapshot as ModelPersistedEditorSnapshot,\n} from \"../../model/snapshot.ts\";\nimport {\n assertCanonicalDocument,\n type CanonicalDocument,\n type CommentEntry as ModelCommentEntry,\n type CommentResolution as ModelCommentResolution,\n type CommentThread as ModelCommentThread,\n type RevisionMetadataRecord as ModelRevisionMetadataRecord,\n type RevisionRecord as ModelRevisionRecord,\n} from \"../../model/canonical-document.ts\";\n\nexport type RuntimePhase = \"loading\" | \"ready\" | \"error\";\nexport type EditorWarningCode =\n | \"unsupported_ooxml_preserved\"\n | \"unsupported_ooxml_locked\"\n | \"import_normalized\"\n | \"export_roundtrip_risk\"\n | \"comment_anchor_detached\"\n | \"revision_anchor_detached\"\n | \"large_document_degraded\"\n | \"font_substitution\"\n | \"image_missing\";\n\nexport interface EditorWarning {\n warningId: string;\n code: EditorWarningCode;\n severity: \"info\" | \"warning\";\n message: string;\n source:\n | \"import\"\n | \"runtime\"\n | \"review\"\n | \"preservation\"\n | \"validation\"\n | \"export\";\n affectedAnchor?: EditorAnchorProjection;\n featureEntryId?: string;\n details?: Record<string, unknown>;\n}\n\nexport interface EditorError {\n errorId: string;\n code:\n | \"import_failed\"\n | \"export_failed\"\n | \"package_corrupt\"\n | \"validation_failed\"\n | \"datastore_failed\"\n | \"internal_invariant\";\n message: string;\n isFatal: boolean;\n source: \"import\" | \"runtime\" | \"validation\" | \"datastore\" | \"host\" | \"export\";\n details?: Record<string, unknown>;\n}\n\nexport type CompatibilityFeatureClass =\n | \"supported-roundtrip\"\n | \"preserve-only\"\n | \"unsupported-fatal\";\n\nexport interface CompatibilityFeatureEntry {\n featureEntryId: string;\n featureKey: string;\n featureClass: CompatibilityFeatureClass;\n message: string;\n affectedAnchor?: EditorAnchorProjection;\n details?: Record<string, unknown>;\n}\n\nexport interface CompatibilityReport {\n reportVersion: \"compatibility-report/1\";\n generatedAt: string;\n blockExport: boolean;\n featureEntries: CompatibilityFeatureEntry[];\n warnings: EditorWarning[];\n errors: EditorError[];\n}\n\nexport type CommentEntryRecord = ModelCommentEntry;\nexport type CommentResolutionRecord = ModelCommentResolution;\nexport type CommentThreadRecord = ModelCommentThread;\nexport type RevisionMetadataRecord = ModelRevisionMetadataRecord;\nexport type RevisionRecord = ModelRevisionRecord;\nexport type ReviewStore = CanonicalDocument[\"review\"];\nexport type CanonicalDocumentEnvelope = CanonicalDocument;\n\nexport interface SelectionSnapshot {\n anchor: number;\n head: number;\n isCollapsed: boolean;\n activeRange: EditorAnchorProjection;\n}\n\nexport interface DocumentStats {\n paragraphCount: number;\n wordCount: number;\n characterCount: number;\n commentCount: number;\n revisionCount: number;\n}\n\nexport interface CommentSidebarSnapshot {\n activeCommentId?: string;\n openThreadCount: number;\n resolvedThreadCount: number;\n threads: CommentThreadRecord[];\n}\n\nexport interface TrackedChangesSnapshot {\n totalCount: number;\n pendingCount: number;\n acceptedCount: number;\n rejectedCount: number;\n}\n\nexport interface CompatibilityPanelSnapshot {\n report: CompatibilityReport;\n blockExport: boolean;\n totalEntries: number;\n}\n\nexport interface CommandStateSnapshot {\n canUndo: boolean;\n canRedo: boolean;\n canAddComment: boolean;\n canAcceptAllChanges: boolean;\n canRejectAllChanges: boolean;\n}\n\nexport interface RuntimeRenderSnapshot {\n documentId: string;\n sessionId: string;\n sourceLabel?: string;\n revisionToken: string;\n isReady: boolean;\n isDirty: boolean;\n readOnly: boolean;\n selection: SelectionSnapshot;\n documentStats: DocumentStats;\n comments: CommentSidebarSnapshot;\n trackedChanges: TrackedChangesSnapshot;\n compatibility: CompatibilityPanelSnapshot;\n warnings: EditorWarning[];\n fatalError?: EditorError;\n commandState: CommandStateSnapshot;\n}\n\nexport interface PersistedEditorSnapshot\n extends Omit<\n ModelPersistedEditorSnapshot,\n \"canonicalDocument\" | \"compatibility\" | \"warningLog\"\n > {\n canonicalDocument: CanonicalDocumentEnvelope;\n compatibility: CompatibilityReport;\n warningLog: EditorWarning[];\n}\n\nexport interface EditorRuntimeState {\n hasFocus: boolean;\n activeCommentId?: string;\n}\n\nexport interface EditorState {\n phase: RuntimePhase;\n documentId: string;\n sessionId: string;\n sourceLabel?: string;\n sourcePackage?: ModelPersistedEditorSnapshot[\"sourcePackage\"];\n revision: number;\n revisionToken: string;\n isDirty: boolean;\n readOnly: boolean;\n document: CanonicalDocumentEnvelope;\n selection: SelectionSnapshot;\n warnings: EditorWarning[];\n compatibility: CompatibilityReport;\n fatalError?: EditorError;\n runtime: EditorRuntimeState;\n}\n\nexport interface CreateEditorStateOptions {\n documentId: string;\n sessionId: string;\n sourceLabel?: string;\n readOnly?: boolean;\n canonicalDocument?: CanonicalDocumentEnvelope;\n persistedSnapshot?: PersistedEditorSnapshot;\n compatibility?: CompatibilityReport;\n warnings?: EditorWarning[];\n fatalError?: EditorError;\n}\n\nexport function createEmptyReviewStore(): ReviewStore {\n return {\n comments: {},\n revisions: {},\n };\n}\n\nexport function createDefaultCanonicalDocument(\n documentId: string,\n timestamp: string,\n): CanonicalDocumentEnvelope {\n return {\n schemaVersion: \"cds/1.0.0\",\n docId: createCanonicalDocumentId(documentId),\n createdAt: timestamp,\n updatedAt: timestamp,\n metadata: {\n customProperties: {},\n },\n styles: {\n paragraphs: {},\n characters: {},\n tables: {},\n },\n numbering: {\n abstractDefinitions: {},\n instances: {},\n },\n media: {\n items: {},\n },\n content: {\n type: \"doc\",\n children: [{ type: \"paragraph\", children: [] }],\n },\n review: createEmptyReviewStore(),\n preservation: {\n opaqueFragments: {},\n packageParts: {},\n },\n diagnostics: {\n warnings: [],\n errors: [],\n },\n };\n}\n\nexport function createSelectionSnapshot(anchor = 0, head = anchor): SelectionSnapshot {\n return {\n anchor,\n head,\n isCollapsed: anchor === head,\n activeRange: createRangeAnchor(anchor, head, DEFAULT_BOUNDARY_ASSOC),\n };\n}\n\nexport function createEmptyCompatibilityReport(generatedAt: string): CompatibilityReport {\n return {\n reportVersion: \"compatibility-report/1\",\n generatedAt,\n blockExport: false,\n featureEntries: [],\n warnings: [],\n errors: [],\n };\n}\n\nexport function createEditorState(options: CreateEditorStateOptions): EditorState {\n const timestamp = new Date(0).toISOString();\n const normalizedSnapshot = options.persistedSnapshot\n ? normalizePersistedSnapshotForRuntime(options.persistedSnapshot, options.documentId, timestamp)\n : undefined;\n if (options.canonicalDocument) {\n assertCanonicalDocument(options.canonicalDocument as unknown);\n }\n\n const normalizedDocument = normalizedSnapshot\n ? structuredClone(normalizedSnapshot.canonicalDocument)\n : options.canonicalDocument\n ? structuredClone(options.canonicalDocument)\n : createDefaultCanonicalDocument(options.documentId, timestamp);\n const warnings = normalizedSnapshot\n ? normalizeWarningLog(normalizedSnapshot.warningLog)\n : options.warnings ?? [];\n const compatibility =\n normalizedSnapshot\n ? normalizeCompatibilityReport(normalizedSnapshot.compatibility)\n : options.compatibility ?? createEmptyCompatibilityReport(normalizedDocument.updatedAt);\n\n return {\n phase: options.fatalError ? \"error\" : \"ready\",\n documentId: options.documentId,\n sessionId: options.sessionId,\n sourceLabel: options.sourceLabel,\n sourcePackage: normalizedSnapshot?.sourcePackage,\n revision: 0,\n revisionToken: `${options.sessionId}:0`,\n isDirty: false,\n readOnly: options.readOnly ?? false,\n document: normalizedDocument,\n selection: createSelectionSnapshot(),\n warnings,\n compatibility,\n fatalError: options.fatalError,\n runtime: {\n hasFocus: false,\n },\n };\n}\n\nfunction normalizePersistedSnapshotForRuntime(\n snapshot: PersistedEditorSnapshot,\n documentId: string,\n timestamp: string,\n): PersistedEditorSnapshot {\n const issues = validateModelPersistedEditorSnapshot(snapshot as unknown);\n if (issues.length === 0) {\n return snapshot;\n }\n\n if (!isRecord(snapshot) || !isRecord(snapshot.canonicalDocument)) {\n assertModelPersistedEditorSnapshot(snapshot as unknown);\n }\n\n const normalizedDocument = normalizeCanonicalDocumentEnvelope(\n snapshot.canonicalDocument,\n documentId,\n timestamp,\n );\n try {\n assertCanonicalDocument(normalizedDocument as unknown);\n } catch {\n assertModelPersistedEditorSnapshot(snapshot as unknown);\n }\n const repairWarning = createSnapshotRepairWarning(issues.length);\n const compatibility = coerceCompatibilityReport(\n snapshot.compatibility,\n normalizedDocument.updatedAt,\n repairWarning,\n );\n\n return {\n snapshotVersion:\n snapshot.snapshotVersion === \"persisted-editor-snapshot/1\" ||\n snapshot.snapshotVersion === \"persisted-editor-snapshot/2\"\n ? snapshot.snapshotVersion\n : \"persisted-editor-snapshot/2\",\n schemaVersion: \"cds/1.0.0\",\n documentId:\n typeof snapshot.documentId === \"string\" && snapshot.documentId.length > 0\n ? snapshot.documentId\n : documentId,\n docId: normalizedDocument.docId,\n createdAt: normalizedDocument.createdAt,\n updatedAt: normalizedDocument.updatedAt,\n savedAt:\n typeof snapshot.savedAt === \"string\" && snapshot.savedAt.length > 0\n ? snapshot.savedAt\n : normalizedDocument.updatedAt,\n editorBuild:\n typeof snapshot.editorBuild === \"string\" && snapshot.editorBuild.length > 0\n ? snapshot.editorBuild\n : \"dev\",\n canonicalDocument: normalizedDocument,\n compatibility,\n warningLog: dedupeWarnings([\n ...coerceWarnings(snapshot.warningLog),\n repairWarning,\n ]),\n sourcePackage: snapshot.sourcePackage,\n };\n}\n\nfunction normalizeCanonicalDocumentEnvelope(\n value: unknown,\n documentId: string,\n timestamp: string,\n): CanonicalDocumentEnvelope {\n const base = createDefaultCanonicalDocument(documentId, timestamp);\n const record = isRecord(value) ? value : {};\n const metadata = isRecord(record.metadata) ? record.metadata : {};\n\n return {\n ...base,\n ...record,\n schemaVersion: \"cds/1.0.0\",\n docId: isUuid(record.docId) ? record.docId : createCanonicalDocumentId(documentId),\n createdAt:\n typeof record.createdAt === \"string\" && record.createdAt.length > 0\n ? record.createdAt\n : base.createdAt,\n updatedAt:\n typeof record.updatedAt === \"string\" && record.updatedAt.length > 0\n ? record.updatedAt\n : base.updatedAt,\n metadata: {\n ...base.metadata,\n ...metadata,\n customProperties: isRecord(metadata.customProperties)\n ? (Object.fromEntries(\n Object.entries(metadata.customProperties).filter(([, entry]) => typeof entry === \"string\"),\n ) as Record<string, string>)\n : {},\n },\n styles:\n record.styles === undefined\n ? base.styles\n : (record.styles as CanonicalDocumentEnvelope[\"styles\"]),\n numbering:\n record.numbering === undefined\n ? base.numbering\n : (record.numbering as CanonicalDocumentEnvelope[\"numbering\"]),\n media:\n record.media === undefined\n ? base.media\n : (record.media as CanonicalDocumentEnvelope[\"media\"]),\n content: isRecord(record.content)\n ? (record.content as unknown as CanonicalDocumentEnvelope[\"content\"])\n : base.content,\n review:\n record.review === undefined\n ? base.review\n : (record.review as CanonicalDocumentEnvelope[\"review\"]),\n preservation:\n record.preservation === undefined\n ? base.preservation\n : (record.preservation as CanonicalDocumentEnvelope[\"preservation\"]),\n diagnostics:\n record.diagnostics === undefined\n ? base.diagnostics\n : (record.diagnostics as CanonicalDocumentEnvelope[\"diagnostics\"]),\n ...(isRecord(record.subParts)\n ? { subParts: record.subParts as unknown as CanonicalDocumentEnvelope[\"subParts\"] }\n : {}),\n };\n}\n\nfunction coerceCompatibilityReport(\n value: unknown,\n generatedAt: string,\n repairWarning: EditorWarning,\n): CompatibilityReport {\n const record = isRecord(value) ? value : {};\n const warnings = dedupeWarnings([\n ...coerceWarnings(record.warnings),\n repairWarning,\n ]);\n\n return {\n reportVersion: \"compatibility-report/1\",\n generatedAt:\n typeof record.generatedAt === \"string\" && record.generatedAt.length > 0\n ? record.generatedAt\n : generatedAt,\n blockExport: typeof record.blockExport === \"boolean\" ? record.blockExport : false,\n featureEntries: Array.isArray(record.featureEntries)\n ? record.featureEntries.flatMap((entry) => {\n if (!isRecord(entry)) {\n return [];\n }\n if (\n typeof entry.featureEntryId !== \"string\" ||\n typeof entry.featureKey !== \"string\" ||\n typeof entry.featureClass !== \"string\" ||\n typeof entry.message !== \"string\"\n ) {\n return [];\n }\n return [{\n featureEntryId: entry.featureEntryId,\n featureKey: entry.featureKey,\n featureClass: entry.featureClass as CompatibilityFeatureEntry[\"featureClass\"],\n message: entry.message,\n ...(entry.affectedAnchor && isRecord(entry.affectedAnchor)\n ? { affectedAnchor: entry.affectedAnchor as unknown as EditorAnchorProjection }\n : {}),\n ...(isRecord(entry.details) ? { details: entry.details } : {}),\n }];\n })\n : [],\n warnings,\n errors: Array.isArray(record.errors)\n ? record.errors.flatMap((entry) => {\n if (!isRecord(entry)) {\n return [];\n }\n if (\n typeof entry.errorId !== \"string\" ||\n typeof entry.code !== \"string\" ||\n typeof entry.message !== \"string\" ||\n typeof entry.source !== \"string\" ||\n typeof entry.isFatal !== \"boolean\"\n ) {\n return [];\n }\n return [{\n errorId: entry.errorId,\n code: entry.code as EditorError[\"code\"],\n message: entry.message,\n source: entry.source as EditorError[\"source\"],\n isFatal: entry.isFatal,\n ...(isRecord(entry.details) ? { details: entry.details } : {}),\n }];\n })\n : [],\n };\n}\n\nfunction coerceWarnings(value: unknown): EditorWarning[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value.flatMap((warning) => {\n if (!isRecord(warning)) {\n return [];\n }\n if (\n typeof warning.warningId !== \"string\" ||\n typeof warning.code !== \"string\" ||\n typeof warning.severity !== \"string\" ||\n typeof warning.message !== \"string\" ||\n typeof warning.source !== \"string\"\n ) {\n return [];\n }\n\n return [{\n warningId: warning.warningId,\n code: warning.code as EditorWarning[\"code\"],\n severity: warning.severity as EditorWarning[\"severity\"],\n message: warning.message,\n source: warning.source as EditorWarning[\"source\"],\n ...(warning.affectedAnchor && isRecord(warning.affectedAnchor)\n ? { affectedAnchor: warning.affectedAnchor as unknown as EditorAnchorProjection }\n : {}),\n ...(typeof warning.featureEntryId === \"string\"\n ? { featureEntryId: warning.featureEntryId }\n : {}),\n ...(isRecord(warning.details) ? { details: warning.details } : {}),\n }];\n });\n}\n\nfunction createSnapshotRepairWarning(issueCount: number): EditorWarning {\n return {\n warningId: `warning:snapshot-repair:${issueCount}`,\n code: \"import_normalized\",\n severity: \"warning\",\n message: `Loaded a persisted snapshot after repairing ${issueCount} validation issue${issueCount === 1 ? \"\" : \"s\"}.`,\n source: \"validation\",\n };\n}\n\nfunction dedupeWarnings(warnings: EditorWarning[]): EditorWarning[] {\n const seen = new Set<string>();\n const result: EditorWarning[] = [];\n\n for (const warning of warnings) {\n if (!warning.warningId || seen.has(warning.warningId)) {\n continue;\n }\n seen.add(warning.warningId);\n result.push(warning);\n }\n\n return result;\n}\n\nexport function deriveDocumentStats(state: Pick<EditorState, \"document\">): DocumentStats {\n const serializedContent = extractText(state.document.content);\n\n return {\n paragraphCount: estimateParagraphCount(state.document.content),\n wordCount: serializedContent.trim().length === 0 ? 0 : serializedContent.trim().split(/\\s+/u).length,\n characterCount: Array.from(serializedContent).length,\n commentCount: Object.keys(state.document.review.comments).length,\n revisionCount: Object.keys(state.document.review.revisions).length,\n };\n}\n\nexport function deriveRenderSnapshot(\n state: EditorState,\n history: { canUndo: boolean; canRedo: boolean },\n): RuntimeRenderSnapshot {\n const comments = Object.values(state.document.review.comments).sort((left, right) =>\n left.createdAt.localeCompare(right.createdAt),\n );\n const revisions = Object.values(state.document.review.revisions);\n\n return {\n documentId: state.documentId,\n sessionId: state.sessionId,\n sourceLabel: state.sourceLabel,\n revisionToken: state.revisionToken,\n isReady: state.phase === \"ready\",\n isDirty: state.isDirty,\n readOnly: state.readOnly,\n selection: state.selection,\n documentStats: deriveDocumentStats(state),\n comments: {\n activeCommentId: state.runtime.activeCommentId,\n openThreadCount: comments.filter((comment) => comment.status === \"open\").length,\n resolvedThreadCount: comments.filter((comment) => comment.status === \"resolved\").length,\n threads: comments,\n },\n trackedChanges: {\n totalCount: revisions.length,\n pendingCount: revisions.filter((revision) => revision.status === \"open\").length,\n acceptedCount: revisions.filter((revision) => revision.status === \"accepted\").length,\n rejectedCount: revisions.filter((revision) => revision.status === \"rejected\").length,\n },\n compatibility: {\n report: state.compatibility,\n blockExport: state.compatibility.blockExport,\n totalEntries: state.compatibility.featureEntries.length,\n },\n warnings: state.warnings,\n fatalError: state.fatalError,\n commandState: {\n canUndo: history.canUndo,\n canRedo: history.canRedo,\n canAddComment: !state.readOnly,\n canAcceptAllChanges: revisions.some((revision) => revision.status === \"open\"),\n canRejectAllChanges: revisions.some((revision) => revision.status === \"open\"),\n },\n };\n}\n\nexport function createPersistedEditorSnapshot(\n state: EditorState,\n options: {\n editorBuild: string;\n savedAt: string;\n compatibility?: CompatibilityReport;\n protectionSnapshot?: ModelProtectionSnapshotRecord;\n },\n): PersistedEditorSnapshot {\n const snapshot = createModelPersistedEditorSnapshot({\n documentId: state.documentId,\n savedAt: options.savedAt,\n editorBuild: options.editorBuild,\n canonicalDocument: state.document,\n compatibility: (options.compatibility ?? state.compatibility) as never,\n warningLog: state.warnings as never,\n protectionSnapshot: options.protectionSnapshot,\n sourcePackage: state.sourcePackage,\n });\n return snapshot as PersistedEditorSnapshot;\n}\n\nfunction estimateParagraphCount(content: unknown): number {\n if (Array.isArray(content)) {\n return content.length;\n }\n\n if (content && typeof content === \"object\" && Array.isArray((content as { blocks?: unknown[] }).blocks)) {\n return ((content as { blocks: unknown[] }).blocks).length;\n }\n\n return extractText(content).length > 0 ? 1 : 0;\n}\n\nfunction normalizeWarningLog(warnings: EditorWarning[]): EditorWarning[] {\n return warnings.map((warning) => ({\n ...warning,\n affectedAnchor: warning.affectedAnchor\n ? normalizeAnchorProjection(warning.affectedAnchor)\n : undefined,\n }));\n}\n\nfunction normalizeCompatibilityReport(report: CompatibilityReport): CompatibilityReport {\n return {\n ...report,\n featureEntries: report.featureEntries.map((entry) => ({\n ...entry,\n affectedAnchor: entry.affectedAnchor\n ? normalizeAnchorProjection(entry.affectedAnchor)\n : undefined,\n })),\n warnings: normalizeWarningLog(report.warnings),\n };\n}\n\nfunction normalizeAnchorProjection(anchor: EditorAnchorProjection): EditorAnchorProjection {\n switch (anchor.kind) {\n case \"range\": {\n const rangeAnchor = anchor as EditorAnchorProjection & {\n range?: { from: number; to: number };\n from?: number;\n to?: number;\n assoc: { start: -1 | 1; end: -1 | 1 };\n };\n return rangeAnchor.range\n ? createRangeAnchor(rangeAnchor.range.from, rangeAnchor.range.to, rangeAnchor.assoc)\n : createRangeAnchor(rangeAnchor.from ?? 0, rangeAnchor.to ?? 0, rangeAnchor.assoc);\n }\n case \"node\":\n return createNodeAnchor(anchor.at, anchor.assoc);\n case \"detached\":\n return createDetachedAnchor(anchor.lastKnownRange, anchor.reason);\n }\n}\n\nfunction extractText(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => extractText(item)).join(\" \");\n }\n\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n\n return Object.values(value as Record<string, unknown>)\n .map((item) => extractText(item))\n .filter(Boolean)\n .join(\" \");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function createCanonicalDocumentId(documentId: string): string {\n const hashWord = (seed: string): string => {\n let hash = 0x811c9dc5;\n for (const char of seed) {\n hash ^= char.charCodeAt(0);\n hash = Math.imul(hash, 0x01000193);\n }\n return (hash >>> 0).toString(16).padStart(8, \"0\");\n };\n\n const raw =\n hashWord(`${documentId}:0`) +\n hashWord(`${documentId}:1`) +\n hashWord(`${documentId}:2`) +\n hashWord(`${documentId}:3`);\n\n return [\n raw.slice(0, 8),\n raw.slice(8, 12),\n `4${raw.slice(13, 16)}`,\n `8${raw.slice(17, 20)}`,\n raw.slice(20, 32),\n ].join(\"-\");\n}\n\nexport function normalizeCommentThreadRecord(value: unknown): CommentThreadRecord {\n const record = isRecord(value) ? value : {};\n const authorId =\n typeof record.createdBy === \"string\" && record.createdBy.length > 0\n ? record.createdBy\n : typeof record.authorId === \"string\" && record.authorId.length > 0\n ? record.authorId\n : \"unknown\";\n const createdAt =\n typeof record.createdAt === \"string\" && record.createdAt.length > 0\n ? record.createdAt\n : new Date(0).toISOString();\n const entries = Array.isArray(record.entries)\n ? record.entries\n .filter((entry): entry is Record<string, unknown> => isRecord(entry))\n .map((entry, index) => ({\n entryId:\n typeof entry.entryId === \"string\" && entry.entryId.length > 0\n ? entry.entryId\n : `${String(record.commentId ?? \"comment\")}-entry-${index + 1}`,\n authorId:\n typeof entry.authorId === \"string\" && entry.authorId.length > 0\n ? entry.authorId\n : authorId,\n body: typeof entry.body === \"string\" ? entry.body : \"\",\n createdAt:\n typeof entry.createdAt === \"string\" && entry.createdAt.length > 0\n ? entry.createdAt\n : createdAt,\n metadata: isRecord(entry.metadata)\n ? {\n ooxmlCommentId:\n typeof entry.metadata.ooxmlCommentId === \"string\"\n ? entry.metadata.ooxmlCommentId\n : undefined,\n paraId:\n typeof entry.metadata.paraId === \"string\"\n ? entry.metadata.paraId\n : undefined,\n parentParaId:\n typeof entry.metadata.parentParaId === \"string\"\n ? entry.metadata.parentParaId\n : undefined,\n durableId:\n typeof entry.metadata.durableId === \"string\"\n ? entry.metadata.durableId\n : undefined,\n initials:\n typeof entry.metadata.initials === \"string\"\n ? entry.metadata.initials\n : undefined,\n }\n : undefined,\n }))\n : [\n {\n entryId: `${String(record.commentId ?? \"comment\")}-entry-1`,\n authorId,\n body: typeof record.body === \"string\" ? record.body : \"\",\n createdAt,\n },\n ];\n const resolution = isRecord(record.resolution)\n ? {\n resolvedAt:\n typeof record.resolution.resolvedAt === \"string\"\n ? record.resolution.resolvedAt\n : typeof record.resolvedAt === \"string\"\n ? record.resolvedAt\n : createdAt,\n resolvedBy:\n typeof record.resolution.resolvedBy === \"string\" &&\n record.resolution.resolvedBy.length > 0\n ? record.resolution.resolvedBy\n : authorId,\n }\n : typeof record.resolvedAt === \"string\"\n ? {\n resolvedAt: record.resolvedAt,\n resolvedBy: authorId,\n }\n : undefined;\n const normalizedStatus =\n typeof record.status === \"string\"\n ? record.status\n : record.anchor && isRecord(record.anchor) && record.anchor.kind === \"detached\"\n ? \"detached\"\n : resolution || record.isResolved\n ? \"resolved\"\n : \"open\";\n\n return {\n commentId:\n typeof record.commentId === \"string\" && record.commentId.length > 0\n ? record.commentId\n : \"comment-generated\",\n anchor:\n isRecord(record.anchor) && typeof record.anchor.kind === \"string\"\n ? (record.anchor as unknown as EditorAnchorProjection)\n : createDetachedAnchor({ from: 0, to: 0 }, \"importAmbiguity\"),\n createdAt,\n createdBy: authorId,\n authorId,\n body: entries.map((entry) => entry.body).join(\"\\n\"),\n entries,\n status:\n normalizedStatus === \"resolved\" || normalizedStatus === \"detached\"\n ? normalizedStatus\n : \"open\",\n resolution,\n resolvedAt: resolution?.resolvedAt,\n warningIds: Array.isArray(record.warningIds)\n ? record.warningIds.filter((warningId): warningId is string => typeof warningId === \"string\")\n : [],\n isResolved: normalizedStatus === \"resolved\",\n metadata: isRecord(record.metadata)\n ? {\n source:\n record.metadata.source === \"import\" || record.metadata.source === \"runtime\"\n ? record.metadata.source\n : undefined,\n rootOoxmlCommentId:\n typeof record.metadata.rootOoxmlCommentId === \"string\"\n ? record.metadata.rootOoxmlCommentId\n : undefined,\n rootParaId:\n typeof record.metadata.rootParaId === \"string\"\n ? record.metadata.rootParaId\n : undefined,\n }\n : undefined,\n };\n}\n","import type { EditorStoryTarget } from \"../../api/public-types\";\n\nexport type Position = number;\nexport type Assoc = -1 | 1;\n\nexport interface DocRange {\n from: Position;\n to: Position;\n}\n\nexport interface BoundaryAssoc {\n start: Assoc;\n end: Assoc;\n}\n\nexport interface RangeAnchor {\n kind: \"range\";\n range: DocRange;\n assoc: BoundaryAssoc;\n}\n\nexport interface NodeAnchor {\n kind: \"node\";\n at: Position;\n assoc: Assoc;\n}\n\nexport interface DetachedAnchor {\n kind: \"detached\";\n lastKnownRange: DocRange;\n reason: \"deleted\" | \"invalidatedByStructureChange\" | \"importAmbiguity\";\n}\n\nexport type EditorAnchorProjection = RangeAnchor | NodeAnchor | DetachedAnchor;\n\nexport interface MappingStep {\n from: Position;\n to: Position;\n insertSize: number;\n}\n\nexport interface MappingResult {\n position: Position;\n deleted: boolean;\n}\n\nexport interface TransactionMapping {\n steps: MappingStep[];\n metadata?: {\n invalidatesStructures?: boolean;\n affectsComments?: boolean;\n affectsRevisions?: boolean;\n affectsOpaqueFragments?: boolean;\n [key: string]: unknown;\n };\n}\n\nexport const DEFAULT_BOUNDARY_ASSOC: BoundaryAssoc = {\n start: 1,\n end: -1,\n};\n\nexport function createRangeAnchor(\n from: Position,\n to = from,\n assoc: BoundaryAssoc = DEFAULT_BOUNDARY_ASSOC,\n): RangeAnchor {\n return {\n kind: \"range\",\n range: normalizeRange({ from, to }),\n assoc,\n };\n}\n\nexport function createNodeAnchor(at: Position, assoc: Assoc = 1): NodeAnchor {\n return {\n kind: \"node\",\n at,\n assoc,\n };\n}\n\nexport function createDetachedAnchor(\n lastKnownRange: DocRange,\n reason: DetachedAnchor[\"reason\"],\n): DetachedAnchor {\n return {\n kind: \"detached\",\n lastKnownRange: normalizeRange(lastKnownRange),\n reason,\n };\n}\n\nexport function createEmptyMapping(): TransactionMapping {\n return {\n steps: [],\n };\n}\n\nexport function normalizeRange(range: DocRange): DocRange {\n return range.from <= range.to\n ? { from: range.from, to: range.to }\n : { from: range.to, to: range.from };\n}\n\nexport function getEffectiveRange(anchor: EditorAnchorProjection): DocRange {\n if (anchor.kind === \"range\") {\n return anchor.range;\n }\n if (anchor.kind === \"node\") {\n return { from: anchor.at, to: anchor.at };\n }\n return anchor.lastKnownRange;\n}\n\nexport function mapPosition(\n position: Position,\n assoc: Assoc,\n mapping: TransactionMapping,\n): MappingResult {\n let mappedPosition = position;\n let deleted = false;\n\n for (const step of mapping.steps) {\n const next = mapPositionThroughStep(mappedPosition, assoc, step);\n mappedPosition = next.position;\n deleted = deleted || next.deleted;\n }\n\n return {\n position: mappedPosition,\n deleted,\n };\n}\n\nexport function mapAnchor(\n anchor: EditorAnchorProjection,\n mapping: TransactionMapping,\n): EditorAnchorProjection {\n if (anchor.kind === \"detached\") {\n return anchor;\n }\n\n if (anchor.kind === \"node\") {\n const mapped = mapPosition(anchor.at, anchor.assoc, mapping);\n\n if (mapped.deleted) {\n return createDetachedAnchor(\n { from: anchor.at, to: anchor.at + 1 },\n mapping.metadata?.invalidatesStructures\n ? \"invalidatedByStructureChange\"\n : \"deleted\",\n );\n }\n\n return createNodeAnchor(mapped.position, anchor.assoc);\n }\n\n const from = mapPosition(anchor.range.from, anchor.assoc.start, mapping);\n const to = mapPosition(anchor.range.to, anchor.assoc.end, mapping);\n const mappedRange = normalizeRange({ from: from.position, to: to.position });\n\n if (from.deleted && to.deleted && mappedRange.from === mappedRange.to) {\n return createDetachedAnchor(\n anchor.range,\n mapping.metadata?.invalidatesStructures\n ? \"invalidatedByStructureChange\"\n : \"deleted\",\n );\n }\n\n return createRangeAnchor(mappedRange.from, mappedRange.to, anchor.assoc);\n}\n\nexport function mapRange(\n range: DocRange,\n assoc: BoundaryAssoc,\n mapping: TransactionMapping,\n): RangeAnchor | DetachedAnchor {\n const mapped = mapAnchor(createRangeAnchor(range.from, range.to, assoc), mapping);\n return mapped.kind === \"node\" ? createRangeAnchor(mapped.at, mapped.at, assoc) : mapped;\n}\n\nexport function areAnchorsEqual(\n left: EditorAnchorProjection,\n right: EditorAnchorProjection,\n): boolean {\n if (left.kind !== right.kind) {\n return false;\n }\n\n if (left.kind === \"detached\" && right.kind === \"detached\") {\n return (\n left.reason === right.reason &&\n left.lastKnownRange.from === right.lastKnownRange.from &&\n left.lastKnownRange.to === right.lastKnownRange.to\n );\n }\n\n if (left.kind === \"node\" && right.kind === \"node\") {\n return left.at === right.at && left.assoc === right.assoc;\n }\n\n if (left.kind === \"range\" && right.kind === \"range\") {\n return (\n left.range.from === right.range.from &&\n left.range.to === right.range.to &&\n left.assoc.start === right.assoc.start &&\n left.assoc.end === right.assoc.end\n );\n }\n\n return false;\n}\n\nexport function storyTargetsEqual(\n left: EditorStoryTarget | undefined,\n right: EditorStoryTarget | undefined,\n): boolean {\n if (left === right) return true;\n if (!left || !right) return left === right;\n if (left.kind !== right.kind) return false;\n if (left.kind === \"main\") return true;\n if (left.kind === \"header\" && right.kind === \"header\") {\n return (\n left.relationshipId === right.relationshipId &&\n left.variant === right.variant &&\n (left.sectionIndex === undefined ||\n right.sectionIndex === undefined\n ? true\n : left.sectionIndex === right.sectionIndex)\n );\n }\n if (left.kind === \"footer\" && right.kind === \"footer\") {\n return (\n left.relationshipId === right.relationshipId &&\n left.variant === right.variant &&\n (left.sectionIndex === undefined ||\n right.sectionIndex === undefined\n ? true\n : left.sectionIndex === right.sectionIndex)\n );\n }\n if (left.kind === \"footnote\" && right.kind === \"footnote\") {\n return left.noteId === right.noteId;\n }\n if (left.kind === \"endnote\" && right.kind === \"endnote\") {\n return left.noteId === right.noteId;\n }\n return false;\n}\n\nexport const MAIN_STORY_TARGET: EditorStoryTarget = { kind: \"main\" };\n\nfunction mapPositionThroughStep(\n position: Position,\n assoc: Assoc,\n step: MappingStep,\n): MappingResult {\n if (position < step.from) {\n return { position, deleted: false };\n }\n\n if (position > step.to) {\n return {\n position: position + step.insertSize - (step.to - step.from),\n deleted: false,\n };\n }\n\n if (position === step.from) {\n return {\n position: assoc < 0 ? step.from : step.from + step.insertSize,\n deleted: false,\n };\n }\n\n if (position === step.to) {\n return {\n position: assoc < 0 ? step.from : step.from + step.insertSize,\n deleted: false,\n };\n }\n\n return {\n position: assoc < 0 ? step.from : step.from + step.insertSize,\n deleted: true,\n };\n}\n","export const CDS_SCHEMA_VERSION = \"cds/1.0.0\" as const;\nexport const LEGACY_PERSISTED_EDITOR_SNAPSHOT_VERSION =\n \"persisted-editor-snapshot/1\" as const;\nexport const PERSISTED_EDITOR_SNAPSHOT_VERSION =\n \"persisted-editor-snapshot/2\" as const;\nexport const COMPATIBILITY_REPORT_VERSION = \"compatibility-report/1\" as const;\n\nexport type CDS_SchemaVersion = typeof CDS_SCHEMA_VERSION;\nexport type PersistedEditorSnapshotVersion =\n | typeof LEGACY_PERSISTED_EDITOR_SNAPSHOT_VERSION\n | typeof PERSISTED_EDITOR_SNAPSHOT_VERSION;\nexport type CompatibilityReportVersion = typeof COMPATIBILITY_REPORT_VERSION;\n\nexport type Id = string;\nexport type UUID = string;\nexport type ISO8601DateTime = string;\nexport type Base64 = string;\nexport type PartName = string;\nexport type RelationshipId = string;\n\nexport type JsonPrimitive = string | number | boolean | null;\nexport type JsonValue = JsonPrimitive | JsonObject | JsonValue[];\n\nexport interface JsonObject {\n [key: string]: JsonValue | undefined;\n}\n\nexport interface ModelValidationIssue {\n path: string;\n message: string;\n}\n\nexport class ModelValidationError extends Error {\n readonly issues: readonly ModelValidationIssue[];\n\n constructor(message: string, issues: readonly ModelValidationIssue[]) {\n super(message);\n this.name = \"ModelValidationError\";\n this.issues = issues;\n }\n}\n\nconst UUID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst ISO_8601_UTC_PATTERN =\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$/;\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nexport function isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nexport function isUuid(value: unknown): value is UUID {\n return typeof value === \"string\" && UUID_PATTERN.test(value);\n}\n\nexport function isIso8601UtcTimestamp(\n value: unknown,\n): value is ISO8601DateTime {\n return (\n typeof value === \"string\" &&\n ISO_8601_UTC_PATTERN.test(value) &&\n !Number.isNaN(Date.parse(value))\n );\n}\n\nexport function asPlainObject(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): Record<string, unknown> | null {\n if (!isPlainObject(value)) {\n issues.push({ path, message: \"Expected a plain object.\" });\n return null;\n }\n\n return value;\n}\n\nexport function expectString(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): string | null {\n if (!isNonEmptyString(value)) {\n issues.push({ path, message: \"Expected a non-empty string.\" });\n return null;\n }\n\n return value;\n}\n\nexport function expectStringAllowEmpty(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): string | null {\n if (typeof value !== \"string\") {\n issues.push({ path, message: \"Expected a string.\" });\n return null;\n }\n\n return value;\n}\n\nexport function expectExactString<T extends string>(\n value: unknown,\n expected: T,\n path: string,\n issues: ModelValidationIssue[],\n): T | null {\n if (value !== expected) {\n issues.push({\n path,\n message: `Expected ${JSON.stringify(expected)}.`,\n });\n return null;\n }\n\n return expected;\n}\n\nexport function expectIso8601UtcTimestamp(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): ISO8601DateTime | null {\n if (!isIso8601UtcTimestamp(value)) {\n issues.push({\n path,\n message: \"Expected an ISO 8601 UTC timestamp string.\",\n });\n return null;\n }\n\n return value;\n}\n\nexport function expectUuid(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): UUID | null {\n if (!isUuid(value)) {\n issues.push({\n path,\n message: \"Expected an RFC 4122 UUID string.\",\n });\n return null;\n }\n\n return value;\n}\n\nexport function sortRecordKeys<T>(\n record: Record<string, T>,\n): Array<[string, T]> {\n return Object.entries(record).sort(([left], [right]) =>\n left.localeCompare(right),\n );\n}\n\nexport function assertValid(\n issues: readonly ModelValidationIssue[],\n message: string,\n): void {\n if (issues.length > 0) {\n throw new ModelValidationError(message, issues);\n }\n}\n\nfunction toStableJsonValue(value: unknown): JsonValue {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => toStableJsonValue(item));\n }\n\n if (!isPlainObject(value)) {\n throw new TypeError(\"Cannot serialize non-JSON value.\");\n }\n\n const sortedEntries = sortRecordKeys(value).filter(\n ([, entryValue]) => entryValue !== undefined,\n );\n const result: JsonObject = {};\n\n for (const [key, entryValue] of sortedEntries) {\n result[key] = toStableJsonValue(entryValue);\n }\n\n return result;\n}\n\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(toStableJsonValue(value));\n}\n","import {\n CDS_SCHEMA_VERSION,\n type ISO8601DateTime,\n type ModelValidationIssue,\n type UUID,\n asPlainObject,\n assertValid,\n expectExactString,\n expectIso8601UtcTimestamp,\n expectString,\n expectStringAllowEmpty,\n expectUuid,\n stableStringify,\n} from \"./cds-1.0.0.ts\";\n\nconst CANONICAL_DOCUMENT_TOP_LEVEL_KEYS = [\n \"schemaVersion\",\n \"docId\",\n \"createdAt\",\n \"updatedAt\",\n \"metadata\",\n \"styles\",\n \"numbering\",\n \"media\",\n \"content\",\n \"review\",\n \"preservation\",\n \"diagnostics\",\n] as const;\n\nconst CANONICAL_DOCUMENT_OPTIONAL_KEYS = [\"subParts\", \"fieldRegistry\"] as const;\n\nconst ID_PATTERNS = {\n styleId: /^[A-Za-z_][A-Za-z0-9._-]{0,127}$/,\n abstractNumberingId: /^abstract-num:[A-Za-z0-9._-]{1,120}$/,\n numberingInstanceId: /^num:[A-Za-z0-9._-]{1,120}$/,\n mediaId: /^media:[A-Za-z0-9._/-]{1,120}$/,\n commentId:\n /^(?:comment:[A-Za-z0-9._-]{1,120}|comment-[A-Za-z0-9._-]{1,120}|[0-9]{1,18})$/,\n revisionId:\n /^(?:revision:[A-Za-z0-9._-]{1,120}|change-[A-Za-z0-9._-]{1,120})$/,\n fragmentId: /^fragment:[A-Za-z0-9._-]{1,120}$/,\n warningId: /^warning:[A-Za-z0-9._:-]{1,120}$/,\n diagnosticId: /^diagnostic:[A-Za-z0-9._-]{1,120}$/,\n packagePartName: /^\\/[A-Za-z0-9_.\\-\\/]+\\.[A-Za-z0-9]+$/,\n relationshipId: /^rId[A-Za-z0-9._-]{1,120}$/,\n} as const;\n\ntype StableIdDomain = keyof typeof ID_PATTERNS;\n\nexport interface CanonicalDocument {\n schemaVersion: typeof CDS_SCHEMA_VERSION;\n docId: UUID;\n createdAt: ISO8601DateTime;\n updatedAt: ISO8601DateTime;\n metadata: DocumentMetadata;\n styles: StylesCatalog;\n numbering: NumberingCatalog;\n media: MediaCatalog;\n content: DocumentRootNode;\n review: ReviewStore;\n preservation: PreservationStore;\n diagnostics: DiagnosticStore;\n subParts?: SubPartsCatalog;\n /** Package-backed field registry for supported field families. */\n fieldRegistry?: FieldRegistry;\n}\n\nexport interface DocumentMetadata {\n title?: string;\n subject?: string;\n description?: string;\n language?: string;\n keywords?: string[];\n category?: string;\n importMode?: string;\n customProperties: Record<string, string>;\n}\n\nexport interface StylesCatalog {\n paragraphs: Record<string, ParagraphStyleDefinition>;\n characters: Record<string, CharacterStyleDefinition>;\n tables: Record<string, TableStyleDefinition>;\n latentStyles?: Record<string, LatentStyleDefinition>;\n fromPackage?: boolean;\n}\n\nexport interface ParagraphStyleDefinition {\n styleId: string;\n basedOn?: string;\n nextStyle?: string;\n outlineLevel?: number;\n displayName: string;\n kind: \"paragraph\";\n isDefault: boolean;\n}\n\nexport interface CharacterStyleDefinition {\n styleId: string;\n basedOn?: string;\n displayName: string;\n kind: \"character\";\n isDefault: boolean;\n}\n\nexport interface TableStyleDefinition {\n styleId: string;\n basedOn?: string;\n displayName: string;\n kind: \"table\";\n isDefault: boolean;\n}\n\nexport interface LatentStyleDefinition {\n name: string;\n locked?: boolean;\n semiHidden?: boolean;\n unhideWhenUsed?: boolean;\n qFormat?: boolean;\n uiPriority?: number;\n}\n\nexport interface NumberingCatalog {\n abstractDefinitions: Record<string, AbstractNumberingDefinition>;\n instances: Record<string, NumberingInstance>;\n}\n\nexport interface AbstractNumberingDefinition {\n abstractNumberingId: string;\n levels: NumberingLevelDefinition[];\n}\n\nexport interface NumberingLevelDefinition {\n level: number;\n format: string;\n text: string;\n startAt?: number;\n paragraphStyleId?: string;\n isLegalNumbering?: boolean;\n suffix?: \"tab\" | \"space\" | \"nothing\";\n}\n\nexport interface NumberingInstance {\n numberingInstanceId: string;\n abstractNumberingId: string;\n overrides: NumberingLevelOverride[];\n}\n\nexport interface NumberingLevelOverride {\n level: number;\n startAt?: number;\n}\n\nexport interface MediaCatalog {\n items: Record<string, MediaItem>;\n}\n\nexport interface MediaItem {\n mediaId: string;\n contentType: string;\n filename: string;\n relationshipId?: string;\n packagePartName: string;\n altText?: string;\n display?: \"inline\" | \"floating\";\n widthEmu?: number;\n heightEmu?: number;\n}\n\n// ---- Sub-part canonical types ----\n\nexport type HeaderFooterVariant = \"default\" | \"first\" | \"even\";\n\nexport interface HeaderDocument {\n variant: HeaderFooterVariant;\n partPath: string;\n relationshipId: string;\n blocks: BlockNode[];\n sectionIndex?: number;\n}\n\nexport interface FooterDocument {\n variant: HeaderFooterVariant;\n partPath: string;\n relationshipId: string;\n blocks: BlockNode[];\n sectionIndex?: number;\n}\n\nexport interface FootnoteDefinition {\n noteId: string;\n kind: \"footnote\" | \"endnote\";\n blocks: BlockNode[];\n}\n\nexport interface FootnoteCollection {\n footnotes: Record<string, FootnoteDefinition>;\n endnotes: Record<string, FootnoteDefinition>;\n}\n\nexport interface ThemeColorScheme {\n name: string;\n colors: Record<string, string>;\n}\n\nexport interface ThemeFontScheme {\n name: string;\n majorFont?: string;\n minorFont?: string;\n}\n\nexport interface ThemeDefinition {\n name?: string;\n colorScheme?: ThemeColorScheme;\n fontScheme?: ThemeFontScheme;\n}\n\nexport interface DocumentSettings {\n evenAndOddHeaders?: boolean;\n zoomLevel?: \"pageWidth\" | \"onePage\" | number;\n}\n\nexport interface SubPartsCatalog {\n headers: HeaderDocument[];\n footers: FooterDocument[];\n footnoteCollection?: FootnoteCollection;\n theme?: ThemeDefinition;\n finalSectionProperties?: SectionProperties;\n resolvedTheme?: ResolvedTheme;\n settings?: DocumentSettings;\n}\n\nexport interface ResolvedTheme {\n colors: Record<string, string>;\n majorFont?: string;\n minorFont?: string;\n}\n\n// ---- Inline footnote reference node ----\n\nexport interface FootnoteRefNode {\n type: \"footnote_ref\";\n noteId: string;\n noteKind: \"footnote\" | \"endnote\";\n}\n\nexport type DocumentNode =\n | DocumentRootNode\n | ParagraphNode\n | TableNode\n | TableRowNode\n | TableCellNode\n | SdtNode\n | CustomXmlNode\n | AltChunkNode\n | TextNode\n | HardBreakNode\n | TabNode\n | ColumnBreakNode\n | SymbolNode\n | HyperlinkNode\n | ImageNode\n | FieldNode\n | BookmarkStartNode\n | BookmarkEndNode\n | SectionBreakNode\n | OpaqueInlineNode\n | OpaqueBlockNode\n | FootnoteRefNode\n | ChartPreviewNode\n | SmartArtPreviewNode\n | ShapeNode\n | WordArtNode\n | VmlShapeNode;\n\nexport interface DocumentRootNode {\n type: \"doc\";\n children: BlockNode[];\n}\n\nexport type BlockNode =\n | ParagraphNode\n | TableNode\n | SdtNode\n | CustomXmlNode\n | AltChunkNode\n | SectionBreakNode\n | OpaqueBlockNode;\n\nexport interface ParagraphSpacing {\n before?: number;\n after?: number;\n line?: number;\n lineRule?: \"auto\" | \"exact\" | \"atLeast\";\n}\n\nexport interface ParagraphIndentation {\n left?: number;\n right?: number;\n firstLine?: number;\n hanging?: number;\n}\n\nexport interface TabStop {\n position: number;\n align: \"left\" | \"center\" | \"right\" | \"decimal\" | \"bar\" | \"clear\";\n leader?: \"none\" | \"dot\" | \"hyphen\" | \"underscore\" | \"heavy\" | \"middleDot\";\n}\n\nexport interface ParagraphBorders {\n top?: BorderSpec;\n left?: BorderSpec;\n bottom?: BorderSpec;\n right?: BorderSpec;\n bar?: BorderSpec;\n between?: BorderSpec;\n}\n\nexport interface ParagraphShading {\n fill?: string;\n color?: string;\n val?: string;\n}\n\nexport interface ParagraphNode {\n type: \"paragraph\";\n styleId?: string;\n numbering?: {\n numberingInstanceId: string;\n level: number;\n };\n alignment?: \"left\" | \"center\" | \"right\" | \"both\" | \"distribute\";\n spacing?: ParagraphSpacing;\n contextualSpacing?: boolean;\n indentation?: ParagraphIndentation;\n tabStops?: TabStop[];\n keepNext?: boolean;\n keepLines?: boolean;\n outlineLevel?: number;\n pageBreakBefore?: boolean;\n widowControl?: boolean;\n borders?: ParagraphBorders;\n shading?: ParagraphShading;\n bidi?: boolean;\n suppressLineNumbers?: boolean;\n cnfStyle?: string;\n children: InlineNode[];\n}\n\nexport interface BorderSpec {\n value?: string;\n size?: number;\n space?: number;\n color?: string;\n}\n\nexport interface TableBorders {\n top?: BorderSpec;\n left?: BorderSpec;\n bottom?: BorderSpec;\n right?: BorderSpec;\n insideH?: BorderSpec;\n insideV?: BorderSpec;\n}\n\nexport interface TableCellBorders {\n top?: BorderSpec;\n left?: BorderSpec;\n bottom?: BorderSpec;\n right?: BorderSpec;\n insideH?: BorderSpec;\n insideV?: BorderSpec;\n}\n\nexport interface TableWidth {\n value: number;\n type: \"dxa\" | \"auto\" | \"pct\" | \"nil\";\n}\n\nexport interface CellShading {\n fill?: string;\n color?: string;\n val?: string;\n}\n\nexport interface TableCellMargins {\n top?: number;\n left?: number;\n bottom?: number;\n right?: number;\n}\n\nexport interface TableLook {\n val?: string;\n firstRow?: boolean;\n lastRow?: boolean;\n firstColumn?: boolean;\n lastColumn?: boolean;\n noHBand?: boolean;\n noVBand?: boolean;\n}\n\nexport interface TableNode {\n type: \"table\";\n styleId?: string;\n propertiesXml?: string;\n gridColumns: number[];\n rows: TableRowNode[];\n width?: TableWidth;\n alignment?: \"left\" | \"center\" | \"right\";\n borders?: TableBorders;\n cellMargins?: TableCellMargins;\n tblLook?: TableLook;\n}\n\nexport interface TableRowNode {\n type: \"table_row\";\n propertiesXml?: string;\n cells: TableCellNode[];\n gridBefore?: number;\n widthBefore?: TableWidth;\n gridAfter?: number;\n widthAfter?: TableWidth;\n height?: number;\n heightRule?: \"auto\" | \"atLeast\" | \"exact\";\n isHeader?: boolean;\n}\n\nexport interface TableCellNode {\n type: \"table_cell\";\n propertiesXml?: string;\n gridSpan?: number;\n verticalMerge?: \"restart\" | \"continue\";\n children: BlockNode[];\n width?: TableWidth;\n borders?: TableCellBorders;\n shading?: CellShading;\n verticalAlign?: \"top\" | \"center\" | \"bottom\";\n}\n\nexport interface SdtCheckboxState {\n checked: boolean;\n checkedChar?: string;\n uncheckedChar?: string;\n}\n\nexport interface SdtDatePickerState {\n fullDate?: string;\n dateFormat?: string;\n lid?: string;\n}\n\nexport interface SdtDropdownListItem {\n displayText?: string;\n value: string;\n}\n\nexport interface SdtNode {\n type: \"sdt\";\n properties: {\n sdtType?: string;\n alias?: string;\n tag?: string;\n lock?: string;\n propertiesXml?: string;\n checkbox?: SdtCheckboxState;\n datePicker?: SdtDatePickerState;\n dropdownList?: SdtDropdownListItem[];\n comboBox?: SdtDropdownListItem[];\n showingPlcHdr?: boolean;\n };\n children: BlockNode[];\n}\n\nexport interface CustomXmlNode {\n type: \"custom_xml\";\n uri?: string;\n element?: string;\n children: BlockNode[];\n}\n\nexport interface AltChunkNode {\n type: \"alt_chunk\";\n relationshipId: string;\n}\n\n/**\n * Supported field families that receive first-class canonical treatment.\n * These families have stable registry IDs, dependency metadata, and\n * runtime-owned refresh behavior.\n */\nexport type SupportedFieldFamily = \"REF\" | \"PAGEREF\" | \"NOTEREF\" | \"TOC\";\n\n/**\n * Unsupported field families that remain preserve-only.\n * They survive round-trip but do not participate in runtime refresh.\n */\nexport type PreserveOnlyFieldFamily =\n | \"PAGE\"\n | \"NUMPAGES\"\n | \"DATE\"\n | \"TIME\"\n | \"AUTHOR\"\n | \"FILENAME\"\n | \"MERGEFIELD\"\n | \"IF\"\n | \"SEQ\"\n | \"INDEX\"\n | \"TC\"\n | \"STYLEREF\"\n | \"FORMULA\"\n | \"UNKNOWN\";\n\nexport type FieldFamily = SupportedFieldFamily | PreserveOnlyFieldFamily;\n\n/** Runtime refresh status for a field instance. */\nexport type FieldRefreshStatus =\n | \"current\"\n | \"stale\"\n | \"unresolvable\"\n | \"preserve-only\";\n\nexport interface FieldNode {\n type: \"field\";\n fieldType: \"simple\" | \"complex\";\n instruction: string;\n children: InlineNode[];\n /** Classified field family. Undefined for legacy snapshots. */\n fieldFamily?: FieldFamily;\n /** Target bookmark name for REF/PAGEREF/NOTEREF fields. */\n fieldTarget?: string;\n /** Runtime refresh status. Undefined for legacy or preserve-only fields. */\n refreshStatus?: FieldRefreshStatus;\n}\n\n// ─── Field registry ─────────────────────────────────────────────────────────\n\n/**\n * Package-backed field registry that catalogs every field instance in the\n * document, grouped by supported vs preserve-only families.\n *\n * Supported field entries carry dependency metadata (bookmark targets) and\n * participate in deterministic refresh. Preserve-only entries survive\n * round-trip but are not refreshable.\n */\nexport interface FieldRegistry {\n /** Supported field instances that participate in refresh. */\n supported: FieldRegistryEntry[];\n /** Preserve-only field instances cataloged for round-trip safety. */\n preserveOnly: FieldRegistryEntry[];\n /** Generated TOC structure extracted from heading-driven TOC fields. */\n tocStructure?: TocStructure;\n}\n\nexport interface FieldRegistryEntry {\n /** Stable document-order index of this field (0-based). */\n fieldIndex: number;\n /** Classified field family. */\n fieldFamily: FieldFamily;\n /** Whether the field is in the supported refresh slice. */\n supported: boolean;\n /** Field instruction text. */\n instruction: string;\n /** Target bookmark name for REF/PAGEREF/NOTEREF fields. */\n fieldTarget?: string;\n /** Current display text extracted from field content. */\n displayText: string;\n /** Paragraph index in document order where this field appears. */\n paragraphIndex: number;\n /** Runtime refresh status. */\n refreshStatus: FieldRefreshStatus;\n}\n\n/**\n * Generated table-of-contents structure extracted from TOC fields and\n * heading-styled paragraphs in the document.\n */\nexport interface TocStructure {\n /** The raw TOC field instruction (e.g. \"TOC \\\\o \\\"1-3\\\" \\\\h\"). */\n instruction: string;\n /** Heading level range the TOC covers. */\n levelRange: { from: number; to: number };\n /** Ordered TOC entries derived from heading paragraphs. */\n entries: TocEntry[];\n /** Whether the TOC content is current with the heading structure. */\n status: \"current\" | \"stale\";\n}\n\nexport interface TocEntry {\n /** Heading text. */\n text: string;\n /** Heading outline level (1-9). */\n level: number;\n /** Paragraph index of the heading in document order. */\n paragraphIndex: number;\n /** Style ID of the heading paragraph, if available. */\n styleId?: string;\n /** Bookmark name anchoring this heading, if present. */\n bookmarkName?: string;\n}\n\nexport interface BookmarkStartNode {\n type: \"bookmark_start\";\n bookmarkId: string;\n name: string;\n}\n\nexport interface BookmarkEndNode {\n type: \"bookmark_end\";\n bookmarkId: string;\n}\n\nexport interface SectionBreakNode {\n type: \"section_break\";\n sectionPropertiesXml?: string;\n /**\n * @deprecated Legacy field from older snapshots. New exports should use\n * sectionPropertiesXml and only contain raw <w:sectPr> content.\n */\n propertiesXml?: string;\n sectionProperties?: SectionProperties;\n}\n\nexport interface SectionProperties {\n pageSize?: PageSize;\n pageMargins?: PageMargins;\n columns?: ColumnProperties;\n pageNumbering?: PageNumbering;\n lineNumbering?: SectionLineNumbering;\n pageBorders?: SectionPageBorders;\n documentGrid?: SectionDocumentGrid;\n headerReferences?: HeaderFooterReference[];\n footerReferences?: HeaderFooterReference[];\n sectionType?: \"continuous\" | \"nextPage\" | \"evenPage\" | \"oddPage\" | \"nextColumn\";\n titlePage?: boolean;\n}\n\nexport interface PageSize {\n width: number;\n height: number;\n orientation?: \"portrait\" | \"landscape\";\n}\n\nexport interface PageMargins {\n top: number;\n right: number;\n bottom: number;\n left: number;\n header?: number;\n footer?: number;\n gutter?: number;\n}\n\nexport interface ColumnProperties {\n count?: number;\n space?: number;\n equalWidth?: boolean;\n columns?: Array<{ width: number; space?: number }>;\n separator?: boolean;\n}\n\nexport interface PageNumbering {\n format?: string;\n start?: number;\n chapStyle?: string;\n chapSep?: string;\n}\n\nexport interface SectionLineNumbering {\n countBy?: number;\n start?: number;\n distance?: number;\n restart?: \"newPage\" | \"newSection\" | \"continuous\";\n}\n\nexport interface SectionPageBorders {\n top?: BorderSpec;\n left?: BorderSpec;\n bottom?: BorderSpec;\n right?: BorderSpec;\n offsetFrom?: \"page\" | \"text\";\n display?: \"allPages\" | \"firstPage\" | \"notFirstPage\";\n zOrder?: \"front\" | \"back\";\n}\n\nexport interface SectionDocumentGrid {\n type?: \"default\" | \"lines\" | \"linesAndChars\" | \"snapToChars\";\n linePitch?: number;\n charSpace?: number;\n}\n\nexport interface HeaderFooterReference {\n variant: HeaderFooterVariant;\n relationshipId: string;\n}\n\nexport type InlineNode =\n | TextNode\n | HardBreakNode\n | ColumnBreakNode\n | TabNode\n | SymbolNode\n | HyperlinkNode\n | ImageNode\n | FieldNode\n | BookmarkStartNode\n | BookmarkEndNode\n | OpaqueInlineNode\n | FootnoteRefNode\n | ChartPreviewNode\n | SmartArtPreviewNode\n | ShapeNode\n | WordArtNode\n | VmlShapeNode;\n\nexport interface TextNode {\n type: \"text\";\n text: string;\n marks?: TextMark[];\n}\n\nexport type TextMark =\n | { type: \"bold\" }\n | { type: \"italic\" }\n | { type: \"underline\" }\n | { type: \"strikethrough\" }\n | { type: \"doubleStrikethrough\" }\n | { type: \"vanish\" }\n | { type: \"lang\"; val: string }\n | { type: \"highlight\"; color: string; val: string }\n | { type: \"backgroundColor\"; color: string }\n | { type: \"charSpacing\"; val: number }\n | { type: \"kerning\"; val: number }\n | { type: \"emboss\" }\n | { type: \"imprint\" }\n | { type: \"shadow\" }\n | { type: \"position\"; val: number }\n | { type: \"textFill\"; xml: string }\n | { type: \"fontFamily\"; val: string }\n | { type: \"fontSize\"; val: number }\n | { type: \"textColor\"; color: string }\n | { type: \"smallCaps\" }\n | { type: \"allCaps\" };\n\nexport interface HardBreakNode {\n type: \"hard_break\";\n}\n\nexport interface ColumnBreakNode {\n type: \"column_break\";\n}\n\nexport interface TabNode {\n type: \"tab\";\n}\n\nexport interface SymbolNode {\n type: \"symbol\";\n char: string;\n font?: string;\n marks?: TextMark[];\n}\n\nexport interface HyperlinkNode {\n type: \"hyperlink\";\n href: string;\n children: Array<TextNode | HardBreakNode | ColumnBreakNode | TabNode | SymbolNode>;\n}\n\nexport interface ImageNode {\n type: \"image\";\n mediaId: string;\n altText?: string;\n placementXml?: string;\n display?: \"inline\" | \"floating\";\n floating?: FloatingImageProperties;\n}\n\nexport interface FloatingImageProperties {\n horizontalPosition?: FloatingAxisPosition;\n verticalPosition?: FloatingAxisPosition;\n wrap?: \"none\" | \"square\" | \"tight\" | \"through\" | \"topAndBottom\";\n behindDoc?: boolean;\n layoutInCell?: boolean;\n allowOverlap?: boolean;\n}\n\nexport interface FloatingAxisPosition {\n relativeFrom?: string;\n align?: string;\n offset?: number;\n}\n\nexport interface OpaqueInlineNode {\n type: \"opaque_inline\";\n fragmentId: string;\n warningId: string;\n}\n\n// ---- Complex rendering inline nodes (read-only previews) ----\n\n/**\n * Read-only preview of a chart (c:chart). The original drawing XML is stored in\n * rawXml for lossless round-trip export. If a fallback image was present in\n * mc:AlternateContent it is referenced by previewMediaId.\n */\nexport interface ChartPreviewNode {\n type: \"chart_preview\";\n previewMediaId?: string;\n rawXml: string;\n}\n\n/**\n * Read-only preview of a SmartArt diagram (dgm:*). The original drawing XML is\n * stored in rawXml for lossless round-trip export.\n */\nexport interface SmartArtPreviewNode {\n type: \"smartart_preview\";\n previewMediaId?: string;\n rawXml: string;\n}\n\n/**\n * Read-only rendering of a wps:wsp WordprocessingShape. Text content is\n * extracted for display. The original drawing XML is preserved in rawXml.\n */\nexport interface ShapeNode {\n type: \"shape\";\n text?: string;\n geometry?: string;\n isTextBox?: boolean;\n rawXml: string;\n}\n\n/**\n * Read-only rendering of WordArt — a wps:wsp shape with a text-geometry preset.\n * Text is extracted for display. The original drawing XML is preserved in rawXml.\n */\nexport interface WordArtNode {\n type: \"wordart\";\n text: string;\n geometry?: string;\n rawXml: string;\n}\n\n/**\n * Read-only rendering of a VML shape (v:shape, v:rect, v:textbox) from a w:pict\n * element. Text is extracted for display. The original w:pict XML is preserved\n * in rawXml for lossless round-trip export.\n */\nexport interface VmlShapeNode {\n type: \"vml_shape\";\n text?: string;\n shapeType?: string;\n rawXml: string;\n}\n\nexport interface OpaqueBlockNode {\n type: \"opaque_block\";\n fragmentId: string;\n warningId: string;\n rawXml?: string;\n}\n\nexport interface DocRange {\n from: number;\n to: number;\n}\n\nexport interface BoundaryAssoc {\n start: -1 | 1;\n end: -1 | 1;\n}\n\nexport type CanonicalAnchor =\n | {\n kind: \"range\";\n range: DocRange;\n assoc: BoundaryAssoc;\n }\n | {\n kind: \"node\";\n at: number;\n assoc: -1 | 1;\n }\n | {\n kind: \"detached\";\n lastKnownRange: DocRange;\n reason: \"deleted\" | \"invalidatedByStructureChange\" | \"importAmbiguity\";\n };\n\nexport interface ReviewStore {\n comments: Record<string, CommentThread>;\n revisions: Record<string, RevisionRecord>;\n}\n\nexport interface CommentThread {\n commentId: string;\n status: \"open\" | \"resolved\" | \"detached\";\n anchor: CanonicalAnchor;\n createdAt: ISO8601DateTime;\n createdBy?: string;\n authorId?: string;\n body?: string;\n entries?: CommentEntry[];\n resolution?: CommentResolution;\n resolvedAt?: ISO8601DateTime;\n warningIds: string[];\n isResolved?: boolean;\n metadata?: CommentThreadMetadata;\n}\n\nexport interface CommentEntry {\n entryId: string;\n authorId: string;\n createdAt: ISO8601DateTime;\n body: string;\n metadata?: CommentEntryMetadata;\n}\n\nexport interface CommentEntryMetadata {\n ooxmlCommentId?: string;\n paraId?: string;\n parentParaId?: string;\n durableId?: string;\n initials?: string;\n}\n\nexport interface CommentResolution {\n resolvedAt: ISO8601DateTime;\n resolvedBy: string;\n}\n\nexport interface CommentThreadMetadata {\n source?: \"runtime\" | \"import\";\n rootOoxmlCommentId?: string;\n rootParaId?: string;\n}\n\nexport interface RevisionPropertyChangeData {\n xmlTag: \"pPrChange\" | \"sectPrChange\" | \"tblPrChange\" | \"rPrChange\";\n beforeXml: string;\n}\n\nexport interface RevisionMoveData {\n moveId: string;\n direction: \"from\" | \"to\";\n}\n\nexport type RevisionStoryTargetRecord =\n | { kind: \"main\" }\n | {\n kind: \"header\";\n relationshipId: string;\n variant: \"default\" | \"first\" | \"even\";\n sectionIndex?: number;\n }\n | {\n kind: \"footer\";\n relationshipId: string;\n variant: \"default\" | \"first\" | \"even\";\n sectionIndex?: number;\n }\n | { kind: \"footnote\"; noteId: string }\n | { kind: \"endnote\"; noteId: string };\n\nexport interface RevisionRecord {\n changeId: string;\n kind: \"insertion\" | \"deletion\" | \"formatting\" | \"move\" | \"property-change\";\n anchor: CanonicalAnchor;\n authorId?: string;\n createdAt: ISO8601DateTime;\n warningIds?: string[];\n metadata?: RevisionMetadataRecord;\n status: \"open\" | \"accepted\" | \"rejected\" | \"detached\";\n}\n\nexport interface RevisionMetadataRecord {\n source?: \"runtime\" | \"import\";\n storyTarget?: RevisionStoryTargetRecord;\n preserveOnlyReason?: string;\n importedRevisionForm?:\n | \"run-insertion\"\n | \"run-deletion\"\n | \"paragraph-insertion\"\n | \"paragraph-deletion\";\n originalRevisionType?: string;\n ooxmlRevisionId?: string;\n propertyChangeData?: RevisionPropertyChangeData;\n moveData?: RevisionMoveData;\n}\n\nexport interface PreservationStore {\n opaqueFragments: Record<string, OpaqueFragmentRecord>;\n packageParts: Record<string, PreservedPackagePart>;\n}\n\nexport interface OpaqueFragmentRecord {\n fragmentId: string;\n payloadKind: \"xml-subtree\" | \"package-part\";\n payloadReference: string;\n featureClass: \"preserve-only\";\n lastKnownRange: DocRange;\n warningId: string;\n packagePartName?: string;\n relationshipId?: string;\n}\n\nexport interface PreservedPackagePart {\n packagePartName: string;\n contentType: string;\n relationshipIds: string[];\n}\n\nexport interface DiagnosticStore {\n warnings: DiagnosticWarningEntry[];\n errors: DiagnosticErrorEntry[];\n}\n\nexport interface DiagnosticWarningEntry {\n diagnosticId: string;\n warningId: string;\n source:\n | \"import\"\n | \"runtime\"\n | \"review\"\n | \"preservation\"\n | \"validation\"\n | \"export\";\n message: string;\n}\n\nexport interface DiagnosticErrorEntry {\n diagnosticId: string;\n code:\n | \"load_failed\"\n | \"import_failed\"\n | \"export_failed\"\n | \"package_corrupt\"\n | \"validation_failed\"\n | \"datastore_failed\"\n | \"internal_invariant\";\n message: string;\n isFatal: boolean;\n source: \"import\" | \"runtime\" | \"validation\" | \"datastore\" | \"host\" | \"export\";\n details?: unknown;\n}\n\nexport function createCanonicalDocument(\n input: Omit<CanonicalDocument, \"schemaVersion\">,\n): CanonicalDocument {\n const document: CanonicalDocument = {\n schemaVersion: CDS_SCHEMA_VERSION,\n ...input,\n };\n\n assertCanonicalDocument(document);\n return document;\n}\n\nexport function serializeCanonicalDocument(document: CanonicalDocument): string {\n assertCanonicalDocument(document);\n return stableStringify(document);\n}\n\nexport function createCanonicalDocumentSignature(document: unknown): string {\n return stableStringify(document);\n}\n\nexport function parseCanonicalDocument(json: string): CanonicalDocument {\n const parsed = JSON.parse(json) as unknown;\n assertCanonicalDocument(parsed);\n return parsed;\n}\n\nexport function projectCanonicalDocument(\n document: CanonicalDocument,\n): CanonicalDocument {\n assertCanonicalDocument(document);\n return JSON.parse(stableStringify(document)) as CanonicalDocument;\n}\n\nexport function assertCanonicalDocument(\n value: unknown,\n): asserts value is CanonicalDocument {\n const issues = validateCanonicalDocument(value);\n assertValid(issues, \"Invalid canonical document.\");\n}\n\nexport function validateCanonicalDocument(\n value: unknown,\n): ModelValidationIssue[] {\n const issues: ModelValidationIssue[] = [];\n const record = asPlainObject(value, \"$\", issues);\n if (!record) {\n return issues;\n }\n\n validateExactObjectKeys(record, CANONICAL_DOCUMENT_TOP_LEVEL_KEYS, \"$\", issues, CANONICAL_DOCUMENT_OPTIONAL_KEYS);\n expectExactString(record.schemaVersion, CDS_SCHEMA_VERSION, \"$.schemaVersion\", issues);\n expectUuid(record.docId, \"$.docId\", issues);\n expectIso8601UtcTimestamp(record.createdAt, \"$.createdAt\", issues);\n expectIso8601UtcTimestamp(record.updatedAt, \"$.updatedAt\", issues);\n\n validateMetadata(record.metadata, \"$.metadata\", issues);\n validateStylesCatalog(record.styles, \"$.styles\", issues);\n validateNumberingCatalog(record.numbering, \"$.numbering\", issues);\n validateMediaCatalog(record.media, \"$.media\", issues);\n validateDocumentNode(record.content, \"$.content\", issues);\n validateReviewStore(record.review, \"$.review\", issues);\n validatePreservationStore(record.preservation, \"$.preservation\", issues);\n validateDiagnosticStore(record.diagnostics, \"$.diagnostics\", issues);\n if (record.subParts !== undefined) {\n validateSubPartsCatalog(record.subParts, \"$.subParts\", issues);\n }\n validateDocumentReferences(record, issues);\n\n return issues;\n}\n\nfunction validateMetadata(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n const customProperties = asPlainObject(record.customProperties, `${path}.customProperties`, issues);\n if (!customProperties) {\n return;\n }\n\n for (const [propertyKey, propertyValue] of Object.entries(customProperties)) {\n if (typeof propertyValue !== \"string\") {\n issues.push({\n path: `${path}.customProperties.${propertyKey}`,\n message: \"customProperties values must be strings.\",\n });\n }\n }\n}\n\nfunction validateStylesCatalog(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n validateStyleMap(record.paragraphs, `${path}.paragraphs`, issues);\n validateStyleMap(record.characters, `${path}.characters`, issues);\n validateStyleMap(record.tables, `${path}.tables`, issues);\n if (record.latentStyles !== undefined) {\n validateLatentStyleMap(record.latentStyles, `${path}.latentStyles`, issues);\n }\n}\n\nfunction validateStyleMap(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n for (const [styleId, definition] of Object.entries(record)) {\n expectDomainString(styleId, \"styleId\", `${path}.${styleId}`, issues);\n const definitionRecord = asPlainObject(definition, `${path}.${styleId}`, issues);\n if (!definitionRecord) {\n continue;\n }\n if (definitionRecord.styleId !== styleId) {\n issues.push({\n path: `${path}.${styleId}.styleId`,\n message: \"styleId must match the map key.\",\n });\n }\n }\n}\n\nfunction validateLatentStyleMap(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n for (const [styleName, definition] of Object.entries(record)) {\n const definitionRecord = asPlainObject(definition, `${path}.${styleName}`, issues);\n if (!definitionRecord) {\n continue;\n }\n if (definitionRecord.name !== styleName) {\n issues.push({\n path: `${path}.${styleName}.name`,\n message: \"name must match the map key.\",\n });\n }\n if (definitionRecord.uiPriority !== undefined && typeof definitionRecord.uiPriority !== \"number\") {\n issues.push({\n path: `${path}.${styleName}.uiPriority`,\n message: \"uiPriority must be a number.\",\n });\n }\n }\n}\n\nfunction validateNumberingCatalog(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n const abstractDefinitions = asPlainObject(\n record.abstractDefinitions,\n `${path}.abstractDefinitions`,\n issues,\n );\n if (abstractDefinitions) {\n for (const [abstractId, definition] of Object.entries(abstractDefinitions)) {\n expectDomainString(\n abstractId,\n \"abstractNumberingId\",\n `${path}.abstractDefinitions.${abstractId}`,\n issues,\n );\n const definitionRecord = asPlainObject(\n definition,\n `${path}.abstractDefinitions.${abstractId}`,\n issues,\n );\n if (definitionRecord && definitionRecord.abstractNumberingId !== abstractId) {\n issues.push({\n path: `${path}.abstractDefinitions.${abstractId}.abstractNumberingId`,\n message: \"abstractNumberingId must match the map key.\",\n });\n }\n }\n }\n\n const instances = asPlainObject(record.instances, `${path}.instances`, issues);\n if (instances) {\n for (const [instanceId, instance] of Object.entries(instances)) {\n expectDomainString(\n instanceId,\n \"numberingInstanceId\",\n `${path}.instances.${instanceId}`,\n issues,\n );\n const instanceRecord = asPlainObject(\n instance,\n `${path}.instances.${instanceId}`,\n issues,\n );\n if (!instanceRecord) {\n continue;\n }\n if (instanceRecord.numberingInstanceId !== instanceId) {\n issues.push({\n path: `${path}.instances.${instanceId}.numberingInstanceId`,\n message: \"numberingInstanceId must match the map key.\",\n });\n }\n expectDomainString(\n instanceRecord.abstractNumberingId,\n \"abstractNumberingId\",\n `${path}.instances.${instanceId}.abstractNumberingId`,\n issues,\n );\n }\n }\n}\n\nfunction validateMediaCatalog(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n const items = asPlainObject(record.items, `${path}.items`, issues);\n if (!items) {\n return;\n }\n\n for (const [mediaId, item] of Object.entries(items)) {\n expectDomainString(mediaId, \"mediaId\", `${path}.items.${mediaId}`, issues);\n const itemRecord = asPlainObject(item, `${path}.items.${mediaId}`, issues);\n if (!itemRecord) {\n continue;\n }\n if (itemRecord.mediaId !== mediaId) {\n issues.push({\n path: `${path}.items.${mediaId}.mediaId`,\n message: \"mediaId must match the map key.\",\n });\n }\n expectDomainString(\n itemRecord.packagePartName,\n \"packagePartName\",\n `${path}.items.${mediaId}.packagePartName`,\n issues,\n );\n if (itemRecord.relationshipId !== undefined) {\n expectDomainString(\n itemRecord.relationshipId,\n \"relationshipId\",\n `${path}.items.${mediaId}.relationshipId`,\n issues,\n );\n }\n }\n}\n\nfunction validateDocumentNode(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n const type = expectString(record.type, `${path}.type`, issues);\n if (!type) {\n return;\n }\n\n switch (type) {\n case \"doc\":\n case \"paragraph\":\n case \"sdt\":\n case \"custom_xml\":\n case \"hyperlink\":\n if (!Array.isArray(record.children)) {\n issues.push({ path: `${path}.children`, message: \"children must be an array.\" });\n } else {\n record.children.forEach((child, index) =>\n validateDocumentNode(child, `${path}.children[${index}]`, issues),\n );\n }\n if (type === \"paragraph\" && record.styleId !== undefined) {\n expectDomainString(record.styleId, \"styleId\", `${path}.styleId`, issues);\n }\n if (type === \"paragraph\" && record.numbering !== undefined) {\n const numbering = asPlainObject(record.numbering, `${path}.numbering`, issues);\n if (numbering) {\n expectDomainString(\n numbering.numberingInstanceId,\n \"numberingInstanceId\",\n `${path}.numbering.numberingInstanceId`,\n issues,\n );\n if (typeof numbering.level !== \"number\") {\n issues.push({\n path: `${path}.numbering.level`,\n message: \"level must be a number.\",\n });\n }\n }\n }\n if (type === \"hyperlink\") {\n expectString(record.href, `${path}.href`, issues);\n }\n return;\n case \"alt_chunk\":\n expectDomainString(record.relationshipId, \"relationshipId\", `${path}.relationshipId`, issues);\n return;\n case \"image\":\n expectDomainString(record.mediaId, \"mediaId\", `${path}.mediaId`, issues);\n if (record.placementXml !== undefined) {\n expectString(record.placementXml, `${path}.placementXml`, issues);\n }\n if (record.display !== undefined) {\n const display = expectString(record.display, `${path}.display`, issues);\n if (display && display !== \"inline\" && display !== \"floating\") {\n issues.push({\n path: `${path}.display`,\n message: \"display must be 'inline' or 'floating'.\",\n });\n }\n }\n if (record.floating !== undefined) {\n validateFloatingImageProperties(record.floating, `${path}.floating`, issues);\n }\n return;\n case \"opaque_inline\":\n case \"opaque_block\":\n expectDomainString(record.fragmentId, \"fragmentId\", `${path}.fragmentId`, issues);\n expectDomainString(record.warningId, \"warningId\", `${path}.warningId`, issues);\n if (record.rawXml !== undefined) {\n expectString(record.rawXml, `${path}.rawXml`, issues);\n }\n return;\n case \"table\":\n if (!Array.isArray(record.gridColumns)) {\n issues.push({ path: `${path}.gridColumns`, message: \"gridColumns must be an array.\" });\n }\n if (!Array.isArray(record.rows)) {\n issues.push({ path: `${path}.rows`, message: \"rows must be an array.\" });\n } else {\n record.rows.forEach((row, rowIndex) =>\n validateDocumentNode(row, `${path}.rows[${rowIndex}]`, issues),\n );\n }\n return;\n case \"table_row\":\n if (!Array.isArray(record.cells)) {\n issues.push({ path: `${path}.cells`, message: \"cells must be an array.\" });\n } else {\n record.cells.forEach((cell, cellIndex) =>\n validateDocumentNode(cell, `${path}.cells[${cellIndex}]`, issues),\n );\n }\n return;\n case \"table_cell\":\n if (!Array.isArray(record.children)) {\n issues.push({ path: `${path}.children`, message: \"children must be an array.\" });\n } else {\n record.children.forEach((child, childIndex) =>\n validateDocumentNode(child, `${path}.children[${childIndex}]`, issues),\n );\n }\n return;\n case \"field\":\n expectString(record.fieldType, `${path}.fieldType`, issues);\n expectString(record.instruction, `${path}.instruction`, issues);\n if (!Array.isArray(record.children)) {\n issues.push({ path: `${path}.children`, message: \"children must be an array.\" });\n } else {\n record.children.forEach((child, index) =>\n validateDocumentNode(child, `${path}.children[${index}]`, issues),\n );\n }\n return;\n case \"bookmark_start\":\n expectString(record.bookmarkId, `${path}.bookmarkId`, issues);\n expectString(record.name, `${path}.name`, issues);\n return;\n case \"bookmark_end\":\n expectString(record.bookmarkId, `${path}.bookmarkId`, issues);\n return;\n case \"section_break\":\n return;\n case \"text\":\n if (typeof record.text !== \"string\") {\n issues.push({\n path: `${path}.text`,\n message: \"text must be a string.\",\n });\n }\n return;\n case \"hard_break\":\n case \"column_break\":\n case \"tab\":\n return;\n case \"symbol\":\n expectString(record.char, `${path}.char`, issues);\n if (record.font !== undefined) {\n expectString(record.font, `${path}.font`, issues);\n }\n return;\n case \"footnote_ref\":\n expectString(record.noteId, `${path}.noteId`, issues);\n if (record.noteKind !== \"footnote\" && record.noteKind !== \"endnote\") {\n issues.push({\n path: `${path}.noteKind`,\n message: \"noteKind must be 'footnote' or 'endnote'.\",\n });\n }\n return;\n case \"chart_preview\":\n case \"smartart_preview\":\n case \"shape\":\n case \"wordart\":\n case \"vml_shape\":\n expectString(record.rawXml, `${path}.rawXml`, issues);\n return;\n default:\n issues.push({\n path: `${path}.type`,\n message: `Unsupported node type ${JSON.stringify(type)}.`,\n });\n }\n}\n\nfunction validateFloatingImageProperties(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n if (record.horizontalPosition !== undefined) {\n validateFloatingAxisPosition(record.horizontalPosition, `${path}.horizontalPosition`, issues);\n }\n if (record.verticalPosition !== undefined) {\n validateFloatingAxisPosition(record.verticalPosition, `${path}.verticalPosition`, issues);\n }\n if (record.wrap !== undefined) {\n const wrap = expectString(record.wrap, `${path}.wrap`, issues);\n if (\n wrap &&\n wrap !== \"none\" &&\n wrap !== \"square\" &&\n wrap !== \"tight\" &&\n wrap !== \"through\" &&\n wrap !== \"topAndBottom\"\n ) {\n issues.push({\n path: `${path}.wrap`,\n message: \"wrap must be one of none, square, tight, through, or topAndBottom.\",\n });\n }\n }\n}\n\nfunction validateFloatingAxisPosition(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n if (record.relativeFrom !== undefined) {\n expectString(record.relativeFrom, `${path}.relativeFrom`, issues);\n }\n if (record.align !== undefined) {\n expectString(record.align, `${path}.align`, issues);\n }\n if (record.offset !== undefined && typeof record.offset !== \"number\") {\n issues.push({\n path: `${path}.offset`,\n message: \"offset must be a number.\",\n });\n }\n}\n\nfunction validateReviewStore(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n const comments = asPlainObject(record.comments, `${path}.comments`, issues);\n if (comments) {\n for (const [commentId, thread] of Object.entries(comments)) {\n expectDomainString(commentId, \"commentId\", `${path}.comments.${commentId}`, issues);\n const threadRecord = asPlainObject(thread, `${path}.comments.${commentId}`, issues);\n if (!threadRecord) {\n continue;\n }\n if (threadRecord.commentId !== commentId) {\n issues.push({\n path: `${path}.comments.${commentId}.commentId`,\n message: \"commentId must match the map key.\",\n });\n }\n validateAnchor(threadRecord.anchor, `${path}.comments.${commentId}.anchor`, issues);\n expectIso8601UtcTimestamp(\n threadRecord.createdAt,\n `${path}.comments.${commentId}.createdAt`,\n issues,\n );\n validateCommentStatus(threadRecord.status, `${path}.comments.${commentId}.status`, issues);\n if (threadRecord.createdBy !== undefined) {\n expectString(\n threadRecord.createdBy,\n `${path}.comments.${commentId}.createdBy`,\n issues,\n );\n }\n if (threadRecord.authorId !== undefined) {\n expectString(\n threadRecord.authorId,\n `${path}.comments.${commentId}.authorId`,\n issues,\n );\n }\n if (threadRecord.body !== undefined) {\n expectStringAllowEmpty(\n threadRecord.body,\n `${path}.comments.${commentId}.body`,\n issues,\n );\n }\n if (!Array.isArray(threadRecord.warningIds)) {\n issues.push({\n path: `${path}.comments.${commentId}.warningIds`,\n message: \"warningIds must be an array.\",\n });\n } else {\n threadRecord.warningIds.forEach((warningId, index) =>\n expectDomainString(\n warningId,\n \"warningId\",\n `${path}.comments.${commentId}.warningIds[${index}]`,\n issues,\n ),\n );\n }\n if (threadRecord.entries !== undefined) {\n validateCommentEntries(\n threadRecord.entries,\n `${path}.comments.${commentId}.entries`,\n issues,\n );\n }\n if (threadRecord.resolution !== undefined) {\n validateCommentResolution(\n threadRecord.resolution,\n `${path}.comments.${commentId}.resolution`,\n issues,\n );\n }\n if (threadRecord.resolvedAt !== undefined) {\n expectIso8601UtcTimestamp(\n threadRecord.resolvedAt,\n `${path}.comments.${commentId}.resolvedAt`,\n issues,\n );\n }\n if (\n threadRecord.isResolved !== undefined &&\n typeof threadRecord.isResolved !== \"boolean\"\n ) {\n issues.push({\n path: `${path}.comments.${commentId}.isResolved`,\n message: \"isResolved must be a boolean.\",\n });\n }\n if (threadRecord.metadata !== undefined) {\n validateCommentThreadMetadata(\n threadRecord.metadata,\n `${path}.comments.${commentId}.metadata`,\n issues,\n );\n }\n }\n }\n\n const revisions = asPlainObject(record.revisions, `${path}.revisions`, issues);\n if (revisions) {\n for (const [revisionId, revision] of Object.entries(revisions)) {\n expectDomainString(revisionId, \"revisionId\", `${path}.revisions.${revisionId}`, issues);\n const revisionRecord = asPlainObject(\n revision,\n `${path}.revisions.${revisionId}`,\n issues,\n );\n if (!revisionRecord) {\n continue;\n }\n if (revisionRecord.changeId !== revisionId) {\n issues.push({\n path: `${path}.revisions.${revisionId}.changeId`,\n message: \"changeId must match the map key.\",\n });\n }\n validateAnchor(revisionRecord.anchor, `${path}.revisions.${revisionId}.anchor`, issues);\n validateRevisionKind(revisionRecord.kind, `${path}.revisions.${revisionId}.kind`, issues);\n validateRevisionStatus(\n revisionRecord.status,\n `${path}.revisions.${revisionId}.status`,\n issues,\n );\n expectIso8601UtcTimestamp(\n revisionRecord.createdAt,\n `${path}.revisions.${revisionId}.createdAt`,\n issues,\n );\n if (revisionRecord.authorId !== undefined) {\n expectString(\n revisionRecord.authorId,\n `${path}.revisions.${revisionId}.authorId`,\n issues,\n );\n }\n if (revisionRecord.warningIds !== undefined) {\n validateWarningIds(\n revisionRecord.warningIds,\n `${path}.revisions.${revisionId}.warningIds`,\n issues,\n );\n }\n if (revisionRecord.metadata !== undefined) {\n validateRevisionMetadata(\n revisionRecord.metadata,\n `${path}.revisions.${revisionId}.metadata`,\n issues,\n );\n }\n }\n }\n}\n\nfunction validateCommentStatus(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n if (value === \"open\" || value === \"resolved\" || value === \"detached\") {\n return;\n }\n issues.push({\n path,\n message: \"status must be one of open, resolved, or detached.\",\n });\n}\n\nfunction validateCommentEntries(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n if (!Array.isArray(value)) {\n issues.push({\n path,\n message: \"entries must be an array.\",\n });\n return;\n }\n\n value.forEach((entry, index) => {\n const record = asPlainObject(entry, `${path}[${index}]`, issues);\n if (!record) {\n return;\n }\n expectString(record.entryId, `${path}[${index}].entryId`, issues);\n expectString(record.authorId, `${path}[${index}].authorId`, issues);\n expectStringAllowEmpty(record.body, `${path}[${index}].body`, issues);\n expectIso8601UtcTimestamp(record.createdAt, `${path}[${index}].createdAt`, issues);\n if (record.metadata !== undefined) {\n validateCommentEntryMetadata(record.metadata, `${path}[${index}].metadata`, issues);\n }\n });\n}\n\nfunction validateCommentEntryMetadata(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n for (const field of [\n \"ooxmlCommentId\",\n \"paraId\",\n \"parentParaId\",\n \"durableId\",\n \"initials\",\n ] as const) {\n if (record[field] !== undefined) {\n expectString(record[field], `${path}.${field}`, issues);\n }\n }\n}\n\nfunction validateCommentResolution(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n expectIso8601UtcTimestamp(record.resolvedAt, `${path}.resolvedAt`, issues);\n expectString(record.resolvedBy, `${path}.resolvedBy`, issues);\n}\n\nfunction validateCommentThreadMetadata(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n if (\n record.source !== undefined &&\n record.source !== \"runtime\" &&\n record.source !== \"import\"\n ) {\n issues.push({\n path: `${path}.source`,\n message: \"source must be either runtime or import.\",\n });\n }\n if (record.rootOoxmlCommentId !== undefined) {\n expectString(record.rootOoxmlCommentId, `${path}.rootOoxmlCommentId`, issues);\n }\n if (record.rootParaId !== undefined) {\n expectString(record.rootParaId, `${path}.rootParaId`, issues);\n }\n}\n\nfunction validateRevisionKind(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n if (\n value === \"insertion\" ||\n value === \"deletion\" ||\n value === \"formatting\" ||\n value === \"move\" ||\n value === \"property-change\"\n ) {\n return;\n }\n issues.push({\n path,\n message: \"kind must be insertion, deletion, formatting, move, or property-change.\",\n });\n}\n\nfunction validateRevisionStatus(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n if (\n value === \"open\" ||\n value === \"accepted\" ||\n value === \"rejected\" ||\n value === \"detached\"\n ) {\n return;\n }\n issues.push({\n path,\n message: \"status must be one of open, accepted, rejected, or detached.\",\n });\n}\n\nfunction validateWarningIds(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n if (!Array.isArray(value)) {\n issues.push({\n path,\n message: \"warningIds must be an array.\",\n });\n return;\n }\n\n value.forEach((warningId, index) =>\n expectDomainString(warningId, \"warningId\", `${path}[${index}]`, issues),\n );\n}\n\nfunction validateRevisionMetadata(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n if (\n record.source !== undefined &&\n record.source !== \"runtime\" &&\n record.source !== \"import\"\n ) {\n issues.push({\n path: `${path}.source`,\n message: \"source must be either runtime or import.\",\n });\n }\n for (const field of [\n \"preserveOnlyReason\",\n \"importedRevisionForm\",\n \"originalRevisionType\",\n \"ooxmlRevisionId\",\n ] as const) {\n if (record[field] !== undefined) {\n expectString(record[field], `${path}.${field}`, issues);\n }\n }\n\n if (record.propertyChangeData !== undefined) {\n const pcd = asPlainObject(record.propertyChangeData, `${path}.propertyChangeData`, issues);\n if (pcd) {\n expectString(pcd.xmlTag, `${path}.propertyChangeData.xmlTag`, issues);\n expectString(pcd.beforeXml, `${path}.propertyChangeData.beforeXml`, issues);\n }\n }\n\n if (record.moveData !== undefined) {\n const md = asPlainObject(record.moveData, `${path}.moveData`, issues);\n if (md) {\n expectString(md.moveId, `${path}.moveData.moveId`, issues);\n expectString(md.direction, `${path}.moveData.direction`, issues);\n }\n }\n}\n\nfunction validatePreservationStore(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n const opaqueFragments = asPlainObject(\n record.opaqueFragments,\n `${path}.opaqueFragments`,\n issues,\n );\n if (opaqueFragments) {\n for (const [fragmentId, fragment] of Object.entries(opaqueFragments)) {\n expectDomainString(fragmentId, \"fragmentId\", `${path}.opaqueFragments.${fragmentId}`, issues);\n const fragmentRecord = asPlainObject(\n fragment,\n `${path}.opaqueFragments.${fragmentId}`,\n issues,\n );\n if (!fragmentRecord) {\n continue;\n }\n if (fragmentRecord.fragmentId !== fragmentId) {\n issues.push({\n path: `${path}.opaqueFragments.${fragmentId}.fragmentId`,\n message: \"fragmentId must match the map key.\",\n });\n }\n validateRange(\n fragmentRecord.lastKnownRange,\n `${path}.opaqueFragments.${fragmentId}.lastKnownRange`,\n issues,\n );\n expectDomainString(\n fragmentRecord.warningId,\n \"warningId\",\n `${path}.opaqueFragments.${fragmentId}.warningId`,\n issues,\n );\n if (fragmentRecord.packagePartName !== undefined) {\n expectDomainString(\n fragmentRecord.packagePartName,\n \"packagePartName\",\n `${path}.opaqueFragments.${fragmentId}.packagePartName`,\n issues,\n );\n }\n if (fragmentRecord.relationshipId !== undefined) {\n expectDomainString(\n fragmentRecord.relationshipId,\n \"relationshipId\",\n `${path}.opaqueFragments.${fragmentId}.relationshipId`,\n issues,\n );\n }\n }\n }\n\n const packageParts = asPlainObject(record.packageParts, `${path}.packageParts`, issues);\n if (packageParts) {\n for (const [packagePartName, packagePart] of Object.entries(packageParts)) {\n expectDomainString(\n packagePartName,\n \"packagePartName\",\n `${path}.packageParts.${packagePartName}`,\n issues,\n );\n const packagePartRecord = asPlainObject(\n packagePart,\n `${path}.packageParts.${packagePartName}`,\n issues,\n );\n if (!packagePartRecord) {\n continue;\n }\n if (packagePartRecord.packagePartName !== packagePartName) {\n issues.push({\n path: `${path}.packageParts.${packagePartName}.packagePartName`,\n message: \"packagePartName must match the map key.\",\n });\n }\n if (Array.isArray(packagePartRecord.relationshipIds)) {\n packagePartRecord.relationshipIds.forEach((relationshipId, index) =>\n expectDomainString(\n relationshipId,\n \"relationshipId\",\n `${path}.packageParts.${packagePartName}.relationshipIds[${index}]`,\n issues,\n ),\n );\n }\n }\n }\n}\n\nfunction validateDiagnosticStore(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n if (Array.isArray(record.warnings)) {\n record.warnings.forEach((warning, index) => {\n const warningRecord = asPlainObject(warning, `${path}.warnings[${index}]`, issues);\n if (!warningRecord) {\n return;\n }\n expectDomainString(\n warningRecord.diagnosticId,\n \"diagnosticId\",\n `${path}.warnings[${index}].diagnosticId`,\n issues,\n );\n expectDomainString(\n warningRecord.warningId,\n \"warningId\",\n `${path}.warnings[${index}].warningId`,\n issues,\n );\n });\n }\n\n if (Array.isArray(record.errors)) {\n record.errors.forEach((error, index) => {\n const errorRecord = asPlainObject(error, `${path}.errors[${index}]`, issues);\n if (!errorRecord) {\n return;\n }\n expectDomainString(\n errorRecord.diagnosticId,\n \"diagnosticId\",\n `${path}.errors[${index}].diagnosticId`,\n issues,\n );\n });\n }\n}\n\nfunction validateAnchor(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n const kind = expectString(record.kind, `${path}.kind`, issues);\n if (!kind) {\n return;\n }\n\n if (kind === \"range\") {\n validateRange(record.range, `${path}.range`, issues);\n validateBoundaryAssoc(record.assoc, `${path}.assoc`, issues);\n } else if (kind === \"node\") {\n if (typeof record.at !== \"number\") {\n issues.push({\n path: `${path}.at`,\n message: \"node anchors must contain a numeric at value.\",\n });\n }\n if (record.assoc !== -1 && record.assoc !== 1) {\n issues.push({\n path: `${path}.assoc`,\n message: \"node anchor assoc must be -1 or 1.\",\n });\n }\n } else if (kind === \"detached\") {\n validateRange(record.lastKnownRange, `${path}.lastKnownRange`, issues);\n if (\n record.reason !== \"deleted\" &&\n record.reason !== \"invalidatedByStructureChange\" &&\n record.reason !== \"importAmbiguity\"\n ) {\n issues.push({\n path: `${path}.reason`,\n message: \"detached anchor reason must be deleted, invalidatedByStructureChange, or importAmbiguity.\",\n });\n }\n } else {\n issues.push({\n path: `${path}.kind`,\n message: \"anchor kind must be range, node, or detached.\",\n });\n }\n}\n\nfunction validateBoundaryAssoc(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n if (record.start !== -1 && record.start !== 1) {\n issues.push({\n path: `${path}.start`,\n message: \"assoc.start must be -1 or 1.\",\n });\n }\n if (record.end !== -1 && record.end !== 1) {\n issues.push({\n path: `${path}.end`,\n message: \"assoc.end must be -1 or 1.\",\n });\n }\n}\n\nfunction validateDocumentReferences(\n record: Record<string, unknown>,\n issues: ModelValidationIssue[],\n): void {\n const paragraphStyleIds = new Set(\n Object.keys(asPlainObject(asPlainObject(record.styles, \"$.styles\", [])?.paragraphs, \"$.styles.paragraphs\", []) ?? {}),\n );\n const numberingInstanceIds = new Set(\n Object.keys(asPlainObject(asPlainObject(record.numbering, \"$.numbering\", [])?.instances, \"$.numbering.instances\", []) ?? {}),\n );\n const abstractNumberingIds = new Set(\n Object.keys(asPlainObject(asPlainObject(record.numbering, \"$.numbering\", [])?.abstractDefinitions, \"$.numbering.abstractDefinitions\", []) ?? {}),\n );\n const mediaIds = new Set(\n Object.keys(asPlainObject(asPlainObject(record.media, \"$.media\", [])?.items, \"$.media.items\", []) ?? {}),\n );\n const warningIds = new Set(\n (Array.isArray(asPlainObject(record.diagnostics, \"$.diagnostics\", [])?.warnings)\n ? (asPlainObject(record.diagnostics, \"$.diagnostics\", [])?.warnings as Array<Record<string, unknown>>)\n : []\n ).flatMap((warning) => typeof warning.warningId === \"string\" ? [warning.warningId] : []),\n );\n const fragmentIds = new Set(\n Object.keys(asPlainObject(asPlainObject(record.preservation, \"$.preservation\", [])?.opaqueFragments, \"$.preservation.opaqueFragments\", []) ?? {}),\n );\n const noteIds = collectNoteIds(record);\n\n const numberingInstances = asPlainObject(\n asPlainObject(record.numbering, \"$.numbering\", [])?.instances,\n \"$.numbering.instances\",\n [],\n );\n if (numberingInstances) {\n for (const [instanceId, instance] of Object.entries(numberingInstances)) {\n const instanceRecord = asPlainObject(instance, `$.numbering.instances.${instanceId}`, []);\n if (\n instanceRecord &&\n typeof instanceRecord.abstractNumberingId === \"string\" &&\n !abstractNumberingIds.has(instanceRecord.abstractNumberingId)\n ) {\n issues.push({\n path: `$.numbering.instances.${instanceId}.abstractNumberingId`,\n message: \"abstractNumberingId must reference an existing abstract numbering definition.\",\n });\n }\n }\n }\n\n validateDocumentNodeReferences(record.content, \"$.content\", issues, {\n paragraphStyleIds,\n numberingInstanceIds,\n mediaIds,\n warningIds,\n fragmentIds,\n noteIds,\n });\n validateSubPartReferences(record.subParts, \"$.subParts\", issues, {\n paragraphStyleIds,\n numberingInstanceIds,\n mediaIds,\n warningIds,\n fragmentIds,\n noteIds,\n });\n validateReviewReferences(record.review, \"$.review\", issues, warningIds);\n}\n\nfunction validateDocumentNodeReferences(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n references: {\n paragraphStyleIds: ReadonlySet<string>;\n numberingInstanceIds: ReadonlySet<string>;\n mediaIds: ReadonlySet<string>;\n warningIds: ReadonlySet<string>;\n fragmentIds: ReadonlySet<string>;\n noteIds: ReadonlySet<string>;\n },\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n const type = typeof record.type === \"string\" ? record.type : undefined;\n if (type === \"paragraph\") {\n if (\n typeof record.styleId === \"string\" &&\n !references.paragraphStyleIds.has(record.styleId)\n ) {\n issues.push({\n path: `${path}.styleId`,\n message: \"styleId must reference an existing paragraph style definition.\",\n });\n }\n const numbering = asPlainObject(record.numbering, `${path}.numbering`, []);\n if (\n numbering &&\n typeof numbering.numberingInstanceId === \"string\" &&\n !references.numberingInstanceIds.has(numbering.numberingInstanceId)\n ) {\n issues.push({\n path: `${path}.numbering.numberingInstanceId`,\n message: \"numberingInstanceId must reference an existing numbering instance.\",\n });\n }\n } else if (type === \"image\") {\n if (typeof record.mediaId === \"string\" && !references.mediaIds.has(record.mediaId)) {\n issues.push({\n path: `${path}.mediaId`,\n message: \"mediaId must reference an existing media catalog item.\",\n });\n }\n } else if (type === \"opaque_inline\" || type === \"opaque_block\") {\n if (typeof record.fragmentId === \"string\" && !references.fragmentIds.has(record.fragmentId)) {\n issues.push({\n path: `${path}.fragmentId`,\n message: \"fragmentId must reference an existing opaque fragment.\",\n });\n }\n if (typeof record.warningId === \"string\" && !references.warningIds.has(record.warningId)) {\n issues.push({\n path: `${path}.warningId`,\n message: \"warningId must reference an existing diagnostic warning.\",\n });\n }\n } else if (type === \"footnote_ref\") {\n if (typeof record.noteId === \"string\" && !references.noteIds.has(`${record.noteKind}:${record.noteId}`)) {\n issues.push({\n path: `${path}.noteId`,\n message: \"noteId must reference an existing footnote or endnote definition.\",\n });\n }\n }\n\n if (Array.isArray(record.children)) {\n record.children.forEach((child, index) =>\n validateDocumentNodeReferences(child, `${path}.children[${index}]`, issues, references),\n );\n }\n if (Array.isArray(record.rows)) {\n record.rows.forEach((row, index) =>\n validateDocumentNodeReferences(row, `${path}.rows[${index}]`, issues, references),\n );\n }\n if (Array.isArray(record.cells)) {\n record.cells.forEach((cell, index) =>\n validateDocumentNodeReferences(cell, `${path}.cells[${index}]`, issues, references),\n );\n }\n}\n\nfunction validateReviewReferences(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n warningIds: ReadonlySet<string>,\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n const comments = asPlainObject(record.comments, `${path}.comments`, []);\n if (comments) {\n for (const [commentId, thread] of Object.entries(comments)) {\n const threadRecord = asPlainObject(thread, `${path}.comments.${commentId}`, []);\n if (!threadRecord || !Array.isArray(threadRecord.warningIds)) {\n continue;\n }\n threadRecord.warningIds.forEach((warningId, index) => {\n if (typeof warningId === \"string\" && !warningIds.has(warningId)) {\n issues.push({\n path: `${path}.comments.${commentId}.warningIds[${index}]`,\n message: \"warningIds must reference existing diagnostic warnings.\",\n });\n }\n });\n }\n }\n\n const revisions = asPlainObject(record.revisions, `${path}.revisions`, []);\n if (revisions) {\n for (const [revisionId, revision] of Object.entries(revisions)) {\n const revisionRecord = asPlainObject(revision, `${path}.revisions.${revisionId}`, []);\n if (!revisionRecord || !Array.isArray(revisionRecord.warningIds)) {\n continue;\n }\n revisionRecord.warningIds.forEach((warningId, index) => {\n if (typeof warningId === \"string\" && !warningIds.has(warningId)) {\n issues.push({\n path: `${path}.revisions.${revisionId}.warningIds[${index}]`,\n message: \"warningIds must reference existing diagnostic warnings.\",\n });\n }\n });\n }\n }\n}\n\nfunction validateSubPartReferences(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n references: {\n paragraphStyleIds: ReadonlySet<string>;\n numberingInstanceIds: ReadonlySet<string>;\n mediaIds: ReadonlySet<string>;\n warningIds: ReadonlySet<string>;\n fragmentIds: ReadonlySet<string>;\n noteIds: ReadonlySet<string>;\n },\n): void {\n if (value === undefined) {\n return;\n }\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n const headers = Array.isArray(record.headers) ? record.headers : [];\n headers.forEach((header, index) => {\n const headerRecord = asPlainObject(header, `${path}.headers[${index}]`, []);\n if (!headerRecord || !Array.isArray(headerRecord.blocks)) {\n return;\n }\n headerRecord.blocks.forEach((block, blockIndex) =>\n validateDocumentNodeReferences(block, `${path}.headers[${index}].blocks[${blockIndex}]`, issues, references),\n );\n });\n\n const footers = Array.isArray(record.footers) ? record.footers : [];\n footers.forEach((footer, index) => {\n const footerRecord = asPlainObject(footer, `${path}.footers[${index}]`, []);\n if (!footerRecord || !Array.isArray(footerRecord.blocks)) {\n return;\n }\n footerRecord.blocks.forEach((block, blockIndex) =>\n validateDocumentNodeReferences(block, `${path}.footers[${index}].blocks[${blockIndex}]`, issues, references),\n );\n });\n\n if (record.footnoteCollection !== undefined) {\n const footnoteCollection = asPlainObject(record.footnoteCollection, `${path}.footnoteCollection`, []);\n const footnotes = asPlainObject(footnoteCollection?.footnotes, `${path}.footnoteCollection.footnotes`, []);\n if (footnotes) {\n for (const [noteId, note] of Object.entries(footnotes)) {\n const noteRecord = asPlainObject(note, `${path}.footnoteCollection.footnotes.${noteId}`, []);\n if (!noteRecord || !Array.isArray(noteRecord.blocks)) {\n continue;\n }\n noteRecord.blocks.forEach((block, blockIndex) =>\n validateDocumentNodeReferences(\n block,\n `${path}.footnoteCollection.footnotes.${noteId}.blocks[${blockIndex}]`,\n issues,\n references,\n ),\n );\n }\n }\n\n const endnotes = asPlainObject(footnoteCollection?.endnotes, `${path}.footnoteCollection.endnotes`, []);\n if (endnotes) {\n for (const [noteId, note] of Object.entries(endnotes)) {\n const noteRecord = asPlainObject(note, `${path}.footnoteCollection.endnotes.${noteId}`, []);\n if (!noteRecord || !Array.isArray(noteRecord.blocks)) {\n continue;\n }\n noteRecord.blocks.forEach((block, blockIndex) =>\n validateDocumentNodeReferences(\n block,\n `${path}.footnoteCollection.endnotes.${noteId}.blocks[${blockIndex}]`,\n issues,\n references,\n ),\n );\n }\n }\n }\n}\n\nfunction collectNoteIds(record: Record<string, unknown>): Set<string> {\n const noteIds = new Set<string>();\n const subParts = asPlainObject(record.subParts, \"$.subParts\", []);\n const footnoteCollection = asPlainObject(subParts?.footnoteCollection, \"$.subParts.footnoteCollection\", []);\n const footnotes = asPlainObject(footnoteCollection?.footnotes, \"$.subParts.footnoteCollection.footnotes\", []);\n if (footnotes) {\n Object.keys(footnotes).forEach((noteId) => noteIds.add(`footnote:${noteId}`));\n }\n const endnotes = asPlainObject(footnoteCollection?.endnotes, \"$.subParts.footnoteCollection.endnotes\", []);\n if (endnotes) {\n Object.keys(endnotes).forEach((noteId) => noteIds.add(`endnote:${noteId}`));\n }\n return noteIds;\n}\n\nfunction validateRange(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n if (typeof record.from !== \"number\" || typeof record.to !== \"number\") {\n issues.push({\n path,\n message: \"Range must contain numeric from and to values.\",\n });\n }\n}\n\nfunction validateExactObjectKeys(\n record: Record<string, unknown>,\n expectedKeys: readonly string[],\n path: string,\n issues: ModelValidationIssue[],\n allowedOptionalKeys?: readonly string[],\n): void {\n const actualKeys = new Set(Object.keys(record));\n const expected = new Set(expectedKeys);\n const optional = new Set(allowedOptionalKeys ?? []);\n\n for (const expectedKey of expectedKeys) {\n if (!actualKeys.has(expectedKey)) {\n issues.push({\n path,\n message: `Missing required key ${JSON.stringify(expectedKey)}.`,\n });\n }\n }\n\n for (const actualKey of actualKeys) {\n if (!expected.has(actualKey) && !optional.has(actualKey)) {\n issues.push({\n path: `${path}.${actualKey}`,\n message:\n \"Unexpected canonical document key. Render/UI state is not part of the canonical envelope.\",\n });\n }\n }\n}\n\nfunction validateSubPartsCatalog(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n if (value === undefined) {\n return;\n }\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n if (record.headers !== undefined) {\n if (!Array.isArray(record.headers)) {\n issues.push({ path: `${path}.headers`, message: \"headers must be an array.\" });\n } else {\n record.headers.forEach((header, index) => {\n const headerRecord = asPlainObject(header, `${path}.headers[${index}]`, issues);\n if (headerRecord) {\n expectString(headerRecord.variant, `${path}.headers[${index}].variant`, issues);\n expectString(headerRecord.partPath, `${path}.headers[${index}].partPath`, issues);\n expectString(headerRecord.relationshipId, `${path}.headers[${index}].relationshipId`, issues);\n if (!Array.isArray(headerRecord.blocks)) {\n issues.push({ path: `${path}.headers[${index}].blocks`, message: \"blocks must be an array.\" });\n } else {\n headerRecord.blocks.forEach((block, blockIndex) =>\n validateDocumentNode(block, `${path}.headers[${index}].blocks[${blockIndex}]`, issues),\n );\n }\n }\n });\n }\n }\n\n if (record.footers !== undefined) {\n if (!Array.isArray(record.footers)) {\n issues.push({ path: `${path}.footers`, message: \"footers must be an array.\" });\n } else {\n record.footers.forEach((footer, index) => {\n const footerRecord = asPlainObject(footer, `${path}.footers[${index}]`, issues);\n if (footerRecord) {\n expectString(footerRecord.variant, `${path}.footers[${index}].variant`, issues);\n expectString(footerRecord.partPath, `${path}.footers[${index}].partPath`, issues);\n expectString(footerRecord.relationshipId, `${path}.footers[${index}].relationshipId`, issues);\n if (!Array.isArray(footerRecord.blocks)) {\n issues.push({ path: `${path}.footers[${index}].blocks`, message: \"blocks must be an array.\" });\n } else {\n footerRecord.blocks.forEach((block, blockIndex) =>\n validateDocumentNode(block, `${path}.footers[${index}].blocks[${blockIndex}]`, issues),\n );\n }\n }\n });\n }\n }\n\n if (record.footnoteCollection !== undefined) {\n const footnoteCollection = asPlainObject(record.footnoteCollection, `${path}.footnoteCollection`, issues);\n if (footnoteCollection) {\n validateSubPartNoteMap(footnoteCollection.footnotes, \"footnote\", `${path}.footnoteCollection.footnotes`, issues);\n validateSubPartNoteMap(footnoteCollection.endnotes, \"endnote\", `${path}.footnoteCollection.endnotes`, issues);\n }\n }\n}\n\nfunction validateSubPartNoteMap(\n value: unknown,\n expectedKind: \"footnote\" | \"endnote\",\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n\n for (const [noteId, note] of Object.entries(record)) {\n const noteRecord = asPlainObject(note, `${path}.${noteId}`, issues);\n if (!noteRecord) {\n continue;\n }\n expectString(noteRecord.noteId, `${path}.${noteId}.noteId`, issues);\n if (noteRecord.noteId !== noteId) {\n issues.push({\n path: `${path}.${noteId}.noteId`,\n message: \"noteId must match the map key.\",\n });\n }\n if (noteRecord.kind !== expectedKind) {\n issues.push({\n path: `${path}.${noteId}.kind`,\n message: `kind must be ${expectedKind}.`,\n });\n }\n if (!Array.isArray(noteRecord.blocks)) {\n issues.push({ path: `${path}.${noteId}.blocks`, message: \"blocks must be an array.\" });\n } else {\n noteRecord.blocks.forEach((block, blockIndex) =>\n validateDocumentNode(block, `${path}.${noteId}.blocks[${blockIndex}]`, issues),\n );\n }\n }\n}\n\nfunction expectDomainString(\n value: unknown,\n domain: StableIdDomain,\n path: string,\n issues: ModelValidationIssue[],\n): string | null {\n const stableId = expectString(value, path, issues);\n if (!stableId) {\n return null;\n }\n\n if (!ID_PATTERNS[domain].test(stableId)) {\n issues.push({\n path,\n message: `Expected a valid ${domain}.`,\n });\n return null;\n }\n\n return stableId;\n}\n","import {\n CDS_SCHEMA_VERSION,\n COMPATIBILITY_REPORT_VERSION,\n LEGACY_PERSISTED_EDITOR_SNAPSHOT_VERSION,\n PERSISTED_EDITOR_SNAPSHOT_VERSION,\n type CompatibilityReportVersion,\n type Base64,\n type ISO8601DateTime,\n type ModelValidationIssue,\n type PersistedEditorSnapshotVersion,\n asPlainObject,\n assertValid,\n expectExactString,\n expectIso8601UtcTimestamp,\n expectString,\n stableStringify,\n} from \"./cds-1.0.0.ts\";\nimport {\n type CanonicalDocument,\n assertCanonicalDocument,\n validateCanonicalDocument,\n} from \"./canonical-document.ts\";\n\nexport type EditorWarningCode =\n | \"unsupported_ooxml_preserved\"\n | \"unsupported_ooxml_locked\"\n | \"import_normalized\"\n | \"export_roundtrip_risk\"\n | \"comment_anchor_detached\"\n | \"revision_anchor_detached\"\n | \"large_document_degraded\"\n | \"font_substitution\"\n | \"image_missing\";\n\nexport interface EditorWarning {\n warningId: string;\n code: EditorWarningCode;\n severity: \"info\" | \"warning\";\n message: string;\n source:\n | \"import\"\n | \"runtime\"\n | \"review\"\n | \"preservation\"\n | \"validation\"\n | \"export\";\n affectedAnchor?: Record<string, unknown>;\n featureEntryId?: string;\n details?: Record<string, unknown>;\n}\n\nexport type EditorErrorCode =\n | \"import_failed\"\n | \"export_failed\"\n | \"package_corrupt\"\n | \"validation_failed\"\n | \"datastore_failed\"\n | \"internal_invariant\";\n\nexport interface EditorError {\n errorId: string;\n code: EditorErrorCode;\n message: string;\n isFatal: boolean;\n source: \"import\" | \"runtime\" | \"validation\" | \"datastore\" | \"host\" | \"export\";\n details?: Record<string, unknown>;\n}\n\nexport type CompatibilityFeatureClass =\n | \"supported-roundtrip\"\n | \"preserve-only\"\n | \"unsupported-fatal\";\n\nexport interface CompatibilityFeatureEntry {\n featureEntryId: string;\n featureKey: string;\n featureClass: CompatibilityFeatureClass;\n message: string;\n affectedAnchor?: Record<string, unknown>;\n details?: Record<string, unknown>;\n}\n\nexport interface CompatibilityReport {\n reportVersion: CompatibilityReportVersion;\n generatedAt: ISO8601DateTime;\n blockExport: boolean;\n featureEntries: CompatibilityFeatureEntry[];\n warnings: EditorWarning[];\n errors: EditorError[];\n}\n\nexport interface PersistedSourcePackage {\n format: \"docx\";\n storage: \"embedded-base64\";\n mimeType: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\n sourceLabel?: string;\n sha256Hex: string;\n bytesBase64: Base64;\n}\n\nexport interface PersistedEditorSnapshot {\n snapshotVersion: PersistedEditorSnapshotVersion;\n schemaVersion: typeof CDS_SCHEMA_VERSION;\n documentId: string;\n docId: string;\n createdAt: ISO8601DateTime;\n updatedAt: ISO8601DateTime;\n savedAt: ISO8601DateTime;\n editorBuild: string;\n canonicalDocument: CanonicalDocument;\n compatibility: CompatibilityReport;\n warningLog: EditorWarning[];\n protectionSnapshot?: ProtectionSnapshotRecord;\n sourcePackage?: PersistedSourcePackage;\n}\n\nconst SNAPSHOT_REQUIRED_TOP_LEVEL_KEYS = [\n \"snapshotVersion\",\n \"schemaVersion\",\n \"documentId\",\n \"docId\",\n \"createdAt\",\n \"updatedAt\",\n \"savedAt\",\n \"editorBuild\",\n \"canonicalDocument\",\n \"compatibility\",\n \"warningLog\",\n] as const;\n\nconst SNAPSHOT_OPTIONAL_TOP_LEVEL_KEYS = [\"sourcePackage\", \"protectionSnapshot\"] as const;\n\nexport interface ProtectionRangeRecord {\n rangeId: string;\n start?: number;\n end?: number;\n editorGroup?: string;\n editor?: string;\n enforced: boolean;\n enforcementReason: string;\n}\n\nexport interface ProtectionSnapshotRecord {\n hasDocumentProtection: boolean;\n editType?: string;\n enforcementActive: boolean;\n ranges: ProtectionRangeRecord[];\n enforcedRangeCount: number;\n preservedRangeCount: number;\n}\n\nconst PERSISTED_EDITOR_SNAPSHOT_VERSIONS = new Set<PersistedEditorSnapshotVersion>([\n LEGACY_PERSISTED_EDITOR_SNAPSHOT_VERSION,\n PERSISTED_EDITOR_SNAPSHOT_VERSION,\n]);\n\nconst DOCX_SOURCE_PACKAGE_MIME_TYPE =\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\";\nconst COMPATIBILITY_FEATURE_CLASSES = new Set<CompatibilityFeatureClass>([\n \"supported-roundtrip\",\n \"preserve-only\",\n \"unsupported-fatal\",\n]);\nconst EDITOR_WARNING_CODES = new Set<EditorWarningCode>([\n \"unsupported_ooxml_preserved\",\n \"unsupported_ooxml_locked\",\n \"import_normalized\",\n \"export_roundtrip_risk\",\n \"comment_anchor_detached\",\n \"revision_anchor_detached\",\n \"large_document_degraded\",\n \"font_substitution\",\n \"image_missing\",\n]);\nconst EDITOR_WARNING_SEVERITIES = new Set<EditorWarning[\"severity\"]>([\"info\", \"warning\"]);\nconst EDITOR_WARNING_SOURCES = new Set<EditorWarning[\"source\"]>([\n \"import\",\n \"runtime\",\n \"review\",\n \"preservation\",\n \"validation\",\n \"export\",\n]);\nconst EDITOR_ERROR_CODES = new Set<EditorErrorCode>([\n \"import_failed\",\n \"export_failed\",\n \"package_corrupt\",\n \"validation_failed\",\n \"datastore_failed\",\n \"internal_invariant\",\n]);\nconst EDITOR_ERROR_SOURCES = new Set<EditorError[\"source\"]>([\n \"import\",\n \"runtime\",\n \"validation\",\n \"datastore\",\n \"host\",\n \"export\",\n]);\n\nexport function serializePersistedEditorSnapshot(\n snapshot: PersistedEditorSnapshot,\n): string {\n assertPersistedEditorSnapshot(snapshot);\n return stableStringify(snapshot);\n}\n\nexport function parsePersistedEditorSnapshot(\n json: string,\n): PersistedEditorSnapshot {\n const parsed = JSON.parse(json) as unknown;\n assertPersistedEditorSnapshot(parsed);\n return parsed;\n}\n\nexport function assertPersistedEditorSnapshot(\n snapshot: unknown,\n): asserts snapshot is PersistedEditorSnapshot {\n const issues = validatePersistedEditorSnapshot(snapshot);\n assertValid(issues, \"Invalid persisted editor snapshot.\");\n}\n\nexport function validatePersistedEditorSnapshot(\n snapshot: unknown,\n): ModelValidationIssue[] {\n const issues: ModelValidationIssue[] = [];\n const record = asPlainObject(snapshot, \"$\", issues);\n if (!record) {\n return issues;\n }\n\n validateExactObjectKeys(\n record,\n SNAPSHOT_REQUIRED_TOP_LEVEL_KEYS,\n SNAPSHOT_OPTIONAL_TOP_LEVEL_KEYS,\n \"$\",\n issues,\n );\n\n validateSnapshotVersion(record.snapshotVersion, \"$.snapshotVersion\", issues);\n expectExactString(\n record.schemaVersion,\n CDS_SCHEMA_VERSION,\n \"$.schemaVersion\",\n issues,\n );\n expectString(record.documentId, \"$.documentId\", issues);\n expectString(record.docId, \"$.docId\", issues);\n expectIso8601UtcTimestamp(record.createdAt, \"$.createdAt\", issues);\n expectIso8601UtcTimestamp(record.updatedAt, \"$.updatedAt\", issues);\n expectIso8601UtcTimestamp(record.savedAt, \"$.savedAt\", issues);\n expectString(record.editorBuild, \"$.editorBuild\", issues);\n\n const canonicalDocumentIssues = validateCanonicalDocument(record.canonicalDocument);\n issues.push(...canonicalDocumentIssues.map(prefixIssue(\"$.canonicalDocument\")));\n\n if (\n asPlainObject(record.canonicalDocument, \"$.canonicalDocument\", [])?.docId !==\n record.docId\n ) {\n issues.push({\n path: \"$.docId\",\n message: \"Snapshot docId must match canonicalDocument.docId.\",\n });\n }\n\n validateCompatibilityReport(record.compatibility, \"$.compatibility\", issues);\n\n if (!Array.isArray(record.warningLog)) {\n issues.push({\n path: \"$.warningLog\",\n message: \"warningLog must be an array.\",\n });\n } else {\n record.warningLog.forEach((warning, index) => {\n validateEditorWarning(warning, `$.warningLog[${index}]`, issues);\n });\n }\n\n if (record.sourcePackage !== undefined) {\n validatePersistedSourcePackage(record.sourcePackage, \"$.sourcePackage\", issues);\n }\n if (record.protectionSnapshot !== undefined) {\n validateProtectionSnapshot(record.protectionSnapshot, \"$.protectionSnapshot\", issues);\n }\n\n return issues;\n}\n\nexport function assertCompatibilityReport(\n report: unknown,\n): asserts report is CompatibilityReport {\n const issues = validateCompatibilityReport(report);\n assertValid(issues, \"Invalid compatibility report.\");\n}\n\nexport function validateCompatibilityReport(\n report: unknown,\n path = \"$\",\n issues: ModelValidationIssue[] = [],\n): ModelValidationIssue[] {\n const record = asPlainObject(report, path, issues);\n if (!record) {\n return issues;\n }\n\n expectExactString(\n record.reportVersion,\n COMPATIBILITY_REPORT_VERSION,\n `${path}.reportVersion`,\n issues,\n );\n expectIso8601UtcTimestamp(record.generatedAt, `${path}.generatedAt`, issues);\n\n if (typeof record.blockExport !== \"boolean\") {\n issues.push({\n path: `${path}.blockExport`,\n message: \"blockExport must be a boolean.\",\n });\n }\n\n if (!Array.isArray(record.featureEntries)) {\n issues.push({\n path: `${path}.featureEntries`,\n message: \"featureEntries must be an array.\",\n });\n } else {\n record.featureEntries.forEach((featureEntry, index) => {\n validateCompatibilityFeatureEntry(\n featureEntry,\n `${path}.featureEntries[${index}]`,\n issues,\n );\n });\n }\n\n if (!Array.isArray(record.warnings)) {\n issues.push({\n path: `${path}.warnings`,\n message: \"warnings must be an array.\",\n });\n } else {\n record.warnings.forEach((warning, index) => {\n validateEditorWarning(warning, `${path}.warnings[${index}]`, issues);\n });\n }\n\n if (!Array.isArray(record.errors)) {\n issues.push({\n path: `${path}.errors`,\n message: \"errors must be an array.\",\n });\n } else {\n record.errors.forEach((error, index) => {\n validateEditorError(error, `${path}.errors[${index}]`, issues);\n });\n }\n\n return issues;\n}\n\nfunction validateCompatibilityFeatureEntry(\n featureEntry: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(featureEntry, path, issues);\n if (!record) {\n return;\n }\n\n expectString(record.featureEntryId, `${path}.featureEntryId`, issues);\n expectString(record.featureKey, `${path}.featureKey`, issues);\n if (\n typeof record.featureClass !== \"string\" ||\n !COMPATIBILITY_FEATURE_CLASSES.has(record.featureClass as CompatibilityFeatureClass)\n ) {\n issues.push({\n path: `${path}.featureClass`,\n message: \"featureClass must be supported-roundtrip, preserve-only, or unsupported-fatal.\",\n });\n }\n expectString(record.message, `${path}.message`, issues);\n}\n\nfunction validateEditorWarning(\n warning: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(warning, path, issues);\n if (!record) {\n return;\n }\n\n expectString(record.warningId, `${path}.warningId`, issues);\n if (typeof record.code !== \"string\" || !EDITOR_WARNING_CODES.has(record.code as EditorWarningCode)) {\n issues.push({\n path: `${path}.code`,\n message: `code must be one of ${JSON.stringify([...EDITOR_WARNING_CODES])}.`,\n });\n }\n if (\n typeof record.severity !== \"string\" ||\n !EDITOR_WARNING_SEVERITIES.has(record.severity as EditorWarning[\"severity\"])\n ) {\n issues.push({\n path: `${path}.severity`,\n message: \"severity must be info or warning.\",\n });\n }\n expectString(record.message, `${path}.message`, issues);\n if (\n typeof record.source !== \"string\" ||\n !EDITOR_WARNING_SOURCES.has(record.source as EditorWarning[\"source\"])\n ) {\n issues.push({\n path: `${path}.source`,\n message: `source must be one of ${JSON.stringify([...EDITOR_WARNING_SOURCES])}.`,\n });\n }\n}\n\nfunction validateEditorError(\n error: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(error, path, issues);\n if (!record) {\n return;\n }\n\n expectString(record.errorId, `${path}.errorId`, issues);\n if (typeof record.code !== \"string\" || !EDITOR_ERROR_CODES.has(record.code as EditorErrorCode)) {\n issues.push({\n path: `${path}.code`,\n message: `code must be one of ${JSON.stringify([...EDITOR_ERROR_CODES])}.`,\n });\n }\n expectString(record.message, `${path}.message`, issues);\n if (\n typeof record.source !== \"string\" ||\n !EDITOR_ERROR_SOURCES.has(record.source as EditorError[\"source\"])\n ) {\n issues.push({\n path: `${path}.source`,\n message: `source must be one of ${JSON.stringify([...EDITOR_ERROR_SOURCES])}.`,\n });\n }\n\n if (typeof record.isFatal !== \"boolean\") {\n issues.push({\n path: `${path}.isFatal`,\n message: \"isFatal must be a boolean.\",\n });\n }\n}\n\nfunction validateExactObjectKeys(\n record: Record<string, unknown>,\n requiredKeys: readonly string[],\n optionalKeys: readonly string[],\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const actualKeys = new Set(Object.keys(record));\n const allowedKeys = new Set([...requiredKeys, ...optionalKeys]);\n\n for (const requiredKey of requiredKeys) {\n if (!actualKeys.has(requiredKey)) {\n issues.push({\n path,\n message: `Missing required key ${JSON.stringify(requiredKey)}.`,\n });\n }\n }\n\n for (const actualKey of actualKeys) {\n if (!allowedKeys.has(actualKey)) {\n issues.push({\n path: `${path}.${actualKey}`,\n message:\n \"Unexpected persisted snapshot key. Render/UI state is not part of the persistence contract.\",\n });\n }\n }\n}\n\nfunction prefixIssue(basePath: string) {\n return (issue: ModelValidationIssue): ModelValidationIssue => ({\n path: `${basePath}${issue.path === \"$\" ? \"\" : issue.path.slice(1)}`,\n message: issue.message,\n });\n}\n\nfunction validateSnapshotVersion(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): PersistedEditorSnapshotVersion | null {\n if (typeof value !== \"string\" || !PERSISTED_EDITOR_SNAPSHOT_VERSIONS.has(value as never)) {\n issues.push({\n path,\n message: `Expected one of ${JSON.stringify([...PERSISTED_EDITOR_SNAPSHOT_VERSIONS])}.`,\n });\n return null;\n }\n\n return value as PersistedEditorSnapshotVersion;\n}\n\nfunction validatePersistedSourcePackage(\n sourcePackage: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(sourcePackage, path, issues);\n if (!record) {\n return;\n }\n\n validateExactObjectKeys(\n record,\n [\"format\", \"storage\", \"mimeType\", \"sha256Hex\", \"bytesBase64\"],\n [\"sourceLabel\"],\n path,\n issues,\n );\n expectExactString(record.format, \"docx\", `${path}.format`, issues);\n expectExactString(record.storage, \"embedded-base64\", `${path}.storage`, issues);\n expectExactString(\n record.mimeType,\n DOCX_SOURCE_PACKAGE_MIME_TYPE,\n `${path}.mimeType`,\n issues,\n );\n expectString(record.sha256Hex, `${path}.sha256Hex`, issues);\n expectString(record.bytesBase64, `${path}.bytesBase64`, issues);\n\n if (\n typeof record.sha256Hex === \"string\" &&\n !/^[0-9a-f]{64}$/u.test(record.sha256Hex)\n ) {\n issues.push({\n path: `${path}.sha256Hex`,\n message: \"Expected a lowercase SHA-256 hex digest.\",\n });\n }\n\n if (record.sourceLabel !== undefined) {\n expectString(record.sourceLabel, `${path}.sourceLabel`, issues);\n }\n}\n\nexport function createPersistedEditorSnapshot(params: {\n documentId: string;\n savedAt: ISO8601DateTime;\n editorBuild: string;\n canonicalDocument: CanonicalDocument;\n compatibility: CompatibilityReport;\n warningLog?: EditorWarning[];\n protectionSnapshot?: ProtectionSnapshotRecord;\n sourcePackage?: PersistedSourcePackage;\n}): PersistedEditorSnapshot {\n assertCanonicalDocument(params.canonicalDocument);\n assertCompatibilityReport(params.compatibility);\n\n return {\n snapshotVersion: PERSISTED_EDITOR_SNAPSHOT_VERSION,\n schemaVersion: CDS_SCHEMA_VERSION,\n documentId: params.documentId,\n docId: params.canonicalDocument.docId,\n createdAt: params.canonicalDocument.createdAt,\n updatedAt: params.canonicalDocument.updatedAt,\n savedAt: params.savedAt,\n editorBuild: params.editorBuild,\n canonicalDocument: params.canonicalDocument,\n compatibility: params.compatibility,\n warningLog: params.warningLog ?? params.compatibility.warnings,\n protectionSnapshot: params.protectionSnapshot,\n sourcePackage: params.sourcePackage,\n };\n}\n\nfunction validateProtectionSnapshot(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n if (typeof record.hasDocumentProtection !== \"boolean\") {\n issues.push({ path: `${path}.hasDocumentProtection`, message: \"hasDocumentProtection must be a boolean.\" });\n }\n if (record.editType !== undefined) {\n expectString(record.editType, `${path}.editType`, issues);\n }\n if (typeof record.enforcementActive !== \"boolean\") {\n issues.push({ path: `${path}.enforcementActive`, message: \"enforcementActive must be a boolean.\" });\n }\n if (!Array.isArray(record.ranges)) {\n issues.push({ path: `${path}.ranges`, message: \"ranges must be an array.\" });\n } else {\n record.ranges.forEach((range, index) => validateProtectionRange(range, `${path}.ranges[${index}]`, issues));\n }\n if (!Number.isInteger(record.enforcedRangeCount)) {\n issues.push({ path: `${path}.enforcedRangeCount`, message: \"enforcedRangeCount must be an integer.\" });\n }\n if (!Number.isInteger(record.preservedRangeCount)) {\n issues.push({ path: `${path}.preservedRangeCount`, message: \"preservedRangeCount must be an integer.\" });\n }\n}\n\nfunction validateProtectionRange(\n value: unknown,\n path: string,\n issues: ModelValidationIssue[],\n): void {\n const record = asPlainObject(value, path, issues);\n if (!record) {\n return;\n }\n expectString(record.rangeId, `${path}.rangeId`, issues);\n if (record.start !== undefined && !Number.isInteger(record.start)) {\n issues.push({ path: `${path}.start`, message: \"start must be an integer.\" });\n }\n if (record.end !== undefined && !Number.isInteger(record.end)) {\n issues.push({ path: `${path}.end`, message: \"end must be an integer.\" });\n }\n if (record.editorGroup !== undefined) {\n expectString(record.editorGroup, `${path}.editorGroup`, issues);\n }\n if (record.editor !== undefined) {\n expectString(record.editor, `${path}.editor`, issues);\n }\n if (typeof record.enforced !== \"boolean\") {\n issues.push({ path: `${path}.enforced`, message: \"enforced must be a boolean.\" });\n }\n expectString(record.enforcementReason, `${path}.enforcementReason`, issues);\n}\n\nexport function projectAnchorToSnapshot(\n anchor: Record<string, unknown>,\n): Record<string, unknown> {\n return JSON.parse(JSON.stringify(anchor)) as Record<string, unknown>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACyDO,IAAM,yBAAwC;AAAA,EACnD,OAAO;AAAA,EACP,KAAK;AACP;AAEO,SAAS,kBACd,MACA,KAAK,MACL,QAAuB,wBACV;AACb,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,eAAe,EAAE,MAAM,GAAG,CAAC;AAAA,IAClC;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB,IAAc,QAAe,GAAe;AAC3E,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,qBACd,gBACA,QACgB;AAChB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,gBAAgB,eAAe,cAAc;AAAA,IAC7C;AAAA,EACF;AACF;AAQO,SAAS,eAAe,OAA2B;AACxD,SAAO,MAAM,QAAQ,MAAM,KACvB,EAAE,MAAM,MAAM,MAAM,IAAI,MAAM,GAAG,IACjC,EAAE,MAAM,MAAM,IAAI,IAAI,MAAM,KAAK;AACvC;;;ACvGO,IAAM,qBAAqB;AAC3B,IAAM,2CACX;AACK,IAAM,oCACX;AACK,IAAM,+BAA+B;AA2BrC,IAAM,uBAAN,cAAmC,MAAM;AAAA,EACrC;AAAA,EAET,YAAY,SAAiB,QAAyC;AACpE,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAChB;AACF;AAEA,IAAM,eACJ;AACF,IAAM,uBACJ;AAEK,SAAS,cAAc,OAAkD;AAC9E,MAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACvE,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,OAAO,eAAe,KAAK;AAC7C,SAAO,cAAc,OAAO,aAAa,cAAc;AACzD;AAEO,SAAS,iBAAiB,OAAiC;AAChE,SAAO,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS;AAC5D;AAEO,SAAS,OAAO,OAA+B;AACpD,SAAO,OAAO,UAAU,YAAY,aAAa,KAAK,KAAK;AAC7D;AAEO,SAAS,sBACd,OAC0B;AAC1B,SACE,OAAO,UAAU,YACjB,qBAAqB,KAAK,KAAK,KAC/B,CAAC,OAAO,MAAM,KAAK,MAAM,KAAK,CAAC;AAEnC;AAEO,SAAS,cACd,OACA,MACA,QACgC;AAChC,MAAI,CAAC,cAAc,KAAK,GAAG;AACzB,WAAO,KAAK,EAAE,MAAM,SAAS,2BAA2B,CAAC;AACzD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,aACd,OACA,MACA,QACe;AACf,MAAI,CAAC,iBAAiB,KAAK,GAAG;AAC5B,WAAO,KAAK,EAAE,MAAM,SAAS,+BAA+B,CAAC;AAC7D,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,uBACd,OACA,MACA,QACe;AACf,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,KAAK,EAAE,MAAM,SAAS,qBAAqB,CAAC;AACnD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,kBACd,OACA,UACA,MACA,QACU;AACV,MAAI,UAAU,UAAU;AACtB,WAAO,KAAK;AAAA,MACV;AAAA,MACA,SAAS,YAAY,KAAK,UAAU,QAAQ,CAAC;AAAA,IAC/C,CAAC;AACD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,0BACd,OACA,MACA,QACwB;AACxB,MAAI,CAAC,sBAAsB,KAAK,GAAG;AACjC,WAAO,KAAK;AAAA,MACV;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AACD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,WACd,OACA,MACA,QACa;AACb,MAAI,CAAC,OAAO,KAAK,GAAG;AAClB,WAAO,KAAK;AAAA,MACV;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AACD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAUO,SAAS,YACd,QACA,SACM;AACN,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,IAAI,qBAAqB,SAAS,MAAM;AAAA,EAChD;AACF;;;AClKA,IAAM,oCAAoC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,mCAAmC,CAAC,YAAY,eAAe;AAErE,IAAM,cAAc;AAAA,EAClB,SAAS;AAAA,EACT,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,SAAS;AAAA,EACT,WACE;AAAA,EACF,YACE;AAAA,EACF,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,gBAAgB;AAClB;AA4gCO,SAAS,wBACd,OACoC;AACpC,QAAM,SAAS,0BAA0B,KAAK;AAC9C,cAAY,QAAQ,6BAA6B;AACnD;AAEO,SAAS,0BACd,OACwB;AACxB,QAAM,SAAiC,CAAC;AACxC,QAAM,SAAS,cAAc,OAAO,KAAK,MAAM;AAC/C,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,0BAAwB,QAAQ,mCAAmC,KAAK,QAAQ,gCAAgC;AAChH,oBAAkB,OAAO,eAAe,oBAAoB,mBAAmB,MAAM;AACrF,aAAW,OAAO,OAAO,WAAW,MAAM;AAC1C,4BAA0B,OAAO,WAAW,eAAe,MAAM;AACjE,4BAA0B,OAAO,WAAW,eAAe,MAAM;AAEjE,mBAAiB,OAAO,UAAU,cAAc,MAAM;AACtD,wBAAsB,OAAO,QAAQ,YAAY,MAAM;AACvD,2BAAyB,OAAO,WAAW,eAAe,MAAM;AAChE,uBAAqB,OAAO,OAAO,WAAW,MAAM;AACpD,uBAAqB,OAAO,SAAS,aAAa,MAAM;AACxD,sBAAoB,OAAO,QAAQ,YAAY,MAAM;AACrD,4BAA0B,OAAO,cAAc,kBAAkB,MAAM;AACvE,0BAAwB,OAAO,aAAa,iBAAiB,MAAM;AACnE,MAAI,OAAO,aAAa,QAAW;AACjC,4BAAwB,OAAO,UAAU,cAAc,MAAM;AAAA,EAC/D;AACA,6BAA2B,QAAQ,MAAM;AAEzC,SAAO;AACT;AAEA,SAAS,iBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,QAAM,mBAAmB,cAAc,OAAO,kBAAkB,GAAG,IAAI,qBAAqB,MAAM;AAClG,MAAI,CAAC,kBAAkB;AACrB;AAAA,EACF;AAEA,aAAW,CAAC,aAAa,aAAa,KAAK,OAAO,QAAQ,gBAAgB,GAAG;AAC3E,QAAI,OAAO,kBAAkB,UAAU;AACrC,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI,qBAAqB,WAAW;AAAA,QAC7C,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,sBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,mBAAiB,OAAO,YAAY,GAAG,IAAI,eAAe,MAAM;AAChE,mBAAiB,OAAO,YAAY,GAAG,IAAI,eAAe,MAAM;AAChE,mBAAiB,OAAO,QAAQ,GAAG,IAAI,WAAW,MAAM;AACxD,MAAI,OAAO,iBAAiB,QAAW;AACrC,2BAAuB,OAAO,cAAc,GAAG,IAAI,iBAAiB,MAAM;AAAA,EAC5E;AACF;AAEA,SAAS,iBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,aAAW,CAAC,SAAS,UAAU,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC1D,uBAAmB,SAAS,WAAW,GAAG,IAAI,IAAI,OAAO,IAAI,MAAM;AACnE,UAAM,mBAAmB,cAAc,YAAY,GAAG,IAAI,IAAI,OAAO,IAAI,MAAM;AAC/E,QAAI,CAAC,kBAAkB;AACrB;AAAA,IACF;AACA,QAAI,iBAAiB,YAAY,SAAS;AACxC,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI,IAAI,OAAO;AAAA,QACxB,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,uBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,aAAW,CAAC,WAAW,UAAU,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC5D,UAAM,mBAAmB,cAAc,YAAY,GAAG,IAAI,IAAI,SAAS,IAAI,MAAM;AACjF,QAAI,CAAC,kBAAkB;AACrB;AAAA,IACF;AACA,QAAI,iBAAiB,SAAS,WAAW;AACvC,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI,IAAI,SAAS;AAAA,QAC1B,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,QAAI,iBAAiB,eAAe,UAAa,OAAO,iBAAiB,eAAe,UAAU;AAChG,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI,IAAI,SAAS;AAAA,QAC1B,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,yBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,QAAM,sBAAsB;AAAA,IAC1B,OAAO;AAAA,IACP,GAAG,IAAI;AAAA,IACP;AAAA,EACF;AACA,MAAI,qBAAqB;AACvB,eAAW,CAAC,YAAY,UAAU,KAAK,OAAO,QAAQ,mBAAmB,GAAG;AAC1E;AAAA,QACE;AAAA,QACA;AAAA,QACA,GAAG,IAAI,wBAAwB,UAAU;AAAA,QACzC;AAAA,MACF;AACA,YAAM,mBAAmB;AAAA,QACvB;AAAA,QACA,GAAG,IAAI,wBAAwB,UAAU;AAAA,QACzC;AAAA,MACF;AACA,UAAI,oBAAoB,iBAAiB,wBAAwB,YAAY;AAC3E,eAAO,KAAK;AAAA,UACV,MAAM,GAAG,IAAI,wBAAwB,UAAU;AAAA,UAC/C,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,cAAc,OAAO,WAAW,GAAG,IAAI,cAAc,MAAM;AAC7E,MAAI,WAAW;AACb,eAAW,CAAC,YAAY,QAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC9D;AAAA,QACE;AAAA,QACA;AAAA,QACA,GAAG,IAAI,cAAc,UAAU;AAAA,QAC/B;AAAA,MACF;AACA,YAAM,iBAAiB;AAAA,QACrB;AAAA,QACA,GAAG,IAAI,cAAc,UAAU;AAAA,QAC/B;AAAA,MACF;AACA,UAAI,CAAC,gBAAgB;AACnB;AAAA,MACF;AACA,UAAI,eAAe,wBAAwB,YAAY;AACrD,eAAO,KAAK;AAAA,UACV,MAAM,GAAG,IAAI,cAAc,UAAU;AAAA,UACrC,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AACA;AAAA,QACE,eAAe;AAAA,QACf;AAAA,QACA,GAAG,IAAI,cAAc,UAAU;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,qBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,QAAM,QAAQ,cAAc,OAAO,OAAO,GAAG,IAAI,UAAU,MAAM;AACjE,MAAI,CAAC,OAAO;AACV;AAAA,EACF;AAEA,aAAW,CAAC,SAAS,IAAI,KAAK,OAAO,QAAQ,KAAK,GAAG;AACnD,uBAAmB,SAAS,WAAW,GAAG,IAAI,UAAU,OAAO,IAAI,MAAM;AACzE,UAAM,aAAa,cAAc,MAAM,GAAG,IAAI,UAAU,OAAO,IAAI,MAAM;AACzE,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AACA,QAAI,WAAW,YAAY,SAAS;AAClC,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI,UAAU,OAAO;AAAA,QAC9B,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA;AAAA,MACE,WAAW;AAAA,MACX;AAAA,MACA,GAAG,IAAI,UAAU,OAAO;AAAA,MACxB;AAAA,IACF;AACA,QAAI,WAAW,mBAAmB,QAAW;AAC3C;AAAA,QACE,WAAW;AAAA,QACX;AAAA,QACA,GAAG,IAAI,UAAU,OAAO;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,qBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,QAAM,OAAO,aAAa,OAAO,MAAM,GAAG,IAAI,SAAS,MAAM;AAC7D,MAAI,CAAC,MAAM;AACT;AAAA,EACF;AAEA,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,UAAI,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG;AACnC,eAAO,KAAK,EAAE,MAAM,GAAG,IAAI,aAAa,SAAS,6BAA6B,CAAC;AAAA,MACjF,OAAO;AACL,eAAO,SAAS;AAAA,UAAQ,CAAC,OAAO,UAC9B,qBAAqB,OAAO,GAAG,IAAI,aAAa,KAAK,KAAK,MAAM;AAAA,QAClE;AAAA,MACF;AACA,UAAI,SAAS,eAAe,OAAO,YAAY,QAAW;AACxD,2BAAmB,OAAO,SAAS,WAAW,GAAG,IAAI,YAAY,MAAM;AAAA,MACzE;AACA,UAAI,SAAS,eAAe,OAAO,cAAc,QAAW;AAC1D,cAAM,YAAY,cAAc,OAAO,WAAW,GAAG,IAAI,cAAc,MAAM;AAC7E,YAAI,WAAW;AACb;AAAA,YACE,UAAU;AAAA,YACV;AAAA,YACA,GAAG,IAAI;AAAA,YACP;AAAA,UACF;AACA,cAAI,OAAO,UAAU,UAAU,UAAU;AACvC,mBAAO,KAAK;AAAA,cACV,MAAM,GAAG,IAAI;AAAA,cACb,SAAS;AAAA,YACX,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AACA,UAAI,SAAS,aAAa;AACxB,qBAAa,OAAO,MAAM,GAAG,IAAI,SAAS,MAAM;AAAA,MAClD;AACA;AAAA,IACF,KAAK;AACH,yBAAmB,OAAO,gBAAgB,kBAAkB,GAAG,IAAI,mBAAmB,MAAM;AAC5F;AAAA,IACF,KAAK;AACH,yBAAmB,OAAO,SAAS,WAAW,GAAG,IAAI,YAAY,MAAM;AACvE,UAAI,OAAO,iBAAiB,QAAW;AACrC,qBAAa,OAAO,cAAc,GAAG,IAAI,iBAAiB,MAAM;AAAA,MAClE;AACA,UAAI,OAAO,YAAY,QAAW;AAChC,cAAM,UAAU,aAAa,OAAO,SAAS,GAAG,IAAI,YAAY,MAAM;AACtE,YAAI,WAAW,YAAY,YAAY,YAAY,YAAY;AAC7D,iBAAO,KAAK;AAAA,YACV,MAAM,GAAG,IAAI;AAAA,YACb,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AAAA,MACF;AACA,UAAI,OAAO,aAAa,QAAW;AACjC,wCAAgC,OAAO,UAAU,GAAG,IAAI,aAAa,MAAM;AAAA,MAC7E;AACA;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,yBAAmB,OAAO,YAAY,cAAc,GAAG,IAAI,eAAe,MAAM;AAChF,yBAAmB,OAAO,WAAW,aAAa,GAAG,IAAI,cAAc,MAAM;AAC7E,UAAI,OAAO,WAAW,QAAW;AAC/B,qBAAa,OAAO,QAAQ,GAAG,IAAI,WAAW,MAAM;AAAA,MACtD;AACA;AAAA,IACF,KAAK;AACH,UAAI,CAAC,MAAM,QAAQ,OAAO,WAAW,GAAG;AACtC,eAAO,KAAK,EAAE,MAAM,GAAG,IAAI,gBAAgB,SAAS,gCAAgC,CAAC;AAAA,MACvF;AACA,UAAI,CAAC,MAAM,QAAQ,OAAO,IAAI,GAAG;AAC/B,eAAO,KAAK,EAAE,MAAM,GAAG,IAAI,SAAS,SAAS,yBAAyB,CAAC;AAAA,MACzE,OAAO;AACL,eAAO,KAAK;AAAA,UAAQ,CAAC,KAAK,aACxB,qBAAqB,KAAK,GAAG,IAAI,SAAS,QAAQ,KAAK,MAAM;AAAA,QAC/D;AAAA,MACF;AACA;AAAA,IACF,KAAK;AACH,UAAI,CAAC,MAAM,QAAQ,OAAO,KAAK,GAAG;AAChC,eAAO,KAAK,EAAE,MAAM,GAAG,IAAI,UAAU,SAAS,0BAA0B,CAAC;AAAA,MAC3E,OAAO;AACL,eAAO,MAAM;AAAA,UAAQ,CAAC,MAAM,cAC1B,qBAAqB,MAAM,GAAG,IAAI,UAAU,SAAS,KAAK,MAAM;AAAA,QAClE;AAAA,MACF;AACA;AAAA,IACF,KAAK;AACH,UAAI,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG;AACnC,eAAO,KAAK,EAAE,MAAM,GAAG,IAAI,aAAa,SAAS,6BAA6B,CAAC;AAAA,MACjF,OAAO;AACL,eAAO,SAAS;AAAA,UAAQ,CAAC,OAAO,eAC9B,qBAAqB,OAAO,GAAG,IAAI,aAAa,UAAU,KAAK,MAAM;AAAA,QACvE;AAAA,MACF;AACA;AAAA,IACF,KAAK;AACH,mBAAa,OAAO,WAAW,GAAG,IAAI,cAAc,MAAM;AAC1D,mBAAa,OAAO,aAAa,GAAG,IAAI,gBAAgB,MAAM;AAC9D,UAAI,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG;AACnC,eAAO,KAAK,EAAE,MAAM,GAAG,IAAI,aAAa,SAAS,6BAA6B,CAAC;AAAA,MACjF,OAAO;AACL,eAAO,SAAS;AAAA,UAAQ,CAAC,OAAO,UAC9B,qBAAqB,OAAO,GAAG,IAAI,aAAa,KAAK,KAAK,MAAM;AAAA,QAClE;AAAA,MACF;AACA;AAAA,IACF,KAAK;AACH,mBAAa,OAAO,YAAY,GAAG,IAAI,eAAe,MAAM;AAC5D,mBAAa,OAAO,MAAM,GAAG,IAAI,SAAS,MAAM;AAChD;AAAA,IACF,KAAK;AACH,mBAAa,OAAO,YAAY,GAAG,IAAI,eAAe,MAAM;AAC5D;AAAA,IACF,KAAK;AACH;AAAA,IACF,KAAK;AACH,UAAI,OAAO,OAAO,SAAS,UAAU;AACnC,eAAO,KAAK;AAAA,UACV,MAAM,GAAG,IAAI;AAAA,UACb,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AACA;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH;AAAA,IACF,KAAK;AACH,mBAAa,OAAO,MAAM,GAAG,IAAI,SAAS,MAAM;AAChD,UAAI,OAAO,SAAS,QAAW;AAC7B,qBAAa,OAAO,MAAM,GAAG,IAAI,SAAS,MAAM;AAAA,MAClD;AACA;AAAA,IACF,KAAK;AACH,mBAAa,OAAO,QAAQ,GAAG,IAAI,WAAW,MAAM;AACpD,UAAI,OAAO,aAAa,cAAc,OAAO,aAAa,WAAW;AACnE,eAAO,KAAK;AAAA,UACV,MAAM,GAAG,IAAI;AAAA,UACb,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AACA;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,mBAAa,OAAO,QAAQ,GAAG,IAAI,WAAW,MAAM;AACpD;AAAA,IACF;AACE,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS,yBAAyB,KAAK,UAAU,IAAI,CAAC;AAAA,MACxD,CAAC;AAAA,EACL;AACF;AAEA,SAAS,gCACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,MAAI,OAAO,uBAAuB,QAAW;AAC3C,iCAA6B,OAAO,oBAAoB,GAAG,IAAI,uBAAuB,MAAM;AAAA,EAC9F;AACA,MAAI,OAAO,qBAAqB,QAAW;AACzC,iCAA6B,OAAO,kBAAkB,GAAG,IAAI,qBAAqB,MAAM;AAAA,EAC1F;AACA,MAAI,OAAO,SAAS,QAAW;AAC7B,UAAM,OAAO,aAAa,OAAO,MAAM,GAAG,IAAI,SAAS,MAAM;AAC7D,QACE,QACA,SAAS,UACT,SAAS,YACT,SAAS,WACT,SAAS,aACT,SAAS,gBACT;AACA,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,6BACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,MAAI,OAAO,iBAAiB,QAAW;AACrC,iBAAa,OAAO,cAAc,GAAG,IAAI,iBAAiB,MAAM;AAAA,EAClE;AACA,MAAI,OAAO,UAAU,QAAW;AAC9B,iBAAa,OAAO,OAAO,GAAG,IAAI,UAAU,MAAM;AAAA,EACpD;AACA,MAAI,OAAO,WAAW,UAAa,OAAO,OAAO,WAAW,UAAU;AACpE,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,oBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,QAAM,WAAW,cAAc,OAAO,UAAU,GAAG,IAAI,aAAa,MAAM;AAC1E,MAAI,UAAU;AACZ,eAAW,CAAC,WAAW,MAAM,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAC1D,yBAAmB,WAAW,aAAa,GAAG,IAAI,aAAa,SAAS,IAAI,MAAM;AAClF,YAAM,eAAe,cAAc,QAAQ,GAAG,IAAI,aAAa,SAAS,IAAI,MAAM;AAClF,UAAI,CAAC,cAAc;AACjB;AAAA,MACF;AACA,UAAI,aAAa,cAAc,WAAW;AACxC,eAAO,KAAK;AAAA,UACV,MAAM,GAAG,IAAI,aAAa,SAAS;AAAA,UACnC,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AACA,qBAAe,aAAa,QAAQ,GAAG,IAAI,aAAa,SAAS,WAAW,MAAM;AAClF;AAAA,QACE,aAAa;AAAA,QACb,GAAG,IAAI,aAAa,SAAS;AAAA,QAC7B;AAAA,MACF;AACA,4BAAsB,aAAa,QAAQ,GAAG,IAAI,aAAa,SAAS,WAAW,MAAM;AACzF,UAAI,aAAa,cAAc,QAAW;AACxC;AAAA,UACE,aAAa;AAAA,UACb,GAAG,IAAI,aAAa,SAAS;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AACA,UAAI,aAAa,aAAa,QAAW;AACvC;AAAA,UACE,aAAa;AAAA,UACb,GAAG,IAAI,aAAa,SAAS;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AACA,UAAI,aAAa,SAAS,QAAW;AACnC;AAAA,UACE,aAAa;AAAA,UACb,GAAG,IAAI,aAAa,SAAS;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AACA,UAAI,CAAC,MAAM,QAAQ,aAAa,UAAU,GAAG;AAC3C,eAAO,KAAK;AAAA,UACV,MAAM,GAAG,IAAI,aAAa,SAAS;AAAA,UACnC,SAAS;AAAA,QACX,CAAC;AAAA,MACH,OAAO;AACL,qBAAa,WAAW;AAAA,UAAQ,CAAC,WAAW,UAC1C;AAAA,YACE;AAAA,YACA;AAAA,YACA,GAAG,IAAI,aAAa,SAAS,eAAe,KAAK;AAAA,YACjD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,UAAI,aAAa,YAAY,QAAW;AACtC;AAAA,UACE,aAAa;AAAA,UACb,GAAG,IAAI,aAAa,SAAS;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AACA,UAAI,aAAa,eAAe,QAAW;AACzC;AAAA,UACE,aAAa;AAAA,UACb,GAAG,IAAI,aAAa,SAAS;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AACA,UAAI,aAAa,eAAe,QAAW;AACzC;AAAA,UACE,aAAa;AAAA,UACb,GAAG,IAAI,aAAa,SAAS;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AACA,UACE,aAAa,eAAe,UAC5B,OAAO,aAAa,eAAe,WACnC;AACA,eAAO,KAAK;AAAA,UACV,MAAM,GAAG,IAAI,aAAa,SAAS;AAAA,UACnC,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AACA,UAAI,aAAa,aAAa,QAAW;AACvC;AAAA,UACE,aAAa;AAAA,UACb,GAAG,IAAI,aAAa,SAAS;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,cAAc,OAAO,WAAW,GAAG,IAAI,cAAc,MAAM;AAC7E,MAAI,WAAW;AACb,eAAW,CAAC,YAAY,QAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC9D,yBAAmB,YAAY,cAAc,GAAG,IAAI,cAAc,UAAU,IAAI,MAAM;AACtF,YAAM,iBAAiB;AAAA,QACrB;AAAA,QACA,GAAG,IAAI,cAAc,UAAU;AAAA,QAC/B;AAAA,MACF;AACA,UAAI,CAAC,gBAAgB;AACnB;AAAA,MACF;AACA,UAAI,eAAe,aAAa,YAAY;AAC1C,eAAO,KAAK;AAAA,UACV,MAAM,GAAG,IAAI,cAAc,UAAU;AAAA,UACrC,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AACA,qBAAe,eAAe,QAAQ,GAAG,IAAI,cAAc,UAAU,WAAW,MAAM;AACtF,2BAAqB,eAAe,MAAM,GAAG,IAAI,cAAc,UAAU,SAAS,MAAM;AACxF;AAAA,QACE,eAAe;AAAA,QACf,GAAG,IAAI,cAAc,UAAU;AAAA,QAC/B;AAAA,MACF;AACA;AAAA,QACE,eAAe;AAAA,QACf,GAAG,IAAI,cAAc,UAAU;AAAA,QAC/B;AAAA,MACF;AACA,UAAI,eAAe,aAAa,QAAW;AACzC;AAAA,UACE,eAAe;AAAA,UACf,GAAG,IAAI,cAAc,UAAU;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AACA,UAAI,eAAe,eAAe,QAAW;AAC3C;AAAA,UACE,eAAe;AAAA,UACf,GAAG,IAAI,cAAc,UAAU;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AACA,UAAI,eAAe,aAAa,QAAW;AACzC;AAAA,UACE,eAAe;AAAA,UACf,GAAG,IAAI,cAAc,UAAU;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,sBACP,OACA,MACA,QACM;AACN,MAAI,UAAU,UAAU,UAAU,cAAc,UAAU,YAAY;AACpE;AAAA,EACF;AACA,SAAO,KAAK;AAAA,IACV;AAAA,IACA,SAAS;AAAA,EACX,CAAC;AACH;AAEA,SAAS,uBACP,OACA,MACA,QACM;AACN,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,WAAO,KAAK;AAAA,MACV;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AAEA,QAAM,QAAQ,CAAC,OAAO,UAAU;AAC9B,UAAM,SAAS,cAAc,OAAO,GAAG,IAAI,IAAI,KAAK,KAAK,MAAM;AAC/D,QAAI,CAAC,QAAQ;AACX;AAAA,IACF;AACA,iBAAa,OAAO,SAAS,GAAG,IAAI,IAAI,KAAK,aAAa,MAAM;AAChE,iBAAa,OAAO,UAAU,GAAG,IAAI,IAAI,KAAK,cAAc,MAAM;AAClE,2BAAuB,OAAO,MAAM,GAAG,IAAI,IAAI,KAAK,UAAU,MAAM;AACpE,8BAA0B,OAAO,WAAW,GAAG,IAAI,IAAI,KAAK,eAAe,MAAM;AACjF,QAAI,OAAO,aAAa,QAAW;AACjC,mCAA6B,OAAO,UAAU,GAAG,IAAI,IAAI,KAAK,cAAc,MAAM;AAAA,IACpF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,6BACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,aAAW,SAAS;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAY;AACV,QAAI,OAAO,KAAK,MAAM,QAAW;AAC/B,mBAAa,OAAO,KAAK,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,MAAM;AAAA,IACxD;AAAA,EACF;AACF;AAEA,SAAS,0BACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,4BAA0B,OAAO,YAAY,GAAG,IAAI,eAAe,MAAM;AACzE,eAAa,OAAO,YAAY,GAAG,IAAI,eAAe,MAAM;AAC9D;AAEA,SAAS,8BACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,MACE,OAAO,WAAW,UAClB,OAAO,WAAW,aAClB,OAAO,WAAW,UAClB;AACA,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,OAAO,uBAAuB,QAAW;AAC3C,iBAAa,OAAO,oBAAoB,GAAG,IAAI,uBAAuB,MAAM;AAAA,EAC9E;AACA,MAAI,OAAO,eAAe,QAAW;AACnC,iBAAa,OAAO,YAAY,GAAG,IAAI,eAAe,MAAM;AAAA,EAC9D;AACF;AAEA,SAAS,qBACP,OACA,MACA,QACM;AACN,MACE,UAAU,eACV,UAAU,cACV,UAAU,gBACV,UAAU,UACV,UAAU,mBACV;AACA;AAAA,EACF;AACA,SAAO,KAAK;AAAA,IACV;AAAA,IACA,SAAS;AAAA,EACX,CAAC;AACH;AAEA,SAAS,uBACP,OACA,MACA,QACM;AACN,MACE,UAAU,UACV,UAAU,cACV,UAAU,cACV,UAAU,YACV;AACA;AAAA,EACF;AACA,SAAO,KAAK;AAAA,IACV;AAAA,IACA,SAAS;AAAA,EACX,CAAC;AACH;AAEA,SAAS,mBACP,OACA,MACA,QACM;AACN,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,WAAO,KAAK;AAAA,MACV;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AAEA,QAAM;AAAA,IAAQ,CAAC,WAAW,UACxB,mBAAmB,WAAW,aAAa,GAAG,IAAI,IAAI,KAAK,KAAK,MAAM;AAAA,EACxE;AACF;AAEA,SAAS,yBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,MACE,OAAO,WAAW,UAClB,OAAO,WAAW,aAClB,OAAO,WAAW,UAClB;AACA,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,aAAW,SAAS;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAY;AACV,QAAI,OAAO,KAAK,MAAM,QAAW;AAC/B,mBAAa,OAAO,KAAK,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,MAAM;AAAA,IACxD;AAAA,EACF;AAEA,MAAI,OAAO,uBAAuB,QAAW;AAC3C,UAAM,MAAM,cAAc,OAAO,oBAAoB,GAAG,IAAI,uBAAuB,MAAM;AACzF,QAAI,KAAK;AACP,mBAAa,IAAI,QAAQ,GAAG,IAAI,8BAA8B,MAAM;AACpE,mBAAa,IAAI,WAAW,GAAG,IAAI,iCAAiC,MAAM;AAAA,IAC5E;AAAA,EACF;AAEA,MAAI,OAAO,aAAa,QAAW;AACjC,UAAM,KAAK,cAAc,OAAO,UAAU,GAAG,IAAI,aAAa,MAAM;AACpE,QAAI,IAAI;AACN,mBAAa,GAAG,QAAQ,GAAG,IAAI,oBAAoB,MAAM;AACzD,mBAAa,GAAG,WAAW,GAAG,IAAI,uBAAuB,MAAM;AAAA,IACjE;AAAA,EACF;AACF;AAEA,SAAS,0BACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,QAAM,kBAAkB;AAAA,IACtB,OAAO;AAAA,IACP,GAAG,IAAI;AAAA,IACP;AAAA,EACF;AACA,MAAI,iBAAiB;AACnB,eAAW,CAAC,YAAY,QAAQ,KAAK,OAAO,QAAQ,eAAe,GAAG;AACpE,yBAAmB,YAAY,cAAc,GAAG,IAAI,oBAAoB,UAAU,IAAI,MAAM;AAC5F,YAAM,iBAAiB;AAAA,QACrB;AAAA,QACA,GAAG,IAAI,oBAAoB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,UAAI,CAAC,gBAAgB;AACnB;AAAA,MACF;AACA,UAAI,eAAe,eAAe,YAAY;AAC5C,eAAO,KAAK;AAAA,UACV,MAAM,GAAG,IAAI,oBAAoB,UAAU;AAAA,UAC3C,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AACA;AAAA,QACE,eAAe;AAAA,QACf,GAAG,IAAI,oBAAoB,UAAU;AAAA,QACrC;AAAA,MACF;AACA;AAAA,QACE,eAAe;AAAA,QACf;AAAA,QACA,GAAG,IAAI,oBAAoB,UAAU;AAAA,QACrC;AAAA,MACF;AACA,UAAI,eAAe,oBAAoB,QAAW;AAChD;AAAA,UACE,eAAe;AAAA,UACf;AAAA,UACA,GAAG,IAAI,oBAAoB,UAAU;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AACA,UAAI,eAAe,mBAAmB,QAAW;AAC/C;AAAA,UACE,eAAe;AAAA,UACf;AAAA,UACA,GAAG,IAAI,oBAAoB,UAAU;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,cAAc,OAAO,cAAc,GAAG,IAAI,iBAAiB,MAAM;AACtF,MAAI,cAAc;AAChB,eAAW,CAAC,iBAAiB,WAAW,KAAK,OAAO,QAAQ,YAAY,GAAG;AACzE;AAAA,QACE;AAAA,QACA;AAAA,QACA,GAAG,IAAI,iBAAiB,eAAe;AAAA,QACvC;AAAA,MACF;AACA,YAAM,oBAAoB;AAAA,QACxB;AAAA,QACA,GAAG,IAAI,iBAAiB,eAAe;AAAA,QACvC;AAAA,MACF;AACA,UAAI,CAAC,mBAAmB;AACtB;AAAA,MACF;AACA,UAAI,kBAAkB,oBAAoB,iBAAiB;AACzD,eAAO,KAAK;AAAA,UACV,MAAM,GAAG,IAAI,iBAAiB,eAAe;AAAA,UAC7C,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AACA,UAAI,MAAM,QAAQ,kBAAkB,eAAe,GAAG;AACpD,0BAAkB,gBAAgB;AAAA,UAAQ,CAAC,gBAAgB,UACzD;AAAA,YACE;AAAA,YACA;AAAA,YACA,GAAG,IAAI,iBAAiB,eAAe,oBAAoB,KAAK;AAAA,YAChE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,wBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,MAAI,MAAM,QAAQ,OAAO,QAAQ,GAAG;AAClC,WAAO,SAAS,QAAQ,CAAC,SAAS,UAAU;AAC1C,YAAM,gBAAgB,cAAc,SAAS,GAAG,IAAI,aAAa,KAAK,KAAK,MAAM;AACjF,UAAI,CAAC,eAAe;AAClB;AAAA,MACF;AACA;AAAA,QACE,cAAc;AAAA,QACd;AAAA,QACA,GAAG,IAAI,aAAa,KAAK;AAAA,QACzB;AAAA,MACF;AACA;AAAA,QACE,cAAc;AAAA,QACd;AAAA,QACA,GAAG,IAAI,aAAa,KAAK;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,MAAM,QAAQ,OAAO,MAAM,GAAG;AAChC,WAAO,OAAO,QAAQ,CAAC,OAAO,UAAU;AACtC,YAAM,cAAc,cAAc,OAAO,GAAG,IAAI,WAAW,KAAK,KAAK,MAAM;AAC3E,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AACA;AAAA,QACE,YAAY;AAAA,QACZ;AAAA,QACA,GAAG,IAAI,WAAW,KAAK;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,SAAS,eACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,QAAM,OAAO,aAAa,OAAO,MAAM,GAAG,IAAI,SAAS,MAAM;AAC7D,MAAI,CAAC,MAAM;AACT;AAAA,EACF;AAEA,MAAI,SAAS,SAAS;AACpB,kBAAc,OAAO,OAAO,GAAG,IAAI,UAAU,MAAM;AACnD,0BAAsB,OAAO,OAAO,GAAG,IAAI,UAAU,MAAM;AAAA,EAC7D,WAAW,SAAS,QAAQ;AAC1B,QAAI,OAAO,OAAO,OAAO,UAAU;AACjC,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,QAAI,OAAO,UAAU,MAAM,OAAO,UAAU,GAAG;AAC7C,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF,WAAW,SAAS,YAAY;AAC9B,kBAAc,OAAO,gBAAgB,GAAG,IAAI,mBAAmB,MAAM;AACrE,QACE,OAAO,WAAW,aAClB,OAAO,WAAW,kCAClB,OAAO,WAAW,mBAClB;AACA,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF,OAAO;AACL,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,sBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,MAAI,OAAO,UAAU,MAAM,OAAO,UAAU,GAAG;AAC7C,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,OAAO,QAAQ,MAAM,OAAO,QAAQ,GAAG;AACzC,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,2BACP,QACA,QACM;AACN,QAAM,oBAAoB,IAAI;AAAA,IAC5B,OAAO,KAAK,cAAc,cAAc,OAAO,QAAQ,YAAY,CAAC,CAAC,GAAG,YAAY,uBAAuB,CAAC,CAAC,KAAK,CAAC,CAAC;AAAA,EACtH;AACA,QAAM,uBAAuB,IAAI;AAAA,IAC/B,OAAO,KAAK,cAAc,cAAc,OAAO,WAAW,eAAe,CAAC,CAAC,GAAG,WAAW,yBAAyB,CAAC,CAAC,KAAK,CAAC,CAAC;AAAA,EAC7H;AACA,QAAM,uBAAuB,IAAI;AAAA,IAC/B,OAAO,KAAK,cAAc,cAAc,OAAO,WAAW,eAAe,CAAC,CAAC,GAAG,qBAAqB,mCAAmC,CAAC,CAAC,KAAK,CAAC,CAAC;AAAA,EACjJ;AACA,QAAM,WAAW,IAAI;AAAA,IACnB,OAAO,KAAK,cAAc,cAAc,OAAO,OAAO,WAAW,CAAC,CAAC,GAAG,OAAO,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC;AAAA,EACzG;AACA,QAAM,aAAa,IAAI;AAAA,KACpB,MAAM,QAAQ,cAAc,OAAO,aAAa,iBAAiB,CAAC,CAAC,GAAG,QAAQ,IAC1E,cAAc,OAAO,aAAa,iBAAiB,CAAC,CAAC,GAAG,WACzD,CAAC,GACH,QAAQ,CAAC,YAAY,OAAO,QAAQ,cAAc,WAAW,CAAC,QAAQ,SAAS,IAAI,CAAC,CAAC;AAAA,EACzF;AACA,QAAM,cAAc,IAAI;AAAA,IACtB,OAAO,KAAK,cAAc,cAAc,OAAO,cAAc,kBAAkB,CAAC,CAAC,GAAG,iBAAiB,kCAAkC,CAAC,CAAC,KAAK,CAAC,CAAC;AAAA,EAClJ;AACA,QAAM,UAAU,eAAe,MAAM;AAErC,QAAM,qBAAqB;AAAA,IACzB,cAAc,OAAO,WAAW,eAAe,CAAC,CAAC,GAAG;AAAA,IACpD;AAAA,IACA,CAAC;AAAA,EACH;AACA,MAAI,oBAAoB;AACtB,eAAW,CAAC,YAAY,QAAQ,KAAK,OAAO,QAAQ,kBAAkB,GAAG;AACvE,YAAM,iBAAiB,cAAc,UAAU,yBAAyB,UAAU,IAAI,CAAC,CAAC;AACxF,UACE,kBACA,OAAO,eAAe,wBAAwB,YAC9C,CAAC,qBAAqB,IAAI,eAAe,mBAAmB,GAC5D;AACA,eAAO,KAAK;AAAA,UACV,MAAM,yBAAyB,UAAU;AAAA,UACzC,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,iCAA+B,OAAO,SAAS,aAAa,QAAQ;AAAA,IAClE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,4BAA0B,OAAO,UAAU,cAAc,QAAQ;AAAA,IAC/D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,2BAAyB,OAAO,QAAQ,YAAY,QAAQ,UAAU;AACxE;AAEA,SAAS,+BACP,OACA,MACA,QACA,YAQM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,QAAM,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAC7D,MAAI,SAAS,aAAa;AACxB,QACE,OAAO,OAAO,YAAY,YAC1B,CAAC,WAAW,kBAAkB,IAAI,OAAO,OAAO,GAChD;AACA,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,UAAM,YAAY,cAAc,OAAO,WAAW,GAAG,IAAI,cAAc,CAAC,CAAC;AACzE,QACE,aACA,OAAO,UAAU,wBAAwB,YACzC,CAAC,WAAW,qBAAqB,IAAI,UAAU,mBAAmB,GAClE;AACA,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF,WAAW,SAAS,SAAS;AAC3B,QAAI,OAAO,OAAO,YAAY,YAAY,CAAC,WAAW,SAAS,IAAI,OAAO,OAAO,GAAG;AAClF,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF,WAAW,SAAS,mBAAmB,SAAS,gBAAgB;AAC9D,QAAI,OAAO,OAAO,eAAe,YAAY,CAAC,WAAW,YAAY,IAAI,OAAO,UAAU,GAAG;AAC3F,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,QAAI,OAAO,OAAO,cAAc,YAAY,CAAC,WAAW,WAAW,IAAI,OAAO,SAAS,GAAG;AACxF,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF,WAAW,SAAS,gBAAgB;AAClC,QAAI,OAAO,OAAO,WAAW,YAAY,CAAC,WAAW,QAAQ,IAAI,GAAG,OAAO,QAAQ,IAAI,OAAO,MAAM,EAAE,GAAG;AACvG,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI;AAAA,QACb,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,MAAM,QAAQ,OAAO,QAAQ,GAAG;AAClC,WAAO,SAAS;AAAA,MAAQ,CAAC,OAAO,UAC9B,+BAA+B,OAAO,GAAG,IAAI,aAAa,KAAK,KAAK,QAAQ,UAAU;AAAA,IACxF;AAAA,EACF;AACA,MAAI,MAAM,QAAQ,OAAO,IAAI,GAAG;AAC9B,WAAO,KAAK;AAAA,MAAQ,CAAC,KAAK,UACxB,+BAA+B,KAAK,GAAG,IAAI,SAAS,KAAK,KAAK,QAAQ,UAAU;AAAA,IAClF;AAAA,EACF;AACA,MAAI,MAAM,QAAQ,OAAO,KAAK,GAAG;AAC/B,WAAO,MAAM;AAAA,MAAQ,CAAC,MAAM,UAC1B,+BAA+B,MAAM,GAAG,IAAI,UAAU,KAAK,KAAK,QAAQ,UAAU;AAAA,IACpF;AAAA,EACF;AACF;AAEA,SAAS,yBACP,OACA,MACA,QACA,YACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,QAAM,WAAW,cAAc,OAAO,UAAU,GAAG,IAAI,aAAa,CAAC,CAAC;AACtE,MAAI,UAAU;AACZ,eAAW,CAAC,WAAW,MAAM,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAC1D,YAAM,eAAe,cAAc,QAAQ,GAAG,IAAI,aAAa,SAAS,IAAI,CAAC,CAAC;AAC9E,UAAI,CAAC,gBAAgB,CAAC,MAAM,QAAQ,aAAa,UAAU,GAAG;AAC5D;AAAA,MACF;AACA,mBAAa,WAAW,QAAQ,CAAC,WAAW,UAAU;AACpD,YAAI,OAAO,cAAc,YAAY,CAAC,WAAW,IAAI,SAAS,GAAG;AAC/D,iBAAO,KAAK;AAAA,YACV,MAAM,GAAG,IAAI,aAAa,SAAS,eAAe,KAAK;AAAA,YACvD,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,YAAY,cAAc,OAAO,WAAW,GAAG,IAAI,cAAc,CAAC,CAAC;AACzE,MAAI,WAAW;AACb,eAAW,CAAC,YAAY,QAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC9D,YAAM,iBAAiB,cAAc,UAAU,GAAG,IAAI,cAAc,UAAU,IAAI,CAAC,CAAC;AACpF,UAAI,CAAC,kBAAkB,CAAC,MAAM,QAAQ,eAAe,UAAU,GAAG;AAChE;AAAA,MACF;AACA,qBAAe,WAAW,QAAQ,CAAC,WAAW,UAAU;AACtD,YAAI,OAAO,cAAc,YAAY,CAAC,WAAW,IAAI,SAAS,GAAG;AAC/D,iBAAO,KAAK;AAAA,YACV,MAAM,GAAG,IAAI,cAAc,UAAU,eAAe,KAAK;AAAA,YACzD,SAAS;AAAA,UACX,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,0BACP,OACA,MACA,QACA,YAQM;AACN,MAAI,UAAU,QAAW;AACvB;AAAA,EACF;AACA,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,QAAQ,OAAO,OAAO,IAAI,OAAO,UAAU,CAAC;AAClE,UAAQ,QAAQ,CAAC,QAAQ,UAAU;AACjC,UAAM,eAAe,cAAc,QAAQ,GAAG,IAAI,YAAY,KAAK,KAAK,CAAC,CAAC;AAC1E,QAAI,CAAC,gBAAgB,CAAC,MAAM,QAAQ,aAAa,MAAM,GAAG;AACxD;AAAA,IACF;AACA,iBAAa,OAAO;AAAA,MAAQ,CAAC,OAAO,eAClC,+BAA+B,OAAO,GAAG,IAAI,YAAY,KAAK,YAAY,UAAU,KAAK,QAAQ,UAAU;AAAA,IAC7G;AAAA,EACF,CAAC;AAED,QAAM,UAAU,MAAM,QAAQ,OAAO,OAAO,IAAI,OAAO,UAAU,CAAC;AAClE,UAAQ,QAAQ,CAAC,QAAQ,UAAU;AACjC,UAAM,eAAe,cAAc,QAAQ,GAAG,IAAI,YAAY,KAAK,KAAK,CAAC,CAAC;AAC1E,QAAI,CAAC,gBAAgB,CAAC,MAAM,QAAQ,aAAa,MAAM,GAAG;AACxD;AAAA,IACF;AACA,iBAAa,OAAO;AAAA,MAAQ,CAAC,OAAO,eAClC,+BAA+B,OAAO,GAAG,IAAI,YAAY,KAAK,YAAY,UAAU,KAAK,QAAQ,UAAU;AAAA,IAC7G;AAAA,EACF,CAAC;AAED,MAAI,OAAO,uBAAuB,QAAW;AAC3C,UAAM,qBAAqB,cAAc,OAAO,oBAAoB,GAAG,IAAI,uBAAuB,CAAC,CAAC;AACpG,UAAM,YAAY,cAAc,oBAAoB,WAAW,GAAG,IAAI,iCAAiC,CAAC,CAAC;AACzG,QAAI,WAAW;AACb,iBAAW,CAAC,QAAQ,IAAI,KAAK,OAAO,QAAQ,SAAS,GAAG;AACtD,cAAM,aAAa,cAAc,MAAM,GAAG,IAAI,iCAAiC,MAAM,IAAI,CAAC,CAAC;AAC3F,YAAI,CAAC,cAAc,CAAC,MAAM,QAAQ,WAAW,MAAM,GAAG;AACpD;AAAA,QACF;AACA,mBAAW,OAAO;AAAA,UAAQ,CAAC,OAAO,eAChC;AAAA,YACE;AAAA,YACA,GAAG,IAAI,iCAAiC,MAAM,WAAW,UAAU;AAAA,YACnE;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,cAAc,oBAAoB,UAAU,GAAG,IAAI,gCAAgC,CAAC,CAAC;AACtG,QAAI,UAAU;AACZ,iBAAW,CAAC,QAAQ,IAAI,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACrD,cAAM,aAAa,cAAc,MAAM,GAAG,IAAI,gCAAgC,MAAM,IAAI,CAAC,CAAC;AAC1F,YAAI,CAAC,cAAc,CAAC,MAAM,QAAQ,WAAW,MAAM,GAAG;AACpD;AAAA,QACF;AACA,mBAAW,OAAO;AAAA,UAAQ,CAAC,OAAO,eAChC;AAAA,YACE;AAAA,YACA,GAAG,IAAI,gCAAgC,MAAM,WAAW,UAAU;AAAA,YAClE;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,eAAe,QAA8C;AACpE,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,WAAW,cAAc,OAAO,UAAU,cAAc,CAAC,CAAC;AAChE,QAAM,qBAAqB,cAAc,UAAU,oBAAoB,iCAAiC,CAAC,CAAC;AAC1G,QAAM,YAAY,cAAc,oBAAoB,WAAW,2CAA2C,CAAC,CAAC;AAC5G,MAAI,WAAW;AACb,WAAO,KAAK,SAAS,EAAE,QAAQ,CAAC,WAAW,QAAQ,IAAI,YAAY,MAAM,EAAE,CAAC;AAAA,EAC9E;AACA,QAAM,WAAW,cAAc,oBAAoB,UAAU,0CAA0C,CAAC,CAAC;AACzG,MAAI,UAAU;AACZ,WAAO,KAAK,QAAQ,EAAE,QAAQ,CAAC,WAAW,QAAQ,IAAI,WAAW,MAAM,EAAE,CAAC;AAAA,EAC5E;AACA,SAAO;AACT;AAEA,SAAS,cACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,MAAI,OAAO,OAAO,SAAS,YAAY,OAAO,OAAO,OAAO,UAAU;AACpE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,wBACP,QACA,cACA,MACA,QACA,qBACM;AACN,QAAM,aAAa,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC;AAC9C,QAAM,WAAW,IAAI,IAAI,YAAY;AACrC,QAAM,WAAW,IAAI,IAAI,uBAAuB,CAAC,CAAC;AAElD,aAAW,eAAe,cAAc;AACtC,QAAI,CAAC,WAAW,IAAI,WAAW,GAAG;AAChC,aAAO,KAAK;AAAA,QACV;AAAA,QACA,SAAS,wBAAwB,KAAK,UAAU,WAAW,CAAC;AAAA,MAC9D,CAAC;AAAA,IACH;AAAA,EACF;AAEA,aAAW,aAAa,YAAY;AAClC,QAAI,CAAC,SAAS,IAAI,SAAS,KAAK,CAAC,SAAS,IAAI,SAAS,GAAG;AACxD,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI,IAAI,SAAS;AAAA,QAC1B,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,wBACP,OACA,MACA,QACM;AACN,MAAI,UAAU,QAAW;AACvB;AAAA,EACF;AACA,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,MAAI,OAAO,YAAY,QAAW;AAChC,QAAI,CAAC,MAAM,QAAQ,OAAO,OAAO,GAAG;AAClC,aAAO,KAAK,EAAE,MAAM,GAAG,IAAI,YAAY,SAAS,4BAA4B,CAAC;AAAA,IAC/E,OAAO;AACL,aAAO,QAAQ,QAAQ,CAAC,QAAQ,UAAU;AACxC,cAAM,eAAe,cAAc,QAAQ,GAAG,IAAI,YAAY,KAAK,KAAK,MAAM;AAC9E,YAAI,cAAc;AAChB,uBAAa,aAAa,SAAS,GAAG,IAAI,YAAY,KAAK,aAAa,MAAM;AAC9E,uBAAa,aAAa,UAAU,GAAG,IAAI,YAAY,KAAK,cAAc,MAAM;AAChF,uBAAa,aAAa,gBAAgB,GAAG,IAAI,YAAY,KAAK,oBAAoB,MAAM;AAC5F,cAAI,CAAC,MAAM,QAAQ,aAAa,MAAM,GAAG;AACvC,mBAAO,KAAK,EAAE,MAAM,GAAG,IAAI,YAAY,KAAK,YAAY,SAAS,2BAA2B,CAAC;AAAA,UAC/F,OAAO;AACL,yBAAa,OAAO;AAAA,cAAQ,CAAC,OAAO,eAClC,qBAAqB,OAAO,GAAG,IAAI,YAAY,KAAK,YAAY,UAAU,KAAK,MAAM;AAAA,YACvF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,OAAO,YAAY,QAAW;AAChC,QAAI,CAAC,MAAM,QAAQ,OAAO,OAAO,GAAG;AAClC,aAAO,KAAK,EAAE,MAAM,GAAG,IAAI,YAAY,SAAS,4BAA4B,CAAC;AAAA,IAC/E,OAAO;AACL,aAAO,QAAQ,QAAQ,CAAC,QAAQ,UAAU;AACxC,cAAM,eAAe,cAAc,QAAQ,GAAG,IAAI,YAAY,KAAK,KAAK,MAAM;AAC9E,YAAI,cAAc;AAChB,uBAAa,aAAa,SAAS,GAAG,IAAI,YAAY,KAAK,aAAa,MAAM;AAC9E,uBAAa,aAAa,UAAU,GAAG,IAAI,YAAY,KAAK,cAAc,MAAM;AAChF,uBAAa,aAAa,gBAAgB,GAAG,IAAI,YAAY,KAAK,oBAAoB,MAAM;AAC5F,cAAI,CAAC,MAAM,QAAQ,aAAa,MAAM,GAAG;AACvC,mBAAO,KAAK,EAAE,MAAM,GAAG,IAAI,YAAY,KAAK,YAAY,SAAS,2BAA2B,CAAC;AAAA,UAC/F,OAAO;AACL,yBAAa,OAAO;AAAA,cAAQ,CAAC,OAAO,eAClC,qBAAqB,OAAO,GAAG,IAAI,YAAY,KAAK,YAAY,UAAU,KAAK,MAAM;AAAA,YACvF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,OAAO,uBAAuB,QAAW;AAC3C,UAAM,qBAAqB,cAAc,OAAO,oBAAoB,GAAG,IAAI,uBAAuB,MAAM;AACxG,QAAI,oBAAoB;AACtB,6BAAuB,mBAAmB,WAAW,YAAY,GAAG,IAAI,iCAAiC,MAAM;AAC/G,6BAAuB,mBAAmB,UAAU,WAAW,GAAG,IAAI,gCAAgC,MAAM;AAAA,IAC9G;AAAA,EACF;AACF;AAEA,SAAS,uBACP,OACA,cACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,aAAW,CAAC,QAAQ,IAAI,KAAK,OAAO,QAAQ,MAAM,GAAG;AACnD,UAAM,aAAa,cAAc,MAAM,GAAG,IAAI,IAAI,MAAM,IAAI,MAAM;AAClE,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AACA,iBAAa,WAAW,QAAQ,GAAG,IAAI,IAAI,MAAM,WAAW,MAAM;AAClE,QAAI,WAAW,WAAW,QAAQ;AAChC,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI,IAAI,MAAM;AAAA,QACvB,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,QAAI,WAAW,SAAS,cAAc;AACpC,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI,IAAI,MAAM;AAAA,QACvB,SAAS,gBAAgB,YAAY;AAAA,MACvC,CAAC;AAAA,IACH;AACA,QAAI,CAAC,MAAM,QAAQ,WAAW,MAAM,GAAG;AACrC,aAAO,KAAK,EAAE,MAAM,GAAG,IAAI,IAAI,MAAM,WAAW,SAAS,2BAA2B,CAAC;AAAA,IACvF,OAAO;AACL,iBAAW,OAAO;AAAA,QAAQ,CAAC,OAAO,eAChC,qBAAqB,OAAO,GAAG,IAAI,IAAI,MAAM,WAAW,UAAU,KAAK,MAAM;AAAA,MAC/E;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,mBACP,OACA,QACA,MACA,QACe;AACf,QAAM,WAAW,aAAa,OAAO,MAAM,MAAM;AACjD,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,YAAY,MAAM,EAAE,KAAK,QAAQ,GAAG;AACvC,WAAO,KAAK;AAAA,MACV;AAAA,MACA,SAAS,oBAAoB,MAAM;AAAA,IACrC,CAAC;AACD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;;;ACn9EA,IAAM,mCAAmC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,mCAAmC,CAAC,iBAAiB,oBAAoB;AAqB/E,IAAM,qCAAqC,oBAAI,IAAoC;AAAA,EACjF;AAAA,EACA;AACF,CAAC;AAED,IAAM,gCACJ;AACF,IAAM,gCAAgC,oBAAI,IAA+B;AAAA,EACvE;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,uBAAuB,oBAAI,IAAuB;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,4BAA4B,oBAAI,IAA+B,CAAC,QAAQ,SAAS,CAAC;AACxF,IAAM,yBAAyB,oBAAI,IAA6B;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,qBAAqB,oBAAI,IAAqB;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,uBAAuB,oBAAI,IAA2B;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAiBM,SAAS,8BACd,UAC6C;AAC7C,QAAM,SAAS,gCAAgC,QAAQ;AACvD,cAAY,QAAQ,oCAAoC;AAC1D;AAEO,SAAS,gCACd,UACwB;AACxB,QAAM,SAAiC,CAAC;AACxC,QAAM,SAAS,cAAc,UAAU,KAAK,MAAM;AAClD,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,EAAAC;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,0BAAwB,OAAO,iBAAiB,qBAAqB,MAAM;AAC3E;AAAA,IACE,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,eAAa,OAAO,YAAY,gBAAgB,MAAM;AACtD,eAAa,OAAO,OAAO,WAAW,MAAM;AAC5C,4BAA0B,OAAO,WAAW,eAAe,MAAM;AACjE,4BAA0B,OAAO,WAAW,eAAe,MAAM;AACjE,4BAA0B,OAAO,SAAS,aAAa,MAAM;AAC7D,eAAa,OAAO,aAAa,iBAAiB,MAAM;AAExD,QAAM,0BAA0B,0BAA0B,OAAO,iBAAiB;AAClF,SAAO,KAAK,GAAG,wBAAwB,IAAI,YAAY,qBAAqB,CAAC,CAAC;AAE9E,MACE,cAAc,OAAO,mBAAmB,uBAAuB,CAAC,CAAC,GAAG,UACpE,OAAO,OACP;AACA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,8BAA4B,OAAO,eAAe,mBAAmB,MAAM;AAE3E,MAAI,CAAC,MAAM,QAAQ,OAAO,UAAU,GAAG;AACrC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH,OAAO;AACL,WAAO,WAAW,QAAQ,CAAC,SAAS,UAAU;AAC5C,4BAAsB,SAAS,gBAAgB,KAAK,KAAK,MAAM;AAAA,IACjE,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,kBAAkB,QAAW;AACtC,mCAA+B,OAAO,eAAe,mBAAmB,MAAM;AAAA,EAChF;AACA,MAAI,OAAO,uBAAuB,QAAW;AAC3C,+BAA2B,OAAO,oBAAoB,wBAAwB,MAAM;AAAA,EACtF;AAEA,SAAO;AACT;AAEO,SAAS,0BACd,QACuC;AACvC,QAAM,SAAS,4BAA4B,MAAM;AACjD,cAAY,QAAQ,+BAA+B;AACrD;AAEO,SAAS,4BACd,QACA,OAAO,KACP,SAAiC,CAAC,GACV;AACxB,QAAM,SAAS,cAAc,QAAQ,MAAM,MAAM;AACjD,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA;AAAA,IACE,OAAO;AAAA,IACP;AAAA,IACA,GAAG,IAAI;AAAA,IACP;AAAA,EACF;AACA,4BAA0B,OAAO,aAAa,GAAG,IAAI,gBAAgB,MAAM;AAE3E,MAAI,OAAO,OAAO,gBAAgB,WAAW;AAC3C,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,MAAM,QAAQ,OAAO,cAAc,GAAG;AACzC,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH,OAAO;AACL,WAAO,eAAe,QAAQ,CAAC,cAAc,UAAU;AACrD;AAAA,QACE;AAAA,QACA,GAAG,IAAI,mBAAmB,KAAK;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG;AACnC,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH,OAAO;AACL,WAAO,SAAS,QAAQ,CAAC,SAAS,UAAU;AAC1C,4BAAsB,SAAS,GAAG,IAAI,aAAa,KAAK,KAAK,MAAM;AAAA,IACrE,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,MAAM,QAAQ,OAAO,MAAM,GAAG;AACjC,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH,OAAO;AACL,WAAO,OAAO,QAAQ,CAAC,OAAO,UAAU;AACtC,0BAAoB,OAAO,GAAG,IAAI,WAAW,KAAK,KAAK,MAAM;AAAA,IAC/D,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,kCACP,cACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,cAAc,MAAM,MAAM;AACvD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,eAAa,OAAO,gBAAgB,GAAG,IAAI,mBAAmB,MAAM;AACpE,eAAa,OAAO,YAAY,GAAG,IAAI,eAAe,MAAM;AAC5D,MACE,OAAO,OAAO,iBAAiB,YAC/B,CAAC,8BAA8B,IAAI,OAAO,YAAyC,GACnF;AACA,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,eAAa,OAAO,SAAS,GAAG,IAAI,YAAY,MAAM;AACxD;AAEA,SAAS,sBACP,SACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,SAAS,MAAM,MAAM;AAClD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,eAAa,OAAO,WAAW,GAAG,IAAI,cAAc,MAAM;AAC1D,MAAI,OAAO,OAAO,SAAS,YAAY,CAAC,qBAAqB,IAAI,OAAO,IAAyB,GAAG;AAClG,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS,uBAAuB,KAAK,UAAU,CAAC,GAAG,oBAAoB,CAAC,CAAC;AAAA,IAC3E,CAAC;AAAA,EACH;AACA,MACE,OAAO,OAAO,aAAa,YAC3B,CAAC,0BAA0B,IAAI,OAAO,QAAqC,GAC3E;AACA,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,eAAa,OAAO,SAAS,GAAG,IAAI,YAAY,MAAM;AACtD,MACE,OAAO,OAAO,WAAW,YACzB,CAAC,uBAAuB,IAAI,OAAO,MAAiC,GACpE;AACA,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS,yBAAyB,KAAK,UAAU,CAAC,GAAG,sBAAsB,CAAC,CAAC;AAAA,IAC/E,CAAC;AAAA,EACH;AACF;AAEA,SAAS,oBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,eAAa,OAAO,SAAS,GAAG,IAAI,YAAY,MAAM;AACtD,MAAI,OAAO,OAAO,SAAS,YAAY,CAAC,mBAAmB,IAAI,OAAO,IAAuB,GAAG;AAC9F,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS,uBAAuB,KAAK,UAAU,CAAC,GAAG,kBAAkB,CAAC,CAAC;AAAA,IACzE,CAAC;AAAA,EACH;AACA,eAAa,OAAO,SAAS,GAAG,IAAI,YAAY,MAAM;AACtD,MACE,OAAO,OAAO,WAAW,YACzB,CAAC,qBAAqB,IAAI,OAAO,MAA+B,GAChE;AACA,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS,yBAAyB,KAAK,UAAU,CAAC,GAAG,oBAAoB,CAAC,CAAC;AAAA,IAC7E,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,OAAO,YAAY,WAAW;AACvC,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAASA,yBACP,QACA,cACA,cACA,MACA,QACM;AACN,QAAM,aAAa,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC;AAC9C,QAAM,cAAc,oBAAI,IAAI,CAAC,GAAG,cAAc,GAAG,YAAY,CAAC;AAE9D,aAAW,eAAe,cAAc;AACtC,QAAI,CAAC,WAAW,IAAI,WAAW,GAAG;AAChC,aAAO,KAAK;AAAA,QACV;AAAA,QACA,SAAS,wBAAwB,KAAK,UAAU,WAAW,CAAC;AAAA,MAC9D,CAAC;AAAA,IACH;AAAA,EACF;AAEA,aAAW,aAAa,YAAY;AAClC,QAAI,CAAC,YAAY,IAAI,SAAS,GAAG;AAC/B,aAAO,KAAK;AAAA,QACV,MAAM,GAAG,IAAI,IAAI,SAAS;AAAA,QAC1B,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,YAAY,UAAkB;AACrC,SAAO,CAAC,WAAuD;AAAA,IAC7D,MAAM,GAAG,QAAQ,GAAG,MAAM,SAAS,MAAM,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC;AAAA,IACjE,SAAS,MAAM;AAAA,EACjB;AACF;AAEA,SAAS,wBACP,OACA,MACA,QACuC;AACvC,MAAI,OAAO,UAAU,YAAY,CAAC,mCAAmC,IAAI,KAAc,GAAG;AACxF,WAAO,KAAK;AAAA,MACV;AAAA,MACA,SAAS,mBAAmB,KAAK,UAAU,CAAC,GAAG,kCAAkC,CAAC,CAAC;AAAA,IACrF,CAAC;AACD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,+BACP,eACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,eAAe,MAAM,MAAM;AACxD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,EAAAA;AAAA,IACE;AAAA,IACA,CAAC,UAAU,WAAW,YAAY,aAAa,aAAa;AAAA,IAC5D,CAAC,aAAa;AAAA,IACd;AAAA,IACA;AAAA,EACF;AACA,oBAAkB,OAAO,QAAQ,QAAQ,GAAG,IAAI,WAAW,MAAM;AACjE,oBAAkB,OAAO,SAAS,mBAAmB,GAAG,IAAI,YAAY,MAAM;AAC9E;AAAA,IACE,OAAO;AAAA,IACP;AAAA,IACA,GAAG,IAAI;AAAA,IACP;AAAA,EACF;AACA,eAAa,OAAO,WAAW,GAAG,IAAI,cAAc,MAAM;AAC1D,eAAa,OAAO,aAAa,GAAG,IAAI,gBAAgB,MAAM;AAE9D,MACE,OAAO,OAAO,cAAc,YAC5B,CAAC,kBAAkB,KAAK,OAAO,SAAS,GACxC;AACA,WAAO,KAAK;AAAA,MACV,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,gBAAgB,QAAW;AACpC,iBAAa,OAAO,aAAa,GAAG,IAAI,gBAAgB,MAAM;AAAA,EAChE;AACF;AAEO,SAAS,8BAA8B,QASlB;AAC1B,0BAAwB,OAAO,iBAAiB;AAChD,4BAA0B,OAAO,aAAa;AAE9C,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,YAAY,OAAO;AAAA,IACnB,OAAO,OAAO,kBAAkB;AAAA,IAChC,WAAW,OAAO,kBAAkB;AAAA,IACpC,WAAW,OAAO,kBAAkB;AAAA,IACpC,SAAS,OAAO;AAAA,IAChB,aAAa,OAAO;AAAA,IACpB,mBAAmB,OAAO;AAAA,IAC1B,eAAe,OAAO;AAAA,IACtB,YAAY,OAAO,cAAc,OAAO,cAAc;AAAA,IACtD,oBAAoB,OAAO;AAAA,IAC3B,eAAe,OAAO;AAAA,EACxB;AACF;AAEA,SAAS,2BACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AACA,MAAI,OAAO,OAAO,0BAA0B,WAAW;AACrD,WAAO,KAAK,EAAE,MAAM,GAAG,IAAI,0BAA0B,SAAS,2CAA2C,CAAC;AAAA,EAC5G;AACA,MAAI,OAAO,aAAa,QAAW;AACjC,iBAAa,OAAO,UAAU,GAAG,IAAI,aAAa,MAAM;AAAA,EAC1D;AACA,MAAI,OAAO,OAAO,sBAAsB,WAAW;AACjD,WAAO,KAAK,EAAE,MAAM,GAAG,IAAI,sBAAsB,SAAS,uCAAuC,CAAC;AAAA,EACpG;AACA,MAAI,CAAC,MAAM,QAAQ,OAAO,MAAM,GAAG;AACjC,WAAO,KAAK,EAAE,MAAM,GAAG,IAAI,WAAW,SAAS,2BAA2B,CAAC;AAAA,EAC7E,OAAO;AACL,WAAO,OAAO,QAAQ,CAAC,OAAO,UAAU,wBAAwB,OAAO,GAAG,IAAI,WAAW,KAAK,KAAK,MAAM,CAAC;AAAA,EAC5G;AACA,MAAI,CAAC,OAAO,UAAU,OAAO,kBAAkB,GAAG;AAChD,WAAO,KAAK,EAAE,MAAM,GAAG,IAAI,uBAAuB,SAAS,yCAAyC,CAAC;AAAA,EACvG;AACA,MAAI,CAAC,OAAO,UAAU,OAAO,mBAAmB,GAAG;AACjD,WAAO,KAAK,EAAE,MAAM,GAAG,IAAI,wBAAwB,SAAS,0CAA0C,CAAC;AAAA,EACzG;AACF;AAEA,SAAS,wBACP,OACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,OAAO,MAAM,MAAM;AAChD,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AACA,eAAa,OAAO,SAAS,GAAG,IAAI,YAAY,MAAM;AACtD,MAAI,OAAO,UAAU,UAAa,CAAC,OAAO,UAAU,OAAO,KAAK,GAAG;AACjE,WAAO,KAAK,EAAE,MAAM,GAAG,IAAI,UAAU,SAAS,4BAA4B,CAAC;AAAA,EAC7E;AACA,MAAI,OAAO,QAAQ,UAAa,CAAC,OAAO,UAAU,OAAO,GAAG,GAAG;AAC7D,WAAO,KAAK,EAAE,MAAM,GAAG,IAAI,QAAQ,SAAS,0BAA0B,CAAC;AAAA,EACzE;AACA,MAAI,OAAO,gBAAgB,QAAW;AACpC,iBAAa,OAAO,aAAa,GAAG,IAAI,gBAAgB,MAAM;AAAA,EAChE;AACA,MAAI,OAAO,WAAW,QAAW;AAC/B,iBAAa,OAAO,QAAQ,GAAG,IAAI,WAAW,MAAM;AAAA,EACtD;AACA,MAAI,OAAO,OAAO,aAAa,WAAW;AACxC,WAAO,KAAK,EAAE,MAAM,GAAG,IAAI,aAAa,SAAS,8BAA8B,CAAC;AAAA,EAClF;AACA,eAAa,OAAO,mBAAmB,GAAG,IAAI,sBAAsB,MAAM;AAC5E;;;AJpbO,SAAS,yBAAsC;AACpD,SAAO;AAAA,IACL,UAAU,CAAC;AAAA,IACX,WAAW,CAAC;AAAA,EACd;AACF;AAEO,SAAS,+BACd,YACA,WAC2B;AAC3B,SAAO;AAAA,IACL,eAAe;AAAA,IACf,OAAO,0BAA0B,UAAU;AAAA,IAC3C,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,MACR,kBAAkB,CAAC;AAAA,IACrB;AAAA,IACA,QAAQ;AAAA,MACN,YAAY,CAAC;AAAA,MACb,YAAY,CAAC;AAAA,MACb,QAAQ,CAAC;AAAA,IACX;AAAA,IACA,WAAW;AAAA,MACT,qBAAqB,CAAC;AAAA,MACtB,WAAW,CAAC;AAAA,IACd;AAAA,IACA,OAAO;AAAA,MACL,OAAO,CAAC;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU,CAAC,EAAE,MAAM,aAAa,UAAU,CAAC,EAAE,CAAC;AAAA,IAChD;AAAA,IACA,QAAQ,uBAAuB;AAAA,IAC/B,cAAc;AAAA,MACZ,iBAAiB,CAAC;AAAA,MAClB,cAAc,CAAC;AAAA,IACjB;AAAA,IACA,aAAa;AAAA,MACX,UAAU,CAAC;AAAA,MACX,QAAQ,CAAC;AAAA,IACX;AAAA,EACF;AACF;AAEO,SAAS,wBAAwB,SAAS,GAAG,OAAO,QAA2B;AACpF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,aAAa,WAAW;AAAA,IACxB,aAAa,kBAAkB,QAAQ,MAAM,sBAAsB;AAAA,EACrE;AACF;AAEO,SAAS,+BAA+B,aAA0C;AACvF,SAAO;AAAA,IACL,eAAe;AAAA,IACf;AAAA,IACA,aAAa;AAAA,IACb,gBAAgB,CAAC;AAAA,IACjB,UAAU,CAAC;AAAA,IACX,QAAQ,CAAC;AAAA,EACX;AACF;AAEO,SAAS,kBAAkB,SAAgD;AAChF,QAAM,aAAY,oBAAI,KAAK,CAAC,GAAE,YAAY;AAC1C,QAAM,qBAAqB,QAAQ,oBAC/B,qCAAqC,QAAQ,mBAAmB,QAAQ,YAAY,SAAS,IAC7F;AACJ,MAAI,QAAQ,mBAAmB;AAC7B,4BAAwB,QAAQ,iBAA4B;AAAA,EAC9D;AAEA,QAAM,qBAAqB,qBACvB,gBAAgB,mBAAmB,iBAAiB,IACpD,QAAQ,oBACN,gBAAgB,QAAQ,iBAAiB,IACzC,+BAA+B,QAAQ,YAAY,SAAS;AAClE,QAAM,WAAW,qBACb,oBAAoB,mBAAmB,UAAU,IACjD,QAAQ,YAAY,CAAC;AACzB,QAAM,gBACJ,qBACI,6BAA6B,mBAAmB,aAAa,IAC7D,QAAQ,iBAAiB,+BAA+B,mBAAmB,SAAS;AAE1F,SAAO;AAAA,IACL,OAAO,QAAQ,aAAa,UAAU;AAAA,IACtC,YAAY,QAAQ;AAAA,IACpB,WAAW,QAAQ;AAAA,IACnB,aAAa,QAAQ;AAAA,IACrB,eAAe,oBAAoB;AAAA,IACnC,UAAU;AAAA,IACV,eAAe,GAAG,QAAQ,SAAS;AAAA,IACnC,SAAS;AAAA,IACT,UAAU,QAAQ,YAAY;AAAA,IAC9B,UAAU;AAAA,IACV,WAAW,wBAAwB;AAAA,IACnC;AAAA,IACA;AAAA,IACA,YAAY,QAAQ;AAAA,IACpB,SAAS;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,EACF;AACF;AAEA,SAAS,qCACP,UACA,YACA,WACyB;AACzB,QAAM,SAAS,gCAAqC,QAAmB;AACvE,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,SAAS,QAAQ,KAAK,CAAC,SAAS,SAAS,iBAAiB,GAAG;AAChE,kCAAmC,QAAmB;AAAA,EACxD;AAEA,QAAM,qBAAqB;AAAA,IACzB,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACF;AACA,MAAI;AACF,4BAAwB,kBAA6B;AAAA,EACvD,QAAQ;AACN,kCAAmC,QAAmB;AAAA,EACxD;AACA,QAAM,gBAAgB,4BAA4B,OAAO,MAAM;AAC/D,QAAM,gBAAgB;AAAA,IACpB,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,iBACE,SAAS,oBAAoB,iCAC7B,SAAS,oBAAoB,gCACzB,SAAS,kBACT;AAAA,IACN,eAAe;AAAA,IACf,YACE,OAAO,SAAS,eAAe,YAAY,SAAS,WAAW,SAAS,IACpE,SAAS,aACT;AAAA,IACN,OAAO,mBAAmB;AAAA,IAC1B,WAAW,mBAAmB;AAAA,IAC9B,WAAW,mBAAmB;AAAA,IAC9B,SACE,OAAO,SAAS,YAAY,YAAY,SAAS,QAAQ,SAAS,IAC9D,SAAS,UACT,mBAAmB;AAAA,IACzB,aACE,OAAO,SAAS,gBAAgB,YAAY,SAAS,YAAY,SAAS,IACtE,SAAS,cACT;AAAA,IACN,mBAAmB;AAAA,IACnB;AAAA,IACA,YAAY,eAAe;AAAA,MACzB,GAAG,eAAe,SAAS,UAAU;AAAA,MACrC;AAAA,IACF,CAAC;AAAA,IACD,eAAe,SAAS;AAAA,EAC1B;AACF;AAEA,SAAS,mCACP,OACA,YACA,WAC2B;AAC3B,QAAM,OAAO,+BAA+B,YAAY,SAAS;AACjE,QAAM,SAAS,SAAS,KAAK,IAAI,QAAQ,CAAC;AAC1C,QAAM,WAAW,SAAS,OAAO,QAAQ,IAAI,OAAO,WAAW,CAAC;AAEhE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,eAAe;AAAA,IACf,OAAO,OAAO,OAAO,KAAK,IAAI,OAAO,QAAQ,0BAA0B,UAAU;AAAA,IACjF,WACE,OAAO,OAAO,cAAc,YAAY,OAAO,UAAU,SAAS,IAC9D,OAAO,YACP,KAAK;AAAA,IACX,WACE,OAAO,OAAO,cAAc,YAAY,OAAO,UAAU,SAAS,IAC9D,OAAO,YACP,KAAK;AAAA,IACX,UAAU;AAAA,MACR,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,MACH,kBAAkB,SAAS,SAAS,gBAAgB,IAC/C,OAAO;AAAA,QACN,OAAO,QAAQ,SAAS,gBAAgB,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,OAAO,UAAU,QAAQ;AAAA,MAC3F,IACA,CAAC;AAAA,IACP;AAAA,IACA,QACE,OAAO,WAAW,SACd,KAAK,SACJ,OAAO;AAAA,IACd,WACE,OAAO,cAAc,SACjB,KAAK,YACJ,OAAO;AAAA,IACd,OACE,OAAO,UAAU,SACb,KAAK,QACJ,OAAO;AAAA,IACd,SAAS,SAAS,OAAO,OAAO,IAC3B,OAAO,UACR,KAAK;AAAA,IACT,QACE,OAAO,WAAW,SACd,KAAK,SACJ,OAAO;AAAA,IACd,cACE,OAAO,iBAAiB,SACpB,KAAK,eACJ,OAAO;AAAA,IACd,aACE,OAAO,gBAAgB,SACnB,KAAK,cACJ,OAAO;AAAA,IACd,GAAI,SAAS,OAAO,QAAQ,IACxB,EAAE,UAAU,OAAO,SAA6D,IAChF,CAAC;AAAA,EACP;AACF;AAEA,SAAS,0BACP,OACA,aACA,eACqB;AACrB,QAAM,SAAS,SAAS,KAAK,IAAI,QAAQ,CAAC;AAC1C,QAAM,WAAW,eAAe;AAAA,IAC9B,GAAG,eAAe,OAAO,QAAQ;AAAA,IACjC;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,eAAe;AAAA,IACf,aACE,OAAO,OAAO,gBAAgB,YAAY,OAAO,YAAY,SAAS,IAClE,OAAO,cACP;AAAA,IACN,aAAa,OAAO,OAAO,gBAAgB,YAAY,OAAO,cAAc;AAAA,IAC5E,gBAAgB,MAAM,QAAQ,OAAO,cAAc,IAC/C,OAAO,eAAe,QAAQ,CAAC,UAAU;AACvC,UAAI,CAAC,SAAS,KAAK,GAAG;AACpB,eAAO,CAAC;AAAA,MACV;AACA,UACE,OAAO,MAAM,mBAAmB,YAChC,OAAO,MAAM,eAAe,YAC5B,OAAO,MAAM,iBAAiB,YAC9B,OAAO,MAAM,YAAY,UACzB;AACA,eAAO,CAAC;AAAA,MACV;AACA,aAAO,CAAC;AAAA,QACN,gBAAgB,MAAM;AAAA,QACtB,YAAY,MAAM;AAAA,QAClB,cAAc,MAAM;AAAA,QACpB,SAAS,MAAM;AAAA,QACf,GAAI,MAAM,kBAAkB,SAAS,MAAM,cAAc,IACrD,EAAE,gBAAgB,MAAM,eAAoD,IAC5E,CAAC;AAAA,QACL,GAAI,SAAS,MAAM,OAAO,IAAI,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,MAC9D,CAAC;AAAA,IACH,CAAC,IACD,CAAC;AAAA,IACL;AAAA,IACA,QAAQ,MAAM,QAAQ,OAAO,MAAM,IAC/B,OAAO,OAAO,QAAQ,CAAC,UAAU;AAC/B,UAAI,CAAC,SAAS,KAAK,GAAG;AACpB,eAAO,CAAC;AAAA,MACV;AACA,UACE,OAAO,MAAM,YAAY,YACzB,OAAO,MAAM,SAAS,YACtB,OAAO,MAAM,YAAY,YACzB,OAAO,MAAM,WAAW,YACxB,OAAO,MAAM,YAAY,WACzB;AACA,eAAO,CAAC;AAAA,MACV;AACA,aAAO,CAAC;AAAA,QACN,SAAS,MAAM;AAAA,QACf,MAAM,MAAM;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,QAAQ,MAAM;AAAA,QACd,SAAS,MAAM;AAAA,QACf,GAAI,SAAS,MAAM,OAAO,IAAI,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,MAC9D,CAAC;AAAA,IACH,CAAC,IACD,CAAC;AAAA,EACP;AACF;AAEA,SAAS,eAAe,OAAiC;AACvD,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,MAAM,QAAQ,CAAC,YAAY;AAChC,QAAI,CAAC,SAAS,OAAO,GAAG;AACtB,aAAO,CAAC;AAAA,IACV;AACA,QACE,OAAO,QAAQ,cAAc,YAC7B,OAAO,QAAQ,SAAS,YACxB,OAAO,QAAQ,aAAa,YAC5B,OAAO,QAAQ,YAAY,YAC3B,OAAO,QAAQ,WAAW,UAC1B;AACA,aAAO,CAAC;AAAA,IACV;AAEA,WAAO,CAAC;AAAA,MACN,WAAW,QAAQ;AAAA,MACnB,MAAM,QAAQ;AAAA,MACd,UAAU,QAAQ;AAAA,MAClB,SAAS,QAAQ;AAAA,MACjB,QAAQ,QAAQ;AAAA,MAChB,GAAI,QAAQ,kBAAkB,SAAS,QAAQ,cAAc,IACzD,EAAE,gBAAgB,QAAQ,eAAoD,IAC9E,CAAC;AAAA,MACL,GAAI,OAAO,QAAQ,mBAAmB,WAClC,EAAE,gBAAgB,QAAQ,eAAe,IACzC,CAAC;AAAA,MACL,GAAI,SAAS,QAAQ,OAAO,IAAI,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,IAClE,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS,4BAA4B,YAAmC;AACtE,SAAO;AAAA,IACL,WAAW,2BAA2B,UAAU;AAAA,IAChD,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS,+CAA+C,UAAU,oBAAoB,eAAe,IAAI,KAAK,GAAG;AAAA,IACjH,QAAQ;AAAA,EACV;AACF;AAEA,SAAS,eAAe,UAA4C;AAClE,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,SAA0B,CAAC;AAEjC,aAAW,WAAW,UAAU;AAC9B,QAAI,CAAC,QAAQ,aAAa,KAAK,IAAI,QAAQ,SAAS,GAAG;AACrD;AAAA,IACF;AACA,SAAK,IAAI,QAAQ,SAAS;AAC1B,WAAO,KAAK,OAAO;AAAA,EACrB;AAEA,SAAO;AACT;AAEO,SAAS,oBAAoB,OAAqD;AACvF,QAAM,oBAAoB,YAAY,MAAM,SAAS,OAAO;AAE5D,SAAO;AAAA,IACL,gBAAgB,uBAAuB,MAAM,SAAS,OAAO;AAAA,IAC7D,WAAW,kBAAkB,KAAK,EAAE,WAAW,IAAI,IAAI,kBAAkB,KAAK,EAAE,MAAM,MAAM,EAAE;AAAA,IAC9F,gBAAgB,MAAM,KAAK,iBAAiB,EAAE;AAAA,IAC9C,cAAc,OAAO,KAAK,MAAM,SAAS,OAAO,QAAQ,EAAE;AAAA,IAC1D,eAAe,OAAO,KAAK,MAAM,SAAS,OAAO,SAAS,EAAE;AAAA,EAC9D;AACF;AAEO,SAAS,qBACd,OACA,SACuB;AACvB,QAAM,WAAW,OAAO,OAAO,MAAM,SAAS,OAAO,QAAQ,EAAE;AAAA,IAAK,CAAC,MAAM,UACzE,KAAK,UAAU,cAAc,MAAM,SAAS;AAAA,EAC9C;AACA,QAAM,YAAY,OAAO,OAAO,MAAM,SAAS,OAAO,SAAS;AAE/D,SAAO;AAAA,IACL,YAAY,MAAM;AAAA,IAClB,WAAW,MAAM;AAAA,IACjB,aAAa,MAAM;AAAA,IACnB,eAAe,MAAM;AAAA,IACrB,SAAS,MAAM,UAAU;AAAA,IACzB,SAAS,MAAM;AAAA,IACf,UAAU,MAAM;AAAA,IAChB,WAAW,MAAM;AAAA,IACjB,eAAe,oBAAoB,KAAK;AAAA,IACxC,UAAU;AAAA,MACR,iBAAiB,MAAM,QAAQ;AAAA,MAC/B,iBAAiB,SAAS,OAAO,CAAC,YAAY,QAAQ,WAAW,MAAM,EAAE;AAAA,MACzE,qBAAqB,SAAS,OAAO,CAAC,YAAY,QAAQ,WAAW,UAAU,EAAE;AAAA,MACjF,SAAS;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,MACd,YAAY,UAAU;AAAA,MACtB,cAAc,UAAU,OAAO,CAAC,aAAa,SAAS,WAAW,MAAM,EAAE;AAAA,MACzE,eAAe,UAAU,OAAO,CAAC,aAAa,SAAS,WAAW,UAAU,EAAE;AAAA,MAC9E,eAAe,UAAU,OAAO,CAAC,aAAa,SAAS,WAAW,UAAU,EAAE;AAAA,IAChF;AAAA,IACA,eAAe;AAAA,MACb,QAAQ,MAAM;AAAA,MACd,aAAa,MAAM,cAAc;AAAA,MACjC,cAAc,MAAM,cAAc,eAAe;AAAA,IACnD;AAAA,IACA,UAAU,MAAM;AAAA,IAChB,YAAY,MAAM;AAAA,IAClB,cAAc;AAAA,MACZ,SAAS,QAAQ;AAAA,MACjB,SAAS,QAAQ;AAAA,MACjB,eAAe,CAAC,MAAM;AAAA,MACtB,qBAAqB,UAAU,KAAK,CAAC,aAAa,SAAS,WAAW,MAAM;AAAA,MAC5E,qBAAqB,UAAU,KAAK,CAAC,aAAa,SAAS,WAAW,MAAM;AAAA,IAC9E;AAAA,EACF;AACF;AAEO,SAASC,+BACd,OACA,SAMyB;AACzB,QAAM,WAAW,8BAAmC;AAAA,IAClD,YAAY,MAAM;AAAA,IAClB,SAAS,QAAQ;AAAA,IACjB,aAAa,QAAQ;AAAA,IACrB,mBAAmB,MAAM;AAAA,IACzB,eAAgB,QAAQ,iBAAiB,MAAM;AAAA,IAC/C,YAAY,MAAM;AAAA,IAClB,oBAAoB,QAAQ;AAAA,IAC5B,eAAe,MAAM;AAAA,EACvB,CAAC;AACD,SAAO;AACT;AAEA,SAAS,uBAAuB,SAA0B;AACxD,MAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,WAAO,QAAQ;AAAA,EACjB;AAEA,MAAI,WAAW,OAAO,YAAY,YAAY,MAAM,QAAS,QAAmC,MAAM,GAAG;AACvG,WAAS,QAAkC,OAAQ;AAAA,EACrD;AAEA,SAAO,YAAY,OAAO,EAAE,SAAS,IAAI,IAAI;AAC/C;AAEA,SAAS,oBAAoB,UAA4C;AACvE,SAAO,SAAS,IAAI,CAAC,aAAa;AAAA,IAChC,GAAG;AAAA,IACH,gBAAgB,QAAQ,iBACpB,0BAA0B,QAAQ,cAAc,IAChD;AAAA,EACN,EAAE;AACJ;AAEA,SAAS,6BAA6B,QAAkD;AACtF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,gBAAgB,OAAO,eAAe,IAAI,CAAC,WAAW;AAAA,MACpD,GAAG;AAAA,MACH,gBAAgB,MAAM,iBAClB,0BAA0B,MAAM,cAAc,IAC9C;AAAA,IACN,EAAE;AAAA,IACF,UAAU,oBAAoB,OAAO,QAAQ;AAAA,EAC/C;AACF;AAEA,SAAS,0BAA0B,QAAwD;AACzF,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,SAAS;AACZ,YAAM,cAAc;AAMpB,aAAO,YAAY,QACf,kBAAkB,YAAY,MAAM,MAAM,YAAY,MAAM,IAAI,YAAY,KAAK,IACjF,kBAAkB,YAAY,QAAQ,GAAG,YAAY,MAAM,GAAG,YAAY,KAAK;AAAA,IACrF;AAAA,IACA,KAAK;AACH,aAAO,iBAAiB,OAAO,IAAI,OAAO,KAAK;AAAA,IACjD,KAAK;AACH,aAAO,qBAAqB,OAAO,gBAAgB,OAAO,MAAM;AAAA,EACpE;AACF;AAEA,SAAS,YAAY,OAAwB;AAC3C,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,CAAC,SAAS,YAAY,IAAI,CAAC,EAAE,KAAK,GAAG;AAAA,EACxD;AAEA,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,OAAO,KAAgC,EAClD,IAAI,CAAC,SAAS,YAAY,IAAI,CAAC,EAC/B,OAAO,OAAO,EACd,KAAK,GAAG;AACb;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEO,SAAS,0BAA0B,YAA4B;AACpE,QAAM,WAAW,CAAC,SAAyB;AACzC,QAAI,OAAO;AACX,eAAW,QAAQ,MAAM;AACvB,cAAQ,KAAK,WAAW,CAAC;AACzB,aAAO,KAAK,KAAK,MAAM,QAAU;AAAA,IACnC;AACA,YAAQ,SAAS,GAAG,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,EAClD;AAEA,QAAM,MACJ,SAAS,GAAG,UAAU,IAAI,IAC1B,SAAS,GAAG,UAAU,IAAI,IAC1B,SAAS,GAAG,UAAU,IAAI,IAC1B,SAAS,GAAG,UAAU,IAAI;AAE5B,SAAO;AAAA,IACL,IAAI,MAAM,GAAG,CAAC;AAAA,IACd,IAAI,MAAM,GAAG,EAAE;AAAA,IACf,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC;AAAA,IACrB,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC;AAAA,IACrB,IAAI,MAAM,IAAI,EAAE;AAAA,EAClB,EAAE,KAAK,GAAG;AACZ;AAEO,SAAS,6BAA6B,OAAqC;AAChF,QAAM,SAAS,SAAS,KAAK,IAAI,QAAQ,CAAC;AAC1C,QAAM,WACJ,OAAO,OAAO,cAAc,YAAY,OAAO,UAAU,SAAS,IAC9D,OAAO,YACP,OAAO,OAAO,aAAa,YAAY,OAAO,SAAS,SAAS,IAC9D,OAAO,WACP;AACR,QAAM,YACJ,OAAO,OAAO,cAAc,YAAY,OAAO,UAAU,SAAS,IAC9D,OAAO,aACP,oBAAI,KAAK,CAAC,GAAE,YAAY;AAC9B,QAAM,UAAU,MAAM,QAAQ,OAAO,OAAO,IACxC,OAAO,QACJ,OAAO,CAAC,UAA4C,SAAS,KAAK,CAAC,EACnE,IAAI,CAAC,OAAO,WAAW;AAAA,IACtB,SACE,OAAO,MAAM,YAAY,YAAY,MAAM,QAAQ,SAAS,IACxD,MAAM,UACN,GAAG,OAAO,OAAO,aAAa,SAAS,CAAC,UAAU,QAAQ,CAAC;AAAA,IACjE,UACE,OAAO,MAAM,aAAa,YAAY,MAAM,SAAS,SAAS,IAC1D,MAAM,WACN;AAAA,IACN,MAAM,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,IACpD,WACE,OAAO,MAAM,cAAc,YAAY,MAAM,UAAU,SAAS,IAC5D,MAAM,YACN;AAAA,IACN,UAAU,SAAS,MAAM,QAAQ,IAC7B;AAAA,MACE,gBACE,OAAO,MAAM,SAAS,mBAAmB,WACrC,MAAM,SAAS,iBACf;AAAA,MACN,QACE,OAAO,MAAM,SAAS,WAAW,WAC7B,MAAM,SAAS,SACf;AAAA,MACN,cACE,OAAO,MAAM,SAAS,iBAAiB,WACnC,MAAM,SAAS,eACf;AAAA,MACN,WACE,OAAO,MAAM,SAAS,cAAc,WAChC,MAAM,SAAS,YACf;AAAA,MACN,UACE,OAAO,MAAM,SAAS,aAAa,WAC/B,MAAM,SAAS,WACf;AAAA,IACR,IACA;AAAA,EACN,EAAE,IACJ;AAAA,IACE;AAAA,MACE,SAAS,GAAG,OAAO,OAAO,aAAa,SAAS,CAAC;AAAA,MACjD;AAAA,MACA,MAAM,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACJ,QAAM,aAAa,SAAS,OAAO,UAAU,IACzC;AAAA,IACE,YACE,OAAO,OAAO,WAAW,eAAe,WACpC,OAAO,WAAW,aAClB,OAAO,OAAO,eAAe,WAC3B,OAAO,aACP;AAAA,IACR,YACE,OAAO,OAAO,WAAW,eAAe,YACxC,OAAO,WAAW,WAAW,SAAS,IAClC,OAAO,WAAW,aAClB;AAAA,EACR,IACA,OAAO,OAAO,eAAe,WAC3B;AAAA,IACE,YAAY,OAAO;AAAA,IACnB,YAAY;AAAA,EACd,IACA;AACN,QAAM,mBACJ,OAAO,OAAO,WAAW,WACrB,OAAO,SACP,OAAO,UAAU,SAAS,OAAO,MAAM,KAAK,OAAO,OAAO,SAAS,aACjE,aACA,cAAc,OAAO,aACnB,aACA;AAEV,SAAO;AAAA,IACL,WACE,OAAO,OAAO,cAAc,YAAY,OAAO,UAAU,SAAS,IAC9D,OAAO,YACP;AAAA,IACN,QACE,SAAS,OAAO,MAAM,KAAK,OAAO,OAAO,OAAO,SAAS,WACpD,OAAO,SACR,qBAAqB,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,iBAAiB;AAAA,IAChE;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,MAAM,QAAQ,IAAI,CAAC,UAAU,MAAM,IAAI,EAAE,KAAK,IAAI;AAAA,IAClD;AAAA,IACA,QACE,qBAAqB,cAAc,qBAAqB,aACpD,mBACA;AAAA,IACN;AAAA,IACA,YAAY,YAAY;AAAA,IACxB,YAAY,MAAM,QAAQ,OAAO,UAAU,IACvC,OAAO,WAAW,OAAO,CAAC,cAAmC,OAAO,cAAc,QAAQ,IAC1F,CAAC;AAAA,IACL,YAAY,qBAAqB;AAAA,IACjC,UAAU,SAAS,OAAO,QAAQ,IAC9B;AAAA,MACE,QACE,OAAO,SAAS,WAAW,YAAY,OAAO,SAAS,WAAW,YAC9D,OAAO,SAAS,SAChB;AAAA,MACN,oBACE,OAAO,OAAO,SAAS,uBAAuB,WAC1C,OAAO,SAAS,qBAChB;AAAA,MACN,YACE,OAAO,OAAO,SAAS,eAAe,WAClC,OAAO,SAAS,aAChB;AAAA,IACR,IACA;AAAA,EACN;AACF;","names":["createPersistedEditorSnapshot","validateExactObjectKeys","createPersistedEditorSnapshot"]}
@@ -1,2 +0,0 @@
1
- export { aH as CanonicalDocumentEnvelope, bf as CommandStateSnapshot, bg as CommentEntryRecord, bh as CommentResolutionRecord, bi as CommentSidebarSnapshot, aK as CommentThreadRecord, bj as CompatibilityFeatureClass, bk as CompatibilityFeatureEntry, bl as CompatibilityPanelSnapshot, bm as CompatibilityReport, bn as CreateEditorStateOptions, bo as DocumentStats, bp as EditorError, bq as EditorRuntimeState, br as EditorState, aJ as EditorWarning, bs as EditorWarningCode, bt as PersistedEditorSnapshot, bu as ReviewStore, bv as RevisionMetadataRecord, bw as RevisionRecord, bx as RuntimePhase, by as RuntimeRenderSnapshot, aG as SelectionSnapshot, bz as TrackedChangesSnapshot, bA as createCanonicalDocumentId, bB as createDefaultCanonicalDocument, bC as createEditorState, bD as createEmptyCompatibilityReport, bE as createEmptyReviewStore, bF as createPersistedEditorSnapshot, bG as createSelectionSnapshot, bH as deriveDocumentStats, bI as deriveRenderSnapshot, bJ as normalizeCommentThreadRecord } from '../../public-types-CeMaDueh.cjs';
2
- import '../../canonical-document-BLEbzL2J.cjs';
@@ -1,2 +0,0 @@
1
- export { aH as CanonicalDocumentEnvelope, bf as CommandStateSnapshot, bg as CommentEntryRecord, bh as CommentResolutionRecord, bi as CommentSidebarSnapshot, aK as CommentThreadRecord, bj as CompatibilityFeatureClass, bk as CompatibilityFeatureEntry, bl as CompatibilityPanelSnapshot, bm as CompatibilityReport, bn as CreateEditorStateOptions, bo as DocumentStats, bp as EditorError, bq as EditorRuntimeState, br as EditorState, aJ as EditorWarning, bs as EditorWarningCode, bt as PersistedEditorSnapshot, bu as ReviewStore, bv as RevisionMetadataRecord, bw as RevisionRecord, bx as RuntimePhase, by as RuntimeRenderSnapshot, aG as SelectionSnapshot, bz as TrackedChangesSnapshot, bA as createCanonicalDocumentId, bB as createDefaultCanonicalDocument, bC as createEditorState, bD as createEmptyCompatibilityReport, bE as createEmptyReviewStore, bF as createPersistedEditorSnapshot, bG as createSelectionSnapshot, bH as deriveDocumentStats, bI as deriveRenderSnapshot, bJ as normalizeCommentThreadRecord } from '../../public-types-7ZL_94cz.js';
2
- import '../../canonical-document-BLEbzL2J.js';
@@ -1,26 +0,0 @@
1
- import {
2
- createCanonicalDocumentId,
3
- createDefaultCanonicalDocument,
4
- createEditorState,
5
- createEmptyCompatibilityReport,
6
- createEmptyReviewStore,
7
- createPersistedEditorSnapshot,
8
- createSelectionSnapshot,
9
- deriveDocumentStats,
10
- deriveRenderSnapshot,
11
- normalizeCommentThreadRecord
12
- } from "../../chunk-5FN54NDH.js";
13
- import "../../chunk-EBI3BX6U.js";
14
- export {
15
- createCanonicalDocumentId,
16
- createDefaultCanonicalDocument,
17
- createEditorState,
18
- createEmptyCompatibilityReport,
19
- createEmptyReviewStore,
20
- createPersistedEditorSnapshot,
21
- createSelectionSnapshot,
22
- deriveDocumentStats,
23
- deriveRenderSnapshot,
24
- normalizeCommentThreadRecord
25
- };
26
- //# sourceMappingURL=editor-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}