@beyondwork/docx-react-component 1.0.0 → 1.0.2

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 (560) hide show
  1. package/README.md +44 -104
  2. package/package.json +66 -15
  3. package/src/api/public-types.ts +1 -1
  4. package/src/compare/diff-engine.ts +530 -0
  5. package/src/compare/export-redlines.ts +162 -0
  6. package/src/compare/snapshot.ts +37 -0
  7. package/src/core/commands/index.ts +1 -1
  8. package/src/core/state/editor-state.ts +2 -2
  9. package/src/index.ts +45 -0
  10. package/src/legal/bookmarks.ts +196 -0
  11. package/src/legal/cross-references.ts +356 -0
  12. package/src/legal/defined-terms.ts +203 -0
  13. package/src/runtime/document-runtime.ts +3 -5
  14. package/src/runtime/table-commands.ts +4 -1
  15. package/src/runtime/table-schema.ts +17 -2
  16. package/src/runtime/virtualized-rendering.ts +258 -0
  17. package/src/ui/WordReviewEditor.tsx +256 -35
  18. package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +2 -2
  19. package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +16 -2
  20. package/.codex/config.toml +0 -5
  21. package/.corepack/v1/pnpm/10.30.3/.corepack +0 -1
  22. package/.corepack/v1/pnpm/10.30.3/LICENSE +0 -22
  23. package/.corepack/v1/pnpm/10.30.3/README.md +0 -240
  24. package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp +0 -6
  25. package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp.cmd +0 -5
  26. package/.corepack/v1/pnpm/10.30.3/dist/pnpm.cjs +0 -195400
  27. package/.corepack/v1/pnpm/10.30.3/dist/pnpmrc +0 -2
  28. package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-arm64-2HJ4WGO6.node +0 -0
  29. package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-x64-3G3H6IW4.node +0 -0
  30. package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-arm64-msvc-Q6BARPPB.node +0 -0
  31. package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-x64-msvc-J2TZHRQI.node +0 -0
  32. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.bash +0 -31
  33. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.fish +0 -22
  34. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.ps1 +0 -193
  35. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.zsh +0 -27
  36. package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x64.exe +0 -0
  37. package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x86.exe +0 -0
  38. package/.corepack/v1/pnpm/10.30.3/dist/worker.js +0 -10119
  39. package/.corepack/v1/pnpm/10.30.3/package.json +0 -192
  40. package/.cursor/mcp.json +0 -7
  41. package/.github/workflows/ci.yml +0 -35
  42. package/.mcp.json +0 -7
  43. package/.openclaw/workspace-state.json +0 -4
  44. package/.pnpmrc.json +0 -1
  45. package/.wave-launch.sh +0 -7
  46. package/.workspace-marker +0 -1
  47. package/AGENTS.md +0 -78
  48. package/CHANGELOG.md +0 -177
  49. package/DESIGN.md +0 -929
  50. package/HEARTBEAT.md +0 -7
  51. package/IDENTITY.md +0 -23
  52. package/SOUL.md +0 -36
  53. package/TOOLS.md +0 -40
  54. package/USER.md +0 -17
  55. package/docs/README.md +0 -107
  56. package/docs/agents/wave-cont-eval-role.md +0 -36
  57. package/docs/agents/wave-cont-qa-role.md +0 -52
  58. package/docs/agents/wave-deploy-verifier-role.md +0 -34
  59. package/docs/agents/wave-design-role.md +0 -47
  60. package/docs/agents/wave-documentation-role.md +0 -34
  61. package/docs/agents/wave-infra-role.md +0 -34
  62. package/docs/agents/wave-integration-role.md +0 -37
  63. package/docs/agents/wave-launcher-role.md +0 -41
  64. package/docs/agents/wave-orchestrator-role.md +0 -52
  65. package/docs/agents/wave-planner-role.md +0 -39
  66. package/docs/agents/wave-security-role.md +0 -40
  67. package/docs/architecture/docx/README.md +0 -10
  68. package/docs/architecture/future/README.md +0 -8
  69. package/docs/architecture/ooxml-upgrade-analysis.md +0 -134
  70. package/docs/architecture/platform/shared-openxml-editor-platform.md +0 -153
  71. package/docs/architecture/xlsx/canonical-workbook-model-and-commands.md +0 -187
  72. package/docs/architecture/xlsx/spreadsheet-editor-frontend-architecture.md +0 -150
  73. package/docs/comment-redline-overview.md +0 -350
  74. package/docs/concepts/context7-vs-skills.md +0 -118
  75. package/docs/concepts/operating-modes.md +0 -91
  76. package/docs/concepts/runtime-agnostic-orchestration.md +0 -111
  77. package/docs/concepts/what-is-a-wave.md +0 -217
  78. package/docs/context7/bundles.json +0 -222
  79. package/docs/context7/planner-agent/README.md +0 -28
  80. package/docs/context7/planner-agent/manifest.json +0 -83
  81. package/docs/context7/planner-agent/papers/cooperbench-why-coding-agents-cannot-be-your-teammates-yet.md +0 -3283
  82. package/docs/context7/planner-agent/papers/dova-deliberation-first-multi-agent-orchestration-for-autonomous-research-automation.md +0 -1699
  83. package/docs/context7/planner-agent/papers/dpbench-large-language-models-struggle-with-simultaneous-coordination.md +0 -2251
  84. package/docs/context7/planner-agent/papers/incremental-planning-to-control-a-blackboard-based-problem-solver.md +0 -1729
  85. package/docs/context7/planner-agent/papers/silo-bench-a-scalable-environment-for-evaluating-distributed-coordination-in-multi-agent-llm-systems.md +0 -3747
  86. package/docs/context7/planner-agent/papers/todoevolve-learning-to-architect-agent-planning-systems.md +0 -1675
  87. package/docs/context7/planner-agent/papers/verified-multi-agent-orchestration-a-plan-execute-verify-replan-framework-for-complex-query-resolution.md +0 -1173
  88. package/docs/context7/planner-agent/papers/why-do-multi-agent-llm-systems-fail.md +0 -5211
  89. package/docs/context7/planner-agent/topics/planning-and-orchestration.md +0 -24
  90. package/docs/evals/arm-templates/README.md +0 -13
  91. package/docs/evals/arm-templates/full-wave.json +0 -15
  92. package/docs/evals/arm-templates/single-agent.json +0 -15
  93. package/docs/evals/benchmark-catalog.json +0 -670
  94. package/docs/evals/cases/README.md +0 -47
  95. package/docs/evals/cases/wave-blackboard-inbox-targeting.json +0 -73
  96. package/docs/evals/cases/wave-contradiction-conflict.json +0 -104
  97. package/docs/evals/cases/wave-expert-routing-preservation.json +0 -69
  98. package/docs/evals/cases/wave-hidden-profile-private-evidence.json +0 -81
  99. package/docs/evals/cases/wave-premature-closure-guard.json +0 -71
  100. package/docs/evals/cases/wave-silo-cross-agent-state.json +0 -77
  101. package/docs/evals/cases/wave-simultaneous-lockstep.json +0 -92
  102. package/docs/evals/external-benchmarks.json +0 -85
  103. package/docs/evals/external-command-config.sample.json +0 -9
  104. package/docs/evals/external-command-config.swe-bench-pro.json +0 -8
  105. package/docs/evals/pilots/README.md +0 -47
  106. package/docs/evals/pilots/swe-bench-pro-public-full-wave-review-10.json +0 -64
  107. package/docs/evals/pilots/swe-bench-pro-public-pilot.json +0 -111
  108. package/docs/evals/wave-benchmark-program.md +0 -302
  109. package/docs/guides/planner.md +0 -220
  110. package/docs/guides/recommendations-0.8.9.md +0 -133
  111. package/docs/guides/signal-wrappers.md +0 -165
  112. package/docs/guides/terminal-surfaces.md +0 -96
  113. package/docs/image copy.png +0 -0
  114. package/docs/image.png +0 -0
  115. package/docs/images/image.png +0 -0
  116. package/docs/legal-feedback-architecture.md +0 -498
  117. package/docs/plans/component-cutover-matrix.json +0 -1072
  118. package/docs/plans/component-cutover-matrix.md +0 -307
  119. package/docs/plans/context7-wave-orchestrator.md +0 -155
  120. package/docs/plans/current-state.md +0 -198
  121. package/docs/plans/docx/README.md +0 -9
  122. package/docs/plans/examples/wave-benchmark-improvement.md +0 -108
  123. package/docs/plans/examples/wave-example-live-proof.md +0 -435
  124. package/docs/plans/master-plan.md +0 -224
  125. package/docs/plans/migration.md +0 -538
  126. package/docs/plans/operations/README.md +0 -7
  127. package/docs/plans/operations/wave-10-word-certification.md +0 -87
  128. package/docs/plans/operations/wave-8-railway-staging.md +0 -153
  129. package/docs/plans/operations/wave-9-manual-certification.md +0 -73
  130. package/docs/plans/platform/README.md +0 -9
  131. package/docs/plans/reference/legal-checklist-coverage.md +0 -258
  132. package/docs/plans/wave-orchestrator.md +0 -423
  133. package/docs/plans/waves/README.md +0 -75
  134. package/docs/plans/waves/completed/wave-0.md +0 -195
  135. package/docs/plans/waves/completed/wave-1.md +0 -379
  136. package/docs/plans/waves/completed/wave-10.md +0 -670
  137. package/docs/plans/waves/completed/wave-11.md +0 -335
  138. package/docs/plans/waves/completed/wave-12.md +0 -417
  139. package/docs/plans/waves/completed/wave-13.md +0 -316
  140. package/docs/plans/waves/completed/wave-14.md +0 -319
  141. package/docs/plans/waves/completed/wave-15.md +0 -321
  142. package/docs/plans/waves/completed/wave-16.md +0 -316
  143. package/docs/plans/waves/completed/wave-17.md +0 -331
  144. package/docs/plans/waves/completed/wave-18.md +0 -328
  145. package/docs/plans/waves/completed/wave-2.md +0 -438
  146. package/docs/plans/waves/completed/wave-3.md +0 -435
  147. package/docs/plans/waves/completed/wave-4.md +0 -430
  148. package/docs/plans/waves/completed/wave-5.md +0 -430
  149. package/docs/plans/waves/completed/wave-6.md +0 -430
  150. package/docs/plans/waves/completed/wave-7.md +0 -526
  151. package/docs/plans/waves/completed/wave-8.md +0 -596
  152. package/docs/plans/waves/completed/wave-9.md +0 -552
  153. package/docs/plans/waves/deferred/README.md +0 -14
  154. package/docs/plans/waves/deferred/encrypted-intake-contracts.md +0 -282
  155. package/docs/plans/waves/deferred/legal-feedback-wave-expansion.md +0 -308
  156. package/docs/plans/waves/deferred/wave-encrypted-intake.md +0 -451
  157. package/docs/plans/waves/design/README.md +0 -5
  158. package/docs/plans/waves/design/wave-1-a1.md +0 -309
  159. package/docs/plans/waves/reviews/README.md +0 -5
  160. package/docs/plans/waves/reviews/wave-0-cont-qa.md +0 -151
  161. package/docs/plans/waves/reviews/wave-1-cont-qa.md +0 -46
  162. package/docs/plans/waves/reviews/wave-10-accessibility-and-design.md +0 -51
  163. package/docs/plans/waves/reviews/wave-10-cont-qa.md +0 -24
  164. package/docs/plans/waves/reviews/wave-10-dashboard-proof.md +0 -46
  165. package/docs/plans/waves/reviews/wave-10-performance-signoff.md +0 -55
  166. package/docs/plans/waves/reviews/wave-10-regression-proof.md +0 -23
  167. package/docs/plans/waves/reviews/wave-10-release-audit.md +0 -31
  168. package/docs/plans/waves/reviews/wave-10-service-proof.md +0 -83
  169. package/docs/plans/waves/reviews/wave-10-word-certification.md +0 -31
  170. package/docs/plans/waves/reviews/wave-18-ai-contract-closure.md +0 -277
  171. package/docs/plans/waves/reviews/wave-18-cont-qa.md +0 -255
  172. package/docs/plans/waves/reviews/wave-18-parity-proof.md +0 -271
  173. package/docs/plans/waves/reviews/wave-19-cont-qa.md +0 -59
  174. package/docs/plans/waves/reviews/wave-2-cont-qa.md +0 -72
  175. package/docs/plans/waves/reviews/wave-20-cont-qa.md +0 -60
  176. package/docs/plans/waves/reviews/wave-25-cont-qa.md +0 -48
  177. package/docs/plans/waves/reviews/wave-28-cont-qa.md +0 -46
  178. package/docs/plans/waves/reviews/wave-29-cont-qa.md +0 -53
  179. package/docs/plans/waves/reviews/wave-3-cont-qa.md +0 -53
  180. package/docs/plans/waves/reviews/wave-3-core-proof.md +0 -77
  181. package/docs/plans/waves/reviews/wave-3-validator-proof.md +0 -73
  182. package/docs/plans/waves/reviews/wave-32-cont-qa.md +0 -43
  183. package/docs/plans/waves/reviews/wave-33-cont-qa.md +0 -526
  184. package/docs/plans/waves/reviews/wave-34-cont-qa.md +0 -100
  185. package/docs/plans/waves/reviews/wave-35-cont-qa.md +0 -145
  186. package/docs/plans/waves/reviews/wave-4-cont-qa.md +0 -47
  187. package/docs/plans/waves/reviews/wave-4-structure-proof.md +0 -69
  188. package/docs/plans/waves/reviews/wave-5-comment-proof.md +0 -158
  189. package/docs/plans/waves/reviews/wave-5-cont-qa.md +0 -68
  190. package/docs/plans/waves/reviews/wave-6-cont-qa.md +0 -416
  191. package/docs/plans/waves/reviews/wave-6-redline-proof.md +0 -130
  192. package/docs/plans/waves/reviews/wave-7-cont-qa.md +0 -82
  193. package/docs/plans/waves/reviews/wave-7-ooxml-compliance.md +0 -85
  194. package/docs/plans/waves/reviews/wave-7-preservation-proof.md +0 -119
  195. package/docs/plans/waves/reviews/wave-7-trust-ux.md +0 -87
  196. package/docs/plans/waves/reviews/wave-8-accessibility-and-design.md +0 -128
  197. package/docs/plans/waves/reviews/wave-8-cont-qa.md +0 -92
  198. package/docs/plans/waves/reviews/wave-8-live-proof.md +0 -140
  199. package/docs/plans/waves/reviews/wave-8-security.md +0 -47
  200. package/docs/plans/waves/reviews/wave-9-editor-embedding.md +0 -39
  201. package/docs/plans/waves/reviews/wave-9-fixture-runner.md +0 -56
  202. package/docs/plans/waves/reviews/wave-9-live-proof.md +0 -105
  203. package/docs/plans/waves/reviews/wave-9-usability-and-performance.md +0 -152
  204. package/docs/plans/waves/specs/README.md +0 -5
  205. package/docs/plans/waves/specs/wave-1-component-boundaries.md +0 -322
  206. package/docs/plans/waves/specs/wave-1-ooxml-contracts.md +0 -323
  207. package/docs/plans/waves/specs/wave-1-review-and-ui-contracts.md +0 -339
  208. package/docs/plans/waves/specs/wave-1-runtime-contracts.md +0 -509
  209. package/docs/plans/waves/wave-19.md +0 -341
  210. package/docs/plans/waves/wave-20.md +0 -308
  211. package/docs/plans/waves/wave-21.md +0 -289
  212. package/docs/plans/waves/wave-22.md +0 -221
  213. package/docs/plans/waves/wave-23.md +0 -295
  214. package/docs/plans/waves/wave-24.md +0 -286
  215. package/docs/plans/waves/wave-25.md +0 -313
  216. package/docs/plans/waves/wave-26.md +0 -300
  217. package/docs/plans/waves/wave-27.md +0 -299
  218. package/docs/plans/waves/wave-28.md +0 -368
  219. package/docs/plans/waves/wave-29.md +0 -303
  220. package/docs/plans/waves/wave-30.md +0 -307
  221. package/docs/plans/waves/wave-31.md +0 -231
  222. package/docs/plans/waves/wave-32.md +0 -152
  223. package/docs/plans/waves/wave-33.md +0 -147
  224. package/docs/plans/waves/wave-34.md +0 -148
  225. package/docs/plans/waves/wave-35.md +0 -141
  226. package/docs/plans/waves/wave-36.md +0 -146
  227. package/docs/plans/xlsx/README.md +0 -14
  228. package/docs/plans/xlsx/xlsx-fixture-corpus-and-certification-plan.md +0 -126
  229. package/docs/reference/cli-reference.md +0 -600
  230. package/docs/reference/coordination-and-closure.md +0 -487
  231. package/docs/reference/deep-research-report (15).md +0 -25
  232. package/docs/reference/docx/README.md +0 -10
  233. package/docs/reference/legal-checklist.md +0 -445
  234. package/docs/reference/live-proof-waves.md +0 -199
  235. package/docs/reference/ooxml-compliance.md +0 -129
  236. package/docs/reference/ooxml-feature-parity-matrix.md +0 -172
  237. package/docs/reference/platform/shared-ooxml-platform-guidance.md +0 -77
  238. package/docs/reference/prototype-agent-prompt-legal-fidelity.md +0 -155
  239. package/docs/reference/public-api.md +0 -456
  240. package/docs/reference/repository-guidance.md +0 -58
  241. package/docs/reference/runtime-config/README.md +0 -182
  242. package/docs/reference/runtime-config/claude.md +0 -110
  243. package/docs/reference/runtime-config/codex.md +0 -82
  244. package/docs/reference/runtime-config/opencode.md +0 -93
  245. package/docs/reference/sample-waves.md +0 -105
  246. package/docs/reference/skills.md +0 -237
  247. package/docs/reference/templates/AGENTS.md +0 -78
  248. package/docs/reference/templates/HEARTBEAT.md +0 -7
  249. package/docs/reference/templates/IDENTITY.md +0 -23
  250. package/docs/reference/templates/SOUL.md +0 -36
  251. package/docs/reference/templates/TOOLS.md +0 -40
  252. package/docs/reference/templates/USER.md +0 -17
  253. package/docs/reference/wave-control.md +0 -184
  254. package/docs/reference/wave-planning-lessons.md +0 -167
  255. package/docs/reference/word-review-editor-frontend-architecture.md +0 -479
  256. package/docs/reference/word-review-editor-ux-guide.md +0 -253
  257. package/docs/reference/xlsx/xlsx-ooxml-compliance.md +0 -137
  258. package/docs/research/agent-context-sources.md +0 -178
  259. package/docs/research/coordination-failure-review.md +0 -290
  260. package/docs/research/docx-react-component/Canonical Document Schema Specification for a React-based Word-compatible Editor.md +0 -2317
  261. package/docs/research/docx-react-component/Feature Compatibility Matrix for a React Word Compatible Legal Editor v1.md +0 -219
  262. package/docs/research/docx-react-component/React Component Architecture and Front-End Structure Specification for a Word-Compatible Legal Review Editor.md +0 -1112
  263. package/docs/research/docx-react-component/document_compatibility_and_testing_spec.md +0 -751
  264. package/docs/research/xlsx/raw/README.md +0 -13
  265. package/docs/roadmap.md +0 -174
  266. package/docs/superpowers/plans/2026-03-28-harness-control-bar.md +0 -677
  267. package/docs/superpowers/specs/2026-03-28-harness-control-bar-design.md +0 -274
  268. package/docs/xlsx-react/README.md +0 -38
  269. package/docs/xlsx-react/agent-llm-interaction-layer-docx-xlsx.md +0 -621
  270. package/docs/xlsx-react/canonical-workbook-model-and-commands.md +0 -948
  271. package/docs/xlsx-react/shared-openxml-editor-platform-docx-xlsx.md +0 -228
  272. package/docs/xlsx-react/spreadsheet-editor-component-architecture.md +0 -809
  273. package/docs/xlsx-react/spreadsheet-editor-frontend-architecture.md +0 -537
  274. package/docs/xlsx-react/spreadsheet-editor-ux-guide.md +0 -520
  275. package/docs/xlsx-react/xlsx-editor-research-pack.md +0 -871
  276. package/docs/xlsx-react/xlsx-fixture-corpus-and-certification-plan.md +0 -436
  277. package/docs/xlsx-react/xlsx-ooxml-compliance.md +0 -320
  278. package/examples/README.md +0 -16
  279. package/memory/MEMORY.md +0 -24
  280. package/pnpm-workspace.yaml +0 -4
  281. package/scripts/check-no-authored-js.sh +0 -13
  282. package/scripts/context7-api-check.sh +0 -65
  283. package/scripts/context7-export-env.sh +0 -42
  284. package/scripts/run-context7-mcp.sh +0 -8
  285. package/scripts/run-workspace-tests.sh +0 -15
  286. package/scripts/start-wave-10-local.sh +0 -189
  287. package/scripts/wave-agent-attach.sh +0 -47
  288. package/scripts/wave-auto-answer.sh +0 -118
  289. package/scripts/wave-dashboard-attach.sh +0 -13
  290. package/scripts/wave-launch.sh +0 -273
  291. package/scripts/wave-overnight-supervisor.sh +0 -145
  292. package/scripts/wave-status.sh +0 -379
  293. package/scripts/wave-watch.sh +0 -231
  294. package/services/README.md +0 -17
  295. package/services/openxml-validator/Dockerfile +0 -29
  296. package/services/openxml-validator/OpenXmlValidator.Api.csproj +0 -12
  297. package/services/openxml-validator/Program.cs +0 -436
  298. package/services/openxml-validator/README.md +0 -152
  299. package/services/openxml-validator/railway.json +0 -16
  300. package/services/react-word-editor/.tmp-a4/src/api/public-types.ts +0 -318
  301. package/services/react-word-editor/.tmp-a4/src/ui/WordReviewEditor.tsx +0 -1302
  302. package/services/react-word-editor/.tmp-a4/src/ui/editor-surface/editor-surface.tsx +0 -546
  303. package/services/react-word-editor/.tmp-a4/test/ui/word-review-editor.test.tsx +0 -146
  304. package/services/react-word-editor/.tmp-a4-build/src/api/public-types.js +0 -2
  305. package/services/react-word-editor/.tmp-a4-build/src/ui/WordReviewEditor.js +0 -818
  306. package/services/react-word-editor/.tmp-a4-build/src/ui/editor-surface/editor-surface.js +0 -229
  307. package/services/react-word-editor/.tmp-a4-build/test/ui/word-review-editor.test.js +0 -121
  308. package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.json +0 -21
  309. package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.tsbuildinfo +0 -1
  310. package/services/react-word-editor/Dockerfile +0 -26
  311. package/services/react-word-editor/README.md +0 -254
  312. package/services/react-word-editor/app/api/certification/route.ts +0 -79
  313. package/services/react-word-editor/app/api/demo-sessions/route.ts +0 -109
  314. package/services/react-word-editor/app/api/deploy-health/route.ts +0 -23
  315. package/services/react-word-editor/app/api/exports/[exportId]/route.ts +0 -34
  316. package/services/react-word-editor/app/api/exports/route.ts +0 -81
  317. package/services/react-word-editor/app/api/fixtures/[fixtureId]/run/route.ts +0 -100
  318. package/services/react-word-editor/app/api/health/route.ts +0 -70
  319. package/services/react-word-editor/app/api/runs/[runId]/route.ts +0 -36
  320. package/services/react-word-editor/app/api/scenarios/[scenarioId]/run/route.ts +0 -85
  321. package/services/react-word-editor/app/api/sessions/[sessionId]/route.ts +0 -199
  322. package/services/react-word-editor/app/api/sessions/[sessionId]/source/route.ts +0 -45
  323. package/services/react-word-editor/app/api/uploads/route.ts +0 -70
  324. package/services/react-word-editor/app/api/validate/route.ts +0 -310
  325. package/services/react-word-editor/app/certification/[runId]/page.tsx +0 -14
  326. package/services/react-word-editor/app/certification/page.tsx +0 -32
  327. package/services/react-word-editor/app/dashboard/page.tsx +0 -7
  328. package/services/react-word-editor/app/demo/page.tsx +0 -30
  329. package/services/react-word-editor/app/demo/prototype-client.tsx +0 -1080
  330. package/services/react-word-editor/app/editor/[sessionId]/page.tsx +0 -33
  331. package/services/react-word-editor/app/fixtures/page.tsx +0 -7
  332. package/services/react-word-editor/app/globals.css +0 -121
  333. package/services/react-word-editor/app/layout.tsx +0 -32
  334. package/services/react-word-editor/app/page.tsx +0 -30
  335. package/services/react-word-editor/app/runs/[runId]/page.tsx +0 -34
  336. package/services/react-word-editor/app/wave-10-word-review/page.tsx +0 -7
  337. package/services/react-word-editor/components/harness-control-bar.tsx +0 -289
  338. package/services/react-word-editor/components/harness-editor-session-client.tsx +0 -1214
  339. package/services/react-word-editor/components/harness-workspace-page.tsx +0 -715
  340. package/services/react-word-editor/components/reduced-motion-toggle.tsx +0 -79
  341. package/services/react-word-editor/components/workspace-certification-panel.tsx +0 -307
  342. package/services/react-word-editor/lib/certification-bundle.ts +0 -796
  343. package/services/react-word-editor/lib/certification-store.ts +0 -661
  344. package/services/react-word-editor/lib/demo-fixtures.test.mjs +0 -195
  345. package/services/react-word-editor/lib/demo-fixtures.ts +0 -1519
  346. package/services/react-word-editor/lib/editor-session-summary.test.mjs +0 -68
  347. package/services/react-word-editor/lib/editor-session-summary.ts +0 -14
  348. package/services/react-word-editor/lib/editor-session.ts +0 -228
  349. package/services/react-word-editor/lib/exports-route.test.mjs +0 -32
  350. package/services/react-word-editor/lib/harness-client.ts +0 -347
  351. package/services/react-word-editor/lib/harness-config.json +0 -30
  352. package/services/react-word-editor/lib/harness-config.test.mjs +0 -31
  353. package/services/react-word-editor/lib/harness-config.ts +0 -21
  354. package/services/react-word-editor/lib/harness-editor-datastore.test.mjs +0 -220
  355. package/services/react-word-editor/lib/harness-editor-datastore.ts +0 -161
  356. package/services/react-word-editor/lib/private-mode.test.mjs +0 -42
  357. package/services/react-word-editor/lib/private-mode.ts +0 -61
  358. package/services/react-word-editor/lib/regression-report.test.mjs +0 -352
  359. package/services/react-word-editor/lib/regression-report.ts +0 -896
  360. package/services/react-word-editor/lib/run-artifacts.ts +0 -934
  361. package/services/react-word-editor/lib/run-history.ts +0 -755
  362. package/services/react-word-editor/lib/scenario-artifacts.test.mjs +0 -41
  363. package/services/react-word-editor/lib/scenario-artifacts.ts +0 -44
  364. package/services/react-word-editor/lib/storage.ts +0 -953
  365. package/services/react-word-editor/lib/validator-client.test.mjs +0 -54
  366. package/services/react-word-editor/lib/validator-client.ts +0 -95
  367. package/services/react-word-editor/lib/workspace-navigation.ts +0 -79
  368. package/services/react-word-editor/middleware.ts +0 -35
  369. package/services/react-word-editor/next-env.d.ts +0 -6
  370. package/services/react-word-editor/next.config.mjs +0 -15
  371. package/services/react-word-editor/package.json +0 -38
  372. package/services/react-word-editor/postcss.config.mjs +0 -8
  373. package/services/react-word-editor/railway.json +0 -21
  374. package/services/react-word-editor/scripts/wave-10-certification.mjs +0 -101
  375. package/services/react-word-editor/scripts/wave-9-live-usability-pilot.mjs +0 -911
  376. package/services/react-word-editor/tsconfig.json +0 -39
  377. package/services/react-word-editor/tsconfig.tsbuildinfo +0 -1
  378. package/skills/README.md +0 -48
  379. package/skills/domain-docx-compatibility/SKILL.md +0 -44
  380. package/skills/domain-docx-compatibility/skill.json +0 -19
  381. package/skills/domain-editor-architecture/SKILL.md +0 -49
  382. package/skills/domain-editor-architecture/skill.json +0 -19
  383. package/skills/domain-legal-review/SKILL.md +0 -39
  384. package/skills/domain-legal-review/skill.json +0 -19
  385. package/skills/provider-aws/SKILL.md +0 -117
  386. package/skills/provider-aws/adapters/claude.md +0 -1
  387. package/skills/provider-aws/adapters/codex.md +0 -1
  388. package/skills/provider-aws/references/service-verification.md +0 -39
  389. package/skills/provider-aws/skill.json +0 -54
  390. package/skills/provider-custom-deploy/SKILL.md +0 -64
  391. package/skills/provider-custom-deploy/skill.json +0 -50
  392. package/skills/provider-docker-compose/SKILL.md +0 -96
  393. package/skills/provider-docker-compose/adapters/local.md +0 -1
  394. package/skills/provider-docker-compose/skill.json +0 -53
  395. package/skills/provider-github-release/SKILL.md +0 -121
  396. package/skills/provider-github-release/adapters/claude.md +0 -1
  397. package/skills/provider-github-release/adapters/codex.md +0 -1
  398. package/skills/provider-github-release/skill.json +0 -55
  399. package/skills/provider-kubernetes/SKILL.md +0 -143
  400. package/skills/provider-kubernetes/adapters/claude.md +0 -1
  401. package/skills/provider-kubernetes/adapters/codex.md +0 -1
  402. package/skills/provider-kubernetes/references/kubectl-patterns.md +0 -58
  403. package/skills/provider-kubernetes/skill.json +0 -52
  404. package/skills/provider-railway/SKILL.md +0 -123
  405. package/skills/provider-railway/adapters/claude.md +0 -1
  406. package/skills/provider-railway/adapters/codex.md +0 -1
  407. package/skills/provider-railway/adapters/local.md +0 -1
  408. package/skills/provider-railway/adapters/opencode.md +0 -1
  409. package/skills/provider-railway/references/verification-commands.md +0 -39
  410. package/skills/provider-railway/skill.json +0 -71
  411. package/skills/provider-ssh-manual/SKILL.md +0 -97
  412. package/skills/provider-ssh-manual/skill.json +0 -54
  413. package/skills/repo-coding-rules/SKILL.md +0 -55
  414. package/skills/repo-coding-rules/skill.json +0 -34
  415. package/skills/role-cont-eval/SKILL.md +0 -91
  416. package/skills/role-cont-eval/adapters/codex.md +0 -1
  417. package/skills/role-cont-eval/skill.json +0 -36
  418. package/skills/role-cont-qa/SKILL.md +0 -100
  419. package/skills/role-cont-qa/adapters/claude.md +0 -1
  420. package/skills/role-cont-qa/skill.json +0 -36
  421. package/skills/role-deploy/SKILL.md +0 -97
  422. package/skills/role-deploy/skill.json +0 -36
  423. package/skills/role-design/SKILL.md +0 -50
  424. package/skills/role-design/skill.json +0 -36
  425. package/skills/role-documentation/SKILL.md +0 -76
  426. package/skills/role-documentation/skill.json +0 -36
  427. package/skills/role-implementation/SKILL.md +0 -45
  428. package/skills/role-implementation/skill.json +0 -36
  429. package/skills/role-infra/SKILL.md +0 -81
  430. package/skills/role-infra/skill.json +0 -36
  431. package/skills/role-integration/SKILL.md +0 -91
  432. package/skills/role-integration/skill.json +0 -36
  433. package/skills/role-planner/SKILL.md +0 -39
  434. package/skills/role-planner/skill.json +0 -21
  435. package/skills/role-research/SKILL.md +0 -65
  436. package/skills/role-research/skill.json +0 -36
  437. package/skills/role-security/SKILL.md +0 -60
  438. package/skills/role-security/skill.json +0 -36
  439. package/skills/runtime-claude/SKILL.md +0 -66
  440. package/skills/runtime-claude/skill.json +0 -36
  441. package/skills/runtime-codex/SKILL.md +0 -58
  442. package/skills/runtime-codex/skill.json +0 -36
  443. package/skills/runtime-local/SKILL.md +0 -46
  444. package/skills/runtime-local/skill.json +0 -36
  445. package/skills/runtime-opencode/SKILL.md +0 -58
  446. package/skills/runtime-opencode/skill.json +0 -36
  447. package/skills/signal-hygiene/SKILL.md +0 -51
  448. package/skills/signal-hygiene/skill.json +0 -20
  449. package/skills/tui-design/SKILL.md +0 -77
  450. package/skills/tui-design/references/tui-design.md +0 -259
  451. package/skills/tui-design/skill.json +0 -36
  452. package/skills/wave-core/SKILL.md +0 -141
  453. package/skills/wave-core/references/marker-syntax.md +0 -70
  454. package/skills/wave-core/skill.json +0 -35
  455. package/test/README.md +0 -16
  456. package/test/core/formatting-commands.test.ts +0 -285
  457. package/test/core/image-commands.test.ts +0 -298
  458. package/test/core/mapping.test.ts +0 -186
  459. package/test/core/text-commands.test.ts +0 -176
  460. package/test/fixtures/docx/F01-basic-contract.docx +0 -0
  461. package/test/fixtures/docx/F01-basic-contract.md +0 -33
  462. package/test/fixtures/docx/F02-headings-styles.docx +0 -0
  463. package/test/fixtures/docx/F02-headings-styles.md +0 -33
  464. package/test/fixtures/docx/F03-legal-outline-numbering.docx +0 -0
  465. package/test/fixtures/docx/F03-legal-outline-numbering.md +0 -34
  466. package/test/fixtures/docx/F04-restart-numbering-schedules.docx +0 -0
  467. package/test/fixtures/docx/F04-restart-numbering-schedules.md +0 -33
  468. package/test/fixtures/docx/F05-table-heavy-agreement.docx +0 -0
  469. package/test/fixtures/docx/F05-table-heavy-agreement.md +0 -34
  470. package/test/fixtures/docx/F06-merged-cells-signature-table.docx +0 -0
  471. package/test/fixtures/docx/F06-merged-cells-signature-table.md +0 -34
  472. package/test/fixtures/docx/F07-inline-images-exhibit.docx +0 -0
  473. package/test/fixtures/docx/F07-inline-images-exhibit.md +0 -34
  474. package/test/fixtures/docx/F08-hyperlinks.docx +0 -0
  475. package/test/fixtures/docx/F08-hyperlinks.md +0 -33
  476. package/test/fixtures/docx/F09-comments-single-paragraph.docx +0 -0
  477. package/test/fixtures/docx/F09-comments-single-paragraph.md +0 -33
  478. package/test/fixtures/docx/F10-threaded-comments-resolve.docx +0 -0
  479. package/test/fixtures/docx/F10-threaded-comments-resolve.md +0 -33
  480. package/test/fixtures/docx/F11-redlines-basic.docx +0 -0
  481. package/test/fixtures/docx/F11-redlines-basic.md +0 -33
  482. package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.docx +0 -0
  483. package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.md +0 -33
  484. package/test/fixtures/docx/F13-comments-on-deleted-text.docx +0 -0
  485. package/test/fixtures/docx/F13-comments-on-deleted-text.md +0 -33
  486. package/test/fixtures/docx/F14-revisions-in-tables-and-lists.docx +0 -0
  487. package/test/fixtures/docx/F14-revisions-in-tables-and-lists.md +0 -33
  488. package/test/fixtures/docx/F15-sections-headers-footers.docx +0 -0
  489. package/test/fixtures/docx/F15-sections-headers-footers.md +0 -33
  490. package/test/fixtures/docx/F16-footnotes-endnotes.docx +0 -0
  491. package/test/fixtures/docx/F16-footnotes-endnotes.md +0 -33
  492. package/test/fixtures/docx/F17-fields-and-toc.docx +0 -0
  493. package/test/fixtures/docx/F17-fields-and-toc.md +0 -33
  494. package/test/fixtures/docx/F18-content-controls-template.docx +0 -0
  495. package/test/fixtures/docx/F18-content-controls-template.md +0 -33
  496. package/test/fixtures/docx/F19-custom-xml-doc-assembly.docx +0 -0
  497. package/test/fixtures/docx/F19-custom-xml-doc-assembly.md +0 -35
  498. package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.docx +0 -0
  499. package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.md +0 -33
  500. package/test/fixtures/docx/F21-malformed-broken-docx.docx +0 -0
  501. package/test/fixtures/docx/F21-malformed-broken-docx.md +0 -33
  502. package/test/fixtures/docx/README.md +0 -74
  503. package/test/fixtures/docx/certification-manifest.json +0 -104
  504. package/test/fixtures/docx/fixtures.manifest.json +0 -196
  505. package/test/fixtures/encrypted-docx/README.md +0 -27
  506. package/test/fixtures/encrypted-docx/certification-manifest.json +0 -9
  507. package/test/fixtures/encrypted-docx/fixtures.manifest.json +0 -47
  508. package/test/fixtures/scenarios/docx/README.md +0 -25
  509. package/test/fixtures/scenarios/docx/S01-sow-template.docx +0 -0
  510. package/test/fixtures/scenarios/docx/S01-sow-template.md +0 -30
  511. package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.docx +0 -0
  512. package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.md +0 -32
  513. package/test/fixtures/scenarios/docx/scenario-manifest.json +0 -53
  514. package/test/formats/xlsx/io/xlsx-import.test.ts +0 -766
  515. package/test/formats/xlsx/model/workbook.test.ts +0 -669
  516. package/test/helpers/dom-setup.ts +0 -124
  517. package/test/io/comment-roundtrip.test.ts +0 -272
  518. package/test/io/complex-content-roundtrip.test.ts +0 -632
  519. package/test/io/docx-compatibility-regression.test.ts +0 -199
  520. package/test/io/docx-session.test.ts +0 -1495
  521. package/test/io/footnotes-roundtrip.test.ts +0 -318
  522. package/test/io/headers-footers-roundtrip.test.ts +0 -547
  523. package/test/io/numbering-roundtrip.test.ts +0 -234
  524. package/test/io/package-reader.test.ts +0 -199
  525. package/test/io/paragraph-properties-roundtrip.test.ts +0 -129
  526. package/test/io/preserved-package-roundtrip.test.ts +0 -365
  527. package/test/io/property-completeness.test.ts +0 -292
  528. package/test/io/revision-roundtrip.test.ts +0 -347
  529. package/test/io/structural-blocks.test.ts +0 -202
  530. package/test/io/table-media-roundtrip.test.ts +0 -448
  531. package/test/io/table-properties-roundtrip.test.ts +0 -569
  532. package/test/io/table-roundtrip.test.ts +0 -302
  533. package/test/io/text-roundtrip.test.ts +0 -344
  534. package/test/model/canonical-document.test.ts +0 -285
  535. package/test/preservation/opaque-fragment-store.test.ts +0 -121
  536. package/test/preservation/package-preservation.test.ts +0 -395
  537. package/test/preservation/store.test.ts +0 -84
  538. package/test/review/comment-remapping.test.ts +0 -220
  539. package/test/review/comment-store.test.ts +0 -180
  540. package/test/review/move-revisions.test.ts +0 -143
  541. package/test/review/property-change-revisions.test.ts +0 -225
  542. package/test/review/revision-actions.test.ts +0 -330
  543. package/test/review/revision-store.test.ts +0 -193
  544. package/test/runtime/session-capabilities.test.ts +0 -260
  545. package/test/runtime/table-commands.test.ts +0 -356
  546. package/test/runtime/table-schema.test.ts +0 -221
  547. package/test/runtime/tracked-changes-toggle.test.ts +0 -107
  548. package/test/ui/comment-review-surface.test.tsx +0 -114
  549. package/test/ui/reduced-motion-toggle.test.tsx +0 -137
  550. package/test/ui/word-review-editor.imported-scenarios.test.tsx +0 -169
  551. package/test/ui/word-review-editor.interaction.test.tsx +0 -1198
  552. package/test/ui/word-review-editor.test.js +0 -188
  553. package/test/ui/word-review-editor.test.tsx +0 -280
  554. package/test/ui-tailwind/search-plugin.test.ts +0 -286
  555. package/test/validation/compatibility-engine.test.ts +0 -336
  556. package/test/validation/compatibility-report.test.ts +0 -189
  557. package/test/validation/low-priority-word-surfaces.test.ts +0 -282
  558. package/test/validation/malformed-doc.test.ts +0 -113
  559. package/test-results/.last-run.json +0 -4
  560. package/wave.config.json +0 -406
