Skip to content

Commit fa67048

Browse files
sciyoshiclaude
andcommitted
feat: sync prosemirror-transform to 1.11.0
- Add Transform.changedRange() method that returns document range covering all content changes made by the transform - Add StepMap.offset() static method for creating offset maps - Make doc_changed a @Property instead of a method to match upstream Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent b28b1d4 commit fa67048

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

prosemirror/transform/map.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,12 @@ def invert(self) -> "StepMap":
170170
def __str__(self) -> str:
171171
return ("-" if self.inverted else "") + str(self.ranges)
172172

173+
@staticmethod
174+
def offset(n: int) -> "StepMap":
175+
if n == 0:
176+
return StepMap.empty
177+
return StepMap([0, -n, 0] if n < 0 else [0, 0, n])
178+
173179

174180
StepMap.empty = StepMap([])
175181

prosemirror/transform/transform.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,31 @@ def maybe_step(self, step: Step) -> StepResult:
7878
self.add_step(step, result.doc)
7979
return result
8080

81+
@property
8182
def doc_changed(self) -> bool:
82-
return bool(len(self.steps))
83+
return len(self.steps) > 0
84+
85+
def changed_range(self) -> dict[str, int] | None:
86+
from_ = int(1e9)
87+
to = int(-1e9)
88+
for i in range(len(self.mapping.maps)):
89+
map_ = self.mapping.maps[i]
90+
if i:
91+
from_ = map_.map(from_, 1)
92+
to = map_.map(to, -1)
93+
94+
def update_range(
95+
_f: int,
96+
_t: int,
97+
from_b: int,
98+
to_b: int,
99+
) -> None:
100+
nonlocal from_, to
101+
from_ = min(from_, from_b)
102+
to = max(to, to_b)
103+
104+
map_.for_each(update_range)
105+
return None if from_ == int(1e9) else {"from": from_, "to": to}
83106

84107
def add_step(self, step: Step, doc: Node) -> None:
85108
self.docs.append(self.doc)

0 commit comments

Comments
 (0)