open-agreements 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (578) hide show
  1. package/README.de.md +6 -1
  2. package/README.es.md +6 -1
  3. package/README.md +13 -1
  4. package/README.pt-br.md +6 -1
  5. package/README.zh.md +6 -1
  6. package/content/external/yc-safe-discount/metadata.yaml +1 -1
  7. package/content/external/yc-safe-mfn/metadata.yaml +1 -1
  8. package/content/external/yc-safe-pro-rata-side-letter/metadata.yaml +1 -1
  9. package/content/external/yc-safe-valuation-cap/metadata.yaml +1 -1
  10. package/content/recipes/QUALITY_TRACKER.md +35 -0
  11. package/content/recipes/nvca-certificate-of-incorporation/clean.json +14 -2
  12. package/content/recipes/nvca-certificate-of-incorporation/computed.json +78 -0
  13. package/content/recipes/nvca-certificate-of-incorporation/metadata.yaml +115 -2
  14. package/content/recipes/nvca-certificate-of-incorporation/replacements.json +50 -2
  15. package/content/recipes/nvca-certificate-of-incorporation/selections-roadmap.md +47 -0
  16. package/content/recipes/nvca-indemnification-agreement/metadata.yaml +5 -1
  17. package/content/recipes/nvca-indemnification-agreement/replacements.json +30 -5
  18. package/content/recipes/nvca-investors-rights-agreement/clean.json +9 -1
  19. package/content/recipes/nvca-investors-rights-agreement/metadata.yaml +1 -1
  20. package/content/recipes/nvca-investors-rights-agreement/replacements.json +4 -1
  21. package/content/recipes/nvca-management-rights-letter/metadata.yaml +1 -1
  22. package/content/recipes/nvca-rofr-co-sale-agreement/clean.json +11 -1
  23. package/content/recipes/nvca-rofr-co-sale-agreement/metadata.yaml +5 -1
  24. package/content/recipes/nvca-rofr-co-sale-agreement/replacements.json +62 -3
  25. package/content/recipes/nvca-stock-purchase-agreement/clean.json +8 -3
  26. package/content/recipes/nvca-stock-purchase-agreement/metadata.yaml +6 -1
  27. package/content/recipes/nvca-stock-purchase-agreement/normalize.json +0 -16
  28. package/content/recipes/nvca-stock-purchase-agreement/replacements.json +15 -12
  29. package/content/recipes/nvca-stock-purchase-agreement/selections.json +17 -0
  30. package/content/recipes/nvca-voting-agreement/clean.json +11 -1
  31. package/content/recipes/nvca-voting-agreement/metadata.yaml +1 -1
  32. package/content/recipes/nvca-voting-agreement/replacements.json +2 -1
  33. package/content/templates/bonterms-mutual-nda/metadata.yaml +1 -1
  34. package/content/templates/bonterms-professional-services-agreement/metadata.yaml +1 -1
  35. package/content/templates/closing-checklist/metadata.yaml +1 -1
  36. package/content/templates/closing-checklist/template.docx +0 -0
  37. package/content/templates/common-paper-ai-addendum/metadata.yaml +1 -1
  38. package/content/templates/common-paper-ai-addendum-in-app/metadata.yaml +1 -1
  39. package/content/templates/common-paper-amendment/metadata.yaml +1 -1
  40. package/content/templates/common-paper-business-associate-agreement/metadata.yaml +1 -1
  41. package/content/templates/common-paper-cloud-service-agreement/metadata.yaml +1 -1
  42. package/content/templates/common-paper-csa-click-through/metadata.yaml +1 -1
  43. package/content/templates/common-paper-csa-with-ai/metadata.yaml +1 -1
  44. package/content/templates/common-paper-csa-with-sla/metadata.yaml +1 -1
  45. package/content/templates/common-paper-csa-without-sla/metadata.yaml +1 -1
  46. package/content/templates/common-paper-data-processing-agreement/metadata.yaml +1 -1
  47. package/content/templates/common-paper-design-partner-agreement/metadata.yaml +1 -1
  48. package/content/templates/common-paper-independent-contractor-agreement/metadata.yaml +1 -1
  49. package/content/templates/common-paper-letter-of-intent/metadata.yaml +1 -1
  50. package/content/templates/common-paper-mutual-nda/metadata.yaml +1 -1
  51. package/content/templates/common-paper-one-way-nda/metadata.yaml +1 -1
  52. package/content/templates/common-paper-order-form/metadata.yaml +1 -1
  53. package/content/templates/common-paper-order-form-with-sla/metadata.yaml +1 -1
  54. package/content/templates/common-paper-partnership-agreement/metadata.yaml +1 -1
  55. package/content/templates/common-paper-pilot-agreement/metadata.yaml +1 -1
  56. package/content/templates/common-paper-professional-services-agreement/metadata.yaml +1 -1
  57. package/content/templates/common-paper-software-license-agreement/metadata.yaml +1 -1
  58. package/content/templates/common-paper-statement-of-work/metadata.yaml +1 -1
  59. package/content/templates/common-paper-term-sheet/metadata.yaml +1 -1
  60. package/content/templates/openagreements-employee-ip-inventions-assignment/metadata.yaml +1 -1
  61. package/content/templates/openagreements-employment-confidentiality-acknowledgement/metadata.yaml +1 -1
  62. package/content/templates/openagreements-employment-offer-letter/metadata.yaml +1 -1
  63. package/content/templates/working-group-list/metadata.yaml +1 -1
  64. package/dist/cli/index.d.ts.map +1 -1
  65. package/dist/cli/index.js +8 -4
  66. package/dist/cli/index.js.map +1 -1
  67. package/dist/commands/fill.js +3 -3
  68. package/dist/commands/fill.js.map +1 -1
  69. package/dist/commands/list.js +19 -15
  70. package/dist/commands/list.js.map +1 -1
  71. package/dist/core/checklist/docx-import.d.ts +50 -0
  72. package/dist/core/checklist/docx-import.d.ts.map +1 -0
  73. package/dist/core/checklist/docx-import.js +613 -0
  74. package/dist/core/checklist/docx-import.js.map +1 -0
  75. package/dist/core/checklist/docx-table-helpers.d.ts +33 -0
  76. package/dist/core/checklist/docx-table-helpers.d.ts.map +1 -0
  77. package/dist/core/checklist/docx-table-helpers.js +154 -0
  78. package/dist/core/checklist/docx-table-helpers.js.map +1 -0
  79. package/dist/core/checklist/format-checklist-docx.d.ts.map +1 -1
  80. package/dist/core/checklist/format-checklist-docx.js +37 -88
  81. package/dist/core/checklist/format-checklist-docx.js.map +1 -1
  82. package/dist/core/checklist/index.d.ts +15 -12
  83. package/dist/core/checklist/index.d.ts.map +1 -1
  84. package/dist/core/checklist/index.js +48 -30
  85. package/dist/core/checklist/index.js.map +1 -1
  86. package/dist/core/checklist/status-labels.d.ts +6 -0
  87. package/dist/core/checklist/status-labels.d.ts.map +1 -1
  88. package/dist/core/checklist/status-labels.js +8 -0
  89. package/dist/core/checklist/status-labels.js.map +1 -1
  90. package/dist/core/command-generation/adapters/claude.js +4 -4
  91. package/dist/core/employment/memo.js +3 -3
  92. package/dist/core/engine.js +1 -1
  93. package/dist/core/external/index.js +1 -1
  94. package/dist/core/fill-pipeline.d.ts +3 -3
  95. package/dist/core/fill-pipeline.js +6 -6
  96. package/dist/core/fill-pipeline.js.map +1 -1
  97. package/dist/core/metadata.d.ts +13 -3
  98. package/dist/core/metadata.d.ts.map +1 -1
  99. package/dist/core/metadata.js +19 -11
  100. package/dist/core/metadata.js.map +1 -1
  101. package/dist/core/recipe/bracket-normalizer.d.ts +4 -5
  102. package/dist/core/recipe/bracket-normalizer.d.ts.map +1 -1
  103. package/dist/core/recipe/bracket-normalizer.js +67 -149
  104. package/dist/core/recipe/bracket-normalizer.js.map +1 -1
  105. package/dist/core/recipe/cleaner.d.ts.map +1 -1
  106. package/dist/core/recipe/cleaner.js +91 -7
  107. package/dist/core/recipe/cleaner.js.map +1 -1
  108. package/dist/core/recipe/downloader.d.ts.map +1 -1
  109. package/dist/core/recipe/downloader.js +8 -3
  110. package/dist/core/recipe/downloader.js.map +1 -1
  111. package/dist/core/recipe/index.d.ts +2 -1
  112. package/dist/core/recipe/index.d.ts.map +1 -1
  113. package/dist/core/recipe/index.js +11 -4
  114. package/dist/core/recipe/index.js.map +1 -1
  115. package/dist/core/recipe/patcher.d.ts +9 -5
  116. package/dist/core/recipe/patcher.d.ts.map +1 -1
  117. package/dist/core/recipe/patcher.js +183 -136
  118. package/dist/core/recipe/patcher.js.map +1 -1
  119. package/dist/core/recipe/replacement-keys.d.ts +2 -7
  120. package/dist/core/recipe/replacement-keys.d.ts.map +1 -1
  121. package/dist/core/recipe/replacement-keys.js +3 -20
  122. package/dist/core/recipe/replacement-keys.js.map +1 -1
  123. package/dist/core/recipe/source-drift.js +1 -1
  124. package/dist/core/recipe/source-drift.js.map +1 -1
  125. package/dist/core/recipe/verifier.d.ts +7 -1
  126. package/dist/core/recipe/verifier.d.ts.map +1 -1
  127. package/dist/core/recipe/verifier.js +69 -3
  128. package/dist/core/recipe/verifier.js.map +1 -1
  129. package/dist/core/selector.d.ts +2 -0
  130. package/dist/core/selector.d.ts.map +1 -1
  131. package/dist/core/selector.js +97 -1
  132. package/dist/core/selector.js.map +1 -1
  133. package/dist/core/template-listing.d.ts +3 -1
  134. package/dist/core/template-listing.d.ts.map +1 -1
  135. package/dist/core/template-listing.js +4 -3
  136. package/dist/core/template-listing.js.map +1 -1
  137. package/dist/core/unified-pipeline.d.ts +1 -1
  138. package/dist/core/unified-pipeline.d.ts.map +1 -1
  139. package/dist/core/unified-pipeline.js +21 -3
  140. package/dist/core/unified-pipeline.js.map +1 -1
  141. package/dist/core/validation/external.d.ts.map +1 -1
  142. package/dist/core/validation/external.js +0 -2
  143. package/dist/core/validation/external.js.map +1 -1
  144. package/dist/core/validation/recipe.d.ts.map +1 -1
  145. package/dist/core/validation/recipe.js +0 -2
  146. package/dist/core/validation/recipe.js.map +1 -1
  147. package/dist/core/validation/scan-metadata.d.ts.map +1 -1
  148. package/dist/core/validation/scan-metadata.js +17 -1
  149. package/dist/core/validation/scan-metadata.js.map +1 -1
  150. package/dist/core/validation/template.js +5 -5
  151. package/dist/index.d.ts +1 -1
  152. package/dist/index.d.ts.map +1 -1
  153. package/dist/index.js +1 -1
  154. package/dist/index.js.map +1 -1
  155. package/node_modules/@usejunior/docx-core/dist/atomizer.d.ts +218 -0
  156. package/node_modules/@usejunior/docx-core/dist/atomizer.d.ts.map +1 -0
  157. package/node_modules/@usejunior/docx-core/dist/atomizer.js +869 -0
  158. package/node_modules/@usejunior/docx-core/dist/atomizer.js.map +1 -0
  159. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/atomLcs.d.ts +96 -0
  160. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/atomLcs.d.ts.map +1 -0
  161. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/atomLcs.js +347 -0
  162. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/atomLcs.js.map +1 -0
  163. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/consumerCompatibility.d.ts +2 -0
  164. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/consumerCompatibility.d.ts.map +1 -0
  165. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/consumerCompatibility.js +188 -0
  166. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/consumerCompatibility.js.map +1 -0
  167. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/debug.d.ts +41 -0
  168. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/debug.d.ts.map +1 -0
  169. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/debug.js +85 -0
  170. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/debug.js.map +1 -0
  171. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/documentReconstructor.d.ts +64 -0
  172. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/documentReconstructor.d.ts.map +1 -0
  173. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/documentReconstructor.js +985 -0
  174. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/documentReconstructor.js.map +1 -0
  175. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/hierarchicalLcs.d.ts +111 -0
  176. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/hierarchicalLcs.d.ts.map +1 -0
  177. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/hierarchicalLcs.js +469 -0
  178. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/hierarchicalLcs.js.map +1 -0
  179. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/inPlaceModifier.d.ts +277 -0
  180. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/inPlaceModifier.d.ts.map +1 -0
  181. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/inPlaceModifier.js +2279 -0
  182. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/inPlaceModifier.js.map +1 -0
  183. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/numberingIntegration.d.ts +59 -0
  184. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/numberingIntegration.d.ts.map +1 -0
  185. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/numberingIntegration.js +209 -0
  186. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/numberingIntegration.js.map +1 -0
  187. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/pipeline.d.ts +69 -0
  188. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/pipeline.d.ts.map +1 -0
  189. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/pipeline.js +910 -0
  190. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/pipeline.js.map +1 -0
  191. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/premergeRuns.d.ts +26 -0
  192. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/premergeRuns.d.ts.map +1 -0
  193. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/premergeRuns.js +153 -0
  194. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/premergeRuns.js.map +1 -0
  195. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/trackChangesAcceptor.d.ts +63 -0
  196. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/trackChangesAcceptor.d.ts.map +1 -0
  197. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/trackChangesAcceptor.js +254 -0
  198. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/trackChangesAcceptor.js.map +1 -0
  199. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts +64 -0
  200. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/trackChangesAcceptorAst.d.ts.map +1 -0
  201. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/trackChangesAcceptorAst.js +616 -0
  202. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/trackChangesAcceptorAst.js.map +1 -0
  203. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/xmlToWmlElement.d.ts +65 -0
  204. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/xmlToWmlElement.d.ts.map +1 -0
  205. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/xmlToWmlElement.js +95 -0
  206. package/node_modules/@usejunior/docx-core/dist/baselines/atomizer/xmlToWmlElement.js.map +1 -0
  207. package/node_modules/@usejunior/docx-core/dist/baselines/wmlcomparer/DocxodusWasm.d.ts +51 -0
  208. package/node_modules/@usejunior/docx-core/dist/baselines/wmlcomparer/DocxodusWasm.d.ts.map +1 -0
  209. package/node_modules/@usejunior/docx-core/dist/baselines/wmlcomparer/DocxodusWasm.js +83 -0
  210. package/node_modules/@usejunior/docx-core/dist/baselines/wmlcomparer/DocxodusWasm.js.map +1 -0
  211. package/node_modules/@usejunior/docx-core/dist/baselines/wmlcomparer/DotnetCli.d.ts +40 -0
  212. package/node_modules/@usejunior/docx-core/dist/baselines/wmlcomparer/DotnetCli.d.ts.map +1 -0
  213. package/node_modules/@usejunior/docx-core/dist/baselines/wmlcomparer/DotnetCli.js +135 -0
  214. package/node_modules/@usejunior/docx-core/dist/baselines/wmlcomparer/DotnetCli.js.map +1 -0
  215. package/node_modules/@usejunior/docx-core/dist/cli/compare-two.d.ts +28 -0
  216. package/node_modules/@usejunior/docx-core/dist/cli/compare-two.d.ts.map +1 -0
  217. package/node_modules/@usejunior/docx-core/dist/cli/compare-two.js +110 -0
  218. package/node_modules/@usejunior/docx-core/dist/cli/compare-two.js.map +1 -0
  219. package/node_modules/@usejunior/docx-core/dist/cli/index.d.ts +3 -0
  220. package/node_modules/@usejunior/docx-core/dist/cli/index.d.ts.map +1 -0
  221. package/node_modules/@usejunior/docx-core/dist/cli/index.js +21 -0
  222. package/node_modules/@usejunior/docx-core/dist/cli/index.js.map +1 -0
  223. package/node_modules/@usejunior/docx-core/dist/core-types.d.ts +296 -0
  224. package/node_modules/@usejunior/docx-core/dist/core-types.d.ts.map +1 -0
  225. package/node_modules/@usejunior/docx-core/dist/core-types.js +122 -0
  226. package/node_modules/@usejunior/docx-core/dist/core-types.js.map +1 -0
  227. package/node_modules/@usejunior/docx-core/dist/footnotes.d.ts +144 -0
  228. package/node_modules/@usejunior/docx-core/dist/footnotes.d.ts.map +1 -0
  229. package/node_modules/@usejunior/docx-core/dist/footnotes.js +291 -0
  230. package/node_modules/@usejunior/docx-core/dist/footnotes.js.map +1 -0
  231. package/node_modules/@usejunior/docx-core/dist/format-detection.d.ts +120 -0
  232. package/node_modules/@usejunior/docx-core/dist/format-detection.d.ts.map +1 -0
  233. package/node_modules/@usejunior/docx-core/dist/format-detection.js +338 -0
  234. package/node_modules/@usejunior/docx-core/dist/format-detection.js.map +1 -0
  235. package/node_modules/@usejunior/docx-core/dist/index.d.ts +177 -0
  236. package/node_modules/@usejunior/docx-core/dist/index.d.ts.map +1 -0
  237. package/node_modules/@usejunior/docx-core/dist/index.js +55 -0
  238. package/node_modules/@usejunior/docx-core/dist/index.js.map +1 -0
  239. package/node_modules/@usejunior/docx-core/dist/integration/output-artifacts.d.ts +6 -0
  240. package/node_modules/@usejunior/docx-core/dist/integration/output-artifacts.d.ts.map +1 -0
  241. package/node_modules/@usejunior/docx-core/dist/integration/output-artifacts.js +30 -0
  242. package/node_modules/@usejunior/docx-core/dist/integration/output-artifacts.js.map +1 -0
  243. package/node_modules/@usejunior/docx-core/dist/move-detection.d.ts +211 -0
  244. package/node_modules/@usejunior/docx-core/dist/move-detection.d.ts.map +1 -0
  245. package/node_modules/@usejunior/docx-core/dist/move-detection.js +391 -0
  246. package/node_modules/@usejunior/docx-core/dist/move-detection.js.map +1 -0
  247. package/node_modules/@usejunior/docx-core/dist/numbering.d.ts +136 -0
  248. package/node_modules/@usejunior/docx-core/dist/numbering.d.ts.map +1 -0
  249. package/node_modules/@usejunior/docx-core/dist/numbering.js +446 -0
  250. package/node_modules/@usejunior/docx-core/dist/numbering.js.map +1 -0
  251. package/node_modules/@usejunior/docx-core/dist/primitives/accept_changes.d.ts +30 -0
  252. package/node_modules/@usejunior/docx-core/dist/primitives/accept_changes.d.ts.map +1 -0
  253. package/node_modules/@usejunior/docx-core/dist/primitives/accept_changes.js +241 -0
  254. package/node_modules/@usejunior/docx-core/dist/primitives/accept_changes.js.map +1 -0
  255. package/node_modules/@usejunior/docx-core/dist/primitives/bookmarks.d.ts +12 -0
  256. package/node_modules/@usejunior/docx-core/dist/primitives/bookmarks.d.ts.map +1 -0
  257. package/node_modules/@usejunior/docx-core/dist/primitives/bookmarks.js +248 -0
  258. package/node_modules/@usejunior/docx-core/dist/primitives/bookmarks.js.map +1 -0
  259. package/node_modules/@usejunior/docx-core/dist/primitives/comments.d.ts +88 -0
  260. package/node_modules/@usejunior/docx-core/dist/primitives/comments.d.ts.map +1 -0
  261. package/node_modules/@usejunior/docx-core/dist/primitives/comments.js +703 -0
  262. package/node_modules/@usejunior/docx-core/dist/primitives/comments.js.map +1 -0
  263. package/node_modules/@usejunior/docx-core/dist/primitives/document.d.ts +186 -0
  264. package/node_modules/@usejunior/docx-core/dist/primitives/document.d.ts.map +1 -0
  265. package/node_modules/@usejunior/docx-core/dist/primitives/document.js +555 -0
  266. package/node_modules/@usejunior/docx-core/dist/primitives/document.js.map +1 -0
  267. package/node_modules/@usejunior/docx-core/dist/primitives/document_view.d.ts +97 -0
  268. package/node_modules/@usejunior/docx-core/dist/primitives/document_view.d.ts.map +1 -0
  269. package/node_modules/@usejunior/docx-core/dist/primitives/document_view.js +749 -0
  270. package/node_modules/@usejunior/docx-core/dist/primitives/document_view.js.map +1 -0
  271. package/node_modules/@usejunior/docx-core/dist/primitives/dom-helpers.d.ts +94 -0
  272. package/node_modules/@usejunior/docx-core/dist/primitives/dom-helpers.d.ts.map +1 -0
  273. package/node_modules/@usejunior/docx-core/dist/primitives/dom-helpers.js +219 -0
  274. package/node_modules/@usejunior/docx-core/dist/primitives/dom-helpers.js.map +1 -0
  275. package/node_modules/@usejunior/docx-core/dist/primitives/errors.d.ts +7 -0
  276. package/node_modules/@usejunior/docx-core/dist/primitives/errors.d.ts.map +1 -0
  277. package/node_modules/@usejunior/docx-core/dist/primitives/errors.js +10 -0
  278. package/node_modules/@usejunior/docx-core/dist/primitives/errors.js.map +1 -0
  279. package/node_modules/@usejunior/docx-core/dist/primitives/extract_revisions.d.ts +50 -0
  280. package/node_modules/@usejunior/docx-core/dist/primitives/extract_revisions.d.ts.map +1 -0
  281. package/node_modules/@usejunior/docx-core/dist/primitives/extract_revisions.js +340 -0
  282. package/node_modules/@usejunior/docx-core/dist/primitives/extract_revisions.js.map +1 -0
  283. package/node_modules/@usejunior/docx-core/dist/primitives/footnotes.d.ts +37 -0
  284. package/node_modules/@usejunior/docx-core/dist/primitives/footnotes.d.ts.map +1 -0
  285. package/node_modules/@usejunior/docx-core/dist/primitives/footnotes.js +552 -0
  286. package/node_modules/@usejunior/docx-core/dist/primitives/footnotes.js.map +1 -0
  287. package/node_modules/@usejunior/docx-core/dist/primitives/formatting_tags.d.ts +43 -0
  288. package/node_modules/@usejunior/docx-core/dist/primitives/formatting_tags.d.ts.map +1 -0
  289. package/node_modules/@usejunior/docx-core/dist/primitives/formatting_tags.js +291 -0
  290. package/node_modules/@usejunior/docx-core/dist/primitives/formatting_tags.js.map +1 -0
  291. package/node_modules/@usejunior/docx-core/dist/primitives/index.d.ts +27 -0
  292. package/node_modules/@usejunior/docx-core/dist/primitives/index.d.ts.map +1 -0
  293. package/node_modules/@usejunior/docx-core/dist/primitives/index.js +27 -0
  294. package/node_modules/@usejunior/docx-core/dist/primitives/index.js.map +1 -0
  295. package/node_modules/@usejunior/docx-core/dist/primitives/layout.d.ts +53 -0
  296. package/node_modules/@usejunior/docx-core/dist/primitives/layout.d.ts.map +1 -0
  297. package/node_modules/@usejunior/docx-core/dist/primitives/layout.js +178 -0
  298. package/node_modules/@usejunior/docx-core/dist/primitives/layout.js.map +1 -0
  299. package/node_modules/@usejunior/docx-core/dist/primitives/list_labels.d.ts +19 -0
  300. package/node_modules/@usejunior/docx-core/dist/primitives/list_labels.d.ts.map +1 -0
  301. package/node_modules/@usejunior/docx-core/dist/primitives/list_labels.js +57 -0
  302. package/node_modules/@usejunior/docx-core/dist/primitives/list_labels.js.map +1 -0
  303. package/node_modules/@usejunior/docx-core/dist/primitives/matching.d.ts +31 -0
  304. package/node_modules/@usejunior/docx-core/dist/primitives/matching.d.ts.map +1 -0
  305. package/node_modules/@usejunior/docx-core/dist/primitives/matching.js +223 -0
  306. package/node_modules/@usejunior/docx-core/dist/primitives/matching.js.map +1 -0
  307. package/node_modules/@usejunior/docx-core/dist/primitives/merge_runs.d.ts +23 -0
  308. package/node_modules/@usejunior/docx-core/dist/primitives/merge_runs.d.ts.map +1 -0
  309. package/node_modules/@usejunior/docx-core/dist/primitives/merge_runs.js +243 -0
  310. package/node_modules/@usejunior/docx-core/dist/primitives/merge_runs.js.map +1 -0
  311. package/node_modules/@usejunior/docx-core/dist/primitives/namespaces.d.ts +91 -0
  312. package/node_modules/@usejunior/docx-core/dist/primitives/namespaces.d.ts.map +1 -0
  313. package/node_modules/@usejunior/docx-core/dist/primitives/namespaces.js +108 -0
  314. package/node_modules/@usejunior/docx-core/dist/primitives/namespaces.js.map +1 -0
  315. package/node_modules/@usejunior/docx-core/dist/primitives/numbering.d.ts +27 -0
  316. package/node_modules/@usejunior/docx-core/dist/primitives/numbering.d.ts.map +1 -0
  317. package/node_modules/@usejunior/docx-core/dist/primitives/numbering.js +182 -0
  318. package/node_modules/@usejunior/docx-core/dist/primitives/numbering.js.map +1 -0
  319. package/node_modules/@usejunior/docx-core/dist/primitives/prevent_double_elevation.d.ts +18 -0
  320. package/node_modules/@usejunior/docx-core/dist/primitives/prevent_double_elevation.d.ts.map +1 -0
  321. package/node_modules/@usejunior/docx-core/dist/primitives/prevent_double_elevation.js +190 -0
  322. package/node_modules/@usejunior/docx-core/dist/primitives/prevent_double_elevation.js.map +1 -0
  323. package/node_modules/@usejunior/docx-core/dist/primitives/reject_changes.d.ts +27 -0
  324. package/node_modules/@usejunior/docx-core/dist/primitives/reject_changes.d.ts.map +1 -0
  325. package/node_modules/@usejunior/docx-core/dist/primitives/reject_changes.js +371 -0
  326. package/node_modules/@usejunior/docx-core/dist/primitives/reject_changes.js.map +1 -0
  327. package/node_modules/@usejunior/docx-core/dist/primitives/relationships.d.ts +7 -0
  328. package/node_modules/@usejunior/docx-core/dist/primitives/relationships.d.ts.map +1 -0
  329. package/node_modules/@usejunior/docx-core/dist/primitives/relationships.js +24 -0
  330. package/node_modules/@usejunior/docx-core/dist/primitives/relationships.js.map +1 -0
  331. package/node_modules/@usejunior/docx-core/dist/primitives/semantic_tags.d.ts +17 -0
  332. package/node_modules/@usejunior/docx-core/dist/primitives/semantic_tags.d.ts.map +1 -0
  333. package/node_modules/@usejunior/docx-core/dist/primitives/semantic_tags.js +58 -0
  334. package/node_modules/@usejunior/docx-core/dist/primitives/semantic_tags.js.map +1 -0
  335. package/node_modules/@usejunior/docx-core/dist/primitives/simplify_redlines.d.ts +19 -0
  336. package/node_modules/@usejunior/docx-core/dist/primitives/simplify_redlines.d.ts.map +1 -0
  337. package/node_modules/@usejunior/docx-core/dist/primitives/simplify_redlines.js +94 -0
  338. package/node_modules/@usejunior/docx-core/dist/primitives/simplify_redlines.js.map +1 -0
  339. package/node_modules/@usejunior/docx-core/dist/primitives/styles.d.ts +36 -0
  340. package/node_modules/@usejunior/docx-core/dist/primitives/styles.d.ts.map +1 -0
  341. package/node_modules/@usejunior/docx-core/dist/primitives/styles.js +205 -0
  342. package/node_modules/@usejunior/docx-core/dist/primitives/styles.js.map +1 -0
  343. package/node_modules/@usejunior/docx-core/dist/primitives/tables.d.ts +54 -0
  344. package/node_modules/@usejunior/docx-core/dist/primitives/tables.d.ts.map +1 -0
  345. package/node_modules/@usejunior/docx-core/dist/primitives/tables.js +205 -0
  346. package/node_modules/@usejunior/docx-core/dist/primitives/tables.js.map +1 -0
  347. package/node_modules/@usejunior/docx-core/dist/primitives/text.d.ts +30 -0
  348. package/node_modules/@usejunior/docx-core/dist/primitives/text.d.ts.map +1 -0
  349. package/node_modules/@usejunior/docx-core/dist/primitives/text.js +461 -0
  350. package/node_modules/@usejunior/docx-core/dist/primitives/text.js.map +1 -0
  351. package/node_modules/@usejunior/docx-core/dist/primitives/validate_document.d.ts +24 -0
  352. package/node_modules/@usejunior/docx-core/dist/primitives/validate_document.d.ts.map +1 -0
  353. package/node_modules/@usejunior/docx-core/dist/primitives/validate_document.js +147 -0
  354. package/node_modules/@usejunior/docx-core/dist/primitives/validate_document.js.map +1 -0
  355. package/node_modules/@usejunior/docx-core/dist/primitives/xml.d.ts +5 -0
  356. package/node_modules/@usejunior/docx-core/dist/primitives/xml.d.ts.map +1 -0
  357. package/node_modules/@usejunior/docx-core/dist/primitives/xml.js +19 -0
  358. package/node_modules/@usejunior/docx-core/dist/primitives/xml.js.map +1 -0
  359. package/node_modules/@usejunior/docx-core/dist/primitives/zip.d.ts +25 -0
  360. package/node_modules/@usejunior/docx-core/dist/primitives/zip.d.ts.map +1 -0
  361. package/node_modules/@usejunior/docx-core/dist/primitives/zip.js +78 -0
  362. package/node_modules/@usejunior/docx-core/dist/primitives/zip.js.map +1 -0
  363. package/node_modules/@usejunior/docx-core/dist/shared/docx/DocxArchive.d.ts +94 -0
  364. package/node_modules/@usejunior/docx-core/dist/shared/docx/DocxArchive.d.ts.map +1 -0
  365. package/node_modules/@usejunior/docx-core/dist/shared/docx/DocxArchive.js +169 -0
  366. package/node_modules/@usejunior/docx-core/dist/shared/docx/DocxArchive.js.map +1 -0
  367. package/node_modules/@usejunior/docx-core/dist/shared/ooxml/namespaces.d.ts +149 -0
  368. package/node_modules/@usejunior/docx-core/dist/shared/ooxml/namespaces.d.ts.map +1 -0
  369. package/node_modules/@usejunior/docx-core/dist/shared/ooxml/namespaces.js +224 -0
  370. package/node_modules/@usejunior/docx-core/dist/shared/ooxml/namespaces.js.map +1 -0
  371. package/node_modules/@usejunior/docx-core/dist/shared/ooxml/types.d.ts +136 -0
  372. package/node_modules/@usejunior/docx-core/dist/shared/ooxml/types.d.ts.map +1 -0
  373. package/node_modules/@usejunior/docx-core/dist/shared/ooxml/types.js +7 -0
  374. package/node_modules/@usejunior/docx-core/dist/shared/ooxml/types.js.map +1 -0
  375. package/node_modules/@usejunior/docx-core/dist/shared/validators/structural.d.ts +31 -0
  376. package/node_modules/@usejunior/docx-core/dist/shared/validators/structural.d.ts.map +1 -0
  377. package/node_modules/@usejunior/docx-core/dist/shared/validators/structural.js +110 -0
  378. package/node_modules/@usejunior/docx-core/dist/shared/validators/structural.js.map +1 -0
  379. package/node_modules/@usejunior/docx-core/package.json +26 -0
  380. package/node_modules/core-util-is/LICENSE +19 -0
  381. package/node_modules/core-util-is/README.md +3 -0
  382. package/node_modules/core-util-is/lib/util.js +107 -0
  383. package/node_modules/core-util-is/package.json +38 -0
  384. package/node_modules/diff-match-patch/LICENSE +202 -0
  385. package/node_modules/diff-match-patch/README.md +94 -0
  386. package/node_modules/diff-match-patch/index.js +2218 -0
  387. package/node_modules/diff-match-patch/package.json +22 -0
  388. package/node_modules/immediate/LICENSE.txt +20 -0
  389. package/node_modules/immediate/README.md +93 -0
  390. package/node_modules/immediate/dist/immediate.js +75 -0
  391. package/node_modules/immediate/dist/immediate.min.js +1 -0
  392. package/node_modules/immediate/lib/browser.js +69 -0
  393. package/node_modules/immediate/lib/index.js +73 -0
  394. package/node_modules/immediate/package.json +42 -0
  395. package/node_modules/inherits/LICENSE +16 -0
  396. package/node_modules/inherits/README.md +42 -0
  397. package/node_modules/inherits/inherits.js +9 -0
  398. package/node_modules/inherits/inherits_browser.js +27 -0
  399. package/node_modules/inherits/package.json +29 -0
  400. package/node_modules/isarray/.npmignore +1 -0
  401. package/node_modules/isarray/.travis.yml +4 -0
  402. package/node_modules/isarray/Makefile +6 -0
  403. package/node_modules/isarray/README.md +60 -0
  404. package/node_modules/isarray/component.json +19 -0
  405. package/node_modules/isarray/index.js +5 -0
  406. package/node_modules/isarray/package.json +45 -0
  407. package/node_modules/isarray/test.js +20 -0
  408. package/node_modules/jszip/.codeclimate.yml +16 -0
  409. package/node_modules/jszip/.editorconfig +8 -0
  410. package/node_modules/jszip/.eslintrc.js +43 -0
  411. package/node_modules/jszip/.github/workflows/pr.yaml +58 -0
  412. package/node_modules/jszip/.jekyll-metadata +0 -0
  413. package/node_modules/jszip/.travis.yml +17 -0
  414. package/node_modules/jszip/CHANGES.md +204 -0
  415. package/node_modules/jszip/LICENSE.markdown +651 -0
  416. package/node_modules/jszip/README.markdown +33 -0
  417. package/node_modules/jszip/deps.js +37 -0
  418. package/node_modules/jszip/dist/jszip.js +11577 -0
  419. package/node_modules/jszip/dist/jszip.min.js +13 -0
  420. package/node_modules/jszip/graph.svg +601 -0
  421. package/node_modules/jszip/index.d.ts +330 -0
  422. package/node_modules/jszip/lib/base64.js +106 -0
  423. package/node_modules/jszip/lib/compressedObject.js +74 -0
  424. package/node_modules/jszip/lib/compressions.js +14 -0
  425. package/node_modules/jszip/lib/crc32.js +77 -0
  426. package/node_modules/jszip/lib/defaults.js +11 -0
  427. package/node_modules/jszip/lib/external.js +18 -0
  428. package/node_modules/jszip/lib/flate.js +85 -0
  429. package/node_modules/jszip/lib/generate/ZipFileWorker.js +539 -0
  430. package/node_modules/jszip/lib/generate/index.js +57 -0
  431. package/node_modules/jszip/lib/index.js +55 -0
  432. package/node_modules/jszip/lib/license_header.js +11 -0
  433. package/node_modules/jszip/lib/load.js +88 -0
  434. package/node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js +74 -0
  435. package/node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +42 -0
  436. package/node_modules/jszip/lib/nodejsUtils.js +57 -0
  437. package/node_modules/jszip/lib/object.js +384 -0
  438. package/node_modules/jszip/lib/readable-stream-browser.js +10 -0
  439. package/node_modules/jszip/lib/reader/ArrayReader.js +57 -0
  440. package/node_modules/jszip/lib/reader/DataReader.js +116 -0
  441. package/node_modules/jszip/lib/reader/NodeBufferReader.js +19 -0
  442. package/node_modules/jszip/lib/reader/StringReader.js +38 -0
  443. package/node_modules/jszip/lib/reader/Uint8ArrayReader.js +22 -0
  444. package/node_modules/jszip/lib/reader/readerFor.js +28 -0
  445. package/node_modules/jszip/lib/signature.js +7 -0
  446. package/node_modules/jszip/lib/stream/ConvertWorker.js +26 -0
  447. package/node_modules/jszip/lib/stream/Crc32Probe.js +24 -0
  448. package/node_modules/jszip/lib/stream/DataLengthProbe.js +29 -0
  449. package/node_modules/jszip/lib/stream/DataWorker.js +116 -0
  450. package/node_modules/jszip/lib/stream/GenericWorker.js +263 -0
  451. package/node_modules/jszip/lib/stream/StreamHelper.js +214 -0
  452. package/node_modules/jszip/lib/support.js +38 -0
  453. package/node_modules/jszip/lib/utf8.js +275 -0
  454. package/node_modules/jszip/lib/utils.js +501 -0
  455. package/node_modules/jszip/lib/zipEntries.js +261 -0
  456. package/node_modules/jszip/lib/zipEntry.js +293 -0
  457. package/node_modules/jszip/lib/zipObject.js +133 -0
  458. package/node_modules/jszip/package.json +67 -0
  459. package/node_modules/jszip/sponsors.md +21 -0
  460. package/node_modules/jszip/tsconfig.json +101 -0
  461. package/node_modules/jszip/vendor/FileSaver.js +247 -0
  462. package/node_modules/lie/README.md +62 -0
  463. package/node_modules/lie/dist/lie.js +350 -0
  464. package/node_modules/lie/dist/lie.min.js +1 -0
  465. package/node_modules/lie/dist/lie.polyfill.js +358 -0
  466. package/node_modules/lie/dist/lie.polyfill.min.js +1 -0
  467. package/node_modules/lie/lib/browser.js +273 -0
  468. package/node_modules/lie/lib/index.js +298 -0
  469. package/node_modules/lie/license.md +7 -0
  470. package/node_modules/lie/lie.d.ts +244 -0
  471. package/node_modules/lie/package.json +69 -0
  472. package/node_modules/lie/polyfill.js +4 -0
  473. package/node_modules/pako/LICENSE +21 -0
  474. package/node_modules/pako/README.md +191 -0
  475. package/node_modules/pako/dist/pako.js +6818 -0
  476. package/node_modules/pako/dist/pako.min.js +1 -0
  477. package/node_modules/pako/dist/pako_deflate.js +3997 -0
  478. package/node_modules/pako/dist/pako_deflate.min.js +1 -0
  479. package/node_modules/pako/dist/pako_inflate.js +3300 -0
  480. package/node_modules/pako/dist/pako_inflate.min.js +1 -0
  481. package/node_modules/pako/index.js +14 -0
  482. package/node_modules/pako/lib/deflate.js +400 -0
  483. package/node_modules/pako/lib/inflate.js +423 -0
  484. package/node_modules/pako/lib/utils/common.js +105 -0
  485. package/node_modules/pako/lib/utils/strings.js +187 -0
  486. package/node_modules/pako/lib/zlib/README +59 -0
  487. package/node_modules/pako/lib/zlib/adler32.js +51 -0
  488. package/node_modules/pako/lib/zlib/constants.js +68 -0
  489. package/node_modules/pako/lib/zlib/crc32.js +59 -0
  490. package/node_modules/pako/lib/zlib/deflate.js +1874 -0
  491. package/node_modules/pako/lib/zlib/gzheader.js +58 -0
  492. package/node_modules/pako/lib/zlib/inffast.js +345 -0
  493. package/node_modules/pako/lib/zlib/inflate.js +1556 -0
  494. package/node_modules/pako/lib/zlib/inftrees.js +343 -0
  495. package/node_modules/pako/lib/zlib/messages.js +32 -0
  496. package/node_modules/pako/lib/zlib/trees.js +1222 -0
  497. package/node_modules/pako/lib/zlib/zstream.js +47 -0
  498. package/node_modules/pako/package.json +44 -0
  499. package/node_modules/process-nextick-args/index.js +45 -0
  500. package/node_modules/process-nextick-args/license.md +19 -0
  501. package/node_modules/process-nextick-args/package.json +25 -0
  502. package/node_modules/process-nextick-args/readme.md +18 -0
  503. package/node_modules/readable-stream/.travis.yml +34 -0
  504. package/node_modules/readable-stream/CONTRIBUTING.md +38 -0
  505. package/node_modules/readable-stream/GOVERNANCE.md +136 -0
  506. package/node_modules/readable-stream/LICENSE +47 -0
  507. package/node_modules/readable-stream/README.md +58 -0
  508. package/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +60 -0
  509. package/node_modules/readable-stream/duplex-browser.js +1 -0
  510. package/node_modules/readable-stream/duplex.js +1 -0
  511. package/node_modules/readable-stream/lib/_stream_duplex.js +131 -0
  512. package/node_modules/readable-stream/lib/_stream_passthrough.js +47 -0
  513. package/node_modules/readable-stream/lib/_stream_readable.js +1019 -0
  514. package/node_modules/readable-stream/lib/_stream_transform.js +214 -0
  515. package/node_modules/readable-stream/lib/_stream_writable.js +685 -0
  516. package/node_modules/readable-stream/lib/internal/streams/BufferList.js +78 -0
  517. package/node_modules/readable-stream/lib/internal/streams/destroy.js +84 -0
  518. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
  519. package/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
  520. package/node_modules/readable-stream/package.json +52 -0
  521. package/node_modules/readable-stream/passthrough.js +1 -0
  522. package/node_modules/readable-stream/readable-browser.js +7 -0
  523. package/node_modules/readable-stream/readable.js +19 -0
  524. package/node_modules/readable-stream/transform.js +1 -0
  525. package/node_modules/readable-stream/writable-browser.js +1 -0
  526. package/node_modules/readable-stream/writable.js +8 -0
  527. package/node_modules/safe-buffer/LICENSE +21 -0
  528. package/node_modules/safe-buffer/README.md +584 -0
  529. package/node_modules/safe-buffer/index.d.ts +187 -0
  530. package/node_modules/safe-buffer/index.js +62 -0
  531. package/node_modules/safe-buffer/package.json +37 -0
  532. package/node_modules/setimmediate/LICENSE.txt +20 -0
  533. package/node_modules/setimmediate/package.json +30 -0
  534. package/node_modules/setimmediate/setImmediate.js +186 -0
  535. package/node_modules/string_decoder/.travis.yml +50 -0
  536. package/node_modules/string_decoder/LICENSE +48 -0
  537. package/node_modules/string_decoder/README.md +47 -0
  538. package/node_modules/string_decoder/lib/string_decoder.js +296 -0
  539. package/node_modules/string_decoder/package.json +31 -0
  540. package/node_modules/util-deprecate/History.md +16 -0
  541. package/node_modules/util-deprecate/LICENSE +24 -0
  542. package/node_modules/util-deprecate/README.md +53 -0
  543. package/node_modules/util-deprecate/browser.js +67 -0
  544. package/node_modules/util-deprecate/node.js +6 -0
  545. package/node_modules/util-deprecate/package.json +27 -0
  546. package/package.json +11 -5
  547. package/packages/docx-core/node_modules/@xmldom/xmldom/CHANGELOG.md +468 -0
  548. package/packages/docx-core/node_modules/@xmldom/xmldom/LICENSE +8 -0
  549. package/packages/docx-core/node_modules/@xmldom/xmldom/SECURITY.md +50 -0
  550. package/packages/docx-core/node_modules/@xmldom/xmldom/index.d.ts +43 -0
  551. package/packages/docx-core/node_modules/@xmldom/xmldom/lib/.eslintrc.yml +2 -0
  552. package/packages/docx-core/node_modules/@xmldom/xmldom/lib/conventions.js +203 -0
  553. package/packages/docx-core/node_modules/@xmldom/xmldom/lib/dom-parser.js +322 -0
  554. package/packages/docx-core/node_modules/@xmldom/xmldom/lib/dom.js +1879 -0
  555. package/packages/docx-core/node_modules/@xmldom/xmldom/lib/entities.js +2166 -0
  556. package/packages/docx-core/node_modules/@xmldom/xmldom/lib/index.js +4 -0
  557. package/packages/docx-core/node_modules/@xmldom/xmldom/lib/sax.js +662 -0
  558. package/packages/docx-core/node_modules/@xmldom/xmldom/package.json +71 -0
  559. package/packages/docx-core/node_modules/@xmldom/xmldom/readme.md +356 -0
  560. package/server.json +31 -0
  561. package/skills/client-email/SKILL.md +143 -0
  562. package/skills/cloud-service-agreement/SKILL.md +8 -99
  563. package/skills/data-privacy-agreement/SKILL.md +10 -97
  564. package/skills/delaware-franchise-tax/SKILL.md +7 -1
  565. package/skills/edit-docx-agreement/SKILL.md +10 -3
  566. package/skills/employment-contract/SKILL.md +10 -95
  567. package/skills/iso-27001-evidence-collection/SKILL.md +7 -1
  568. package/skills/iso-27001-internal-audit/SKILL.md +6 -0
  569. package/skills/nda/SKILL.md +7 -99
  570. package/skills/open-agreements/CONNECTORS.md +1 -1
  571. package/skills/open-agreements/SKILL.md +17 -104
  572. package/skills/recipe-quality-audit/SKILL.md +116 -0
  573. package/skills/safe/SKILL.md +12 -97
  574. package/skills/services-agreement/SKILL.md +8 -99
  575. package/skills/shared/template-filling-execution.md +92 -0
  576. package/skills/soc2-readiness/SKILL.md +7 -1
  577. package/skills/unit-test-philosophy/SKILL.md +12 -1
  578. package/skills/venture-financing/SKILL.md +11 -96
