Repository navigation
[DONE] 저널 그림을 크게 보고 닫아도 읽던 자리가 그대로고, Tab 이 창 뒤로 새지 않는다 - #314
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gdqi6Mr2cnHMsA4rsUWCSK
Opening a picture left the focus on the page, so Tab went behind the backdrop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gdqi6Mr2cnHMsA4rsUWCSK
Chromium rings a script's focus even after a mouse click, so a mouse that opened and closed a picture left a ring on CLOSE and on the photo. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gdqi6Mr2cnHMsA4rsUWCSK
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gdqi6Mr2cnHMsA4rsUWCSK
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gdqi6Mr2cnHMsA4rsUWCSK
patternflow-bot
marked this pull request as ready for review
October 27, 2026 18:33
This was referenced Oct 27, 2026
engmung
pushed a commit
to engmung/Patternflow
that referenced
this pull request
Oct 28, 2026
engmung
pushed a commit
to engmung/Patternflow
that referenced
this pull request
Oct 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
dev / https://claude.ai/code/session_01Gdqi6Mr2cnHMsA4rsUWCSK
저널 글에서 그림을 눌러 크게 열면 초점이 뒤 글에 남아서, Tab 한 번에 창 뒤 링크로 가고 글이 다른 자리로 굴러갔어요. 이제 초점이 창의 close 단추로 들어가 Tab 이 창 안에 머물고, 닫으면 연 그림으로 돌아와 읽던 자리가 그대로예요.
좋아지는 것: 그림을 크게 보고 닫아도 읽던 자리가 그대로다 — 키보드와 화면 낭독기로도 창 밖으로 새지 않는다
체크리스트
140바퀴([DONE] 데스크톱 저널 목록에서 날짜가 두 줄로 꺾이지 않는다 #306[DONE] 저널 글을 공유하면 카드에 날짜가 2026-05-14T01:30:00+09:00 대신 MAY 14, 2026 으로 찍힌다 #313)와 겹치지 않음: 그 바퀴들은JournalLightbox.tsx를 건드리지 않았고, 139바퀴와 140바퀴가 「다음 바퀴」 첫 줄로 이 일을 적었어요한 일
web/src/components/journal/JournalLightbox.tsx하나를 고쳤어요. 그림을 열면 close 단추로 초점을 옮겨요. 창에서 초점을 받는 것은 그 단추 하나라서, Tab 과 Shift+Tab 은 막고 초점을 그 단추에 둬요. 닫으면 연 그림으로 초점을 돌려줘요.<img>는 tabindex 가 있어야 초점을 받아서 닫을 때tabindex="-1"을 달아요. Tab 순서에는 들지 않아요.첫 판은 마우스로 열고 닫기만 해도 CLOSE 와 사진 둘레에 링이 남았어요. Chromium 은 스크립트가 옮긴 초점에도 링을 그려서예요. 그래서
focus()에focusVisible을 줘요. 마우스로 열고 닫을 땐 링이 없어요. 창에서 Tab 을 누르면 그때부터 close 에 링이 보이고, 닫으면 그 링이 그림으로 따라가요. 이 옵션은 TypeScript 5.9 의 DOM 타입에 없어서 파일 안 작은 함수moveFocus하나에 모았어요.새 시험
web/src/components/journal/JournalLightbox.test.tsx는 다섯이에요. 열면 초점이 close 로 가는지, Tab 과 Shift+Tab 뒤에도 close 인지, Esc 와 close 단추가 초점을 그림으로 돌려주는지 봐요. 마지막 하나는focus()에 넘긴focusVisible이 Tab 앞에서는 false, 뒤에서는 true 인지 봐요. jsdom 은 링을 그리지 않아서 그 값을 봐요.증거
사진은
/journal/a-strange-dream의 첫 그림을 눌러 열고 Tab 한 번을 누른 화면과, 이어서 Esc 를 누른 화면이에요. dev 는 Tab 이 창 뒤 「34 패턴플로우 사용법」 링크로 가서 닫으면 글 아래 목록이 보여요. 고친 판은 close 에 링이 생기고, 닫으면 같은 그림에 링이 남아요.빌드한 사이트에서 저널 글 쪽 74개를 다 열고, 그림이 있는 50쪽(글 25편의 한국어판과 영어판)에서 첫 그림을 눌렀어요. 390 과 1440 에서 100번이에요. 연 뒤, Tab 뒤, Shift+Tab 뒤, Esc 뒤의
document.activeElement와 쪽 스크롤을 적었어요.dev 에서 Esc 가 안 들은 둘은
/journal/i-hope-it-works-out과 그 영어판의 390 이에요. Tab 이 창 뒤 유튜브 iframe 으로 들어가서 키 입력이 쪽에 오지 않았어요.「닫고 다음 Tab」 은 유튜브 embed 때문에 흔들려요. 이 컨테이너는 유튜브를 받지 못해서, 그림 다음이 embed 인 쪽은 Tab 이 iframe 으로 가기도 하고 BODY 로 남기도 해요. 링 고침 전 판으로 처음 잰 때는
/journal/me-and-patternflow390 에서 하나가 BODY 였어요(99/100). 그 쪽만 여섯 번 다시 돌리니 링크 1, iframe 2, BODY 3 이었고, 초점은 여섯 번 모두 그림에 있었어요. 위 표의 고친 판은 링 고침 뒤 다시 잰 값이에요.링은 Chromium 153 에서
/journal/a-strange-dream으로:focus-visible을 봤어요. 390 과 1440 이 같았어요.새 시험을 dev 의
JournalLightbox.tsx에 돌리면고친 뒤엔
Tests 5 passed (5)예요.다섯 검사(
web/에서):roadmap 은 이 컨테이너의 gh 로 원래 레포를 읽지 못해 건너뛰었어요.
실행법
http://localhost:3100/journal/a-strange-dream에서 그림을 눌러 열고 Tab 과 Shift+Tab 을 눌러 봐요. 초점이 close 에 머물러요. Esc 를 누르면 같은 그림 앞에서 닫혀요. 100번 잰 스크립트는 스크래치 폴더의 playwright-core 1.56.1 과 컨테이너 Chromium 으로 돌렸고 레포에 두지 않았어요.가정
lib/hooks/useDialog.ts는 쓰지 않았어요. 그 훅은 열기 전document.activeElement로 초점을 돌려주는데, 그림을 눌러도 초점이 옮겨지지 않아 그 값이 BODY 예요. 링도 가리지 않아요. 여러 화면이 같이 쓰는 것이라 바꾸지 않고 저널 파일 안에서 고쳤어요.tabindex="-1"은 그대로 둬요. 글(MDX)은 그대로이고 그 그림은 Tab 순서에 들지 않아요.focusVisible을 모르는 브라우저는 이 옵션을 무시하고 제 규칙으로 링을 그려요. 초점이 옮겨지는 것은 같아요. Safari 는 이 컨테이너에서 재지 못했어요.Changelog
Web
경험
언제: 저널이나 사이트에서 스크립트로 초점을 옮기는 고침을 할 때
교훈: Chromium 153 은 마우스 클릭 뒤에도
focus()로 옮긴 초점에 링을 그리니, 마우스 사용자에게 링을 안 보이려면focus({ focusVisible: false })를 주고 이미 초점이 있는 단추에 링을 켤 땐blur()뒤focus({ focusVisible: true })를 불러요근거: #314 첫 판은 마우스로 열고 닫기만 해도
:focus-visible이 다섯 경우 모두 참이었고, 옵션을 준 판은 마우스 셋이 거짓, Tab 뒤 둘이 참이었어요바퀴
바퀴 141 · 후보: 저널 — 고친 곳: web/src/components/journal/JournalLightbox.tsx · 까닭: 그림을 크게 연 창에서 초점이 뒤 글에 남아 그림 있는 50쪽 100번 모두 Tab 이 창 뒤 링크로 갔고, 72번은 닫으면 글이 다른 자리였다
다음 바퀴
.journal-list-number(globals.css:1144,:1321),.journal-figure,.journal-figure-wide,.journal-figure-full과 그img,video,figcaption(:1638:1652,:1707, 폰:1998:1999),.journal-index-thumb span(:1242),.journal-cover-slot span(:1271)을 컴포넌트와 글 74개 어디서도 그리지 않아요(136바퀴가 셌어요). 오늘 dev 에서도 줄 번호가 같아요.globals.css:1694의.journal-lightbox-close예요.ko·en이 18×19px, 글 쪽 맨 위 「All writing」 이 114×17px 이라고 쟀어요. 1440 에선.journal-lockup이 판 폭 1180×88px 를 다 차지해서 「Patternflow」 오른쪽 빈 곳을 눌러도 첫 화면으로 가요.https://claude.ai/code/session_01Gdqi6Mr2cnHMsA4rsUWCSK
Generated by Claude Code