Skip to content

refactor(timeletter): 미디어 선택 시트를 core:ui MediaSelectSheet 로 이관 (#642 인계) #1613

Open

Description

@OnlyReadOneBook

작업 유형

refactor — 동작 변경 없는 구조·책임·경계 개선

주 담당 모듈

timeletter — 타임레터

개요

#642 가 «미디어 추가하기» 바텀시트 4중 구현을 core:ui 로 승격했다. core 자원은 이미 섰고(PR #1605 — core/ui/.../sheet/MediaSelectSheet.kt), 내 담당 모듈 호출부 2곳(receiver·afternote)도 그 PR 에서 치환을 끝냈다. 남은 것은 timeletter 판 치환 한 갈래다.

승격된 API (2단 구성 — 자체 sheetState 를 들고 있으면 본문만 쓴다):

@Immutable
data class MediaSheetItem(
    @param:DrawableRes val iconRes: Int,
    val label: String,
    val onClick: () -> Unit,
    val iconTint: Color = Color.Unspecified,   // 기본 iconBk
    val labelColor: Color = Color.Unspecified, // 기본 gray9
)

@Composable fun MediaSelectSheetContent(items, modifier, title, bottomSpacing)
@Composable fun MediaSelectBottomSheet(onDismiss, items, modifier, title, sheetState)

대상

항목 값
삭제할 파일 feature/timeletter/.../component/MediaBottomSheetContent.kt (107줄 — content 만, 한글 하드코딩, 디자인 토큰 0개)
호출부 feature/timeletter/.../screen/sender/TimeLetterWriteScreen.kt:260 — 자체 sheetState 를 유지하므로 MediaSelectSheetContent(본문) 쪽을 쓴다
아이콘 core_ui_ic_{image,mic,file,link} 로 통일한다. 현재 image·file 만 timeletter 지역 리소스라 지역 ic_image·ic_file 도 정리 대상

⚠️ 확정적 픽셀 변경이다 — 스크린샷 baseline 재생성 사이클을 동반한다.

최고참인 timeletter 판만 M3 기본값·하드코딩으로 드리프트해 있어(의도적 변형이 아니다), 치환하면 아래가 한꺼번에 바뀐다:

  • 행 세로 패딩 18 → 16dp
  • 아이콘–문구 gap 16 → 10dp
  • 헤더 세로 패딩 12 → 6dp 상당
  • 헤더·행 타이포/색이 토큰으로 (bodyBase · gray6 · gray9)
  • 디바이더 M3 기본 → 1dp gray3
  • 아이콘 Image → Icon + iconBk tint

골든 재생성은 컨테이너에서 해야 한다 — macOS 에서 돌리면 무관한 골든까지 틀어진다.

완료 조건

  • MediaBottomSheetContent.kt 삭제, 호출부가 core:ui 컴포넌트를 쓴다
  • 참조 0건이 된 timeletter 지역 아이콘·문자열 리소스 정리
  • 스크린샷 baseline 재생성(컨테이너) 후 CI 초록

자식 이슈

No response

참고

Metadata

Metadata

Assignees

Labels

area:timeletter타임레터 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions