조사할 것
widget decoration은 문서 model에는 없지만 DOM에는 존재하는 zero-size view이다. widget DOM identity, key reuse, destroy cleanup, selection side가 불안정하면 cursor와 DOM diff가 깨진다.
prosemirror-view 근거
우리 에디터에서 확인할 것
- placeholder, inline menu anchor, comment marker, cursor affordance가 widget인지 document node인지 분류한다.
- DOM node 재사용과 key 기반 재생성 중 어떤 방식을 쓸지 정한다.
완료 기준
관련
조사할 것
widget decoration은 문서 model에는 없지만 DOM에는 존재하는 zero-size view이다. widget DOM identity, key reuse, destroy cleanup, selection side가 불안정하면 cursor와 DOM diff가 깨진다.
prosemirror-view 근거
WidgetType.eq는 기본적으로 DOM constructor/spec를 비교하고,key가 있으면 key로 동일성을 판단한다.https://github.com/ProseMirror/prosemirror-view/blob/ca4c78e9b56f1b164c0b3758b59d8748f11b7534/src/decoration.ts#L23-L49
Decoration.widget의side,relaxedSide,stopEvent,ignoreSelection,key,destroy옵션이 DOM selection과 lifecycle을 제어한다.https://github.com/ProseMirror/prosemirror-view/blob/ca4c78e9b56f1b164c0b3758b59d8748f11b7534/src/decoration.ts#L135-L203
WidgetViewDesc는 raw가 아니면 DOM을 span으로 감싸고contentEditable=false,ProseMirror-widgetclass를 설정한다.https://github.com/ProseMirror/prosemirror-view/blob/ca4c78e9b56f1b164c0b3758b59d8748f11b7534/src/viewdesc.ts#L536-L557
https://github.com/ProseMirror/prosemirror-view/blob/ca4c78e9b56f1b164c0b3758b59d8748f11b7534/src/viewdesc.ts#L559-L583
우리 에디터에서 확인할 것
완료 기준
관련