@@ -0,0 +1,749 @@
1
+ import { OOXML, W } from './namespaces.js';
2
+ import { getParagraphText, getParagraphRuns } from './text.js';
3
+ import { extractListLabel, stripListLabel, LabelType } from './list_labels.js';
4
+ import { parseNumberingXml, computeListLabelForParagraph } from './numbering.js';
5
+ import { parseStylesXml, extractParagraphFormatting, extractEffectiveRunFormatting } from './styles.js';
6
+ import { HIGHLIGHT_TAG } from './semantic_tags.js';
7
+ import { computeModalBaseline, computeParagraphFontBaseline, emitFormattingTags, mergeAdjacentTags } from './formatting_tags.js';
8
+ import { isReservedFootnote } from './footnotes.js';
9
+ const SHORT_HEADER_MAX_LENGTH = 50;
10
+ const MAX_HEADER_TEXT_LENGTH = 60;
11
+ const STYLE_EXAMPLE_TEXT_PREVIEW_LENGTH = 50;
12
+ function getWAttr(el, localName) {
13
+ return el.getAttributeNS(OOXML.W_NS, localName) ?? el.getAttribute(`w:${localName}`) ?? el.getAttribute(localName);
14
+ }
15
+ function runHighlightVal(run) {
16
+ const rPr = run.getElementsByTagNameNS(OOXML.W_NS, W.rPr).item(0);
17
+ if (!rPr)
18
+ return null;
19
+ const h = rPr.getElementsByTagNameNS(OOXML.W_NS, W.highlight).item(0);
20
+ if (!h)
21
+ return null;
22
+ const v = getWAttr(h, 'val');
23
+ if (!v || v === 'none')
24
+ return null;
25
+ return v;
26
+ }
27
+ function emitHighlightTagsFromParagraph(p) {
28
+ const runs = getParagraphRuns(p);
29
+ if (runs.length === 0)
30
+ return '';
31
+ const out = [];
32
+ let inHighlight = false;
33
+ for (const tr of runs) {
34
+ const isHighlighted = !!runHighlightVal(tr.r);
35
+ if (isHighlighted && !inHighlight) {
36
+ out.push(`<${HIGHLIGHT_TAG}>`);
37
+ inHighlight = true;
38
+ }
39
+ else if (!isHighlighted && inHighlight) {
40
+ out.push(`</${HIGHLIGHT_TAG}>`);
41
+ inHighlight = false;
42
+ }
43
+ out.push(tr.text);
44
+ }
45
+ if (inHighlight)
46
+ out.push(`</${HIGHLIGHT_TAG}>`);
47
+ return out.join('');
48
+ }
49
+ function fingerprintKey(fp) {
50
+ // Stable JSON-ish key used for Map lookups.
51
+ return `${fp.list_level}|${fp.left_indent_pt.toFixed(1)}|${fp.first_line_indent_pt.toFixed(1)}|${fp.style_name}|${fp.alignment}`;
52
+ }
53
+ /**
54
+ * v0.3: Compact style fingerprint token.
55
+ * Concatenates style name, list level, alignment, and indentation for token-efficient LLM context.
56
+ * Example: "Normal:L-1:LEFT:I0:H0"
57
+ */
58
+ function computeFingerprintToken(fp, styleId) {
59
+ const name = styleId || fp.style_name || 'body';
60
+ const level = `L${fp.list_level}`;
61
+ const align = fp.alignment;
62
+ const indent = `I${Math.round(fp.left_indent_pt)}`;
63
+ const hanging = `H${Math.round(fp.first_line_indent_pt)}`;
64
+ return `${name}:${level}:${align}:${indent}:${hanging}`;
65
+ }
66
+ // Pattern-based header detection fallback (ported from Python ingestor._extract_header_info).
67
+ const HEADER_PATTERN = /^([A-Z][^.!?:]*(?:\s+[A-Z][^.!?:]*)*)([.:]?)(?:\s|$)/;
68
+ function extractHeaderInfo(cleanText) {
69
+ if (!cleanText || cleanText.length < 2)
70
+ return { header_text: null, header_style: null };
71
+ if (!/^[A-Z]/.test(cleanText))
72
+ return { header_text: null, header_style: null };
73
+ const stripped = cleanText.trim();
74
+ if (stripped.length <= SHORT_HEADER_MAX_LENGTH) {
75
+ if (stripped.endsWith('.'))
76
+ return { header_text: stripped.slice(0, -1), header_style: 'title_with_period' };
77
+ if (stripped.endsWith(':'))
78
+ return { header_text: stripped.slice(0, -1), header_style: 'title_with_colon' };
79
+ const words = stripped.split(/\s+/);
80
+ if (words.length <= 5)
81
+ return { header_text: stripped, header_style: 'title_bare' };
82
+ return { header_text: null, header_style: null };
83
+ }
84
+ const m = HEADER_PATTERN.exec(stripped);
85
+ if (!m)
86
+ return { header_text: null, header_style: null };
87
+ const headerText = (m[1] ?? '').trim();
88
+ const terminator = m[2] ?? '';
89
+ const remaining = stripped.slice(m[0].length);
90
+ if (!remaining || headerText.length > MAX_HEADER_TEXT_LENGTH)
91
+ return { header_text: null, header_style: null };
92
+ if (terminator === '.')
93
+ return { header_text: headerText, header_style: 'title_with_period' };
94
+ if (terminator === ':')
95
+ return { header_text: headerText, header_style: 'title_with_colon' };
96
+ return { header_text: headerText, header_style: 'title_bare' };
97
+ }
98
+ function detectRunInHeader(params) {
99
+ const { paragraph, paragraphPPr, paragraphStyleId, styles } = params;
100
+ const punct = new Set(['.', ':', '-']);
101
+ // Use visible runs only (field code text stripped in getParagraphRuns()).
102
+ const runs = getParagraphRuns(paragraph);
103
+ if (runs.length === 0)
104
+ return null;
105
+ // Group by run element, preserving order.
106
+ const orderedUniqueRuns = [];
107
+ const seen = new Set();
108
+ for (const tr of runs) {
109
+ if (!seen.has(tr.r)) {
110
+ seen.add(tr.r);
111
+ orderedUniqueRuns.push(tr.r);
112
+ }
113
+ }
114
+ let headerText = '';
115
+ let formatting = null;
116
+ let headerCharCount = 0;
117
+ for (const r of orderedUniqueRuns) {
118
+ const fmt = extractEffectiveRunFormatting({ run: r, paragraphPPr, paragraphStyleId, styles });
119
+ const isHeaderStyle = fmt.bold || fmt.underline;
120
+ if (!isHeaderStyle)
121
+ break;
122
+ // Accumulate run text.
123
+ const ts = Array.from(r.getElementsByTagNameNS(OOXML.W_NS, W.t));
124
+ for (const t of ts) {
125
+ const tc = t.textContent ?? '';
126
+ headerText += tc;
127
+ headerCharCount += tc.length;
128
+ }
129
+ if (!formatting)
130
+ formatting = { bold: fmt.bold, italic: fmt.italic, underline: fmt.underline };
131
+ }
132
+ const trimmed = headerText.trim();
133
+ if (!trimmed)
134
+ return null;
135
+ if (!punct.has(trimmed[trimmed.length - 1]))
136
+ return null;
137
+ if (!formatting)
138
+ return null;
139
+ return { raw_text: trimmed, formatting, headerCharCount };
140
+ }
141
+ function inferSemanticName(params) {
142
+ const { fp, nodes } = params;
143
+ // Find first label_type if present.
144
+ let labelType = null;
145
+ for (const n of nodes) {
146
+ if (n.list_metadata.label_type) {
147
+ labelType = n.list_metadata.label_type;
148
+ break;
149
+ }
150
+ }
151
+ const listLevel = fp.list_level;
152
+ if (listLevel >= 0) {
153
+ if (listLevel === 0) {
154
+ if (labelType === LabelType.ARTICLE)
155
+ return { base_id: 'article', display_name: 'Article Heading' };
156
+ if (labelType === LabelType.SECTION)
157
+ return { base_id: 'section', display_name: 'Section Heading' };
158
+ if (labelType === LabelType.ROMAN)
159
+ return { base_id: 'roman_section', display_name: 'Roman Numeral Section' };
160
+ return { base_id: 'top_level', display_name: 'Top-Level List Item' };
161
+ }
162
+ if (listLevel === 1) {
163
+ if (labelType === LabelType.LETTER)
164
+ return { base_id: 'subsection', display_name: 'Subsection (a)/(A)' };
165
+ if (labelType === LabelType.NUMBER)
166
+ return { base_id: 'subsection_number', display_name: 'Numbered Subsection' };
167
+ if (labelType === LabelType.ROMAN)
168
+ return { base_id: 'subsection_roman', display_name: 'Roman Subsection' };
169
+ return { base_id: 'level_1', display_name: `Level ${listLevel} List Item` };
170
+ }
171
+ if (labelType === LabelType.ROMAN)
172
+ return { base_id: `level_${listLevel}_roman`, display_name: `Level ${listLevel} Roman` };
173
+ if (labelType === LabelType.LETTER)
174
+ return { base_id: `level_${listLevel}_letter`, display_name: `Level ${listLevel} Letter` };
175
+ return { base_id: `level_${listLevel}`, display_name: `Level ${listLevel} List Item` };
176
+ }
177
+ // Non-list.
178
+ const styleName = fp.style_name.toLowerCase().replace(/\s+/g, '_');
179
+ if (fp.left_indent_pt > 0)
180
+ return { base_id: 'indent_block', display_name: 'Indented Block' };
181
+ if (styleName.includes('heading') || styleName.includes('title'))
182
+ return { base_id: 'heading', display_name: 'Heading' };
183
+ if (styleName.includes('quote') || styleName.includes('block'))
184
+ return { base_id: 'block_quote', display_name: 'Block Quote' };
185
+ return { base_id: 'body', display_name: 'Body Text' };
186
+ }
187
+ export function discoverStyles(nodes) {
188
+ const groups = new Map();
189
+ for (const n of nodes) {
190
+ const key = fingerprintKey(n.style_fingerprint);
191
+ const g = groups.get(key);
192
+ if (g)
193
+ g.nodes.push(n);
194
+ else
195
+ groups.set(key, { fp: n.style_fingerprint, nodes: [n] });
196
+ }
197
+ const used = {};
198
+ const styles = new Map();
199
+ const fpToStyle = new Map();
200
+ for (const [fpKey, g] of groups.entries()) {
201
+ const { base_id, display_name } = inferSemanticName({ fp: g.fp, nodes: g.nodes });
202
+ let styleId = base_id;
203
+ if (used[base_id] !== undefined) {
204
+ used[base_id] += 1;
205
+ styleId = `${base_id}_${used[base_id]}`;
206
+ }
207
+ else {
208
+ used[base_id] = 0;
209
+ }
210
+ const median = g.nodes[Math.floor(g.nodes.length / 2)];
211
+ const info = {
212
+ style_id: styleId,
213
+ display_name,
214
+ fingerprint: g.fp,
215
+ example_node_id: median.id,
216
+ example_text: median.clean_text.slice(0, STYLE_EXAMPLE_TEXT_PREVIEW_LENGTH),
217
+ count: g.nodes.length,
218
+ dominant_alignment: g.fp.alignment,
219
+ };
220
+ styles.set(styleId, info);
221
+ fpToStyle.set(fpKey, styleId);
222
+ }
223
+ return { styles, fingerprint_to_style: fpToStyle };
224
+ }
225
+ function headerStripFromText(params) {
226
+ // Mirrors Python TOONRenderer header stripping.
227
+ const { header } = params;
228
+ let { text } = params;
229
+ if (!header)
230
+ return text;
231
+ const headerNorm = header.trim().toLowerCase();
232
+ const textLower = text.toLowerCase();
233
+ for (const punct of [':', '.', '-', ';', '']) {
234
+ const testPrefix = `${headerNorm}${punct}`;
235
+ if (textLower.startsWith(testPrefix)) {
236
+ text = text.slice(testPrefix.length).trimStart();
237
+ return text;
238
+ }
239
+ }
240
+ if (text.startsWith(header)) {
241
+ text = text.slice(header.length).replace(/^[.:\-;]+/, '').trimStart();
242
+ }
243
+ return text;
244
+ }
245
+ export function renderToon(nodes, options = {}) {
246
+ const lines = ['#SCHEMA id | list_label | header | style | text'];
247
+ for (const n of nodes) {
248
+ let text = n.tagged_text;
249
+ if (n.header)
250
+ text = headerStripFromText({ header: n.header, text });
251
+ let header = n.header;
252
+ if (header && !text) {
253
+ text = header;
254
+ header = '';
255
+ }
256
+ const style = options.compact ? computeFingerprintToken(n.style_fingerprint, n.style) : n.style;
257
+ lines.push(`${n.id} | ${n.list_label} | ${header} | ${style} | ${text}`);
258
+ }
259
+ return lines.join('\n');
260
+ }
261
+ export function buildDocumentView(params) {
262
+ const { documentXml, stylesXml, numberingXml, opts } = params;
263
+ const includeSemantic = opts?.include_semantic_tags ?? true;
264
+ void includeSemantic;
265
+ const stylesModel = parseStylesXml(stylesXml);
266
+ void stylesModel;
267
+ const numberingModel = parseNumberingXml(numberingXml);
268
+ void numberingModel;
269
+ const counters = new Map();
270
+ void counters;
271
+ const body = documentXml.getElementsByTagNameNS(OOXML.W_NS, W.body).item(0);
272
+ if (!body)
273
+ return { nodes: [], styles: { styles: new Map(), fingerprint_to_style: new Map() } };
274
+ const paragraphs = Array.from(body.getElementsByTagNameNS(OOXML.W_NS, W.p));
275
+ const nodes = [];
276
+ for (const p of paragraphs) {
277
+ const prev = p.previousSibling;
278
+ void prev;
279
+ }
280
+ return { nodes, styles: { styles: new Map(), fingerprint_to_style: new Map() } };
281
+ }
282
+ // ── Helpers for building AnnotatedRun arrays ─────────────────────────
283
+ /**
284
+ * Resolve the hyperlink URL for a run element by checking if its parent is a
285
+ * `w:hyperlink` element with an `r:id` attribute pointing into the rels map.
286
+ */
287
+ function resolveRunHyperlinkUrl(runEl, relsMap) {
288
+ if (!relsMap || relsMap.size === 0)
289
+ return null;
290
+ const parent = runEl.parentNode;
291
+ if (!parent || parent.localName !== W.hyperlink)
292
+ return null;
293
+ // r:id attribute can be namespaced or prefixed.
294
+ const rId = parent.getAttributeNS(OOXML.R_NS, 'id') ??
295
+ parent.getAttribute('r:id') ??
296
+ null;
297
+ if (!rId)
298
+ return null;
299
+ return relsMap.get(rId) ?? null;
300
+ }
301
+ /**
302
+ * Build AnnotatedRun[] for a single paragraph. All runs are included;
303
+ * `isHeaderRun` is set to false initially (caller marks header runs separately).
304
+ */
305
+ function buildAnnotatedRuns(params) {
306
+ const { p, paragraphPPr, paragraphStyleId, stylesModel, relsMap } = params;
307
+ const textRuns = getParagraphRuns(p);
308
+ const annotated = [];
309
+ // Track unique run elements to avoid double-counting when getParagraphRuns
310
+ // returns multiple TextRun entries for the same w:r element.
311
+ const seenRunEls = new Set();
312
+ for (const tr of textRuns) {
313
+ if (seenRunEls.has(tr.r)) {
314
+ // Append text to existing entry for this run element.
315
+ const existing = annotated[annotated.length - 1];
316
+ existing.text += tr.text;
317
+ existing.charCount += tr.text.length;
318
+ continue;
319
+ }
320
+ seenRunEls.add(tr.r);
321
+ const formatting = extractEffectiveRunFormatting({
322
+ run: tr.r,
323
+ paragraphPPr,
324
+ paragraphStyleId,
325
+ styles: stylesModel,
326
+ });
327
+ const hyperlinkUrl = resolveRunHyperlinkUrl(tr.r, relsMap);
328
+ annotated.push({
329
+ text: tr.text,
330
+ formatting,
331
+ hyperlinkUrl,
332
+ charCount: tr.text.length,
333
+ isHeaderRun: false,
334
+ });
335
+ }
336
+ return annotated;
337
+ }
338
+ // ── Footnote marker helpers (view-only) ─────────────────────────────
339
+ /**
340
+ * Build a map from footnote ID → display number by scanning documentXml
341
+ * for w:footnoteReference elements in DOM order (skipping reserved IDs).
342
+ */
343
+ function buildFootnoteDisplayMap(documentXml, footnotesXml) {
344
+ const reservedIds = new Set();
345
+ if (footnotesXml) {
346
+ const fnEls = footnotesXml.getElementsByTagNameNS(OOXML.W_NS, W.footnotes);
347
+ const container = fnEls.length > 0 ? fnEls.item(0) : footnotesXml.documentElement;
348
+ const footnoteEls = container.getElementsByTagNameNS(OOXML.W_NS, W.footnote);
349
+ for (let i = 0; i < footnoteEls.length; i++) {
350
+ const el = footnoteEls.item(i);
351
+ if (isReservedFootnote(el)) {
352
+ const idStr = getWAttr(el, 'id');
353
+ if (idStr)
354
+ reservedIds.add(parseInt(idStr, 10));
355
+ }
356
+ }
357
+ }
358
+ const refs = documentXml.getElementsByTagNameNS(OOXML.W_NS, W.footnoteReference);
359
+ const map = new Map();
360
+ let displayNum = 1;
361
+ for (let i = 0; i < refs.length; i++) {
362
+ const ref = refs.item(i);
363
+ const idStr = getWAttr(ref, 'id');
364
+ if (!idStr)
365
+ continue;
366
+ const id = parseInt(idStr, 10);
367
+ if (reservedIds.has(id))
368
+ continue;
369
+ if (!map.has(id)) {
370
+ map.set(id, displayNum++);
371
+ }
372
+ }
373
+ return map;
374
+ }
375
+ /**
376
+ * Compute footnote marker insertion points for a paragraph.
377
+ * Returns an array of { offset, marker } sorted by offset descending
378
+ * for safe right-to-left insertion into the text string.
379
+ *
380
+ * Self-contained: only inspects the paragraph DOM for w:footnoteReference
381
+ * elements. Does NOT modify getParagraphRuns or getParagraphText.
382
+ */
383
+ function getFootnoteMarkersForParagraph(p, displayMap) {
384
+ if (displayMap.size === 0)
385
+ return [];
386
+ // Walk through direct children (and hyperlink children) to find w:r elements
387
+ // and their visible text, tracking position. When we find a footnoteReference,
388
+ // record its position.
389
+ const markers = [];
390
+ let visibleOffset = 0;
391
+ // We need to iterate runs in paragraph order. Use the same approach as getParagraphRuns
392
+ // but also detect footnoteReference elements.
393
+ const rElems = Array.from(p.getElementsByTagNameNS(OOXML.W_NS, W.r));
394
+ // Track field state to skip field codes (same as getParagraphRuns)
395
+ let fieldState = 0; // 0=outside, 1=in_code, 2=in_result
396
+ for (const r of rElems) {
397
+ let runVisibleLen = 0;
398
+ let hasFootnoteRef = false;
399
+ let footnoteId = -1;
400
+ for (const child of Array.from(r.childNodes)) {
401
+ if (child.nodeType !== 1)
402
+ continue;
403
+ const el = child;
404
+ if (el.namespaceURI !== OOXML.W_NS)
405
+ continue;
406
+ if (el.localName === W.fldChar) {
407
+ const typ = getWAttr(el, 'fldCharType') ?? '';
408
+ if (typ === 'begin')
409
+ fieldState = 1;
410
+ else if (typ === 'separate')
411
+ fieldState = 2;
412
+ else if (typ === 'end')
413
+ fieldState = 0;
414
+ continue;
415
+ }
416
+ if (fieldState === 1)
417
+ continue; // skip field code
418
+ if (el.localName === W.t) {
419
+ runVisibleLen += (el.textContent ?? '').length;
420
+ }
421
+ else if (el.localName === W.tab || el.localName === W.br) {
422
+ runVisibleLen += 1;
423
+ }
424
+ else if (el.localName === W.footnoteReference) {
425
+ hasFootnoteRef = true;
426
+ const idStr = getWAttr(el, 'id');
427
+ if (idStr)
428
+ footnoteId = parseInt(idStr, 10);
429
+ }
430
+ }
431
+ // The footnote reference position is at the end of this run's visible text
432
+ if (hasFootnoteRef && footnoteId >= 0) {
433
+ const displayNum = displayMap.get(footnoteId);
434
+ if (displayNum != null) {
435
+ markers.push({
436
+ offset: visibleOffset + runVisibleLen,
437
+ marker: `[^${displayNum}]`,
438
+ });
439
+ }
440
+ }
441
+ visibleOffset += runVisibleLen;
442
+ }
443
+ // Sort descending by offset for safe right-to-left insertion
444
+ markers.sort((a, b) => b.offset - a.offset);
445
+ return markers;
446
+ }
447
+ /**
448
+ * Inject footnote markers into a text string at the given offsets.
449
+ * Markers must be sorted descending by offset.
450
+ */
451
+ function injectFootnoteMarkers(text, markers) {
452
+ if (markers.length === 0)
453
+ return text;
454
+ let result = text;
455
+ for (const { offset, marker } of markers) {
456
+ // Clamp offset to text length
457
+ const pos = Math.min(offset, result.length);
458
+ result = result.slice(0, pos) + marker + result.slice(pos);
459
+ }
460
+ return result;
461
+ }
462
+ export function buildNodesForDocumentView(params) {
463
+ const { paragraphs, stylesXml, numberingXml, relsMap } = params;
464
+ const includeSemantic = params.include_semantic_tags ?? true;
465
+ const showFormatting = params.show_formatting ?? false;
466
+ const formattingMode = params.formatting_mode ?? 'compact';
467
+ // Build footnote display number map if documentXml is provided
468
+ const footnoteDisplayMap = params.documentXml
469
+ ? buildFootnoteDisplayMap(params.documentXml, params.footnotesXml ?? null)
470
+ : new Map();
471
+ const stylesModel = parseStylesXml(stylesXml);
472
+ const numberingModel = parseNumberingXml(numberingXml);
473
+ const counters = new Map();
474
+ // ── Pass 1 (formatting mode): pre-compute annotated runs per paragraph ──
475
+ // We also collect all non-header, non-heading-style body runs for a
476
+ // document-wide FormattingBaseline.
477
+ const paraAnnotatedRuns = new Map();
478
+ const allBodyRuns = [];
479
+ if (showFormatting) {
480
+ for (const { p } of paragraphs) {
481
+ const paraPPr = p.getElementsByTagNameNS(OOXML.W_NS, W.pPr).item(0);
482
+ const paraFmt = extractParagraphFormatting(paraPPr ?? null, stylesModel);
483
+ const runs = buildAnnotatedRuns({
484
+ p,
485
+ paragraphPPr: paraPPr ?? null,
486
+ paragraphStyleId: paraFmt.styleId,
487
+ stylesModel,
488
+ relsMap,
489
+ });
490
+ // Mark run-in header prefix runs so baseline suppression ignores them.
491
+ try {
492
+ const hdr = detectRunInHeader({
493
+ paragraph: p,
494
+ paragraphPPr: paraPPr ?? null,
495
+ paragraphStyleId: paraFmt.styleId,
496
+ styles: stylesModel,
497
+ });
498
+ if (hdr && hdr.headerCharCount > 0) {
499
+ let seen = 0;
500
+ for (const r of runs) {
501
+ if (seen >= hdr.headerCharCount)
502
+ break;
503
+ r.isHeaderRun = true;
504
+ seen += r.charCount;
505
+ }
506
+ }
507
+ }
508
+ catch {
509
+ // Ignore header-detection errors for baseline precomputation.
510
+ }
511
+ paraAnnotatedRuns.set(p, runs);
512
+ // Skip heading-style paragraphs from baseline computation.
513
+ const styleName = (paraFmt.styleName ?? '').toLowerCase();
514
+ const isHeadingStyle = styleName.includes('heading') || styleName.includes('title');
515
+ if (!isHeadingStyle) {
516
+ for (const r of runs) {
517
+ if (r.charCount > 0)
518
+ allBodyRuns.push(r);
519
+ }
520
+ }
521
+ }
522
+ }
523
+ const docBaseline = showFormatting
524
+ ? computeModalBaseline(allBodyRuns, { formattingMode })
525
+ : { bold: false, italic: false, underline: false, suppressed: false };
526
+ // ── Pass 2: main loop ──
527
+ const nodes = [];
528
+ for (let idx = 0; idx < paragraphs.length; idx++) {
529
+ const { id, p } = paragraphs[idx];
530
+ const paraPPr = p.getElementsByTagNameNS(OOXML.W_NS, W.pPr).item(0);
531
+ const paraFmt = extractParagraphFormatting(paraPPr ?? null, stylesModel);
532
+ // Visible clean text (field codes stripped).
533
+ const fullText = getParagraphText(p).replace(/\r/g, '').replace(/\n/g, '').trim();
534
+ if (!fullText)
535
+ continue;
536
+ // Numbering (auto-numbered) info from numPr.
537
+ let numId = null;
538
+ let ilvl = null;
539
+ const numPr = paraPPr ? paraPPr.getElementsByTagNameNS(OOXML.W_NS, W.numPr).item(0) : null;
540
+ if (numPr) {
541
+ const numIdEl = numPr.getElementsByTagNameNS(OOXML.W_NS, W.numId).item(0);
542
+ const ilvlEl = numPr.getElementsByTagNameNS(OOXML.W_NS, W.ilvl).item(0);
543
+ const numIdVal = numIdEl ? getWAttr(numIdEl, 'val') : null;
544
+ const ilvlVal = ilvlEl ? getWAttr(ilvlEl, 'val') : null;
545
+ if (numIdVal)
546
+ numId = numIdVal;
547
+ if (ilvlVal != null) {
548
+ const v = Number.parseInt(ilvlVal, 10);
549
+ if (!Number.isNaN(v))
550
+ ilvl = v;
551
+ }
552
+ }
553
+ let labelString = '';
554
+ let labelType = null;
555
+ let cleanTextNoLabel = fullText;
556
+ let isAutoNumbered = false;
557
+ let listLevel = -1;
558
+ let manualLabelMatchEnd = 0;
559
+ if (numId && ilvl != null) {
560
+ isAutoNumbered = true;
561
+ listLevel = ilvl;
562
+ labelString = computeListLabelForParagraph(numberingModel, counters, { numId, ilvl }) || '';
563
+ if (labelString) {
564
+ const cls = extractListLabel(labelString);
565
+ labelType = cls.label_type;
566
+ }
567
+ }
568
+ else {
569
+ // Manual label detection from visible text.
570
+ const stripped = stripListLabel(fullText);
571
+ cleanTextNoLabel = stripped.stripped_text;
572
+ if (stripped.result.label) {
573
+ labelString = stripped.result.label;
574
+ labelType = stripped.result.label_type;
575
+ listLevel = 0;
576
+ manualLabelMatchEnd = stripped.result.match_end;
577
+ }
578
+ }
579
+ // Run-in header detection (formatting-based) first.
580
+ let headerText = null;
581
+ let headerStyle = null;
582
+ let headerFormatting = null;
583
+ let headerCharCount = 0;
584
+ try {
585
+ const hdr = detectRunInHeader({ paragraph: p, paragraphPPr: paraPPr ?? null, paragraphStyleId: paraFmt.styleId, styles: stylesModel });
586
+ if (hdr) {
587
+ headerText = hdr.raw_text.replace(/[.:\-]+$/g, '');
588
+ headerStyle = 'run_in_header';
589
+ headerFormatting = hdr.formatting;
590
+ headerCharCount = hdr.headerCharCount;
591
+ }
592
+ }
593
+ catch {
594
+ // ignore
595
+ }
596
+ if (!headerText) {
597
+ const fallback = extractHeaderInfo(cleanTextNoLabel);
598
+ headerText = fallback.header_text;
599
+ headerStyle = fallback.header_style;
600
+ }
601
+ // ── Tag emission ──
602
+ let tagged = cleanTextNoLabel;
603
+ if (showFormatting) {
604
+ // Formatting tags mode: emit inline <b>/<i>/<u>/<highlighting>/<a> tags.
605
+ const annotatedRuns = paraAnnotatedRuns.get(p) ?? [];
606
+ // Mark header-prefix runs as isHeaderRun.
607
+ if (headerCharCount > 0) {
608
+ let charsSeen = 0;
609
+ for (const ar of annotatedRuns) {
610
+ if (charsSeen >= headerCharCount)
611
+ break;
612
+ ar.isHeaderRun = true;
613
+ charsSeen += ar.charCount;
614
+ }
615
+ }
616
+ // Handle manual label: skip runs whose text falls within the label portion.
617
+ let bodyRuns;
618
+ if (manualLabelMatchEnd > 0) {
619
+ // Skip characters in the label portion.
620
+ bodyRuns = [];
621
+ let charsSeen = 0;
622
+ for (const ar of annotatedRuns) {
623
+ const runEnd = charsSeen + ar.charCount;
624
+ if (runEnd <= manualLabelMatchEnd) {
625
+ // Entire run is within the label — skip it.
626
+ charsSeen = runEnd;
627
+ continue;
628
+ }
629
+ if (charsSeen < manualLabelMatchEnd) {
630
+ // Run spans the label boundary — take only the body portion.
631
+ const bodyStart = manualLabelMatchEnd - charsSeen;
632
+ bodyRuns.push({
633
+ ...ar,
634
+ text: ar.text.slice(bodyStart),
635
+ charCount: ar.charCount - bodyStart,
636
+ });
637
+ charsSeen = runEnd;
638
+ continue;
639
+ }
640
+ bodyRuns.push(ar);
641
+ charsSeen = runEnd;
642
+ }
643
+ // Also trim leading whitespace from the first body run (matching stripListLabel behavior).
644
+ if (bodyRuns.length > 0) {
645
+ const first = bodyRuns[0];
646
+ const trimmed = first.text.replace(/^\s+/, '');
647
+ if (trimmed.length < first.text.length) {
648
+ bodyRuns[0] = { ...first, text: trimmed, charCount: trimmed.length };
649
+ }
650
+ }
651
+ }
652
+ else {
653
+ bodyRuns = annotatedRuns;
654
+ }
655
+ // Emit formatting tags from run-level metadata.
656
+ const paraFontBaseline = computeParagraphFontBaseline(bodyRuns, { formattingMode });
657
+ tagged = emitFormattingTags({ runs: bodyRuns, baseline: docBaseline, fontBaseline: paraFontBaseline });
658
+ tagged = mergeAdjacentTags(tagged);
659
+ }
660
+ else if (includeSemantic) {
661
+ // Legacy path: emit only highlight tags (no formatting tags).
662
+ tagged = emitHighlightTagsFromParagraph(p).replace(/\r/g, '').replace(/\n/g, '').trim();
663
+ }
664
+ const fp = {
665
+ list_level: listLevel,
666
+ left_indent_pt: Math.round(paraFmt.leftIndentPt * 10) / 10,
667
+ first_line_indent_pt: Math.round(paraFmt.firstLineIndentPt * 10) / 10,
668
+ style_name: paraFmt.styleName,
669
+ alignment: paraFmt.alignment,
670
+ };
671
+ // Body run formatting: pick the first visible run after any header prefix.
672
+ let bodyFmt = null;
673
+ try {
674
+ const trs = getParagraphRuns(p);
675
+ const seenRun = new Set();
676
+ for (const tr of trs) {
677
+ if (seenRun.has(tr.r))
678
+ continue;
679
+ seenRun.add(tr.r);
680
+ const fmt = extractEffectiveRunFormatting({
681
+ run: tr.r,
682
+ paragraphPPr: paraPPr ?? null,
683
+ paragraphStyleId: paraFmt.styleId,
684
+ styles: stylesModel,
685
+ });
686
+ // v0.3: Improved body detection.
687
+ // If there is a header, we want the first run that IS NOT the header.
688
+ if (headerText && (headerText.length > 0)) {
689
+ if (tr.text.trim() === headerText.trim() || headerText.includes(tr.text)) {
690
+ continue;
691
+ }
692
+ }
693
+ bodyFmt = fmt;
694
+ break;
695
+ }
696
+ // Fallback: if no body runs found, use paragraph-level properties
697
+ if (!bodyFmt) {
698
+ bodyFmt = extractEffectiveRunFormatting({
699
+ run: p,
700
+ paragraphPPr: paraPPr ?? null,
701
+ paragraphStyleId: paraFmt.styleId,
702
+ styles: stylesModel,
703
+ });
704
+ }
705
+ }
706
+ catch {
707
+ bodyFmt = null;
708
+ }
709
+ // Inject footnote [^N] markers into view text (view-only, not shared text primitives)
710
+ const fnMarkers = getFootnoteMarkersForParagraph(p, footnoteDisplayMap);
711
+ if (fnMarkers.length > 0) {
712
+ tagged = injectFootnoteMarkers(tagged, fnMarkers);
713
+ }
714
+ nodes.push({
715
+ id,
716
+ list_label: labelString,
717
+ header: headerText ?? '',
718
+ style: '', // filled after style discovery
719
+ text: tagged, // filled after header stripping at render time
720
+ clean_text: cleanTextNoLabel,
721
+ tagged_text: tagged,
722
+ list_metadata: {
723
+ list_level: listLevel,
724
+ label_type: labelType,
725
+ label_string: labelString,
726
+ header_text: headerText,
727
+ header_style: headerStyle,
728
+ header_formatting: headerFormatting,
729
+ is_auto_numbered: isAutoNumbered,
730
+ },
731
+ style_fingerprint: fp,
732
+ paragraph_style_id: paraFmt.styleId,
733
+ paragraph_style_name: paraFmt.styleName,
734
+ paragraph_alignment: paraFmt.alignment,
735
+ paragraph_indents_pt: { left: fp.left_indent_pt, first_line: fp.first_line_indent_pt },
736
+ numbering: { num_id: numId, ilvl, is_auto_numbered: isAutoNumbered },
737
+ header_formatting: headerFormatting,
738
+ body_run_formatting: bodyFmt,
739
+ });
740
+ }
741
+ const styles = discoverStyles(nodes);
742
+ for (const n of nodes) {
743
+ const sid = styles.fingerprint_to_style.get(fingerprintKey(n.style_fingerprint));
744
+ n.style = sid ?? (n.style_fingerprint.list_level >= 0 ? `level_${n.style_fingerprint.list_level}` : 'body');
745
+ n.text = n.tagged_text;
746
+ }
747
+ return { nodes, styles };
748
+ }
749
+ //# sourceMappingURL=document_view.js.map