Commit 16bad0d
authored
refactor: migrate paragraph consumers to directionContext (SD-2777) (#3263)
* refactor: read paragraph direction from directionContext (SD-2777)
Migrates Phase A paragraph consumers onto Wave 1a's resolver context
(SD-2776). Adds getParagraphInlineDirection helper in @superdoc/contracts
that reads directionContext.inlineDirection first, with a compat fallback
to legacy attrs.direction / attrs.dir / attrs.rtl /
paragraphProperties.rightToLeft until SD-2778 collapses the duplicates.
Behavior is unchanged because pm-adapter still mirrors
directionContext.inlineDirection onto the legacy fields, so hash output
stays identical.
Phase A scope (consumers, paragraph-axis only):
- layout-bridge: paragraph-hash-utils, cache (paragraph + cell sites)
- layout-resolved: versionSignature (block + cell sites)
- painter-dom: renderer (block + cell hash sites)
- super-editor: listBoundaryNavigationPlugin
Out of scope (deferred):
- Table-axis consumers (renderTableFragment / renderTableCell /
renderTableRow). Wait for PR #3227 to settle since it overlaps these.
- SD-2779 rename of the rtl-paragraph DomPainter feature module.
Kept separate to avoid diff noise.
- ParagraphNodeView.inferParagraphRtlFromRuns - heuristic violates the
resolver's no-infer-from-runs rule; removing it is a behavior change.
* chore(comments): apply comment-policy fixes to Phase A
- Drop paraphrase from three `// Direction` section labels in layout-bridge.
The label now matches the surrounding `// Shading` / `// Tabs` neighbors;
the helper's name + JSDoc already document the read order.
- Reshape the compat-fallback comment on getParagraphInlineDirection into
the policy's canonical `AIDEV-NOTE: compat-fallback - <trigger>. Retire
once <condition>.` form per comment-policy.md.
No behavior change.
* test(pm-adapter): pin direction <-> directionContext.inlineDirection invariant (SD-2777)
Verifies the load-bearing property of the Phase A migration: pm-adapter
must write `paragraphAttrs.direction` and
`paragraphAttrs.directionContext.inlineDirection` as either the same value
or both undefined.
This is what makes `getParagraphInlineDirection(attrs)` produce a hash
byte-identical to the legacy `attrs.direction` read on FlowBlock attrs.
Layout-compare against 462 R2 docs returned 0 changed snapshots; this test
codifies the invariant so a future change to the writer can't silently
break hash stability.
Also rename `getParagraphInlineDirection` test 'returns undefined when
directionContext is present with no inlineDirection' to
'falls back past directionContext when inlineDirection is null' so the
title matches the assertion.
* refactor: migrate remaining FlowBlock attrs direction reads to helper (SD-2777)
Catches four `attrs?.direction === 'rtl'` reads the original audit's regex
missed (the optional-chain form `attrs?.direction` didn't match
`attrs\.direction`):
- painters/dom/src/renderer.ts:3182, 3289 - render-path isRtl lookups
- painters/dom/src/features/rtl-paragraph/rtl-styles.ts - isRtlParagraph helper
- super-editor/.../CaretGeometry.ts - caret RTL adjustment
Behavior is unchanged: the pm-adapter invariant test added in the previous
commit proves `direction` and `directionContext.inlineDirection` are always
paired (or both undefined). These call sites resolve to the same value via
the helper as they did via the legacy scalar.
Caught via codex-bot review comment on PR #3263 plus a broader grep for
`paragraphProperties.rightToLeft` reads.
Two upstream consumers remain out of scope: `headless-toolbar/helpers/
paragraph.ts` and `extensions/text-align/text-align.js` read
`paragraphProperties.rightToLeft` at the style-resolved layer, upstream of
pm-adapter where directionContext doesn't exist yet.1 parent 27c76c6 commit 16bad0d
11 files changed
Lines changed: 192 additions & 66 deletions
File tree
- packages
- layout-engine
- contracts/src
- layout-bridge/src
- layout-resolved/src
- painters/dom/src
- features/rtl-paragraph
- pm-adapter/src/attributes
- super-editor/src/editors/v1
- core/presentation-editor/selection
- extensions/paragraph
Lines changed: 51 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
Lines changed: 37 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
156 | 156 | | |
157 | 157 | | |
158 | 158 | | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| 19 | + | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
3 | | - | |
4 | | - | |
5 | | - | |
6 | | - | |
7 | | - | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
| |||
392 | 393 | | |
393 | 394 | | |
394 | 395 | | |
395 | | - | |
| 396 | + | |
| 397 | + | |
396 | 398 | | |
397 | 399 | | |
398 | 400 | | |
| |||
547 | 549 | | |
548 | 550 | | |
549 | 551 | | |
550 | | - | |
| 552 | + | |
| 553 | + | |
551 | 554 | | |
552 | 555 | | |
553 | 556 | | |
| |||
Lines changed: 12 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
3 | | - | |
4 | | - | |
5 | | - | |
6 | | - | |
7 | | - | |
8 | | - | |
9 | | - | |
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
| |||
202 | 203 | | |
203 | 204 | | |
204 | 205 | | |
205 | | - | |
| 206 | + | |
| 207 | + | |
206 | 208 | | |
207 | 209 | | |
208 | 210 | | |
| |||
Lines changed: 21 additions & 20 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
3 | | - | |
4 | | - | |
5 | | - | |
6 | | - | |
7 | | - | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
| |||
293 | 294 | | |
294 | 295 | | |
295 | 296 | | |
296 | | - | |
| 297 | + | |
297 | 298 | | |
298 | 299 | | |
299 | 300 | | |
| |||
437 | 438 | | |
438 | 439 | | |
439 | 440 | | |
440 | | - | |
| 441 | + | |
441 | 442 | | |
442 | 443 | | |
443 | 444 | | |
| |||
Lines changed: 3 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
| 16 | + | |
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
| 64 | + | |
64 | 65 | | |
65 | 66 | | |
66 | 67 | | |
| |||
3178 | 3179 | | |
3179 | 3180 | | |
3180 | 3181 | | |
3181 | | - | |
| 3182 | + | |
3182 | 3183 | | |
3183 | 3184 | | |
3184 | 3185 | | |
| |||
3285 | 3286 | | |
3286 | 3287 | | |
3287 | 3288 | | |
3288 | | - | |
| 3289 | + | |
3289 | 3290 | | |
3290 | 3291 | | |
3291 | 3292 | | |
| |||
7774 | 7775 | | |
7775 | 7776 | | |
7776 | 7777 | | |
7777 | | - | |
| 7778 | + | |
7778 | 7779 | | |
7779 | 7780 | | |
7780 | 7781 | | |
| |||
7960 | 7961 | | |
7961 | 7962 | | |
7962 | 7963 | | |
7963 | | - | |
| 7964 | + | |
7964 | 7965 | | |
7965 | 7966 | | |
7966 | 7967 | | |
| |||
Lines changed: 31 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
348 | 348 | | |
349 | 349 | | |
350 | 350 | | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
351 | 382 | | |
352 | 383 | | |
353 | 384 | | |
| |||
Lines changed: 11 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
12 | | - | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| |||
196 | 197 | | |
197 | 198 | | |
198 | 199 | | |
199 | | - | |
| 200 | + | |
200 | 201 | | |
201 | 202 | | |
202 | 203 | | |
| |||
0 commit comments