배경
/widgets는 Toolbar·Listbox·Tree 같은 화면 데모 선반이다. 손의 문법은 Adapter keymap과 useEditing에 흩어져 있고, 둘 다 정책을 호스트에 남긴다. 제품이 json-document를 만지는 최전선은 화면 위젯이 아니라 30년짜리 키보드·마우스 어포던스다. 입구는 데모가 아니라 API와 쓰는 법이다.
Goal Anchor
- Outcome: 제품이 json-document를 만지는 최전선이 어포던스다. 입구는 API와 쓰는 법이고, 이름은 손동작이다.
- Done: 어포던스 사용법·API가 공개 입구다. 선반이 고르기·접기·드래그·되돌리기처럼 행동으로 설명된다. 라이브는 usage의 증명이다. 호스트는 마크업과 장르 Intent만 가진다. 키보드·마우스 문법은 제품마다 열리지 않는다.
- Don't: Listbox/Tree를 가져가는 상품으로 두지 않는다. 데모 카탈로그를 입구로 두지 않는다. Adapter의 chord 번역과 Connector의 구독을 어포던스에 합치지 않는다. 손의 문법을 호스트 정책으로 남겨 두지 않는다.
Canonical Mapping
- 고르기 = select (pointer replace/extend/toggle, 키보드 이웃 이동)
- 접기 = fold (나무 왼쪽 접힘, 오른쪽 펼침)
- 드래그 = drag (고른 대상을 포인터로 옮김)
- 되돌리기 = undo/redo
Canonical Vocabulary
- 어포던스: 제품과 json-document 사이 최전선의 키보드·마우스 손. 화면 컴포넌트가 아니다.
- 위젯: 호스트가 그리는 화면. 이 층의 상품이 아니다.
Target Structure
Affordance
|-- 고르기
|-- 접기
|-- 드래그
`-- 되돌리기
Guardrails
- 호스트는 마크업과 장르 Intent만 가진다.
- 단축키와 마우스 문법은 패키지가 닫는다. 제품별 keymap을 열지 않는다.
- 라이브 화면은 usage가 맞는지 확인하는 증명이다.
- Keyboard Adapter는 chord → command 번역을 유지한다. React Connector는 구독·질의를 유지한다.
배경
/widgets는 Toolbar·Listbox·Tree 같은 화면 데모 선반이다. 손의 문법은 Adapter keymap과useEditing에 흩어져 있고, 둘 다 정책을 호스트에 남긴다. 제품이 json-document를 만지는 최전선은 화면 위젯이 아니라 30년짜리 키보드·마우스 어포던스다. 입구는 데모가 아니라 API와 쓰는 법이다.Goal Anchor
Canonical Mapping
Canonical Vocabulary
Target Structure
Guardrails