@beyondwork/docx-react-component 1.0.29 → 1.0.31

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 (383) 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/responsive-chrome.ts +46 -0
  180. package/src/ui-tailwind/chrome/review-queue-bar.tsx +97 -0
  181. package/src/ui-tailwind/chrome/tw-alert-banner.tsx +64 -0
  182. package/src/ui-tailwind/chrome/tw-context-analytics-summary.tsx +122 -0
  183. package/src/ui-tailwind/chrome/tw-image-context-toolbar.tsx +121 -0
  184. package/src/ui-tailwind/chrome/tw-layout-panel.tsx +114 -0
  185. package/src/ui-tailwind/chrome/tw-object-context-toolbar.tsx +30 -0
  186. package/src/ui-tailwind/chrome/tw-page-ruler.tsx +365 -0
  187. package/src/ui-tailwind/chrome/tw-selection-tool-blocked.tsx +23 -0
  188. package/src/ui-tailwind/chrome/tw-selection-tool-comment.tsx +35 -0
  189. package/src/ui-tailwind/chrome/tw-selection-tool-formatting.tsx +37 -0
  190. package/src/ui-tailwind/chrome/tw-selection-tool-host.tsx +303 -0
  191. package/src/ui-tailwind/chrome/tw-selection-tool-structure.tsx +116 -0
  192. package/src/ui-tailwind/chrome/tw-selection-tool-suggestion.tsx +29 -0
  193. package/src/ui-tailwind/chrome/tw-selection-tool-workflow.tsx +27 -0
  194. package/src/ui-tailwind/chrome/tw-selection-toolbar.tsx +186 -0
  195. package/src/ui-tailwind/chrome/tw-suggestion-card.tsx +139 -0
  196. package/src/ui-tailwind/chrome/tw-table-context-toolbar.tsx +250 -0
  197. package/src/ui-tailwind/chrome/tw-unsaved-modal.tsx +58 -0
  198. package/src/ui-tailwind/chrome/use-before-unload.ts +20 -0
  199. package/src/ui-tailwind/editor-surface/perf-probe.ts +179 -0
  200. package/src/ui-tailwind/editor-surface/pm-command-bridge.ts +189 -0
  201. package/src/ui-tailwind/editor-surface/pm-contextual-ui.ts +31 -0
  202. package/src/ui-tailwind/editor-surface/pm-decorations.ts +411 -0
  203. package/src/ui-tailwind/editor-surface/pm-position-map.ts +123 -0
  204. package/src/ui-tailwind/editor-surface/pm-schema.ts +927 -0
  205. package/src/ui-tailwind/editor-surface/pm-state-from-snapshot.ts +567 -0
  206. package/src/ui-tailwind/editor-surface/search-plugin.ts +168 -0
  207. package/src/ui-tailwind/editor-surface/surface-build-keys.ts +63 -0
  208. package/src/ui-tailwind/editor-surface/tw-caret.tsx +12 -0
  209. package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +150 -0
  210. package/src/ui-tailwind/editor-surface/tw-inline-token.tsx +129 -0
  211. package/src/ui-tailwind/editor-surface/tw-opaque-block.tsx +58 -0
  212. package/src/ui-tailwind/editor-surface/tw-paragraph-block.tsx +151 -0
  213. package/src/ui-tailwind/editor-surface/tw-prosemirror-surface.tsx +1047 -0
  214. package/src/ui-tailwind/editor-surface/tw-segment-view.tsx +111 -0
  215. package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +503 -0
  216. package/src/ui-tailwind/index.ts +62 -0
  217. package/src/ui-tailwind/page-chrome-model.ts +27 -0
  218. package/src/ui-tailwind/review/tw-comment-sidebar.tsx +406 -0
  219. package/src/ui-tailwind/review/tw-health-panel.tsx +149 -0
  220. package/src/ui-tailwind/review/tw-review-rail.tsx +130 -0
  221. package/src/ui-tailwind/review/tw-revision-sidebar.tsx +164 -0
  222. package/src/ui-tailwind/status/tw-status-bar.tsx +65 -0
  223. package/{dist → src}/ui-tailwind/theme/editor-theme.css +58 -40
  224. package/src/ui-tailwind/toolbar/toolbar-layout.ts +47 -0
  225. package/src/ui-tailwind/toolbar/tw-toolbar-icon-button.tsx +52 -0
  226. package/src/ui-tailwind/toolbar/tw-toolbar.tsx +1478 -0
  227. package/src/ui-tailwind/tw-review-workspace.tsx +1587 -0
  228. package/src/validation/README.md +3 -0
  229. package/src/validation/compatibility-engine.ts +878 -0
  230. package/src/validation/compatibility-report.ts +161 -0
  231. package/src/validation/diagnostics.ts +204 -0
  232. package/src/validation/docx-comment-proof.ts +720 -0
  233. package/src/validation/import-diagnostics.ts +128 -0
  234. package/src/validation/low-priority-word-surfaces.ts +373 -0
  235. package/dist/canonical-document-BLEbzL2J.d.cts +0 -844
  236. package/dist/canonical-document-BLEbzL2J.d.ts +0 -844
  237. package/dist/chunk-2FJS5GZM.js +0 -763
  238. package/dist/chunk-2FJS5GZM.js.map +0 -1
  239. package/dist/chunk-2OQBZS3F.js +0 -446
  240. package/dist/chunk-2OQBZS3F.js.map +0 -1
  241. package/dist/chunk-2S7W4KFO.js +0 -127
  242. package/dist/chunk-2S7W4KFO.js.map +0 -1
  243. package/dist/chunk-2TG72QSW.js +0 -3874
  244. package/dist/chunk-2TG72QSW.js.map +0 -1
  245. package/dist/chunk-36QNIZBO.js +0 -532
  246. package/dist/chunk-36QNIZBO.js.map +0 -1
  247. package/dist/chunk-4AQOYAW4.js +0 -3069
  248. package/dist/chunk-4AQOYAW4.js.map +0 -1
  249. package/dist/chunk-4D5EWJ3P.js +0 -77
  250. package/dist/chunk-4D5EWJ3P.js.map +0 -1
  251. package/dist/chunk-5FN54NDH.js +0 -2257
  252. package/dist/chunk-5FN54NDH.js.map +0 -1
  253. package/dist/chunk-BOYGQYRQ.js +0 -7306
  254. package/dist/chunk-BOYGQYRQ.js.map +0 -1
  255. package/dist/chunk-CN3XMECL.js +0 -212
  256. package/dist/chunk-CN3XMECL.js.map +0 -1
  257. package/dist/chunk-EBI3BX6U.js +0 -164
  258. package/dist/chunk-EBI3BX6U.js.map +0 -1
  259. package/dist/chunk-EILUG3VB.js +0 -1275
  260. package/dist/chunk-EILUG3VB.js.map +0 -1
  261. package/dist/chunk-FUDY333O.js +0 -70
  262. package/dist/chunk-FUDY333O.js.map +0 -1
  263. package/dist/chunk-GBVOWFIK.js +0 -1237
  264. package/dist/chunk-GBVOWFIK.js.map +0 -1
  265. package/dist/chunk-H4TQ3H3Y.js +0 -262
  266. package/dist/chunk-H4TQ3H3Y.js.map +0 -1
  267. package/dist/chunk-JGB3IXZO.js +0 -189
  268. package/dist/chunk-JGB3IXZO.js.map +0 -1
  269. package/dist/chunk-KD2QRQPY.js +0 -4342
  270. package/dist/chunk-KD2QRQPY.js.map +0 -1
  271. package/dist/chunk-KLMXQVYK.js +0 -369
  272. package/dist/chunk-KLMXQVYK.js.map +0 -1
  273. package/dist/chunk-KZUG5KFQ.js +0 -214
  274. package/dist/chunk-KZUG5KFQ.js.map +0 -1
  275. package/dist/chunk-QDAQ4CJU.js +0 -345
  276. package/dist/chunk-QDAQ4CJU.js.map +0 -1
  277. package/dist/chunk-RMH72RZI.js.map +0 -1
  278. package/dist/chunk-SWKWQZXM.js +0 -117
  279. package/dist/chunk-SWKWQZXM.js.map +0 -1
  280. package/dist/chunk-TJBP2K4T.js.map +0 -1
  281. package/dist/chunk-TLCEAQDQ.js +0 -542
  282. package/dist/chunk-TLCEAQDQ.js.map +0 -1
  283. package/dist/chunk-UZXBISGO.js.map +0 -1
  284. package/dist/chunk-WGBAKP3Q.js +0 -3220
  285. package/dist/chunk-WGBAKP3Q.js.map +0 -1
  286. package/dist/compare/index.cjs +0 -5475
  287. package/dist/compare/index.cjs.map +0 -1
  288. package/dist/compare/index.d.cts +0 -114
  289. package/dist/compare/index.d.ts +0 -114
  290. package/dist/compare/index.js +0 -731
  291. package/dist/compare/index.js.map +0 -1
  292. package/dist/core/commands/formatting-commands.cjs +0 -828
  293. package/dist/core/commands/formatting-commands.cjs.map +0 -1
  294. package/dist/core/commands/formatting-commands.d.cts +0 -63
  295. package/dist/core/commands/formatting-commands.d.ts +0 -63
  296. package/dist/core/commands/formatting-commands.js +0 -37
  297. package/dist/core/commands/formatting-commands.js.map +0 -1
  298. package/dist/core/commands/image-commands.cjs +0 -2023
  299. package/dist/core/commands/image-commands.cjs.map +0 -1
  300. package/dist/core/commands/image-commands.d.cts +0 -58
  301. package/dist/core/commands/image-commands.d.ts +0 -58
  302. package/dist/core/commands/image-commands.js +0 -18
  303. package/dist/core/commands/image-commands.js.map +0 -1
  304. package/dist/core/commands/section-layout-commands.cjs.map +0 -1
  305. package/dist/core/commands/section-layout-commands.d.cts +0 -62
  306. package/dist/core/commands/section-layout-commands.d.ts +0 -62
  307. package/dist/core/commands/section-layout-commands.js +0 -21
  308. package/dist/core/commands/section-layout-commands.js.map +0 -1
  309. package/dist/core/commands/style-commands.cjs.map +0 -1
  310. package/dist/core/commands/style-commands.d.cts +0 -13
  311. package/dist/core/commands/style-commands.d.ts +0 -13
  312. package/dist/core/commands/style-commands.js +0 -9
  313. package/dist/core/commands/style-commands.js.map +0 -1
  314. package/dist/core/commands/table-structure-commands.cjs +0 -1883
  315. package/dist/core/commands/table-structure-commands.cjs.map +0 -1
  316. package/dist/core/commands/table-structure-commands.d.cts +0 -59
  317. package/dist/core/commands/table-structure-commands.d.ts +0 -59
  318. package/dist/core/commands/table-structure-commands.js +0 -12
  319. package/dist/core/commands/table-structure-commands.js.map +0 -1
  320. package/dist/core/commands/text-commands.cjs +0 -2391
  321. package/dist/core/commands/text-commands.cjs.map +0 -1
  322. package/dist/core/commands/text-commands.d.cts +0 -24
  323. package/dist/core/commands/text-commands.d.ts +0 -24
  324. package/dist/core/commands/text-commands.js +0 -28
  325. package/dist/core/commands/text-commands.js.map +0 -1
  326. package/dist/core/selection/mapping.cjs +0 -200
  327. package/dist/core/selection/mapping.cjs.map +0 -1
  328. package/dist/core/selection/mapping.d.cts +0 -2
  329. package/dist/core/selection/mapping.d.ts +0 -2
  330. package/dist/core/selection/mapping.js +0 -31
  331. package/dist/core/selection/mapping.js.map +0 -1
  332. package/dist/core/state/editor-state.cjs +0 -2278
  333. package/dist/core/state/editor-state.cjs.map +0 -1
  334. package/dist/core/state/editor-state.d.cts +0 -2
  335. package/dist/core/state/editor-state.d.ts +0 -2
  336. package/dist/core/state/editor-state.js +0 -26
  337. package/dist/core/state/editor-state.js.map +0 -1
  338. package/dist/index.cjs +0 -38553
  339. package/dist/index.cjs.map +0 -1
  340. package/dist/index.d.cts +0 -15
  341. package/dist/index.d.ts +0 -15
  342. package/dist/index.js +0 -7856
  343. package/dist/index.js.map +0 -1
  344. package/dist/io/docx-session.cjs +0 -16236
  345. package/dist/io/docx-session.cjs.map +0 -1
  346. package/dist/io/docx-session.d.cts +0 -21
  347. package/dist/io/docx-session.d.ts +0 -21
  348. package/dist/io/docx-session.js +0 -18
  349. package/dist/io/docx-session.js.map +0 -1
  350. package/dist/legal/index.cjs +0 -3900
  351. package/dist/legal/index.cjs.map +0 -1
  352. package/dist/legal/index.d.cts +0 -86
  353. package/dist/legal/index.d.ts +0 -86
  354. package/dist/legal/index.js +0 -616
  355. package/dist/legal/index.js.map +0 -1
  356. package/dist/public-types-7ZL_94cz.d.ts +0 -1573
  357. package/dist/public-types-CeMaDueh.d.cts +0 -1573
  358. package/dist/public-types.cjs +0 -19
  359. package/dist/public-types.cjs.map +0 -1
  360. package/dist/public-types.d.cts +0 -2
  361. package/dist/public-types.d.ts +0 -2
  362. package/dist/public-types.js +0 -1
  363. package/dist/public-types.js.map +0 -1
  364. package/dist/runtime/document-runtime.cjs +0 -11140
  365. package/dist/runtime/document-runtime.cjs.map +0 -1
  366. package/dist/runtime/document-runtime.d.cts +0 -231
  367. package/dist/runtime/document-runtime.d.ts +0 -231
  368. package/dist/runtime/document-runtime.js +0 -21
  369. package/dist/runtime/document-runtime.js.map +0 -1
  370. package/dist/structural-helpers-CilgOVhh.d.cts +0 -10
  371. package/dist/structural-helpers-q0Gd-eBN.d.ts +0 -10
  372. package/dist/ui-tailwind/editor-surface/search-plugin.cjs +0 -313
  373. package/dist/ui-tailwind/editor-surface/search-plugin.cjs.map +0 -1
  374. package/dist/ui-tailwind/editor-surface/search-plugin.d.cts +0 -67
  375. package/dist/ui-tailwind/editor-surface/search-plugin.d.ts +0 -67
  376. package/dist/ui-tailwind/editor-surface/search-plugin.js +0 -23
  377. package/dist/ui-tailwind/editor-surface/search-plugin.js.map +0 -1
  378. package/dist/ui-tailwind/index.cjs +0 -4833
  379. package/dist/ui-tailwind/index.cjs.map +0 -1
  380. package/dist/ui-tailwind/index.d.cts +0 -617
  381. package/dist/ui-tailwind/index.d.ts +0 -617
  382. package/dist/ui-tailwind/index.js +0 -575
  383. package/dist/ui-tailwind/index.js.map +0 -1