@@ -69,6 +69,27 @@ interface WordReviewEditorRuntime extends DocumentRuntime {
69
69
  dispose?(): void;
70
70
  }
71
71
 
72
+ const VISUALLY_HIDDEN_STYLES: React.CSSProperties = {
73
+ position: "absolute",
74
+ width: "1px",
75
+ height: "1px",
76
+ padding: 0,
77
+ margin: "-1px",
78
+ overflow: "hidden",
79
+ clip: "rect(0 0 0 0)",
80
+ whiteSpace: "nowrap",
81
+ border: 0,
82
+ };
83
+
84
+ const ACCESSIBLE_REGION_ORDER = [
85
+ "toolbar",
86
+ "document",
87
+ "review-rail",
88
+ "status",
89
+ ] as const;
90
+
91
+ type AccessibleRegionId = (typeof ACCESSIBLE_REGION_ORDER)[number];
92
+
72
93
  export function __createWordReviewEditorRefBridge(
73
94
  runtime: WordReviewEditorRuntime,
74
95
  ): WordReviewEditorRef {
@@ -241,6 +262,8 @@ export const WordReviewEditor = forwardRef<WordReviewEditorRef, WordReviewEditor
241
262
  const [showTrackedChanges, setShowTrackedChanges] = useState(false);
242
263
  const [activeRevisionId, setActiveRevisionId] = useState<string | undefined>();
243
264
  const runtimeRef = useRef<WordReviewEditorRuntime | null>(null);
265
+ const shellRef = useRef<HTMLDivElement | null>(null);
266
+ const lastAnnouncedErrorIdRef = useRef<string | null>(null);
244
267
  const autosaveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
245
268
  const lastSavedRevisionTokenRef = useRef<string | null>(null);
246
269
  const datastoreRef = useRef(datastore);
@@ -601,6 +624,10 @@ export const WordReviewEditor = forwardRef<WordReviewEditorRef, WordReviewEditor
601
624
 
602
625
  const selectionPreview = summarizeSelectionPreview(snapshot);
603
626
  const capabilities = deriveCapabilities(snapshot, reviewMode);
627
+ const diagnosticsModeMessage = getDiagnosticsModeMessage(loadError ?? snapshot.fatalError);
628
+ const accessibilityInstructionsId = `${documentId}-accessibility-instructions`;
629
+ const accessibilityStatusId = `${documentId}-accessibility-status`;
630
+ const accessibilityAlertId = `${documentId}-accessibility-alert`;
604
631
 
605
632
  const dispatchSelection = (selection: PublicSelectionSnapshot) =>
606
633
  activeRuntime.dispatch({
@@ -608,6 +635,46 @@ export const WordReviewEditor = forwardRef<WordReviewEditorRef, WordReviewEditor
608
635
  selection: toRuntimeSelectionSnapshot(selection),
609
636
  });
610
637
 
638
+ useEffect(() => {
639
+ const shell = shellRef.current;
640
+ if (!shell) {
641
+ return;
642
+ }
643
+
644
+ applyRegionAttributes(shell);
645
+ }, [runtime, snapshot.fatalError, snapshot.isReady]);
646
+
647
+ useEffect(() => {
648
+ const shell = shellRef.current;
649
+ const fatalError = loadError ?? snapshot.fatalError;
650
+ if (!shell || !fatalError) {
651
+ lastAnnouncedErrorIdRef.current = null;
652
+ return;
653
+ }
654
+
655
+ if (lastAnnouncedErrorIdRef.current === fatalError.errorId) {
656
+ return;
657
+ }
658
+
659
+ lastAnnouncedErrorIdRef.current = fatalError.errorId;
660
+ const alertTarget = shell.querySelector<HTMLElement>("[data-wre-alert='true']");
661
+ alertTarget?.focus();
662
+ }, [loadError, snapshot.fatalError]);
663
+
664
+ function handleShellKeyDownCapture(event: React.KeyboardEvent<HTMLDivElement>): void {
665
+ if (event.key !== "F6") {
666
+ return;
667
+ }
668
+
669
+ const shell = shellRef.current;
670
+ if (!shell) {
671
+ return;
672
+ }
673
+
674
+ event.preventDefault();
675
+ focusRelativeRegion(shell, event.shiftKey ? -1 : 1);
676
+ }
677
+
611
678
  const editorCallbacks = {
612
679
  onFocus: () => activeRuntime.focus(),
613
680
  onBlur: () => activeRuntime.blur(),
@@ -668,45 +735,199 @@ export const WordReviewEditor = forwardRef<WordReviewEditorRef, WordReviewEditor
668
735
  };
669
736
 
670
737
  return (
671
- <TwReviewWorkspace
672
- snapshot={snapshot}
673
- currentUserId={currentUser.userId}
674
- capabilities={capabilities}
675
- reviewMode={reviewMode}
676
- viewMode={viewMode}
677
- activeRailTab={activeRailTab}
678
- activeCommentId={snapshot.comments.activeCommentId}
679
- activeRevisionId={activeRevisionId}
680
- showTrackedChanges={showTrackedChanges}
681
- selectionPreview={selectionPreview}
682
- onViewModeChange={setViewMode}
683
- onActiveRailTabChange={setActiveRailTab}
684
- onShowTrackedChangesChange={setShowTrackedChanges}
685
- {...reviewCallbacks}
686
- document={
687
- <TwProseMirrorSurface
688
- currentUser={currentUser}
689
- snapshot={snapshot}
690
- reviewMode={reviewMode}
691
- markupDisplay={liveMarkupDisplay}
692
- activeRevisionId={activeRevisionId}
693
- showTrackedChanges={showTrackedChanges}
694
- {...editorCallbacks}
695
- onCommentActivated={(commentId) => {
696
- activeRuntime.openComment(commentId);
697
- setActiveRailTab("comments");
698
- }}
699
- onRevisionActivated={(revisionId) => {
700
- setActiveRevisionId(revisionId);
701
- setActiveRailTab("changes");
702
- }}
703
- />
704
- }
705
- />
738
+ <div
739
+ ref={shellRef}
740
+ role="region"
741
+ aria-label={`Word review editor for ${snapshot.sourceLabel ?? documentId}`}
742
+ aria-describedby={`${accessibilityInstructionsId} ${accessibilityStatusId}${
743
+ diagnosticsModeMessage ? ` ${accessibilityAlertId}` : ""
744
+ }`}
745
+ className="relative h-full"
746
+ onKeyDownCapture={handleShellKeyDownCapture}
747
+ >
748
+ <p id={accessibilityInstructionsId} style={VISUALLY_HIDDEN_STYLES}>
749
+ Press F6 to move focus between the toolbar, document surface, review rail, and status bar.
750
+ </p>
751
+ <div
752
+ id={accessibilityStatusId}
753
+ role="status"
754
+ aria-live="polite"
755
+ aria-atomic="true"
756
+ style={VISUALLY_HIDDEN_STYLES}
757
+ >
758
+ {buildAccessibilityStatusMessage(snapshot, loadError ?? undefined)}
759
+ </div>
760
+ {diagnosticsModeMessage ? (
761
+ <div
762
+ id={accessibilityAlertId}
763
+ data-wre-alert="true"
764
+ role="alert"
765
+ aria-live="assertive"
766
+ aria-atomic="true"
767
+ tabIndex={-1}
768
+ className="border-b border-danger/30 bg-danger/5 px-4 py-3 text-sm text-danger"
769
+ >
770
+ {diagnosticsModeMessage}
771
+ </div>
772
+ ) : null}
773
+ <TwReviewWorkspace
774
+ snapshot={snapshot}
775
+ currentUserId={currentUser.userId}
776
+ capabilities={capabilities}
777
+ reviewMode={reviewMode}
778
+ viewMode={viewMode}
779
+ activeRailTab={activeRailTab}
780
+ activeCommentId={snapshot.comments.activeCommentId}
781
+ activeRevisionId={activeRevisionId}
782
+ showTrackedChanges={showTrackedChanges}
783
+ selectionPreview={selectionPreview}
784
+ onViewModeChange={setViewMode}
785
+ onActiveRailTabChange={setActiveRailTab}
786
+ onShowTrackedChangesChange={setShowTrackedChanges}
787
+ {...reviewCallbacks}
788
+ document={
789
+ <TwProseMirrorSurface
790
+ currentUser={currentUser}
791
+ snapshot={snapshot}
792
+ reviewMode={reviewMode}
793
+ markupDisplay={liveMarkupDisplay}
794
+ activeRevisionId={activeRevisionId}
795
+ showTrackedChanges={showTrackedChanges}
796
+ {...editorCallbacks}
797
+ onCommentActivated={(commentId) => {
798
+ activeRuntime.openComment(commentId);
799
+ setActiveRailTab("comments");
800
+ }}
801
+ onRevisionActivated={(revisionId) => {
802
+ setActiveRevisionId(revisionId);
803
+ setActiveRailTab("changes");
804
+ }}
805
+ />
806
+ }
807
+ />
808
+ </div>
706
809
  );
707
810
  },
