├── .github ├── ISSUE_TEMPLATE │ ├── Bug.md │ ├── Docs.md │ ├── Feature.md │ └── Refactor.md └── pull_request_template.md ├── .gitignore ├── README.md └── WithSuhyeon-iOS ├── KakaoSDKFriendResources.bundle ├── Assets.car ├── Info.plist ├── en.lproj │ └── KakaoSDKFriendLocalizable.strings ├── ja.lproj │ └── KakaoSDKFriendLocalizable.strings └── ko.lproj │ └── KakaoSDKFriendLocalizable.strings ├── WithSuhyeon-iOS.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── swiftpm │ │ └── Package.resolved └── xcshareddata │ └── xcschemes │ └── WithSuhyeon-iOS.xcscheme ├── WithSuhyeon-iOS ├── Application │ ├── DIContainer+.swift │ └── WithSuhyeon_iOSApp.swift ├── Core │ ├── Common │ │ ├── Configuration.swift │ │ └── Extension │ │ │ ├── Int+.swift │ │ │ └── String+.swift │ ├── DIContainer │ │ ├── DIContainer.swift │ │ └── Inject.swift │ ├── DesignSystem │ │ ├── Component │ │ │ ├── CustomDatePicker.swift │ │ │ ├── WithSuhyeonAlert.swift │ │ │ ├── WithSuhyeonButton.swift │ │ │ ├── WithSuhyeonCategoryChip.swift │ │ │ ├── WithSuhyeonCategorySelectChip.swift │ │ │ ├── WithSuhyeonChatroomNavigationBar.swift │ │ │ ├── WithSuhyeonCheckbox.swift │ │ │ ├── WithSuhyeonDropdown.swift │ │ │ ├── WithSuhyeonEmptyView.swift │ │ │ ├── WithSuhyeonFindSuhyeonDetailContainer.swift │ │ │ ├── WithSuhyeonFloatingButton.swift │ │ │ ├── WithSuhyeonLocationSelect.swift │ │ │ ├── WithSuhyeonLongTextField.swift │ │ │ ├── WithSuhyeonMiniButton.swift │ │ │ ├── WithSuhyeonMultiSelectBigChip.swift │ │ │ ├── WithSuhyeonMultiSelectCheckBigChip.swift │ │ │ ├── WithSuhyeonMyFindSuhyeonPost.swift │ │ │ ├── WithSuhyeonPageIndicator.swift │ │ │ ├── WithSuhyeonPostContainer.swift │ │ │ ├── WithSuhyeonProgressBar.swift │ │ │ ├── WithSuhyeonSmallChip.swift │ │ │ ├── WithSuhyeonSmallFloatingButton.swift │ │ │ ├── WithSuhyeonSocialButton.swift │ │ │ ├── WithSuhyeonTabBar.swift │ │ │ ├── WithSuhyeonTextField.swift │ │ │ ├── WithSuhyeonTopNavigationBar.swift │ │ │ ├── WithSuhyeonUnderlineButton.swift │ │ │ └── WithSuhyeonWebView.swift │ │ ├── Foundation │ │ │ ├── Color+.swift │ │ │ ├── Font+.swift │ │ │ ├── Image+.swift │ │ │ ├── WithSuhyeonButtonState.swift │ │ │ ├── WithSuhyeonCheckboxState.swift │ │ │ ├── WithSuhyeonDropdownState.swift │ │ │ ├── WithSuhyeonIcon.swift │ │ │ ├── WithSuhyeonImage.swift │ │ │ ├── WithSuhyeonLocation.swift │ │ │ ├── WithSuhyeonTextFieldState.swift │ │ │ └── WithSuyeonChipState.swift │ │ ├── Modifier │ │ │ ├── WithSuhyeonAlertModifier.swift │ │ │ ├── WithSuhyeonBackSwipeModifier.swift │ │ │ ├── WithSuhyeonBottomSheetModifier.swift │ │ │ ├── WithSuhyeonCornerRadius.swift │ │ │ └── WithSuhyeonModalModifier.swift │ │ └── Resource │ │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_app.png │ │ │ ├── Contents.json │ │ │ ├── Icons │ │ │ │ ├── Contents.json │ │ │ │ ├── ic_apple.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Frame 2085668307.svg │ │ │ │ ├── ic_archive_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_archive, Size=24.svg │ │ │ │ ├── ic_arrow_down_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_arrow_down, Size=24.svg │ │ │ │ ├── ic_arrow_left_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_arrow_left, Size=24.svg │ │ │ │ ├── ic_arrow_right_16.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=ic_arrow_right, Size=16.svg │ │ │ │ ├── ic_arrow_right_20.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── icn_bar.svg │ │ │ │ ├── ic_arrow_right_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_arrow_right, Size=24.svg │ │ │ │ ├── ic_arrow_up_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_arrow_up, Size=24.svg │ │ │ │ ├── ic_block_18.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=ic_block, Size=18.svg │ │ │ │ ├── ic_bookmark_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_bookmark, Size=24.svg │ │ │ │ ├── ic_cal_arrow_left.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── ic_arrow_left_16.svg │ │ │ │ ├── ic_cal_arrow_left_gray.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── ic_arrow_left_gray_16.svg │ │ │ │ ├── ic_cal_arrow_right.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── ic_cal_arrow_right.svg │ │ │ │ ├── ic_calander_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_calander, Size=24.svg │ │ │ │ ├── ic_calender_filled_16.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=icn_calender_filled, Size=16.svg │ │ │ │ ├── ic_camera_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_camera, Size=24.svg │ │ │ │ ├── ic_chat_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=chat, Size=24.svg │ │ │ │ ├── ic_chat_filled_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── ic_chat_filled_24.svg │ │ │ │ ├── ic_check_16.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_check, Size=16.svg │ │ │ │ ├── ic_check_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_check, Size=24.svg │ │ │ │ ├── ic_clock_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_clock, Size=24.svg │ │ │ │ ├── ic_download_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_download, Size=24.svg │ │ │ │ ├── ic_expand_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_expand, Size=24.svg │ │ │ │ ├── ic_find_16.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=ic_find, Size=16.svg │ │ │ │ ├── ic_find_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=find, Size=24 (1).svg │ │ │ │ ├── ic_find_filled_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── ic_find_filled_24.svg │ │ │ │ ├── ic_gallery_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=sharedalbum, Size=24.svg │ │ │ │ ├── ic_gallery_filled_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── ic_gallery_filled_24.svg │ │ │ │ ├── ic_home_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=home, Size=24.svg │ │ │ │ ├── ic_home_filled_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── ic_home_filled_24.svg │ │ │ │ ├── ic_info_18.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=ic_info, Size=18.svg │ │ │ │ ├── ic_kakao.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── icon.svg │ │ │ │ ├── ic_location_18.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── icon.svg │ │ │ │ ├── ic_location_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_location, Size=24.svg │ │ │ │ ├── ic_location_home_16.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=ic_location_home, Size=16.svg │ │ │ │ ├── ic_menu_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_menu, Size=24.svg │ │ │ │ ├── ic_message_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_message, Size=24.svg │ │ │ │ ├── ic_mypage_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=mypage, Size=24.svg │ │ │ │ ├── ic_mypage_filled_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── ic_mypage_filled_24.svg │ │ │ │ ├── ic_mypage_qna_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── mypage_ic_qna.svg │ │ │ │ ├── ic_phone_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_phone, Size=24.svg │ │ │ │ ├── ic_plus_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_plus, Size=24.svg │ │ │ │ ├── ic_refresh_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_refresh, Size=24.svg │ │ │ │ ├── ic_search_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_search, Size=24.svg │ │ │ │ ├── ic_send_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=ic_send, Size=24.svg │ │ │ │ ├── ic_send_message_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── icon.svg │ │ │ │ ├── ic_setting_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_setting, Size=24.svg │ │ │ │ ├── ic_trash_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_trash, Size=24.svg │ │ │ │ ├── ic_upload_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_upload, Size=24.svg │ │ │ │ ├── ic_user_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_user, Size=24.svg │ │ │ │ ├── ic_user_filled_16.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=ic_user_filled, Size=16.svg │ │ │ │ ├── ic_video_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_video, Size=24.svg │ │ │ │ ├── ic_warning_black_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_warning_black_24, Size=24.svg │ │ │ │ ├── ic_white_plus.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── ic_white_plus.svg │ │ │ │ ├── ic_write_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_write, Size=24.svg │ │ │ │ ├── ic_xclose_16.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── name=ic_xclose, Size=16.svg │ │ │ │ ├── ic_xclose_24.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Property 1=ic_xclose, Size=24.svg │ │ │ │ └── icn_purple_check.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── icn_purple_check.svg │ │ │ └── Images │ │ │ │ ├── Contents.json │ │ │ │ ├── img_block.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── img_block.png │ │ │ │ ├── img_block@2x.png │ │ │ │ └── img_block@3x.png │ │ │ │ ├── img_blue_suma.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── _Avatar contrast inner border@2x.png │ │ │ │ ├── _Avatar contrast inner border@3x.png │ │ │ │ └── img_blue_suma.png │ │ │ │ ├── img_blue_suma_before.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── btn_profile@2x.png │ │ │ │ ├── btn_profile@3x.png │ │ │ │ └── img_blue_suma.png │ │ │ │ ├── img_blue_suma_border.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── btn_blue_border.png │ │ │ │ ├── btn_profile@2x.png │ │ │ │ └── btn_profile@3x.png │ │ │ │ ├── img_boy_default.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── Property 1=img_boy_default3.png │ │ │ │ ├── Property 1=img_boy_default@2x.png │ │ │ │ └── img_boy_default.png │ │ │ │ ├── img_boy_selected.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── Property 1=img_boy_selected.png │ │ │ │ ├── Property 1=img_boy_selected3.png │ │ │ │ └── img_boy_selected-1.png │ │ │ │ ├── img_do_not_disturb.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── img_do_not_disturb.png │ │ │ │ ├── img_do_not_disturb@2x.png │ │ │ │ └── img_do_not_disturb@3x.png │ │ │ │ ├── img_empty.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── img_empty.png │ │ │ │ ├── img_empty@2x.png │ │ │ │ └── img_empty@3x.png │ │ │ │ ├── img_emptystate.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── img_emptystate.png │ │ │ │ ├── img_emptystate@2x.png │ │ │ │ └── img_emptystate@3x.png │ │ │ │ ├── img_fuckoff.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── img_fuckoff.png │ │ │ │ ├── img_fuckoff@2x.png │ │ │ │ └── img_fuckoff@3x.png │ │ │ │ ├── img_girl_default.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── Property 1=img_girl_default3.png │ │ │ │ ├── Property 1=img_girl_default@2x.png │ │ │ │ └── img_girl_default.png │ │ │ │ ├── img_girl_selected.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── Property 1=img_girl_selected3.png │ │ │ │ ├── Property 1=img_girl_selected@2x.png │ │ │ │ └── img_girl_selected.png │ │ │ │ ├── img_green_suma.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── _Avatar contrast inner border@2x.png │ │ │ │ ├── _Avatar contrast inner border@3x.png │ │ │ │ └── img_green_suma.png │ │ │ │ ├── img_green_suma_before.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── btn_profile@2x.png │ │ │ │ ├── btn_profile@3x.png │ │ │ │ └── img_green_suma.png │ │ │ │ ├── img_green_suma_border.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── btn_profile@2x.png │ │ │ │ ├── btn_profile@3x.png │ │ │ │ └── img_green_border.png │ │ │ │ ├── img_logo.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── Group.png │ │ │ │ ├── Group@2x.png │ │ │ │ └── Group@3x.png │ │ │ │ ├── img_megaphone.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── img_megaphone.png │ │ │ │ ├── img_megaphone@2x.png │ │ │ │ └── img_megaphone@3x.png │ │ │ │ ├── img_profile_default.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── _Avatar contrast inner border@2x.png │ │ │ │ ├── _Avatar contrast inner border@3x.png │ │ │ │ └── img_profile_default.png │ │ │ │ ├── img_purple_suma.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── _Avatar contrast inner border@2x.png │ │ │ │ ├── _Avatar contrast inner border@3x.png │ │ │ │ └── img_purple_sumapng.png │ │ │ │ ├── img_purple_suma_before.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── btn_profile@2x.png │ │ │ │ ├── btn_profile@3x.png │ │ │ │ └── img_purple_suma.png │ │ │ │ ├── img_purple_suma_border.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── btn_profile@3x-1.png │ │ │ │ ├── btn_profile@3x.png │ │ │ │ └── img_purple_border.png │ │ │ │ ├── img_red_suma.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── img_red_suma.png │ │ │ │ ├── img_red_suma@2x.png │ │ │ │ └── img_red_suma@3x.png │ │ │ │ ├── img_red_suma_before.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── btn_profile.png │ │ │ │ ├── btn_profile@2x.png │ │ │ │ └── btn_profile@3x.png │ │ │ │ ├── img_red_suma_border.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── state=selected, color=red.png │ │ │ │ ├── state=selected, color=red@2x.png │ │ │ │ └── state=selected, color=red@3x.png │ │ │ │ ├── img_seek_and_hide.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── img_seek_and_hide.png │ │ │ │ ├── img_seek_and_hide@2x.png │ │ │ │ └── img_seek_and_hide@3x.png │ │ │ │ ├── img_study_cafe.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── img_study_cafe.png │ │ │ │ ├── img_study_cafe@2x.png │ │ │ │ └── img_study_cafe@3x.png │ │ │ │ ├── img_wip.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── img_wip.png │ │ │ │ ├── img_wip@2x.png │ │ │ │ └── img_wip@3x.png │ │ │ │ └── img_withdraw.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── img_withdraw.png │ │ │ │ ├── img_withdraw@2x.png │ │ │ │ └── img_withdraw@3x.png │ │ │ ├── SUIT-Bold.otf │ │ │ ├── SUIT-ExtraBold.otf │ │ │ ├── SUIT-Regular.otf │ │ │ ├── SUIT-SemiBold.otf │ │ │ ├── home.json │ │ │ ├── logincomplete.json │ │ │ ├── onboarding1.json │ │ │ ├── onboarding2.json │ │ │ ├── onboarding3.json │ │ │ ├── signup.json │ │ │ └── splash.json │ ├── KeyChain │ │ └── KeyChainManager.swift │ ├── Network │ │ ├── AuthInterceptor.swift │ │ ├── BaseResponse.swift │ │ ├── Encodable+.swift │ │ ├── NetworkClient.swift │ │ ├── NetworkError.swift │ │ ├── NetworkLogger.swift │ │ ├── NetworkManager.swift │ │ ├── NetworkRequestable.swift │ │ ├── NoAuthInterceptor.swift │ │ ├── RequestParameters.swift │ │ └── TargetType.swift │ ├── OAuth │ │ └── OAuthInteractor │ │ │ ├── OAuthInteractor.swift │ │ │ └── impl │ │ │ └── KakaoInteractor.swift │ ├── Router │ │ ├── Router.swift │ │ └── RouterRegistry.swift │ ├── Socket │ │ ├── WebSocketClient.swift │ │ ├── WebSocketTarget.swift │ │ └── WebSocketTargetType.swift │ └── UI │ │ ├── Extension │ │ ├── UIApplication+.swift │ │ └── View+.swift │ │ ├── Feature.swift │ │ └── ObservableScrollView.swift ├── Data │ ├── Auth │ │ ├── Model │ │ │ └── Remote │ │ │ │ ├── KakaoLoginResponseDTO.swift │ │ │ │ ├── LoginRequestDTO.swift │ │ │ │ ├── LoginResponseDTO.swift │ │ │ │ ├── SignUpRequestDTO.swift │ │ │ │ └── UserIDResponseDTO.swift │ │ ├── Repository │ │ │ ├── AuthRepositoryImpl.swift │ │ │ └── DefaultOAuthRepository.swift │ │ └── Source │ │ │ └── Remote │ │ │ ├── AuthAPI.swift │ │ │ └── AuthTarget.swift │ ├── BlockingAccount │ │ ├── Model │ │ │ └── Remote │ │ │ │ ├── BlockingAccountRequestDTO.swift │ │ │ │ └── BlockingAccountResponseDTO.swift │ │ ├── Repository │ │ │ └── BlockingAccountRepositoryImpl.swift │ │ └── Source │ │ │ └── Remote │ │ │ ├── BlockingAccountAPI.swift │ │ │ └── BlockingAccountTarget.swift │ ├── Chat │ │ ├── Model │ │ │ └── Remote │ │ │ │ ├── ChatCreateResponseDTO.swift │ │ │ │ ├── ChatMessagesResponseDTO.swift │ │ │ │ ├── ChatRequestDTO.swift │ │ │ │ ├── ChatResponseDTO.swift │ │ │ │ └── ChatRoomsResponseDTO.swift │ │ ├── Repository │ │ │ └── DefaultChatRepository.swift │ │ └── Source │ │ │ └── Remote │ │ │ ├── ChatAPI.swift │ │ │ ├── ChatSocket.swift │ │ │ ├── ChatSocketTarget.swift │ │ │ └── ChatTarget.swift │ ├── Common │ │ ├── Model │ │ │ └── Remote │ │ │ │ ├── CategoryResponseDTO.swift │ │ │ │ └── RegionResponseDTO.swift │ │ ├── Repository │ │ │ └── DefaultCommonRepository.swift │ │ └── Source │ │ │ └── Remote │ │ │ ├── CommonAPI.swift │ │ │ └── CommonTarget.swift │ ├── FindSuhyeon │ │ ├── Model │ │ │ └── Remote │ │ │ │ ├── FindSuhyeonMainRequestDTO.swift │ │ │ │ ├── FindSuhyeonMainResponseDTO.swift │ │ │ │ ├── FindSuhyeonPostDetailResponseDTO.swift │ │ │ │ └── FindSuhyeonPostRequestDTO.swift │ │ ├── Repository │ │ │ └── DefaultFindSuhyeonRepository.swift │ │ └── Source │ │ │ └── Remote │ │ │ ├── FindSuhyeonAPI.swift │ │ │ └── FindSuhyeonTarget.swift │ ├── Gallery │ │ ├── Model │ │ │ └── Remote │ │ │ │ ├── CategoryRequestDTO.swift │ │ │ │ ├── GalleriesResponseDTO.swift │ │ │ │ ├── GalleryDetailResponseDTO.swift │ │ │ │ └── GalleryInfoRequestDTO.swift │ │ ├── Repository │ │ │ └── DefaultGalleryRepository.swift │ │ └── Source │ │ │ └── Remote │ │ │ ├── GalleryAPI.swift │ │ │ └── GalleryTarget.swift │ ├── Home │ │ ├── Model │ │ │ └── Remote │ │ │ │ └── HomeResponseDTO.swift │ │ ├── Repository │ │ │ └── DefaultHomeRepository.swift │ │ └── Source │ │ │ └── Remote │ │ │ ├── HomeAPI.swift │ │ │ └── HomeTarget.swift │ └── MyPage │ │ ├── Model │ │ └── Remote │ │ │ ├── MyFindSuhyeonPostResponseDTO.swift │ │ │ ├── MyGalleryPostsResponseDTO.swift │ │ │ ├── MyInterestRegionRequestDTO.swift │ │ │ ├── MyInterestRegionResponseDTO.swift │ │ │ ├── MyPhoneNumberResponseDTO.swift │ │ │ └── UserResponseDTO.swift │ │ ├── Repository │ │ └── DefaultMyPageRepository.swift │ │ └── Source │ │ └── Remote │ │ ├── MyPageAPI.swift │ │ └── MyPageTarget.swift ├── Domain │ ├── Auth │ │ ├── Entity │ │ │ └── Member.swift │ │ ├── Repository │ │ │ ├── AuthRepository.swift │ │ │ └── OAuthRepository.swift │ │ └── UseCase │ │ │ ├── SignUpUseCase.swift │ │ │ └── ValidateNickNameUseCase.swift │ ├── BlockingAccount │ │ ├── Entity │ │ │ └── BlockingMember.swift │ │ └── Repository │ │ │ └── BlockingRepository.swift │ ├── Chat │ │ ├── Entity │ │ │ ├── Chat.swift │ │ │ ├── Create.swift │ │ │ ├── Message.swift │ │ │ └── Send.swift │ │ └── Repository │ │ │ └── ChatRepository.swift │ ├── Common │ │ ├── Entity │ │ │ ├── Category.swift │ │ │ ├── Gender.swift │ │ │ └── Region.swift │ │ ├── Repository │ │ │ └── CommonRepository.swift │ │ └── UseCase │ │ │ ├── GetCategoriesUseCase.swift │ │ │ └── GetRegionsUseCase.swift │ ├── FindSuhyeon │ │ ├── Entity │ │ │ ├── FindSuhyeonMain.swift │ │ │ ├── FindSuhyeonPost.swift │ │ │ ├── FindSuhyeonPostDetail.swift │ │ │ └── FindSuhyeonPostRequest.swift │ │ └── Repository │ │ │ └── FindSuhyeonRepository.swift │ ├── Gallery │ │ ├── Entity │ │ │ ├── GalleryDetail.swift │ │ │ ├── GalleryPost.swift │ │ │ └── GalleryUpload.swift │ │ └── Repository │ │ │ └── GalleryRepository.swift │ ├── Home │ │ ├── Entity │ │ │ ├── Home.swift │ │ │ └── Post.swift │ │ └── Repository │ │ │ └── HomeRepository.swift │ └── MyPage │ │ ├── Entity │ │ ├── MyFindSuhyeonPost.swift │ │ ├── MyGalleryPost.swift │ │ ├── MyInterestRegion.swift │ │ └── User.swift │ │ └── Repository │ │ └── MyPageRepository.swift ├── Info.plist ├── Presentation │ ├── Chat │ │ ├── ChatFeature.swift │ │ ├── ChatRoom │ │ │ ├── ChatRoomFeature.swift │ │ │ └── ChatRoomView.swift │ │ ├── ChatView.swift │ │ └── Component │ │ │ ├── ChatUserContainer.swift │ │ │ └── MessageContainer.swift │ ├── FindSuhyeon │ │ ├── Component │ │ │ ├── FindSuhyeonDropdownCell.swift │ │ │ ├── FindSuhyeonGenderSelectCell.swift │ │ │ └── FindSuhyeonMainPostContainer.swift │ │ ├── FindSuhyeonDetail │ │ │ ├── FindSuhyeonDetailFeature.swift │ │ │ └── FindSuhyeonDetailView.swift │ │ ├── FindSuhyeonFeature.swift │ │ ├── FindSuhyeonMain │ │ │ ├── FindSuhyeonMainFeature.swift │ │ │ └── FindSuhyeonMainView.swift │ │ └── FindSuhyeonView.swift │ ├── Gallery │ │ ├── Component │ │ │ ├── CategoryItem.swift │ │ │ └── GalleryItem.swift │ │ ├── GalleryDetail │ │ │ ├── GalleryDetailFeature.swift │ │ │ └── GalleryDetailView.swift │ │ ├── GalleryFeature.swift │ │ ├── GalleryUpload │ │ │ ├── GalleryUploadFeature.swift │ │ │ └── GalleryUploadView.swift │ │ └── GalleryView.swift │ ├── Home │ │ ├── Component │ │ │ └── HomeFindSuhyeonContainer.swift │ │ ├── HomeFeature.swift │ │ └── HomeView.swift │ ├── Login │ │ ├── LoginCompleteView.swift │ │ ├── LoginFeature.swift │ │ └── LoginView.swift │ ├── Main │ │ ├── ContentView.swift │ │ ├── MainTab.swift │ │ ├── MainTabBar.swift │ │ ├── MainTabBarFeature.swift │ │ └── TabItem.swift │ ├── MyPage │ │ ├── BlockingAccountManagement │ │ │ ├── BlockingAccountManagement.swift │ │ │ └── BlockingAccountManagementFeature.swift │ │ ├── Feedback │ │ │ ├── Feedback.swift │ │ │ └── FeedbackFeature.swift │ │ ├── MyInfo │ │ │ ├── MyInfoFeature.swift │ │ │ └── MyInfoView.swift │ │ ├── MyPageFeature.swift │ │ ├── MyPageView.swift │ │ ├── MyPost │ │ │ ├── MyPost.swift │ │ │ ├── MyPostContentCase.swift │ │ │ └── MyPostFeature.swift │ │ ├── SetInterest │ │ │ ├── SetInterest.swift │ │ │ └── SetInterestFeature.swift │ │ ├── TermsAndPolicies │ │ │ ├── TermsAndPolicies.swift │ │ │ ├── TermsAndPoliciesFeature.swift │ │ │ └── TermsAndPoliciesWebView.swift │ │ └── Withdraw │ │ │ └── ServerWithdraw.swift │ ├── SignUp │ │ ├── Component │ │ │ └── GenderButton.swift │ │ ├── SignUpContent.swift │ │ ├── SignUpContentCase.swift │ │ ├── SignUpFeature.swift │ │ ├── SignUpView.swift │ │ └── View │ │ │ ├── ActiveAreaView.swift │ │ │ ├── PhoneAuthenticationView.swift │ │ │ ├── ProfileImageView.swift │ │ │ ├── SelectBirthYearView.swift │ │ │ ├── SelectGenderView.swift │ │ │ ├── SignUpCompleteView.swift │ │ │ ├── TermsOfServiceView.swift │ │ │ └── WriteNickNameView.swift │ ├── Splash │ │ ├── SplashFeature.swift │ │ └── SplashView.swift │ └── Start │ │ ├── StartFeature.swift │ │ └── StartView.swift ├── Preview Content │ └── Preview Assets.xcassets │ │ └── Contents.json └── WithSuhyeon-iOS.entitlements ├── WithSuhyeon-iOSTests └── WithSuhyeon_iOSTests.swift └── WithSuhyeon-iOSUITests ├── WithSuhyeon_iOSUITests.swift └── WithSuhyeon_iOSUITestsLaunchTests.swift /.github/ISSUE_TEMPLATE/Bug.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Bug" 3 | about: 앱에서 발생한 Issue를 설명해주세요. 4 | title: "[bug] App Bug Report" 5 | labels: Fix 6 | assignees: '' 7 | --- 8 | 9 | ## 🐞 BugFix 10 | 11 | ### 앱에서 발생한 Issue를 설명해주세요. 12 | 13 | A clear and concise description of what the bug is. 14 | 15 | 16 | ### Issue 재현 경로를 설명해주세요. 17 | Steps to reproduce the behavior: 18 | 1. Go to '...' 19 | 2. Click on '....' 20 | 3. Scroll down to '....' 21 | 4. See error 22 | 23 | 24 | ### 수정 후 예상되는 동작을 설명해주세요. 25 | A clear and concise description of what you expected to happen. 26 | 27 | 28 | ### 스크린샷 29 | If applicable, add screenshots to help explain your problem. 30 | 31 | 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Docs.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Docs" 3 | about: 문서 작성 관련 작업내용을 설명해주세요. 4 | title: "[docs] Docs Task" 5 | labels: Docs 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 📜 Docs 11 | 12 | ### 작업 내용을 설명해주세요. 13 | 14 | 15 | ### 비고 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Feature" 3 | about: 앱에서 추가할 기능을 설명해주세요. 4 | title: "[feat] Feature Request" 5 | labels: Feature 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 🔍 Feature 11 | 12 | ### 추가할 기능에 대해 설명해주세요. 13 | 14 | 15 | 16 | ### Progress 17 | - [ ] todo1 18 | - [ ] todo2 19 | - [ ] todo3 20 | 21 | 22 | ### 비고 23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Refactor.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Refactor" 3 | about: 앱에서 리팩토링할 내용을 설명해주세요. 4 | title: "[refactor] Refactor Request" 5 | labels: Refactor 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## ⚒️ Refactor 11 | 12 | ### 리팩토링할 내용에 대해 설명해주세요. 13 | 14 | 15 | 16 | ### Progress 17 | - [ ] todo1 18 | - [ ] todo2 19 | - [ ] todo3 20 | 21 | 22 | 23 | ### 비고 24 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## 📌 PR 요약 2 | 3 | 🌱 작업한 내용 4 | - 5 | 6 | 🌱 PR 포인트 7 | - 8 | 9 | ## 📸 스크린샷 10 | |스크린샷| 11 | |:--:| 12 | |파일첨부바람| 13 | 14 | ## 📮 관련 이슈 15 | - Resolved: #이슈번호 16 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/KakaoSDKFriendResources.bundle/Assets.car: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/KakaoSDKFriendResources.bundle/Assets.car -------------------------------------------------------------------------------- /WithSuhyeon-iOS/KakaoSDKFriendResources.bundle/en.lproj/KakaoSDKFriendLocalizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/KakaoSDKFriendResources.bundle/en.lproj/KakaoSDKFriendLocalizable.strings -------------------------------------------------------------------------------- /WithSuhyeon-iOS/KakaoSDKFriendResources.bundle/ja.lproj/KakaoSDKFriendLocalizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/KakaoSDKFriendResources.bundle/ja.lproj/KakaoSDKFriendLocalizable.strings -------------------------------------------------------------------------------- /WithSuhyeon-iOS/KakaoSDKFriendResources.bundle/ko.lproj/KakaoSDKFriendLocalizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/KakaoSDKFriendResources.bundle/ko.lproj/KakaoSDKFriendLocalizable.strings -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/Common/Configuration.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Configuration.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/8/25. 6 | // 7 | 8 | import Foundation 9 | 10 | public enum Configuration { 11 | static let baseURL: String = { 12 | guard let url = Bundle.main.infoDictionary?["BASE_URL"] as? String else { 13 | fatalError("No Configuration Found") 14 | } 15 | return url 16 | }() 17 | 18 | static let socketURL: String = { 19 | guard let url = Bundle.main.infoDictionary?["SOCKET_URL"] as? String else { 20 | fatalError("No Configuration Found") 21 | } 22 | return url 23 | }() 24 | } 25 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/Common/Extension/Int+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Int+.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | import Foundation 9 | 10 | extension Int { 11 | var formattedWithComma: String { 12 | let formatter = NumberFormatter() 13 | formatter.numberStyle = .decimal 14 | return formatter.string(from: NSNumber(value: self)) ?? "\(self)" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DIContainer/DIContainer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DIContainer.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/8/25. 6 | // 7 | 8 | import Combine 9 | 10 | class DIContainer { 11 | static let shared = DIContainer() 12 | 13 | private var container: [String: Any] = [:] 14 | 15 | private init() {} 16 | 17 | func register(type: T.Type, key: String = "", implementation factory: @escaping () -> T) { 18 | let key = makeKey(for: type, key: key) 19 | container[key] = factory 20 | } 21 | 22 | func resolve(type: T.Type, key: String = "") -> T? { 23 | let key = makeKey(for: type, key: key) 24 | if let factory = container[key] as? () -> T { 25 | return factory() 26 | } 27 | return nil 28 | } 29 | 30 | private func makeKey(for type: T.Type, key: String) -> String { 31 | return "\(String(describing: type)):\(key)" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DIContainer/Inject.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Inject.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/8/25. 6 | // 7 | 8 | import Foundation 9 | 10 | @propertyWrapper 11 | public struct Inject { 12 | public let wrappedValue: T 13 | 14 | public init(key: String = "") { 15 | if let resolvedValue = DIContainer.shared.resolve(type: T.self, key: key) { 16 | self.wrappedValue = resolvedValue 17 | } else { 18 | fatalError("Failed to resolve dependency for type \(T.self) with key '\(key)'. Ensure that the dependency is registered in the DIContainer.") 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Component/WithSuhyeonCategoryChip.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuhyeonCategoryChip.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/15/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct WithSuhyeonCategoryChip: View { 11 | let title: String 12 | 13 | var body: some View { 14 | Text(title) 15 | .foregroundColor( 16 | Color.primary400 17 | ) 18 | .font(.caption01B) 19 | .padding(.horizontal, 10) 20 | .frame(height: 26) 21 | .background( 22 | Color.primary50 23 | ) 24 | .cornerRadius(8) 25 | } 26 | } 27 | 28 | #Preview { 29 | WithSuhyeonCategoryChip(title: "바다") 30 | } 31 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Component/WithSuhyeonEmptyView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuhyeonEmptyView.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 4/16/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct WithSuhyeonEmptyView: View { 11 | let emptyMessage: String 12 | 13 | var body: some View { 14 | ZStack(alignment: .center) { 15 | VStack(spacing: 0) { 16 | Image(image: .imgEmptyState) 17 | Text(emptyMessage) 18 | .font(.body03R) 19 | .foregroundColor(.gray400) 20 | .padding(.top, 8) 21 | } 22 | .frame(maxWidth: .infinity, maxHeight: .infinity) 23 | } 24 | } 25 | } 26 | 27 | #Preview { 28 | WithSuhyeonEmptyView(emptyMessage: "메세지가 없습니다.") 29 | } 30 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Component/WithSuhyeonPostContainer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuhyeonPostContainer.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/15/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | import Kingfisher 11 | 12 | struct WithSuhyeonPostContainer: View { 13 | let imageUrl: String 14 | let nickname: String 15 | let date: String 16 | 17 | var body: some View { 18 | HStack { 19 | Image(imageUrl) 20 | .resizable() 21 | .clipShape(Circle()) 22 | .frame(width: 38, height: 38) 23 | .padding(.leading, 16) 24 | .padding(.vertical, 12) 25 | 26 | VStack(alignment: .leading, spacing: 4) { 27 | Text(nickname) 28 | .font(.body03SB) 29 | .foregroundColor(.gray700) 30 | Text(date) 31 | .font(.caption01R) 32 | .foregroundColor(.gray500) 33 | } 34 | .frame(height: 40) 35 | .padding(.leading, 12) 36 | 37 | Spacer() 38 | } 39 | } 40 | } 41 | 42 | #Preview { 43 | WithSuhyeonPostContainer( 44 | imageUrl: "https://reqres.in/img/faces/7-image.jpg", 45 | nickname: "작심이", 46 | date: "1월 25일" 47 | ) 48 | } 49 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Component/WithSuhyeonUnderlineButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuhyeonUnderlineButton.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/14/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct WithSuhyeonUnderlineButton: View { 11 | let title: String 12 | let onTap: () -> Void 13 | 14 | 15 | var body: some View { 16 | Button(action: { 17 | onTap() 18 | }) { 19 | VStack(spacing: 4) { 20 | Text(title) 21 | .font(.body03B) 22 | .foregroundColor(Color.gray500) 23 | 24 | Rectangle() 25 | .fill(Color.gray500) 26 | .frame(height: 1) 27 | .padding(.top, -2) 28 | } 29 | } 30 | .buttonStyle(PlainButtonStyle()) 31 | } 32 | } 33 | 34 | struct WithSuhyeonUnderlineButtonTestView: View { 35 | var body: some View { 36 | HStack(spacing: 20) { 37 | WithSuhyeonUnderlineButton(title: "보기") {} 38 | 39 | WithSuhyeonUnderlineButton(title: "보기") {} 40 | } 41 | .padding() 42 | } 43 | } 44 | 45 | #Preview { 46 | WithSuhyeonUnderlineButtonTestView() 47 | } 48 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Foundation/Image+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Image+.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/11/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | extension Image { 11 | init(icon: WithSuhyeonIcon){ 12 | self.init(icon.rawValue) 13 | } 14 | 15 | init(image: WithSuhyeonImage){ 16 | self.init(image.rawValue) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Foundation/WithSuhyeonButtonState.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuhyeonButtonState.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/11/25. 6 | // 7 | 8 | import Foundation 9 | 10 | enum WithSuhyeonButtonState { 11 | case disabled 12 | case enabled 13 | case alert 14 | } 15 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Foundation/WithSuhyeonCheckboxState.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuhyeonCheckboxState.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/12/25. 6 | // 7 | 8 | import Foundation 9 | 10 | enum WithSuhyeonCheckboxState { 11 | case checked 12 | case unchecked 13 | case disabled 14 | } 15 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Foundation/WithSuhyeonDropdownState.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuhyeonDropdownState.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/15/25. 6 | // 7 | 8 | import Foundation 9 | 10 | enum WithSuhyeonDropdownState { 11 | case isError 12 | case isSelected 13 | case defaultState 14 | } 15 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Foundation/WithSuhyeonTextFieldState.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuhyeonTextFieldState.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/11/25. 6 | // 7 | 8 | import Foundation 9 | 10 | enum WithSuhyeonTextFieldState { 11 | case editing 12 | case error 13 | case disabled 14 | } 15 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Foundation/WithSuyeonChipState.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuyeonChipState.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 정지원 on 1/14/25. 6 | // 7 | import Foundation 8 | 9 | enum WithSuhyeonChipState { 10 | case selected 11 | case unselected 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Modifier/WithSuhyeonBackSwipeModifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuhyeonBackSwipeModifier.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 4/16/25. 6 | // 7 | 8 | import Foundation 9 | 10 | import SwiftUI 11 | 12 | struct WithSuhyeonBackSwipeModifier: ViewModifier { 13 | @EnvironmentObject var router: RouterRegistry 14 | 15 | func body(content: Content) -> some View { 16 | content 17 | .gesture( 18 | DragGesture(minimumDistance: 20, coordinateSpace: .local) 19 | .onEnded { value in 20 | if value.startLocation.x < 50 && value.translation.width > 100 { 21 | router.popBack() 22 | } 23 | } 24 | ) 25 | } 26 | } 27 | 28 | extension View { 29 | func enableBackSwipe() -> some View { 30 | self.modifier(WithSuhyeonBackSwipeModifier()) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Modifier/WithSuhyeonCornerRadius.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuhyeonCornerRadius.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/16/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct WithSuhyeonCornerRadiusModifier: ViewModifier { 11 | let radius: CGFloat 12 | let corners: UIRectCorner 13 | 14 | func body(content: Content) -> some View { 15 | content 16 | .clipShape(RoundedCorners(radius: radius, corners: corners)) 17 | } 18 | } 19 | 20 | extension View { 21 | func withSuhyeonCornerRadius(_ radius: CGFloat, corners: UIRectCorner) -> some View { 22 | self.modifier(WithSuhyeonCornerRadiusModifier(radius: radius, corners: corners)) 23 | } 24 | } 25 | 26 | struct RoundedCorners: Shape { 27 | var radius: CGFloat 28 | var corners: UIRectCorner 29 | 30 | func path(in rect: CGRect) -> Path { 31 | let path = UIBezierPath( 32 | roundedRect: rect, 33 | byRoundingCorners: corners, 34 | cornerRadii: CGSize(width: radius, height: radius) 35 | ) 36 | return Path(path.cgPath) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_app.png", 5 | "idiom" : "universal", 6 | "platform" : "ios", 7 | "size" : "1024x1024" 8 | } 9 | ], 10 | "info" : { 11 | "author" : "xcode", 12 | "version" : 1 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/AppIcon.appiconset/ic_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/AppIcon.appiconset/ic_app.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_apple.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Frame 2085668307.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_archive_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_archive, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_archive_24.imageset/Property 1=ic_archive, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_arrow_down_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_arrow_down, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_arrow_down_24.imageset/Property 1=ic_arrow_down, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_arrow_left_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_arrow_left, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_arrow_left_24.imageset/Property 1=ic_arrow_left, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_arrow_right_16.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=ic_arrow_right, Size=16.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_arrow_right_16.imageset/name=ic_arrow_right, Size=16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_arrow_right_20.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icn_bar.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_arrow_right_20.imageset/icn_bar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_arrow_right_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_arrow_right, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_arrow_right_24.imageset/Property 1=ic_arrow_right, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_arrow_up_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_arrow_up, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_arrow_up_24.imageset/Property 1=ic_arrow_up, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_block_18.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=ic_block, Size=18.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_bookmark_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_bookmark, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_bookmark_24.imageset/Property 1=ic_bookmark, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_cal_arrow_left.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_arrow_left_16.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_cal_arrow_left.imageset/ic_arrow_left_16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_cal_arrow_left_gray.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_arrow_left_gray_16.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_cal_arrow_left_gray.imageset/ic_arrow_left_gray_16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_cal_arrow_right.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_cal_arrow_right.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_cal_arrow_right.imageset/ic_cal_arrow_right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_calander_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_calander, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_calander_24.imageset/Property 1=ic_calander, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_calender_filled_16.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=icn_calender_filled, Size=16.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_calender_filled_16.imageset/name=icn_calender_filled, Size=16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_camera_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_camera, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_chat_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=chat, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_chat_filled_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_chat_filled_24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_check_16.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_check, Size=16.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_check_16.imageset/Property 1=ic_check, Size=16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_check_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_check, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_check_24.imageset/Property 1=ic_check, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_clock_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_clock, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_clock_24.imageset/Property 1=ic_clock, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_download_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_download, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_download_24.imageset/Property 1=ic_download, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_expand_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_expand, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_expand_24.imageset/Property 1=ic_expand, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_find_16.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=ic_find, Size=16.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_find_16.imageset/name=ic_find, Size=16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_find_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=find, Size=24 (1).svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_find_filled_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_find_filled_24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_gallery_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=sharedalbum, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_gallery_24.imageset/name=sharedalbum, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_gallery_filled_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_gallery_filled_24.svg", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_gallery_filled_24.imageset/ic_gallery_filled_24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_home_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=home, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_home_24.imageset/name=home, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_home_filled_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_home_filled_24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_home_filled_24.imageset/ic_home_filled_24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_info_18.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=ic_info, Size=18.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_info_18.imageset/name=ic_info, Size=18.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_kakao.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_kakao.imageset/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_location_18.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_location_18.imageset/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_location_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_location, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_location_24.imageset/Property 1=ic_location, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_location_home_16.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=ic_location_home, Size=16.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_location_home_16.imageset/name=ic_location_home, Size=16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_menu_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_menu, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_menu_24.imageset/Property 1=ic_menu, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_message_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_message, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_message_24.imageset/Property 1=ic_message, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_mypage_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=mypage, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_mypage_24.imageset/name=mypage, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_mypage_filled_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_mypage_filled_24.svg", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_mypage_filled_24.imageset/ic_mypage_filled_24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_mypage_qna_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mypage_ic_qna.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_mypage_qna_24.imageset/mypage_ic_qna.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_phone_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_phone, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_plus_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_plus, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_plus_24.imageset/Property 1=ic_plus, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_refresh_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_refresh, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_refresh_24.imageset/Property 1=ic_refresh, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_search_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_search, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_search_24.imageset/Property 1=ic_search, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_send_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=ic_send, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_send_24.imageset/name=ic_send, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_send_message_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_send_message_24.imageset/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_setting_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_setting, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_trash_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_trash, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_trash_24.imageset/Property 1=ic_trash, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_upload_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_upload, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_upload_24.imageset/Property 1=ic_upload, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_user_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_user, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_user_24.imageset/Property 1=ic_user, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_user_filled_16.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=ic_user_filled, Size=16.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_user_filled_16.imageset/name=ic_user_filled, Size=16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_video_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_video, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_video_24.imageset/Property 1=ic_video, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_warning_black_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_warning_black_24, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_warning_black_24.imageset/Property 1=ic_warning_black_24, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_white_plus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ic_white_plus.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_white_plus.imageset/ic_white_plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_write_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_write, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_write_24.imageset/Property 1=ic_write, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_xclose_16.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "name=ic_xclose, Size=16.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_xclose_16.imageset/name=ic_xclose, Size=16.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_xclose_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Property 1=ic_xclose, Size=24.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/ic_xclose_24.imageset/Property 1=ic_xclose, Size=24.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/icn_purple_check.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icn_purple_check.svg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Icons/icn_purple_check.imageset/icn_purple_check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_block.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_block.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "img_block@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "img_block@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_block.imageset/img_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_block.imageset/img_block.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_block.imageset/img_block@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_block.imageset/img_block@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_block.imageset/img_block@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_block.imageset/img_block@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_blue_suma.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "_Avatar contrast inner border@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "_Avatar contrast inner border@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma.imageset/_Avatar contrast inner border@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma.imageset/_Avatar contrast inner border@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma.imageset/_Avatar contrast inner border@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma.imageset/_Avatar contrast inner border@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma.imageset/img_blue_suma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma.imageset/img_blue_suma.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_before.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_blue_suma.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "btn_profile@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "btn_profile@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_before.imageset/btn_profile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_before.imageset/btn_profile@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_before.imageset/btn_profile@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_before.imageset/btn_profile@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_before.imageset/img_blue_suma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_before.imageset/img_blue_suma.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_border.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "btn_blue_border.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "btn_profile@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "btn_profile@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_border.imageset/btn_blue_border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_border.imageset/btn_blue_border.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_border.imageset/btn_profile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_border.imageset/btn_profile@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_border.imageset/btn_profile@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_blue_suma_border.imageset/btn_profile@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_default.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_boy_default.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Property 1=img_boy_default@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Property 1=img_boy_default3.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_default.imageset/Property 1=img_boy_default3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_default.imageset/Property 1=img_boy_default3.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_default.imageset/Property 1=img_boy_default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_default.imageset/Property 1=img_boy_default@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_default.imageset/img_boy_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_default.imageset/img_boy_default.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_boy_selected-1.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Property 1=img_boy_selected.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Property 1=img_boy_selected3.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_selected.imageset/Property 1=img_boy_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_selected.imageset/Property 1=img_boy_selected.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_selected.imageset/Property 1=img_boy_selected3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_selected.imageset/Property 1=img_boy_selected3.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_selected.imageset/img_boy_selected-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_boy_selected.imageset/img_boy_selected-1.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_do_not_disturb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_do_not_disturb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "img_do_not_disturb@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "img_do_not_disturb@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_do_not_disturb.imageset/img_do_not_disturb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_do_not_disturb.imageset/img_do_not_disturb.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_do_not_disturb.imageset/img_do_not_disturb@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_do_not_disturb.imageset/img_do_not_disturb@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_do_not_disturb.imageset/img_do_not_disturb@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_do_not_disturb.imageset/img_do_not_disturb@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_empty.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "img_empty@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "img_empty@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_empty.imageset/img_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_empty.imageset/img_empty.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_empty.imageset/img_empty@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_empty.imageset/img_empty@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_empty.imageset/img_empty@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_empty.imageset/img_empty@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_emptystate.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_emptystate.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "img_emptystate@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "img_emptystate@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_emptystate.imageset/img_emptystate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_emptystate.imageset/img_emptystate.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_emptystate.imageset/img_emptystate@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_emptystate.imageset/img_emptystate@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_emptystate.imageset/img_emptystate@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_emptystate.imageset/img_emptystate@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_fuckoff.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_fuckoff.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "img_fuckoff@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "img_fuckoff@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_fuckoff.imageset/img_fuckoff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_fuckoff.imageset/img_fuckoff.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_fuckoff.imageset/img_fuckoff@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_fuckoff.imageset/img_fuckoff@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_fuckoff.imageset/img_fuckoff@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_fuckoff.imageset/img_fuckoff@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_default.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_girl_default.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Property 1=img_girl_default@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Property 1=img_girl_default3.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_default.imageset/Property 1=img_girl_default3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_default.imageset/Property 1=img_girl_default3.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_default.imageset/Property 1=img_girl_default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_default.imageset/Property 1=img_girl_default@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_default.imageset/img_girl_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_default.imageset/img_girl_default.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_girl_selected.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Property 1=img_girl_selected@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Property 1=img_girl_selected3.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_selected.imageset/Property 1=img_girl_selected3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_selected.imageset/Property 1=img_girl_selected3.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_selected.imageset/Property 1=img_girl_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_selected.imageset/Property 1=img_girl_selected@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_selected.imageset/img_girl_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_girl_selected.imageset/img_girl_selected.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_green_suma.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "_Avatar contrast inner border@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "_Avatar contrast inner border@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma.imageset/_Avatar contrast inner border@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma.imageset/_Avatar contrast inner border@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma.imageset/_Avatar contrast inner border@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma.imageset/_Avatar contrast inner border@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma.imageset/img_green_suma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma.imageset/img_green_suma.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_before.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_green_suma.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "btn_profile@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "btn_profile@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_before.imageset/btn_profile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_before.imageset/btn_profile@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_before.imageset/btn_profile@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_before.imageset/btn_profile@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_before.imageset/img_green_suma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_before.imageset/img_green_suma.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_border.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_green_border.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "btn_profile@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "btn_profile@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_border.imageset/btn_profile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_border.imageset/btn_profile@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_border.imageset/btn_profile@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_border.imageset/btn_profile@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_border.imageset/img_green_border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_green_suma_border.imageset/img_green_border.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Group.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Group@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Group@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_logo.imageset/Group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_logo.imageset/Group.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_logo.imageset/Group@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_logo.imageset/Group@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_logo.imageset/Group@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_logo.imageset/Group@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_megaphone.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_megaphone.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "img_megaphone@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "img_megaphone@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_megaphone.imageset/img_megaphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_megaphone.imageset/img_megaphone.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_megaphone.imageset/img_megaphone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_megaphone.imageset/img_megaphone@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_megaphone.imageset/img_megaphone@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_megaphone.imageset/img_megaphone@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_profile_default.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_profile_default.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "_Avatar contrast inner border@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "_Avatar contrast inner border@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_profile_default.imageset/_Avatar contrast inner border@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_profile_default.imageset/_Avatar contrast inner border@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_profile_default.imageset/_Avatar contrast inner border@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_profile_default.imageset/_Avatar contrast inner border@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_profile_default.imageset/img_profile_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_profile_default.imageset/img_profile_default.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_purple_sumapng.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "_Avatar contrast inner border@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "_Avatar contrast inner border@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma.imageset/_Avatar contrast inner border@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma.imageset/_Avatar contrast inner border@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma.imageset/_Avatar contrast inner border@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma.imageset/_Avatar contrast inner border@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma.imageset/img_purple_sumapng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma.imageset/img_purple_sumapng.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_before.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_purple_suma.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "btn_profile@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "btn_profile@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_before.imageset/btn_profile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_before.imageset/btn_profile@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_before.imageset/btn_profile@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_before.imageset/btn_profile@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_before.imageset/img_purple_suma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_before.imageset/img_purple_suma.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_border.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_purple_border.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "btn_profile@3x-1.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "btn_profile@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_border.imageset/btn_profile@3x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_border.imageset/btn_profile@3x-1.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_border.imageset/btn_profile@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_border.imageset/btn_profile@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_border.imageset/img_purple_border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_purple_suma_border.imageset/img_purple_border.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_red_suma.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "img_red_suma@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "img_red_suma@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma.imageset/img_red_suma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma.imageset/img_red_suma.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma.imageset/img_red_suma@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma.imageset/img_red_suma@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma.imageset/img_red_suma@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma.imageset/img_red_suma@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_before.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "btn_profile.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "btn_profile@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "btn_profile@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_before.imageset/btn_profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_before.imageset/btn_profile.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_before.imageset/btn_profile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_before.imageset/btn_profile@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_before.imageset/btn_profile@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_before.imageset/btn_profile@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_border.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "state=selected, color=red.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "state=selected, color=red@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "state=selected, color=red@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_border.imageset/state=selected, color=red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_border.imageset/state=selected, color=red.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_border.imageset/state=selected, color=red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_border.imageset/state=selected, color=red@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_border.imageset/state=selected, color=red@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_red_suma_border.imageset/state=selected, color=red@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_seek_and_hide.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_seek_and_hide.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "img_seek_and_hide@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "img_seek_and_hide@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_seek_and_hide.imageset/img_seek_and_hide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_seek_and_hide.imageset/img_seek_and_hide.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_seek_and_hide.imageset/img_seek_and_hide@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_seek_and_hide.imageset/img_seek_and_hide@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_seek_and_hide.imageset/img_seek_and_hide@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_seek_and_hide.imageset/img_seek_and_hide@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_study_cafe.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_study_cafe.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "img_study_cafe@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "img_study_cafe@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_study_cafe.imageset/img_study_cafe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_study_cafe.imageset/img_study_cafe.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_study_cafe.imageset/img_study_cafe@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_study_cafe.imageset/img_study_cafe@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_study_cafe.imageset/img_study_cafe@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_study_cafe.imageset/img_study_cafe@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_wip.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_wip.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "img_wip@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "img_wip@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_wip.imageset/img_wip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_wip.imageset/img_wip.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_wip.imageset/img_wip@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_wip.imageset/img_wip@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_wip.imageset/img_wip@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_wip.imageset/img_wip@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_withdraw.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "img_withdraw.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "img_withdraw@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "img_withdraw@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_withdraw.imageset/img_withdraw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_withdraw.imageset/img_withdraw.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_withdraw.imageset/img_withdraw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_withdraw.imageset/img_withdraw@2x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_withdraw.imageset/img_withdraw@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/Assets.xcassets/Images/img_withdraw.imageset/img_withdraw@3x.png -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/SUIT-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/SUIT-Bold.otf -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/SUIT-ExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/SUIT-ExtraBold.otf -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/SUIT-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/SUIT-Regular.otf -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/SUIT-SemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-with-suhyeon/With-Suhyeon-iOS/1fd725ce1178f69ca5266ebd4e4c683b61751ffc/WithSuhyeon-iOS/WithSuhyeon-iOS/Core/DesignSystem/Resource/SUIT-SemiBold.otf -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/Network/AuthInterceptor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AuthInterceptor.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | import Alamofire 11 | 12 | final class AuthInterceptor: RequestInterceptor { 13 | private let keychainKey = "accessToken" 14 | 15 | func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { 16 | var adaptedRequest = urlRequest 17 | 18 | if let token = try? KeyChainManager.load(key: keychainKey) { 19 | adaptedRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") 20 | } 21 | 22 | completion(.success(adaptedRequest)) 23 | } 24 | 25 | func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { 26 | completion(.doNotRetry) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/Network/BaseResponse.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseResponse.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | struct ResponseData: Decodable { 9 | let errorCode: String? 10 | let message: String 11 | let result: T 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/Network/Encodable+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Encodable+.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/8/25. 6 | // 7 | 8 | import Foundation 9 | 10 | extension Encodable { 11 | func toDictionary() -> [String: Any] { 12 | guard let data = try? JSONEncoder().encode(self), 13 | let jsonData = try? JSONSerialization.jsonObject(with: data), 14 | let dictionaryData = jsonData as? [String: Any] else { return [:] } 15 | return dictionaryData 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/Network/NetworkManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NetworkManager.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/8/25. 6 | // 7 | 8 | import Foundation 9 | 10 | import Alamofire 11 | 12 | final class NetworkManager { 13 | static let shared = NetworkManager() 14 | 15 | let loggers = [NetworkLogger()] as [EventMonitor] 16 | var session: Session 17 | var noneAuthSession: Session 18 | 19 | private init() { 20 | let configuration = URLSessionConfiguration.default 21 | 22 | let noAuthInterceptor = NoAuthInterceptor() 23 | self.noneAuthSession = Session( 24 | configuration: configuration, 25 | interceptor: noAuthInterceptor, 26 | eventMonitors: loggers 27 | ) 28 | 29 | let authInterceptor = AuthInterceptor() 30 | self.session = Session( 31 | configuration: configuration, 32 | interceptor: authInterceptor, 33 | eventMonitors: loggers 34 | ) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/Network/NetworkRequestable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NetworkRequestable.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/8/25. 6 | // 7 | 8 | import Foundation 9 | import Combine 10 | 11 | protocol NetworkRequestable { 12 | func request(_ model: T.Type, target: TargetType) -> AnyPublisher 13 | func request(target: TargetType) -> AnyPublisher 14 | func requestNoneAuth(_ model: T.Type, target: TargetType) -> AnyPublisher 15 | func requestNoneAuth(target: TargetType) -> AnyPublisher 16 | } 17 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/Network/NoAuthInterceptor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NoAuthInterceptor.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | import Alamofire 11 | 12 | final class NoAuthInterceptor: RequestInterceptor { 13 | func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { 14 | completion(.success(urlRequest)) 15 | } 16 | 17 | func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { 18 | completion(.doNotRetry) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/Network/RequestParameters.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RequestParameters.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/8/25. 6 | // 7 | 8 | import Foundation 9 | 10 | public enum RequestParameters { 11 | case none 12 | case query(_ parameters: Encodable?) 13 | case body(_ parameters: Encodable?) 14 | case bodyAndQuery(body: Encodable?, query: Encodable?) 15 | } 16 | 17 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/OAuth/OAuthInteractor/OAuthInteractor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // OAuthInteractor.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 5/28/25. 6 | // 7 | 8 | protocol OAuthInteractor { 9 | func loginWithKakaoTalk(onSuccess: @escaping (String) -> Void) 10 | func loginWithKakaoAccount(onSuccess: @escaping (String) -> Void) 11 | func checkKakaoTalkAvailable() -> Bool 12 | func getKakaoId(onSuccess: @escaping (Int64?) -> Void) 13 | func loginWithApple(onSuccess: @escaping (_ userId: String, _ identityToken: String?) -> Void) 14 | } 15 | 16 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/Socket/WebSocketTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WebSocketTarget.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct WebSocketTarget: WebSocketTargetType { 11 | var baseURL: String = Configuration.socketURL 12 | 13 | var path: String { 14 | return "/chat?userId=\(userId)" 15 | } 16 | 17 | var userId: Int 18 | } 19 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/Socket/WebSocketTargetType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WebSocketTargetType.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/18/25. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol WebSocketTargetType { 11 | var baseURL: String { get } 12 | var path: String { get } 13 | } 14 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/UI/Extension/UIApplication+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIApplication+.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/13/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | extension UIApplication { 11 | var statusBarHeight: CGFloat { 12 | return connectedScenes 13 | .compactMap { $0 as? UIWindowScene } 14 | .first?.statusBarManager?.statusBarFrame.height ?? 0 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/UI/Extension/View+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // View+.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/16/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | extension View { 11 | func hideKeyboard() { 12 | UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) 13 | } 14 | 15 | func cornerRadius(_ radius: CGFloat, corners: UIRectCorner) -> some View { 16 | clipShape(RoundedCorner(radius: radius, corners: corners)) 17 | } 18 | } 19 | 20 | struct RoundedCorner: Shape { 21 | var radius: CGFloat = .infinity 22 | var corners: UIRectCorner = .allCorners 23 | 24 | func path(in rect: CGRect) -> Path { 25 | let path = UIBezierPath( 26 | roundedRect: rect, 27 | byRoundingCorners: corners, 28 | cornerRadii: CGSize(width: radius, height: radius) 29 | ) 30 | return Path(path.cgPath) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Core/UI/Feature.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Feature.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/13/25. 6 | // 7 | 8 | import Combine 9 | 10 | protocol Feature: ObservableObject { 11 | associatedtype State 12 | associatedtype Intent 13 | associatedtype SideEffect 14 | 15 | var state: State { get } 16 | var sideEffectSubject: PassthroughSubject { get } 17 | 18 | func send(_ intent: Intent) 19 | func handleIntent(_ intent: Intent) 20 | } 21 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Auth/Model/Remote/KakaoLoginResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // KakaoLoginResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 5/28/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct KakaoLoginResponseDTO: Decodable { 11 | let isUser: Bool 12 | let userId: Int 13 | let accessToken: String? 14 | let refreshToken: String? 15 | } 16 | 17 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Auth/Model/Remote/LoginRequestDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LoginRequestDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct LoginRequestDTO: Codable { 11 | let phoneNumber: String 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Auth/Model/Remote/LoginResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LoginResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct LoginResponseDTO: Codable { 11 | let accessToken: String 12 | let refreshToken: String 13 | } 14 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Auth/Model/Remote/SignUpRequestDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SignUpRequestDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/21/25. 6 | // 7 | 8 | public struct SignUpRequestDTO: Codable { 9 | let phoneNumber: String 10 | let nickname: String 11 | let birthYear: Int 12 | let gender: Bool 13 | let profileImage: String 14 | let region: String 15 | let userId: Int 16 | } 17 | 18 | extension Member { 19 | var DTO: SignUpRequestDTO { 20 | return SignUpRequestDTO( 21 | phoneNumber: phoneNumber, 22 | nickname: nickname, 23 | birthYear: birthYear, 24 | gender: gender, 25 | profileImage: profileImage, 26 | region: region, 27 | userId: userId 28 | ) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Auth/Model/Remote/UserIDResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserIDResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct UserIDResponseDTO: Codable { 11 | let userId: Int 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Auth/Repository/DefaultOAuthRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DefaultOAuthRepository.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 5/28/25. 6 | // 7 | 8 | class DefaultOAuthRepository: OAuthRepository { 9 | @Inject var oauthInteractor: OAuthInteractor 10 | 11 | func login(onSuccess: @escaping (String) -> Void){ 12 | if(oauthInteractor.checkKakaoTalkAvailable()){ 13 | oauthInteractor.loginWithKakaoTalk(onSuccess: onSuccess) 14 | } else { 15 | oauthInteractor.loginWithKakaoAccount(onSuccess: onSuccess) 16 | } 17 | } 18 | 19 | func getKakaoId(onSuccess: @escaping (Int64?) -> Void) { 20 | oauthInteractor.getKakaoId(onSuccess: onSuccess) 21 | } 22 | 23 | func loginApple(onSuccess: @escaping (String) -> Void) { 24 | oauthInteractor.loginWithApple { userId, identityToken in 25 | onSuccess(userId) 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/BlockingAccount/Model/Remote/BlockingAccountRequestDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BlockingAccountRequestDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | import Combine 11 | 12 | public struct BlockingAccountRequestDTO: Codable { 13 | let phoneNumber: String 14 | } 15 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/BlockingAccount/Model/Remote/BlockingAccountResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BlockingAccountResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | import Combine 11 | 12 | public struct BlockingAccountResponseDTO: Codable { 13 | let nickname: String 14 | let phoneNumbers: [String] 15 | } 16 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/BlockingAccount/Source/Remote/BlockingAccountAPI.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BlockingAccountAPI.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | import Combine 11 | 12 | struct BlockingAccountAPI: BlockingAccountAPIProtocol { 13 | private let client = NetworkClient.shared 14 | 15 | func fetchBlokcingAccounts() -> AnyPublisher { 16 | let target: BlockingAccountTarget = .fetchBlockingAccounts 17 | 18 | return client.request(BlockingAccountResponseDTO.self, target: target) 19 | } 20 | 21 | func registerBlockingAccount(requestDTO: BlockingAccountRequestDTO) -> AnyPublisher { 22 | let target: BlockingAccountTarget = .registerBlockingAccount(requestDTO: requestDTO) 23 | 24 | return client.request(target: target) 25 | } 26 | 27 | func deleteBlockingAccount(requestDTO: BlockingAccountRequestDTO) -> AnyPublisher { 28 | let target: BlockingAccountTarget = .deleteBlockingAccount(requestDTO: requestDTO) 29 | 30 | return client.request(target: target) 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Chat/Model/Remote/ChatCreateResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatCreateResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/23/25. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct ChatCreateResponseDTO: Codable { 11 | let type: String 12 | let ownerChatRoomId: String 13 | let peerChatRoomId: String 14 | } 15 | 16 | extension ChatCreateResponseDTO { 17 | var entity: Create { 18 | Create( 19 | ownerChatRoomId: ownerChatRoomId, 20 | peerChatRoomId: peerChatRoomId 21 | ) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Chat/Model/Remote/ChatMessagesResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatMessagesResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct ChatMessagesResponseDTO: Codable { 11 | let chatMessages: [ChatMessageDTO] 12 | } 13 | 14 | public struct ChatMessageDTO: Codable { 15 | let type: String 16 | let content: String 17 | let timestamp: String 18 | let isRead: Bool 19 | } 20 | 21 | extension ChatMessageDTO { 22 | var entity: Message { 23 | Message( 24 | message: content, 25 | isMine: type == "SEND" ? true : false, 26 | date: timestamp.toFormattedDateOnly() ?? "", 27 | time: timestamp.toFormattedTime() ?? "" 28 | ) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Chat/Model/Remote/ChatRequestDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatRequestDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | struct ChatRequestDTO: Codable { 9 | let ownerChatRoomId: String 10 | let peerChatRoomId: String 11 | let senderId: Int 12 | let receiverId: Int 13 | let postId: Int 14 | let content: String 15 | let type: String 16 | } 17 | 18 | extension Send { 19 | var DTO: ChatRequestDTO { 20 | return ChatRequestDTO( 21 | ownerChatRoomId: ownerChatRoomId, 22 | peerChatRoomId: peerChatRoomId, 23 | senderId: senderID, 24 | receiverId: receiverID, 25 | postId: postID, 26 | content: content, 27 | type: type 28 | ) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Chat/Model/Remote/ChatResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct ChatResponseDTO: Codable { 11 | let content: String 12 | let timestamp: String 13 | } 14 | 15 | extension ChatResponseDTO { 16 | var entity: Message { 17 | Message( 18 | message: content, 19 | isMine: false, 20 | date: timestamp.toFormattedDateOnly() ?? "", 21 | time: timestamp.toFormattedTime() ?? "" 22 | ) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Chat/Source/Remote/ChatAPI.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatAPI.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | import Foundation 9 | import Combine 10 | 11 | struct ChatAPI: ChatApiProtocol { 12 | private let client = NetworkClient.shared 13 | 14 | func getChatRooms() -> AnyPublisher { 15 | let target: ChatTarget = .getChatRooms 16 | 17 | return client.request(ChatRoomsResponseDTO.self, target: target) 18 | } 19 | 20 | func getChatMessages(id: String) -> AnyPublisher { 21 | let target: ChatTarget = .getChatMessages(id: id) 22 | 23 | return client.request(ChatMessagesResponseDTO.self, target: target) 24 | } 25 | 26 | func patchJoinChatRoom(id: String) -> AnyPublisher { 27 | let target: ChatTarget = .patchJoinChatRoom(id: id) 28 | 29 | return client.request(target: target) 30 | } 31 | 32 | func patchExitChatRoom(id: String) -> AnyPublisher { 33 | let target: ChatTarget = .patchExitChatRoom(id: id) 34 | 35 | return client.request(target: target) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Chat/Source/Remote/ChatSocketTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatSocketTarget.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | import Foundation 9 | import Combine 10 | 11 | protocol ChatSocketProtocol { 12 | func connect(userId: Int) 13 | 14 | func receiveChat() -> AnyPublisher 15 | 16 | func receiveChatRooms() -> AnyPublisher 17 | 18 | func receiveChatCreate() -> AnyPublisher 19 | 20 | func sendChat(_ value: ChatRequestDTO) 21 | } 22 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Common/Model/Remote/CategoryResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CategoryResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct CategoryResponseDTO: Codable { 11 | let categories: [CategoryDTO] 12 | } 13 | 14 | struct CategoryDTO: Codable { 15 | let imageUrl: String 16 | let category: String 17 | } 18 | 19 | extension CategoryDTO { 20 | var entity: Category { 21 | Category( 22 | imageURL: imageUrl, 23 | category: category 24 | ) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Common/Model/Remote/RegionResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RegionResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct RegionResponseDTO: Codable { 11 | let regions: [RegionDTO] 12 | } 13 | 14 | struct RegionDTO: Codable { 15 | let location: String 16 | let subLocations: [String] 17 | } 18 | 19 | extension RegionDTO { 20 | var entity: Region { 21 | Region( 22 | location: location, 23 | subLocation: subLocations 24 | ) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Common/Source/Remote/CommonAPI.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CommonAPI.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | import Combine 10 | 11 | struct CommonAPI: CommonApiProtocol { 12 | private let client = NetworkClient.shared 13 | 14 | func getRegions() -> AnyPublisher { 15 | let target: CommonTarget = .getRegions 16 | 17 | return client.requestNoneAuth(RegionResponseDTO.self, target: target) 18 | } 19 | 20 | func getCategories() -> AnyPublisher { 21 | let target: CommonTarget = .getCategories 22 | 23 | return client.requestNoneAuth(CategoryResponseDTO.self, target: target) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Common/Source/Remote/CommonTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CommonTarget.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | import Combine 10 | 11 | import Alamofire 12 | 13 | enum CommonTarget { 14 | case getRegions 15 | case getCategories 16 | } 17 | 18 | protocol CommonApiProtocol { 19 | func getRegions() -> AnyPublisher 20 | func getCategories() -> AnyPublisher 21 | } 22 | 23 | extension CommonTarget : TargetType { 24 | var baseURL: String { 25 | return Configuration.baseURL 26 | } 27 | 28 | var method: Alamofire.HTTPMethod { 29 | switch self { 30 | case .getRegions: .get 31 | case .getCategories: .get 32 | } 33 | } 34 | 35 | var path: String { 36 | switch self { 37 | case .getCategories: "/api/v1/enums/categories" 38 | case .getRegions: "/api/v1/enums/regions" 39 | } 40 | } 41 | 42 | var parameters: RequestParameters { 43 | switch self { 44 | case .getCategories: .none 45 | case .getRegions: .none 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/FindSuhyeon/Model/Remote/FindSuhyeonMainRequestDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FindSuhyeonMainRequestDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct FindSuhyeonMainRequestDTO: Codable { 11 | let region: String 12 | let date: String 13 | } 14 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/FindSuhyeon/Model/Remote/FindSuhyeonMainResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FindSuhyeonMainResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct FindSuhyeonMainResponseDTO: Codable { 11 | let region: String 12 | let days: [String] 13 | let posts: [FindSuhyeonMainPostDTO] 14 | } 15 | 16 | struct FindSuhyeonMainPostDTO: Codable { 17 | let postId: Int 18 | let title: String 19 | let price: Int 20 | let gender: Bool 21 | let age: String 22 | let date: String 23 | let matching: Bool 24 | let isExpired: Bool 25 | } 26 | 27 | extension FindSuhyeonMainPostDTO { 28 | var entity: FindSuhyeonPost { 29 | FindSuhyeonPost( 30 | postId: postId, 31 | title: title, 32 | price: price, 33 | gender: gender == true ? .man : .woman, 34 | age: age, 35 | date: date, 36 | isExpired: isExpired 37 | ) 38 | } 39 | } 40 | 41 | extension FindSuhyeonMainResponseDTO { 42 | var entity: FindSuhyeonMain { 43 | FindSuhyeonMain( 44 | region: region, 45 | days: days, 46 | posts: posts.map { $0.entity } 47 | ) 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/FindSuhyeon/Model/Remote/FindSuhyeonPostRequestDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FindSuhyeonPostRequestDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct FindSuhyeonPostRequestDTO: Codable { 11 | let gender: Bool 12 | let age: String 13 | let requests: [String] 14 | let region: String 15 | let date: String 16 | let price: Int 17 | let title: String 18 | let content: String 19 | } 20 | 21 | extension FindSuhyeonPostRequest { 22 | var DTO: FindSuhyeonPostRequestDTO { 23 | FindSuhyeonPostRequestDTO( 24 | gender: gender == .man, 25 | age: age, 26 | requests: requests, 27 | region: region, 28 | date: date, 29 | price: price, 30 | title: title, 31 | content: content 32 | ) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Gallery/Model/Remote/CategoryRequestDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CategoryRequestDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | struct CategoryRequestDTO: Codable { 9 | let category: String 10 | let size: Int 11 | let cursorId: Int32? 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Gallery/Model/Remote/GalleriesResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GalleriesResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct GalleriesResponseDTO: Codable { 11 | let galleries: [GalleryDTO] 12 | } 13 | 14 | struct GalleryDTO: Codable { 15 | let galleryId: Int 16 | let imageUrl: String 17 | let title: String 18 | } 19 | 20 | extension GalleryDTO { 21 | var entity: GalleryPost { 22 | GalleryPost( 23 | id: galleryId, 24 | imageURL: imageUrl, 25 | title: title 26 | ) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Gallery/Model/Remote/GalleryDetailResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GalleryDetailResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct GalleryDetailResponseDTO: Codable { 11 | let imageUrl: String 12 | let category: String 13 | let title: String 14 | let profileImage: String 15 | let nickname: String 16 | let createdAt: String 17 | let content: String 18 | let owner: Bool 19 | } 20 | 21 | extension GalleryDetailResponseDTO { 22 | var entity: GalleryDetail { 23 | GalleryDetail( 24 | imageUrl: imageUrl, 25 | category: category, 26 | title: title, 27 | profileImage: profileImage, 28 | nickname: nickname, 29 | createdAt: createdAt, 30 | content: content, 31 | isMine: owner 32 | ) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Gallery/Model/Remote/GalleryInfoRequestDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GalleryInfoRequestDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct GalleryInfoRequestDTO: Codable { 11 | let category: String 12 | let title: String 13 | let content: String 14 | } 15 | 16 | extension GalleryUpload { 17 | var DTO: (Data, GalleryInfoRequestDTO) { 18 | return ( 19 | image, 20 | GalleryInfoRequestDTO( 21 | category: category, 22 | title: title, 23 | content: content 24 | ) 25 | ) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Home/Model/Remote/HomeResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct HomeResponseDTO: Codable { 11 | let count: Int 12 | let region: String 13 | let homePosts: [HomePostDTO] 14 | } 15 | 16 | struct HomePostDTO: Codable { 17 | let postId: Int 18 | let title: String 19 | let price: Int 20 | let age: String 21 | let gender: Bool 22 | let date: String 23 | let matching: Bool 24 | } 25 | 26 | extension HomeResponseDTO { 27 | var entity: Home { 28 | Home( 29 | count: count, 30 | region: region, 31 | posts: homePosts.map{ $0.entity } 32 | ) 33 | } 34 | } 35 | 36 | extension HomePostDTO { 37 | var entity: Post { 38 | Post( 39 | id: postId, 40 | title: title, 41 | price: price, 42 | age: age, 43 | gender: gender == true ? .man: .woman, 44 | date: date 45 | ) 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Home/Repository/DefaultHomeRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DefaultHomeRepository.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | import Combine 10 | 11 | class DefaultHomeRepository: HomeRepository { 12 | 13 | @Inject var homeAPI: HomeApiProtocol 14 | var subscriptions = Set() 15 | 16 | func getHome(completion: @escaping (Home) -> Void) { 17 | homeAPI.getHome() 18 | .map { 19 | $0.entity 20 | } 21 | .sink { completion in 22 | switch completion { 23 | case .finished: 24 | print("finish") 25 | case .failure(let error): 26 | print(error) 27 | } 28 | } receiveValue: { home in 29 | completion(home) 30 | }.store(in: &subscriptions) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Home/Source/Remote/HomeAPI.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeAPI.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | import Combine 10 | 11 | import Alamofire 12 | 13 | struct HomeAPI: HomeApiProtocol { 14 | 15 | private let client = NetworkClient.shared 16 | 17 | func getHome() -> AnyPublisher { 18 | let target = HomeTarget.getHome 19 | 20 | return client.request(HomeResponseDTO.self, target: target) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/Home/Source/Remote/HomeTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeTarget.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | import Combine 10 | 11 | import Alamofire 12 | 13 | enum HomeTarget { 14 | case getHome 15 | } 16 | 17 | protocol HomeApiProtocol { 18 | func getHome() -> AnyPublisher 19 | } 20 | 21 | extension HomeTarget: TargetType { 22 | var baseURL: String { 23 | return Configuration.baseURL 24 | } 25 | 26 | var method: Alamofire.HTTPMethod { 27 | switch self { 28 | case .getHome: .get 29 | } 30 | } 31 | 32 | var path: String { 33 | switch self { 34 | case .getHome: "/api/v1/home" 35 | } 36 | } 37 | 38 | var parameters: RequestParameters { 39 | switch self { 40 | case .getHome: .none 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/MyPage/Model/Remote/MyFindSuhyeonPostResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyFindSuhyeonPostResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 4/2/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct MyFindSuhyeonPostsResponseDTO: Codable { 11 | let userPosts: [MyfindSuhyeonPostDTO] 12 | } 13 | 14 | struct MyfindSuhyeonPostDTO: Codable { 15 | let postId: Int 16 | let title: String 17 | let region: String 18 | let date: String 19 | let createdDate: String 20 | let matching: Bool 21 | } 22 | 23 | extension MyfindSuhyeonPostDTO { 24 | var entity: MyFindSuhyeonPost { 25 | MyFindSuhyeonPost(id: postId, title: title, region: region, date: date, matching: matching, createdDate: createdDate) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/MyPage/Model/Remote/MyGalleryPostsResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyGalleryPostsResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 4/23/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct MyGalleryPostsResponseDTO: Codable { 11 | let userGalleries: [MyGalleryPostDTO] 12 | } 13 | 14 | struct MyGalleryPostDTO: Codable { 15 | let galleryId: Int 16 | let imageUrl: String 17 | let title: String 18 | } 19 | 20 | extension MyGalleryPostDTO { 21 | var entity: MyGalleryPost { 22 | MyGalleryPost( 23 | id: galleryId, 24 | imageURL: imageUrl, 25 | title: title 26 | ) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/MyPage/Model/Remote/MyInterestRegionRequestDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyInterestRegionRequestDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 4/8/25. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct MyInterestRegionRequestDTO: Codable { 11 | let region: String 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/MyPage/Model/Remote/MyInterestRegionResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyInterestRegionResponse.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 4/8/25. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct MyInterestRegionResponseDTO: Codable { 11 | let region: String 12 | } 13 | 14 | 15 | extension MyInterestRegionResponseDTO { 16 | var entity: MyInterestRegion { 17 | MyInterestRegion(region: region) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/MyPage/Model/Remote/MyPhoneNumberResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyPhoneNumberResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 6/3/25. 6 | // 7 | 8 | public struct MyPhoneNumberResponseDTO: Codable { 9 | let phoneNumber: String 10 | } 11 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Data/MyPage/Model/Remote/UserResponseDTO.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserResponseDTO.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct UserResponseDTO: Codable { 11 | let nickname: String 12 | let profileImage: String 13 | } 14 | 15 | extension UserResponseDTO { 16 | var entity: User { 17 | User( 18 | nickname: nickname, 19 | profileImageURL: profileImage 20 | ) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Auth/Entity/Member.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Member.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Member: Identifiable { 11 | let id: UUID = UUID() 12 | let phoneNumber: String 13 | let nickname: String 14 | let birthYear: Int 15 | let gender: Bool 16 | let profileImage: String 17 | let region: String 18 | let userId: Int 19 | } 20 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Auth/Repository/AuthRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AuthRepository.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | import Combine 11 | 12 | protocol AuthRepository { 13 | func signUp(member: Member, completion: @escaping (Result) -> Void) 14 | 15 | func login(phoneNumber: String, completion: @escaping (Result) -> Void) 16 | 17 | func registerUserId(completion: @escaping (Bool) -> Void) 18 | 19 | func loadAccessToken() -> String? 20 | func loadRefreshToken() -> String? 21 | func clearTokens() 22 | 23 | func sendAuthCode(flow: String, phoneNumber: String, completion: @escaping (Result) -> Void) 24 | func validateAuthCode(flow: String, authCode: String, phoneNumber: String, completion: @escaping (Result) -> Void) 25 | 26 | func logout(completion: @escaping (Result) -> Void) 27 | func withdraw(completion: @escaping (Result) -> Void) 28 | 29 | func checkUserExists(accessToken: String, completion: @escaping (Result) -> Void) 30 | 31 | func checkUserExistsApple(code: String, completion: @escaping (Result) -> Void) 32 | } 33 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Auth/Repository/OAuthRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // OAuthRepository.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 5/28/25. 6 | // 7 | 8 | protocol OAuthRepository { 9 | func login(onSuccess: @escaping (String) -> Void) 10 | func getKakaoId(onSuccess: @escaping (Int64?) -> Void) 11 | func loginApple(onSuccess: @escaping (String) -> Void) 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Auth/UseCase/SignUpUseCase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SignUpUseCase.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol SignUpUseCase { 11 | func execute(member: Member, completion: @escaping (Result) -> Void) 12 | } 13 | 14 | class SignUpUseCaseImpl: SignUpUseCase { 15 | @Inject private var authRepository: AuthRepository 16 | 17 | func execute(member: Member, completion: @escaping (Result) -> Void) { 18 | authRepository.signUp(member: member) { [weak self] result in 19 | switch result { 20 | case .success: 21 | print("회원가입 성공") 22 | self?.authRepository.login(phoneNumber: member.phoneNumber) { loginResult in 23 | completion(loginResult) 24 | } 25 | case .failure(let error): 26 | completion(.failure(error)) 27 | } 28 | } 29 | } 30 | } 31 | 32 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Auth/UseCase/ValidateNickNameUseCase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ValidateNickNameUseCase.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/18/25. 6 | // 7 | 8 | import Foundation 9 | 10 | class NickNameValidateUseCase { 11 | private static let nicknameRegex = try! Regex("^[가-힣ㄱ-ㅎㅏ-ㅣa-zA-Z0-9]+$") 12 | 13 | func execute(_ nickname: String) -> Bool { 14 | return try! (Self.nicknameRegex.firstMatch(in: nickname)) != nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/BlockingAccount/Entity/BlockingMember.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BlockingMember.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct BlockingMember: Identifiable { 11 | let id: UUID = UUID() 12 | let nickname: String 13 | let phoneNumbers: [String] 14 | } 15 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/BlockingAccount/Repository/BlockingRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BlockingRepository.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | import Combine 11 | 12 | protocol BlockingRepository { 13 | func fetchBlockingAccounts(completion: @escaping (String, [String]) -> Void) 14 | func registerBlockingAccount(phoneNumber: String, completion: @escaping(Result) -> Void) 15 | func deleteBlockingAccount(phoneNumber: String, completion: @escaping(Result) -> Void) 16 | } 17 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Chat/Entity/Chat.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Chat.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | struct Chat { 9 | var ownerChatRoomID: String 10 | var peerChatRoomID: String 11 | var ownerID: Int 12 | var peerID: Int 13 | var postID: Int 14 | var nickname: String 15 | var profileImage: String 16 | var lastMessage: String 17 | var unreadCount: Int 18 | var date: String 19 | var title: String 20 | var location: String 21 | var money: String 22 | } 23 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Chat/Entity/Create.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Create.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/23/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Create { 11 | let ownerChatRoomId: String 12 | let peerChatRoomId: String 13 | } 14 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Chat/Entity/Message.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Message.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Message: Identifiable { 11 | let id: UUID = UUID() 12 | let message: String 13 | let isMine: Bool 14 | let date: String 15 | let time: String 16 | } 17 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Chat/Entity/Send.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Send.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Send { 11 | let ownerChatRoomId: String 12 | let peerChatRoomId: String 13 | let senderID: Int 14 | let receiverID: Int 15 | let postID: Int 16 | let content: String 17 | let type: String 18 | } 19 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Chat/Repository/ChatRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatRepository.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | import Foundation 9 | import Combine 10 | 11 | protocol ChatRepository { 12 | func getChatRooms(completion: @escaping ([Chat]) -> Void) 13 | func getChatMessages(id: String, completion: @escaping ([Message]) -> Void) 14 | func patchJoinChatRooms(id: String, completion: @escaping (Bool) -> Void) 15 | func patchExitChatRooms(id: String, completion: @escaping (Bool) -> Void) 16 | func receiveChat() -> AnyPublisher 17 | func receiveChatRooms() -> AnyPublisher<[Chat], NetworkError> 18 | func receiveCreateInfo() -> AnyPublisher 19 | func sendChat(message: Send) 20 | } 21 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Common/Entity/Category.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Category.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | struct Category { 9 | let imageURL: String 10 | let category: String 11 | } 12 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Common/Entity/Gender.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Gender.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/19/25. 6 | // 7 | 8 | enum Gender { 9 | case man 10 | case woman 11 | } 12 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Common/Entity/Region.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Region.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | struct Region { 9 | let location: String 10 | let subLocation: [String] 11 | } 12 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Common/Repository/CommonRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CommonRepository.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol CommonRepository { 11 | func getCategories(completion: @escaping ([Category]) -> Void) 12 | func getRegions(completion: @escaping ([Region]) -> Void) 13 | } 14 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Common/UseCase/GetCategoriesUseCase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GetCategoriesUseCase.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol GetCategoriesUseCase { 11 | func execute(completion: @escaping ([Category]) -> Void) 12 | } 13 | 14 | class DefaultGetCategoriesUseCase: GetCategoriesUseCase { 15 | @Inject private var commonRepository: CommonRepository 16 | 17 | func execute(completion: @escaping ([Category]) -> Void) { 18 | commonRepository.getCategories(completion: completion) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Common/UseCase/GetRegionsUseCase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GetRegionsUseCase.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol GetRegionsUseCase { 11 | func execute(completion: @escaping ([Region]) -> Void) 12 | } 13 | 14 | class DefaultGetRegionsUseCase: GetRegionsUseCase { 15 | @Inject private var commonRepository: CommonRepository 16 | 17 | func execute(completion: @escaping ([Region]) -> Void) { 18 | commonRepository.getRegions(completion: completion) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/FindSuhyeon/Entity/FindSuhyeonMain.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FindSuhyeonMain.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct FindSuhyeonMain { 11 | let region: String 12 | let days: [String] 13 | let posts: [FindSuhyeonPost] 14 | } 15 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/FindSuhyeon/Entity/FindSuhyeonPost.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FindSuhyeonPost.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct FindSuhyeonPost { 11 | let postId: Int 12 | let title: String 13 | let price: Int 14 | let gender: Gender 15 | let age: String 16 | let date: String 17 | let isExpired: Bool 18 | } 19 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/FindSuhyeon/Entity/FindSuhyeonPostDetail.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FindSuhyeonPostDetail.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | struct FindSuhyeonPostDetail { 9 | let title: String 10 | let content: String 11 | let nickname: String 12 | let createdAt: String 13 | let profileImage: String 14 | let price: Int 15 | let isMine: Bool 16 | let matching: Bool 17 | let isExpired: Bool 18 | let detail: FindSuhyeonPostInfoDetail 19 | let chatRoom: ChatRoom 20 | } 21 | 22 | struct FindSuhyeonPostInfoDetail { 23 | let region: String 24 | let gender: Gender 25 | let age: String 26 | let date: String 27 | let requests: [String] 28 | } 29 | 30 | struct ChatRoom { 31 | let postId: Int 32 | let ownerId: Int 33 | let writerId: Int 34 | let ownerChatRoomId: String 35 | let peerChatRoomId: String 36 | } 37 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/FindSuhyeon/Entity/FindSuhyeonPostRequest.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FindSuhyeonPostRequest.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct FindSuhyeonPostRequest { 11 | let gender: Gender 12 | let age: String 13 | let requests: [String] 14 | let region: String 15 | let date: String 16 | let price: Int 17 | let title: String 18 | let content: String 19 | } 20 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/FindSuhyeon/Repository/FindSuhyeonRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FindSuhyeonRepository.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol FindSuhyeonRepository { 11 | func postFindSuhyeon(findSuhyeonPost: FindSuhyeonPostRequest, completion: @escaping (Bool) -> Void) 12 | func getFindSuhyeonMain(region: String, date: String, completion: @escaping (FindSuhyeonMain) -> Void) 13 | func getFindSuhyeonDetail(id: Int, completion: @escaping (FindSuhyeonPostDetail) -> Void) 14 | func deleteFindSuhyeon(id: Int, completion: @escaping (Bool) -> Void) 15 | } 16 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Gallery/Entity/GalleryDetail.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GalleryDetail.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct GalleryDetail: Codable { 11 | let imageUrl: String 12 | let category: String 13 | let title: String 14 | let profileImage: String 15 | let nickname: String 16 | let createdAt: String 17 | let content: String 18 | let isMine: Bool 19 | } 20 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Gallery/Entity/GalleryPost.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GalleryPost.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct GalleryPost { 11 | let id: Int 12 | let imageURL: String 13 | let title: String 14 | } 15 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Gallery/Entity/GalleryUpload.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GalleryUpload.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/21/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct GalleryUpload { 11 | let image: Data 12 | let category: String 13 | let title: String 14 | let content: String 15 | } 16 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Gallery/Repository/GalleryRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GalleryRepository.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol GalleryRepository { 11 | 12 | func upload(galleryInfo: GalleryUpload, completion: @escaping (Bool) -> Void) 13 | 14 | func getGalleries(category: String, size: Int, cursorId: Int32?, completion: @escaping ([GalleryPost]) -> Void) 15 | 16 | func getGallery(id: Int, completion: @escaping (GalleryDetail) -> Void) 17 | 18 | func deleteGallery(id: Int, completion: @escaping (Bool) -> Void) 19 | } 20 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Home/Entity/Home.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Home.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Home { 11 | let count: Int 12 | let region: String 13 | let posts: [Post] 14 | } 15 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Home/Entity/Post.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Post.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Post { 11 | let id: Int 12 | let title: String 13 | let price: Int 14 | let age: String 15 | let gender: Gender 16 | let date: String 17 | } 18 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/Home/Repository/HomeRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeRepository.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol HomeRepository { 11 | func getHome(completion: @escaping (Home) -> Void) 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/MyPage/Entity/MyFindSuhyeonPost.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyFindSuhyeonPost.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 4/2/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct MyFindSuhyeonPost { 11 | let id: Int 12 | let title: String 13 | let region: String 14 | let date: String 15 | let matching: Bool 16 | let createdDate: String 17 | } 18 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/MyPage/Entity/MyGalleryPost.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyGalleryPost.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 4/23/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct MyGalleryPost: Identifiable { 11 | let id: Int 12 | let imageURL: String 13 | let title: String 14 | } 15 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/MyPage/Entity/MyInterestRegion.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyInterestRegion.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 4/8/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct MyInterestRegion { 11 | let region: String 12 | } 13 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/MyPage/Entity/User.swift: -------------------------------------------------------------------------------- 1 | // 2 | // User.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | struct User { 11 | let nickname: String 12 | let profileImageURL: String 13 | } 14 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Domain/MyPage/Repository/MyPageRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyPageRepository.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/22/25. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol MyPageRepository { 11 | func getUser(completion: @escaping (User) -> Void) 12 | func getMyFindSuhyeonPosts(completion: @escaping ([MyFindSuhyeonPost]) -> Void) 13 | func getMyInterestRegion(completion: @escaping (MyInterestRegion) -> Void) 14 | func postMyInterestRegion(region: MyInterestRegionRequestDTO, completion: @escaping (Bool) -> Void) 15 | func getMyGalleryPosts(completion: @escaping ([MyGalleryPost]) -> Void) 16 | func getMyPhoneNumber(completion: @escaping (String) -> Void) 17 | func patchMyPhoneNumber(phoneNumber: String, completion: @escaping (Bool) -> Void) 18 | } 19 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BASE_URL 6 | $(BASE_URL) 7 | CFBundleIconName 8 | AppIcon 9 | CFBundleURLTypes 10 | 11 | 12 | CFBundleTypeRole 13 | Editor 14 | CFBundleURLSchemes 15 | 16 | kakao4d9c45ccbb3c0fc7f9fc005b8e8611e1 17 | 18 | 19 | 20 | LSApplicationQueriesSchemes 21 | 22 | kakaokompassauth 23 | kakaolink 24 | kakaoplus 25 | 26 | NSAppTransportSecurity 27 | 28 | NSAllowsArbitraryLoads 29 | 30 | 31 | SOCKET_URL 32 | $(SOCKET_URL) 33 | UIAppFonts 34 | 35 | SUIT-ExtraBold.otf 36 | SUIT-Bold.otf 37 | SUIT-SemiBold.otf 38 | SUIT-Regular.otf 39 | 40 | KAKAO_NATIVE_APP_KEY 41 | $(KAKAO_NATIVE_APP_KEY) 42 | 43 | 44 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Presentation/FindSuhyeon/Component/FindSuhyeonGenderSelectCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GenderSelectionCell.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 정지원 on 1/16/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct FindSuhyeonGenderSelectCell: View { 11 | let genderImages: [(defaultImage: WithSuhyeonImage, selectedImage: WithSuhyeonImage)] 12 | let selectedGender: String 13 | let onTapSmallChip: (String) -> Void 14 | 15 | var body: some View { 16 | HStack(spacing: 11) { 17 | ForEach(Array(genderImages.enumerated()), id: \.offset) { index, genderImage in 18 | let genderText = index == 0 ? "남자" : "여자" 19 | 20 | WithSuhyeonSmallChip( 21 | title: genderText, 22 | defaultImage: genderImage.defaultImage, 23 | selectedImage: genderImage.selectedImage, 24 | chipState: selectedGender == genderText ? .selected : .unselected, 25 | clickable: true 26 | ) { 27 | withAnimation(.easeInOut) { 28 | onTapSmallChip(genderText) 29 | } 30 | } 31 | } 32 | } 33 | .padding(.horizontal, 16) 34 | .padding(.bottom, 12) 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Presentation/Main/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/8/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ContentView: View { 11 | var body: some View { 12 | VStack { 13 | Image(systemName: "globe") 14 | .imageScale(.large) 15 | .foregroundStyle(.tint) 16 | Text("Hello, world!") 17 | } 18 | .padding() 19 | } 20 | } 21 | 22 | #Preview { 23 | ContentView() 24 | } 25 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Presentation/Main/MainTab.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MainTab.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/12/25. 6 | // 7 | 8 | import Foundation 9 | 10 | public enum MainTab: CaseIterable { 11 | case home 12 | case findSuhyeon 13 | case gallery 14 | case chat 15 | case myPage 16 | 17 | var title: String { 18 | switch self { 19 | case .home: return "홈" 20 | case .findSuhyeon: return "수현이 찾기" 21 | case .gallery: return "공유앨범" 22 | case .chat: return "채팅" 23 | case .myPage: return "MY" 24 | } 25 | } 26 | 27 | var icon: WithSuhyeonIcon { 28 | switch self { 29 | case .home: return .icHome24 30 | case .findSuhyeon: return .icFind24 31 | case .gallery: return .icGallery24 32 | case .chat: return .icChat24 33 | case .myPage: return .icMypage24 34 | } 35 | } 36 | 37 | var selectedIcon: WithSuhyeonIcon { 38 | switch self { 39 | case .home: return .icHomeFilled24 40 | case .findSuhyeon: return .icFindFilled24 41 | case .gallery: return .icGalleryFilled24 42 | case .chat: return .icChatFilled24 43 | case .myPage: return .icMyPageFilled24 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Presentation/Main/TabItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TabItem.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/12/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct TabItem: View { 11 | let title: String 12 | let icon: WithSuhyeonIcon 13 | let titleColor: Color 14 | 15 | init(title: String, icon: WithSuhyeonIcon, titleColor: Color) { 16 | self.title = title 17 | self.icon = icon 18 | self.titleColor = titleColor 19 | } 20 | 21 | var body: some View { 22 | VStack { 23 | Image(icon: icon) 24 | 25 | Text(title) 26 | .font(.caption01SB) 27 | .foregroundColor(titleColor) 28 | } 29 | } 30 | } 31 | 32 | #Preview { 33 | TabItem(title: "홈", icon: .icHome24, titleColor: Color.primary700) 34 | } 35 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Presentation/MyPage/Feedback/Feedback.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Feedback.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 4/8/25. 6 | // 7 | 8 | import SwiftUI 9 | import WebKit 10 | 11 | struct Feedback: View { 12 | @EnvironmentObject var router: RouterRegistry 13 | @StateObject var feature = FeedbackFeature() 14 | 15 | var body: some View { 16 | VStack(spacing: 0) { 17 | WithSuhyeonTopNavigationBar(title: "피드백 하기", onTapLeft: { router.popBack() }) 18 | 19 | ZStack { 20 | WithSuhyeonWebView( 21 | request: feature.state.request, 22 | onStartLoading: { feature.send(.startLoading) }, 23 | onFinishLoading: { feature.send(.finishLoading) } 24 | ) 25 | 26 | if feature.state.isLoading { 27 | ProgressView() 28 | .progressViewStyle(CircularProgressViewStyle(tint: .gray)) 29 | } 30 | } 31 | } 32 | } 33 | } 34 | 35 | #Preview { 36 | Feedback() 37 | } 38 | 39 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Presentation/MyPage/MyPost/MyPostContentCase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyPostContentCase.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 4/1/25. 6 | // 7 | 8 | import Foundation 9 | 10 | public enum MyPostContentCase: CaseIterable { 11 | case findSuhyeon 12 | case gallery 13 | 14 | var title: String { 15 | switch self { 16 | case .findSuhyeon: 17 | return "수현이 찾기" 18 | case .gallery: 19 | return "갤러리" 20 | } 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Presentation/MyPage/TermsAndPolicies/TermsAndPoliciesWebView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TermsAndPoliciesWebView.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 4/23/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct TermsAndPoliciesWebView: View { 11 | @EnvironmentObject var router: RouterRegistry 12 | @StateObject var feature = TermsAndPoliciesFeature() 13 | 14 | let request: URLRequest 15 | let title: String 16 | 17 | var body: some View { 18 | VStack(spacing: 0) { 19 | WithSuhyeonTopNavigationBar(title: title, onTapLeft: { router.popBack() }) 20 | 21 | ZStack { 22 | WithSuhyeonWebView( 23 | request: request, 24 | onStartLoading: { feature.send(.startLoading) }, 25 | onFinishLoading: { feature.send(.finishLoading) } 26 | ) 27 | 28 | if feature.state.isLoading { 29 | ProgressView() 30 | .progressViewStyle(CircularProgressViewStyle(tint: .gray)) 31 | } 32 | } 33 | } 34 | .enableBackSwipe() 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Presentation/MyPage/Withdraw/ServerWithdraw.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ServerWithdraw.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/23/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ServerWithdraw: View { 11 | @EnvironmentObject var router: RouterRegistry 12 | 13 | var body: some View { 14 | VStack(alignment: .center, spacing: 0) { 15 | WithSuhyeonTopNavigationBar(title: "탈퇴하기", rightIcon: .icXclose24, onTapRight: { 16 | router.popBack() 17 | }) 18 | Spacer() 19 | 20 | VStack(alignment: .center, spacing: 9) { 21 | Text("가입은 맘대로였지만,\n탈퇴는 아니랍니다?") 22 | .font(.body01B) 23 | .foregroundColor(.primary900) 24 | 25 | Text("탈퇴하고 싶다면\n우리를 찾아봐요^^") 26 | .font(.body01B) 27 | .foregroundColor(.primary900) 28 | } 29 | 30 | Spacer() 31 | 32 | Image(image: .imgWithDraw) 33 | .resizable() 34 | .scaledToFill() 35 | .frame(width: 425, height: 358) 36 | .clipped() 37 | } 38 | .edgesIgnoringSafeArea(.bottom) 39 | } 40 | } 41 | 42 | #Preview { 43 | ServerWithdraw() 44 | } 45 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Presentation/SignUp/SignUpContentCase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SignUpContentCase.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/15/25. 6 | // 7 | 8 | import Foundation 9 | 10 | public enum SignUpContentCase: CaseIterable { 11 | case termsOfServiceView 12 | case authenticationView 13 | case nickNameView 14 | case birthYearView 15 | case genderView 16 | case profileImageView 17 | case activeAreaView 18 | 19 | var title: String { 20 | switch self { 21 | case .termsOfServiceView: 22 | return "수현이랑\n서비스 이용약관" 23 | case .authenticationView: 24 | return "본인인증을 위한\n휴대폰 번호 인증이 필요해요" 25 | case .nickNameView: 26 | return "수현이랑에서 사용할\n닉네임을 입력해주세요" 27 | case .birthYearView: 28 | return "태어난 년도를\n선택해주세요" 29 | case .genderView: 30 | return "성별을\n선택해주세요" 31 | case .profileImageView: 32 | return "프로필 이미지를\n등록해주세요" 33 | case .activeAreaView: 34 | return "자주 활동하는\n지역을 선택해주세요" 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Presentation/SignUp/View/ActiveAreaView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ActiveAreaView.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 김예지 on 1/15/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ActiveAreaView: View { 11 | @EnvironmentObject var signUpFeature: SignUpFeature 12 | 13 | var body: some View { 14 | VStack(spacing: 0) { 15 | WithSuhyeonLocationSelect( 16 | withSuhyeonLocation: signUpFeature.state.locationOptions, 17 | selectedMainLocationIndex: signUpFeature.state.mainLocationIndex, 18 | selectedSubLocationIndex: signUpFeature.state.subLocationIndex, 19 | onTabSelected: { mainIndex, subIndex in 20 | signUpFeature.send(.updateLocation(mainIndex, subIndex)) 21 | } 22 | ) 23 | .frame(maxHeight: .infinity) 24 | } 25 | .frame(maxHeight: .infinity) 26 | } 27 | } 28 | 29 | 30 | #Preview { 31 | ActiveAreaView() 32 | } 33 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Presentation/Splash/SplashView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SplashView.swift 3 | // WithSuhyeon-iOS 4 | // 5 | // Created by 우상욱 on 1/24/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | import Lottie 11 | 12 | struct SplashView: View { 13 | @EnvironmentObject var router: RouterRegistry 14 | @StateObject var feature = SplashFeature() 15 | var body: some View { 16 | ZStack { 17 | LottieView(animation: .named("splash")) 18 | .configure{ lottieView in 19 | lottieView.animationSpeed = 1 20 | } 21 | .playing() 22 | .resizable() 23 | .scaledToFit() 24 | .frame(width: 500, height: 500) 25 | } 26 | .onAppear { 27 | feature.send(.enterScreen) 28 | } 29 | .onReceive(feature.sideEffectSubject) { sideEffect in 30 | switch sideEffect { 31 | 32 | case .navigateToStartView: 33 | router.clear() 34 | router.navigate(to: .startView) 35 | case .navigateToMainView: 36 | router.clear() 37 | router.navigate(to: .main(fromSignUp: false, nickname: "")) 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOS/WithSuhyeon-iOS.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.applesignin 6 | 7 | Default 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOSTests/WithSuhyeon_iOSTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuhyeon_iOSTests.swift 3 | // WithSuhyeon-iOSTests 4 | // 5 | // Created by 우상욱 on 1/8/25. 6 | // 7 | 8 | import Testing 9 | @testable import WithSuhyeon_iOS 10 | 11 | struct WithSuhyeon_iOSTests { 12 | 13 | @Test func example() async throws { 14 | // Write your test here and use APIs like `#expect(...)` to check expected conditions. 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /WithSuhyeon-iOS/WithSuhyeon-iOSUITests/WithSuhyeon_iOSUITestsLaunchTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WithSuhyeon_iOSUITestsLaunchTests.swift 3 | // WithSuhyeon-iOSUITests 4 | // 5 | // Created by 우상욱 on 1/8/25. 6 | // 7 | 8 | import XCTest 9 | 10 | final class WithSuhyeon_iOSUITestsLaunchTests: XCTestCase { 11 | 12 | override class var runsForEachTargetApplicationUIConfiguration: Bool { 13 | true 14 | } 15 | 16 | override func setUpWithError() throws { 17 | continueAfterFailure = false 18 | } 19 | 20 | @MainActor 21 | func testLaunch() throws { 22 | let app = XCUIApplication() 23 | app.launch() 24 | 25 | // Insert steps here to perform after app launch but before taking a screenshot, 26 | // such as logging into a test account or navigating somewhere in the app 27 | 28 | let attachment = XCTAttachment(screenshot: app.screenshot()) 29 | attachment.name = "Launch Screen" 30 | attachment.lifetime = .keepAlways 31 | add(attachment) 32 | } 33 | } 34 | --------------------------------------------------------------------------------