feat(documents): 3-pane 중앙 리더에 절 목차 rail + 점프 + scroll-spy #32
Reference in New Issue
Block a user
Delete Branch "feat/documents-outline-rail"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
[id] 전체보기에만 있던 개요 rail/점프를 메인 /documents 3-pane 중앙 리더로 확장
(사용자 주 사용 표면). 경로 A anchor 인프라 그대로 재사용.
(showRail = 표시가능 절 有 + markdown-ish 본문). window 빈제목 31% 노이즈는 outlineSections
필터로 표시 제외(클린업, 코퍼스 무터치).
MarkdownDoc(markdown/pdf/hwp/article)에 anchorMap 전달 → splice.
상단 통과 마지막 .md-anchor → activeKey(SectionOutline 강조). $effect cleanup.
자체 overflow 제거하고 scrollEl 단일 스크롤로 정리(iframe h-[80vh]).
id↔id 점프라 중복제목·비-ATX 정확, anchor 없는 절=비활성(폴백). FE only, BE 무변.
vite build + node test 10/10 + lint:tokens(신규0) PASS.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
[id] 전체보기에만 있던 개요 rail/점프를 메인 /documents 3-pane 중앙 리더로 확장 (사용자 주 사용 표면). 경로 A anchor 인프라 그대로 재사용. - /documents/{id}/sections fetch(loadSections, doc.id 가드) → 좌측 SectionOutline rail (showRail = 표시가능 절 有 + markdown-ish 본문). window 빈제목 31% 노이즈는 outlineSections 필터로 표시 제외(클린업, 코퍼스 무터치). - anchorMap = buildAnchorMap(mdRenderText, sections) — 각 분기가 실제 렌더하는 텍스트 기준. MarkdownDoc(markdown/pdf/hwp/article)에 anchorMap 전달 → <span id=sec-N> splice. - jumpTo = scrollEl 내 #sec-{id} scrollIntoView. scroll-spy = scrollEl scroll 리스너로 상단 통과 마지막 .md-anchor → activeKey(SectionOutline 강조). $effect cleanup. - 본문을 [rail | scrollEl] flex 로 래핑(비-섹션 문서는 rail 미표시=기존 그대로). pdf 분기는 자체 overflow 제거하고 scrollEl 단일 스크롤로 정리(iframe h-[80vh]). id↔id 점프라 중복제목·비-ATX 정확, anchor 없는 절=비활성(폴백). FE only, BE 무변. vite build + node test 10/10 + lint:tokens(신규0) PASS. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>