708
811
  );
709
812
 
813
+ function applyRegionAttributes(shell: HTMLElement): void {
814
+ const toolbar = shell.querySelector<HTMLElement>("header");
815
+ if (toolbar) {
816
+ toolbar.dataset.wreRegion = "toolbar";
817
+ toolbar.setAttribute("role", toolbar.getAttribute("role") ?? "toolbar");
818
+ toolbar.setAttribute("aria-label", toolbar.getAttribute("aria-label") ?? "Editor toolbar");
819
+ toolbar.tabIndex = -1;
820
+ }
821
+
822
+ const documentSurface = shell.querySelector<HTMLElement>('[aria-label="Document surface"]');
823
+ if (documentSurface) {
824
+ documentSurface.dataset.wreRegion = "document";
825
+ }
826
+
827
+ const reviewRail = shell.querySelector<HTMLElement>('[aria-label="Review rail"]');
828
+ if (reviewRail) {
829
+ reviewRail.dataset.wreRegion = "review-rail";
830
+ reviewRail.tabIndex = -1;
831
+ }
832
+
833
+ const statusBar = shell.querySelector<HTMLElement>("footer");
834
+ if (statusBar) {
835
+ statusBar.dataset.wreRegion = "status";
836
+ statusBar.setAttribute("role", statusBar.getAttribute("role") ?? "status");
837
+ statusBar.setAttribute("aria-label", statusBar.getAttribute("aria-label") ?? "Editor status bar");
838
+ statusBar.tabIndex = -1;
839
+ }
840
+ }
841
+
842
+ function focusRelativeRegion(shell: HTMLElement, direction: -1 | 1): void {
843
+ const activeRegion = getActiveRegionId(shell);
844
+ const startIndex =
845
+ activeRegion === null ? (direction === 1 ? -1 : 0) : ACCESSIBLE_REGION_ORDER.indexOf(activeRegion);
846
+
847
+ for (let offset = 1; offset <= ACCESSIBLE_REGION_ORDER.length; offset += 1) {
848
+ const index =
849
+ (startIndex + direction * offset + ACCESSIBLE_REGION_ORDER.length) %
850
+ ACCESSIBLE_REGION_ORDER.length;
851
+ const regionId = ACCESSIBLE_REGION_ORDER[index];
852
+ const target = findRegionFocusTarget(shell, regionId);
853
+ if (target) {
854
+ target.focus();
855
+ return;
856
+ }
857
+ }
858
+ }
859
+
860
+ function getActiveRegionId(shell: HTMLElement): AccessibleRegionId | null {
861
+ const activeElement = shell.ownerDocument.activeElement;
862
+ if (!(activeElement instanceof HTMLElement)) {
863
+ return null;
864
+ }
865
+
866
+ const region = activeElement.closest<HTMLElement>("[data-wre-region]");
867
+ const regionId = region?.dataset.wreRegion;
868
+ return isAccessibleRegionId(regionId) ? regionId : null;
869
+ }
870
+
871
+ function findRegionFocusTarget(
872
+ shell: HTMLElement,
873
+ regionId: AccessibleRegionId,
874
+ ): HTMLElement | null {
875
+ const region = shell.querySelector<HTMLElement>(`[data-wre-region="${regionId}"]`);
876
+ if (!region) {
877
+ return null;
878
+ }
879
+
880
+ if (regionId === "document" || regionId === "toolbar" || regionId === "review-rail" || regionId === "status") {
881
+ return region;
882
+ }
883
+ }
884
+
885
+ function isAccessibleRegionId(value: string | undefined): value is AccessibleRegionId {
886
+ return value === "toolbar" || value === "document" || value === "review-rail" || value === "status";
887
+ }
888
+
889
+ function buildAccessibilityStatusMessage(
890
+ snapshot: RuntimeRenderSnapshot,
891
+ loadError?: EditorError,
892
+ ): string {
893
+ if (loadError) {
894
+ return `Editor failed to load. ${loadError.message}`;
895
+ }
896
+
897
+ if (!snapshot.isReady) {
898
+ return "Editor loading. Document surface is not ready yet.";
899
+ }
900
+
901
+ if (snapshot.fatalError) {
902
+ return `Editor opened in diagnostics mode. ${snapshot.fatalError.message}`;
903
+ }
904
+
905
+ return [
906
+ snapshot.readOnly ? "Read-only mode." : "Editing enabled.",
907
+ `${snapshot.comments.totalCount} comment${snapshot.comments.totalCount === 1 ? "" : "s"}.`,
908
+ `${snapshot.trackedChanges.totalCount} tracked change${
909
+ snapshot.trackedChanges.totalCount === 1 ? "" : "s"
910
+ }.`,
911
+ snapshot.compatibility.blockExport ? "Export blocked." : "Export available.",
912
+ ].join(" ");
913
+ }
914
+
915
+ function getDiagnosticsModeMessage(error?: EditorError | null): string | null {
916
+ if (!error) {
917
+ return null;
918
+ }
919
+
920
+ if (error.code === "package_corrupt") {
921
+ return `${error.message} The document opened in read-only diagnostics mode so you can inspect the issue safely, but editing and export stay blocked until you reload a valid .docx package.`;
922
+ }
923
+
924
+ if (error.code === "validation_failed") {
925
+ return `${error.message} The document opened in read-only diagnostics mode because OOXML validation failed, so editing and export stay blocked until the source package is repaired.`;
926
+ }
927
+
928
+ return error.isFatal ? error.message : null;
929
+ }
930
+
710
931
  function normalizeEditorError(error: unknown): EditorError {
711
932
  if (
712
933
  typeof error === "object" &&
@@ -123,14 +123,14 @@ export function TwEditorSurface(props: TwEditorSurfaceProps) {
123
123
  onCommentActivated={props.onCommentActivated}
124
124
  onRevisionActivated={props.onRevisionActivated}
125
125
  />
126
- ) : (
126
+ ) : block.kind === "opaque_block" ? (
127
127
  <TwOpaqueBlock
128
128
  key={block.blockId}
129
129
  block={block}
130
130
  selection={snapshot.selection}
131
131
  onSelectionChange={props.onSelectionChange}
132
132
  />
133
- ),
133
+ ) : null,
134
134
  )
