Document의 offset 선택과 네이티브 범위 방향을 보존한다 - #724
Conversation
머지 전 리뷰 및 통합검토 대상: Document point 비교, 블록 toggle 유지, Web의 방향 있는 anchor/focus 변환, React의 native range 보존, Host의 네이티브 키 입력 소유권을 검토했다. 구현에서 머지를 막는 결함은 발견하지 못했다. 리뷰에서 확인한 문서 불일치 두 가지를 현재 Done의 검증 경계에 맞춰 보완한다.
#722 통합 중 두 README의 말미 추가 부분만 충돌했다. 양쪽 owner 계약을 모두 보존해 해결하고, 결합된 package 적합성·문서·source 등록·브라우저 검증을 실행한다. Core, selection shape, 다른 editor 정책과 native range 복원의 기존 한계는 그대로다. |
# Conflicts: # packages/json-document-editing/README.md # packages/json-document-web/README.md
리뷰 보완 및 통합 검증 완료최종 검토 대상: 통합 후 검증:
기존 Document 선택/복원과 React range collapse 실패는 구현 전에 재현한 회귀이며 이번 통합 후에도 해당 테스트가 통과한다. Core·selection shape·블록 toggle/Copy/Cut/Paste·History owner 불변 조건을 확인했다. offset 하나로 과거 native range 전체를 복원하거나 모든 profile을 Stable로 선언하는 계약은 추가하지 않았다. 원격 PR 본문·HEAD·17개 변경 경로·#723 closing 연결이 검증한 로컬 상태와 일치한다. 머지를 막는 코드 결함이나 미해결 리뷰 의견은 없다. 현재 최신 커밋의 CI 실행을 확인 중이며 성공 후 사용자의 “리뷰 후 머지” 요청에 따라 머지한다. |
Document에서 같은 블록의 offset을 0→2로 바꿔도 성공 결과와 함께 offset 0이 남았다. endpoint 비교가 block ID만 보고 변경을 같다고 판정했기 때문이다. replace/extend는 offset까지 비교하고 블록 toggle은 기존 ID 기준을 유지해, 커서 이동·양방향 확장·범위 collapse와 편집 후 Undo 복원을 바로잡는다.
실제 입력 경로에서도 같은 결과를 유지하도록 함께 수정했다. Web의
textSelectionFromControl이 native 방향을 기존SelectionRange<number>로 번역하고, ReactDocumentTextControl은 focus offset이 이미 일치하는 네이티브 범위를 커서로 접지 않는다. Document Demo의 중복keyboard.text설정을 제거해 textarea의 방향키·Shift 선택을 가로채지 않게 했다. 새 Web 함수의 owner 문서/API reference와 기존 Usage/source 등록을 연결했다.Core API, editor selection shape, 블록 단위 toggle·Copy/Cut/Paste 및 History owner는 유지한다. 먼저 머지된 #722의 공통 적합성 설계를 통합했고, 설계 문서의 offset 결함 관찰 기록을 수정 후 owner별 회귀 증거로 연결했다. Web API의 end·direction 생략 시 동작도 문서에서 구별한다.
검증
[2,4]를[4,4]로 접는 실패를 재현한 뒤 수정git diff --check통과기존 Chrome 제어는 검증 탭을 후속 호출에서 찾지 못해 유지할 수 없었다. 사전 안내 후 로그인 없이 동작하는 로컬 페이지를 Playwright의 별도 Chrome 테스트 프로필로 검사했다.
offset하나가 과거 네이티브 DOM 범위 전체를 복원하는 계약은 추가하지 않는다. editor의 기록된 offset/range 복원과 native range 보존·외부 cursor 위치 복원을 문서에서 구별한다.Closes #723