Repository navigation
fix(components): make Select an accessible listbox with keyboard support - #725
Merged
Merged
Conversation
Refs #692 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
…ore test order Refs #692 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Contributor
Changepacks@devup-ui/wasm@1.0.83 → 1.0.84 - bindings/devup-ui-wasm/package.jsonPatch
@devup-ui/bun-plugin@1.0.22 → 1.0.23 - packages/bun-plugin/package.jsonPatch
@devup-ui/components@0.1.60 → 0.1.61 - packages/components/package.jsonPatch
@devup-ui/eslint-plugin@1.0.22 → 1.0.23 - packages/eslint-plugin/package.jsonPatch
@devup-ui/next-plugin@1.0.90 → 1.0.91 - packages/next-plugin/package.jsonPatch
@devup-ui/plugin-utils@1.0.17 → 1.0.18 - packages/plugin-utils/package.jsonPatch
@devup-ui/react@1.0.44 → 1.0.45 - packages/react/package.jsonPatch
@devup-ui/reset-css@1.0.31 → 1.0.32 - packages/reset-css/package.jsonPatch
@devup-ui/rsbuild-plugin@1.0.67 → 1.0.68 - packages/rsbuild-plugin/package.jsonPatch
@devup-ui/vite-plugin@1.0.73 → 1.0.74 - packages/vite-plugin/package.jsonPatch
@devup-ui/webpack-plugin@1.0.71 → 1.0.72 - packages/webpack-plugin/package.jsonPatch
|
Codecov Report✅ All modified and coverable lines are covered by tests.
🚀 New features to boost your workflow:
|
Merge main history while preserving this PR implementation. No manual conflict resolutions.
Merge main history while preserving this PR implementation. No manual conflict resolutions.
Merge main history while preserving this PR implementation. No manual conflict resolutions.
Merge main history while preserving this PR implementation. No manual conflict resolutions.
Merge main history while preserving this PR implementation. No manual conflict resolutions.
owjs3901
added a commit
that referenced
this pull request
Oct 8, 2026
Merge main history while preserving this PR implementation. No manual conflict resolutions.
Refs #692 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
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.
Refs #692 (I 세 번째 PR).
main에서 분기했습니다.문제
aria-expanded/aria-label만 있었고, 팝업과 옵션은 일반 div였습니다. role,aria-controls, 키보드 이동, Escape, 포커스 복귀가 없었습니다.onOpenChange를 거치지 않고 내부 상태만 바꿔,open을 제어하는 쪽은 닫힘을 알 수 없었습니다.변경
aria-haspopup="listbox",aria-controls를 붙이고, 닫힌 상태에서 ArrowDown/ArrowUp으로 엽니다.asChild트리거도 같습니다.role="listbox", id를 붙이고 checkbox 타입이면aria-multiselectable을 붙입니다.role="option",aria-selected,aria-disabled,tabIndex=-1을 붙입니다.onOpenChange(false)를 호출하고, 제어되지 않을 때만 내부 상태를 바꿉니다.동작 변화
openprop)에서는 바깥 클릭이 더 이상 숨은 상태를 바꾸지 않고 소유자에게 알립니다.새로 생기는 오류
검증
bun test5478개 통과, 커버리지 100%. 새 테스트는 키보드 조작, asChild/checkbox, 제어·비제어 바깥 클릭입니다.bun lint오류 0개, components 빌드 통과.useId의존을 없애려고 테스트의 Select에id를 고정했습니다(중첩 Select는 별도 id).useId를 쓰면서 CI의 테스트 순서에서 Checkbox 스냅샷 id가 밀려, #723과 같은 Checkbox 수정(주어진id사용, 테스트 id 고정)을 그대로 넣었습니다. 두 PR의 해당 변경은 같은 내용이라 충돌 없이 병합됩니다.assert_is_empty수정은 fix(extractor): let a later css() part replace an earlier one's declarations #706 등과 같은 내용입니다.2026-10-08 업데이트: main 11790bef를 merge commit으로 병합했습니다; 충돌 파일: 없음; 충돌 없이 자동 병합했고, 이미 포함된 squash 원본은 조상 확인 후 ours 전략으로 중복 적용하지 않았습니다.
2026-10-18 갱신: main
3ca6182fc08b1a63875cfb27ef470e98404aed12를 두 부모 merge commit0ef74846414ebbe40a22a86f74f8f0fa94267144로 병합했습니다; 충돌 Checkbox/Selectindex.tsx와 Select browser test에서 custom-id/native forwardRef, 선택 옵션 focus·키보드·제어 outside-click 알림과 main의 React18 Provider/useContext·containerRef 위치 갱신 effect/정리를 모두 보존하고 resize 이벤트와 고정 id를 함께 유지했습니다; 충돌 Checkbox/Selectindex.browser.test.tsx.snap은 전체 HEAD baseline 선택 후 테스트로만 재생성해 Checkbox 9개/Select 4개 항목의 class 앞뒤 공백 이동만 수용했습니다(21행 교체, class 토큰·DOM·ARIA·위치값 동일); 새 Rust snapshot 후보·수동 병합·build error·dependency는 없고 기본 stack/jobs=2/6GiB에서 Rust workspace·fmt/clippy·fresh WASM/root·Bun 5,934개/0 fail/함수·라인 100%가 통과했으며 정식 hook도 12GiB/424.0초/peak 4,054,482,944 bytes로 통과했습니다; 실제 React18 Chromium에서 native refs·두 label·토글·Select ArrowDown 첫 focus/End/Escape/Enter·aria-controls·트리거 focus 복귀·Stepper와 desktop/mobile 캡처를 확인했습니다; 원래 PR의 모든 option에 동일한 aria-label이 지정되는 별도 접근성 문제는 coordinator에게 범위 결정을 요청했고 이번 main 병합에서 임의로 동작을 변경하지 않았습니다.; 최종 head0ef74846414ebbe40a22a86f74f8f0fa94267144의 CI 39061218471는 5개 job 전체 SUCCESS이고 Linux Rust 100%(13464/13464), Bun 5934 pass/0 fail/함수·라인 100% 및 별도 preload 9 pass/0 fail을 확인했습니다.