From 701c10f3073e912d524f43bbad8ebf13877e291f Mon Sep 17 00:00:00 2001 From: pkdee Date: Sun, 5 Jul 2026 00:53:31 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20seed-design=20=EC=86=8C=EB=B9=84?= =?UTF-8?q?=EB=A5=BC=20=EB=B2=A4=EB=8D=94=EB=A7=81=EC=97=90=EC=84=9C=20git?= =?UTF-8?q?=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=9D=98=EC=A1=B4=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=A0=84=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - pubspec 에 seed_design git 의존 추가(lock 이 seed 커밋 고정·추적) - lib/theme/seed_*.dart 벤더 파일 3종 제거, import 49파일 package:seed_design/* 치환 - 수동 복사 단계 소멸 — 업데이트는 flutter pub upgrade seed_design - analyze 0건·360 테스트·토큰 게이트 통과 Closes #206 --- lib/data/meta.dart | 2 +- lib/main_dev.dart | 2 +- lib/parts/app_header.dart | 2 +- lib/parts/dday_hero.dart | 2 +- lib/parts/metric_bar.dart | 2 +- lib/parts/task_row.dart | 2 +- lib/screens/auth_loading.dart | 2 +- lib/screens/calc_sheet.dart | 2 +- lib/screens/debt/debt_screen.dart | 2 +- lib/screens/focus/focus_screen.dart | 2 +- lib/screens/focus/skins.dart | 2 +- lib/screens/loading_skeleton.dart | 2 +- lib/screens/login.dart | 2 +- lib/screens/me/calendar_sync_screen.dart | 2 +- lib/screens/me/linked_accounts_section.dart | 2 +- lib/screens/me/me_screen.dart | 2 +- lib/screens/me/settings_dialogs.dart | 2 +- lib/screens/me/settings_section.dart | 2 +- lib/screens/nickname_setup_screen.dart | 2 +- lib/screens/onboarding.dart | 2 +- lib/screens/plan/calendar_screen.dart | 2 +- lib/screens/plan/task_screen.dart | 2 +- lib/screens/plan/week_strip.dart | 2 +- lib/screens/review/review_screen.dart | 2 +- lib/screens/sheets/date_picker_sheet.dart | 2 +- .../sheets/date_range_picker_sheet.dart | 2 +- lib/screens/sheets/event_sheet.dart | 2 +- lib/screens/sheets/notif_sheet.dart | 2 +- lib/screens/sheets/sheet_fields.dart | 2 +- lib/screens/sheets/task_sheet.dart | 2 +- lib/screens/splash.dart | 2 +- lib/screens/today/today_screen.dart | 2 +- lib/theme/seed_components.dart | 124 --------- lib/theme/seed_icons.dart | 83 ------ lib/theme/seed_tokens.dart | 253 ------------------ lib/theme/tokens.dart | 2 +- lib/widgets/dk_alert.dart | 2 +- lib/widgets/dk_badge.dart | 2 +- lib/widgets/dk_bell_button.dart | 2 +- lib/widgets/dk_button.dart | 2 +- lib/widgets/dk_card.dart | 2 +- lib/widgets/dk_choice_chip.dart | 2 +- lib/widgets/dk_empty.dart | 2 +- lib/widgets/dk_feedback.dart | 2 +- lib/widgets/dk_icon.dart | 2 +- lib/widgets/dk_section.dart | 2 +- lib/widgets/dk_segmented.dart | 2 +- lib/widgets/dk_sheet.dart | 2 +- lib/widgets/dk_tab_bar.dart | 2 +- pubspec.lock | 9 + pubspec.yaml | 5 + test/dk_button_test.dart | 2 +- test/dk_components_seed_test.dart | 2 +- test/theme_contrast_test.dart | 2 +- 54 files changed, 63 insertions(+), 509 deletions(-) delete mode 100644 lib/theme/seed_components.dart delete mode 100644 lib/theme/seed_icons.dart delete mode 100644 lib/theme/seed_tokens.dart diff --git a/lib/data/meta.dart b/lib/data/meta.dart index 5809221..9a7c701 100644 --- a/lib/data/meta.dart +++ b/lib/data/meta.dart @@ -1,5 +1,5 @@ import 'package:flutter/widgets.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; import '../widgets/dk_badge.dart'; import 'models.dart'; diff --git a/lib/main_dev.dart b/lib/main_dev.dart index e23ba1d..4ef6590 100644 --- a/lib/main_dev.dart +++ b/lib/main_dev.dart @@ -25,7 +25,7 @@ import 'screens/onboarding.dart'; import 'screens/splash.dart'; import 'theme/tokens.dart'; import 'theme/tweaks.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; void main() => runApp(const DevApp()); diff --git a/lib/parts/app_header.dart b/lib/parts/app_header.dart index 85172a3..f536639 100644 --- a/lib/parts/app_header.dart +++ b/lib/parts/app_header.dart @@ -3,7 +3,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import '../widgets/dk_bell_button.dart'; import '../widgets/dk_icon.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 화면 상단 헤더(인사 + 알림 벨). 프로토타입 `AppHeader`. /// diff --git a/lib/parts/dday_hero.dart b/lib/parts/dday_hero.dart index 792ed0a..d1373fd 100644 --- a/lib/parts/dday_hero.dart +++ b/lib/parts/dday_hero.dart @@ -8,7 +8,7 @@ import '../data/models.dart'; import '../theme/tokens.dart'; import '../widgets/dk_badge.dart'; import '../widgets/dk_icon.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// D-Day 히어로 카드. 프로토타입 `DdayHero`. /// diff --git a/lib/parts/metric_bar.dart b/lib/parts/metric_bar.dart index 5522ad5..55b1470 100644 --- a/lib/parts/metric_bar.dart +++ b/lib/parts/metric_bar.dart @@ -4,7 +4,7 @@ import '../data/models.dart'; import '../theme/tokens.dart'; import '../widgets/dk_card.dart'; import '../widgets/dk_feedback.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 주간 지표 막대. 프로토타입 `MetricBar`. /// diff --git a/lib/parts/task_row.dart b/lib/parts/task_row.dart index bd1694a..0aefc5a 100644 --- a/lib/parts/task_row.dart +++ b/lib/parts/task_row.dart @@ -6,7 +6,7 @@ import '../data/models.dart'; import '../theme/tokens.dart'; import '../widgets/dk_badge.dart'; import '../widgets/dk_icon.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 완료 체크박스 26 radius 9. done이면 success 채움 + check. class DkCheckbox extends StatelessWidget { diff --git a/lib/screens/auth_loading.dart b/lib/screens/auth_loading.dart index 2653bfb..3c3d2ba 100644 --- a/lib/screens/auth_loading.dart +++ b/lib/screens/auth_loading.dart @@ -2,7 +2,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import '../widgets/dk_logo.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 로그인(외부 OAuth 복귀 → server provisioning) 중 표시하는 **브랜드 로딩 화면**. /// diff --git a/lib/screens/calc_sheet.dart b/lib/screens/calc_sheet.dart index 69dc8c6..7ec1194 100644 --- a/lib/screens/calc_sheet.dart +++ b/lib/screens/calc_sheet.dart @@ -5,7 +5,7 @@ import '../theme/tokens.dart'; import '../widgets/dk_icon.dart'; import '../widgets/dk_segmented.dart'; import '../widgets/dk_sheet.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 계산기 본문(일반 + 공학). 프로토타입 `Calculator`. /// diff --git a/lib/screens/debt/debt_screen.dart b/lib/screens/debt/debt_screen.dart index 52a4869..e4faeb7 100644 --- a/lib/screens/debt/debt_screen.dart +++ b/lib/screens/debt/debt_screen.dart @@ -10,7 +10,7 @@ import '../../widgets/dk_card.dart'; import '../../widgets/dk_empty.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_section.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 미룬 시간 상세 서브화면. 프로토타입 `DebtScreen`. /// diff --git a/lib/screens/focus/focus_screen.dart b/lib/screens/focus/focus_screen.dart index aa5caa9..77bd7fc 100644 --- a/lib/screens/focus/focus_screen.dart +++ b/lib/screens/focus/focus_screen.dart @@ -17,7 +17,7 @@ import '../me/settings_dialogs.dart'; import '../me/settings_section.dart'; import 'focus_controller.dart'; import 'skins.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; const String _prefsKey = 'dk_focus'; diff --git a/lib/screens/focus/skins.dart b/lib/screens/focus/skins.dart index 23781fd..be60c1f 100644 --- a/lib/screens/focus/skins.dart +++ b/lib/screens/focus/skins.dart @@ -4,7 +4,7 @@ import 'package:flutter/widgets.dart'; import '../../theme/tokens.dart'; import '../../widgets/dk_ring.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 스킨 공통 프로퍼티. class FocusSkinProps { diff --git a/lib/screens/loading_skeleton.dart b/lib/screens/loading_skeleton.dart index e8861dc..995f9a4 100644 --- a/lib/screens/loading_skeleton.dart +++ b/lib/screens/loading_skeleton.dart @@ -2,7 +2,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import '../widgets/dk_skeleton.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 초기 데이터 로딩 화면(토스·당근 스타일 스켈레톤). 밋밋한 "불러오는 중…" 텍스트 대신 /// 최종 레이아웃(인사·제목 → 요약 카드 → 할 일 리스트)의 윤곽을 회색 플레이스홀더 + shimmer 로 보여준다. diff --git a/lib/screens/login.dart b/lib/screens/login.dart index c62919d..cf476c3 100644 --- a/lib/screens/login.dart +++ b/lib/screens/login.dart @@ -1,5 +1,5 @@ import 'package:flutter/widgets.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; import '../data/api/api_exception.dart'; import '../data/auth/auth_controller.dart'; diff --git a/lib/screens/me/calendar_sync_screen.dart b/lib/screens/me/calendar_sync_screen.dart index aa9ff5a..e6f1246 100644 --- a/lib/screens/me/calendar_sync_screen.dart +++ b/lib/screens/me/calendar_sync_screen.dart @@ -9,7 +9,7 @@ import '../../widgets/dk_brand_mark.dart'; import '../../widgets/dk_button.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_section.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 캘린더 연동 설정 서브화면(나>설정>캘린더 연동, 이슈 #59 / FRD 4.12). /// diff --git a/lib/screens/me/linked_accounts_section.dart b/lib/screens/me/linked_accounts_section.dart index 8181c90..e1a6279 100644 --- a/lib/screens/me/linked_accounts_section.dart +++ b/lib/screens/me/linked_accounts_section.dart @@ -5,7 +5,7 @@ import '../../theme/tokens.dart'; import '../../widgets/dk_brand_mark.dart'; import '../../widgets/dk_button.dart'; import 'settings_dialogs.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 나 탭 '연동 계정' 섹션(이슈 #10, ADR-0014). /// diff --git a/lib/screens/me/me_screen.dart b/lib/screens/me/me_screen.dart index 2a92608..fc4f66e 100644 --- a/lib/screens/me/me_screen.dart +++ b/lib/screens/me/me_screen.dart @@ -12,7 +12,7 @@ import '../../widgets/dk_icon.dart'; import 'linked_accounts_section.dart'; import 'settings_dialogs.dart'; import 'settings_section.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 나 탭. 프로토타입 `MeScreen`. /// diff --git a/lib/screens/me/settings_dialogs.dart b/lib/screens/me/settings_dialogs.dart index 29dc6e0..530d1ad 100644 --- a/lib/screens/me/settings_dialogs.dart +++ b/lib/screens/me/settings_dialogs.dart @@ -5,7 +5,7 @@ import '../../widgets/dk_alert.dart'; import '../../widgets/dk_button.dart'; import '../../widgets/dk_sheet.dart'; import '../sheets/sheet_fields.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 계정/설정 다이얼로그 모음(이슈 #56) — 프로필 수정·값 선택·2단계 탈퇴 확인. /// diff --git a/lib/screens/me/settings_section.dart b/lib/screens/me/settings_section.dart index 8fe7078..99b884e 100644 --- a/lib/screens/me/settings_section.dart +++ b/lib/screens/me/settings_section.dart @@ -7,7 +7,7 @@ import '../../theme/tokens.dart'; import '../../widgets/dk_badge.dart'; import '../../widgets/dk_icon.dart'; import 'settings_dialogs.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 토글 스위치. 프로토타입 `Toggle`: 48×28 pill(on=primary), 노브 24 흰색. class DkToggle extends StatelessWidget { diff --git a/lib/screens/nickname_setup_screen.dart b/lib/screens/nickname_setup_screen.dart index ce90b50..f669bb7 100644 --- a/lib/screens/nickname_setup_screen.dart +++ b/lib/screens/nickname_setup_screen.dart @@ -5,7 +5,7 @@ import '../theme/tokens.dart'; import '../widgets/dk_button.dart'; import '../widgets/dk_logo.dart'; import 'sheets/sheet_fields.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 신규 가입 직후 닉네임 설정 화면(모든 provider 공통). /// diff --git a/lib/screens/onboarding.dart b/lib/screens/onboarding.dart index b1ce9ff..79cc89d 100644 --- a/lib/screens/onboarding.dart +++ b/lib/screens/onboarding.dart @@ -1,5 +1,5 @@ import 'package:flutter/widgets.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; import '../theme/tokens.dart'; import '../widgets/dk_button.dart'; diff --git a/lib/screens/plan/calendar_screen.dart b/lib/screens/plan/calendar_screen.dart index 27fe3c5..4c21a41 100644 --- a/lib/screens/plan/calendar_screen.dart +++ b/lib/screens/plan/calendar_screen.dart @@ -13,7 +13,7 @@ import '../../widgets/dk_section.dart'; import '../../widgets/dk_segmented.dart'; import 'calendar_logic.dart'; import 'week_strip.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 캘린더 뷰. 프로토타입 `CalendarScreen`(embedded). /// diff --git a/lib/screens/plan/task_screen.dart b/lib/screens/plan/task_screen.dart index 63402c3..427acbe 100644 --- a/lib/screens/plan/task_screen.dart +++ b/lib/screens/plan/task_screen.dart @@ -11,7 +11,7 @@ import '../../widgets/dk_empty.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_section.dart'; import 'week_strip.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 할 일 뷰. 프로토타입 `TaskScreen`(embedded). /// diff --git a/lib/screens/plan/week_strip.dart b/lib/screens/plan/week_strip.dart index affc449..ffd07d6 100644 --- a/lib/screens/plan/week_strip.dart +++ b/lib/screens/plan/week_strip.dart @@ -2,7 +2,7 @@ import 'package:flutter/widgets.dart'; import '../../data/format.dart'; import '../../theme/tokens.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 주간 7일 스트립. 프로토타입 `WeekStrip`(월요일 시작 2026-06-01). /// diff --git a/lib/screens/review/review_screen.dart b/lib/screens/review/review_screen.dart index 7257f42..e195b40 100644 --- a/lib/screens/review/review_screen.dart +++ b/lib/screens/review/review_screen.dart @@ -12,7 +12,7 @@ import '../../widgets/dk_feedback.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_ring.dart'; import '../../widgets/dk_section.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 주간 리뷰(회고) 서브화면. 프로토타입 `ReviewScreen`. class ReviewScreen extends StatelessWidget { diff --git a/lib/screens/sheets/date_picker_sheet.dart b/lib/screens/sheets/date_picker_sheet.dart index 05196bb..31d39d9 100644 --- a/lib/screens/sheets/date_picker_sheet.dart +++ b/lib/screens/sheets/date_picker_sheet.dart @@ -6,7 +6,7 @@ import '../../widgets/dk_button.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_sheet.dart'; import '../plan/calendar_logic.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 날짜 선택 시트를 열고 선택한 `YYYY-MM-DD` 를 반환한다(취소 시 null). /// [initial] 이 가리키는 달을 첫 화면으로 보여준다. diff --git a/lib/screens/sheets/date_range_picker_sheet.dart b/lib/screens/sheets/date_range_picker_sheet.dart index 88400ce..d6da739 100644 --- a/lib/screens/sheets/date_range_picker_sheet.dart +++ b/lib/screens/sheets/date_range_picker_sheet.dart @@ -6,7 +6,7 @@ import '../../widgets/dk_button.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_sheet.dart'; import '../plan/calendar_logic.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 기간(시작~종료)을 한 달력에서 연속 선택하는 시트. 시작 탭 → 종료 탭, 사이를 하이라이트한다. /// 종료는 시작보다 앞설 수 없다(앞 날짜를 탭하면 시작이 재설정됨). 선택 완료 시 `(start, end)`, diff --git a/lib/screens/sheets/event_sheet.dart b/lib/screens/sheets/event_sheet.dart index 563add1..aa877e2 100644 --- a/lib/screens/sheets/event_sheet.dart +++ b/lib/screens/sheets/event_sheet.dart @@ -14,7 +14,7 @@ import '../me/settings_section.dart'; import 'date_picker_sheet.dart'; import 'date_range_picker_sheet.dart'; import 'sheet_fields.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 이벤트 추가/상세 시트 본문. 프로토타입 `EventSheet`. class EventSheetBody extends StatefulWidget { diff --git a/lib/screens/sheets/notif_sheet.dart b/lib/screens/sheets/notif_sheet.dart index 7c25227..aaa2c48 100644 --- a/lib/screens/sheets/notif_sheet.dart +++ b/lib/screens/sheets/notif_sheet.dart @@ -7,7 +7,7 @@ import '../../widgets/dk_badge.dart'; import '../../widgets/dk_empty.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_sheet.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 알림 종류별 아이콘·톤 매핑(표현은 client 권한). server 는 [DkNotifType] 만 내려준다. ({String icon, DkTone tone}) _appearance(DkNotifType type) => switch (type) { diff --git a/lib/screens/sheets/sheet_fields.dart b/lib/screens/sheets/sheet_fields.dart index 292171a..3e4ac51 100644 --- a/lib/screens/sheets/sheet_fields.dart +++ b/lib/screens/sheets/sheet_fields.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import '../../theme/tokens.dart'; import '../../widgets/dk_icon.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 폼 필드(라벨 + 콘텐츠 + 힌트). 프로토타입 `Field`. class DkField extends StatelessWidget { diff --git a/lib/screens/sheets/task_sheet.dart b/lib/screens/sheets/task_sheet.dart index 50b9794..0cac779 100644 --- a/lib/screens/sheets/task_sheet.dart +++ b/lib/screens/sheets/task_sheet.dart @@ -11,7 +11,7 @@ import '../../widgets/dk_sheet.dart'; import 'date_picker_sheet.dart'; import 'date_range_picker_sheet.dart'; import 'sheet_fields.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; const List _minOptions = [15, 30, 45, 60, 90, 120]; diff --git a/lib/screens/splash.dart b/lib/screens/splash.dart index 384e79e..f5b6431 100644 --- a/lib/screens/splash.dart +++ b/lib/screens/splash.dart @@ -4,7 +4,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import '../widgets/dk_logo.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 스플래시. 프로토타입 `Splash`. /// diff --git a/lib/screens/today/today_screen.dart b/lib/screens/today/today_screen.dart index ed9d1f9..9c63573 100644 --- a/lib/screens/today/today_screen.dart +++ b/lib/screens/today/today_screen.dart @@ -12,7 +12,7 @@ import '../../widgets/dk_empty.dart'; import '../../widgets/dk_icon.dart'; import '../../widgets/dk_section.dart'; import 'today_logic.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 오늘 탭. D-Day 중심. /// diff --git a/lib/theme/seed_components.dart b/lib/theme/seed_components.dart deleted file mode 100644 index f3da0b3..0000000 --- a/lib/theme/seed_components.dart +++ /dev/null @@ -1,124 +0,0 @@ -// GENERATED — do not edit. Source: tokens/tokens.json components (run `npm run build`). -import 'package:flutter/widgets.dart'; - -/// 버튼 사이즈 수치(플랫폼 중립). client DkButton 의 `_SizeSpec` 출처. -@immutable -class SeedButtonSize { - const SeedButtonSize( - this.height, - this.padX, - this.padY, - this.fontSize, - this.radius, - this.gap, - ); - final double height; - final double padX; - final double padY; - final double fontSize; - final double radius; - final double gap; -} - -/// 변형별 색 키. scheme 키('primary'·'fg'…) / '#RRGGBB' 리터럴 / 'transparent'. -@immutable -class SeedButtonVariant { - const SeedButtonVariant(this.bg, this.fg, this.border); - final String bg; - final String fg; - final String border; -} - -/// 버튼 컴포넌트 스펙(단일 소스). 앱·웹이 같은 수치/변형을 공유한다. -abstract final class SeedButton { - static const int weight = 600; - static const double letterSpacingEm = 0.0096; - static const double pressTranslateY = 1; - static const double borderWidth = 1.5; - - static const Map sizes = { - 'sm': SeedButtonSize(40, 14, 8, 13, 10, 6), - 'md': SeedButtonSize(50, 18, 13, 15, 14, 7), - 'lg': SeedButtonSize(56, 22, 16, 16, 16, 8), - }; - - static const Map variants = { - 'primary': SeedButtonVariant('primary', 'onPrimary', 'transparent'), - 'neutral': SeedButtonVariant('fg', 'bg', 'transparent'), - 'outline': SeedButtonVariant('transparent', 'fg', 'border'), - 'subtle': SeedButtonVariant('primarySubtle', 'primaryFg', 'transparent'), - 'ghost': SeedButtonVariant('transparent', 'fgMuted', 'transparent'), - 'danger': SeedButtonVariant('dangerSubtle', 'dangerFg', 'transparent'), - }; -} - -/// 뱃지 톤 = 의미색 쌍(배경/글자 scheme 키). -@immutable -class SeedTone { - const SeedTone(this.bg, this.fg); - final String bg; - final String fg; -} - -/// 뱃지 컴포넌트 스펙(단일 소스). client DkBadge 가 소비. -abstract final class SeedBadge { - static const double padX = 9; - static const double padY = 3; - static const double radius = 8; - static const double fontSize = 12; - static const int weight = 600; - static const double letterSpacing = 0.12; - static const double lineHeight = 1.5; - static const double gap = 4; - - static const Map tones = { - 'neutral': SeedTone('bgPress', 'fgMuted'), - 'primary': SeedTone('primarySubtle', 'primaryFg'), - 'success': SeedTone('successSubtle', 'successFg'), - 'warning': SeedTone('warningSubtle', 'warningFg'), - 'danger': SeedTone('dangerSubtle', 'dangerFg'), - 'info': SeedTone('infoSubtle', 'infoFg'), - 'violet': SeedTone('violetSubtle', 'violetFg'), - }; -} - -/// 카드 컴포넌트 스펙(단일 소스). radius·shadow·border 는 토큰. client DkCard 가 소비. -abstract final class SeedCard { - static const double padding = 18; - static const double pressScale = 0.985; - static const int pressDurationMs = 120; -} - -/// 세그먼트 컨트롤 스펙(단일 소스). client DkSegmented 가 소비. -abstract final class SeedSegmented { - static const double pad = 3; - static const double radius = 12; - static const double thumbRadius = 9; - static const double tabPadX = 14; - static const double tabPadY = 8; - static const double fontSize = 14; - static const int weight = 600; - static const int thumbDurationMs = 260; - static const int textDurationMs = 200; -} - -/// 선택 칩 스펙(단일 소스). on/off 색은 [SeedButtonVariant] 재사용. client DkChoiceChip 소비. -abstract final class SeedChip { - static const double padX = 14; - static const double padY = 9; - static const double radius = 10; - static const double fontSize = 14; - static const int weight = 600; - static const double borderWidth = 1.5; - static const double gap = 6; - static const SeedButtonVariant on = SeedButtonVariant( - 'primarySubtle', - 'primaryFg', - 'primary', - ); - static const SeedButtonVariant off = SeedButtonVariant( - 'bg', - 'fgMuted', - 'border', - ); -} diff --git a/lib/theme/seed_icons.dart b/lib/theme/seed_icons.dart deleted file mode 100644 index 5c14eba..0000000 --- a/lib/theme/seed_icons.dart +++ /dev/null @@ -1,83 +0,0 @@ -// GENERATED — do not edit. Source: icons/lucide.json (run `npm run build`). -/// Lucide 스타일 24-grid 아이콘 path 맵. flutter_svg 로 렌더. -const Map kSeedIcons = { - 'home': - 'M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8 M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z', - 'calendar': - 'M8 2v4 M16 2v4 M3 10h18 M5 4h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z', - 'carryForward': - 'M21 11V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h6 M3 9h18 M8 2v4 M16 2v4 M14 18h6 M20 18l-2.5-2.5 M20 18l-2.5 2.5', - 'tasks': 'M4 6h2v2H4z M4 11h2v2H4z M4 16h2v2H4z M9 7h11 M9 12h11 M9 17h11', - 'focus': 'M10 2h4 M12 14l3-3 M12 22a8 8 0 1 0 0-16 8 8 0 0 0 0 16Z', - 'settings': - 'M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z M19.4 13.5a1.6 1.6 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.6 1.6 0 0 0-2.7 1.1V21a2 2 0 1 1-4 0v-.1a1.6 1.6 0 0 0-2.7-1.1l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.6 1.6 0 0 0-1.1-2.7H3a2 2 0 1 1 0-4h.1a1.6 1.6 0 0 0 1.1-2.7l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.6 1.6 0 0 0 2.7-1.1V3a2 2 0 1 1 4 0v.1a1.6 1.6 0 0 0 2.7 1.1l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.6 1.6 0 0 0-.3 1.8Z', - 'bell': - 'M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9 M10.3 21a1.94 1.94 0 0 0 3.4 0', - 'plus': 'M12 5v14 M5 12h14', - 'check': 'M20 6 9 17l-5-5', - 'chevR': 'M9 6l6 6-6 6', - 'chevL': 'M15 6l-6 6 6 6', - 'chevD': 'M6 9l6 6 6-6', - 'clock': 'M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20Z M12 6v6l4 2', - 'flame': - 'M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5Z', - 'arrowR': 'M5 12h14 M13 6l6 6-6 6', - 'more': 'M6 12h.01 M12 12h.01 M18 12h.01', - 'pin': 'M12 17v5 M9 3h6l-1 7 3 3H7l3-3-1-7Z', - 'play': 'M7 4v16l13-8z', - 'pause': 'M8 5h3v14H8z M14 5h3v14h-3z', - 'reset': 'M3 12a9 9 0 1 0 3-6.7L3 8 M3 3v5h5', - 'x': 'M18 6 6 18 M6 6l12 12', - 'coffee': - 'M4 8h13v5a5 5 0 0 1-5 5H9a5 5 0 0 1-5-5V8Z M17 9h2a2 2 0 0 1 0 5h-2 M7 3v2 M11 3v2', - 'target': - 'M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20Z M12 18a6 6 0 1 0 0-12 6 6 0 0 0 0 12Z M12 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z', - 'repeat': - 'M17 2l4 4-4 4 M3 11V9a4 4 0 0 1 4-4h14 M7 22l-4-4 4-4 M21 13v2a4 4 0 0 1-4 4H3', - 'trash': - 'M3 6h18 M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2 M19 6l-1 14a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1L5 6 M10 11v6 M14 11v6', - 'edit': 'M12 20h9 M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5Z', - 'skip': 'M5 4l10 8-10 8z M19 5v14', - 'sliders': - 'M4 21v-7 M4 10V3 M12 21v-9 M12 8V3 M20 21v-5 M20 12V3 M2 14h4 M10 8h4 M18 16h4', - 'moon': 'M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8Z', - 'sun': - 'M12 17a5 5 0 1 0 0-10 5 5 0 0 0 0 10Z M12 1v2 M12 21v2 M4.2 4.2l1.4 1.4 M18.4 18.4l1.4 1.4 M1 12h2 M21 12h2 M4.2 19.8l1.4-1.4 M18.4 5.6l1.4-1.4', - 'mail': - 'M3 5h18a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1Z M3 6l9 7 9-7', - 'lock': - 'M5 11h14a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1Z M8 11V7a4 4 0 0 1 8 0v4', - 'user': - 'M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2 M12 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8Z', - 'trophy': - 'M6 9H4.5a2.5 2.5 0 0 1 0-5H6 M18 9h1.5a2.5 2.5 0 0 0 0-5H18 M6 4h12v5a6 6 0 0 1-12 0V4Z M9 18h6 M10 18v-3 M14 18v-3 M8 21h8', - 'alert': - 'M12 9v4 M12 17h.01 M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z', - 'chart': 'M3 3v16a2 2 0 0 0 2 2h16 M19 9l-5 5-4-4-3 3', - 'sparkle': 'M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8Z', - 'link': - 'M9 15l6-6 M11 6l1-1a4 4 0 0 1 6 6l-1 1 M13 18l-1 1a4 4 0 0 1-6-6l1-1', - 'sync': - 'M21 2v6h-6 M3 12a9 9 0 0 1 15-6.7L21 8 M3 22v-6h6 M21 12a9 9 0 0 1-15 6.7L3 16', - 'list': 'M8 6h13 M8 12h13 M8 18h13 M3 6h.01 M3 12h.01 M3 18h.01', - 'flag': 'M4 21V4a1 1 0 0 1 1-1h12l-2 4 2 4H5', - 'pieView': 'M8 2v20 M2 8h20', - 'search': 'M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14Z M21 21l-4.3-4.3', - 'logout': 'M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4 M16 17l5-5-5-5 M21 12H9', - 'calc': - 'M6 2h12a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1Z M8 6h8v3H8z M8 13h.01 M12 13h.01 M16 13h.01 M8 17h.01 M12 17h.01 M16 17h.01', - 'backspace': - 'M21 5H8.5a1 1 0 0 0-.8.4L3 12l4.7 6.6a1 1 0 0 0 .8.4H21a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1Z M17 9l-5 6 M12 9l5 6', - 'deferred': - 'M21 11V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h6 M3 9h18 M8 2v4 M16 2v4 M14 18h6 M20 18l-2.5-2.5 M20 18l-2.5 2.5', - 'graduationCap': - 'M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z M22 10v6 M6 12.5V16a6 3 0 0 0 12 0v-3.5', - 'languages': - 'm5 8 6 6 m4 14 6-6 2-3 M2 5h12 M7 2h1 m22 22-5-10-5 10 M14 18h6', - 'briefcase': - 'M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16 M4 6h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2Z', - 'heartPulse': - 'M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5 M3.22 13H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27', - 'bookOpen': - 'M12 7v14 M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z', -}; diff --git a/lib/theme/seed_tokens.dart b/lib/theme/seed_tokens.dart deleted file mode 100644 index a73f67c..0000000 --- a/lib/theme/seed_tokens.dart +++ /dev/null @@ -1,253 +0,0 @@ -// GENERATED — do not edit. Source: tokens/tokens.json (run `npm run build`). -import 'package:flutter/widgets.dart'; - -/// 라이트/다크 시맨틱 컬러 스킴(단일 소스). client `DkTokens` 의 기본값 출처. -@immutable -class SeedScheme { - const SeedScheme({ - required this.bg, - required this.bgSubtle, - required this.bgPress, - required this.page, - required this.fgStrong, - required this.fg, - required this.fgMuted, - required this.fgSubtle, - required this.fgDisabled, - required this.border, - required this.borderSubtle, - required this.borderStrong, - required this.overlay, - required this.success, - required this.successSubtle, - required this.successFg, - required this.warning, - required this.warningSubtle, - required this.warningFg, - required this.danger, - required this.dangerSubtle, - required this.dangerFg, - required this.info, - required this.infoSubtle, - required this.infoFg, - required this.violetSubtle, - required this.violetFg, - required this.ink, - required this.onInk, - required this.onInkMuted, - required this.onPrimary, - required this.primary, - required this.primaryHover, - required this.primarySubtle, - required this.primaryFg, - }); - - final Color bg; - final Color bgSubtle; - final Color bgPress; - final Color page; - final Color fgStrong; - final Color fg; - final Color fgMuted; - final Color fgSubtle; - final Color fgDisabled; - final Color border; - final Color borderSubtle; - final Color borderStrong; - final Color overlay; - final Color success; - final Color successSubtle; - final Color successFg; - final Color warning; - final Color warningSubtle; - final Color warningFg; - final Color danger; - final Color dangerSubtle; - final Color dangerFg; - final Color info; - final Color infoSubtle; - final Color infoFg; - final Color violetSubtle; - final Color violetFg; - final Color ink; - final Color onInk; - final Color onInkMuted; - final Color onPrimary; - final Color primary; - final Color primaryHover; - final Color primarySubtle; - final Color primaryFg; - - static const SeedScheme light = SeedScheme( - bg: Color(0xFFFFFFFF), - bgSubtle: Color(0xFFF7F7F8), - bgPress: Color(0xFFF1F2F4), - page: Color(0xFFF7F7F8), - fgStrong: Color(0xFF0A0A0B), - fg: Color(0xFF1A1B1E), - fgMuted: Color(0xDC2E2F33), - fgSubtle: Color(0x9437383C), - fgDisabled: Color(0x4D37383C), - border: Color(0x3870737C), - borderSubtle: Color(0x1F70737C), - borderStrong: Color(0x6670737C), - overlay: Color(0x6B171719), - success: Color(0xFF00BF40), - successSubtle: Color(0xFFE3FBEC), - successFg: Color(0xFF017A2E), - warning: Color(0xFFFF9200), - warningSubtle: Color(0xFFFFF2E0), - warningFg: Color(0xFF9A5200), - danger: Color(0xFFFF4242), - dangerSubtle: Color(0xFFFFEBEB), - dangerFg: Color(0xFFC92A2A), - info: Color(0xFF00AEFF), - infoSubtle: Color(0xFFE3F5FF), - infoFg: Color(0xFF006DAF), - violetSubtle: Color(0xFFF0ECFE), - violetFg: Color(0xFF5B30E8), - ink: Color(0xFF17181C), - onInk: Color(0xF5FFFFFF), - onInkMuted: Color(0x99FFFFFF), - onPrimary: Color(0xFFFFFFFF), - primary: Color(0xFF0F6E66), - primaryHover: Color(0xFF0D615A), - primarySubtle: Color(0xFFE5EFEE), - primaryFg: Color(0xFF0D615A), - ); - - static const SeedScheme dark = SeedScheme( - bg: Color(0xFF1C1C1E), - bgSubtle: Color(0xFF161617), - bgPress: Color(0xFF2C2C2E), - page: Color(0xFF0E0E0F), - fgStrong: Color(0xFFFFFFFF), - fg: Color(0xFFF2F2F4), - fgMuted: Color(0xD1FFFFFF), - fgSubtle: Color(0x8EEBEBF5), - fgDisabled: Color(0x4DEBEBF5), - border: Color(0x1FFFFFFF), - borderSubtle: Color(0x12FFFFFF), - borderStrong: Color(0x42FFFFFF), - overlay: Color(0x99000000), - success: Color(0xFF2BD968), - successSubtle: Color(0x292BD968), - successFg: Color(0xFF37E075), - warning: Color(0xFFFFA726), - warningSubtle: Color(0x29FFA726), - warningFg: Color(0xFFFFB851), - danger: Color(0xFFFF6B6B), - dangerSubtle: Color(0x29FF6B6B), - dangerFg: Color(0xFFFF6B6B), - info: Color(0xFF3AC0FF), - infoSubtle: Color(0x293AC0FF), - infoFg: Color(0xFF5CCBFF), - violetSubtle: Color(0x2E7C61FF), - violetFg: Color(0xFFA892FF), - ink: Color(0xFF000000), - onInk: Color(0xF2FFFFFF), - onInkMuted: Color(0x94FFFFFF), - onPrimary: Color(0xFFFFFFFF), - primary: Color(0xFF0F6E66), - primaryHover: Color(0xFF0D615A), - primarySubtle: Color(0xFF193131), - primaryFg: Color(0xFF6FA8A3), - ); -} - -/// 카테고리/이벤트 hue 한 벌(본색 + 옅은 배경). -@immutable -class SeedHue { - const SeedHue(this.color, this.subtle); - final Color color; - final Color subtle; -} - -/// 테마별 hue 세트(ADR-0032). 라이트/다크가 다른 값을 가지므로 반드시 -/// 현재 스킴의 세트를 통해 해석한다. 키 이름은 서버 저장값(event.color)과 동일. -@immutable -class SeedHues { - const SeedHues({ - required this.blue, - required this.violet, - required this.orange, - required this.green, - required this.sky, - required this.cool, - required this.red, - }); - - final SeedHue blue; - final SeedHue violet; - final SeedHue orange; - final SeedHue green; - final SeedHue sky; - final SeedHue cool; - final SeedHue red; - - /// hue 이름 → [SeedHue]. 미지정/미상은 cool. - SeedHue byName(String? name) => switch (name) { - 'blue' => blue, - 'violet' => violet, - 'orange' => orange, - 'green' => green, - 'sky' => sky, - 'red' => red, - _ => cool, - }; - - static const SeedHues light = SeedHues( - blue: SeedHue(Color(0xFF2B5CE6), Color(0x1A2B5CE6)), - violet: SeedHue(Color(0xFF5B30E8), Color(0x1A5B30E8)), - orange: SeedHue(Color(0xFFE8590C), Color(0x1FE8590C)), - green: SeedHue(Color(0xFF15803D), Color(0x1F15803D)), - sky: SeedHue(Color(0xFF0090DB), Color(0x1F0090DB)), - cool: SeedHue(Color(0xFF70737C), Color(0x1F70737C)), - red: SeedHue(Color(0xFFE03131), Color(0x1AE03131)), - ); - - static const SeedHues dark = SeedHues( - blue: SeedHue(Color(0xFF7DA2FF), Color(0x297DA2FF)), - violet: SeedHue(Color(0xFFA892FF), Color(0x29A892FF)), - orange: SeedHue(Color(0xFFFFA05C), Color(0x29FFA05C)), - green: SeedHue(Color(0xFF4ADE80), Color(0x294ADE80)), - sky: SeedHue(Color(0xFF38BDF8), Color(0x2938BDF8)), - cool: SeedHue(Color(0xFF8E9099), Color(0x298E9099)), - red: SeedHue(Color(0xFFFF8787), Color(0x29FF8787)), - ); -} - -/// 외부 출처 색(캘린더 소스 등). -abstract final class SeedSource { - static const Color app = Color(0xFF0F6E66); - static const Color google = Color(0xFF34A853); - static const Color apple = Color(0xFF111111); - static const Color notion = Color(0xFF7B61FF); - static const Color kakao = Color(0xFFFEE500); -} - -abstract final class SeedRadius { - static const double base = 24; - static const double lg = 32; - static const double chip = 8; - static const double button = 14; - static const double sm = 12; - static const double md = 16; - static const double pill = 99; -} - -abstract final class SeedType { - static const String sans = 'Pretendard'; - static const String brand = 'Wanted Sans'; - static const double baseSize = 15; - - // 타이포 스케일(ADR-0032/DQ-13) — 화면 fontSize 리터럴의 이관 대상. - static const double caption = 12; - static const double label = 13; - static const double body = 14; - static const double base = 15; - static const double bodyLg = 17; - static const double title = 20; - static const double heading = 24; - static const double stat = 34; -} diff --git a/lib/theme/tokens.dart b/lib/theme/tokens.dart index 937497c..043c1e1 100644 --- a/lib/theme/tokens.dart +++ b/lib/theme/tokens.dart @@ -1,5 +1,5 @@ import 'package:flutter/widgets.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; import 'tweaks.dart'; diff --git a/lib/widgets/dk_alert.dart b/lib/widgets/dk_alert.dart index d8c9bd5..cd85f21 100644 --- a/lib/widgets/dk_alert.dart +++ b/lib/widgets/dk_alert.dart @@ -3,7 +3,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_button.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 중앙 확인 Alert(취소/확인). 되돌리기 어려운 동작(연동 해제 등)에 명시적 확인을 받는다. /// diff --git a/lib/widgets/dk_badge.dart b/lib/widgets/dk_badge.dart index 89a0f5d..23ef0e9 100644 --- a/lib/widgets/dk_badge.dart +++ b/lib/widgets/dk_badge.dart @@ -1,6 +1,6 @@ import 'package:flutter/widgets.dart'; -import '../theme/seed_components.dart'; +import 'package:seed_design/seed_components.dart'; import '../theme/tokens.dart'; /// 뱃지/상태 색조. 프로토타입 `TONE`. seed [SeedBadge.tones] 와 키 1:1. diff --git a/lib/widgets/dk_bell_button.dart b/lib/widgets/dk_bell_button.dart index 9dbc988..ecd1f03 100644 --- a/lib/widgets/dk_bell_button.dart +++ b/lib/widgets/dk_bell_button.dart @@ -2,7 +2,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_icon.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 우상단 알림 벨 버튼(모든 탭 공통). 프로토타입 `AppHeader` 의 벨을 단일 위젯으로 통일. /// diff --git a/lib/widgets/dk_button.dart b/lib/widgets/dk_button.dart index 2b864a0..1429cdc 100644 --- a/lib/widgets/dk_button.dart +++ b/lib/widgets/dk_button.dart @@ -1,6 +1,6 @@ import 'package:flutter/widgets.dart'; -import '../theme/seed_components.dart'; +import 'package:seed_design/seed_components.dart'; import '../theme/tokens.dart'; /// 버튼 크기. 프로토타입 `Btn` size 스케일. diff --git a/lib/widgets/dk_card.dart b/lib/widgets/dk_card.dart index ef3fcde..0d5e4ed 100644 --- a/lib/widgets/dk_card.dart +++ b/lib/widgets/dk_card.dart @@ -1,6 +1,6 @@ import 'package:flutter/widgets.dart'; -import '../theme/seed_components.dart'; +import 'package:seed_design/seed_components.dart'; import '../theme/tokens.dart'; /// 기본 카드. 프로토타입 `Card`. diff --git a/lib/widgets/dk_choice_chip.dart b/lib/widgets/dk_choice_chip.dart index 3201c72..65aadef 100644 --- a/lib/widgets/dk_choice_chip.dart +++ b/lib/widgets/dk_choice_chip.dart @@ -1,6 +1,6 @@ import 'package:flutter/widgets.dart'; -import '../theme/seed_components.dart'; +import 'package:seed_design/seed_components.dart'; import '../theme/tokens.dart'; import 'dk_icon.dart'; diff --git a/lib/widgets/dk_empty.dart b/lib/widgets/dk_empty.dart index dbcf122..bc85c0a 100644 --- a/lib/widgets/dk_empty.dart +++ b/lib/widgets/dk_empty.dart @@ -3,7 +3,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_button.dart'; import 'dk_icon.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 빈 상태. 프로토타입 `Empty`. /// diff --git a/lib/widgets/dk_feedback.dart b/lib/widgets/dk_feedback.dart index f2da92c..1b2be67 100644 --- a/lib/widgets/dk_feedback.dart +++ b/lib/widgets/dk_feedback.dart @@ -3,7 +3,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_badge.dart'; import 'dk_icon.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 토스트 한 건. 프로토타입 `showToast` payload. class DkToastData { diff --git a/lib/widgets/dk_icon.dart b/lib/widgets/dk_icon.dart index e617083..855f19f 100644 --- a/lib/widgets/dk_icon.dart +++ b/lib/widgets/dk_icon.dart @@ -1,6 +1,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:ieoseo/theme/seed_icons.dart'; +import 'package:seed_design/seed_icons.dart'; /// 디자인 시스템 아이콘 path 맵. seed-design 단일 소스 [kSeedIcons] /// (`theme/seed_icons.dart`, vendored)를 그대로 쓴다. 각 값은 SVG `path` `d` diff --git a/lib/widgets/dk_section.dart b/lib/widgets/dk_section.dart index 6eb4270..7b31d42 100644 --- a/lib/widgets/dk_section.dart +++ b/lib/widgets/dk_section.dart @@ -2,7 +2,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_icon.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 섹션 헤더. 프로토타입 `SectionHead`: 제목 17/700 + 우측 action(13/600 + chevR). class DkSectionHead extends StatelessWidget { diff --git a/lib/widgets/dk_segmented.dart b/lib/widgets/dk_segmented.dart index e561e0a..1fc001a 100644 --- a/lib/widgets/dk_segmented.dart +++ b/lib/widgets/dk_segmented.dart @@ -1,6 +1,6 @@ import 'package:flutter/widgets.dart'; -import '../theme/seed_components.dart'; +import 'package:seed_design/seed_components.dart'; import '../theme/tokens.dart'; /// 세그먼트 항목. diff --git a/lib/widgets/dk_sheet.dart b/lib/widgets/dk_sheet.dart index d7f72cc..4245d47 100644 --- a/lib/widgets/dk_sheet.dart +++ b/lib/widgets/dk_sheet.dart @@ -3,7 +3,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_icon.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 바텀시트. 프로토타입 `Sheet`. /// diff --git a/lib/widgets/dk_tab_bar.dart b/lib/widgets/dk_tab_bar.dart index 3d2b5bc..9d80fd3 100644 --- a/lib/widgets/dk_tab_bar.dart +++ b/lib/widgets/dk_tab_bar.dart @@ -4,7 +4,7 @@ import 'package:flutter/widgets.dart'; import '../theme/tokens.dart'; import 'dk_icon.dart'; -import 'package:ieoseo/theme/seed_tokens.dart'; +import 'package:seed_design/seed_tokens.dart'; /// 하단 탭. 프로토타입 `TABS`. (집중 탭은 프로필 도구로 이동, 통계 탭 신설 — ADR 없이 IA 조정) enum DkTab { today, plan, stats, me } diff --git a/pubspec.lock b/pubspec.lock index 8ad5ea7..479efa9 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -704,6 +704,15 @@ packages: url: "https://pub.dev" source: hosted version: "0.28.0" + seed_design: + dependency: "direct main" + description: + path: "." + ref: HEAD + resolved-ref: "1910eca50b7a64b1ebbf80c10fcc3eb30487f864" + url: "https://github.com/ieoseo/seed-design.git" + source: git + version: "0.1.0" sentry: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 126ba86..f8a1698 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -28,6 +28,11 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: + # 디자인 프리미티브(토큰·컴포넌트 스펙·아이콘) — 생성물 패키지(ADR-0036). + # 업데이트: flutter pub upgrade seed_design (lock 이 seed 커밋을 고정한다) + seed_design: + git: + url: https://github.com/ieoseo/seed-design.git flutter: sdk: flutter diff --git a/test/dk_button_test.dart b/test/dk_button_test.dart index 8244f0d..f989e7e 100644 --- a/test/dk_button_test.dart +++ b/test/dk_button_test.dart @@ -1,6 +1,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:ieoseo/theme/seed_components.dart'; +import 'package:seed_design/seed_components.dart'; import 'package:ieoseo/theme/tokens.dart'; import 'package:ieoseo/theme/tweaks.dart'; import 'package:ieoseo/widgets/dk_button.dart'; diff --git a/test/dk_components_seed_test.dart b/test/dk_components_seed_test.dart index ec8a3d5..4d9c0eb 100644 --- a/test/dk_components_seed_test.dart +++ b/test/dk_components_seed_test.dart @@ -1,6 +1,6 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:ieoseo/theme/seed_components.dart'; +import 'package:seed_design/seed_components.dart'; import 'package:ieoseo/theme/tokens.dart'; import 'package:ieoseo/theme/tweaks.dart'; import 'package:ieoseo/widgets/dk_badge.dart'; diff --git a/test/theme_contrast_test.dart b/test/theme_contrast_test.dart index a2d9cd6..0d0f115 100644 --- a/test/theme_contrast_test.dart +++ b/test/theme_contrast_test.dart @@ -2,7 +2,7 @@ import 'dart:math' as math; import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:ieoseo/theme/seed_components.dart'; +import 'package:seed_design/seed_components.dart'; import 'package:ieoseo/theme/tokens.dart'; import 'package:ieoseo/theme/tweaks.dart';