@@ -0,0 +1,365 @@
1
+ import React, { useEffect, useMemo, useRef, useState } from "react";
2
+
3
+ import type {
4
+ EditorViewStateSnapshot,
5
+ PageLayoutSnapshot,
6
+ } from "../../api/public-types";
7
+
8
+ interface ActiveParagraphLayout {
9
+ leftIndent: number;
10
+ rightIndent: number;
11
+ firstLineOffset: number;
12
+ tabStops: Array<{ pos: number; val?: string; leader?: string }>;
13
+ indentationReadOnly?: boolean;
14
+ tabStopsReadOnly?: boolean;
15
+ }
16
+
17
+ export interface TwPageRulerProps {
18
+ pageLayout: PageLayoutSnapshot;
19
+ viewState: EditorViewStateSnapshot;
20
+ paragraphLayout: ActiveParagraphLayout | null;
21
+ readOnly: boolean;
22
+ onReturnToBody: () => void;
23
+ onOpenHeader?: () => void;
24
+ onOpenFooter?: () => void;
25
+ onSetIndentation?: (indentation: {
26
+ left?: number;
27
+ right?: number;
28
+ firstLine?: number;
29
+ hanging?: number;
30
+ }) => void;
31
+ onSetTabStops?: (tabStops: Array<{ pos: number; val?: string; leader?: string }>) => void;
32
+ onRestartNumbering?: () => void;
33
+ onContinueNumbering?: () => void;
34
+ }
35
+
36
+ type DragKind = "left-indent" | "first-line";
37
+
38
+ const MIN_HANDLE_TWIPS = 0;
39
+ const HANDLE_OVERLAP_THRESHOLD_PERCENT = 1.4;
40
+ const HANDLE_OFFSET_PERCENT = 0.9;
41
+ const MARKER_HALF_PX = 8;
42
+
43
+ export function TwPageRuler(props: TwPageRulerProps) {
44
+ const trackRef = useRef<HTMLDivElement | null>(null);
45
+ const dragCleanupRef = useRef<(() => void) | null>(null);
46
+ const [, setDragState] = useState<{
47
+ kind: DragKind;
48
+ startClientX: number;
49
+ startLeftIndent: number;
50
+ startFirstLineOffset: number;
51
+ } | null>(null);
52
+ const [previewLayout, setPreviewLayout] = useState<ActiveParagraphLayout | null>(null);
53
+
54
+ const effectiveLayout = previewLayout ?? props.paragraphLayout;
55
+ const activeRegion = props.viewState.activePageRegion?.region ?? "body";
56
+ const isBodyParagraphContext =
57
+ activeRegion === "body" && Boolean(props.paragraphLayout);
58
+ const indentationReadOnly = props.readOnly || Boolean(props.paragraphLayout?.indentationReadOnly);
59
+ const tabStopsReadOnly = props.readOnly || Boolean(props.paragraphLayout?.tabStopsReadOnly);
60
+ const availableHeader = props.pageLayout.headerVariants[0];
61
+ const availableFooter = props.pageLayout.footerVariants[0];
62
+
63
+ const usablePageWidth = Math.max(
64
+ 1440,
65
+ props.pageLayout.pageWidth - props.pageLayout.marginLeft - props.pageLayout.marginRight,
66
+ );
67
+
68
+ useEffect(() => {
69
+ return () => {
70
+ dragCleanupRef.current?.();
71
+ };
72
+ }, []);
73
+
74
+ function beginDrag(kind: DragKind, clientX: number): void {
75
+ if (!isBodyParagraphContext || !props.paragraphLayout || indentationReadOnly) {
76
+ return;
77
+ }
78
+
79
+ dragCleanupRef.current?.();
80
+ const activeDrag = {
81
+ kind,
82
+ startClientX: clientX,
83
+ startLeftIndent: props.paragraphLayout.leftIndent,
84
+ startFirstLineOffset: props.paragraphLayout.firstLineOffset,
85
+ };
86
+ setDragState(activeDrag);
87
+
88
+ const handleMouseMove = (event: MouseEvent): void => {
89
+ const track = trackRef.current;
90
+ if (!track) {
91
+ return;
92
+ }
93
+ const rect = track.getBoundingClientRect();
94
+ const deltaPx = event.clientX - activeDrag.startClientX;
95
+ const deltaTwips = pxToTwips(deltaPx, rect.width, usablePageWidth);
96
+
97
+ if (activeDrag.kind === "left-indent") {
98
+ setPreviewLayout({
99
+ ...props.paragraphLayout!,
100
+ leftIndent: clampTwips(activeDrag.startLeftIndent + deltaTwips),
101
+ firstLineOffset: activeDrag.startFirstLineOffset,
102
+ });
103
+ return;
104
+ }
105
+
106
+ setPreviewLayout({
107
+ ...props.paragraphLayout!,
108
+ leftIndent: activeDrag.startLeftIndent,
109
+ firstLineOffset: activeDrag.startFirstLineOffset + deltaTwips,
110
+ });
111
+ };
112
+
113
+ const handleMouseUp = (event: MouseEvent): void => {
114
+ const track = trackRef.current;
115
+ if (!track || !props.onSetIndentation) {
116
+ cleanupDrag();
117
+ setDragState(null);
118
+ setPreviewLayout(null);
119
+ return;
120
+ }
121
+
122
+ const rect = track.getBoundingClientRect();
123
+ const deltaPx = event.clientX - activeDrag.startClientX;
124
+ const deltaTwips = pxToTwips(deltaPx, rect.width, usablePageWidth);
125
+ const leftIndent =
126
+ activeDrag.kind === "left-indent"
127
+ ? clampTwips(activeDrag.startLeftIndent + deltaTwips)
128
+ : activeDrag.startLeftIndent;
129
+ const firstLineOffset =
130
+ activeDrag.kind === "first-line"
131
+ ? activeDrag.startFirstLineOffset + deltaTwips
132
+ : activeDrag.startFirstLineOffset;
133
+
134
+ cleanupDrag();
135
+ props.onSetIndentation(
136
+ composeIndentation(leftIndent, effectiveLayout?.rightIndent ?? props.paragraphLayout?.rightIndent ?? 0, firstLineOffset),
137
+ );
138
+ setDragState(null);
139
+ setPreviewLayout(null);
140
+ };
141
+
142
+ const cleanupDrag = (): void => {
143
+ window.removeEventListener("mousemove", handleMouseMove);
144
+ window.removeEventListener("mouseup", handleMouseUp);
145
+ if (dragCleanupRef.current === cleanupDrag) {
146
+ dragCleanupRef.current = null;
147
+ }
148
+ };
149
+
150
+ dragCleanupRef.current = cleanupDrag;
151
+ window.addEventListener("mousemove", handleMouseMove);
152
+ window.addEventListener("mouseup", handleMouseUp);
153
+ }
154
+
155
+ const markerLayout = useMemo(() => {
156
+ if (!effectiveLayout || !isBodyParagraphContext) {
157
+ return null;
158
+ }
159
+ return {
160
+ leftIndent: twipsToPercent(effectiveLayout.leftIndent, usablePageWidth),
161
+ firstLine: twipsToPercent(
162
+ Math.max(MIN_HANDLE_TWIPS, effectiveLayout.leftIndent + effectiveLayout.firstLineOffset),
163
+ usablePageWidth,
164
+ ),
165
+ tabStops: effectiveLayout.tabStops.map((tabStop, index) => ({
166
+ id: `${tabStop.pos}-${index}`,
167
+ left: twipsToPercent(tabStop.pos, usablePageWidth),
168
+ })),
169
+ };
170
+ }, [effectiveLayout, isBodyParagraphContext, usablePageWidth]);
171
+ const handlesOverlap = markerLayout
172
+ ? Math.abs(markerLayout.leftIndent - markerLayout.firstLine) < HANDLE_OVERLAP_THRESHOLD_PERCENT
173
+ : false;
174
+ const leftIndentHandleLeft = markerLayout
175
+ ? offsetHandlePercent(markerLayout.leftIndent, handlesOverlap ? -HANDLE_OFFSET_PERCENT : 0)
176
+ : 0;
177
+ const firstLineHandleLeft = markerLayout
178
+ ? offsetHandlePercent(markerLayout.firstLine, handlesOverlap ? HANDLE_OFFSET_PERCENT : 0)
179
+ : 0;
180
+
181
+ return (
182
+ <div
183
+ aria-label="Page ruler"
184
+ className="mb-4 rounded-2xl border border-border bg-surface/80 px-4 py-3 shadow-sm"
185
+ >
186
+ <div className="mb-3 flex flex-wrap items-center gap-2">
187
+ <button
188
+ type="button"
189
+ aria-label="Return to document body"
190
+ title="Return to document body"
191
+ onClick={props.onReturnToBody}
192
+ className={regionButtonClass(activeRegion === "body")}
193
+ >
194
+ Body
195
+ </button>
196
+ {availableHeader ? (
197
+ <button
198
+ type="button"
199
+ aria-label="Open header story"
200
+ title="Open header story"
201
+ onClick={props.onOpenHeader}
202
+ className={regionButtonClass(activeRegion === "header")}
203
+ >
204
+ Header
205
+ </button>
206
+ ) : null}
207
+ {availableFooter ? (
208
+ <button
209
+ type="button"
210
+ aria-label="Open footer story"
211
+ title="Open footer story"
212
+ onClick={props.onOpenFooter}
213
+ className={regionButtonClass(activeRegion === "footer")}
214
+ >
215
+ Footer
216
+ </button>
217
+ ) : null}
218
+ </div>
219
+
220
+ <div
221
+ className="mb-2 flex items-center justify-between"
222
+ aria-label={`Section ${props.pageLayout.sectionIndex + 1}, ${props.pageLayout.orientation}`}
223
+ title={`Section ${props.pageLayout.sectionIndex + 1} · ${props.pageLayout.orientation}`}
224
+ >
225
+ <span className="sr-only">Page ruler</span>
226
+ </div>
227
+
228
+ <div
229
+ ref={trackRef}
230
+ aria-label="Page ruler track"
231
+ className="relative h-14 overflow-hidden rounded-xl border border-border bg-canvas"
232
+ onClick={(event) => {
233
+ if (
234
+ tabStopsReadOnly ||
235
+ !isBodyParagraphContext ||
236
+ !props.paragraphLayout ||
237
+ !props.onSetTabStops
238
+ ) {
239
+ return;
240
+ }
241
+ if ((event.target as HTMLElement).dataset.handle === "true") {
242
+ return;
243
+ }
244
+ const rect = event.currentTarget.getBoundingClientRect();
245
+ const nextPos = clampTwips(pxToTwips(event.clientX - rect.left, rect.width, usablePageWidth));
246
+ props.onSetTabStops(
247
+ [...props.paragraphLayout.tabStops, { pos: nextPos, val: "left" }]
248
+ .sort((left, right) => left.pos - right.pos),
249
+ );
250
+ }}
251
+ >
252
+ <div className="absolute inset-x-4 top-2 h-px bg-border" />
253
+ <div className="absolute inset-x-4 top-7 h-px bg-border/70" />
254
+ {Array.from({ length: 8 }, (_, index) => (
255
+ <div
256
+ key={`tick-${index}`}
257
+ className="absolute top-1 h-3 w-px bg-border/80"
258
+ style={{ left: `${12 + index * 12}%` }}
259
+ />
260
+ ))}
261
+
262
+ {markerLayout ? (
263
+ <>
264
+ <button
265
+ type="button"
266
+ data-handle="true"
267
+ aria-label="Left indent handle"
268
+ title={`Left indent: ${effectiveLayout?.leftIndent ?? 0} twips`}
269
+ disabled={indentationReadOnly}
270
+ className={`absolute top-8 h-4 w-4 -translate-x-1/2 rounded-[5px] border border-accent/40 bg-accent-soft shadow-sm transition-opacity ${
271
+ handlesOverlap ? "opacity-80 z-10" : ""
272
+ }`}
273
+ style={{ left: markerLeftStyle(leftIndentHandleLeft) }}
274
+ onMouseDown={(event) => {
275
+ event.preventDefault();
276
+ beginDrag("left-indent", event.clientX);
277
+ }}
278
+ />
279
+ <button
280
+ type="button"
281
+ data-handle="true"
282
+ aria-label="First line indent handle"
283
+ title={`First line offset: ${effectiveLayout?.firstLineOffset ?? 0} twips`}
284
+ disabled={indentationReadOnly}
285
+ className={`absolute top-1 h-4 w-4 -translate-x-1/2 rotate-45 rounded-[4px] border border-primary/30 bg-surface-raised shadow-sm transition-opacity ${
286
+ handlesOverlap ? "opacity-80 z-20" : ""
287
+ }`}
288
+ style={{ left: markerLeftStyle(firstLineHandleLeft) }}
289
+ onMouseDown={(event) => {
290
+ event.preventDefault();
291
+ beginDrag("first-line", event.clientX);
292
+ }}
293
+ />
294
+ {markerLayout.tabStops.map((tabStop) => (
295
+ <div
296
+ key={tabStop.id}
297
+ data-handle="true"
298
+ aria-label={`Tab stop at ${tabStop.left.toFixed(0)}%`}
299
+ title={`Tab stop`}
300
+ className="absolute top-5 h-4 w-4 -translate-x-1/2 rounded-sm border border-border bg-surface-raised shadow-sm"
301
+ style={{ left: markerLeftStyle(tabStop.left) }}
302
+ />
303
+ ))}
304
+ </>
305
+ ) : null}
306
+ </div>
307
+ </div>
308
+ );
309
+ }
310
+
311
+ function composeIndentation(leftIndent: number, rightIndent: number, firstLineOffset: number) {
312
+ const indentation: {
313
+ left?: number;
314
+ right?: number;
315
+ firstLine?: number;
316
+ hanging?: number;
317
+ } = {};
318
+ if (leftIndent > 0) {
319
+ indentation.left = leftIndent;
320
+ }
321
+ if (rightIndent > 0) {
322
+ indentation.right = rightIndent;
323
+ }
324
+ if (firstLineOffset > 0) {
325
+ indentation.firstLine = Math.round(firstLineOffset);
326
+ } else if (firstLineOffset < 0) {
327
+ indentation.hanging = Math.round(Math.abs(firstLineOffset));
328
+ }
329
+ return indentation;
330
+ }
331
+
332
+ function regionButtonClass(active: boolean): string {
333
+ return `inline-flex items-center rounded-full border px-3 py-1 text-xs transition-colors ${
334
+ active
335
+ ? "border-accent/30 bg-accent-soft text-accent"
336
+ : "border-border bg-canvas text-secondary hover:bg-surface"
337
+ }`;
338
+ }
339
+
340
+ const controlButtonClass =
341
+ "inline-flex items-center rounded-full border border-border bg-canvas px-3 py-1 text-xs text-secondary transition-colors hover:bg-surface disabled:cursor-not-allowed disabled:opacity-50";
342
+
343
+ function twipsToPercent(value: number, usablePageWidth: number): number {
344
+ return Math.max(0, Math.min(100, (value / usablePageWidth) * 100));
345
+ }
346
+
347
+ function pxToTwips(px: number, width: number, usablePageWidth: number): number {
348
+ if (width <= 0) {
349
+ return 0;
350
+ }
351
+ return Math.round((px / width) * usablePageWidth);
352
+ }
353
+
354
+ function clampTwips(value: number): number {
355
+ return Math.max(MIN_HANDLE_TWIPS, Math.round(value));
356
+ }
357
+
358
+ function offsetHandlePercent(value: number, offset: number): number {
359
+ return Math.max(0, Math.min(100, value + offset));
360
+ }
361
+
362
+ function markerLeftStyle(value: number): string {
363
+ const clamped = Math.max(0, Math.min(100, value));
364
+ return `clamp(${MARKER_HALF_PX}px, ${clamped}%, calc(100% - ${MARKER_HALF_PX}px))`;
365
+ }
@@ -0,0 +1,23 @@
1
+ import React from "react";
2
+
3
+ import type { BlockedExplainerSelectionToolModel } from "../../ui/headless/selection-tool-types";
4
+
5
+ export interface TwSelectionToolBlockedProps {
6
+ model: BlockedExplainerSelectionToolModel;
7
+ }
8
+
9
+ export function TwSelectionToolBlocked(props: TwSelectionToolBlockedProps) {
10
+ return (
11
+ <div
12
+ data-testid="blocked-selection-tool"
13
+ className="max-w-[min(20rem,calc(100vw-1.5rem))] rounded-lg border border-border bg-canvas px-2.5 py-1.5 shadow-md"
14
+ role="status"
15
+ aria-live="polite"
16
+ >
17
+ <div className="text-[9px] font-semibold uppercase tracking-[0.12em] text-tertiary">
18
+ Unavailable here
19
+ </div>
20
+ <div className="mt-0.5 text-[13px] text-primary">{props.model.disabledReason}</div>
21
+ </div>
22
+ );
23
+ }
@@ -0,0 +1,35 @@
1
+ import React from "react";
2
+
3
+ import type { CommentThreadSelectionToolModel } from "../../ui/headless/selection-tool-types";
4
+ import { preserveEditorSelectionMouseDown } from "../../ui/headless/preserve-editor-selection";
5
+
6
+ export interface TwSelectionToolCommentProps {
7
+ model: CommentThreadSelectionToolModel;
8
+ onAddComment?: () => void;
9
+ }
10
+
11
+ export function TwSelectionToolComment(props: TwSelectionToolCommentProps) {
12
+ return (
13
+ <div
14
+ data-testid="comment-thread-selection-tool"
15
+ className="max-w-[min(20rem,calc(100vw-1.5rem))] rounded-lg border border-border bg-canvas px-2.5 py-1.5 shadow-md"
16
+ >
17
+ <div className="text-[9px] font-semibold uppercase tracking-[0.12em] text-tertiary">
18
+ Comment
19
+ </div>
20
+ <div className="mt-0.5 truncate text-[13px] text-primary">
21
+ {props.model.previewText ?? "Comment thread"}
22
+ </div>
23
+ <button
24
+ type="button"
25
+ aria-label="Add comment from thread"
26
+ disabled={!props.model.canAddComment || !props.onAddComment}
27
+ onMouseDown={preserveEditorSelectionMouseDown}
28
+ onClick={props.onAddComment}
29
+ className="mt-1.5 inline-flex h-7 items-center rounded-md border border-border px-2 text-[11px] font-medium text-secondary transition-colors hover:bg-surface disabled:cursor-not-allowed disabled:opacity-40"
30
+ >
31
+ Comment
32
+ </button>
33
+ </div>
34
+ );
35
+ }
@@ -0,0 +1,37 @@
1
+ import React, { forwardRef } from "react";
2
+ import type { FocusEventHandler } from "react";
3
+
4
+ import type { FormattingInlineSelectionToolModel } from "../../ui/headless/selection-tool-types";
5
+ import { TwSelectionToolbar } from "./tw-selection-toolbar";
6
+
7
+ export interface TwSelectionToolFormattingProps {
8
+ model: FormattingInlineSelectionToolModel;
9
+ onFocusCapture?: FocusEventHandler<HTMLDivElement>;
10
+ onBlurCapture?: FocusEventHandler<HTMLDivElement>;
11
+ onToggleBold?: () => void;
12
+ onToggleItalic?: () => void;
13
+ onToggleUnderline?: () => void;
14
+ onSetTextColor?: (color: string) => void;
15
+ onSetHighlightColor?: (color: string | null) => void;
16
+ onAddComment?: () => void;
17
+ }
18
+
19
+ export const TwSelectionToolFormatting = forwardRef<HTMLDivElement, TwSelectionToolFormattingProps>(
20
+ function TwSelectionToolFormatting(props, ref) {
21
+ return (
22
+ <TwSelectionToolbar
23
+ ref={ref}
24
+ model={props.model}
25
+ disabledReason={props.model.disabledReason}
26
+ onFocusCapture={props.onFocusCapture}
27
+ onBlurCapture={props.onBlurCapture}
28
+ onToggleBold={props.onToggleBold}
29
+ onToggleItalic={props.onToggleItalic}
30
+ onToggleUnderline={props.onToggleUnderline}
31
+ onSetTextColor={props.onSetTextColor}
32
+ onSetHighlightColor={props.onSetHighlightColor}
33
+ onAddComment={props.onAddComment}
34
+ />
35
+ );
36
+ },
37
+ );