135
135
  ) : (
136
136
  <p className="text-sm text-secondary leading-relaxed">
@@ -13,6 +13,20 @@
13
13
 
14
14
  import type { Node as PMNode } from "prosemirror-model";
15
15
 
16
+ function resolveRenderedColspan(node: PMNode): number {
17
+ const colspan = node.attrs.colspan as number | undefined;
18
+ if (typeof colspan === "number" && colspan > 1) {
19
+ return colspan;
20
+ }
21
+
22
+ const gridSpan = node.attrs.gridSpan as number | undefined;
23
+ if (typeof gridSpan === "number" && gridSpan > 1) {
24
+ return gridSpan;
25
+ }
26
+
27
+ return 1;
28
+ }
29
+
16
30
  /**
17
31
  * NodeView for the table node.
18
32
  * Renders as <table><tbody>...</tbody></table>.
@@ -67,7 +81,7 @@ export class TableCellNodeView {
67
81
  ? "border border-primary/20 p-2 align-top font-semibold bg-surface-raised"
68
82
  : "border border-primary/20 p-2 align-top";
69
83
 
70
- const colspan = node.attrs.colspan as number;
84
+ const colspan = resolveRenderedColspan(node);
71
85
  const rowspan = node.attrs.rowspan as number;
72
86
  if (colspan > 1) (cell as HTMLTableCellElement).colSpan = colspan;
73
87
  if (rowspan > 1) (cell as HTMLTableCellElement).rowSpan = rowspan;
@@ -85,7 +99,7 @@ export class TableCellNodeView {
85
99
  const expectedTag = isHeader ? "TH" : "TD";
86
100
  if (this.dom.tagName !== expectedTag) return false;
87
101
 
88
- const colspan = node.attrs.colspan as number;
102
+ const colspan = resolveRenderedColspan(node);
89
103
  const rowspan = node.attrs.rowspan as number;
90
104
  const cell = this.dom as HTMLTableCellElement;
91
105
  cell.colSpan = colspan > 1 ? colspan : 1;
@@ -1,5 +0,0 @@
1
- [projects."/home/coder/docx-react-component"]
2
- trust_level = "trusted"
3
-
4
- [mcp_servers.context7]
5
- command = "/home/coder/docx-react-component/scripts/run-context7-mcp.sh"
@@ -1 +0,0 @@
1
- {"locator":{"name":"pnpm","reference":"10.30.3"},"bin":{"pnpm":"./bin/pnpm.cjs","pnpx":"./bin/pnpx.cjs"},"hash":"sha512.c961d1e0a2d8e354ecaa5166b822516668b7f44cb5bd95122d590dd81922f606f5473b6d23ec4a5be05e7fcd18e8488d47d978bbe981872f1145d06e9a740017"}
@@ -1,22 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2015-2016 Rico Sta. Cruz and other contributors
4
- Copyright (c) 2016-2025 Zoltan Kochan and other contributors
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining a copy
7
- of this software and associated documentation files (the "Software"), to deal
8
- in the Software without restriction, including without limitation the rights
9
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- copies of the Software, and to permit persons to whom the Software is
11
- furnished to do so, subject to the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be included in all
14
- copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
- SOFTWARE.
@@ -1,240 +0,0 @@
1
- [简体中文](https://pnpm.io/zh/) |
2
- [日本語](https://pnpm.io/ja/) |
3
- [한국어](https://pnpm.io/ko/) |
4
- [Italiano](https://pnpm.io/it/) |
5
- [Português Brasileiro](https://pnpm.io/pt/)
6
-
7
- <picture>
8
- <source media="(prefers-color-scheme: light)" srcset="https://i.imgur.com/qlW1eEG.png">
9
- <source media="(prefers-color-scheme: dark)" srcset="https://i.imgur.com/qlW1eEG.png">
10
- <img src="https://i.imgur.com/qlW1eEG.png" alt="pnpm">
11
- </picture>
12
-
13
- Fast, disk space efficient package manager:
14
-
15
- * **Fast.** Up to 2x faster than the alternatives (see [benchmark](#benchmark)).
16
- * **Efficient.** Files inside `node_modules` are linked from a single content-addressable storage.
17
- * **[Great for monorepos](https://pnpm.io/workspaces).**
18
- * **Strict.** A package can access only dependencies that are specified in its `package.json`.
19
- * **Deterministic.** Has a lockfile called `pnpm-lock.yaml`.
20
- * **Works as a Node.js version manager.** See [pnpm env use](https://pnpm.io/cli/env).
21
- * **Works everywhere.** Supports Windows, Linux, and macOS.
22
- * **Battle-tested.** Used in production by teams of [all sizes](https://pnpm.io/users) since 2016.
23
- * [See the full feature comparison with npm and Yarn](https://pnpm.io/feature-comparison).
24
-
25
- To quote the [Rush](https://rushjs.io/) team:
26
-
27
- > Microsoft uses pnpm in Rush repos with hundreds of projects and hundreds of PRs per day, and we’ve found it to be very fast and reliable.
28
-
29
- [![npm version](https://img.shields.io/npm/v/pnpm.svg?label=latest)](https://github.com/pnpm/pnpm/releases/latest)
30
- [![OpenCollective](https://opencollective.com/pnpm/backers/badge.svg)](https://opencollective.com/pnpm)
31
- [![OpenCollective](https://opencollective.com/pnpm/sponsors/badge.svg)](https://opencollective.com/pnpm)
32
- [![X Follow](https://img.shields.io/twitter/follow/pnpmjs.svg?style=social&label=Follow)](https://x.com/intent/follow?screen_name=pnpmjs&region=follow_link)
33
- [![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://stand-with-ukraine.pp.ua)
34
-
35
- ## Platinum Sponsors
36
-
37
- <table>
38
- <tbody>
39
- <tr>
40
- <td align="center" valign="middle">
41
- <a href="https://bit.dev/?utm_source=pnpm&utm_medium=readme" target="_blank"><img src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
42
- </td>
43
- </tr>
44
- </tbody>
45
- </table>
46
-
47
- ## Gold Sponsors
48
-
49
- <table>
50
- <tbody>
51
- <tr>
52
- <td align="center" valign="middle">
53
- <a href="https://sanity.io/?utm_source=pnpm&utm_medium=readme" target="_blank">
54
- <picture>
55
- <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/sanity.svg" />
56
- <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/sanity_light.svg" />
57
- <img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity" />
58
- </picture>
59
- </a>
60
- </td>
61
- <td align="center" valign="middle">
62
- <a href="https://discord.com/?utm_source=pnpm&utm_medium=readme" target="_blank">
63
- <picture>
64
- <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/discord.svg" />
65
- <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/discord_light.svg" />
66
- <img src="https://pnpm.io/img/users/discord.svg" width="220" alt="Discord" />
67
- </picture>
68
- </a>
69
- </td>
70
- <td align="center" valign="middle">
71
- <a href="https://vite.dev/?utm_source=pnpm&utm_medium=readme" target="_blank">
72
- <img src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite">
73
- </a>
74
- </td>
75
- </tr>
76
- <tr>
77
- <td align="center" valign="middle">
78
- <a href="https://serpapi.com/?utm_source=pnpm&utm_medium=readme" target="_blank">
79
- <picture>
80
- <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/serpapi_dark.svg" />
81
- <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/serpapi_light.svg" />
82
- <img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160" alt="SerpApi" />
83
- </picture>
84
- </a>
85
- </td>
86
- <td align="center" valign="middle">
87
- <a href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=readme" target="_blank">
88
- <picture>
89
- <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/coderabbit.svg" />
90
- <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
91
- <img src="https://pnpm.io/img/users/coderabbit.svg" width="220" alt="CodeRabbit" />
92
- </picture>
93
- </a>
94
- </td>
95
- <td align="center" valign="middle">
96
- <a href="https://workleap.com/?utm_source=pnpm&utm_medium=readme" target="_blank">
97
- <picture>
98
- <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/workleap.svg" />
99
- <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/workleap_light.svg" />
100
- <img src="https://pnpm.io/img/users/workleap.svg" width="190" alt="Workleap" />
101
- </picture>
102
- </a>
103
- </td>
104
- </tr>
105
- <tr>
106
- <td align="center" valign="middle">
107
- <a href="https://stackblitz.com/?utm_source=pnpm&utm_medium=readme" target="_blank">
108
- <picture>
109
- <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/stackblitz.svg" />
110
- <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/stackblitz_light.svg" />
111
- <img src="https://pnpm.io/img/users/stackblitz.svg" width="190" alt="Stackblitz" />
112
- </picture>
113
- </a>
114
- </td>
115
- <td align="center" valign="middle">
116
- <a href="https://nx.dev/?utm_source=pnpm&utm_medium=readme" target="_blank">
117
- <picture>
118
- <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/nx.svg" />
119
- <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/nx_light.svg" />
120
- <img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" />
121
- </picture>
122
- </a>
123
- </td>
124
- </tr>
125
- </tbody>
126
- </table>
127
-
128
- ## Silver Sponsors
129
-
130
- <table>
131
- <tbody>
132
- <tr>
133
- <td align="center" valign="middle">
134
- <a href="https://uscreen.de/?utm_source=pnpm&utm_medium=readme" target="_blank">
135
- <picture>
136
- <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/uscreen.svg" />
137
- <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/uscreen_light.svg" />
138
- <img src="https://pnpm.io/img/users/uscreen.svg" width="180" alt="u|screen" />
139
- </picture>
140
- </a>
141
- </td>
142
- <td align="center" valign="middle">
143
- <a href="https://leniolabs.com/?utm_source=pnpm&utm_medium=readme" target="_blank">
144
- <img src="https://pnpm.io/img/users/leniolabs.jpg" width="40" alt="Leniolabs_">
145
- </a>
146
- </td>
147
- <td align="center" valign="middle">
148
- <a href="https://depot.dev/?utm_source=pnpm&utm_medium=readme" target="_blank">
149
- <picture>
150
- <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/depot.svg" />
151
- <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/depot_light.svg" />
152
- <img src="https://pnpm.io/img/users/depot.svg" width="100" alt="Depot" />
153
- </picture>
154
- </a>
155
- </td>
156
- </tr>
157
- <tr>
158
- <td align="center" valign="middle">
159
- <a href="https://devowl.io/?utm_source=pnpm&utm_medium=readme" target="_blank">
160
- <picture>
161
- <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/devowlio.svg" />
162
- <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/devowlio.svg" />
163
- <img src="https://pnpm.io/img/users/devowlio.svg" width="100" alt="devowl.io" />
164
- </picture>
165
- </a>
166
- </td>
167
- <td align="center" valign="middle">
168
- <a href="https://cerbos.dev/?utm_source=pnpm&utm_medium=readme" target="_blank">
169
- <picture>
170
- <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/cerbos.svg" />
171
- <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/cerbos_light.svg" />
172
- <img src="https://pnpm.io/img/users/cerbos.svg" width="90" alt="Cerbos" />
173
- </picture>
174
- </a>
175
- </td>
176
- <td align="center" valign="middle">
177
- <a href="https://oomol.com/?utm_source=pnpm&utm_medium=readme" target="_blank">
178
- <picture>
179
- <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/oomol.svg" />
180
- <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/oomol_light.svg" />
181
- <img src="https://pnpm.io/img/users/oomol.svg" width="90" alt="OOMOL Studio" />
182
- </picture>
183
- </a>
184
- </td>
185
- </tr>
186
- </tbody>
187
- </table>
188
-
189
- Support this project by [becoming a sponsor](https://opencollective.com/pnpm#sponsor).
190
-
191
- ## Background
192
-
193
- pnpm uses a content-addressable filesystem to store all files from all module directories on a disk.
194
- When using npm, if you have 100 projects using lodash, you will have 100 copies of lodash on disk.
195
- With pnpm, lodash will be stored in a content-addressable storage, so:
196
-
197
- 1. If you depend on different versions of lodash, only the files that differ are added to the store.
198
- If lodash has 100 files, and a new version has a change only in one of those files,
199
- `pnpm update` will only add 1 new file to the storage.
200
- 1. All the files are saved in a single place on the disk. When packages are installed, their files are linked
201
- from that single place consuming no additional disk space. Linking is performed using either hard-links or reflinks (copy-on-write).
202
-
203
- As a result, you save gigabytes of space on your disk and you have a lot faster installations!
204
- If you'd like more details about the unique `node_modules` structure that pnpm creates and
205
- why it works fine with the Node.js ecosystem, read this small article: [Flat node_modules is not the only way](https://pnpm.io/blog/2020/05/27/flat-node-modules-is-not-the-only-way).
206
-
207
- 💖 Like this project? Let people know with a [tweet](https://r.pnpm.io/tweet)
208
-
209
- ## Installation
210
-
211
- For installation options [visit our website](https://pnpm.io/installation).
212
-
213
- ## Usage
214
-
215
- Just use pnpm in place of npm/Yarn. E.g., install dependencies via:
216
-
217
- ```
218
- pnpm install
219
- ```
220
-
221
- For more advanced usage, read [pnpm CLI](https://pnpm.io/pnpm-cli) on our website, or run `pnpm help`.
222
-
223
- ## Benchmark
224
-
225
- pnpm is up to 2x faster than npm and Yarn classic. See all benchmarks [here](https://r.pnpm.io/benchmarks).
226
-
227
- Benchmarks on an app with lots of dependencies:
228
-
229
- ![](https://pnpm.io/img/benchmarks/alotta-files.svg)
230
-
231
- ## Support
232
-
233
- - [Frequently Asked Questions](https://pnpm.io/faq)
234
- - [X](https://x.com/pnpmjs)
235
- - [Bluesky](https://bsky.app/profile/pnpm.io)
236
-
237
- ## License
238
-
239
- [MIT](https://github.com/pnpm/pnpm/blob/main/LICENSE)
240
-
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env sh
2
- if [ "x$npm_config_node_gyp" = "x" ]; then
3
- node "`dirname "$0"`/../node_modules/node-gyp/bin/node-gyp.js" "$@"
4
- else
5
- "$npm_config_node_gyp" "$@"
6
- fi