Issue Title
탭 처리를 Text/이미지 + onTapGesture에서 Button으로 전환해 접근성 트리(VoiceOver·XcodeBuildMCP UI 자동화)에 버튼으로 잡히게 하고, .disabled()가 먹도록 개선한다.
Issue Content
배경
Text/이미지 + .onTapGesture는 접근성 트리에 static text로만 잡혀 .isButton trait/액션이 없다 → VoiceOver·XcodeBuildMCP snapshot_ui/elementRef 모두 탭 대상으로 인식이 어렵다.
- 부수 효과로
.disabled()도 안 먹는다(CreateFeedView.swift 주석에 이미 기록됨). Button 전환으로 둘 다 해결.
- 디자인시스템은 이미
Button 기반(WSSCTAButton 등)이라 관행과 정렬된다.
방침 (일괄 치환 ❌ — 성격별 선별)
- 버튼형(탭→액션/이동)만
Button으로 전환. 가능하면 WSSComponent 공용에서 고쳐 호출부를 한 번에 커버.
- 배경 탭(키보드/메뉴/오버레이 닫기)·포커스 세팅은 유지 — Button화하면 의미가 틀린다.
- 합성/우선순위 민감 구간은 개별 검증(회귀 위험).
전환 시 주의(함정)
- press 스타일 회귀 —
Button 기본 눌림 dimming. 시각 동일성 위해 .buttonStyle(.plain) + 필요 시 no-op 커스텀 ButtonStyle.
- 제스처 우선순위 — 조상
onTapGesture 밑 자식을 Button화하면 히트테스트 우선순위가 바뀜(WSSComponent/CLAUDE.md "Button은 조상의 onTapGesture보다 우선").
- 전환 후
snapshot_ui로 button role 실제 인식 확인까지가 완료.
대상 후보 — 버튼형 (전환 후보, 최종 범위는 리뷰로 확정)
Feature
UI/WSSComponent (공용 — 다수 호출부 커버)
주의 대상 — 합성/우선순위 민감 (전환하려면 개별 검증)
FeedFeature/SosoFeed/SosoFeedView.swift:328 — 셀 전체 탭(피드 상세). 자식 좋아요/프로필 Button과 중첩 위험
NovelDetailFeature/.../NovelDetailReviewSection.swift:77 — 바깥 탭 + 안쪽 상태 Button 공존
제외 — 배경 탭(닫기/키보드) · 포커스 세팅 (유지)
- 배경/닫기:
CollectionDetailView:602, CreateCollectionView:160, CollectionSearchNovelView:93,187, CreateFeedConnectNovelSheet:92,143, CreateFeedView:99, FeedDetailView:105, SosoFeedView:423, NovelDetailView:417,449,467,547, NicknameView:69, NormalSearchAutoCompletionView:47, NormalSearchView:111, WithdrawReasonView:101, MyPageEditView:146, UserFeedListView:155, UserPageView:660,679
- 포커스 세팅:
CreateCollectionView:254, CreateFeedView:287, FeedDetailCommentInputBar:64, MyPageEditView:244, ReadingPeriodSheet:155(경계선)
- 의도적 유지(주석 근거):
NovelNotificationRow:41(체크 아이콘 애니메이션 위해 Button 회피)
Issue Title
탭 처리를
Text/이미지 + onTapGesture에서Button으로 전환해 접근성 트리(VoiceOver·XcodeBuildMCP UI 자동화)에 버튼으로 잡히게 하고,.disabled()가 먹도록 개선한다.Issue Content
배경
Text/이미지 + .onTapGesture는 접근성 트리에 static text로만 잡혀.isButtontrait/액션이 없다 → VoiceOver·XcodeBuildMCPsnapshot_ui/elementRef 모두 탭 대상으로 인식이 어렵다..disabled()도 안 먹는다(CreateFeedView.swift주석에 이미 기록됨). Button 전환으로 둘 다 해결.Button기반(WSSCTAButton등)이라 관행과 정렬된다.방침 (일괄 치환 ❌ — 성격별 선별)
Button으로 전환. 가능하면WSSComponent공용에서 고쳐 호출부를 한 번에 커버.전환 시 주의(함정)
Button기본 눌림 dimming. 시각 동일성 위해.buttonStyle(.plain)+ 필요 시 no-op 커스텀ButtonStyle.onTapGesture밑 자식을 Button화하면 히트테스트 우선순위가 바뀜(WSSComponent/CLAUDE.md"Button은 조상의 onTapGesture보다 우선").snapshot_ui로 button role 실제 인식 확인까지가 완료.대상 후보 — 버튼형 (전환 후보, 최종 범위는 리뷰로 확정)
Feature
CollectionFeature/.../CollectionMyLibrarySelectView.swift:108— toggleNovel (이미 accessibilityLabel 우회)CollectionFeature/.../CollectionSearchNovelView.swift:219— toggleNovelFeedFeature/CreateFeed/CreateFeedView.swift:297— 사진 추가FeedFeature/CreateFeed/CreateFeedView.swift:407— 소설 연결 열기FeedFeature/CreateFeed/CreateFeedView.swift:434— 연결 소설 제거FeedFeature/FeedDetail/FeedDetailAttachImageBlock.swift:32,43,59— 이미지 탭(3)FeedFeature/FeedDetail/FeedDetailView.swift:76— ⋯ 메뉴 열기FeedFeature/FeedDetail/FeedDetailView.swift:200— 소설 탭FeedFeature/SosoFeed/MyFeedFilterSheet.swift:123— 필터 항목FeedFeature/SosoFeed/SosoFeedView.swift:178— 탭 선택NovelDetailFeature/.../NovelDetailFeedTab.swift:85— 피드 탭(background GeometryReader 주의)SearchFeature/.../DetailSearchResultView.swift:89— 필터 재조정SettingFeature/.../WithdrawReasonView.swift:176— custom 사유 선택SettingFeature/.../NotificationSettingView.swift:124— navigateSettingFeature/.../SettingMenuRow.swift:46— 메뉴 행UI/WSSComponent (공용 — 다수 호출부 커버)
WSSComponent/Alert/View/WSSAlertView.swift:56— 알럿 버튼WSSComponent/Button/WSSPillBadge.swift:75— action(nil 전파 로직 주의)WSSComponent/Button/WSSToggleButton.swift:29— 토글WSSComponent/KeywordChips/CapsuleSelectableKeywordChip.swift:52WSSComponent/KeywordChips/PrimaryRemovableKeywordChip.swift:42WSSComponent/KeywordChips/RectangleSelectableKeywordChip.swift:49— onChange 애니메이션 주의WSSComponent/KeywordChips/WhiteRemovableKeywordChip.swift:46WSSComponent/NovelCell/WSSNovelSelectRow.swift:68주의 대상 — 합성/우선순위 민감 (전환하려면 개별 검증)
FeedFeature/SosoFeed/SosoFeedView.swift:328— 셀 전체 탭(피드 상세). 자식 좋아요/프로필 Button과 중첩 위험NovelDetailFeature/.../NovelDetailReviewSection.swift:77— 바깥 탭 + 안쪽 상태 Button 공존제외 — 배경 탭(닫기/키보드) · 포커스 세팅 (유지)
CollectionDetailView:602,CreateCollectionView:160,CollectionSearchNovelView:93,187,CreateFeedConnectNovelSheet:92,143,CreateFeedView:99,FeedDetailView:105,SosoFeedView:423,NovelDetailView:417,449,467,547,NicknameView:69,NormalSearchAutoCompletionView:47,NormalSearchView:111,WithdrawReasonView:101,MyPageEditView:146,UserFeedListView:155,UserPageView:660,679CreateCollectionView:254,CreateFeedView:287,FeedDetailCommentInputBar:64,MyPageEditView:244,ReadingPeriodSheet:155(경계선)NovelNotificationRow:41(체크 아이콘 애니메이션 위해 Button 회피)